NEWS
Node-Red errechneten Wert mit Dezimaltrenner versehen?
-
Schönen guten Abend zusammen,
ich hab mal wieder etwas zu node-red.
Wir haben einen e3dc S10 E. und lesen diesen über den RSCP aus. LEider funktionieren die Datenpunkte DB ja noch nicht.
(was ein träumchen wäre)Ich möchte nun mit node red die Tagesproduktion errechnen. Leider geht das gerade wohl nur mit
/PVI/String0/DC_String_Energy_all +
/PVI/String1/DC_String_Energy_allDas das nicht so genau ist, da die Wechselrichterverluste fehlen ist mir klar. Aber darum gehts grad nicht.
Ich rechne nun mit node red String0 und String1 zusammen, das klappt und erhalte als Ergebnis Wh. =
1234567Wh
Um das ganze in Grafana optisch aufzuwerten schön zu machen, stimmt das Format nicht.
Es muss ja eigentlich so sein: 1234,567kwh Gesamtproduktion.In Node red sieht das so aus:
Ich schaff es nun aber nicht mir anstatt 1234567 // 1234,567 ausgeben zu lassen.
Kann mir jemand auf die Sprünge helfen?
Die Formel im Spoiler klebt mir an die 7 Stellen nochmals drei Nachkomma Stellen an, ein ... * 0,001 bringt ganz seltsame Ergebnisse. -
@lucifor1976 Warum rechnest Du denn mit Strings überhaupt? Hast Du die Konvertierung eingeschaltet. Und nein Zahlen haben sowohl im iobroker, als auch in NodeRed einen Punkt als Dezimaltrenner und werden dir nur in den Objekten mit Komma dargestellt.
Schau mal im Adapter ob Du diese blöde Konvertierung eingeschaltet hast.
-
@lucifor1976 sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:
msg.payload = String0 + String1 / 1000;
Es gilt bei Formeln Punkt vor Strichrechnung.
Bei deiner Formel würde der String1 erst durch 1000 geteilt und dann + String0 gerechnet.
10000 + 10000 / 1000 wären dann 10010
Versuchsmal mit ner Klammer (10000 + 10000) / 1000, das sind dann nämlich 20.
Also msg.payload = (String0 + String1) / 1000;Das aber nur wenn du Zahlenwerte verwendest (Number), wenn die Inhalte deiner String Variablen wirklich Strings sind klappt das nicht.
Zur Not könntest du in der Funktion deine Strings als Number benutzen.
So zum Beispiel:
msg.payload = (Number(String0) + Number(String1)) / 1000;Aber @mickym kennt da bestimmt noch ne bessere Lösung.
-
@frankyboy73 Na wichtig ist, dass die Konvertierungsfunktion ausgeschaltet ist:
Das muss irgendein Relikt aus der Vergangenheit sein - sonst kommen auch Zahlen aus den Datenpunkten raus. Wenn man das allerdings spät umstellt - hat man halt Konvertierungsaufwand.
Ansonsten schön wieder was von Dir zu hören. Du hast Dich rar gemacht!!!! -
-
@mickym Hi, da seine Formel beim addieren funktioniert, gehe ich davon aus, das Zahlen aus seinen Nodes kommen, Strings würden ja nur aneinander gehängt werden.
Ich denke mal das nur die Bezeichnung, Benennung "String" ist und das gar nicht wirklich ein String ist. Wie gesagt nur ne Vermutung.
Ja, ab und zu Poste ich auch mal was, wenn ich es für Sinnvoll halte. Ich lese hier aber immer noch täglich mit. Für Antworten bin ich meist nur nicht schnell genug und außerdem kennen sich einige Leute hier besser aus wie ich.
Der Thread: https://forum.iobroker.net/topic/64204/shellys-alt-und-plus-über-mqtt-adapter?_=1681843139200
ist übrigens super und ganz schön lang geworden. Kann man sich ganz schön viel an Infos rausziehen, Anfänger wie Fortgeschrittene.
Aber sorry offtopic. -
@frankyboy73 sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:
@mickym Hi, da seine Formel beim addieren funktioniert, gehe ich davon aus, das Zahlen aus seinen Nodes kommen, Strings würden ja nur aneinander gehängt werden.
Ich denke mal das nur die Bezeichnung, Benennung "String" ist und das gar nicht wirklich ein String ist. Wie gesagt nur ne Vermutung.
Ja, ab und zu Poste ich auch mal was, wenn ich es für Sinnvoll halte. Ich lese hier aber immer noch täglich mit. Für Antworten bin ich meist nur nicht schnell genug und außerdem kennen sich einige Leute hier besser aus wie ich.
Der Thread: https://forum.iobroker.net/topic/64204/shellys-alt-und-plus-über-mqtt-adapter?_=1681843139200
ist übrigens super und ganz schön lang geworden. Kann man sich ganz schön viel an Infos rausziehen, Anfänger wie Fortgeschrittene.
Aber sorry offtopic.Na wenn schon Zahlen rauskommen, hast Du ja alles erklärt. Punkt vor Strich usw.
-
@mickym sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:
@lucifor1976 Warum rechnest Du denn mit Strings überhaupt? Hast Du die Konvertierung eingeschaltet. Und nein Zahlen haben sowohl im iobroker, als auch in NodeRed einen Punkt als Dezimaltrenner und werden dir nur in den Objekten mit Komma dargestellt.
Schau mal im Adapter ob Du diese blöde Konvertierung eingeschaltet hast.
Hello, nein die Konvertierung war aus
Die Daten liegen als Nummer vor. Der Datenpunkt wird ohne irgendwelche Trenner in der Datenbank gespeichert.
-
@frankyboy73 sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:
@lucifor1976 sagte in Node-Red errechneten Wert mit Dezimaltrenner versehen?:
msg.payload = String0 + String1 / 1000;
Es gilt bei Formeln Punkt vor Strichrechnung.
Bei deiner Formel würde der String1 erst durch 1000 geteilt und dann + String0 gerechnet.
10000 + 10000 / 1000 wären dann 10010
Versuchsmal mit ner Klammer (10000 + 10000) / 1000, das sind dann nämlich 20.
Also msg.payload = (String0 + String1) / 1000;Das aber nur wenn du Zahlenwerte verwendest (Number), wenn die Inhalte deiner String Variablen wirklich Strings sind klappt das nicht.
Zur Not könntest du in der Funktion deine Strings als Number benutzen.
So zum Beispiel:
msg.payload = (Number(String0) + Number(String1)) / 1000;Aber @mickym kennt da bestimmt noch ne bessere Lösung.
Hello, genau das hat funktioniert, ich danke euch
msg.payload = (String0 + String1) / 1000;