Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Network OWL mit Script einlesen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Network OWL mit Script einlesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      pix last edited by

      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
      

      261_bildschirmfoto_2015-08-22_um_22.21.49.jpg

      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.
      261_bildschirmfoto_2015-08-22_um_22.24.06.jpg
      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

      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        Wieso kannst du nicht zu "xml2js, oauth, owlintuition, util, joi, dgram" noch hoek einfügen?

        "xml2js, oauth, owlintuition, util, joi, dgram, hoek"

        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          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

          1 Reply Last reply Reply Quote 0
          • Bluefox
            Bluefox last edited by

            @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

            1 Reply Last reply Reply Quote 0
            • P
              pix last edited by

              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

              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                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 0

                
                Gruß,
                
                Pix
                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                722
                Online

                31.7k
                Users

                79.7k
                Topics

                1.3m
                Posts

                2
                6
                1678
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo