NEWS
2 Werte Subtrtahieren in Node Red
-
@siporax
Sieht es etwa so aus?
Du möchtest rechnen: POW - Fritz = Teichverbrauch real ?
Bzw. wissen: Wann hat der Teich mehr verbraucht, als der Wechselrichter liefert und wieviel ? -
@geschild Teich jat mehr verbrauch z.b im Winter in der Nacht usw.ist verschieden.
Kann man keine Regel erstellen wenn du das meinst.
Daher wollte ich es einfach immer so rechnen:
Pow minus Fritz Dect
Da dieses rgebnis immer der Verbrauch vom Teich ergibt.
Ob er 400 oder 800 Watt er ausgibt.
Nachts gibt er wenn die Batterie leer ist auch einfach auch mal 0 Watt ab.
Soltte doch gehen oder lieg ich falsch? -
@siporax Der Verbrauch vom Teich wird doch über den POW gemessen!
-
@geschild ja wird er aber der kann nur in eine Richtung zählen.
Sollange der Wechselrichter aus ist geht das prima.
Wenn er sich einschaltet zählt er den wert dazu und ich sehe mein realen verbrauch nicht mehr. -
@siporax Was ist an meiner Zeichnung falsch ?
-
@geschild könnten wir um uns um die Rechnung kümmern und nicht warum,bitte.
Den das Ergebnis ist das was ich brauche -
-
@geschild said in 2 Werte Subtrtahieren in Node Red:
Ich habes mal versucht damit.
Werte kommen an nur errechnet wird nichts bisher.
Denke die Ordnerstruktur im Broker muss dazu genau so aussehen,
einfach diese neu zu zuordnen geht nicht so einfach. -
@siporax wie ich schon mehrfach erklärt habe, rechnet man über einen Kontext oder sammelt alles in einem Nachrichtenobjekt. Was steht denn in Deiner function Node drin. Welcher deiner beiden Werte soll den triggern? Vorher wurde doch schon mit get nodes gearbeitet.
So wird das NIE funktionieren- und vielleicht kann sich einer ja mal überlegen warum.
Wenn ich das so lese muss doch nur der Verbrauch triggern und davon wird der Wechselrichterwert abgezogen. Dafür benötigt man keine 2 trigger und auch keine function Node.
Übrigens wenn ihr hier ein Flow einstellt, dann nur zwischen CodeTags und dann verspoilern.. sonst kann niemand damit was anfangen.
-
@siporax
Das wurde doch unten alles schon mal richtig dargestellt. Wie gesagt 2 mal triggern bringt nichts - die Werte treffen sich nie,Hier zum Import (verspoilert und in CodeTags):
-
Deine Lösung ist eleganter als meine. Chapeau. Bin mehr in script als in nodered zu Hause.
Bitte deshalb um Nachhilfe, wie deine Lösung funktioniert, wo erfolgt die Subtraktion (Doppelklick auf den change hat mich nicht weiter gebracht).
Noch in eigener Sache:
Deinen Kommentar zu meinem Ergebnis möchte ich nicht unkommentiert zu Kenntnis nehmen.
"Übrigens wenn ihr hier ein Flow einstellt, dann nur zwischen CodeTags und dann verspoilern.. sonst kann niemand damit was anfangen."
Einfach die .txt öffnen, STRG-A, STRG-C, in NodeRed importieren. Feddich"Was steht denn in Deiner function Node drin"
Importieren, Doppelklick auf node, lesen."So wird das NIE funktionieren- und vielleicht kann sich einer ja mal überlegen warum."
Doch, es funktioniert (sonst hätte ich es nicht gepostet) - und vielleicht kann sich einer ja mal überlegen warum. -
-
@geschild Nun wichtig ist folgendes zu verstehen. Ich baue es mal mit eigenen DP nach:
Am Besten ist sowas wenn man sich immer das komplette Nachrichtenobjekt ausgeben lässt:
Die payload stammt von der iobroker-IN Node und ist der Ausgangstrigger. Grün markiert.
Wichtig ist, wie bereits ja unten beschrieben, dass Du nun den 2. Wert den Du Dir ins Nachrichtenobjekt ein anderes Attribut zuweist, sonst überschreibst Du, falls Du in der get Node das Attribut payload belässt, Dir mit der get Node den originalen payload aus der iobroker-IN Node.
Ich habe den Inhalt des Wechselrichters in das Nachrichtenattribut wr geschrieben. Siehe gesamtes Nachrichtenobjekt. Gelb markiert.
Nun habe ich BEIDE Werte in EINEM Nachrichtenobjekt.
Die Subtraktion findet einfach in der Change Node mit JSONATA statt: https://docs.jsonata.org/overview
Dies mächtige Bibliothek kann man in verschiedenen Nodes einfach über das GROSSE J nutzen (gibts auch in Switch, Change, JOIN - in vielen Nodes):
Damit kann ich über die Nachrichteneigenschaft eine neue payload setzen in dem ich die Differenz der ursprünglichen payload - wr bilde. Also von der payload hier 80 - wr hier 50 abziehe und dann als Ergebnis als neue payload 30 ausgebe.
-
@geschild sagte in 2 Werte Subtrtahieren in Node Red:
Übrigens wenn ihr hier ein Flow einstellt, dann nur zwischen CodeTags und dann verspoilern.. sonst kann niemand damit was anfangen."
Einfach die .txt öffnen, STRG-A, STRG-C, in NodeRed importieren. FeddichDas ist halt einfach umständlicher als wenn ich den Spoiler aufmache - auf SelectAll klicke und dann in die Zwischenablage kopiere.
Ich habs auch nicht gefunden. Wie gesagt - Deine Lösung KANN nur funktionieren, wenn Du in der function Node mit dem Node-Kontext arbeitet.
Falls nicht
werden sich die beide Nachrichten aus den aus den iobroker-IN Nachrichten NIE treffen. Ich kenne den Code wie gesagt nicht - ich seh das Ergebnis aber Du wirst dann wohl mit dem Node-Kontext gearbeitet haben.
var wr = context.get('Wechselrichter') || 0
oder so ähnlich,
dann musst halt das topic abfragen und dann ggf. neu setzen - also ich weiß schon wie es geht.
- Nur ich bin kein Freund des Codierens wenn es nicht sein muss.
- Dann macht man die visuelle Darstellung wieder kaputt. Im Prinzip kannst Du ganze Flows in eine function Node packen.
-
@mickym Danke, wieder was dazugelernt. Ja ich habe mit context gearbeitet.
-
@geschild Deine Lösung hat den Vorteil, wenn der Verbrauch nicht triggert, dass dann der Wert sofort angepasst wird. Sollte also auch der Wechelrichter triggern müsste man den Verbrauch extra auslesen und dann brauchst Du ein paar mehr Nodes. Insofern hat Deine Lösung durchaus seine Berechtigung, wenn der Verbrauch nicht oft genug triggert.
In diesem Fall würde sich meine Lösung wie folgt "verkomplizieren":
In diesem Fall muss man nur sicherstellen, dass immer die richtige Nachrichteneigenschaften gesetzt werden. Deshalb wird die payload dann auf die entsprechende Nachrichteneigenschaft bei den iobroker-IN Nodes nachträglich gesetzt und in den get-Nodes direkt:
Das heißt es existiert zum Zeitpunkt der Subtraktion keine payload (deshalb undefined) im Debug Fenster.
-
@mickym said in 2 Werte Subtrtahieren in Node Red:
@geschild Deine Lösung hat den Vorteil, wenn der Verbrauch nicht triggert, dass dann der Wert sofort angepasst wird. Sollte also auch der Wechelrichter triggern müsste man den Verbrauch extra auslesen und dann brauchst Du ein paar mehr Nodes. Insofern hat Deine Lösung durchaus seine Berechtigung, wenn der Verbrauch nicht oft genug triggert.
In diesem Fall würde sich meine Lösung wie folgt "verkomplizieren":
Danke für die Hilfe ,bin nun doch etwas überfordert aber ich versuche es einfach mal mit dem leztem Beispiel.
Wenn ich nicht klar komme melde ich mich nochmal hier mit dem Qode hier. -
@siporax Wie gesagt das brauchst Du nur, wenn Dir der Tech-Pow trigger nicht ausreicht.
Sonst langt die einfache Lösung.
-
@mickym said in 2 Werte Subtrtahieren in Node Red:
@siporax Wie gesagt das brauchst Du nur, wenn Dir der Tech-Pow trigger nicht ausreicht.
Sonst langt die einfache Lösung.
Setze mich später gleich man dran an das ganze.Melde mich dann wieder.
-
@siporax Die einfache Lösung nur mit der Trigger des Sonoff - war hier (sind nur 4 Nodes): https://forum.iobroker.net/post/1019849