/**
* Archivo principal de la administracion grafica de la aplicacion EMA Libre.
*
* Archivo de inicio el entorno grafico GUI del sistema EMA Libre que nos
* brinda una pantalla con las opciones: Configuracion general del sistema,
* ABM de Redes Meteorologicas,Visualizacion del sensores e informacion enviadas a la redes y
* reportes de log, como historicos registrados.
*
* LICENSE: This file is part of EMA Libre.
* EMA Libre is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EMA Libre is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EMA Libre. If not, see .
*
* @copyright Copyright (c) 2019 GUGLER (http://www.gugler.com.ar)
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL License
* @version 3.0
* @link http://www.gugler.com.ar
* @since File available since Release 3.0
*/
// **********************Dependencias (unificadas) **************************
// Este bloque detecta si estamos en NW.js (desktop) o en un navegador (web)
// y exporta las variables necesarias para el resto del archivo.
var configGeneralEMA, configGlobalEMA, funcionesActualizar, EMA, gui, os, win;
var _IS_NW = false;
const iconoEncendido = './gui_common/iconos/icono_enc.png'; // Imagen del Icono Encendido
const iconoApagado = './gui_common/iconos/icono_off.png'; // Imagen del Icono Apagado
const iconoPublicado = './gui_common/iconos/icono_pub.png'; // Imagen del Icono Prublicado --> no utilizada
const iconoNeutro = '../gui_common/img/neutro.webp'; // Imagen del Icono Neutro
const iconoControlTrue = '../gui_common/img/ok.webp'; // Imagen de Control TRUE
const iconoControlFalse = '../gui_common/img/no.webp'; // Imagen de Control FALSE
try {
_IS_NW = (typeof process !== 'undefined' && process.versions && process.versions['nw']);
} catch (e) { _IS_NW = false; }
// Si estamos en NW.js, cargamos los módulos locales
if (_IS_NW) {
configGeneralEMA = require('./../conf/ConfiguracionGeneral.js'); // Configuracion General
configGlobalEMA = require('./../conf/ConfiguracionGlobal.js'); // Configuracion Global
funcionesActualizar = require('./../core/actualizar.js'); // Se incluye el core de EMA.
EMA = require('./../core/ema.js'); // Se incluye el core de EMA.
gui = require('nw.gui'); // Libreria Grafica
os = require('os'); // Libreria del sistema operativo
win = gui.Window.get(); // ventana actual
// **********************Iconizado / Menu Superior *********************************************************
gui.App.clearCache(); // Se limpia cache
win = gui.Window.get(); // Se obtiene la ventana actual
// Crear el icono en el tray
function createTray() {
if (tray) return; // Evitar duplicados
// Crear menú contextual (sin 'menubar')
const menu = new nw.Menu();
menu.append(new nw.MenuItem({ type: 'checkbox', label: 'box1' }));
menu.append(new nw.MenuItem({
label: 'Iniciar',
click: () => { if (typeof INICIAR === 'function') INICIAR(); }
}));
menu.append(new nw.MenuItem({
label: 'Detener',
click: () => { if (typeof DETENER === 'function') DETENER(); }
}));
menu.append(new nw.MenuItem({ type: 'separator' }));
menu.append(new nw.MenuItem({
label: 'Mostrar ventana',
click: () => {
win.show();
win.restore();
win.focus();
win.setShowInTaskbar(true);
removeTray();
}
}));
menu.append(new nw.MenuItem({
label: 'Ocultar ventana',
click: () => {
win.hide();
win.setShowInTaskbar(false);
}
}));
menu.append(new nw.MenuItem({ type: 'separator' }));
menu.append(new nw.MenuItem({
label: 'Salir',
click: () => {
if (typeof EMA !== 'undefined' && typeof EMA.Salir === 'function') EMA.Salir();
nw.App.closeAllWindows();
nw.App.quit();
}
}));
// Crear tray icon
tray = new nw.Tray({
title: 'EmaLibre Carpincho',
icon: iconoApagado,
});
tray.menu = menu;
// Click izquierdo: mostrar ventana
tray.on('click', () => {
console.log('Tray icon clicked');
win.show();
win.restore();
win.focus();
win.setShowInTaskbar(true);
removeTray();
if (typeof MuestraRegistroActual === 'function') MuestraRegistroActual(false);
if (typeof Graficos === 'function') Graficos();
if (typeof ClimaActual === 'function') ClimaActual();
});
// Click derecho: abrir menú manualmente si el entorno no lo hace
tray.on('right-click', () => {
console.log('Tray icon right-clicked');
tray.menu.popup();
});
// Doble click: también mostrar
tray.on('double-click', () => {
win.show();
win.focus();
win.setShowInTaskbar(true);
removeTray();
});
}
nw.Window.get().on('loaded', createTray);
// Captura el redimencionamiento de la ventana
win.on('resize', (width, height) => {
if (width < 775 && height < 555) { win.zoomLevel = -2.4; }
if (width > 775 && height > 555) { win.zoomLevel = -1.8; }
if (width > 800 && height > 600) { win.zoomLevel = -1.5; }
if (width > 850 && height > 690) { win.zoomLevel = -0.6; }
if (width > 1000 && height > 800) { win.zoomLevel = 0; }
if (width > 1200 && height > 820) { win.zoomLevel = 0.3; }
if (width > 1200 && height > 900) { win.zoomLevel = 0.9; }
if (width > 1400 && height > 1000) { win.zoomLevel = 1.2; }
});
} else {
// Entorno Web: cargamos la configuración vía HTTP y exponemos wrappers mínimos
configGeneralEMA = undefined;
configGlobalEMA = undefined;
funcionesActualizar = undefined;
EMA = undefined;
gui = undefined;
os = undefined;
win = undefined;
// Obtener configs desde endpoints del servidor
if (typeof $ !== 'undefined') {
$.get('/configGeneralEMA', function (data) { configGeneralEMA = data; });
$.get('/configGlobalEMA', function (data) { configGlobalEMA = data; });
}
// Definir wrappers ligeros para funciones que el código usa (compatibilidad)
EMA = {
Conectar: function () { if (typeof $ !== 'undefined') { $.get('/iniciar'); } },
Detener: function () { if (typeof $ !== 'undefined') { $.get('/detener'); } },
IncrementarRepeticionesConError: function () { if (typeof $ !== 'undefined') { $.get('/IncrementarRepeticionesConError'); } },
RepeticionesConError: function () { if (typeof $ !== 'undefined') { return $.get('/RepeticionesConError'); } },
HayPendientes: function () { if (typeof $ !== 'undefined') { return $.get('/HayPendientes'); } }
};
funcionesActualizar = {
Control: function (cb) { if (cb) cb(false, null, null); },
Descargar: function () {},
Descomprimir: function () {},
Desplegar: function () {},
LanzarAplicativoIndependiente: function () {}
};
}
// **********************Vairales Generales*********************
let tray = null;
var UltimoReg;
var Ant_UltimoReg;
var ModeloVisor; // Variables Generales - Registros recolectados
var destanqueo = 0;
var intervaloBarra = 0;
var cant = 0;
var tiempovisor=99;
const esperar = ms => new Promise(function(resolve){setTimeout(resolve, ms);});
//new gui.Shortcut({ key: 'F11', active: function () { win.toggleFullscreen(); } })
// **********************Funciones Principales de la GUI *****************************************************
async function cargarInterfaces() {
let interfaces;
if (_IS_NW) {
interfaces = os.networkInterfaces();
} else {
interfaces = await $.get('/interfaces');
}
return interfaces;
}
function INICIAR () {
if (configGeneralEMA.ConfGeneral.Modo === 'Visor') { // se comprueba el modo
HABLA(0, 'Se inicio en modo Visor', 'success');
$('#signal').addClass('parpadea');
} else {
EMA.Conectar();
HABLA(0, 'Se inicio en modo Recolector', 'success');
$('#signal').addClass('parpadea');
}
if (_IS_NW) tray.icon = iconoEncendido;
$('td#barralateral').css('background-color', '#11881161');
$('#estado').html('En Linea');
$('#mensaje').html('Encendido');
$('#botoniniciar').attr('disabled', true);
$('#botondetener').attr('disabled', false);
if (_IS_NW) { RegistroActual();}else{RegistroActualW();}
// Asegurar que no haya intervalos duplicados
if (intervaloBarra) {
clearInterval(intervaloBarra);
}
// Iniciar nuevo intervalo y guardarlo
intervaloBarra = window.setInterval(function () {
try {
BarradeProgreso();
} catch (e) {
console.error('Error en BarradeProgreso:', e);
// Reintentar iniciar el intervalo si falla
clearInterval(intervaloBarra);
intervaloBarra = window.setInterval(function () { BarradeProgreso(); }, 200);
}
}, 200);
}
async function iniciarAutomaticamente () {
EstadoMenuInicio();
if (configGeneralEMA.ConfGeneral.inicio_automatico) {
await esperar(4000);
HABLA(0, 'Iniciando Automaticamente..', 'info');
if ($('#mensaje').html() === 'Encienda EMA Libre' || $('#mensaje').html() === 'EMA Libre se encuentra detenida' || $('#mensaje').html())
await esperar(5000);
INICIAR();
}
if ($('#mensaje').html() === 'Recolectado por IP') {
HABLA(0, 'EMA ya se encuentra recolectando', 'info');
}
}
function killAllTimers() {
// Preservar el intervalo de la barra de progreso si existe
const barraInterval = intervaloBarra;
// Limpiar intervalos conocidos primero
if (intervaloBarra) {
clearInterval(intervaloBarra);
}
// Limpiar timeouts y otros intervalos de manera más selectiva
const timeouts = [];
const intervals = [];
// Crear y detectar últimos IDs usados
timeouts.push(setTimeout(() => {}, 0));
intervals.push(setInterval(() => {}, 9999999));
// Limpiar los detectores
timeouts.forEach(t => clearTimeout(t));
intervals.forEach(i => clearInterval(i));
}
function DETENER () {
clearInterval(intervaloBarra);
killAllTimers();
if (_IS_NW) tray.icon = iconoApagado;
$('td#barralateral').css('background-color', '#ff000030');
$('#estado').html('Fuera de Linea');
$('#img_estado').attr('src', iconoNeutro);
$('#mensaje').html('EMA Libre se encuentra detenida');
$('#mensajedetalle').html('Se detuvo manualmente.');
$('#img_detalle').attr('src', iconoNeutro);
$('#img_mensaje').attr('src', iconoNeutro);
$('#botoniniciar').attr('disabled', false);
$('#botondetener').attr('disabled', true);
if (configGeneralEMA.ConfGeneral.Modo === 'Visor') { // se comprueba el modo
HABLA(0, 'Modo visor detenido', 'error');
$('#signal').removeClass('parpadea');
} else {
EMA.Detener();
HABLA(0, 'Modo Recolector detenido', 'error');
$('#signal').removeClass('parpadea');
}
}
async function redimensionarInicio ()
{
$('#loadinicio').attr('src', '../gui_common/iconos/icono_app_guina.webp');
await esperar(500);
$('#loadinicio').attr('src', '../gui_common/iconos/icono_app.webp');
await esperar(600);
$('#cargador').empty();
$('#cargador').remove();
$('#principal').show();
if (_IS_NW) {
win.setMinimumSize(700, 500);
win.setMaximumSize(4000, 2000);
win.maximize();
}
HABLA(0, '...', 'info');
await esperar(1000);
HABLA(0, 'Bienvenido a Ema Libre Cliente, me llaman Carpincho.', 'info');
iniciarAutomaticamente();
}
async function Actualizar () {
var plataforma = process.platform;
var SO_WIN = plataforma.indexOf('win');
if (SO_WIN === 0) {
funcionesActualizar.Control(function (resultado, VersionActual, nueva) {
$('#botonactualizar').attr('disabled', true);
if (resultado && VersionActual) {
DETENER();
HABLA(0, 'Descargando nueva versión de Carpincho: ' + nueva, 'info');
NProgress.set(0);
$('#mensajebarra').html('Descargando nueva versión, espere ....');
funcionesActualizar.Descargar(nueva, function (resultadoact, avance, porcentaje) {
NProgress.set(porcentaje/100);
$('#mensajebarra').html(avance);
if (resultadoact && avance) {
NProgress.set(1);
$('#mensajebarra').html('Descomprimiendo la nueva versión, espere ....');
HABLA(0, 'Descomprimiendo la nueva versión, espere ....', 'info');
funcionesActualizar.Descomprimir(function (resultadoact) {
if (resultadoact) {
$('#mensajebarra').html('Borrado del archivo descargado, espere ....');
funcionesActualizar.Desplegar(function (resultado) {
if (resultado) {
HABLA(0, 'Ejecutando App de Actualizacion, espere...', 'info');
setTimeout(funcionesActualizar.LanzarAplicativoIndependiente, 9000);
} else {
HABLA(0, 'Ocurrio un problema en el despliege, intente mas tarde', 'error');
}
});
} else {
HABLA(0, 'Ocurrio un problema descomprimiendo, intente mas tarde', 'error');
}
});
}
if (!resultadoact && !avance) {
HABLA(0, 'Ocurrio un problema en la descarga, intente mas tarde', 'error');
}
});
}
if (!resultado && VersionActual) {
HABLA(0, 'No hay versiones nuevas disponibles', 'success');
}
if (!resultado && !VersionActual) {
HABLA(0, 'No se pudo conectar al servidor de versiones,pruebe mas tarde...', 'error');
}
});
} else {
HABLA(0, 'Esta opción solo es válida para sistemas operativos Windows.', 'warn');
await esperar(4000);
HABLA(0, 'Pero usted puede actualizar EMA Libre con su sistema de paquetes nativo.', 'info');
await esperar(4000);
HABLA(0, 'O puede ingresar a https://ema.gugler.com.ar para más información. ', 'info');
}
$('#botonactualizar').attr('disabled', false);
}
async function HABLA (num, mesg, tipo) {
var tamañomsg = mesg.length;
if (num === 0) {
$('#carpincho_img').notify(mesg, {
className: tipo,
position: 'right middle',
autoHideDelay: (tamañomsg * 90)
});
if (configGeneralEMA.ConfGeneral.Audio) {
window.speechSynthesis.cancel();
var voices = window.speechSynthesis.getVoices();
var cantidadVoces = voices.length;
//console.log(cantidadVoces);
if( cantidadVoces > 0){
var seleccionada = voices.filter(function (voice) { return voice.name === configGeneralEMA.ConfGeneral.audioVoces; })[0];
//console.log(seleccionada);
var msg = new SpeechSynthesisUtterance (mesg);
msg.voice = seleccionada;
msg.rate = 1.2;
msg.pitch = 1;
window.speechSynthesis.speak(msg);
msg=null;seleccionada=null;voices=null;cantidadVoces=null;
}
}
}
if ($('#carpincho_img').attr('src') === '../gui_common/iconos/icono_app.webp') {
$('#carpincho_img').attr('src', '../gui_common/iconos/icono_app_habla.webp');
} else {
$('#carpincho_img').attr('src', '../gui_common/iconos/icono_app.webp');
}
num++;
if (num < tamañomsg) {
await esperar(90);
HABLA(num ,mesg ,0);
} else {
$('#carpincho_img').attr('src', '../gui_common/iconos/icono_app.webp');
//LimpiarMemoria(true);
}
num=null;tamañomsg = null;
}
async function GUIÑA (num)
{
if ($('#carpincho_img').attr('src') === '../gui_common/iconos/icono_app.webp') {
$('#carpincho_img').attr('src', '../gui_common/iconos/icono_app_guina.webp');
} else {
$('#carpincho_img').attr('src', '../gui_common/iconos/icono_app.webp');
}
num++;
if (num < 2) {
await esperar(400);
GUIÑA(num);
} else {
$('#carpincho_img').attr('src', '../gui_common/iconos/icono_app.webp');
}
num =null;
}
async function controlPendientes () {
var pendientes = await EMA.HayPendientes();
var DIVPENDIENTE = document.getElementById('DIVPendientes');
var SPANTANQUE = document.getElementById('Destanqueo');
var DIVModo = document.getElementById('DIVModo');
if (pendientes !== false)
{
DIVPENDIENTE.style.visibility = 'visible';
if ((pendientes < destanqueo)) {SPANTANQUE.style.visibility = 'visible'; } else {SPANTANQUE.style.visibility = 'hidden'; }
destanqueo = pendientes;
$('#Pendientes').html(" Cantidad: " + pendientes + '
');
} else {
destanqueo = 0;
DIVPENDIENTE.style.visibility = 'hidden';
SPANTANQUE.style.visibility = 'hidden';
DIVModo.style.visibility = 'hidden';
}
pendientes = null;
DIVPENDIENTE = null;
SPANTANQUE = null;
DIVModo = null;
return true;
}
async function mostrarEstados (EstadoSensores) {
// Se consulta por los sensores
if(configGeneralEMA.ConfGeneral.Modo === "Recolector_IP")
{
if (EstadoSensores === "0") {
$('#signal').attr('src', '../gui_common/img/signal.webp');
$('#signal').attr('title', 'Estacion IP/WIFI Conectada');
}else{
$('#signal').attr('src', '../gui_common/img/no_signal.webp');
if(_IS_NW){
if(EMA.UltimoRegistro()){$('#signal').attr('title', 'Bateria Baja Controlar'); HABLA(0, 'Bateria baja de la estacion IP/WIFI externa', 'warn');}
}
}
$('#signal').addClass('parpadea');
$('#signal').tooltip('dispose');
$('#signal').tooltip();
}else{
var Resultado = !((EstadoSensores.lost_sensor_contact) || (EstadoSensores.rain_overflow));
if (Resultado && (configGeneralEMA.ConfGeneral.Modo !== 'Visor')) {
$('#signal').attr('src', '../gui_common/img/signal.webp');
$('#signal').addClass('parpadea');
} else {
if (!EstadoSensores.lost_sensor_contact) {
HABLA(0, 'Perdida de la señal de Radio Frecuencia', 'warn');
}
if (!EstadoSensores.rain_overflow) {
HABLA(0, 'Sensor de lluvia externo sobrecargado', 'warn');
}
$('#signal').attr('src', '../gui_common/img/no_signal.webp');
$('#signal').addClass('parpadea');
win.requestAttention(3);
}
EstadoSensores = null;
Resultado = null;
}
}
async function RegistroActualW (barratermino)
{
if (['Recolector_USB', 'Recolector_IP'].includes(configGeneralEMA.ConfGeneral.Modo))
{ // se comprueba el modo se encuentra en Recolector
if(barratermino == true){
//BARRA TERMINO
//console.log('ENTRO AL BARRA TERMINO RECOLECTOR');
await esperar(100);
EstadoMenuInicio();
await esperar(100);
MuestraRegistroActual(true);
await esperar(100);
Graficos();
await esperar(100);
ClimaActual();
await esperar(1500);
RegistroPublicado();
cant=0;
}
$.get("/EMA_estado", async function(data, status){
var EstadoEMA = data;
if (EstadoEMA[0] === true)
{
$('#img_detalle').attr('src', iconoControlTrue);
$('#img_mensaje').attr('src', iconoControlTrue);
if(configGeneralEMA.ConfGeneral.Modo === "Recolector_IP")
{
$('#mensaje').html('Recolectado por IP.');
}else{
$('#mensaje').html('Recolectando.');
$('#mensajedetalle').html('Operando.');
}
controlPendientes();
$.get("/EstadoSensores", function(data, status){
var EstadoSensores = data;
if(EstadoSensores !== false)
{
mostrarEstados(EstadoSensores);
}else{EstadoSensores=null;}
});
await esperar(1000);
//console.log('Consultando por el ultimo registro...');
var cantidad_E = await EMA.RepeticionesConError();
$.get("/UltimoRegistro", function(data, status){
UltimoReg = data;
if (UltimoReg == false) {
// Se consulta por la cantidad de errores
if (cantidad_E > 3) {
if(configGeneralEMA.ConfGeneral.Modo === "Recolector_IP")
{
$('#mensaje').html('Recolectado por IP.');
$('#img_mensaje').attr('src', iconoNeutro);
$('#mensajedetalle').html('(' +cantidad_E + ') Sincronizando ...');
// HABLA(0, 'No se pueden obtener registros (Intentos ' + EMA.RepeticionesConError() + '). Revise por favor su configuración IP/WIFI de la estación.', 'error');
EMA.IncrementarRepeticionesConError();
} else{
$('#img_mensaje').attr('src', iconoNeutro);
$('#img_detalle').attr('src', iconoNeutro);
// HABLA(0, 'No se pueden obtener registros (Intentos ' + EMA.RepeticionesConError() + '). Desconecte y vuelva a conectar el USB. Se prueba reiniciar el servicio.', 'error');
// esperar(15000);
// DETENER();
// esperar(5000);
// INICIAR();
}
RegistroActualW();
return false;
} else {
$('#mensajedetalle').html('(' + cantidad_E + ') Sincronizando ...');
if(configGeneralEMA.ConfGeneral.Modo === "Recolector_IP") EMA.IncrementarRepeticionesConError();
$('#img_detalle').attr('src', iconoNeutro);
esperar(2000);
RegistroActualW();
return false;
}
}
});
} else {
$('#mensaje').html('EmaLibre detenida.');
$('#img_mensaje').attr('src', iconoControlFalse);
$('#mensajedetalle').html(EstadoEMA[1]);
$('#img_detalle').attr('src', iconoControlFalse);
await esperar(5000);
RegistroActualW();
return false;
}
});
} else { // Modo visor
if(barratermino == true){
//BARRA TERMINO
await esperar(100);
EstadoMenuInicio();
await esperar(100);
MuestraRegistroActual(true);
await esperar(100);
Graficos();
await esperar(100);
ClimaActual();
cant=0;
}
$('#signal').attr('src', 'img/visor.webp');
$.get("/Visor", function(data, status){
if (data[0] != null) {
HABLA(0, 'No se pueden obtener datos del servidor. ' + data[0], 'info');
$('#signal').removeClass('parpadea');
setTimeout(function(){RegistroActualW();}, 10000);
} else {
$('#signal').addClass('parpadea');
var DIVModo = document.getElementById('DIVModo');
DIVModo.style.visibility = 'visible';
document.getElementById('DIVModo').innerHTML = " Modo Visor
" + data[1].pais + ', ' + data[1].ciudad + "
" + data[1].modelo + '';
UltimoReg = data[1].registros[0];
ModeloVisor = data[1].nombre;
// se convierte la fecha
var db = new Date(data[1].registros[0].fecha);
var minutos = db.getMinutes();
if (minutos <= 9) { minutos = '0' + minutos; }
var hora = db.getHours();
if (hora <= 9) { hora = '0' + hora; }
var mes = db.getMonth() + 1;
if (mes <= 9) { mes = '0' + mes; }
var dia = db.getDate();
if (dia <= 9) { dia = '0' + dia; }
var segundo = db.getSeconds();
if (segundo <= 9) { segundo = '0' + segundo; }
var fecha = dia + '/' + mes + '/' + db.getFullYear() + ' ' + hora + ':' + minutos + ':' + segundo;
UltimoReg.fecha = fecha;
fecha=null;dia=null;mes=null;segundo=null;minutos=null;hora=null;db=null;
// ver acumulados de lluvia
UltimoReg.lloviendo = data[1].registros[0].lluvia_actual;
UltimoReg.lluvia_acu_hora = data[1].registros[0].lluvia_acumulado_hora;
UltimoReg.lluvia_acu_diaria = data[1].registros[0].lluvia_acumulado_diario;
UltimoReg.lluvia_acumulado_total = data[1].registros[0].lluvia_acumulado_total;
// Maximas y minimas, no llegan de EMACENTER, por el momento se setean en 0.
UltimoReg.temperatura_externa_max_dia = 0;
UltimoReg.temperatura_externa_min_dia = 0;
UltimoReg.temperatura_interna_max_dia = 0;
UltimoReg.temperatura_interna_min_dia = 0;
UltimoReg.punto_de_rocio_max_dia = 0;
UltimoReg.punto_de_rocio_min_dia = 0;
UltimoReg.humedad_externa_max_dia = 0;
UltimoReg.humedad_externa_min_dia = 0;
UltimoReg.humedad_interna_max_dia = 0;
UltimoReg.humedad_interna_min_dia = 0;
UltimoReg.luxer_intencidad_max_dia = 0;
UltimoReg.luxer_intencidad_min_dia = 0;
UltimoReg.luxer_uv_max_dia = 0;
UltimoReg.luxer_uv_min_dia = 0;
UltimoReg.presion_relativa_max_dia = 0;
UltimoReg.presion_relativa_min_dia = 0;
tiempovisor = tiempovisor - 0.2;
}
});
}
EstadoEMA = null;
}
async function RegistroActual (barratermino)
{
//console.log('ENTRO REGISTRO ACTUAL');
if (['Recolector_USB', 'Recolector_IP'].includes(configGeneralEMA.ConfGeneral.Modo))
{ // se comprueba el modo se encuentra en Recolector
if(barratermino == true){
//BARRA TERMINO
await esperar(100);
EstadoMenuInicio();
await esperar(100);
if (win.x > -10000) MuestraRegistroActual(true);
await esperar(100);
if (win.x > -10000) Graficos();
await esperar(100);
if (win.x > -10000) ClimaActual();
await esperar(1500);
if (win.x > -10000) RegistroPublicado();
cant=0;
}
var EstadoEMA = EMA.Estado();
if (EstadoEMA[0] === true)
{
$('#img_detalle').attr('src', iconoControlTrue);
$('#img_mensaje').attr('src', iconoControlTrue);
if(configGeneralEMA.ConfGeneral.Modo === "Recolector_IP")
{
$('#mensaje').html('Recolectado por IP.');
}else{
$('#mensaje').html('Recolectando.');
$('#mensajedetalle').html('Operando.');
}
controlPendientes();
UltimoReg = EMA.UltimoRegistro();
var EstadoSensores = EMA.EstadoSensores();
if(EstadoSensores !== false) { mostrarEstados(EstadoSensores);}else{EstadoSensores=null;}
if (UltimoReg == false)
{
// Se consulta por la cantidad de errores
if (EMA.RepeticionesConError() > 3) {
if(configGeneralEMA.ConfGeneral.Modo === "Recolector_IP")
{
$('#mensaje').html('Recolectado por IP.');
$('#img_mensaje').attr('src', iconoNeutro);
$('#mensajedetalle').html('(' + EMA.RepeticionesConError() + ') Sincronizando ...');
// HABLA(0, 'No se pueden obtener registros (Intentos ' + EMA.RepeticionesConError() + '). Revise por favor su configuración IP/WIFI de la estación.', 'error');
EMA.Configuracion.RepeticionesConError += 1;
await esperar(5000);
} else{
$('#img_mensaje').attr('src', iconoNeutro);
$('#img_detalle').attr('src', iconoNeutro);
HABLA(0, 'No se pueden obtener registros (Intentos ' + EMA.RepeticionesConError() + '). Desconecte y vuelva a conectar el USB. Se prueba reiniciar el servicio.', 'error');
await esperar(15000);
DETENER();
await esperar(5000);
INICIAR();
}
RegistroActual();
return false;
} else {
$('#mensajedetalle').html('(' + EMA.RepeticionesConError() + ') Sincronizando ...');
if(configGeneralEMA.ConfGeneral.Modo === "Recolector_IP") EMA.Configuracion.RepeticionesConError += 1;
$('#img_detalle').attr('src', iconoNeutro);
await esperar(2000);
RegistroActual();
return false;
}
}
} else {
$('#mensaje').html('EmaLibre detenida.');
$('#img_mensaje').attr('src', iconoControlFalse);
$('#mensajedetalle').html(EstadoEMA[1]);
$('#img_detalle').attr('src', iconoControlFalse);
await esperar(5000);
RegistroActual();
return false;
}
} else { // Modo visor
if(barratermino == true){
//BARRA TERMINO
await esperar(100);
EstadoMenuInicio();
await esperar(100);
if (win.x > -10000) MuestraRegistroActual(true);
await esperar(100);
if (win.x > -10000) Graficos();
await esperar(100);
if (win.x > -10000) ClimaActual();
cant=0;
}
$('#signal').attr('src', '../gui_common/img/visor.webp');
var cantreg = 1;
EMA.Visor(cantreg, function (error, datos) {
if (error != null) {
HABLA(0, 'No se pueden obtener datos del servidor. ' + error, 'info');
$('#signal').removeClass('parpadea');
setTimeout(function(){RegistroActual();}, 10000);
} else {
$('#signal').addClass('parpadea');
var DIVModo = document.getElementById('DIVModo');
DIVModo.style.visibility = 'visible';
document.getElementById('DIVModo').innerHTML = " Modo Visor
" + datos.pais + ', ' + datos.ciudad + "
" + datos.modelo + '';
UltimoReg = datos.registros[0];
ModeloVisor = datos.nombre;
// se convierte la fecha
var db = new Date(datos.registros[0].fecha);
var minutos = db.getMinutes();
if (minutos <= 9) { minutos = '0' + minutos; }
var hora = db.getHours();
if (hora <= 9) { hora = '0' + hora; }
var mes = db.getMonth() + 1;
if (mes <= 9) { mes = '0' + mes; }
var dia = db.getDate();
if (dia <= 9) { dia = '0' + dia; }
var segundo = db.getSeconds();
if (segundo <= 9) { segundo = '0' + segundo; }
var fecha = dia + '/' + mes + '/' + db.getFullYear() + ' ' + hora + ':' + minutos + ':' + segundo;
UltimoReg.fecha = fecha;
fecha=null;dia=null;mes=null;segundo=null;minutos=null;hora=null;db=null;
// ver acumulados de lluvia
UltimoReg.lloviendo = datos.registros[0].lluvia_actual;
UltimoReg.lluvia_acu_hora = datos.registros[0].lluvia_acumulado_hora;
UltimoReg.lluvia_acu_diaria = datos.registros[0].lluvia_acumulado_diario;
UltimoReg.lluvia_acumulado_total = datos.registros[0].lluvia_acumulado_total;
// Maximas y minimas, no llegan de EMACENTER, por el momento se setean en 0.
UltimoReg.temperatura_externa_max_dia = 0;
UltimoReg.temperatura_externa_min_dia = 0;
UltimoReg.temperatura_interna_max_dia = 0;
UltimoReg.temperatura_interna_min_dia = 0;
UltimoReg.punto_de_rocio_max_dia = 0;
UltimoReg.punto_de_rocio_min_dia = 0;
UltimoReg.humedad_externa_max_dia = 0;
UltimoReg.humedad_externa_min_dia = 0;
UltimoReg.humedad_interna_max_dia = 0;
UltimoReg.humedad_interna_min_dia = 0;
UltimoReg.luxer_intencidad_max_dia = 0;
UltimoReg.luxer_intencidad_min_dia = 0;
UltimoReg.luxer_uv_max_dia = 0;
UltimoReg.luxer_uv_min_dia = 0;
UltimoReg.presion_relativa_max_dia = 0;
UltimoReg.presion_relativa_min_dia = 0;
tiempovisor = tiempovisor - 0.2;
}
});
}
EstadoEMA = null;
}
async function BarradeProgreso () {
// const startTime = performance.now();
// Se consulta el tiempo actual del recolector
if (configGeneralEMA.ConfGeneral.Modo != 'Visor')
{ // EN MODO RECOLECTOR IP o USB
// Se pregunta si esta nativo o web
var tiempoActualRecolector;
if (!_IS_NW) {
$.get("/TiempoActualRecolector", function(data, status){
tiempoActualRecolector = data;
if(tiempoActualRecolector[0] !== false || tiempoActualRecolector[1] > 0)
{
if ((tiempoActualRecolector[0] < 98 && tiempoActualRecolector[1] > 0.39) )
{
// CONTINUA ADENTRO
NProgress.set(tiempoActualRecolector[0]/100);
return false;
} else {
// Cuando termine cada barra, publica y luego vuelve al leer el registro actual
cant++;
if(cant == 1){ RegistroActualW(true);} else{return true;};
// solo si esta en modo visor
if (configGeneralEMA.ConfGeneral.Modo === 'Visor') {document.getElementById('RedesMet').innerHTML = "" + ModeloVisor + ': ' + UltimoReg.fecha.substring(10, 20) + '
';}
NProgress.done();
}
}else{ if(cant > 0){enEjecucion = false;return false;}
NProgress.done();
}
});
} else {
tiempoActualRecolector = EMA.TiempoActualRecolector();
// console.log(tiempoActualRecolector);
if(tiempoActualRecolector[0] !== false || tiempoActualRecolector[1] > 0)
{
if ((tiempoActualRecolector[0] < 98 && tiempoActualRecolector[1] > 0.39) )
{
// CONTINUA ADENTRO
if (win.x > -10000)
{ // Solo si no esta minimizado
NProgress.set(tiempoActualRecolector[0]/100);
return false;
}
} else {
// Cuando termine cada barra, publica y luego vuelve al leer el registro actual
cant++;
if(cant == 1){ RegistroActual(true);} else{return true;};
// solo si esta en modo visor
if (configGeneralEMA.ConfGeneral.Modo === 'Visor') {document.getElementById('RedesMet').innerHTML = "" + ModeloVisor + ': ' + UltimoReg.fecha.substring(10, 20) + '
';}
if (win.x > -10000)
{ // Solo si no esta minimizado
NProgress.done();
}
}
}else{ if(cant > 0){return false;}
if (win.x > -10000)
{ // Solo si no esta minimizado
NProgress.done();
}
}
}
} else { // MODO VISOR
if( tiempovisor != 99)
{
if( tiempovisor >= configGeneralEMA.ConfGeneral.Tiempo_de_Recoleccion)
{
tiempovisor = 0;
if (_IS_NW) { RegistroActual(true);}else{RegistroActualW(true);}
if (win.x > -10000) NProgress.done();
}else{
tiempovisor = tiempovisor + 0.2; // se le suma el tiempo del intervalo
var tiempo_barra = ((tiempovisor * 100) / configGeneralEMA.ConfGeneral.Tiempo_de_Recoleccion)/100;
if (win.x > -10000) NProgress.set(tiempo_barra);
}
}
}
UltimoPub = null;aux=null;tiempoActualRecolector = null; tiempo_barra = null;
/* const duration = performance.now() - startTime;
console.log(` Tiempo barra: ${duration}ms`);*/
}
// ********************** Menu Acciones *******************************************************************
async function MenuConfig () {
$('#bloque_secundario').hide();
$('#LlaveR').hide();
$('#bloque_por_IP_WIFI').hide();
if (['Recolector_USB', 'Recolector_IP'].includes($('#Modo').val())) {
$('#LlaveR').attr('disabled', true);
$('#LlaveR').val('');
if ($('#Modo').val() === 'Recolector_USB') {
//nada por ahora :).
}else{ //esta en modo Recolector_IP
//console.log("entro en modo IP");
$('#bloque_secundario').show();
$('#bloque_por_IP_WIFI').show();
let interfaces;
if (_IS_NW) {
interfaces = os.networkInterfaces();
} else {interfaces = await $.get('/interfaces');}
// Limpiar las opciones previas (excepto la de "Seleccionar IP")
const $ipGroup = $('#ipGroup');
$ipGroup.find('option:not([value=""])').remove();
// Recorremos las interfaces de red
let ipEncontrada = false;
for (const name in interfaces) {
for (const iface of interfaces[name]) {
if (iface.family === 'IPv4' && !iface.internal) {
const $option = $('