NEWS
PV Überschuss berechnen
-
@homoran sagte in PV Überschuss berechnen:
@mickym sagte in PV Überschuss berechnen:
Ja auch der Javascript Adapter ist nicht zwangsläufig
den Satz verstehe ich inhaltlich nicht.
Meinst du, dass da nicht nur js pur, sondern auch Blockly, oder noch schlichter Rules dahinter stecken?Vielleicht sollte man den Thread auch in den Einsteigerbereich verschieben, dann kann man diesen Thread, wenn mehr Infos kommen - auch als kleines Tutorial dienen, wie man die Aufgabenstellung mit allen 3 Logikmaschinen umsetzt.
-
@mickym äähhmm, seufz... o.ä.
Die Idee ist gut, nicht neu, aber bisher nie glücklich umgesetzt worden.
Es gab mal einen vielversprechenden Thread in dem die Logikmaschinen verglichen werden sollten.Dies einsteigerfreundlich, aber vollumfänglich umzusetzen, dass es verständlich bleibt und trotzdem alle möglichen Unterschiede zur Entscheidungsfindung zu sammel ist nicht wirklich möglich.
Insofern bleibt es für mich eigentlich bei dem Rat:
alles installieren, testen, probieren und dann entscheiden.
Wobei die Entscheidung auch in die Richtung gehen kann mehrere Maschinen parallel zu nutzen, um jeweils deren Stärken zu nutzen. -
Nun bei der Fragestellung traue ich mir zu, dass mit allen 3 Logikmaschinen umsetzen so können, nur müsste halt mal der Threadersteller dann hier mal am Ball bleiben und die Datenpunkte konkret benennen - damit man das zusammen durchführen könnte.
Soviel Blockly und Javascript beherrsche ich auch.
-
So nachdem sich der TE wieder ewig nicht meldet - habe ich hier mal eine Beispiel gemacht.
Hier sind also 3 Datenpunkte - die können theoretisch auch irgendwo im System sein, das Ergebnis sollte unter 0_userdata.0 sein.
Wir gehen also von einer Subtraktion aus:
Minuend - Subtrahend = Ergebnis
Der Minuend triggert und könnte in dem Fall der aktuelle Stromverbrauch Deines Shellies 3em sein. Der Subtrahend ist also das was Du abziehst in dem Fall die PV Erzeugung - umgekehrt kannst Du es ja dann selbst machen, wenn Du es anders rum brauchst. In Deinem Ergebnis steht also entweder ein Verbrauch (positiver Wert) oder ein Überschuss (negativer Wert). Wie gesagt umdrehen kannst Du es alleine. Keine Ahnung was mehr Sinn macht was triggert. Ich gehe mal vom Verbrauch aus.
Nun zu den 3 Logikmaschinen:
- Node-Red:
Du siehst der Minuend triggert (also stößt den Flow an) - im Status steht immer der aktuelle Wert des Datenpunktes. Dann wird der Subtrahend geholt, gerechnet und das Ergebnis wieder in den Datenpunkt geschrieben.
- Blockly
Auch hier triggert der Minuend - das Ergebnis wird geschrieben in dem ich den Wert des Subtrahenden hole (blaues Puzzle Wert) und vom Wert des Minuenden (rosa Puzzle Wert) abziehe.
- Javascript:
on({id: "0_userdata.0.Test.Substraktion.Minuend", change: 'any'}, function (obj){ var minuend = obj.state.val; var subtrahend = getState("0_userdata.0.Test.Substraktion.Subtrahend").val; setState('0_userdata.0.Test.Substraktion.Ergebnis', minuend - subtrahend, true); })
Auch hier triggert der Minuend mit on(...), der Subtrahend wird mit getState(...) geholt und das Ergebnis mit setState(...) geschrieben.
So damit hast Du nun 3 Lösungen und kannst Dir überlegen, welches System Du am intuitivsten findest.
-
@mickym sagte in PV Überschuss berechnen:
Auch hier triggert der Minuend
es müssten beide triggern
@homoran sagte in PV Überschuss berechnen:
Auf die beiden IDs bei Änderung triggern
dann kannst du nicht mit '>Wert arbeiten
-
@homoran Na ich kann auch Lösungen bringen, wo beides triggert - kein Problem.
Das Rechnen bleibt ja das Gleiche.
-
@mickym so war das nicht gemeint!
-
-
-
@homoran Der rote Baustein enthält immer den Wert des triggers.
-
@mickym sagte in PV Überschuss berechnen:
@homoran Der rote Baustein enthält immer den Wert des triggers.
korrekt!
aber wenn du zwei Trigger (via Zahnrad) hast und der Subtrahend triggert..... -
So also das gleiche nochmal mit 2 Triggern - das heißt ich ignoriere den Wert und hole den in jedem Fall.
- NodeRed
- Blockly
- Javascript
on({id: ["0_userdata.0.Test.Substraktion.Minuend","0_userdata.0.Test.Substraktion.Subtrahend"], change: 'any'}, function (obj){ var minuend = getState("0_userdata.0.Test.Substraktion.Minuend").val; var subtrahend = getState("0_userdata.0.Test.Substraktion.Subtrahend").val; setState('0_userdata.0.Test.Substraktion.Ergebnis', minuend - subtrahend, true); })
In allenFällen ignorierst Du den Wert des triggers und holst den Wert nochmal neu.
-
Ich hab nochmal versucht die Entsprechungen aller 3 Systeme grafisch zu veranschaulichen - die Logik ist ja bei allen 3 Systemen die Gleiche:
-
@mickym dumme Frage:
muss man in native js mitvar
arbeiten?[advanced]
in Blockly könnte man das ja auch, macht das Verständnis für Einsteiger aber erst einmal schwieriger.
Würde Ressourcen sparen, insbesondere wenn man nur den getrigerten Wert neu einlesen würde
[/advanced| -
@homoran sagte: muss man in native js mit var arbeiten?
Nein, die Variablen machen es nur besser lesbar.
-
@homoran Nein kannst auch direkt auslesen - wird aber unübersichtlicher.
on({id: ["0_userdata.0.Test.Substraktion.Minuend","0_userdata.0.Test.Substraktion.Subtrahend"], change: 'any'}, function (obj){ setState('0_userdata.0.Test.Substraktion.Ergebnis', getState("0_userdata.0.Test.Substraktion.Minuend").val - getState("0_userdata.0.Test.Substraktion.Subtrahend").val, true); })
-
@homoran
Besserer Stil in JS:const idMinuend = '0_userdata.0.Test.Substraktion.Minuend'; const idSubtrahend = '0_userdata.0.Test.Substraktion.Subtrahend'; const idErgebnis = '0_userdata.0.Test.Substraktion.Ergebnis'; on([idMinuend, idSubtrahend], function() { setState(idErgebnis, getState(idMinuend).val - getState(idSubtrahend).val, true); });
orientiert am Blockly mit "wurde geändert".
-
Entschuldigt erstmal für die späte Rückmeldung, aber leider hatte ich heute keine Zeit zum Lesen oder Schreiben. Ich habe die Beispiele jetzt mit Blockly nachgebaut. Funktioniert soweit super, besten Dank.
Ich habe nur ein Problem. Ein Wert wird in KW und einer in Watt gespeichert. Jetzt stimmt die Rechnung natürlich nicht. Kann man die Werte auch irgendwie anpassen?
-
@stoffsn Dann halt den Watt Bereich durch 1000 teilen.
-
@mickym Danke
Es könnte so einfach sein