NEWS
gelöst: Vorzeichen ändern beim Strombezug Smartmeter
-
Hallo zusammen,
ich habe ein Script geschrieben, um mir den Strombezug im Haus anzeigen zu lassen. Das Smartmeter gibt Minus und Pluswerte aus (Minus für Bezug, Plus für Einspeisung), weswegen ich eine Bedingung mit min. 0 eingefügt habe.
Nun bekomme ich den Wert ausgegeben, wenn ich Strom beziehe, was auch richtig ist. Nur hat der Bezug ein negatives Vorzeichen, welches ich nicht haben möchte.
Habe schon versucht in Zeile 10 * -1 einzufügen was aber dazu führt, dass ich die Einspeisung angezeigt bekomme.Der rot umrandete Wert soll als Pluswert angezeigt werden:
const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower'; const idBezug = 'javascript.0.Solar.Bezug'; var Realpower = getState(idRealPower).val; if(!existsState(idBezug)) createState(idBezug, Realpower, {type: 'number', unit: 'W', min: 0}); function summe() { setState(idBezug, RealPower, true); } on(idRealPower, function(dp) { RealPower = dp.state.val; summe(); });
Vielen Dank schonmal !!
Viele Grüße
Timo -
gelöscht
-
@txixmxo
Zeile 14:RealPower = -dp.state.val;
und Zeile 4:
var Realpower = -getState(idRealPower).val;
Oder enthält "javascript.0.Solar.Wechselrichter.ACTotalRealPower" einen negativen Wert bei Bezug und einen positiven Wert bei Einspeisung? Dann muss man testen.
function summe() { let bezug = 0; let einspeisung = RealPower; if(RealPower < 0) { bezug = -RealPower; einspeisung = 0; } setState(idBezug, bezug, true); setState(idEinspeisung, einspeisung, true); }
-
@paul53 said in Vorzeichen ändern beim Strombezug Smartmeter:
Oder enthält "javascript.0.Solar.Wechselrichter.ACTotalRealPower" einen negativen Wert bei Bezug und einen positiven Wert bei Einspeisung? Dann muss man testen.
Genauso ist es ... das obere Funktionier leider nicht ...
beim unteren habe ich die Funktion in Zeile 9-11 ersetzt ... Richtig?
Aber da zeigt er mir auch nur den negativen Wert an ...
-
@txixmxo sagte: beim unteren habe ich die Funktion in Zeile 9-11 ersetzt ... Richtig?
Richtig, und idEinspeisung oben deklarieren und ID zuweisen.
@txixmxo sagte in Vorzeichen ändern beim Strombezug Smartmeter:
Aber da zeigt er mir auch nur den negativen Wert an
Logge mal die beiden Variablen bezug und einspeisung.
-
@paul53 said in Vorzeichen ändern beim Strombezug Smartmeter:
Logge mal die beiden Variablen bezug und einspeisung.
Sorry für die dumme Frage .... aber wie mache ich das mit dem loggen? Bin leider absoluter Anfänger in ioBroker und JavaScipt
Bezug und Einspeisung sind ja zusammen eine Variable. Nur durch Vorzeichen zu unterscheiden welcher welches ist.
Den Wert, der direkt aus dem Wechselrichter kommt über Modbus musste ich schon aufgrund einer Faktorvariable und falscher Kommastelle als Scipt anders ausgeben. Da gab es aber zum Glück ein Beispiel wo ich mich orientieren konnte.Bei der Einspeisung klappt es super. Dort habe ich dieses Scipt:
const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower'; const idEinspeisung = 'javascript.0.Solar.Einspeisung'; var Realpower = getState(idRealPower).val; if(!existsState(idEinspeisung)) createState(idEinspeisung, Realpower, {type: 'number', unit: 'W', min: 0}); function summe() { setState(idEinspeisung, RealPower , true); } on(idRealPower, function(dp) { RealPower = dp.state.val; summe(); });
-
@txixmxo sagte: Bei der Einspeisung klappt es super. Dort habe ich dieses Scipt:
Bitte für Bezug und Einspeisung nur ein Skript verwenden (Ressourcen).
const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower'; const idEinspeisung = 'javascript.0.Solar.Einspeisung'; const idBezug = 'javascript.0.Solar.Bezug'; var RealPower = getState(idRealPower).val; if(!existsState(idEinspeisung)) createState(idEinspeisung, RealPower, {type: 'number', unit: 'W', min: 0}); if(!existsState(idBezug)) createState(idBezug, -RealPower, {type: 'number', unit: 'W', min: 0}); function summe() { let bezug = 0; let einspeisung = RealPower; if(RealPower < 0) { bezug = -RealPower; einspeisung = 0; } setState(idBezug, bezug, true); setState(idEinspeisung, einspeisung, true); log('Einspeisung(W): ' + einspeisung); log('Bezug(W): ' + bezug); } on(idRealPower, function(dp) { RealPower = dp.state.val; summe(); });
-
Bei deinem zusammengeführten Skipt funktioniert die Einspeisung, aber der Bezug bleibt auf 0, egal was ich ändere.
Woran könnte das noch liegen?Grüße und vielen Dank!!
-
@txixmxo sagte: Woran könnte das noch liegen?
common.min, common.max?
EDIT: Gerade gesehen: Es gibt die Variablen
Realpower
undRealPower
! Bitte korrigieren. -
Die Einspeisung wird jetzt richtig ausgegeben.
Der Bezug steht jedoch weiter auf 0 trotz Bezug . Jedoch sehe ich unten im Skriptlog, dass der richtige Wert ausgegeben wird. Woran kann das liegen, das dieser nicht angezeigt wird?
(Die Werte zum Screenshot unterscheiden sich, da die Werte sich nach Einstrahlung und Verbrauch ändern ... also nicht wundern.
Hier der Auszug: (Und genau diese ca. 750W werden in der Anzeige Bezug nicht ausgegeben.
09:37:15.873 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 0
09:37:15.873 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 755
09:37:16.503 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 0
09:37:16.504 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 750Bei Einspeisung jedoch schon hier nur zum Vergleich.
09:42:01.144 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 0
09:42:02.253 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 1185
09:42:02.254 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 0
09:42:03.403 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 1214
09:42:03.403 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 0:Viele Grüße
TimoEDIT: hier noch einmal das aktuell verwendete Skript:
const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower'; const idEinspeisung = 'javascript.0.Solar.Einspeisung'; const idBezug = 'javascript.0.Solar.Bezug'; var RealPower = getState(idRealPower).val; if(!existsState(idEinspeisung)) createState(idEinspeisung, RealPower, {type: 'number', unit: 'W', min: 0}); if(!existsState(idBezug)) createState(idBezug, RealPower, {type: 'number', unit: 'W', min:0}); function summe() { let Bezug = 0; let Einspeisung = RealPower; if(RealPower < 0) { Bezug = -RealPower; Einspeisung = 0; } setState(idBezug, Bezug, true); setState(idEinspeisung, Einspeisung, true); log('Einspeisung(W): ' + Einspeisung); log('Bezug(W): ' + Bezug); } on(idRealPower, function(dp) { RealPower = dp.state.val; summe(); });
-
@txixmxo sagte: unten im Skriptlog, dass der richtige Wert ausgegeben wird. Woran kann das liegen, das dieser nicht angezeigt wird?
"javascript.0.Solar.Bezug": common.max = 0?
-
Das war es
Hab den Wert jetzt auf 99999 gesetzt ... müsste reichen
Vielen vielen Dank noch einmal !!! Die Einstellung kannte ich auch noch gar nicht
Grüße
Timo