Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Youless Script

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Youless Script

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

      Hallo, ich hab ein Problem mit einem Youless Script.

      Die Ausgabe auf der Seite sieht so aus.

      Bildschirmfoto 2020-11-21 um 09.37.10.png

      Wie kann ich das Script so ändern das er mir die Zeile eins auch in einen Datenpunkt umwandelt ?


      createState('CurrentElectricityUsage_WP');
      createState('CurrentElectricityUsage_HH');

      var request= require('request');

      schedule("* * * * * *",

      function()
      {
      request.post({
      url: 'http://192.168.1.46/a'
      },

      function(error, response, body){
      if (body) {
      var parts_WP = body.split('\n')[1].split(' ')[0];
      setState('CurrentElectricityUsage_WP', parts_WP, true);
      }
      });

      request.post({
      url: 'http://192.168.1.46/a'
      }, function(error, response, body){
      if (body) {
      var parts_HH = body.split('\n')[1].split(' ')[0];
      setState('CurrentElectricityUsage_HH', parts_HH, true);
      }
      });
      }
      );

      Da hier im Original Beitrag auch ein anderes Script enthalten war habe ich auch dieses Versucht.


      createState('youLess1', {type: 'number', unit: 'kW'});
      createState('youLess2', {type: 'number', unit: 'kW'});
      var request= require('request');
      request.post({
      url: 'http://192.168.1.46/a'
      }, function(error, response, body){
      if (body) {
      var parts = body.split('\n');
      setState('youLess1', parts[1], true);
      }
      });
      request.post({
      url: 'http://192.168.1.46/a'
      }, function(error, response, body){
      if (body) {
      var parts = body.split('\n');
      setState('youLess2', parts[0], true);
      }
      });

      Hier werden mir beide Werte angezeigt , aber es aktualisiert die Werte nicht -aus diesem Grund habe ich die Aktualisierung eingebaut.


      createState('youLess1', {type: 'number', unit: 'kW'});
      createState('youLess2', {type: 'number', unit: 'kW'});
      var request= require('request');
      schedule("* * * * * *",

      function()
      {

      request.post({
      url: 'http://192.168.1.46/a'
      }, function(error, response, body){
      if (body) {
      var parts = body.split('\n');
      setState('youLess1', parts[1], true);
      }
      });
      request.post({
      url: 'http://192.168.1.46/a'
      }, function(error, response, body){
      if (body) {
      var parts = body.split('\n');
      setState('youLess2', parts[0], true);
      }
      });
      }

      Problem - damit läuft mein Log über mit Fehler über.

      Kann ich die parts[0] abfrage - in das erste Skript einbauen ?

      paul53 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @vitallo last edited by paul53

        @vitallo

        • Code bitte immer in Codetags (</>) posten.
        • Weshalb wird die gleiche URL zweimal hintereinander aufgerufen ?
        • Welche Werte sollen in Datenpunkte ? Nach der Maßeinheit (kW) zu urteilen, die beiden Leistungswerte, also die Werte in Zeilen 2 und 6 ?
        • Es fehlt die Umrechnung von Watt in kW
        • Ist ein Abfrage jede Sekunde erforderlich (Systemlast) ?

        Was ergibt folgendes Test-Skript in der Log-Ausgabe (Code tags) ?

        request.post({url: 'http://192.168.1.46/a?f=j'}, function(error, response, body) {
           if (!error && body) log(body);
        });
        

        Eine Rückgabe als JSON lässt sich einfacher per JS verarbeiten.

        V 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @vitallo last edited by paul53

          @vitallo sagte:

          Kann ich die parts[0] abfrage - in das erste Skript einbauen ?

          parts[0] liefert die erste Zeile (Zählerstand). Damit sind noch Wandlungen erforderlich, um den Wert als Zahl zu erhalten:

             let cnt = parseFloat(parts[0].trim().replace(',', '.'));
          
          1 Reply Last reply Reply Quote 0
          • V
            vitallo @paul53 last edited by

            @paul53 said in Youless Script:

            @vitallo

            • Code bitte immer in Codetags (</>) posten.
            • Weshalb wird die gleiche URL zweimal hintereinander aufgerufen ?
            • Welche Werte sollen in Datenpunkte ? Nach der Maßeinheit (kW) zu urteilen, die beiden Leistungswerte, also die Werte in Zeilen 2 und 6 ?
            • Es fehlt die Umrechnung von Watt in kW
            • Ist ein Abfrage jede Sekunde erforderlich (Systemlast) ?

            Was ergibt folgendes Test-Skript in der Log-Ausgabe (Code tags) ?

            request.post({url: 'http://192.168.1.46/a?f=j'}, function(error, response, body) {
               if (!error && body) log(body);
            });
            

            Eine Rückgabe als JSON lässt sich einfacher per JS verarbeiten.

            • Code bitte immer in Codetags (</>) posten.

            OK , Danke für diesen Hinweis

            • Weshalb wird die gleiche URL zweimal hintereinander aufgerufen ?

            Ich dachte bisher - zwei Werte - zweimal Abfragen.

            • Welche Werte sollen in Datenpunkte ? Nach der Maßeinheit (kW) zu urteilen, die beiden Leistungswerte, also die Werte in Zeilen 2 und 6 ?

            die ersten beiden Zeilen

            erste Zeile = Zählerstand
            zweite Zeile - Aktuelle Last

            • Es fehlt die Umrechnung von Watt in kW

            das wäre nicht notwenig

            • Ist ein Abfrage jede Sekunde erforderlich (Systemlast) ?

            Naja, für den Zählerstand sicherlich nicht.

            Was ergibt folgendes Test-Skript in der Log-Ausgabe (Code tags) ?

            2020-11-21 11:49:23.193 - info: javascript.0 (1107) script.js.Strom.Testskript: {"cnt":" 107835,806","pwr":410,"lvl":38,"dev":"(±7%)","det":"","con":"","sts":"","cs0":" 0,000","ps0":0,"raw":415}

            Mittlerweile , hab ich es soweit hinbekommen das mit dem Code, soweit die beiden Werte gezogen werden - jedoch brauche ich die Einheit (Watt, kHh) nicht.

            Bildschirmfoto 2020-11-21 um 12.55.44.png

            createState('AktuellerVerbrauch');
            createState('Zählerstand');
            
            var request= require('request');
            
            schedule("* * * * * *",
            
            function()
            {
            request.post({
            url: 'http://192.168.1.46/a'
            },
            
            function(error, response, body){
            if (body) {
            var parts = body.split('\n');
            setState('AktuellerVerbrauch', parts[1], true);
            }
            }); 
            
            request.post({
            url: 'http://192.168.1.46/a'
            }, function(error, response, body){
            if (body) {
            var parts = body.split('\n');
            setState('Zählerstand', parts[0], true);
            }
            });
            }
            );```
            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @vitallo last edited by paul53

              @vitallo sagte:

              {"cnt":" 107835,806","pwr":410,

              Die Leistung also in Watt ?

              createState('Aktuelle_Leistung', {type: 'number', unit: 'W', role: 'value.power'});
              createState('Zählerstand', {type: 'number', unit: 'kWh', role: 'value.power.consumption'});
              
              schedule('*/5 * * * * *' , function() { // alle 5 s
                 request.post({url: 'http://192.168.1.46/a?f=j'}, function(error, response, body) {
                    if (!error && body) {
                       let obj = JSON.parse(body);
                       let cnt = parseFloat(obj.cnt.replace(',', '.'));
                       setState('Zählerstand', cnt, true);
                       setState('Aktuelle_Leistung', obj.pwr, true);
                    }
                 });
              });
              
              V 1 Reply Last reply Reply Quote 0
              • V
                vitallo @paul53 last edited by

                @paul53 said in Youless Script:

                @vitallo sagte:

                {"cnt":" 107835,806","pwr":410,

                Die Leistung also in Watt ?

                createState('Aktuelle_Leistung', {type: 'number', unit: 'W', role: 'value.power');
                createState('Zählerstand', {type: 'number', unit: 'kWh', role: 'value.power.consumption');
                
                schedule('*/5 * * * * *' , function() { // alle 5 s
                   request.post({url: 'http://192.168.1.46/a?f=j'}, function(error, response, body) {
                      if (!error && body) {
                         let obj = JSON.parse(body);
                         let cnt = parseFloat(obj.cnt.trim().replace(',', '.'));
                         setState('Zählerstand', cnt, true);
                         setState('Aktuelle_Leistung', obj.pwr, true);
                      }
                   });
                });
                

                Am liebsten wäre mir gar keine Watt oder kWh angaben.

                Habe gerade mal Dein Script getestet - es erfolgt diese Fehlermeldung

                2020-11-21 12:15:24.573 - error: javascript.0 (1107) script.js.Strom.Stromzähler compile failed:
                at script.js.Strom.Stromzähler:1
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) createState('Aktuelle_Leistung', {type: 'number', unit: 'W', role: 'value.power');
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) ^
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) SyntaxError: Unexpected token )
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at new Script (vm.js:83:7)
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at Object.createScript (vm.js:277:10)
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1336:28)
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1559:37)
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at createProblemObject (/opt/iobroker/node_modules/iobroker.javascript/main.js:1645:17)
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at adapter.getForeignState (/opt/iobroker/node_modules/iobroker.javascript/main.js:1196:17)
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at client.get (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:616:17)
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23)
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49)
                2020-11-21 12:15:24.573 - error: javascript.0 (1107) at process._tickCallback (internal/process/next_tick.js:68:7)

                paul53 2 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @vitallo last edited by paul53

                  @vitallo sagte:

                  es erfolgt diese Fehlermeldung

                  Sorry: Geschweifte schließende Klammer vergessen - ist oben korrigiert (Zeilen 1, 2).

                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @vitallo last edited by

                    @vitallo sagte:

                    Am liebsten wäre mir gar keine Watt oder kWh angaben.

                    Der Wert der Datenpunkte sind reine Zahlen.

                    V 1 Reply Last reply Reply Quote 0
                    • V
                      vitallo @paul53 last edited by

                      @paul53 said in Youless Script:

                      @vitallo sagte:

                      Am liebsten wäre mir gar keine Watt oder kWh angaben.

                      Der Wert der Datenpunkte sind reine Zahlen.

                      auch wenn die Einheit dahintersteht ? Ok - Danke

                      Hab eine Fehlermeldung erhalten.


                      2020-11-21 12:26:35.598 - info: javascript.0 (1107) Start javascript script.js.KellerStromzähler
                      2020-11-21 12:26:35.598 - error: javascript.0 (1107) script.js.KellerStromzähler compile failed:
                      at script.js.KellerStromzähler:2
                      2020-11-21 12:26:35.598 - error: javascript.0 (1107) createState('Aktuelle_Leistung', {type: 'number', unit: 'W', role: 'value.power');
                      2020-11-21 12:26:35.598 - error: javascript.0 (1107) ^
                      2020-11-21 12:26:35.598 - error: javascript.0 (1107) SyntaxError: Unexpected token )
                      2020-11-21 12:26:35.598 - error: javascript.0 (1107) at new Script (vm.js:83:7)
                      2020-11-21 12:26:35.599 - error: javascript.0 (1107) at Object.createScript (vm.js:277:10)
                      2020-11-21 12:26:35.599 - error: javascript.0 (1107) at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1336:28)
                      2020-11-21 12:26:35.599 - error: javascript.0 (1107) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1559:37)
                      2020-11-21 12:26:35.599 - error: javascript.0 (1107) at createProblemObject (/opt/iobroker/node_modules/iobroker.javascript/main.js:1645:17)
                      2020-11-21 12:26:35.599 - error: javascript.0 (1107) at adapter.getForeignState (/opt/iobroker/node_modules/iobroker.javascript/main.js:1196:17)
                      2020-11-21 12:26:35.599 - error: javascript.0 (1107) at client.get (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:616:17)
                      2020-11-21 12:26:35.599 - error: javascript.0 (1107) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23)
                      2020-11-21 12:26:35.599 - error: javascript.0 (1107) at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49)
                      2020-11-21 12:26:35.599 - error: javascript.0 (1107) at process._tickCallback (internal/process/next_tick.js:68:7)

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @vitallo last edited by

                        @vitallo sagte:

                        Hab eine Fehlermeldung erhalten.

                        Die beiden ersten Zeilen sind noch nicht korrigiert (schließende geschweifte Klammer).

                        createState('Aktuelle_Leistung', {type: 'number', unit: 'W', role: 'value.power'});
                        createState('Zählerstand', {type: 'number', unit: 'kWh', role: 'value.power.consumption'});
                        
                        V 1 Reply Last reply Reply Quote 0
                        • V
                          vitallo @paul53 last edited by

                          @paul53

                          Ok, jetzt ohne Fehlermeldung

                          Gibt es hier die Möglichkeit noch das W rauszunehmen ?

                          Bildschirmfoto 2020-11-21 um 13.33.50.png

                          in der Zeiten Abfrage ist es raus

                          Bildschirmfoto 2020-11-21 um 13.34.28.png

                          Das ist der Hammer wie schnell Du das zusammen hast - sag auf jeden fall schon mal DANKE

                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @vitallo last edited by

                            @vitallo sagte:

                            Gibt es hier die Möglichkeit noch das W rauszunehmen ?

                            Lösche die Maßeinheit in den Objekt-Eigenschaften unter "Allgemein" (Mülleimer rechts).

                            V 1 Reply Last reply Reply Quote 0
                            • V
                              vitallo @paul53 last edited by

                              @paul53

                              Dann kann ich nun nur noch Herzlichen Dank sagen.

                              Jetzt noch in Grafana einbauen und dann hab ich das mit Deiner Arbeit / Unterstützung erledigt.

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              921
                              Online

                              31.8k
                              Users

                              80.0k
                              Topics

                              1.3m
                              Posts

                              2
                              13
                              638
                              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