Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Addieren des Stromverbrauches von L1 L2 L3

    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

    [Gelöst] Addieren des Stromverbrauches von L1 L2 L3

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

      Hallo Zusammen,

      ich würde gerne den Stromverbrauch eines dreiphasig angeschlossenen Herdes aus den Einzelwerten addieren um dann zum einen den Gesamtverbrauch anzuzeigen und zum anderen die Umschaltung (Text, Farbe etc.) einer Metro Schaltfläche zu steuern.

      Ich habe mir dafür einen einfachen node-red flow gebaut, der den Verbrauch von L1 misst und bei Überschreiten eines bestimmten Verbrauches ein Variable auf true oder false setzt. Das funktioniert soweit auch sehr gut.

      Ich stehe aber vollkommen auf dem Schlauch, wie ich die Verbrauchswerte nun von allen drei Phasen addieren kann. Kann ich das in node-red, was natürlich am einfachsten wäre, oder brauche ich ein Script mit dem ich den Gesamtverbrauch errechne und dann ne Variable damit befülle auf die ich dann aus node-red heraus zugreife?

      Wäre sehr dankbar für Eure Unterstützung

      Gruß

      Bernhard

      Edit, 3.1.2016

      Kaum 2 Wochen später 😄 , ist hier auch schon die Lösung. Zur Erinnerung. Es ging mir um einen NodeRed-Flow, der mir die drei Werte addiert. Darüber hinaus auch noch eine Boolsche Variable setzt auf die ein Widget reagieren kann, und noch den kumulierten Wert in eine eigene neue Variable setzt um den Gesamtwert dann anzuzeigen.

      Vielleicht hlfts ja auch jemand anderem.

      ! [{"id":"dcbfbd00.23404","type":"ioBroker in","name":"Herd-L1","topic":"b-control-em.1.Herd-L1_0001201210230031","payloadType":"value","x":167.8958282470703,"y":80.88888549804688,"z":"2cb51836.d34ae8","wires":[["f6f6f5b5.090908"]]},{"id":"205e92a8.dfa16e","type":"ioBroker in","name":"Herd-L2","topic":"b-control-em.1.Herd-L2_0001201210250429","payloadType":"value","x":167.8958282470703,"y":176.88890075683594,"z":"2cb51836.d34ae8","wires":[["888f0411.7770f8"]]},{"id":"d91f1185.26e0f","type":"ioBroker in","name":"Herd-L3","topic":"b-control-em.1.Herd-L3_0001201209240147","payloadType":"value","x":166.8958282470703,"y":260.888916015625,"z":"2cb51836.d34ae8","wires":[["b63c594.f49c3a8"]]},{"id":"ce395248.31c6b","type":"function","name":"parseFloat und Addition","func":"context.data = context.data || new Object();\n\nswitch (msg.topic) {\n case "consL1":\n context.data.consL1 = msg.payload;\n msg = null;\n break;\n case "consL2":\n context.data.consL2 = msg.payload;\n msg = null;\n break;\n \n case "consL3":\n context.data.consL3 = msg.payload;\n msg = null;\n break;\n \n default:\n msg = null;\n \tbreak;\n\n}\nif(context.data.consL1 != null && context.data.consL2 != null && context.data.consL3 != null) {\n//L1 = parseFloat(context.data.consL1);\n//L2 = parseFloat(context.data.consL2);\n//L3 = parseFloat(context.data.consL3);\nmsg2 = new Object();\nmsg2 = context.data;\nmsg2.payload = parseFloat(context.data.consL1)+parseFloat(context.data.consL2)+parseFloat(context.data.consL3);\ncontext.data=null;\nreturn msg2;\n} else return msg;","outputs":1,"noerr":0,"x":579.2291717529297,"y":174.88888549804688,"z":"2cb51836.d34ae8","wires":[["9fc5c6d5.603a38","bf61bff0.409e4"]]},{"id":"f6f6f5b5.090908","type":"function","name":"consL1","func":"msg.topic="consL1";\n//msg.payload="Task1's payload"\nreturn msg;","outputs":1,"noerr":0,"x":342.2291717529297,"y":83.88888549804688,"z":"2cb51836.d34ae8","wires":[["ce395248.31c6b"]]},{"id":"888f0411.7770f8","type":"function","name":"consL2","func":"msg.topic="consL2";\n//msg.payload="Task2's payload"\nreturn msg;","outputs":1,"noerr":0,"x":345.2291717529297,"y":178.88888549804688,"z":"2cb51836.d34ae8","wires":[["ce395248.31c6b"]]},{"id":"b63c594.f49c3a8","type":"function","name":"consL3","func":"msg.topic="consL3";\n//msg.payload="Task3's payload"\nreturn msg;","outputs":1,"noerr":0,"x":340.2291717529297,"y":262.8888854980469,"z":"2cb51836.d34ae8","wires":[["ce395248.31c6b"]]},{"id":"42e66c00.bd1994","type":"ioBroker out","name":"node-red.0.consumption.herd_bool","topic":"node-red.0.consumption.herd_bool","ack":"true","autoCreate":"true","x":1368.8960418701172,"y":118.88888549804688,"z":"2cb51836.d34ae8","wires":[]},{"id":"9fc5c6d5.603a38","type":"switch","name":"An oder Aus?","property":"payload","rules":[{"t":"lte","v":"5"},{"t":"else"}],"checkall":"true","outputs":2,"x":841.8958587646484,"y":121.88888549804688,"z":"2cb51836.d34ae8","wires":[["9ce0667a.631f98"],["d4341833.2bcbe8"]]},{"id":"9ce0667a.631f98","type":"change","name":"false bei Aus","rules":[{"t":"set","p":"payload","to":"true"}],"action":"","property":"","from":"","to":"","reg":false,"x":1070.8958587646484,"y":82.88888549804688,"z":"2cb51836.d34ae8","wires":[["42e66c00.bd1994"]]},{"id":"d4341833.2bcbe8","type":"change","name":"true bei An","rules":[{"t":"set","p":"payload","to":"false"}],"action":"","property":"","from":"","to":"","reg":false,"x":1067.8958587646484,"y":160.88890075683594,"z":"2cb51836.d34ae8","wires":[["42e66c00.bd1994"]]},{"id":"bf61bff0.409e4","type":"ioBroker out","name":"node-red.0.consumption.herd_value","topic":"node-red.0.consumption.herd_value","ack":"true","autoCreate":"true","x":910.8958587646484,"y":223.88888549804688,"z":"2cb51836.d34ae8","wires":[]}]
      5373_alarmanlage.txt

      1 Reply Last reply Reply Quote 0
      • blauholsten
        blauholsten Developer last edited by

        Hi,

        habe zwar keine Ahnung von JS, aber probiere mal das…

        createState('verbrauch', 0);
        crateState('alarm', 0);
        
        var eins = parseFloat(id:"StromL1");
        var zwei = parseFloat(id:"StromL2");
        var drei = parseFloat(id:"StromL3");
        
        var isteins = getState(eins).val;
        var istzwei = getState(zwei).val;
        var istdrei = getState(drei).val;
        
        function summe();
        
        var verbrauch = (eins + zwei + drei);
        
        if(verbrauch>xxx)
        {
        setState(alarm, 1);
        }
        elseif(verbrauch
        

        aber aus Elektrotechnischer Sicht macht es mehr sin sich die Leistung anzeigen zu lassen….````
        var verbrauch = ((eins + zwei + drei)*230);

        1 Reply Last reply Reply Quote 0
        • H
          Heinzelmaennchen last edited by

          Hallo Blauholsten,

          herzlichen Dank für den Denkansatz. Ich glaube fast dass ich das hinbekomme. Auf jeden Fall werde ich das mal auf eigene Faust versuchen als Script dann so umzusetzen. Und natürlich, Asche über mein Haupt, natürlich ist nicht Verbrauch sondern Wirkleistung das, was ich berechnen möchte 😉

          Gruß und Danke

          Bernhard

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

            Hallo,

            Kannst du direkt in Node-red machen und dann in eine Variable schreiben.

            1 Reply Last reply Reply Quote 0
            • H
              Heinzelmaennchen last edited by

              Hallo Sissiwup,

              und wie ? Mein Ehrgeiz verbietet mir gerade, die klassische Frage "Haste mal nen Beispiel für mich ;-)" zu stellen.

              Ich komme nicht dahinter, wie ich innerhalb eines function-Blockes drei unterschiedliche Eingangswerte differenzieren kann. Vielleicht denke ich einfach nur zu kompliziert. Ich würde mir einen node wünschen, der eine festlegbare Anzahl Eingänge hat, mit denen ich dann unterschiedliche mathematische Operationen oder ähnliches durchführen kann. Scheint es aber so nicht zu geben.Aber ich werde das jetzt auf Basis des o.a. Beispiels mal probieren. Mal sehen wie weit ich komme.

              Gruß

              Bernhard

              1 Reply Last reply Reply Quote 0
              • H
                hometm last edited by

                Nur der technischen Vollständigkeit halber:

                Wenn sich im Stromkreis ein asynchrones Drehstromgerät oder 3-phasiger Herd befindet stimmt die Berechnung nicht zu 100% 🙂

                Aber für den Alltagsgebrauch habe ich es auch so gelöst

                Tobias

                Gesendet von meinem VT10416-2 mit Tapatalk

                1 Reply Last reply Reply Quote 0
                • H
                  Heinzelmaennchen last edited by

                  Hallo hometm,

                  das ist natürlich richtig. Das ganze soll bei mir auch nur dazu dienen, dass ich erkennen kann, ob der Herd an ist oder nicht. Der Herd hat an L1 eine Standbyleistung! von ca. 2.1W. Die Phasen L2-L3 sind im ausgeschalteten Zustand bei 0W. Ich möchte aber aus verschiedenen Überwachungsaufgaben heraus nur einen Gesamtwert haben, den ich überwache. Ist schlicht einfacher so.

                  1 Reply Last reply Reply Quote 0
                  • blauholsten
                    blauholsten Developer last edited by

                    @hometm:

                    Nur der technischen Vollständigkeit halber:

                    Wenn sich im Stromkreis ein asynchrones Drehstromgerät oder 3-phasiger Herd befindet stimmt die Berechnung nicht zu 100% 🙂

                    Aber für den Alltagsgebrauch habe ich es auch so gelöst

                    Tobias

                    Gesendet von meinem VT10416-2 mit Tapatalk `
                    Na das erklär mal bitte

                    1 Reply Last reply Reply Quote 0
                    • H
                      Heinzelmaennchen last edited by

                      Hallo blauholsten,

                      Normalerweise müsste man dann nämlich die Formel nehmen p=u*i * cos phi (phasenverschiebung).

                      Aber den phasenwinkel muss man erstmal messen können. Kann ich zwar bei mir, macht aber alles nur unnötig kompliziert und ich will ja nur wissen, ob der Herd auf allen drei Phasen läuft oder eben nur im Standby.
                      6696_debugger.jpg

                      1 Reply Last reply Reply Quote 0
                      • blauholsten
                        blauholsten Developer last edited by

                        @Heinzelmaennchen:

                        Formel nehmen p=u*i * cos phi (phasenverschiebung). `
                        Ein normaler Eherd kann als rein ohmsche last betrachtet werden. Daher kann man den COS ausser acht lassen.

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

                          Korrekturen zum Script von blauholsten:

                          createState('Herdleistung', 0);
                          createState('Herdein', false);
                          
                          var id1 = "id von StromL1";
                          var id2 = "id von StromL2";
                          var id3 = "id von StromL3";
                          
                          var i1 = getState(id1).val;
                          var i2 = getState(id2).val;
                          var i3 = getState(id3).val;
                          
                          function summe() {
                          	var p = (i1 + i2 + i3) * 230;
                          	setState("Herdleistung", p);
                          	if(p > 3) setState("Herdein", true);
                          	else setState("Herdein", false);
                          }
                          
                          on(id1, function(dp) {
                             i1 = dp.newState.val;
                             summe();
                          });
                          on(id2, function(dp) {
                             i2 = dp.newState.val;
                             summe();
                          });
                          on(id3, function(dp) {
                             i3 = dp.newState.val;
                             summe();
                          });
                          
                          summe(); // bei Scriptstart
                          

                          Eventuell muss parseFloat auf die Stromwerte angewendet werden:

                          	var p = (parseFloat(i1) + parseFloat(i2) + parseFloat(i3)) * 230;
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • H
                            Heinzelmaennchen last edited by

                            Ich habe eben gerade den ersten Eintrag um meine Lösung erweitert. Vielleicht kann es ja jemand brauchen.

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            968
                            Online

                            31.9k
                            Users

                            80.2k
                            Topics

                            1.3m
                            Posts

                            5
                            12
                            5639
                            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