Node red vragen

Voor discussies en hulp met je smarthome en automatisering kan je hier terecht. DE plaats voor alles over home assistant, Philips hue, Zigbee, Sonoff, ...
Plaats reactie
Gebruikersavatar
Goztow
Administrator
Administrator
Berichten: 15195
Lid geworden op: 14 nov 2006, 16:21
Locatie: Brussel
Uitgedeelde bedankjes: 1689 keer
Bedankt: 1484 keer
Recent bedankt: 8 keer
Provider
Te Koop forum

Graag een beetje hulp bij deze node red flow die ik in hassio wil maken.

Context: ik heb een evohome connect systeem met kranen op elke radiator.
Doelstelling: in de badkamer zou ik graag hebben dat de kraan altijd automatisch na een half uur uitgaat, ideaal vanaf een bepaalde temperatuur is bereikt. Dit om te vermijden dat we vergeten deze af te zetten na een douche of bad.

Entity_id is climate.salle_de_bain . Als ik deze in een events:state zet en er een debug aan hang, dan merk ik dat deze als msg.payload enkel "heat" krijgt. Als ik echter complete msg object aanzet dan merk ik dat er heel wat meer informatie bijkomt. Nu zie ik in de attributes dat het volgende allemaal staat:
hvac_modes: off,heat
min_temp: 5
max_temp: 35
preset_modes: none,temporary,permanent
current_temperature: 20.6
temperature: 16
hvac_action: idle
preset_mode: none
status: {
"setpoints": {
"this_sp_from": "2020-02-15T07:30:00+01:00",
"this_sp_temp": 16,
"next_sp_from": "2020-02-15T22:10:00+01:00",
"next_sp_temp": 16
},
"zone_id": "1574629",
"active_faults": [],
"setpoint_status": {
"target_heat_temperature": 16,
"setpoint_mode": "FollowSchedule"
},
"temperature_status": {
"temperature": 20.5,
"is_available": true
}
}
friendly_name: Salle de bain
icon: mdi:radiator
supported_features: 17
Hoe ga ik verder met de flow vanaf de events:state om op basis van de current_temperature te bepalen dat ik na 30m de target_heat_temperature terug draai?

Dank bij voorbaat.
devastator
Elite Poster
Elite Poster
Berichten: 1339
Lid geworden op: 01 nov 2005, 10:53
Locatie: Pelt
Uitgedeelde bedankjes: 34 keer
Bedankt: 70 keer

ik zie geen payload ?
Dit is bovendien ook geen geldige JSON

Dit is een mogelijke oplossing. De juiste waardes zal je zelf nog moeten invullen. Alsook het script, want de data die je postte is niet geldig.
userbase.png

Code: Selecteer alles

