NEWS
Network OWL mit Script einlesen
-
Hallo,
da ich leider immer wieder Probleme mit node-red habe, bin ich mit dem Einlesen der OWL-Intuition Daten (Flow http://forum.iobroker.org/viewtopic.php?f=32&t=606&hilit=OWL#p4196) auf Javascript umgestiegen.
Die Daten werden im Netzwerk ja immer von der gleichen Adresse:Port per UDP eingelesen. Das macht die Bibliothek https://www.npmjs.com/package/owlintuition von allaan. Die muss erst noch installiert werden.
Ich habe in der Javascript-Instanz noch diese Bibliotheken installiert:
xml2js, oauth, owlintuition, util, joi, dgram
Jetzt wird's haarig:
im Adapter-Unterordner iobroker.javascript/node_modules ist danach das Modul "joi" installiert. Innerhalb dieses Moduls gibt es das Modul "hoek" (siehe Screenshot). Dieses "hoek" Modul auf die gleiche Ebene wie "joi" kopieren.
Danach gehts./* OWL Daten via UDP einlesen UDP 224.192.32.19:22600 Basis: https://www.npmjs.com/package/owlintuition todo: Monatssummen erstellt: 19.08.2015 von pix 22.08.2015 JSON auslesen */ var http = require('http'); var util = require('util'); var OWL = require('owlintuition'); var owl = new OWL(); owl.monitor(); owl.on('connect', function() { log( "OWL connected" ); }); owl.on('disconnect', function() { log( "OWL disconnected" ); }); // Elektrizitätsmessung // Variablen anlegen createState('OWL.electricity.JSON', {name: 'Network-OWL Daten als JSON'}); createState('OWL.electricity.ID', {name: 'Network-OWL Identifikationsnummer'}); createState('OWL.electricity.ID.Batterie', {name: 'Network-OWL Batterieleistung', unit: '%'}); createState('OWL.electricity.ID.RSSI', {name: 'Network-OWL Sendeleistung', unit: 'db'}); createState('OWL.electricity.ID.Kanal1.aktuell', {name: 'Network-OWL Phase 1 aktuell', unit: 'W'}); createState('OWL.electricity.ID.Kanal1.Tag', {name: 'Network-OWL Phase 1 Tag', unit: 'Wh'}); createState('OWL.electricity.ID.Kanal2.aktuell', {name: 'Network-OWL Phase 2 aktuell', unit: 'W'}); createState('OWL.electricity.ID.Kanal2.Tag', {name: 'Network-OWL Phase 2 Tag', unit: 'Wh'}); createState('OWL.electricity.ID.Kanal3.aktuell', {name: 'Network-OWL Phase 3 aktuell', unit: 'W'}); createState('OWL.electricity.ID.Kanal3.Tag', {name: 'Network-OWL Phase 3 Tag', unit: 'Wh'}); // Daten auslesen owl.on('electricity', function(obj) { log('---------- Network OWL -------'); var objekt = util.inspect(obj, {"depth": null}); objekt_string = objekt.toString(); daten = objekt_string.substring(1, objekt_string.length-1); // Hochkommas am Anfang und Ende abschneiden // log('OWL JSON-Daten eingelesen: ' + daten); daten = JSON.parse(daten.toString()); setState('OWL.electricity.JSON', daten); // ID-Nummer var owl_id = JSON.parse(JSON.stringify(daten.id).toString()); setState('OWL.electricity.ID', owl_id); log('OWL ID: ' + owl_id); // Empfang var owl_rssi = JSON.parse(JSON.stringify(daten.signal.rssi).toString()); setState('OWL.electricity.ID.RSSI', parseFloat(owl_rssi)); log('OWL RSSI: ' + owl_rssi + ' dB'); // Batterie var owl_batterie = JSON.parse(JSON.stringify(daten.battery).toString()); setState('OWL.electricity.ID.Batterie', parseInt(owl_batterie,10)); // ohne % log('OWL Batterie: ' + parseInt(owl_batterie,10) + '%'); // Kanal 1 var kanal1 = JSON.parse(JSON.stringify(daten.channels[0]).toString()); // Verschachtelung nötig, da Feld '0' heißt var owl_ch1_aktuell = kanal1[0].current; setState('OWL.electricity.ID.Kanal1.aktuell', parseInt(owl_ch1_aktuell)); log('OWL Phase 1 aktuell: ' + owl_ch1_aktuell + ' W'); var owl_ch1_tag = kanal1[1].day; setState('OWL.electricity.ID.Kanal1.Tag', parseFloat(owl_ch1_tag)); log('OWL Phase 1 Tag: ' + owl_ch1_tag + ' Wh'); // Kanal 2 var kanal2 = JSON.parse(JSON.stringify(daten.channels[1]).toString()); var owl_ch2_aktuell = kanal2[0].current; setState('OWL.electricity.ID.Kanal2.aktuell', parseInt(owl_ch2_aktuell)); log('OWL Phase 2 aktuell: ' + owl_ch2_aktuell + ' W'); var owl_ch2_tag = kanal2[1].day; setState('OWL.electricity.ID.Kanal2.Tag', parseFloat(owl_ch2_tag)); log('OWL Phase 2 Tag: ' + owl_ch2_tag + ' Wh'); // Kanal 3 var kanal3 = JSON.parse(JSON.stringify(daten.channels[2]).toString()); var owl_ch3_aktuell = kanal3[0].current; setState('OWL.electricity.ID.Kanal3.aktuell', parseInt(owl_ch3_aktuell)); log('OWL Phase 3 aktuell: ' + owl_ch3_aktuell + ' W'); var owl_ch3_tag = kanal3[1].day; setState('OWL.electricity.ID.Kanal3.Tag', parseFloat(owl_ch3_tag)); log('OWL Phase 3 Tag: ' + owl_ch3_tag + ' Wh'); log('------------------------------'); });
__Eine Frage habe ich allerdings noch: :?
Wer kann erklären, warum das Script sich mehrfach aufruft, wenn man es mehrfach edititert und wieder abgespeichert hat? Das nur am Rande.__
Vielleicht mag noch jemand die Monatssummen einfügen, so wie hier Rookie das http://forum.iobroker.org/viewtopic.php?f=32&t=606&p=9974&hilit=OWL#p9974 schon mal gemacht hat.
Gruß und viel Erfolg,
Pix
-
Wieso kannst du nicht zu "xml2js, oauth, owlintuition, util, joi, dgram" noch hoek einfügen?
"xml2js, oauth, owlintuition, util, joi, dgram, hoek"
-
Schon dgram hat Probleme gemacht, hoek ließ sich so gar nicht mehr installieren. Habe das Gefühl, es können nicht so viele Module auf einmal installiert werden. Man kann natürlich jedes Modul einzeln laden und die Instanz jeweils danach Neustarten. Einmal installiert, bleibt auch installiert.
Gruß
Pix
Gesendet von meinem iPhone mit Tapatalk
-
@pix:Schon dgram hat Probleme gemacht, hoek ließ sich so gar nicht mehr installieren. Habe das Gefühl, es können nicht so viele Module auf einmal installiert werden. Man kann natürlich jedes Modul einzeln laden und die Instanz jeweils danach Neustarten. Einmal installiert, bleibt auch installiert.
Gruß
Pix
Gesendet von meinem iPhone mit Tapatalk `
Es ist übrigens ein Fehler gewesen. Nächstes mal sofort berichten. Jetzt sollte gehen. 8-)
5683_bildschirmfoto_2018-02-17_um_16.43.57.png
5683_bildschirmfoto_2018-02-17_um_16.45.16.png
5683_bildschirmfoto_2018-02-17_um_16.45.50.png -
Hallo zusammen,
hier nochmal eine kleine Aktualisierung.
Neu im Skript sind die Summen aller Phasen (aktuell und Tag) und das schaltbare Loggen. Da das Skript minütlich läuft, würde nach der Testphase zuviel geloggt werden. Kann man jetzt oben ausschalten.
/* OWL Daten via UDP einlesen UDP 224.192.32.19:22600 alle 60s Basis: https://www.npmjs.com/package/owlintuition todo: Monatssummen erstellt: 19.08.2015 von pix 22.08.2015 JSON auslesen 23.08.2015 Tagessummen und aktuelle Messung aller drei Phasen addiert Log-Ausgabe zentral schalten */ var logging = false; // (true;false) Logausgabe zentral schalten, da minütlich ein Mehrzeiler geloggt wird. var http = require('http'); var util = require('util'); var OWL = require('owlintuition'); var owl = new OWL(); owl.monitor(); owl.on('connect', function() { log( "OWL connected" ); }); owl.on('disconnect', function() { log( "OWL disconnected" ); }); // Elektrizitätsmessung // Variablen anlegen createState('OWL.electricity.JSON', {name: 'Network-OWL Daten als JSON'}); createState('OWL.electricity.ID', {name: 'Network-OWL Identifikationsnummer'}); createState('OWL.electricity.ID.Batterie', {name: 'Network-OWL Batterieleistung', unit: '%'}); createState('OWL.electricity.ID.RSSI', {name: 'Network-OWL Sendeleistung', unit: 'db'}); createState('OWL.electricity.ID.Kanal1.aktuell', {name: 'Network-OWL Phase 1 aktuell', unit: 'W'}); createState('OWL.electricity.ID.Kanal1.Tag', {name: 'Network-OWL Phase 1 Tag', unit: 'Wh'}); createState('OWL.electricity.ID.Kanal2.aktuell', {name: 'Network-OWL Phase 2 aktuell', unit: 'W'}); createState('OWL.electricity.ID.Kanal2.Tag', {name: 'Network-OWL Phase 2 Tag', unit: 'Wh'}); createState('OWL.electricity.ID.Kanal3.aktuell', {name: 'Network-OWL Phase 3 aktuell', unit: 'W'}); createState('OWL.electricity.ID.Kanal3.Tag', {name: 'Network-OWL Phase 3 Tag', unit: 'Wh'}); // Variablen für Summe der Kanäle anlegen createState('OWL.electricity.ID.Summe.aktuell', {name: 'Network-OWL Summe aller Phasen aktuell', unit: 'W'}); createState('OWL.electricity.ID.Summe.Tag', {name: 'Network-OWL Summe aller Phasen Tag', unit: 'Wh'}); // Daten einlesen owl.on('electricity', function(obj) { if (logging) log('---------- Network OWL -------'); var objekt = util.inspect(obj, {"depth": null}); objekt_string = objekt.toString(); daten = objekt_string.substring(1, objekt_string.length-1); // Hochkommas am Anfang und Ende abschneiden // log('OWL JSON-Daten eingelesen: ' + daten); daten = JSON.parse(daten.toString()); setState('OWL.electricity.JSON', daten); // ID-Nummer var owl_id = JSON.parse(JSON.stringify(daten.id).toString()); setState('OWL.electricity.ID', owl_id); if (logging) log('OWL ID: ' + owl_id); // Empfang var owl_rssi = JSON.parse(JSON.stringify(daten.signal.rssi).toString()); setState('OWL.electricity.ID.RSSI', parseFloat(owl_rssi)); if (logging) log('OWL RSSI: ' + owl_rssi + ' dB'); // Batterie var owl_batterie = JSON.parse(JSON.stringify(daten.battery).toString()); setState('OWL.electricity.ID.Batterie', parseInt(owl_batterie,10)); // ohne % if (logging) log('OWL Batterie: ' + parseInt(owl_batterie,10) + '%'); // Kanal 1 var kanal1 = JSON.parse(JSON.stringify(daten.channels[0]).toString()); // Verschachtelung nötig, da Feld '0' heißt var owl_ch1_aktuell = kanal1[0].current; setState('OWL.electricity.ID.Kanal1.aktuell', parseInt(owl_ch1_aktuell)); if (logging) log('OWL Phase 1 aktuell: ' + owl_ch1_aktuell + ' W'); var owl_ch1_tag = kanal1[1].day; setState('OWL.electricity.ID.Kanal1.Tag', parseFloat(owl_ch1_tag)); if (logging) log('OWL Phase 1 Tag: ' + owl_ch1_tag + ' Wh'); // Kanal 2 var kanal2 = JSON.parse(JSON.stringify(daten.channels[1]).toString()); var owl_ch2_aktuell = kanal2[0].current; setState('OWL.electricity.ID.Kanal2.aktuell', parseInt(owl_ch2_aktuell)); if (logging) log('OWL Phase 2 aktuell: ' + owl_ch2_aktuell + ' W'); var owl_ch2_tag = kanal2[1].day; setState('OWL.electricity.ID.Kanal2.Tag', parseFloat(owl_ch2_tag)); if (logging) log('OWL Phase 2 Tag: ' + owl_ch2_tag + ' Wh'); // Kanal 3 var kanal3 = JSON.parse(JSON.stringify(daten.channels[2]).toString()); var owl_ch3_aktuell = kanal3[0].current; setState('OWL.electricity.ID.Kanal3.aktuell', parseInt(owl_ch3_aktuell)); if (logging) log('OWL Phase 3 aktuell: ' + owl_ch3_aktuell + ' W'); var owl_ch3_tag = kanal3[1].day; setState('OWL.electricity.ID.Kanal3.Tag', parseFloat(owl_ch3_tag)); if (logging) log('OWL Phase 3 Tag: ' + owl_ch3_tag + ' Wh'); // Summe aller Phasen (selbst generiert, wird nicht übertragen) var summe_aller_phasen_aktuell = parseInt(owl_ch1_aktuell) + parseInt(owl_ch2_aktuell) + parseInt(owl_ch3_aktuell); setState('OWL.electricity.ID.Summe.aktuell', summe_aller_phasen_aktuell); if (logging) log('OWL Phase 1-3 aktuell: ' + summe_aller_phasen_aktuell + ' W'); var summe_aller_phasen_tag = parseFloat(owl_ch1_tag) + parseFloat(owl_ch2_tag) + parseFloat(owl_ch3_tag); setState('OWL.electricity.ID.Summe.Tag', summe_aller_phasen_tag); if (logging) log('OWL Phase 1-3 Tag: ' + summe_aller_phasen_tag + ' Wh'); if (logging) log('------------------------------'); });
Gruß
Pix
-
Hallo,
hab Ihr OWL-Besitzer auch neuerdings das Problem, dass der json String nicht mehr die Channels liefert und nach dem Batterie-Wert endet?
{"id":"44XXXXXXXXXXXXX","signal":{"rssi":"-78","lqi":"77"},"battery":"100%","channels":{"2":null}}
Scheinbar wird das notwendige Modul owlintuiion nicht mehr gefunden.
2015-09-25 19:50:31.276 - error: javascript.2 script.js.OWL: Cannot find module '/Users/pix/Documents/iobroker/node_modules/iobroker.javascript/node_modules/owlintuition' at script.js.OWL:80:11 2015-09-25 19:50:31.282 - error: javascript.2 script.js.OWL: TypeError: undefined is not a function
Es lässt sich aber auch nicht nachinstallieren
2015-09-25 19:50:26.034 - error: javascript.2 npm ERR! System Darwin 14.4.0 npm ERR! command "node" "/usr/local/bin/npm" "install" "owlintuition" "--production" "--prefix" "/Users/pix/Documents/iobroker/node_modules/iobroker.javascript"
! ````
sudo npm install owlintuition --production --prefix /Users/pix/Documents/iobroker/node_modules/iobroker.javascript
Password:
npm WARN package.json util@0.10.3 util is also the name of a node core module.
npm WARN engine hoek@2.16.3: wanted: {"node":">=0.10.40"} (current: {"node":"0.10.33","npm":"1.4.28"})
/
iconv@2.1.11 install /Users/pix/Documents/iobroker/node_modules/iobroker.javascript/node_modules/owlintuition/node_modules/xml2json/node_modules/node-expat/node_modules/iconv
node-gyp rebuild
! Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.
! Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.
! gyp ERR! build error
gyp ERR! stack Error:make
failed with exit code: 69
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack at ChildProcess.emit (events.js:98:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:810:12)
gyp ERR! System Darwin 14.4.0
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/pix/Documents/iobroker/node_modules/iobroker.javascript/node_modules/owlintuition/node_modules/xml2json/node_modules/node-expat/node_modules/iconv
gyp ERR! node -v v0.10.33
gyp ERR! node-gyp -v v1.0.1
gyp ERR! not ok
! npm ERR! iconv@2.1.11 install:node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the iconv@2.1.11 install script.
npm ERR! This is most likely a problem with the iconv package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls iconv
npm ERR! There is likely additional logging output above.
npm ERR! System Darwin 14.4.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "owlintuition" "--production" "--prefix" "/Users/pix/Documents/iobroker/node_modules/iobroker.javascript"
npm ERR! cwd /Users/pix/Documents/iobroker
npm ERR! node -v v0.10.33
npm ERR! npm -v 1.4.28
npm ERR! code ELIFECYCLE
npm ERR! not ok code 0Gruß, Pix