Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Werte auslesen und addieren / wie dann anzeigen

    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

    Werte auslesen und addieren / wie dann anzeigen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @GTV last edited by

      @GTV
      Suchst du so etwas?

      https://forum.iobroker.net/topic/20966/addieren-von-3-objekten

      1 Reply Last reply Reply Quote 0
      • G
        GTV last edited by

        Ganz ehrlich .... das verstehe ich "noch" nicht... da fehlt mir das Hintergrundwissen zu .

        Habe bei den Beispielen einen JS Sript gesehen.. der ist zumindest für mich logischer..

        Das man wie in VBA einen Recordset der Werte macht und dann einfach zusammen zählt.

        Wobei bei IOBorker man das dann in einen Datenpunkt schreiben muss ... glaube ich...

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

          @GTV Vorschlag als Javascript:

          const idAudio = 'sonoff.0.AUDIO.ENERGY_Total';
          const idEdv   = 'sonoff.0.EDV.ENERGY_Total';
          const idSumme = 'ENERGY_Total.Summe';
          
          // Variablen für zu addierende Werte deklarieren und für Skriptstart initialisieren
          var audio = getState(idAudio).val;
          var edv   = getState(idEdv).val;
          
          // Datenpunkt für Summe erzeugen
          createState(idSumme, 0, {type: 'number', unit: 'kWh'});
          
          function summe() {
             setState(idSumme, audio + edv, true); // Summe in Datenpunkt schreiben
          }
          
          setTimeout(summe, 200); // Skriptstart
          
          // Reaktion bei Wertänderung
          on(idAudio, function(dp) {
             audio = dp.state.val;
             summe();
          });
          on(idEdv, function(dp) {
             edv = dp.state.val;
             summe();
          });
          
          1 Reply Last reply Reply Quote 0
          • G
            GTV last edited by

            Ja sowas verstehe ich schon ehr : ) Blöde Frage den code als Common oder Global anlegen ? Und wie stelle ich das Ergebniss dann im VIS da ?

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

              @GTV sagte:

              code als Common oder Global

              Das Skript unter der Gruppe common oder unter einer selbst erstellten Gruppe erstellen. Auf keinen Fall unter der Gruppe global !!

              1 Reply Last reply Reply Quote 0
              • G
                GTV last edited by

                const idAudio = 'sonoff.0.AUDIO.ENERGY_Total';
                
                const idEdv  = 'sonoff.0.EDV.ENERGY_Total';
                
                const idHZ  = 'sonoff.0.HZ.ENERGY_Total';
                
                const idSumme = 'ENERGY_Total.Summe';
                
                
                // Variablen für zu addierende Werte deklarieren und für Skriptstart initialisieren
                
                var audio = getState(idAudio).val;
                
                var edv    = getState(idEdv).val;
                
                var hz    = getState(idHZ).val;
                
                
                // Datenpunkt für Summe erzeugen
                
                createState(idSumme, 0, {type: 'number', unit: 'kWh'});
                
                function summe() {
                
                   setState(idSumme, audio + edv + hz, true); // Summe in Datenpunkt schreiben
                
                }
                
                 
                
                summe(); // Skriptstart
                
                 
                
                // Reaktion bei Wertänderung
                
                on(idAudio, function(dp) {
                
                   audio = dp.state.val;
                
                   summe();
                
                });
                
                on(idEdv, function(dp) {
                
                   edv = dp.state.val;
                
                   summe();
                
                });
                

                Soweit habe ich das jetzt ... In Zeile 25 habe ich nach True eine ) gesetzt. beim starten bekomme ich noch

                18:36:25.109	error	javascript.0 script.js.common.KWH1 compile failed: at script.js.common.KWH1:25
                

                Kannst du da bitte noch mal rauf schauen...

                1 Reply Last reply Reply Quote 0
                • G
                  GTV last edited by

                  Sorry zeile 25 ) an falscher Stelle gesetzt.

                  Jetzt kommt noch eine Meldung

                  18:44:17.263	error	javascript.0 script.js.common.KWH1 compile failed: at script.js.common.KWH1:22
                  

                  Da steht ja aber gar nichts drin..

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

                    Mit Zeile 22 kann ich auch nichts anfangen. Da Du setTimeout() beim Skriptstart weggelassen hast, bringt setState() beim allerersten Skriptstart einen Fehler, da der zugehörige Datenpunkt noch nicht existiert (dauert etwas).

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

                      @GTV Habe Dein Skript getestet: Compiler-Fehler kommen bei mir nicht. Lösche mal die überflüssigen Leerzeilen.

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

                        @paul53 Habe jetzt mal alles rausgeworfen.. es kommen zwar immer noch Error Meldungen aber der Code läuft..

                        const idAudio = 'sonoff.0.AUDIO.ENERGY_Total';
                        const idEdv   = 'sonoff.0.EDV.ENERGY_Total';
                        const idHz    = 'sonoff.0.HZ.ENERGY_Total';
                        const idKh    = 'sonoff.0.Kuehlschrank.ENERGY_Total';
                        const idSumme = 'ENERGY_Total.Summe';
                        var audio = getState(idAudio).val;
                        var edv   = getState(idEdv).val;
                        var hz    = getState(idHz).val;
                        var kh    = getState(idKh).val;
                        createState(idSumme, 0, {type: 'number', unit: 'kWh'});
                        var sum = audio + edv + hz + kh
                        function summe() {setState(idSumme, sum,true);}
                        setTimeout(summe, 200);
                        on(idAudio, function(dp) {
                           audio = dp.state.val;
                           summe();
                        });
                        on(idEdv, function(dp) {
                           edv = dp.state.val;
                           summe();
                        });
                        on(idHz, function(dp) {
                           hz = dp.state.val;
                           summe();
                        });
                        on(idKh, function(dp) {
                           kh = dp.state.val;
                           summe();
                        });
                        

                        Vielen Dank für deine Hilfe !!!

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

                          @GTV Die Summenbildung funktioniert so nur einmal bei Skriptstart. Richtig:

                          function summe() {
                             var sum = audio + edv + hz + kh;
                             setState(idSumme, sum, true);
                          }
                          
                          G 1 Reply Last reply Reply Quote 0
                          • G
                            GTV @paul53 last edited by

                            @paul53 Danke ! Schon geändert. Muss noch viel lernen bei JS.... 😉

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            815
                            Online

                            31.8k
                            Users

                            79.9k
                            Topics

                            1.3m
                            Posts

                            blockly javascript node-red
                            3
                            13
                            5873
                            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