/** * Este archivo es parte del proyecto EMA Libre * * Contiene el codigo fuente, que brinda la funcionalidad de envio * de datos metorologicos a una RED ABIERTA (ej:Ema Libre Center, wunderground, pws, etc), * siendo la principal la red EMA Libre. * * El codigo, contiene un metodo el cual recibe como parametro una red, y los datos * que se desean enviar a la misma, cada red tiene su configuracion particular la cual es incluida * ej:(require('./redes/wunderground-pws')). * * 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 */ module.exports = { // --- Informacion recibida ------- // PARAMETROS[0][X]: 0-TipoRed, 1-Usuario, 2-Password, 3-Server, 4-Puerto, 5-Ruta, 6 - Llave de Escritura, 7-Nombre de Red // PARAMETROS[1] : Datos meteorologicos registro para enviar // PARAMETROS[2] : Id red // --- Informacion devuelta ------- // cbFunc(nombre_red, estado, error, idRed, ParametrosEnviadosAlaRed) EviarRedesMeteorologicas: function (versionEMA,Parametros, cbFunc) { // Se define las variables. var temperaturaExternaF = Parametros[1].temperatura_externa * (9 / 5) + 32; // En farenheit var temperaturaInternaF = Parametros[1].temperatura_interna * (9 / 5) + 32; // En farenheit var temperaturaExternaC = Parametros[1].temperatura_externa; // En celsius var temperaturaInternaC = Parametros[1].temperatura_interna; // En celsius var puntoDeRocioF = Parametros[1].punto_de_rocio * (9 / 5) + 32; // En farenheit var puntoDeRocioC = Parametros[1].punto_de_rocio; // En celsius var presionRelIn = Parametros[1].presion_relativa * 0.0295299830714; // En inches var presionRelhpa = Parametros[1].presion_relativa; // hpa var vientoEnMh = (Parametros[1].viento_velocidad / 3.6) * 2.2369; // En millas var rafagaEnMh = (Parametros[1].viento_rafagas / 3.6) * 2.2369; // En millas var rafagaEnMs = Parametros[1].viento_rafagas / 3.6; // En m/S var rafagaEnKh = Parametros[1].viento_rafagas; // En Km/h var vientoEnMs = Parametros[1].viento_velocidad / 3.6; // En m/S var vientoEnKh = Parametros[1].viento_velocidad; // En Km/h var vientoEnNudos = (Parametros[1].viento_velocidad) * 0.539957; // En nudos var vientoNombre = Parametros[1].viento_direccion_nombre; // Texto var rafagaEnNudos = (Parametros[1].viento_rafagas) * 0.539957; // En nudos var lluviaHoraMm = Parametros[1].lluvia_acu_hora; // En mm var lluviaHorain = Parametros[1].lluvia_acu_hora * 0.03937008; // En pulgadas/inches var lluviaDiaMm = Parametros[1].lluvia_acu_diaria; // En mm var lluviaDiain = Parametros[1].lluvia_acu_diaria * 0.03937008; // En pulgadas/inches var luxerIntencidad = Parametros[1].luxer_intencidad / 683; // luxerIntencidad en w/m² var luxerIntencidadLux = Parametros[1].luxer_intencidad; // luxerIntencidad en Klux // Fecha Formatos var fechaformato = Parametros[1].fecha.substring(6, 10) + '-' + Parametros[1].fecha.substring(3, 5) + '-' + Parametros[1].fecha.substring(0, 2) + '+' + Parametros[1].fecha.substring(11, 19); // Se pregunta por el tipo de red switch (Parametros[0][0]) { case 'wow': var WOW = require('./redes/wow'); var wow = new WOW(Parametros[0][1], Parametros[0][2]); var idRed = Parametros[2]; wow.resetObservations(); wow.setObservations({ dateutc: Parametros[1].fechaUTC, // fecha actual tempf: temperaturaExternaF, // Temp. Externa humidity: Parametros[1].humedad_externa, // Humedad Externa dewptf: puntoDeRocioF.toFixed(2), // Punto de Rocio winddir: Parametros[1].viento_direccion, // Direccion del Viento windgustmph: rafagaEnMh, // Rafagas windspeedmph: vientoEnMh, // Viento raininm: lluviaHoraMm, // Lluvia Acumulado Hora dailyraininm: lluviaDiaMm, // Lluvia Acumulado Dia baromin: presionRelIn.toFixed(2), // Presion Relativa softwaretype: versionEMA // Software }); var ParametrosTemp1 = JSON.stringify(Parametros, null, 4); wow.sendObservations(function (err, success) { if (err !== null) { cbFunc('wow', 'ERROR', err, idRed, ParametrosTemp1); } else { // codigo de respuesta 430 No enviado - por tiempo limite no superado if (success[0] === 430) { cbFunc('wow', 430, success[1], idRed, ParametrosTemp1);} else{ // codigo de respuesta 429 red congestionada if (success[0] === 429) { cbFunc('wow', 429, success[1], idRed, ParametrosTemp1); } else { cbFunc('wow', 'OK', 'ok', idRed, ParametrosTemp1); } } } }); wow = null; WOW = null; break; case 'wunderground': var WUNDER = require('./redes/wunderground'); var wunder = new WUNDER(Parametros[0][1], Parametros[0][2]); var idRed2 = Parametros[2]; wunder.resetObservations(); wunder.setObservations({ dateutc: 'now', // fecha actual tempf: temperaturaExternaF, // Temp. Externa indoortempf: temperaturaInternaF, // Temp. Interna indoorhumidity: Parametros[1].humedad_interna, // Humedad Interna humidity: Parametros[1].humedad_externa, // Humedad Externa dewptf: puntoDeRocioF.toFixed(2), // Punto de Rocio UV: Parametros[1].luxer_uv, // UV solarradiation: luxerIntencidad.toFixed(2), // Solar radiacion winddir: Parametros[1].viento_direccion, // Direccion del Viento windgustmph: rafagaEnMh.toFixed(2), // Rafagas windspeedmph: vientoEnMh.toFixed(2), // Viento rainin: lluviaHorain.toFixed(2), // Lluvia Acumulado Hora dailyrainin: lluviaDiain.toFixed(2), // Lluvia Acumulado Dia baromin: presionRelIn.toFixed(2), // Presion Relativa softwaretype: versionEMA // Software }); var ParametrosTemp2 = JSON.stringify(Parametros, null, 4); wunder.sendObservations(function (err, success) { if (err != null) { cbFunc('wunderground', 'ERROR', err, idRed2, ParametrosTemp2); } else { cbFunc('wunderground', 'OK', 'ok', idRed2, ParametrosTemp2); } }); wunder = null; WUNDER = null; break; case 'pws': var PW = require('./redes/pws'); var idRed3 = Parametros[2]; var pw = new PW(Parametros[0][1], Parametros[0][2]); pw.resetObservations(); pw.setObservations({ dateutc: fechaformato, // Fecha actual tempf: temperaturaExternaF.toFixed(2), // Temp. Externa humidity: Parametros[1].humedad_externa, // Humedad Externa dewptf: puntoDeRocioF.toFixed(2), // Punto de Rocio UV: Parametros[1].luxer_uv, // UV solarradiation: luxerIntencidad.toFixed(2), // Solar radiacion windspeedmph: vientoEnMh.toFixed(2), // Viento winddir: Parametros[1].viento_direccion, // Direccion del Viento windgustmph: rafagaEnMh.toFixed(2), // Rafagas rainin: lluviaHorain.toFixed(2), // Lluvia Acumulado Hora dailyrainin: lluviaDiain.toFixed(2), // Lluvia Acumulado Dia baromin: presionRelIn.toFixed(2), // Presion Relativa softwaretype: versionEMA, // Software action: 'updateraw' // Tipo de actualizacion }); var ParametrosTemp3 = JSON.stringify(Parametros, null, 4); pw.sendObservations(function (err, success) { if (err != null) { cbFunc('pws', 'ERROR', err, idRed3, ParametrosTemp3); } else { cbFunc('pws', 'OK', 'ok', idRed3, ParametrosTemp3); } }); pw = null; PW = null; break; case 'windguru': var WG = require('./redes/windguru'); var windguru = new WG(Parametros[0][1], Parametros[0][2]); var idRed4 = Parametros[2]; windguru.resetObservations(); windguru.setObservations({ interval: 60, precip_interval: 3600, wind_avg: vientoEnNudos.toFixed(2), // Viento wind_max: rafagaEnNudos.toFixed(2), // Viento Rafagas wind_direction: Parametros[1].viento_direccion, // Viento Direccion temperature: temperaturaExternaC, // Temperatura Externa rh: Parametros[1].humedad_externa, // Humedad Externa mslp: presionRelhpa.toFixed(2), // Presion Relativa precip: lluviaHoraMm // Lluvia Acumulado Hora }); var ParametrosTemp4 = JSON.stringify(Parametros, null, 4); windguru.sendObservations(function (err, success) { if (err != null) { cbFunc('windguru', 'ERROR', err, idRed4, ParametrosTemp4); } else { cbFunc('windguru', 'OK', 'ok', idRed4, ParametrosTemp4); } }); windguru = null; WG = null; break; case 'emacenter': var idRed5 = Parametros[2]; var EMACENTER_PARTICULAR = require('./redes/emacenter'); var centerp = new EMACENTER_PARTICULAR(Parametros[0][3], Parametros[0][4], Parametros[0][6]); // Se convierte la informacion a la medidas que la red utiliza if (Parametros[1].luxer_uv == null || Parametros[1].luxer_intencidad == null) { Parametros[1].luxer_uv = 0; Parametros[1].luxer_intencidad = 0; } centerp.resetObservations(); centerp.setObservations({ fecha: Parametros[1].fechaISO, // fecha actual temperatura_externa: temperaturaExternaC, // Temp. Externa temperatura_interna: temperaturaInternaC, // Temp. Interna humedad_interna: Parametros[1].humedad_interna, // Humedad Interna % humedad_externa: Parametros[1].humedad_externa, // Humedad Externa % punto_de_rocio: puntoDeRocioC, // Punto de Rocio luxer_uv: Parametros[1].luxer_uv, // UV luxer_intencidad: luxerIntencidadLux.toFixed(2), // Solar radiacion viento_direccion: Parametros[1].viento_direccion, // Direccion del Viento viento_direccion_nombre: vientoNombre, // Direccion Nombre viento_rafagas: rafagaEnKh, // Rafagas viento_velocidad: vientoEnKh, // Viento lluvia_actual: Parametros[1].lloviendo, // Lluvia Actual lluvia_acumulado_hora: lluviaHoraMm, // Lluvia Acumulado lluvia_acumulado_diario: lluviaDiaMm, // Lluvia Acumulado Dia lluvia_acumulado_total: Parametros[1].lluvia_acumulado_total, // Lluvia Acumulado Total presion_relativa: presionRelhpa, // Presion Relativa presion_absoluta: presionRelhpa, // Presion Absoluta software: versionEMA, // Software tanque: Parametros[1].tanque // Si el registro es tanqueado (true o false) }); var ParametrosTemp5 = JSON.stringify(Parametros, null, 4); centerp.sendObservations(function (err, success) { if (err != null) { cbFunc('emacenter', 'ERROR', err, idRed5, ParametrosTemp5); } else { cbFunc('emacenter', 'OK', 'ok', idRed5, ParametrosTemp5); } }); centerp = null; EMACENTER_PARTICULAR = null; break; case 'emacentergugler': var idRed6 = Parametros[2]; var EMACENTER = require('./redes/emacenter'); var center = new EMACENTER('emacenter.gugler.com.ar', 443, Parametros[0][6]); // Se convierte la informacion a la medidas que la red utiliza if (Parametros[1].luxer_uv == null || Parametros[1].luxer_intencidad == null) { Parametros[1].luxer_uv = 0; Parametros[1].luxer_intencidad = 0; } center.resetObservations(); center.setObservations({ fecha: Parametros[1].fechaISO, // fecha actual temperatura_externa: temperaturaExternaC, // Temp. Externa temperatura_interna: temperaturaInternaC, // Temp. Interna humedad_interna: Parametros[1].humedad_interna, // Humedad Interna % humedad_externa: Parametros[1].humedad_externa, // Humedad Externa % punto_de_rocio: puntoDeRocioC, // Punto de Rocio luxer_uv: Parametros[1].luxer_uv, // UV luxer_intencidad: luxerIntencidadLux.toFixed(2), // Solar radiacion viento_direccion: Parametros[1].viento_direccion, // Direccion del Viento viento_direccion_nombre: vientoNombre, // Direccion Nombre viento_rafagas: rafagaEnKh, // Rafagas viento_velocidad: vientoEnKh, // Viento lluvia_actual: Parametros[1].lloviendo, // Lluvia Actual lluvia_acumulado_hora: lluviaHoraMm, // Lluvia Acumulado lluvia_acumulado_diario: lluviaDiaMm, // Lluvia Acumulado Dia lluvia_acumulado_total: Parametros[1].lluvia_acumulado_total, // Lluvia Acumulado Total presion_relativa: presionRelhpa, // Presion Relativa presion_absoluta: presionRelhpa, // Presion Absoluta software: versionEMA, // Software tanque: Parametros[1].tanque // Si el registro es tanqueado (true o false) }); var ParametrosTemp6 = JSON.stringify(Parametros, null, 4); center.sendObservations(function (err, success) { if (err != null) { cbFunc('emacentergugler', 'ERROR', err, idRed6, ParametrosTemp6); } else { cbFunc('emacentergugler', 'OK', 'ok', idRed6, ParametrosTemp6); } }); center = null; EMACENTER = null; break; case 'awekas': var AWEKAS = require('./redes/awekas'); var awekas = new AWEKAS(Parametros[0][1], Parametros[0][2]); var idRed7 = Parametros[2]; awekas.resetObservations(); awekas.setObservations({ dateutc: 'now', // fecha actual tempf: temperaturaExternaF, // Temp. Externa indoortempf: temperaturaInternaF, // Temp. Interna indoorhumidity: Parametros[1].humedad_interna, // Humedad Interna humidity: Parametros[1].humedad_externa, // Humedad Externa dewptf: puntoDeRocioF.toFixed(2), // Punto de Rocio UV: Parametros[1].luxer_uv, // UV solarradiation: luxerIntencidad.toFixed(2), // Solar radiacion winddir: Parametros[1].viento_direccion, // Direccion del Viento windgustmph: rafagaEnMh.toFixed(2), // Rafagas windspeedmph: vientoEnMh.toFixed(2), // Viento rainin: lluviaHorain.toFixed(2), // Lluvia Acumulado Hora dailyrainin: lluviaDiain.toFixed(2), // Lluvia Acumulado Dia baromin: presionRelIn.toFixed(2), // Presion Relativa softwaretype: versionEMA // Software }); var ParametrosTemp7 = JSON.stringify(Parametros, null, 4); awekas.sendObservations(function (err, success) { if (err != null) { cbFunc('awekas', 'ERROR', err, idRed7, ParametrosTemp7); } else { cbFunc('awekas', 'OK', 'ok', idRed7, ParametrosTemp7); } }); awekas = null; AWEKA = null; break; case 'windy': var WINDY = require('./redes/windy'); var windy = new WINDY(Parametros[0][1], Parametros[0][2]); var idRed8 = Parametros[2]; windy.resetObservations(); windy.setObservations({ dateutc: Parametros[1].fechaUTC, // Fecha actual UTC tempf: temperaturaExternaF.toFixed(2), // Temp. Externa winddir: Parametros[1].viento_direccion, // Direccion del Viento windspeedmph: vientoEnMh.toFixed(2), // Viento en millas windgustmph: rafagaEnMh.toFixed(2), // Rafagas rh: Parametros[1].humedad_externa, // Humedad Externa rainin: lluviaHorain.toFixed(2), // Lluvia Acumulado Hora uv: Parametros[1].luxer_uv, // UV dewpoint: puntoDeRocioC.toFixed(2), // Punto de Rocio baromin: presionRelIn.toFixed(2) // Presion Relativa }); var ParametrosTemp8 = JSON.stringify(Parametros, null, 4); windy.sendObservations(function (err, success) { if (err != null) { cbFunc('windy', 'ERROR', err, idRed8, ParametrosTemp8); } else { // codigo de respuesta 430 No enviado - por tiempo limite no superado if (success[0] === 430) { cbFunc('windy', 430, success[1], idRed8, ParametrosTemp8);} else{ // codigo de respuesta 429 red congestionada if (success[0] === 429) { cbFunc('windy', 429, success[1], idRed8, ParametrosTemp8); } else { cbFunc('windy', 'OK', 'ok', idRed8, ParametrosTemp8); } } } }); windy = null; WINDY = null; break; case 'openweathermap': var OPENW = require('./redes/openweathermap'); var openw = new OPENW(Parametros[0][1]); var idRed9 = Parametros[2]; openw.resetObservations(); openw.setObservations({ dt: Parametros[1].fechaUTC, // fecha actual UNIX temperature: temperaturaExternaC, // Temp. Externa humidity: Parametros[1].humedad_externa, // Humedad Externa % dew_point: puntoDeRocioC, // Punto de Rocio wind_deg: Parametros[1].viento_direccion, // Direccion del Viento wind_gust: rafagaEnMs, // Rafagas wind_speed: vientoEnMs, // Viento rain_1h: lluviaHoraMm, // Lluvia Acumulado Hora rain_24h: lluviaDiaMm, // Lluvia Acumulado Dia pressure: presionRelhpa // Presion Relativa }); var ParametrosTemp9 = JSON.stringify(Parametros, null, 4); openw.sendObservations(function (err, success) { if (err != null) { cbFunc('openweathermap', 'ERROR', err, idRed, ParametrosTemp9); } else { // codigo de respuesta 429 red congestionada if (success[0] === 429) { cbFunc('openweathermap', 429, success[1], idRed9, ParametrosTemp9); } else { cbFunc('openweathermap', 'OK', 'ok', idRed9, ParametrosTemp9); } } }); openw = null; OPENW = null; break; default: console.log('No Existe la red metorologica: ' + Parametros[0][0]); } // Se eliminan las variables utilizadas. temperaturaExternaF = null; puntoDeRocioF = null; vientoEnMh = null; presionRelIn = null; rafagaEnMh = null; lluviaHoraMm = null; lluviaDiaMm = null; lluviaHorain = null; lluviaDiain = null; luxerIntencidad = null; temperaturaInternaF = null; temperaturaExternaC = null; luxerIntencidadLux = null; vientoEnNudos = null; rafagaEnNudos = null; presionRelhpa = null; fechaformato = null; temperaturaInternaC = null; puntoDeRocioC = null; vientoEnKh = null; rafagaEnKh = null; vientoNombre = null; vientoEnMs = null; rafagaEnMs = null; }, // En desarrollo RegistrarRedesMeteorologicas: function (Parametros, cbFunc) { switch (Parametros[0][0]) { case 'openweathermap': var OPENW = require('./redes/openweathermap'); var openw = new OPENW(Parametros[0][2]); var idRed8 = Parametros[2]; var ParametrosTemp8 = JSON.stringify(Parametros, null, 4); openw.resetObservations(); openw.sendObservations(function (err, success) { if (err != null) { cbFunc('openweathermap', 'ERROR', err, idRed8, ParametrosTemp8); } else { // codigo de respuesta 429 red congestionada if (success[0] === 429) { cbFunc('openweathermap', 429, success[1], idRed8, ParametrosTemp8); } else { cbFunc('openweathermap', 'OK', 'ok', idRed8, ParametrosTemp8); } } }); openw = null; OPENW = null; break; default: console.log('No Existe la red metorologica: ' + Parametros[0][0]); } } };