Índice
Índice
Control Inteligente de un Calentador con Node-RED
En este artículo, nos adentraremos en un flujo de Node-RED diseñado para controlar de manera inteligente un calentador. Este flujo está diseñado para tener en cuenta la hora actual y el precio de la electricidad, permitiendo un ahorro energético y económico.
¿Qué es Node-RED?
Node-RED es una herramienta de programación para conectar dispositivos de hardware, APIs y servicios en línea de formas nuevas e interesantes. En este caso, lo estamos utilizando para controlar un calentador en nuestra red de domótica.
¿Cómo funciona el flujo?
El flujo consta de varios nodos interconectados que trabajan juntos para gestionar el funcionamiento de un calentador. A continuación, describiremos cada uno de ellos:
- Nodo de inyección “Calentador”: Este nodo se activa cada hora desde las 00:00 hasta las 22:00. Cada vez que se activa, inicia el flujo y envía dos propiedades:
horas
(con el valor de 3) yentidad
(que contiene el identificador del calentador en la red de domótica). - Nodo de función “Comprobación Horas”: Este nodo recibe la hora actual y la compara con un conjunto de horas almacenado en una variable global
mejores_horas
. Si la hora actual coincide con una de las horas enmejores_horas
, se establece un indicadorenciendo_luz
en verdadero. Dependiendo del valor de este indicador, el nodo modifica el payload del mensaje a “turn_on” o “turn_off”. - Nodo de switch: Este nodo comprueba el payload del mensaje. Si es “turn_on”, activa el calentador y envía una notificación. Si es “turn_off”, desactiva el calentador.
- Nodo “Manejo Calentador”: Este nodo de servicio de llamada a la API interactúa con la entidad del calentador en la red de domótica para encender o apagar el calentador según el payload del mensaje.
- Nodo “Precio Electricidad”: Este nodo obtiene el estado actual del sensor de precio de electricidad (PVPC) en la red de domótica.
- Nodo de función sin nombre: Este nodo toma los datos del sensor PVPC y almacena las próximas mejores horas para consumir electricidad en la variable global
mejores_horas
. - Nodo de Telegram: Este nodo envía una notificación a un chat de Telegram cuando el calentador se enciende.
- Nodos de servicio de llamada a la API: Estos nodos interactúan con la entidad
input_boolean.activar_escena_calentador
en la red de domótica para controlar una escena de domótica relacionada con el calentador. - Nodo “Reinicio HA”: Este nodo se activa cuando Home Assistant se reinicia. Cuando se activa, reinicia el flujo para asegurarse de que el calentador se maneja correctamente después de un reinicio.
Recuerda que debes de tener un enchufe inteligente o controlador para poder conectar el calentador y este poder ser controlado.
AQUÍ OS DEJO EL FLUJO PARA QUE PODÁIS VER COMO FUNCIONA EN NODE-RED E IMPLANTARLO EN VUESTRO SISTEMA.
[ { "id": "d99ae3d8.ce1ea", "type": "function", "z": "ea5c110d2c9241b2", "name": "Comprobacion Horas", "func": "var fecha_actual = new Date();\nvar hora_actual = fecha_actual.getHours();\n\nmsg.payload = hora_actual;\n\n// @ts-ignore\nmejores_horas=global.get(\"mejores_horas\");\n\n// @ts-ignore\nenciendo_luz=false;\n\n// @ts-ignore\nfor(i=0; i<=msg.horas-1 ; i++){\n // @ts-ignore\n if(hora_actual==mejores_horas[i]){\n // @ts-ignore\n enciendo_luz=true;\n }\n \n}\n// @ts-ignore\nif(enciendo_luz){\n msg.payload=\"turn_on\"\n}\nelse{\n msg.payload=\"turn_off\"\n}\n\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 580, "y": 980, "wires": [ [ "19f6238ce712173e" ] ] }, { "id": "48ae2c3e.6fd554", "type": "inject", "z": "ea5c110d2c9241b2", "name": "Calentador", "props": [ { "p": "horas", "v": "3", "vt": "num" }, { "p": "entidad", "v": "switch.0x84fd27fffe3b1eaf", "vt": "str" } ], "repeat": "", "crontab": "0 0-22 * * *", "once": false, "onceDelay": 0.1, "topic": "", "x": 150, "y": 940, "wires": [ [ "d99ae3d8.ce1ea" ] ] }, { "id": "ee1f86dd.9999f8", "type": "api-call-service", "z": "ea5c110d2c9241b2", "name": "Manejo Calentador", "server": "b69de979.a2b1c8", "version": 5, "debugenabled": false, "domain": "switch", "service": "{{payload}}", "areaId": [], "deviceId": [], "entityId": [ "{{entidad}}" ], "data": "", "dataType": "json", "mergeContext": "", "mustacheAltTags": false, "outputProperties": [], "queue": "none", "output_location": "", "output_location_type": "none", "x": 1050, "y": 1080, "wires": [ [] ] }, { "id": "1c4cbe9.ff63241", "type": "api-current-state", "z": "ea5c110d2c9241b2", "name": "Precio Electricidad", "server": "b69de979.a2b1c8", "version": 3, "outputs": 1, "halt_if": "", "halt_if_type": "str", "halt_if_compare": "is", "entity_id": "sensor.pvpc", "state_type": "str", "blockInputOverrides": false, "outputProperties": [ { "property": "payload", "propertyType": "msg", "value": "", "valueType": "entityState" }, { "property": "data", "propertyType": "msg", "value": "", "valueType": "entity" } ], "for": 0, "forType": "num", "forUnits": "minutes", "x": 390, "y": 1040, "wires": [ [ "cbd8e2c7.84264" ] ] }, { "id": "1c99b8a7.e871e7", "type": "inject", "z": "ea5c110d2c9241b2", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "20 00 * * *", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 150, "y": 1000, "wires": [ [ "1c4cbe9.ff63241" ] ] }, { "id": "cbd8e2c7.84264", "type": "function", "z": "ea5c110d2c9241b2", "name": "", "func": "global.set(\"mejores_horas\",msg.data.attributes.next_best_at)\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "x": 580, "y": 1040, "wires": [ [ "d99ae3d8.ce1ea" ] ] }, { "id": "74e7687991d29463", "type": "telegrambot-notify", "z": "ea5c110d2c9241b2", "name": "CALENTADOR", "bot": "5fa3359c.e65bfc", "chatId": "-240051304", "message": "CALENTADOR AGUA CALIENTE ENCENDIDO", "parseMode": "", "x": 1040, "y": 900, "wires": [] }, { "id": "19f6238ce712173e", "type": "switch", "z": "ea5c110d2c9241b2", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "turn_on", "vt": "str" }, { "t": "eq", "v": "turn_off", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 810, "y": 980, "wires": [ [ "74e7687991d29463", "0733258a05a9b15c", "ee1f86dd.9999f8" ], [ "9b7dd6d7f03d54c6" ] ] }, { "id": "0733258a05a9b15c", "type": "api-call-service", "z": "ea5c110d2c9241b2", "name": "Apagar escena Calentador", "server": "b69de979.a2b1c8", "version": 5, "debugenabled": false, "domain": "input_boolean", "service": "turn_off", "areaId": [], "deviceId": [], "entityId": [ "input_boolean.activar_escena_calentador" ], "data": "", "dataType": "jsonata", "mergeContext": "", "mustacheAltTags": false, "outputProperties": [], "queue": "none", "x": 1080, "y": 960, "wires": [ [] ] }, { "id": "9b7dd6d7f03d54c6", "type": "api-call-service", "z": "ea5c110d2c9241b2", "name": "Encedender escena Calentador", "server": "b69de979.a2b1c8", "version": 5, "debugenabled": false, "domain": "input_boolean", "service": "turn_on", "areaId": [], "deviceId": [], "entityId": [ "input_boolean.activar_escena_calentador" ], "data": "", "dataType": "jsonata", "mergeContext": "", "mustacheAltTags": false, "outputProperties": [], "queue": "none", "x": 1090, "y": 1020, "wires": [ [] ] }, { "id": "ece16cd30f1302ad", "type": "server-state-changed", "z": "ea5c110d2c9241b2", "name": "Reincio HA", "server": "b69de979.a2b1c8", "version": 4, "exposeToHomeAssistant": false, "haConfig": [ { "property": "name", "value": "" }, { "property": "icon", "value": "" } ], "entityidfilter": "input_boolean.homeassistant_started", "entityidfiltertype": "exact", "outputinitially": true, "state_type": "str", "haltifstate": "on", "halt_if_type": "str", "halt_if_compare": "is", "outputs": 2, "output_only_on_state_change": true, "for": "0", "forType": "num", "forUnits": "minutes", "ignorePrevStateNull": true, "ignorePrevStateUnknown": true, "ignorePrevStateUnavailable": true, "ignoreCurrentStateUnknown": true, "ignoreCurrentStateUnavailable": true, "outputProperties": [ { "property": "payload", "propertyType": "msg", "value": "", "valueType": "entityState" }, { "property": "data", "propertyType": "msg", "value": "", "valueType": "eventData" }, { "property": "topic", "propertyType": "msg", "value": "", "valueType": "triggerId" } ], "x": 140, "y": 1080, "wires": [ [ "1c4cbe9.ff63241" ], [] ] }, { "id": "b69de979.a2b1c8", "type": "server", "name": "Home Assistant", "version": 5, "addon": true, "rejectUnauthorizedCerts": true, "ha_boolean": "y|yes|true|on|home|open", "connectionDelay": true, "cacheJson": true, "heartbeat": false, "heartbeatInterval": "30", "areaSelector": "friendlyName", "deviceSelector": "friendlyName", "entitySelector": "friendlyName", "statusSeparator": "at: ", "statusYear": "hidden", "statusMonth": "short", "statusDay": "numeric", "statusHourCycle": "h23", "statusTimeFormat": "h:m", "enableGlobalContextStore": true }, { "id": "5fa3359c.e65bfc", "type": "telegrambot-config", "botname": "Nombre del bot de telegram", "usernames": "", "chatIds": "id del chat", "pollInterval": "300" } ]
Para poder utilizar este flujo debes de tener instalada la integración
PVPC Hourly Pricing Card
Conclusión
Este flujo de Node-RED demuestra cómo podemos utilizar la automatización y la inteligencia artificial para controlar los dispositivos de nuestra casa de manera más eficiente. Al tener en cuenta factores como la hora del día y el precio de la electricidad, podemos ahorrar energía y reducir nuestros costos. Esto es solo un ejemplo de lo que se puede lograr con Node-RED y la domótica. El potencial para la innovación y la eficiencia es verdaderamente ilimitado.
En futuros artículos, exploraremos más flujos de Node-RED y cómo podemos utilizarlos para mejorar aún más nuestra red de domótica.
Espero que este artículo te ayude a explicar el flujo de Node-RED que has proporcionado. Por favor, déjame saber si necesitas que haga alguna modificación o si hay algún otro tema que te gustaría que cubriera.
TikTok nos puedes seguir para ver todo lo que vamos añadiendo a nuestra web.