Ajuda para automatização de ventilador de teto com acionamento único (on/off). Como fazer?

Meu objetivo é automatizar um ventilador de teto (não smart) que tem apenas 1 botão (on/off), a partir da temperatura do ambiente entre um determinado período do dia.
Venho trocando minhas automações nativas do HA adaptando ao Node-red e assim será.

O fluxo que atualmente já tenho é este mas como é apenas 1 botão (on/off) no controle a automatização sempre liga mas também desliga:

Minha lógica:
Criei um botão switch (on/off). Um trigger verifica se a temperatura está maior que 28C e verifica o horário determinado. Um current-state node verifica o estado do switch. Caso for “on” aguarda 2 horas para uma nova verificação. Caso for “off” o switch muda para “on” e aguarda 2 horas.

Problema (mecânico):
1 - O ventilador de teto é de tipo “dummy”, ou seja, o liga/desliga é acinado por apenas 1 botão, que é enviado por IR para ligar e desligar. Então o Broadlink só reconhece 1 código para as duas ações;

Problema (no meu fluxo do Node-red)
2 - A cada hora é feita a checagem por temperatura e, se a temperatura continua sendo > 29, o Broadlink envia o comando, com isso o ventilador desliga.

Objetivo:
1 - A cada checagem por temperatura, se a temperatura for => 29 não desligar;
2 - Se a temperatura for <29C desligar o ventilador.

Meu código:

Criei um switch [on/off] mesmo sendo de ação única. Eis o código:

switch:
  - platform: broadlink
    mac: "broadlink_mac"
    switches:
       ventilador:
        friendly_name: "Ventilador"
        command_on: '"broadlink_comand_on'
        command_off: '"broadlink_comand_off'
[{"id":"0efbd21f791182c0","type":"comment","z":"a6321e24fe878b7f","name":"Ventilador da sala liga após passar de 29C","info":"","x":160,"y":40,"wires":[]},{"id":"0c6736eb5a685785","type":"server-state-changed","z":"a6321e24fe878b7f","name":">= 28","server":"b771286b.8c8f28","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.a440002283_temperature","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"28","halt_if_type":"num","halt_if_compare":"gte","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":70,"y":100,"wires":[["a279cd55dc94685e"],[]]},{"id":"a279cd55dc94685e","type":"thingzi-time-check","z":"a6321e24fe878b7f","name":"15:00 as 22:00","lat":"-22.8896","lon":"-43.1054","ontype":"tod","ontimesun":"dusk","ontimetod":"15:00","onoffset":"","onrandomoffset":false,"offtype":"tod","offtimesun":"dawn","offtimetod":"22:00","offoffset":"","offrandomoffset":false,"mon":true,"tue":true,"wed":true,"thu":true,"fri":true,"sat":true,"sun":true,"x":240,"y":100,"wires":[["d4511a2b7148ef9d"],[]]},{"id":"7a525710f25999fa","type":"api-call-service","z":"a6321e24fe878b7f","name":"switch ventilador:on","server":"b771286b.8c8f28","version":3,"debugenabled":false,"service_domain":"switch","service":"turn_on","entityId":"switch.ventilador","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":710,"y":160,"wires":[["a0b25419b7d731ab"]]},{"id":"d4511a2b7148ef9d","type":"api-current-state","z":"a6321e24fe878b7f","name":"checar estado do switch","server":"b771286b.8c8f28","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.ventilador","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","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":470,"y":100,"wires":[["0a60f784431cc8f4"],["7a525710f25999fa"]]},{"id":"0a60f784431cc8f4","type":"stoptimer","z":"a6321e24fe878b7f","duration":"2","units":"Hour","payloadtype":"num","payloadval":"0","name":"","x":690,"y":100,"wires":[["084b7b19172b4598"],[]]},{"id":"a0b25419b7d731ab","type":"stoptimer","z":"a6321e24fe878b7f","duration":"2","units":"Hour","payloadtype":"num","payloadval":"0","name":"","x":910,"y":160,"wires":[["084b7b19172b4598"],[]]},{"id":"084b7b19172b4598","type":"debug","z":"a6321e24fe878b7f","name":"debug: ventilador sala","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1270,"y":120,"wires":[]},{"id":"b771286b.8c8f28","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"}]
1 Curtiu

