[{"id":"c0fe8e51e59f52b9","type":"tab","label":"Crear Plantilla Meteoclimatic","disabled":false,"info":"","env":[]},{"id":"6eee8f86e490c4ec","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Precipitacion","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_daily_rain_rate_piezo","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"rfall","valueType":"str"}],"x":150,"y":580,"wires":[["62e4a60b49eeadfa"]]},{"id":"9b74db1ff9d21af3","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Velocidad Viento","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_wind_speed","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"wspeed","valueType":"str"}],"x":160,"y":280,"wires":[["62e4a60b49eeadfa"]]},{"id":"6f5a36bdf927255c","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Temperatura Exterior","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_outdoor_temperature","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"temp","valueType":"str"}],"x":180,"y":160,"wires":[["62e4a60b49eeadfa","4592c3100f6ed519"]]},{"id":"62e4a60b49eeadfa","type":"join","z":"c0fe8e51e59f52b9","name":"Combinar sensores + Calculos + COD + SIG","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","useparts":true,"accumulate":false,"timeout":"","count":"13","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":740,"y":320,"wires":[["b71be6ae5cc43115"]]},{"id":"2ce9b067668c537d","type":"debug","z":"c0fe8e51e59f52b9","name":"Mostrar datos generados","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1110,"y":480,"wires":[]},{"id":"662cb6c034a87fe1","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Direccion viento","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_wind_direction","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"wdir","valueType":"str"}],"x":160,"y":340,"wires":[["62e4a60b49eeadfa"]]},{"id":"b71be6ae5cc43115","type":"function","z":"c0fe8e51e59f52b9","name":"Construir plantilla Meteoclimatic","func":"// Plantilla original\n/* \n*VER=DATA2 *COD=ESAND1100000011659B *SIG=04e3e8ca0ca173dcd340ad4a01fc62bd\n*UPD=% date % % time % *TMP=% temp % *WND=% 10minavspeedinkmh % *AZI=% avdir10minute % \n*BAR=% baro % *HUM=% hum % *SUN=% VPsolar % *UVI=% VPuv % *DHTM=% maxtemp % \n*DLTM=% mintemp % *DHHM=% highhum % *DLHM=% lowhum % *DHBR=% highbaro % *DLBR=% lowbaro % \n*DGST=% todaygustspeedinkmh % *DSUN=% highsolar % *DHUV=% highuv % *DPCP=% dayrn % \n*WRUN=% windruntoday % *MHTM=% monthtodatemaxtempcelsius % *MLTM=% monthtodatemintemp % \n*MHHM=% monthtodatemaxhum % *MLHM=% monthtodateminhum % *MHBR=% monthtodatemaxbaromb % \n*MLBR=% monthtodateminbaromb % *MGST=% monthtodatemaxgustkmh % *MSUN=% mrecordhighsolar % \n*MHUV=% mrecordhighuv % *MPCP=% monthraininmm % *YHTM=% yrecordhightemp % *YLTM=% yrecordlowtemp % \n*YHHM=% yrecordhighhum % *YLHM=% yrecordlowhum % *YHBR=% yrecordhighbaro % \n*YLBR=% yrecordlowbaro % *YGST=% yrecordwindgust % *YSUN=% yrecordhighsolar % \n*YHUV=% yrecordhighuv % *YPCP=% yearlyraininmm % *EOT*\n\n*/\n\nlet originalString = `*VER=DATA2 \n*COD=<#cod> \n*SIG=<#sig> \n*UPD=<#date> <#hour>:<#minute> \n*TMP=<#temp> \n*WND=<#wspeed> \n*AZI=<#wdir> \n*BAR=<#press> \n*HUM=<#hum> \n*SUN=<#SolarRad> \n*UVI=<#UV> \n*DHTM=<#tempTH> \n*DLTM=<#tempTL> \n*DHHM=<#humTH> \n*DLHM=<#humTL> \n*DHBR=<#pressTH> \n*DLBR=<#pressTL> \n*DGST=<#wgustTM> \n*DSUN= \n*DHUV= \n*DPCP=<#rfall> \n*WRUN=<#windrun> \n*MHTM=<#MonthTempH> \n*MLTM=<#MonthTempL> \n*MHHM=<#MonthHumH> \n*MLHM=<#MonthHumL> \n*MHBR=<#MonthPressH> \n*MLBR=<#MonthPressL> \n*MGST=<#MonthGustH> \n*MSUN= \n*MHUV= \n*MPCP=<#rmonth> \n*YHTM=<#YearTempH> \n*YLTM=<#YearTempL> \n*YHHM=<#YearHumH> \n*YLHM=<#YearHumL> \n*YHBR=<#YearPressH> \n*YLBR=<#YearPressL> \n*YGST=<#YearGustH> \n*YSUN= \n*YHUV= \n*YPCP=<#ryear> \n*EOT*`;\n\n// Obtiene la fecha y hora actuales\nlet now = new Date();\n\n// Formatea la fecha y la hora\nlet day = String(now.getDate()).padStart(2, '0');\nlet month = String(now.getMonth() + 1).padStart(2, '0'); // Los meses en JavaScript son 0-indexados\nlet year = String(now.getFullYear()); // Año de 4 digitos\nlet hour = String(now.getHours()).padStart(2, '0');\nlet minute = String(now.getMinutes()).padStart(2, '0');\n\n// Crea las variables para los reemplazos de fecha y hora\nlet formattedDate = `${day}-${month}-${year}`;\nlet formattedTime = `${hour}:${minute}`;\n\n// COD & SIG\noriginalString = originalString.replace(\"<#cod>\", msg.payload.COD);\noriginalString = originalString.replace(\"<#sig>\", msg.payload.SIG);\n\n// Fecha y Hora actuales\noriginalString = originalString.replace(\"<#date>\", formattedDate);\noriginalString = originalString.replace(\"<#hour>\", hour);\noriginalString = originalString.replace(\"<#minute>\", minute);\n\n// Dirección del viento\noriginalString = originalString.replace(\"<#wspeed>\", msg.payload.wspeed);\n\n// Temperatura --> Pendiente calcular las máximas y minimas\noriginalString = originalString.replace(\"<#temp>\", msg.payload.temp);\noriginalString = originalString.replace(\"<#tempTL>\", msg.payload.temp);\noriginalString = originalString.replace(\"<#tempTH>\", msg.payload.temp);\noriginalString = originalString.replace(\"<#MonthTempH>\", msg.payload.temp);\noriginalString = originalString.replace(\"<#MonthTempL>\", msg.payload.temp);\noriginalString = originalString.replace(\"<#YearTempH>\", msg.payload.temp);\noriginalString = originalString.replace(\"<#YearTempL>\", msg.payload.temp);\n\n// Dirección viento\noriginalString = originalString.replace(\"<#wdir>\", msg.payload.wdir);\n\n// Presion --> Pendiente calcular las maximas y minimas\noriginalString = originalString.replace(\"<#press>\", msg.payload.press.press);\noriginalString = originalString.replace(\"<#pressTH>\", msg.payload.press.press);\noriginalString = originalString.replace(\"<#pressTL>\", msg.payload.press.press);\noriginalString = originalString.replace(\"<#MonthPressL>\", msg.payload.press.press);\noriginalString = originalString.replace(\"<#MonthPressH>\", msg.payload.press.press);\noriginalString = originalString.replace(\"<#YearPressL>\", msg.payload.press.press);\noriginalString = originalString.replace(\"<#YearPressH>\", msg.payload.press.press);\n\n// Humedad --> Pendiente calcular las maximas y minimas\noriginalString = originalString.replace(\"<#hum>\", msg.payload.hum);\noriginalString = originalString.replace(\"<#humTH>\", msg.payload.hum);\noriginalString = originalString.replace(\"<#humTL>\", msg.payload.hum);\noriginalString = originalString.replace(\"<#MonthHumH>\", msg.payload.hum);\noriginalString = originalString.replace(\"<#MonthHumL>\", msg.payload.hum);\noriginalString = originalString.replace(\"<#YearHumH>\", msg.payload.hum);\noriginalString = originalString.replace(\"<#YearHumL>\", msg.payload.hum);\n\n// Radiacion y UV\noriginalString = originalString.replace(\"<#SolarRad>\", msg.payload.SolarRad);\noriginalString = originalString.replace(\"<#UV>\", msg.payload.UV);\n\n// Precipitación\noriginalString = originalString.replace(\"<#rfall>\", msg.payload.rfall);\noriginalString = originalString.replace(\"<#rmonth>\", msg.payload.rmonth);\noriginalString = originalString.replace(\"<#ryear>\", msg.payload.ryear);\n\n// Rachas --> Pendiente calcular las maximas y minimas\noriginalString = originalString.replace(\"<#windrun>\", msg.payload.windrun);\noriginalString = originalString.replace(\"<#wgustTM>\", msg.payload.windrun);\noriginalString = originalString.replace(\"<#MonthGustH>\", msg.payload.windrun);\noriginalString = originalString.replace(\"<#YearGustH>\", msg.payload.windrun);\n\n// Retorna el string modificado en msg.payload\nmsg.payload = originalString;\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1130,"y":320,"wires":[["d0207f96cf41250d"]]},{"id":"cbd4926437feb37a","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Presión absoluta","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_absolute_pressure","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"press","valueType":"str"}],"x":160,"y":220,"wires":[["4592c3100f6ed519"]]},{"id":"fe23ec4be9b862dd","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Humedad","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_humidity","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"hum","valueType":"str"}],"x":140,"y":400,"wires":[["62e4a60b49eeadfa"]]},{"id":"729e980eb74eee61","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Radiacion","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_solar_radiation","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"SolarRad","valueType":"str"}],"x":140,"y":460,"wires":[["62e4a60b49eeadfa"]]},{"id":"dfbf8f6c40663c55","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Indice UV","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_uv_index","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"UV","valueType":"str"}],"x":140,"y":520,"wires":[["62e4a60b49eeadfa"]]},{"id":"8249297a59d36b81","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Racha diaria maxima","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_max_daily_gust","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"windrun","valueType":"str"}],"x":180,"y":640,"wires":[["62e4a60b49eeadfa"]]},{"id":"d0207f96cf41250d","type":"file","z":"c0fe8e51e59f52b9","name":"Crear meteoclimatic.html","filename":"meteoclimatic/meteoclimatic.html","filenameType":"str","appendNewline":false,"createDir":true,"overwriteFile":"true","encoding":"utf8","x":1110,"y":400,"wires":[["2ce9b067668c537d"]]},{"id":"4592c3100f6ed519","type":"join","z":"c0fe8e51e59f52b9","name":"Combinar Presion abs+Temp+Altitud","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","useparts":true,"accumulate":false,"timeout":"","count":"3","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":650,"y":120,"wires":[["95cb810c33ddb0ab"]]},{"id":"95cb810c33ddb0ab","type":"function","z":"c0fe8e51e59f52b9","name":"Calcular Presión Relativa","func":"// Calculo presion relativa en base a presion absoluta, temperatura y altitud\n// Creditos a CHATGPT\n//\n\n// Constantes\nconst P0 = 1013.25; // Presión atmosférica al nivel del mar en hPa (equivale a 101325 Pa)\nconst L = 0.0065; // Tasa de disminución de temperatura en K/m\nconst g = 9.80665; // Aceleración de la gravedad en m/s²\nconst M = 0.0289644; // Masa molar del aire en kg/mol\nconst R = 8.3144598; // Constante de los gases en J/(mol·K)\n\n// Datos de entrada\nconst Pabs_hPa = parseFloat(msg.payload.press); // Presión absoluta en hPa\nconst h = parseFloat(msg.payload.altitude); // Altitud en metros\nconst T0 = parseFloat(msg.payload.temp) + 273.15; // Convertir temperatura de °C a Kelvin\n\n// Convertir presión absoluta de hPa a Pa para el cálculo\nconst Pabs = Pabs_hPa * 100; // 1 hPa = 100 Pa\n\n// Calcular la presión atmosférica a la altitud dada en Pa\nlet Patm = P0 * 100 * Math.pow(1 - (L * h) / T0, (g * M) / (R * L)); \n\n// Calcular la presión relativa en Pa\nlet Prel = Pabs - Patm;\n\n// Convertir presión relativa de Pa a hPa\nlet Prel_hPa = Prel / 100;\n\n// Calcular la presión ajustada en hPa\nconst adjustedPressure_hPa = Pabs_hPa + Prel_hPa;\n\n// Devolver el resultado en las unidades solicitadas\nmsg.payload = {\n    absolutePressure_hPa: Pabs_hPa.toFixed(2),\n    altitude_m: h.toFixed(2),\n    temperature_C: msg.payload.temp,\n    press: adjustedPressure_hPa.toFixed(2), // Redondear presion ajustada a hPa con dos decimales\n    relativePressure_hPa: Prel_hPa.toFixed(2)\n};\nmsg.topic = 'press'\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":200,"wires":[["62e4a60b49eeadfa"]]},{"id":"180cbf2d58d57d3e","type":"inject","z":"c0fe8e51e59f52b9","name":"Inyectar altitud","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"30","crontab":"","once":false,"onceDelay":0.1,"topic":"altitude","payload":"40","payloadType":"str","x":180,"y":100,"wires":[["4592c3100f6ed519"]]},{"id":"89ce088be0888753","type":"inject","z":"c0fe8e51e59f52b9","name":"Inyectar COD","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"30","crontab":"","once":false,"onceDelay":0.1,"topic":"COD","payload":"","payloadType":"str","x":460,"y":700,"wires":[["62e4a60b49eeadfa"]]},{"id":"57f2020dfbc68fe8","type":"inject","z":"c0fe8e51e59f52b9","name":"Inyectar SIG","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"30","crontab":"","once":false,"onceDelay":0.1,"topic":"SIG","payload":"","payloadType":"str","x":450,"y":740,"wires":[["62e4a60b49eeadfa"]]},{"id":"7db457b30f0fe249","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Precipitacion mensual","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_monthly_rain_rate_piezo","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"rmonth","valueType":"str"}],"x":180,"y":700,"wires":[["62e4a60b49eeadfa"]]},{"id":"77c95bacd33ff8cd","type":"poll-state","z":"c0fe8e51e59f52b9","name":"Precipitacion anual","server":"aa433183.64471","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":false,"outputOnChanged":false,"entityId":"sensor.gw2000a_monthly_rain_rate_piezo","stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"ryear","valueType":"str"}],"x":170,"y":760,"wires":[["62e4a60b49eeadfa"]]},{"id":"aa433183.64471","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30}]