Bedingungen aus HM-Programmen in Node-Red umsetzen

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
Benutzeravatar
Clear
Beiträge: 112
Registriert: 14.01.2018, 18:16
Wohnort: Ebergassing
Hat sich bedankt: 6 Mal
Danksagung erhalten: 7 Mal

Bedingungen aus HM-Programmen in Node-Red umsetzen

Beitrag von Clear » 24.03.2021, 14:09

Hallo Community,
seit kurzem beschäftige ich mit RedMatic und habe nach einigen Startproblemen auch schon ein paar Flows hinbekommen.
viewtopic.php?f=77&t=66380

Um nicht all zuviel Euphorie aufkommen zu lassen :? habe ich mich sogleich daran gemacht ein einfaches Programm aus der Homematic umzusetzen.

Zur Erklärung: Ich überwintere meine Terrassenpflanzen in einem Pflanzenzelt. Dieses Zelt ist mit einem Heizstrahler mit HM-LC-Sw1-DR beheizt und mit einem AskSin++ Termometer HM-WDS40-TH-I-RTC-BME280 überwacht.

Die bisher im Einsatz befindlichen Programme sehen so aus:
Programm Zelt_ein
Zeltheizung_ON.png
Sinkt die Temperatur unter 2° UND der Schaltaktor ist AUS, dann Schaltaktor auf EIN
Programm Zelt_aus
Zeltheizung_OFF.png
Steigt die Temperatur auf >= 3° UND der Schaltaktor ist EIN, dann Schaltaktor auf AUS

Was mit HM easy erscheint ist mit Node Red echt nicht leicht um zu setzen. Vor allem, wenn man die Node Red Message Logik noch nicht verinnerlicht hat.
Jedenfalls habe ich mir zig Videos angesehen, viele Beschreibungen, Wikis und Docs gelesen und natürlich hier im Forum viel gesucht aber offensichtlich nicht das Richtige gefunden.

Nach vielen Versuchen und rumprobieren habe ich nun nachstehende Lösung realisiert:
Zeltheizung.png
Zur Erläuterung:
Zuerst wird die Temperatur ausgelesen "Zelttemp". Den Messwert sende ich an einen Trigger der die Messung alle 30 Sek. weiter leitet, da die Temperatur am Thermometer nur ca. alle 3 Minuten gepollt wird und es deshalb sein kann, dass die Heizung zu spät abschaltet.
Als nächstes kommt ein CCU-Switch-node, wo die Aufteilung entsprechen der Temperatur erfolgt. Ist die Temperatur < 2° wird an Port 1 übergeben. Ist die Temperatur >= 3° an Port 2. Als nächsten Schritt wird mittels "get value node" auf beiden Strängen der Status des Schaltaktors HM-LC-Sw1-DR ausgelesen.
Danach folgt- ebenfalls auf beiden Strängen - ein "switch node". Wenn die Temp. < 2° UND der Aktor aus ist (false), folgt danach eine Invertierung auf true und der Aktor (die Heizung) wird eingeschaltet. Ist die Temp. < 2° UND der Aktor ist bereits an (true), geschieht nichts (Ende).
Der Vorgang ist gleich am Strang 2 wenn die Temperatur >3° erreicht hat. Ist der Aktor an (true) wird invertiert und die Heizung abgeschaltet. Ist der Aktor bereits aus (false) geschieht nichts (Ende Gelände).
Das funktioniert sehr gut.

Code: Alles auswählen

[{"id":"78534a81.5a710c","type":"tab","label":"Zeltheizung","disabled":false,"info":""},{"id":"c7109b7f.293e28","type":"ccu-get-value","z":"78534a81.5a710c","name":"Heizaktor","ccuConfig":"38263145.35ea0e","iface":"BidCos-RF","channel":"PEQ0479305:1 Zeltheizung:1","sysvar":"Alarmmeldungen","sysvarProperty":"value","datapoint":"STATE","datapointProperty":"value","setProp":"payload","setPropType":"msg","x":680,"y":200,"wires":[["5ffea749.856ab8"]]},{"id":"8b9d73ed.2a1e6","type":"ccu-switch","z":"78534a81.5a710c","name":"Zelttemp","ccuConfig":"38263145.35ea0e","iface":"BidCos-RF","channel":"JPTH10I998:1 Zelt_innen:1","sysvar":"Alarmmeldungen","sysvarProperty":"value","datapoint":"TEMPERATURE","datapointProperty":"value","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"2","vt":"str"},{"t":"gte","v":"3","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":480,"y":280,"wires":[["c7109b7f.293e28"],["79d1cb8.7f786b4"]]},{"id":"79d1cb8.7f786b4","type":"ccu-get-value","z":"78534a81.5a710c","name":"Heizaktor","ccuConfig":"38263145.35ea0e","iface":"BidCos-RF","channel":"PEQ0479305:1 Zeltheizung:1","sysvar":"Alarmmeldungen","sysvarProperty":"value","datapoint":"STATE","datapointProperty":"value","setProp":"payload","setPropType":"msg","x":680,"y":360,"wires":[["ac608307.d8e46"]]},{"id":"76ba152e.ea758c","type":"ccu-value","z":"78534a81.5a710c","name":"","iface":"BidCos-RF","channel":"PEQ0479305:1 Zeltheizung:1","datapoint":"STATE","mode":"","start":true,"change":true,"cache":true,"queue":true,"on":"payload","onType":"msg","ramp":0,"rampType":"undefined","working":false,"ccuConfig":"38263145.35ea0e","topic":"${CCU}/${Interface}/${channel}/${datapoint}","x":1260,"y":280,"wires":[[]]},{"id":"b033199.db995e8","type":"ccu-value","z":"78534a81.5a710c","name":"Zelttemp","iface":"BidCos-RF","channel":"JPTH10I998:1 Zelt_innen:1","datapoint":"TEMPERATURE","mode":"","start":true,"change":true,"cache":true,"queue":false,"on":0,"onType":"undefined","ramp":0,"rampType":"undefined","working":false,"ccuConfig":"38263145.35ea0e","topic":"${CCU}/${Interface}/${channel}/${datapoint}","x":120,"y":280,"wires":[["5d7ab910.b35eb8"]]},{"id":"ac608307.d8e46","type":"switch","z":"78534a81.5a710c","name":"Heiz ON","property":"payload","propertyType":"msg","rules":[{"t":"true"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":840,"y":360,"wires":[["cfb8032d.48d81"],[]]},{"id":"5ffea749.856ab8","type":"switch","z":"78534a81.5a710c","name":"Heiz OFF","property":"payload","propertyType":"msg","rules":[{"t":"false"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":840,"y":200,"wires":[["f80e965f.39641"],[]]},{"id":"c15d0901.3a45d","type":"comment","z":"78534a81.5a710c","name":"1: Temperatur <2","info":"","x":460,"y":220,"wires":[]},{"id":"1a39d207.fd02ae","type":"comment","z":"78534a81.5a710c","name":"2: Temperatur >=3","info":"","x":470,"y":340,"wires":[]},{"id":"dc14bc73.6d09d","type":"comment","z":"78534a81.5a710c","name":"Status Heizaktor","info":"","x":680,"y":160,"wires":[]},{"id":"c57b4e26.539818","type":"comment","z":"78534a81.5a710c","name":"1: wenn Heizaktor aus (false)","info":"","x":900,"y":160,"wires":[]},{"id":"f80e965f.39641","type":"Invert","z":"78534a81.5a710c","name":"Invert Status","x":1030,"y":200,"wires":[["76ba152e.ea758c"]]},{"id":"4f6f7229.0b4aac","type":"comment","z":"78534a81.5a710c","name":"1: wenn Heizaktor an (true)","info":"","x":890,"y":320,"wires":[]},{"id":"cfb8032d.48d81","type":"Invert","z":"78534a81.5a710c","name":"Invert Status","x":1030,"y":360,"wires":[["76ba152e.ea758c"]]},{"id":"c977bb7c.f47778","type":"comment","z":"78534a81.5a710c","name":"Heizung an","info":"","x":1210,"y":200,"wires":[]},{"id":"41a8beb3.89662","type":"comment","z":"78534a81.5a710c","name":"Heizung aus","info":"","x":1210,"y":360,"wires":[]},{"id":"ac9c3156.bb696","type":"comment","z":"78534a81.5a710c","name":"Status Heizaktor","info":"","x":680,"y":320,"wires":[]},{"id":"5d7ab910.b35eb8","type":"trigger","z":"78534a81.5a710c","name":"repeat temp 30sec","op1":"","op2":"0","op1type":"pay","op2type":"str","duration":"-30","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":310,"y":280,"wires":[["8b9d73ed.2a1e6"]]},{"id":"31315a01.f989d6","type":"comment","z":"78534a81.5a710c","name":"2: Heizaktor ON, mach nix","info":"","x":890,"y":260,"wires":[]},{"id":"bbd25bea.f70338","type":"comment","z":"78534a81.5a710c","name":"2: Heizaktor OFF, mach nix","info":"","x":890,"y":420,"wires":[]},{"id":"38263145.35ea0e","type":"ccu-connection","name":"localhost","host":"localhost","regaEnabled":true,"bcrfEnabled":true,"iprfEnabled":true,"virtEnabled":true,"bcwiEnabled":false,"cuxdEnabled":true,"regaPoll":true,"regaInterval":"30","rpcPingTimeout":"60","rpcInitAddress":"127.0.0.1","rpcServerHost":"127.0.0.1","rpcBinPort":"2047","rpcXmlPort":"2048","queueTimeout":"5000","queuePause":"250","contextStore":""}]
Was ich nun gerne Wissen möchte und warum ich das hier schreibe ist, ob mein Weg der Richtige ist, ob ich ev. redundant unterwegs bin und es vielleicht eine einfachere Lösung gäbe. Weil, einfach finde ich meine Lösung nicht. Das war in HM leichter umzusetzen.

Um nicht falsch verstanden zu werden: mir gefällt Node red sehr gut und es macht auch viel Spaß, wenn's dann mal klappt.
Ich hoffe auf viele positive Inputs und Reaktionen.

Vielen Dank
Gruß
Clear

rstuck
Beiträge: 94
Registriert: 17.11.2018, 19:53
Hat sich bedankt: 5 Mal
Danksagung erhalten: 16 Mal

Re: Bedingungen aus HM-Programmen in Node-Red umsetzen

Beitrag von rstuck » 26.03.2021, 14:58

Hallo,
ich würde den Temperaturwert direkt an eine bangbang-Node leiten und dann direkt den Schaltaktor ansteuern.
Screenshot_20210326-145232_Opera beta.jpg

Benutzeravatar
Clear
Beiträge: 112
Registriert: 14.01.2018, 18:16
Wohnort: Ebergassing
Hat sich bedankt: 6 Mal
Danksagung erhalten: 7 Mal

Re: Bedingungen aus HM-Programmen in Node-Red umsetzen

Beitrag von Clear » 27.03.2021, 15:13

Hallo rstuck,
vielen Dank für deinen Beitrag.
Genau das habe ich mir erhofft.
Meine Lösung funktionier zwar auch aber die ist ja noch komplexer als die reine HM-Programmlösung.

Dein Lösungsvorschlag mit dem BangBang-node ist natürlich genial.
Als RedMatic Anfänger habe ich nicht gecheckt, dass es hier einen Hysterese-Node gibt.

So sieht der Flow nun aus:
Zeltheizung_Hysterese.png
Zeltheizung_Hysterese.png (9.14 KiB) 427 mal betrachtet
Ist nicht viel übrig geblieben und funktioniert genauso.

Vielen Dank
Gruß
Clear

Antworten

Zurück zu „RedMatic“