[{"id":"55149c14.4890f4","type":"inject","z":"6a49721.dbb470c","name":"","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":150,"wires":[["4a2b13ed.3e211c"]]},{"id":"4a2b13ed.3e211c","type":"api-current-state","z":"6a49721.dbb470c","name":"","server":"98e45af.82949a8","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"climate.salle_de_bain","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":370,"y":150,"wires":[["6f13ed4a.bc364c"]]},{"id":"6f13ed4a.bc364c","type":"function","z":"6a49721.dbb470c","name":"Temperatuur ok ?","func":"if (msg.payload.current_temperature > msg.payload.target_heat_temperature)\n    return [msg, null];\nelse\n    return [msg, null];","outputs":2,"noerr":0,"x":640,"y":150,"wires":[["12cda7a2.14559"],[]],"outputLabels":["Ja","Nee"]},{"id":"a9ebab2a.64b3f","type":"state-machine","z":"6a49721.dbb470c","name":"","triggerProperty":"topic","triggerPropertyType":"msg","stateProperty":"topic","statePropertyType":"msg","outputStateChangeOnly":true,"throwException":false,"states":["wait","timer"],"transitions":[{"name":"setpoint_reached","from":"wait","to":"timer"},{"name":"finished","from":"timer","to":"wait"}],"x":1005,"y":150,"wires":[["e43e6994.e53738"]]},{"id":"12cda7a2.14559","type":"change","z":"6a49721.dbb470c","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"setpoint_reached","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":150,"wires":[["a9ebab2a.64b3f"]]},{"id":"e43e6994.e53738","type":"switch","z":"6a49721.dbb470c","name":"Start timer ?","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"timer","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1195,"y":150,"wires":[["fdee2c3b.156da8"]]},{"id":"fdee2c3b.156da8","type":"delay","z":"6a49721.dbb470c","name":"","pauseType":"delay","timeout":"30","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1370,"y":150,"wires":[["c09744ad.8400e"]]},{"id":"c09744ad.8400e","type":"api-call-service","z":"6a49721.dbb470c","name":"Uit","server":"98e45af.82949a8","version":1,"debugenabled":false,"service_domain":"","service":"","entityId":"","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1525,"y":150,"wires":[[]]},{"id":"98e45af.82949a8","type":"server","z":"","name":"Home Assistant","legacy":false,"hassio":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false}]
Gebruikersavatar
Goztow
Administrator
Administrator
Berichten: 15195
Lid geworden op: 14 nov 2006, 16:21
Locatie: Brussel
Uitgedeelde bedankjes: 1689 keer
Bedankt: 1484 keer
Recent bedankt: 8 keer
Provider
Te Koop forum

De copy paste komt uit de toestanden in Developer tools.
devastator
Elite Poster
Elite Poster
Berichten: 1339
Lid geworden op: 01 nov 2005, 10:53
Locatie: Pelt
Uitgedeelde bedankjes: 34 keer
Bedankt: 70 keer

Je zou de output van de complete message in node red eens moeten posten
Gebruikersavatar
Goztow
Administrator
Administrator
Berichten: 15195
Lid geworden op: 14 nov 2006, 16:21
Locatie: Brussel
Uitgedeelde bedankjes: 1689 keer
Bedankt: 1484 keer
Recent bedankt: 8 keer
Provider
Te Koop forum

Code: Selecteer alles

{"_msgid":"e290bd94.a254c","topic":"","payload":"heat",
  "data":{"entity_id":"climate.salle_de_bain","state":"heat",
    "attributes":{"hvac_modes":["off","heat"],"min_temp":5,"max_temp":35,"preset_modes":["none","temporary","permanent"],"current_temperature":20.5,"temperature":16,"hvac_action":"idle","preset_mode":"none","status":{"setpoints":{"this_sp_from":"2020-02-15T07:30:00+01:00","this_sp_temp":16,"next_sp_from":"2020-02-15T22:10:00+01:00","next_sp_temp":16},"zone_id":"1574629","active_faults":[],"setpoint_status":{"target_heat_temperature":16,"setpoint_mode":"FollowSchedule"},"temperature_status":{"temperature":20,"is_available":true}},"friendly_name":"Salle de bain","icon":"mdi:radiator","supported_features":17},"last_changed":"2020-02-03T21:15:48.891355+00:00","last_updated":"2020-02-15T11:02:04.066219+00:00","context":{"id":"c25f1997509a40aba01ac080d0db6be5","parent_id":null,"user_id":null},"timeSinceChangedMs":1004863009}}
Ik heb er uiteindelijk een iets eenvoudigere versie van gemaakt dan die van jou:
Capture.PNG

Code: Selecteer alles

[{"id":"f2996ac5.24e418","type":"api-current-state","z":"efb75dfb.36879","name":"Temp in salle de bains","server":"25de906c.af2","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"climate.salle_de_bain","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":390,"y":1300,"wires":[["af2a516.f9fc93"]]},{"id":"6db7b6fa.441068","type":"inject","z":"efb75dfb.36879","name":"check every 5 mins","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":1300,"wires":[["f2996ac5.24e418"]]},{"id":"af2a516.f9fc93","type":"function","z":"efb75dfb.36879","name":"Current temp > target heat temp > 17","func":"if (msg.data.attributes.current_temperature > msg.data.attributes.status.setpoint_status.target_heat_temperature && msg.data.attributes.status.setpoint_status.target_heat_temperature > '17'){\n    return [msg, null];\n}","outputs":1,"noerr":0,"x":710,"y":1300,"wires":[["bac9d5d8.eecb1"]],"outputLabels":["Ja"]},{"id":"bac9d5d8.eecb1","type":"delay","z":"efb75dfb.36879","name":"","pauseType":"delay","timeout":"30","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":990,"y":1260,"wires":[["45b9a59d.df3864"]]},{"id":"45b9a59d.df3864","type":"api-call-service","z":"efb75dfb.36879","name":"Salle de bains heating to 16 degrees","server":"25de906c.af2","version":1,"debugenabled":false,"service_domain":"climate","service":"set_temperature","entityId":"climate.salle_de_bain","data":"{\"temperature\":15}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1270,"y":1260,"wires":[[]]},{"id":"25de906c.af2","type":"server","z":"","name":"Home Assistant"}]
devastator
Elite Poster
Elite Poster
Berichten: 1339
Lid geworden op: 01 nov 2005, 10:53
Locatie: Pelt
Uitgedeelde bedankjes: 34 keer
Bedankt: 70 keer

Dat werkt ook, maar let wel op dat ie nu dus continue berichten gaat sturen naar je unit.

Iedere 5 min wordt de temperatuur gecheckt. Is die OK, dan na een half uur bericht.
5min later > tempertuur ok? -> half uur later bericht
5min later > tempertuur ok? -> half uur later bericht
...

Met de statemachine had je dit niet.
Gebruikersavatar
Goztow
Administrator
Administrator
Berichten: 15195
Lid geworden op: 14 nov 2006, 16:21
Locatie: Brussel
Uitgedeelde bedankjes: 1689 keer
Bedankt: 1484 keer
Recent bedankt: 8 keer
Provider
Te Koop forum

Ik snap wat je bedoelt. Ik heb de indruk dat de statemachine nog niet helemaal goed geconfigureerd is? Aangezien de msg.topic "finished" nooit er naartoe wordt gestuurd? Of is onderstaande OK?

Code: Selecteer alles

[{"id":"b77f5abd.3b15c8","type":"tab","label":"test 4","disabled":false,"info":""},{"id":"f54915aa.8798","type":"api-current-state","z":"b77f5abd.3b15c8","name":"Temp in salle de bains","server":"25de906c.af2","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"climate.salle_de_bain","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":460,"y":180,"wires":[["b2ed7865.4314f"]]},{"id":"d378a280.e4681","type":"inject","z":"b77f5abd.3b15c8","name":"check every 5 mins","topic":"","payload":"","payloadType":"date","repeat":"300","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":180,"wires":[["f54915aa.8798"]]},{"id":"b2ed7865.4314f","type":"function","z":"b77f5abd.3b15c8","name":"Current temp > target heat temp > 17","func":"if (msg.data.attributes.current_temperature > msg.data.attributes.status.setpoint_status.target_heat_temperature && msg.data.attributes.status.setpoint_status.target_heat_temperature > '17'){\n    return [msg, null];\n}","outputs":2,"noerr":0,"x":770,"y":180,"wires":[["9a160cde.105e2"],[]],"outputLabels":["Ja",""]},{"id":"20035a7e.3c2f0e","type":"delay","z":"b77f5abd.3b15c8","name":"","pauseType":"delay","timeout":"30","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1050,"y":180,"wires":[["b67aa963.ee05b"]]},{"id":"b67aa963.ee05b","type":"api-call-service","z":"b77f5abd.3b15c8","name":"Salle de bains heating to 16 degrees","server":"25de906c.af2","version":1,"debugenabled":false,"service_domain":"climate","service":"set_temperature","entityId":"climate.salle_de_bain","data":"{\"temperature\":16}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1330,"y":180,"wires":[[]]},{"id":"d58571e7.7417c8","type":"comment","z":"b77f5abd.3b15c8","name":"Badkamer nooit langer dan een half uur laten aanstaan","info":"","x":700,"y":120,"wires":[]},{"id":"9a160cde.105e2","type":"change","z":"b77f5abd.3b15c8","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"setpoint_reached","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":280,"wires":[["f89155be.bea41"]]},{"id":"f89155be.bea41","type":"state-machine","z":"b77f5abd.3b15c8","name":"","triggerProperty":"topic","triggerPropertyType":"msg","stateProperty":"topic","statePropertyType":"msg","outputStateChangeOnly":true,"throwException":false,"states":["wait","timer"],"transitions":[{"name":"setpoint_reached","from":"wait","to":"timer"},{"name":"finished","from":"timer","to":"wait"}],"x":1005,"y":280,"wires":[["5248838c.38200c"]]},{"id":"5248838c.38200c","type":"switch","z":"b77f5abd.3b15c8","name":"Start timer ?","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"timer","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1195,"y":280,"wires":[["20035a7e.3c2f0e"]]},{"id":"25de906c.af2","type":"server","z":"","name":"Home Assistant"}]
devastator
Elite Poster
Elite Poster
Berichten: 1339
Lid geworden op: 01 nov 2005, 10:53
Locatie: Pelt
Uitgedeelde bedankjes: 34 keer
Bedankt: 70 keer

Die was ik inderdaad vergeten. Na die delay node zou je een change node moeten zetten, en die output terug naar je statemachine. Ben nu even niet op de PC.
Gebruikersavatar
NuKeM
Administrator
Administrator
Berichten: 5690
Lid geworden op: 10 nov 2002, 00:55
Uitgedeelde bedankjes: 129 keer
Bedankt: 269 keer
Recent bedankt: 1 keer

Beetje in lijn met wat jij wil, maar uitzetten van mijn evohome zone doe ik via de climate.turn_off service waarbij je dan de entity_id van je zone moet meegeven. Mijn automation ziet er hiervoor zo uit (bv. als er een raam open gaat in de zone):

Code: Selecteer alles

 - alias: Raamsensor Slaapkamer Open
  description: ''
  trigger:
  - entity_id: binary_sensor.slaapkamerraam_sensor
    for: 00:00:05
    from: 'off'
    platform: state
    to: 'on'
  condition: []
  action:
  - data: {}
    entity_id: climate.slaapkamer
    service: climate.turn_off
Terug opzetten volgens schedule was lastiger om te vinden, maar dat doe ik zo via een automation:

Code: Selecteer alles

 - alias: Raamsensor Slaapkamer Toe
  description: ''
  trigger:
  - entity_id: binary_sensor.slaapkamerraam_sensor
    for: 00:00:05
    from: 'on'
    platform: state
    to: 'off'
  condition: []
  action:
  - data_template:
      temperature: '{{ state_attr(''climate.slaapkamer'', ''status'').setpoints.this_sp_temp
        | float }}'
    entity_id: climate.slaapkamer
    service: climate.set_temperature
  - delay: 00:00:05
  - data:
      preset_mode: none
    entity_id: climate.slaapkamer
    service: climate.set_preset_mode
Die laatste set_preset_mode met delay(!) is nodig omdat hij anders permanent of niet juist op zijn current setpoint wordt gezet. Met bovenstaande volgt hij weer netjes de schedule.

Bovenstaande is natuurlijk niet node red, maar valt wel eenvoudig te vertalen lijkt me.
Plaats reactie

Terug naar “Home automation en domotica”