Habe jetzt ein weiteres Plugin entwickelt. Hiermit lassen sich die Logikprofile von RWE Smarthome einfach in Node Red abbilden.
Installation über "npm install node-red-contrib-sh-logic" im node red Verzeichnis.
Zunächst gibt es eine "SHL Variable", dieser kann man einen beliebigen Wert zuweisen. In Kombination mit den Node Red Nodes "delay" und "trigger" kann man dann einfach Verzögerung und Zurücksetzen der Werte realisieren.
So wird zum Beispiel die Variable "test" gesetzt (um zu sehen dass sich der Wert ändert bitte unten auch die SHL Formula ausprobieren):
Beim Klick auf "Inject" erhält die Variable den Wert 20.
Ein Beispiel mit Verzögerung und Zurücksetzen, hier wird nach zwei Sekunden auf 30 und nach 2 weiteren Sekunden auf 0 gesetzt.
Dann gibt es noch die "SHL Formula" mit der man Variablen über eine Formel abfragen kann. Die Variablen müssen über "SHL Variable" gesetzt worden sein.
In dem Beispiel wird die Variable "test" mit 10 multipliziert und asugegeben, natürlich sind auch Verknüpfungen zwischen verschiedenen Variablen möglich:
Letztenendes gibt es noch die "SHL Calendar" Node. Hiermit lässt sich steuern welche Geräte an welchem Wochentag wann mit welchem Wert gesteuert werden. Das Ganze kann mit fixen Werten gemacht werden (also Montag-Sonntag von 18:00-19:00 30 Grad) oder aber mit den Variablen die man mit SHL Variable gesetzt hat.
In dem Beispiel wird eine SHL Calendar Node erstellt, die einen Dimmer ansteuert. Donnerstags von 19:00-199 wird der Wert aus der Variable "test" (s.o.) verwendet, ansonsten 0.
Hier nochmal zwei realistische Beispiele:
Sonnenuntergang für Berlin in Variable speichern (z.B. um eine Außenlampe einzuschalten):
Aussentemperatur von Berlin in Variable speichern (keine Ahnung, vielleicht soll eine Heizung erst ab einer gewissen Aussentemperatur angehen oder so?)
Bei beiden Beispielen kann man in den Konfigurationen der Inject Node einen wiederkehrenden Timer einstellen um das Ergebnis regelmäßig abzurufen.
Wer keine Lust hat komplett auf Node Red umzustellen kann die Informationen übrigens auch auf einer RWE Variable setzen und dann in der RWE Oberfläche verwenden.
Installation über "npm install node-red-contrib-sh-logic" im node red Verzeichnis.
Zunächst gibt es eine "SHL Variable", dieser kann man einen beliebigen Wert zuweisen. In Kombination mit den Node Red Nodes "delay" und "trigger" kann man dann einfach Verzögerung und Zurücksetzen der Werte realisieren.
So wird zum Beispiel die Variable "test" gesetzt (um zu sehen dass sich der Wert ändert bitte unten auch die SHL Formula ausprobieren):
Code:
[{"id":"dba3287a.245cd8","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":141,"y":381,"z":"338df7ff.cc7208","wires":[["9209734f.6df69"]]},{"id":"9209734f.6df69","type":"function","name":"","func":"msg.payload=20;\nreturn msg;","outputs":1,"x":320,"y":381,"z":"338df7ff.cc7208","wires":[["11a6d23c.ee592e"]]},{"id":"11a6d23c.ee592e","type":"SHL Variable","variable":"test","initial":"1","reset":"","delay":"","x":491,"y":381,"z":"338df7ff.cc7208","wires":[]}]
Ein Beispiel mit Verzögerung und Zurücksetzen, hier wird nach zwei Sekunden auf 30 und nach 2 weiteren Sekunden auf 0 gesetzt.
Code:
[{"id":"1fd033d3.e02fcc","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":91.11111831665039,"y":459.9999771118164,"z":"338df7ff.cc7208","wires":[["8bb3679f.744c98","c51c5b81.3ae3a8"]]},{"id":"bfa67a86.405988","type":"function","name":"","func":"msg.payload=30;\nreturn msg;","outputs":1,"x":365.6666679382324,"y":442.2222328186035,"z":"338df7ff.cc7208","wires":[["b0c4be32.4f3b4"]]},{"id":"b0c4be32.4f3b4","type":"SHL Variable","variable":"test","initial":"1","reset":"","delay":"","x":525.5555458068848,"y":456.6666774749756,"z":"338df7ff.cc7208","wires":[]},{"id":"8bb3679f.744c98","type":"delay","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":222.22220993041992,"y":442.222225189209,"z":"338df7ff.cc7208","wires":[["bfa67a86.405988"]]},{"id":"c51c5b81.3ae3a8","type":"trigger","op1":"1","op2":"0","op1type":"","op2type":"pay","duration":"4","extend":"false","units":"s","name":"","x":224.4444465637207,"y":483.3333683013916,"z":"338df7ff.cc7208","wires":[["9a8f525d.6570b"]]},{"id":"9a8f525d.6570b","type":"function","name":"","func":"msg.payload=0;\nreturn msg;","outputs":1,"x":365.5555534362793,"y":483.3333215713501,"z":"338df7ff.cc7208","wires":[["b0c4be32.4f3b4"]]}]
Dann gibt es noch die "SHL Formula" mit der man Variablen über eine Formel abfragen kann. Die Variablen müssen über "SHL Variable" gesetzt worden sein.
In dem Beispiel wird die Variable "test" mit 10 multipliziert und asugegeben, natürlich sind auch Verknüpfungen zwischen verschiedenen Variablen möglich:
Code:
[{"id":"e29e3ba7.1d61c8","type":"SHL Formula","formula":"test*10","x":191.33334350585938,"y":600.222207069397,"z":"338df7ff.cc7208","wires":[["b4c9de17.4b362"]]},{"id":"b4c9de17.4b362","type":"debug","name":"","active":true,"console":"false","complete":"false","x":338.3333435058594,"y":600.222207069397,"z":"338df7ff.cc7208","wires":[]}]
Letztenendes gibt es noch die "SHL Calendar" Node. Hiermit lässt sich steuern welche Geräte an welchem Wochentag wann mit welchem Wert gesteuert werden. Das Ganze kann mit fixen Werten gemacht werden (also Montag-Sonntag von 18:00-19:00 30 Grad) oder aber mit den Variablen die man mit SHL Variable gesetzt hat.
In dem Beispiel wird eine SHL Calendar Node erstellt, die einen Dimmer ansteuert. Donnerstags von 19:00-199 wird der Wert aus der Variable "test" (s.o.) verwendet, ansonsten 0.
Code:
[{"id":"e2b35b92.1d4ca8","type":"SHL Calendar","attribs":[{"from":"19:00","to":"19:39","formula":"{DmLvl:test}","active":"true","days":["Thursday"]},{"from":"0:00","to":"23:59","formula":"{DmLvl:0}","active":"true","days":["Thursday"]}],"name":"Dimmer","x":287,"y":936,"z":"338df7ff.cc7208","wires":[["cbb5152d.344ae8"]]}]
Hier nochmal zwei realistische Beispiele:
Sonnenuntergang für Berlin in Variable speichern (z.B. um eine Außenlampe einzuschalten):
Code:
[{"id":"39f0b65d.c60f4a","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":271,"y":1215,"z":"338df7ff.cc7208","wires":[["abc8cb5.f543738"]]},{"id":"b43661a8.4bc9a","type":"http request","name":"Get Sunset","method":"GET","url":"http://www.earthtools.org/sun/52.52/13.41/{{day}}/{{month}}/1/1","x":598,"y":1215,"z":"338df7ff.cc7208","wires":[["4c451051.b3baf"]]},{"id":"abc8cb5.f543738","type":"function","name":"Set Date","func":"var date=new Date();\nmsg.day=date.getDay();\nmsg.month=date.getMonth()+1;\nreturn msg;","outputs":1,"x":429,"y":1215,"z":"338df7ff.cc7208","wires":[["b43661a8.4bc9a"]]},{"id":"4c451051.b3baf","type":"xml","name":"","x":329,"y":1323,"z":"338df7ff.cc7208","wires":[["c239099.f3dc6f8"]]},{"id":"c239099.f3dc6f8","type":"function","name":"Parse Response","func":"msg.payload=msg.payload.sun.evening[0].sunset[0].substring(0,5);\nreturn msg;","outputs":1,"x":480,"y":1323,"z":"338df7ff.cc7208","wires":[["2a89c50e.d5763a"]]},{"id":"2a89c50e.d5763a","type":"SHL Variable","variable":"sunset","x":644,"y":1323,"z":"338df7ff.cc7208","wires":[]}]
Aussentemperatur von Berlin in Variable speichern (keine Ahnung, vielleicht soll eine Heizung erst ab einer gewissen Aussentemperatur angehen oder so?)
Code:
[{"id":"38a9ed62.c75612","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":270,"y":1393,"z":"338df7ff.cc7208","wires":[["b9116d2.f46ee9"]]},{"id":"b9116d2.f46ee9","type":"http request","name":"","method":"GET","url":"http://www.webservicex.net/globalweather.asmx/GetWeather?CityName=berlin&CountryName=germany","x":427,"y":1393,"z":"338df7ff.cc7208","wires":[["53d0646.fac2f9c"]]},{"id":"53d0646.fac2f9c","type":"function","name":"Parse Response","func":"msg.payload=parseInt((/Temperature.*?F.*?([0-9]*) C/gi).exec(msg.payload)[1],10);\nreturn msg;","outputs":1,"x":608,"y":1393,"z":"338df7ff.cc7208","wires":[["41c05baa.be3fa4"]]},{"id":"41c05baa.be3fa4","type":"SHL Variable","variable":"temperature","x":798,"y":1393,"z":"338df7ff.cc7208","wires":[]}]
Bei beiden Beispielen kann man in den Konfigurationen der Inject Node einen wiederkehrenden Timer einstellen um das Ergebnis regelmäßig abzurufen.
Wer keine Lust hat komplett auf Node Red umzustellen kann die Informationen übrigens auch auf einer RWE Variable setzen und dann in der RWE Oberfläche verwenden.