Algo parecido com isso não atenderia?

Nesse fluxo penso que só teria problema caso efetivamente usasse o botão fisico (mas isso seria problema em qualquer cenário). Caso dê problema na mesma, poderia usar um input boolean para testar o estado.

1 Curtiu

Para não forçar o estado caso o switch acabe por fazer assim (não testei) talvez funcione checar o próprio switch:

1 Curtiu

Olá, @IvanMB ! Primeiramente obrigado pela resposta.

Modifiquei um pouco a lógica para esta forma (não usei switch neste):

Criei um input_boolean e adicionei ao lovelace:
image

Não sei ao certo se fiz o input_boolean corretamente. Além disso o problema também parece ser neste trecho, o comando do Broadlink está correto mas o ventilador não liga.

Fluxo atualizado:

[{"id":"a6b87dcac080c684","type":"api-current-state","z":"39056cbd.4860d4","name":"input boolean: on","server":"b771286b.8c8f28","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.des_lig_ventilador_ib","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","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":490,"y":480,"wires":[["81b9c2acd12d8464"],[]]},{"id":"3afeda54fe3b216d","type":"template","z":"39056cbd.4860d4","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload.data}}","output":"str","x":1080,"y":460,"wires":[[]]},{"id":"0828e340247fa9df","type":"RM","z":"39056cbd.4860d4","name":"Broadlink Sala","device":"ffe5cd1d42c3079a","action":"_msg_","remote":"","button":"","fix":1,"RFSweep":"false","x":900,"y":460,"wires":[["3afeda54fe3b216d"]]},{"id":"81b9c2acd12d8464","type":"function","z":"39056cbd.4860d4","name":"","func":"//Insert learned data object here\nvar data = [38,0,104,0,0,1,38,148,18,19,18,19,19,55,18,19,19,19,18,19,18,19,18,19,18,56,18,56,18,19,18,56,18,56,19,55,19,55,18,56,18,56,19,19,17,20,18,56,18,19,17,20,17,20,18,19,17,20,17,57,18,56,19,18,19,55,18,56,19,55,19,56,18,0,5,35,0,1,40,75,18,0,12,96,0,1,39,75,18,0,12,96,0,1,40,74,19,0,12,96,0,1,38,75,19,0,13,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];\n// or Base64 encoded format from other source\n//var data = \"JgBMAnM3ECkQKRANEAwRDQ8pEAwQDRApDyoQDQ8pEA0QDRAoECkQDRAoEigQDBEMECkRDBAMECkQDRAMEA0QDRAMEA0QDRANDw4PDQ8NEA0PDRANEA0RDA8NEAwRDBAMESgQDRAMEA0QDRAMESgQKRANEAwRDBApDyoQDBApEA4PDBILEQwQDRAoESgRDBApECkQDBANECkQDBANECgRDBANECkQDBEoEQwQKQ8NEA0QKQ8qEAwQDRAMEA0QDQ8NEA0QDBEMEAwRDQ8ODwwRDBAMEA0QDRAMEA0QDBANEQwQDRAMEA4PDRANEAwQDBANEA0QDBEMEAwQDRAMEA4PDBEMEA0PDRANEAwRDQ4OEAwRDBEMEAwQDRANECgQKRApECkQDBEMEAACMnc4ECgQKRANEQwQDQ8pEQwQDQ8qECgQDRApEA0QDBEoECkQDBEoECkQDRAMECkQDRAMECkQDRANEAwQDRANDw0QDQ8NEQwQDBEMEA0PDRENDw0QDBANDw0QDRANECgRDBAMEA0QDRAMECkRKBANEAwRDBApECkQDBEoEQwQDRAMEA0QDBApECkQDRApECgQDRANECgRDBANECgRDBANECgRDBApEAwQKRANEAwRKBApEQwQDBEMEA0QDBEMEA0QDQ8NDw0RDBAMEQwQDRAMEA0QDBEMEA0QDBANEAwQDRANEAwQDRANEAwQDRAMEA0QDRAMEA0QDBANEA0RCxILEQwQDBEMEA0QDBEMEA0QDQ8NEQwQDBANECkPKhApECkQDBANEAANBQAAAAAAAAAAAAAAAA==\"\n\nmsg.payload={\n    //\"mac\":\"MAC address of your broadlink rm\",  // Optional if configured in the RM node\n    //\"host\":\"IP address of your broadlink rm\",  // Optional if configured in the RM node\n    \"action\":\"send\",\n    \"data\":data,\n    \"repeat\":0\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":720,"y":460,"wires":[["0828e340247fa9df"]]},{"id":"77b8ebda79371a4d","type":"api-current-state","z":"39056cbd.4860d4","name":"input boolean: off","server":"b771286b.8c8f28","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.des_lig_ventilador_ib","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","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":490,"y":540,"wires":[["c99bcf582ee1ccc8"],[]]},{"id":"6cafeb1cdcad5106","type":"template","z":"39056cbd.4860d4","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{{payload.data}}","output":"str","x":1080,"y":540,"wires":[[]]},{"id":"211d0319c5df1d6d","type":"RM","z":"39056cbd.4860d4","name":"Broadlink Sala","device":"ffe5cd1d42c3079a","action":"_msg_","remote":"","button":"","fix":1,"RFSweep":"false","x":900,"y":540,"wires":[["6cafeb1cdcad5106"]]},{"id":"c99bcf582ee1ccc8","type":"function","z":"39056cbd.4860d4","name":"","func":"//Insert learned data object here\nvar data = [38,0,104,0,0,1,38,148,18,19,18,19,19,55,18,19,19,19,18,19,18,19,18,19,18,56,18,56,18,19,18,56,18,56,19,55,19,55,18,56,18,56,19,19,17,20,18,56,18,19,17,20,17,20,18,19,17,20,17,57,18,56,19,18,19,55,18,56,19,55,19,56,18,0,5,35,0,1,40,75,18,0,12,96,0,1,39,75,18,0,12,96,0,1,40,74,19,0,12,96,0,1,38,75,19,0,13,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];\n// or Base64 encoded format from other source\n//var data = \"JgBMAnM3ECkQKRANEAwRDQ8pEAwQDRApDyoQDQ8pEA0QDRAoECkQDRAoEigQDBEMECkRDBAMECkQDRAMEA0QDRAMEA0QDRANDw4PDQ8NEA0PDRANEA0RDA8NEAwRDBAMESgQDRAMEA0QDRAMESgQKRANEAwRDBApDyoQDBApEA4PDBILEQwQDRAoESgRDBApECkQDBANECkQDBANECgRDBANECkQDBEoEQwQKQ8NEA0QKQ8qEAwQDRAMEA0QDQ8NEA0QDBEMEAwRDQ8ODwwRDBAMEA0QDRAMEA0QDBANEQwQDRAMEA4PDRANEAwQDBANEA0QDBEMEAwQDRAMEA4PDBEMEA0PDRANEAwRDQ4OEAwRDBEMEAwQDRANECgQKRApECkQDBEMEAACMnc4ECgQKRANEQwQDQ8pEQwQDQ8qECgQDRApEA0QDBEoECkQDBEoECkQDRAMECkQDRAMECkQDRANEAwQDRANDw0QDQ8NEQwQDBEMEA0PDRENDw0QDBANDw0QDRANECgRDBAMEA0QDRAMECkRKBANEAwRDBApECkQDBEoEQwQDRAMEA0QDBApECkQDRApECgQDRANECgRDBANECgRDBANECgRDBApEAwQKRANEAwRKBApEQwQDBEMEA0QDBEMEA0QDQ8NDw0RDBAMEQwQDRAMEA0QDBEMEA0QDBANEAwQDRANEAwQDRANEAwQDRAMEA0QDRAMEA0QDBANEA0RCxILEQwQDBEMEA0QDBEMEA0QDQ8NEQwQDBANECkPKhApECkQDBANEAANBQAAAAAAAAAAAAAAAA==\"\n\nmsg.payload={\n    //\"mac\":\"MAC address of your broadlink rm\",  // Optional if configured in the RM node\n    //\"host\":\"IP address of your broadlink rm\",  // Optional if configured in the RM node\n    \"action\":\"send\",\n    \"data\":data,\n    \"repeat\":0\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":720,"y":540,"wires":[["211d0319c5df1d6d"]]},{"id":"2e8628c8bab98741","type":"switch","z":"39056cbd.4860d4","name":"","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"29","vt":"str"},{"t":"eq","v":"29","vt":"str"},{"t":"gt","v":"29","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":290,"y":520,"wires":[["a6b87dcac080c684"],[],["77b8ebda79371a4d"]]},{"id":"0cad39b5b9962442","type":"api-current-state","z":"39056cbd.4860d4","name":"Check temp","server":"b771286b.8c8f28","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.temperatura_da_sala_de_jantar_mqtt_temperature","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","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":110,"y":520,"wires":[["2e8628c8bab98741"]]},{"id":"6784901a9db6ff1e","type":"comment","z":"39056cbd.4860d4","name":"Broadlink command [on/off]","info":"","x":930,"y":400,"wires":[]},{"id":"87ebd9bcf6223a08","type":"comment","z":"39056cbd.4860d4","name":"Broadlink command [on/off]","info":"","x":930,"y":600,"wires":[]},{"id":"41e6a166dbbae724","type":"inject","z":"39056cbd.4860d4","name":"inject","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":130,"y":460,"wires":[["0cad39b5b9962442"]]},{"id":"70296ff64a8fd922","type":"comment","z":"39056cbd.4860d4","name":"Verifica estado","info":"","x":500,"y":420,"wires":[]},{"id":"09003138066143f9","type":"comment","z":"39056cbd.4860d4","name":"Filtro temp","info":"","x":300,"y":460,"wires":[]},{"id":"b771286b.8c8f28","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"},{"id":"ffe5cd1d42c3079a","type":"rmdevice","folder":"","mac":"A043B0147BED","host":"192.168.0.105","devType":"5f36"}]

Eu não tenho esse node do Rm, mas de toda forma vi que na function você não descomentou o mac/host. Como não consigo ver o nó do Rm, não sei se era necessário. De toda forma, podes usar o inject diretamente nele para ver se o comando funciona.
Mas parece que esta complicando algo que não precisava, se antes o comando já era enviado pelo switch.

Este nó do RM funciona normalmente com o inject dentro dele. Mas não funciona a partir do inicio do meu fluxo.


O mac não é necessário utilizar, por isso está comentado.

Esta é a primeira vez que uso o input_boolean. Por isso não sei se esta feito de acordo.

De qualquer forma, ainda não consegui fazer funcionar.

Continuo com minha sugestão inicial :slight_smile:

@IceDragon as automações existem para o que são úteis, seja no HA ou no NR, no entanto estás a complicar desnecessariamente.
Não precisas de automações para nada.
Existe um componente do HA chamado generic thermostat onde defines o switch, o sensor, a temperatura pretendida e ele faz o resto. Sem automações…

1 Curtiu

@IvanMB Então, eu vou tentar a sua sugestão inicial. Porém não entendi uns pontos. Os dois call service que você colocou são para o que? Para o input boolean? Para o switch que criei no yaml?
Ainda no seu exemplo o problema continuará quando a temperatura continua acima de 29. Porque o nó switch do seu exemplo vai entender que é (maior que 29) então vai mandar o comando pro Broadlink, sendo os dois o mesmo comando (on/off) o ventilador vai desligar, e isso que estou tendo problema.

No segundo exemplo coloquei para checar o proprio estado do switch. Se ele ja estiver ligado, não manda comando para ligar.

Mas podes tentar entender o que o @Maddoctor sugeriu (eu não percebi :slight_smile: )

Não conheço este componente mas vou olhar.
Você viu que eu uso o Broadlink para mandar os comandos ligar/desligar? Este componente vai funcionar ?

Podes, desde que cries um template switch que use os comandos do broadlink.
Tenho uma salamandra a pellets integrada dessa forma

Ah bom. No meu primeiro post eu mostro o switch que criei com os comandos do Broadlink, para ligar/desligar (botão único no controle remoto). Na verdade eu uso o mesmo código do remoto nos dois parâmetros “command on e command off”, é único.

esse switch serve perfeitamente…


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade