NEWS
[Gelöst] Addieren des Stromverbrauches von L1 L2 L3
-
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 -
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); -
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
-
Hallo,
Kannst du direkt in Node-red machen und dann in eine Variable schreiben.
-
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
-
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
-
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.
-
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 -
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 -
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. -
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;
-
Ich habe eben gerade den ersten Eintrag um meine Lösung erweitert. Vielleicht kann es ja jemand brauchen.