NEWS
OWL Intuition mit Node-RED einlesen
-
Hallo,
ich war gestern auf dem Homematic Usertreffen von der Vorfuehrung des Node-RED Adapters so angetan, dass ihn unbedingt sofort ausprobieren musste.
Ein Node kann auf UDP horchen, das passt zum http://www.amazon.de/Network-Owl-Energiemonitor-Funkempf%C3%A4nger-Netzwerkanschluss/dp/B00BVC048O/ref=pd_sim_ce_3?ie=UTF8&refRID=1R8W6H4ZD3CXBSAZ6FYW Strommesser, denn ich in CCU.IO bereits mit einem Adapter von mastermind einegbunden habe.
In Node RED ist das viel einfacher (die Electricity ID habe ich anonymisiert).
Übersicht des Flows:
Zuerst wird der UDP Multicast auf IP 224.192.31.19 Port 22600 (immer gleich) eingelesen.
Dann mit dem switch node prüfen, ob ein Inhalt ankommt (kann auch weggelassen werden).
Danach kommt der function node. Ich habe erstmal nur 4 Ausgänge definiert (es kommen noch mehr, vor allem die wichtigen). Ausserdem lasse ich im Debug Node zur Kontrolle den Gesamten Broadcast anzeigen.
<electricity id="44371900XXXX"><signal rssi="-73" lqi="60"><battery level="100%"><chan id="0"><curr units="w">32.00</curr><day units="wh">594.46</day></chan><chan id="1"><curr units="w">0.00</curr><day units="wh">0.00</day></chan><chan id="2"><curr units="w">0.00</curr><day units="wh">0.00</day></chan></battery></signal></electricity>
Daraus ziehe ich im function Node mit Javascript die Werte (Output auf erstmal 4 setzen, 3 Werte werden eingelesen, einer gesetzt).
var quelle = msg.payload; msg1 = {}; // "electricity id=" finden (15 Zeichen lang), 1 überspringen und danach die 12 Zeichen verwenden var elec_id_startpos = quelle.indexOf('electricity id='); var electricityid = quelle.substr(elec_id_startpos + 15 + 1, 12); msg1.payload = parseInt(electricityid); // Zahl oder String ist egal msg2 = {}; // "rssi=>" finden (5 Zeichen lang), 1 Zeichen "'" überspringen und danach die 3 Zeichen verwenden var rssi_startpos = quelle.indexOf('rssi='); var rssi = quelle.substr(rssi_startpos + 6, 3); rssi = parseInt(rssi); // in Zahl umwandeln msg2.payload = rssi; // eigentlich negative Zahl // "battery level=" finden (14 Zeichen lang), 1 Zeichen "'" überspringen und danach die 4 Zeichen verwenden msg3 = {}; var battery_startpos = quelle.indexOf('battery level='); battery = quelle.substr(battery_startpos + 1 + 14, 4); battery = battery.replace('%',''); // Prozentzeichen entfernen battery = battery.replace("'",""); // ggf "'" entfernen battery = parseInt(battery); // in Zahl umwandeln msg3.payload = battery; msg4={}; msg4.payload = "Wert4 noch nicht ausgelesen"; return [msg1,msg2,msg3, msg4];
Die Ausgänge werden wieder mit dem Debug verbunden für die schnelle Kontrolle (grüne Nodes debug) und schließlich in ioBroker gespielt (blaue nodes iobroker). Dazu den konfigurieren:
Jetzt finden sich die Werte unter den Node Red Objekten:
Jetzt könnte man sie noch im Javascript- und VIS-Adapter weiterverarbeiten. Wenn der Flow fertig ist, kann ich ihn exportieren und zur Verfügung stellen. Wollte nur erstmal anfangen, solange alles noch frisch ist.
Gruß
Pix
-
Super. Genau das habe ich von User erwartet.
Ich denke wir können dafür extra Forum aufmachen, weil ich auch noch die 2 Beispiele mit Stau und Wetter posten will.
-
Okay, dann warte ich noch mit dem Posten der anderen Lösungen. Hab auf der Heimfahrt noch ne Spritpreisgeschichte gemacht und für Hormoran ist auch was dabei 8-)
Gruß
Pix
-
@pix:…. Hab auf der Heimfahrt noch ne Spritpreisgeschichte gemacht und für Hormoran ist auch was dabei 8-)
Gruß
Pix `
mach mich nicht noch neugieriger!
Bluefox' post hat sich doch erledigt, er hat es doch schon verschoben.
Gruß
Rainer
-
@pix:Okay, dann warte ich noch mit dem Posten der anderen Lösungen. Hab auf der Heimfahrt noch ne Spritpreisgeschichte gemacht und für Hormoran ist auch was dabei 8-)
Gruß
Pix `
Spritpreise?
von Tankerkönig?
Gruß
derAuge
-
Hallo,
@derAuge:Spritpreise?
von Tankerkönig? `
Ja, siehe http://forum.iobroker.org/viewtopic.php?f=32&t=614#p4245.Gruß
Pix
-
Hallo,
auch hier nochmal eine vereinfachte Version aus JSON. Damit werden jetzt ID, RSSSI, Battery, Ch1 aktuell, Ch1 Tagessumme ausgelesen und in ioBroker gespeichert.
Flow:
[{"id":"aa6c7136.55939","type":"udp in","name":"Network OWL horchen","iface":"","port":"22600","ipv":"udp4","multicast":"true","group":"224.192.32.19","datatype":"utf8","x":101,"y":41,"z":"dd405887.22bfa8","wires":[["3fd15b2d.c02ea4"]]},{"id":"ff460116.00ba","type":"debug","name":"OWL Ausgabe (original XML)","active":true,"console":"false","complete":"payload","x":1258,"y":36,"z":"dd405887.22bfa8","wires":[]},{"id":"3fd15b2d.c02ea4","type":"switch","name":"Prüfen","property":"payload","rules":[{"t":"nnull"}],"checkall":"true","outputs":1,"x":274,"y":38,"z":"dd405887.22bfa8","wires":[["ff460116.00ba","195ca17.fe6a35f"]]},{"id":"6777bb3e.988844","type":"debug","name":"OWL Ausgabe RSSI","active":true,"console":"false","complete":"payload","x":1219,"y":205,"z":"dd405887.22bfa8","wires":[]},{"id":"70261218.8fd9ec","type":"debug","name":"OWL Ausgabe Battery","active":true,"console":"false","complete":"payload","x":1256,"y":270,"z":"dd405887.22bfa8","wires":[]},{"id":"a9aaff38.5655","type":"ioBroker out","name":"OWL ElectricityID","topic":"OWL_ElectricityID","ack":"true","autoCreate":"true","x":932,"y":161,"z":"dd405887.22bfa8","wires":[]},{"id":"2b2a4b54.d4d5b4","type":"ioBroker out","name":"OWL rssi","topic":"OWL_rssi","ack":"true","autoCreate":"true","x":913,"y":232,"z":"dd405887.22bfa8","wires":[]},{"id":"46a3583b.b95ca8","type":"ioBroker out","name":"OWL battery","topic":"OWL_Battery","ack":"true","autoCreate":"true","x":927,"y":305,"z":"dd405887.22bfa8","wires":[]},{"id":"f7ea8ab1.081578","type":"debug","name":"OWL Ausgabe Kanal 1 aktuell","active":true,"console":"false","complete":"payload","x":1282,"y":346,"z":"dd405887.22bfa8","wires":[]},{"id":"95faa45e.6a0558","type":"ioBroker out","name":"OWL Kanal 1 aktuell","topic":"OWL_Ch1_aktuell","ack":"true","autoCreate":"true","x":943,"y":381,"z":"dd405887.22bfa8","wires":[]},{"id":"a066ac1.f5f995","type":"debug","name":"OWL Ausgabe Kanal 1 Tag","active":true,"console":"false","complete":"payload","x":1273,"y":426,"z":"dd405887.22bfa8","wires":[]},{"id":"1417981a.ebe868","type":"ioBroker out","name":"OWL Kanal 1 Tag","topic":"OWL_Ch1_Tag","ack":"true","autoCreate":"true","x":939,"y":468,"z":"dd405887.22bfa8","wires":[]},{"id":"5c074cbb.a3f8b4","type":"function","name":"Electricity ID","func":"msg.payload = msg.payload.electricity.$.id;\nreturn msg;","outputs":1,"valid":true,"x":670,"y":121,"z":"dd405887.22bfa8","wires":[["1b2c3217.e4d3ce","a9aaff38.5655"]]},{"id":"ef0185c3.10fe78","type":"debug","name":"Ausgabe als JSON","active":true,"console":"false","complete":"payload","x":1223,"y":77,"z":"dd405887.22bfa8","wires":[]},{"id":"1b2c3217.e4d3ce","type":"debug","name":"Ausgabe Electricity ID","active":true,"console":"false","complete":"payload","x":1233,"y":127,"z":"dd405887.22bfa8","wires":[]},{"id":"195ca17.fe6a35f","type":"xml","name":"","attr":"$","chr":"_","x":443,"y":78,"z":"dd405887.22bfa8","wires":[["ef0185c3.10fe78","5c074cbb.a3f8b4","edc113a3.123ef","9d912fdb.626ed","2d3bdbe7.d2c424","ac4a3cbd.53b5c"]]},{"id":"edc113a3.123ef","type":"function","name":"RSSI","func":"msg.payload = parseInt(msg.payload.electricity.signal[0].$.rssi);\nreturn msg;","outputs":1,"valid":true,"x":657,"y":208,"z":"dd405887.22bfa8","wires":[["6777bb3e.988844","2b2a4b54.d4d5b4"]]},{"id":"9d912fdb.626ed","type":"function","name":"Battery","func":"msg.payload = parseInt((msg.payload.electricity.battery[0].$.level).slice(0, -1)); // Prizent weg und integer\nreturn msg;","outputs":1,"valid":true,"x":656,"y":276,"z":"dd405887.22bfa8","wires":[["70261218.8fd9ec","46a3583b.b95ca8"]]},{"id":"2d3bdbe7.d2c424","type":"function","name":"Ch1 aktuell","func":"msg.payload = parseFloat(msg.payload.electricity.chan[0].curr[0]._);\nreturn msg;","outputs":1,"valid":true,"x":658,"y":344,"z":"dd405887.22bfa8","wires":[["f7ea8ab1.081578","95faa45e.6a0558"]]},{"id":"ac4a3cbd.53b5c","type":"function","name":"Ch1 Tag","func":"msg.payload = parseFloat(msg.payload.electricity.chan[0].day[0]._);\nreturn msg;","outputs":1,"valid":true,"x":654,"y":420,"z":"dd405887.22bfa8","wires":[["a066ac1.f5f995","1417981a.ebe868"]]}]
Gruß
Pix
-
Hallo zusammen,
hier noch eine vereinfachte Version mit Ausgabe in verbesserter Baumstruktur (vorbereitet für mehrere OWL-Geräte).
[{"id":"aa6c7136.55939","type":"udp in","name":"Network OWL horchen","iface":"","port":"22600","ipv":"udp4","multicast":"true","group":"224.192.32.19","datatype":"utf8","x":104,"y":35,"z":"dd405887.22bfa8","wires":[["3fd15b2d.c02ea4"]]},{"id":"ff460116.00ba","type":"debug","name":"OWL Ausgabe (original XML)","active":false,"console":"false","complete":"payload","x":410,"y":33,"z":"dd405887.22bfa8","wires":[]},{"id":"3fd15b2d.c02ea4","type":"switch","name":"Prüfen","property":"payload","rules":[{"t":"nnull"}],"checkall":"true","outputs":1,"x":173,"y":118,"z":"dd405887.22bfa8","wires":[["ff460116.00ba","fdce747e.023188"]]},{"id":"f54f19ff.0ab0e8","type":"function","name":"Daten extrahieren","func":"var topic_baum = 'node-red.0.owl.electricity.' + msg.payload.electricity.$.id;\n\nmsg1 = {};\nmsg1.payload = msg.payload.electricity.$.id; // device id\nmsg1.topic = topic_baum + '.id';\n\nmsg2 = {};\nmsg2.payload = msg.payload.electricity.signal[0].$.rssi;\nmsg2.topic = topic_baum + '.rssi';\n\nmsg3 = {};\nmsg3.payload = msg.payload.electricity.battery[0].$.level;\nmsg3.topic = topic_baum + '.battery';\n\nmsg4 = {};\nmsg4.payload = msg.payload.electricity.chan[0].curr[0]._;\nmsg4.topic = topic_baum + '.kanal1.aktuell';\n\nmsg5 = {};\nmsg5.payload = msg.payload.electricity.chan[0].day[0]._;\nmsg5.topic = topic_baum + '.kanal1.tag';\n\nmsg6 = {};\nmsg6.payload = msg.payload.electricity.chan[1].curr[0]._;\nmsg6.topic = topic_baum + '.kanal2.aktuell';\n\nmsg7 = {};\nmsg7.payload = msg.payload.electricity.chan[1].day[0]._;\nmsg7.topic = topic_baum + '.kanal2.tag';\n\nmsg8 = {};\nmsg8.payload = msg.payload.electricity.chan[2].curr[0]._;\nmsg8.topic = topic_baum + '.kanal3.aktuell';\n\nmsg9 = {};\nmsg9.payload = msg.payload.electricity.chan[2].day[0]._;\nmsg9.topic = topic_baum + '.kanal3.tag';\n\nmsg10 = {};\nmsg10.payload = msg.payload.electricity.signal[0].$.lqi;\nmsg10.topic = topic_baum + '.lqi';\n\nreturn [msg1,msg2,msg3,msg4,msg5,msg6,msg7,msg8,msg9, msg10];","outputs":"10","valid":true,"x":527,"y":214,"z":"dd405887.22bfa8","wires":[["22c22d1b.dd3dd2","7d2504bc.82dafc"],["22c22d1b.dd3dd2","7d2504bc.82dafc"],["22c22d1b.dd3dd2","7d2504bc.82dafc"],["22c22d1b.dd3dd2","7d2504bc.82dafc"],["22c22d1b.dd3dd2","7d2504bc.82dafc"],["22c22d1b.dd3dd2","7d2504bc.82dafc"],["22c22d1b.dd3dd2","7d2504bc.82dafc"],["22c22d1b.dd3dd2","7d2504bc.82dafc"],["22c22d1b.dd3dd2","7d2504bc.82dafc"],[]]},{"id":"22c22d1b.dd3dd2","type":"debug","name":"Kontrollausgabe nach Funktion","active":true,"console":"false","complete":"payload","x":901,"y":161,"z":"dd405887.22bfa8","wires":[]},{"id":"60cea4f6.9f315c","type":"debug","name":"Ausgabe nach XML Baustein","active":false,"console":"false","complete":"payload","x":542,"y":75,"z":"dd405887.22bfa8","wires":[]},{"id":"fdce747e.023188","type":"xml","name":"","attr":"$","chr":"_","x":322,"y":171,"z":"dd405887.22bfa8","wires":[["60cea4f6.9f315c","f54f19ff.0ab0e8"]]},{"id":"7d2504bc.82dafc","type":"ioBroker out","name":"ioBroker Ausgabe","topic":"","ack":"false","autoCreate":"false","x":860,"y":272,"z":"dd405887.22bfa8","wires":[]}]
Gruß
Pix
-
Hallo
Ich habe den OWL Adapter auch in ccu.io eingebunden gehabt.
Nun habe ich mich auch getraut auf ioBroker umzusteigen.
Das Problem ist, dass ich bei diesem Thread als Hobbybastler nur Bahnhof verstehe.
Gibt es für ioBroker nicht einen Adapter den man einfach zufügen kann?
Gibt es irgendwo eine Schritt für Schritt Anleitung wie man solche Sachen in ioBroker macht?
Danke & Gruss
Ritschi
-
Hallo Ritschi und Willkommen im Forum.
Leider gibt es noch keinen OneWire-Adapter für ioBroker.
Der node-red Adapter kann in vielen Fällen aber anstelle eines Adapters genutzt werden.
So hat ruhr70 auch erst einen sehr komplexen Flow für die Fritzbox gebaut, bevor das in einem Adapter umgesetzt wurde.
Leider habe ich keine OneWire-Hardware und kann ansonsten nichts dazu sagen.
Gruß
Rainer
-
Hallo Ritschi,
der OWL-Stream kann mit dem UDP Node in Node-Red abgefangen werden.
Du importierst http://forum.iobroker.org/posting.php?mode=reply&f=32&t=606&sid=080f0385faa7151c41c0078447252f12#pr4943 in Node Red. Die nötigen Objekte in ioBroker werden automatisch erzeugt.Unter Objekte/nodered/ findest du dann die Daten.
@Rainer: OWL ist nicht gleich OneWire. Das ist http://theowl.com/index.php/energy-monitors/ac/network-owl/
Gruß
Pix
-
-
Hi Pix
Super, danke. wusste nicht, dass das oben ein Code für Flow ist.
Habe nun importiert und die Daten werden auch angezeigt.
Nun müsste ich doch den Verbrauch P1-3 und Stromverbrauch aktuell und heute irgendwo sehen?
Gruss
Ritschi
-
Hast du die Netzwerkdaten angepasst und rechts oben auf deploy geklickt?
Gruß
Rainer
-
Ja, auf deploy habe ich geklickt, aber die Netzwerkdaten nicht angepasst.
Was und wo muss denn alles angepasst werden?
Habe folgende Error im Log:
2 Aug 16:57:00 - [error] [function:Daten extrahieren] TypeError: Cannot read property '/r> of undefined
Gruss
Ritschi
-
Hallo Ritschi,
Nun müsste ich doch den Verbrauch P1-3 und Stromverbrauch aktuell und heute irgendwo sehen? `
Die siehst du unter Objekte/node-red.0/owl/electricity
Es kann etwas dauern (max 5min), bis die Übertragung vom Network OWL startet. Den Zyklus kann man nicht beeinflussen, node-red bleibt passiv und fängt nur die Daten ab.
Falls nicht, check mal im Flow den blauen ioBroker Ausgabe Button. Der Punkt AutoCreate sollte auf create states if not exist stehen.
Zu Kontrolle der Ausgabe kannst du bei den grünen Debug-Nodes rechts das kleine Viereck anklicken und damit die Ausgabe im Debug-Fenster ein/ausschalten.
Probier mal aus.
Gruß
Pix
-
Hallo pix,
kannst du da etwas zu sagen?
aber die Netzwerkdaten nicht angepasst.
Was und wo muss denn alles angepasst werden? `
Gruß
Rainer
-
Hallo Rainer,
es muss nichts angepasst. Werden. Der Network OWL sendet im lokalen Netzwerk immer auf der gleichen Adresse.
@pix:Zuerst wird der UDP Multicast auf IP 224.192.31.19 Port 22600 (immer gleich) eingelesen. `
Es braucht keinen Login o.ä., die Daten kommen, ob man will oder nicht.Gruß
Pix
-
@pix:Hallo Ritschi,
Nun müsste ich doch den Verbrauch P1-3 und Stromverbrauch aktuell und heute irgendwo sehen? `
Die siehst du unter Objekte/node-red.0/owl/electricity
Es kann etwas dauern (max 5min), bis die Übertragung vom Network OWL startet. Den Zyklus kann man nicht beeinflussen, node-red bleibt passiv und fängt nur die Daten ab.
Falls nicht, check mal im Flow den blauen ioBroker Ausgabe Button. Der Punkt AutoCreate sollte auf create states if not exist stehen.
Zu Kontrolle der Ausgabe kannst du bei den grünen Debug-Nodes rechts das kleine Viereck anklicken und damit die Ausgabe im Debug-Fenster ein/ausschalten.
Probier mal aus.
Gruß
Pix `
Hi Pix
Super Sache, das Problem lag daran dass anstelle "create states if non exist" folgendes angewählt war "Ignore messages for non existing states"
Als ich das geändert hatte, tauchte innerhalb von 5 Minunten der Ordner OWL mit dem Inhalt auf.
Herzlichen Dank allen Helfern!
Gruss
Ritschi
3428_ifttt_1.jpg
3428_ifttt_2.jpg
3428_ifttt_aus_iobroker.jpg -
So und nun schon die nächste Frage
Gibt es eine Möglichkeit die Verbräuche in eine CCU2 Variable zu schreiben?
Zudem interessiert mich nur der Aktuelle Verbrauch aller Phasen und der Tagesverbrauch gesamt.
Gibt es da eine einfache Möglichkeit diese auch auszulesen?
Gruss
Ritschi