NEWS
Rechnen von S0 funktioniert nach Update nicht mehr richtig?
-
Hallo zusammen,
ich habe ein Update von Node v14 auf v16 gemacht. NPM ging von 6.13 auf 8.19.
Zu meiner Verwunderung, gab es keine größeren Probleme. Allerdings habe ich jetzt Probleme mit meinem Zähler, der den aktuellen Ertrag meines Wechselrichters misst.
Am Wechselrichter ist ein S0Bus, der eben entsprechende Impulse an einen Binäraktor sendet. Dieser sendet im Takt von 5 Sekunden den Wert seines eigenes Zählers. Er zählt also quasi nur seine eigenen Impulse.
Ich habe ein kleines Script, welches dann daraus entsprechend die aktuelle Leistung des Wechselrichters erreichnet. Die Summe ergibt sich aus der Änderung des Zählers innerhalb der letzten 5 Sekunden.
Dieses Konstrukt hat jetzt zwei Jahre absolut perfekt funktioniert. Nun nach den genannten Updates tut es das nicht mehr.
Die Werte werden korrekt angezeigt - springen zwischendurch aber plötzlich nach oben.
Beispiel: aktuelle Leistung Wechselrichter: 1000 Watt
Script errechnet: ca 980 Watt (gibt immer eine leichte Toleranz - stört mich jedoch nicht weiter).
Jetzt kommt die Sonne kurz etwas besser durch, Leistung geht hoch auf 1500 Watt.
Das Script zeigt an: 98XX W
Und springt dann nach kurzer Zeit wieder runter auf den echten Wert - bis ca. 20 Sekunden später das gleiche passiert.
Ich bin leider nur mittelmäßig fit in JS und rechnen liegt mir überhaupt nicht.
Kann mir vielleicht jemand einen Tipp geben?
Anbei das Script
on({ id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "any" }, function (obj) { if (getState("knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung"/*Strom Erzeugung*/).val > 0) { var totalSeconds = (Date.now() - obj.oldState.ts) / 1000; var devil = 3600 * 1000 / (400 * totalSeconds); setState("javascript.0.Verbrauchszaehler.Stromerzeugung", Math.round(devil)); } });
Ich danke euch für eure Hilfe
-
@segapro sagte Änderung des Zählers innerhalb der letzten 5 Sekunden.
Die Impulsdifferenz wird im Skript nicht ausgewertet. Versuche es mal so:
on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) { let devil = 9000000 * (obj.state.val - obj.oldState.val) / (obj.state.lc - obj.oldState.lc); setState("javascript.0.Verbrauchszaehler.Stromerzeugung", Math.round(devil), true); });
-
@paul53 sagte in Rechnen von S0 funktioniert nach Update nicht mehr richtig?:
on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) {
Jetzt zeigt er so um die 16xxx Watt an.
Ich habe gerade noch einmal geschaut. Ich glaube ich habe in meinem vorherigen Post eine falsche Aussage getroffen:
Der Binäraktor sendet alle 5 Werte eine Änderung. Also es müssen 5 Signale auf den S0 gekommen sein, damit der Binäraktor den Wert sendet.
MDT schreibt dazu:
Sendedifferenz 0-65535
[2]
wird die Sendedifferenz erreicht,
sendet der Binäreingang den
aktuellen WertDieser Wert ist auf "5" gesetzt.
Auf dem Zähler selbst steht: 0,5 Wh/imp
Sorry, dass ich vorher eine falsche Aussage getroffen hab.
-
@segapro sagte: Auf dem Zähler selbst steht: 0,5 Wh/imp
Also 2 Impulse / Wh und nicht 400 Impulse / kWh? Dann muss der Faktor korrigiert werden:
on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) { let devil = 1800000 * (obj.state.val - obj.oldState.val) / (obj.state.lc - obj.oldState.lc); setState("javascript.0.Verbrauchszaehler.Stromerzeugung", Math.round(devil), true); });
Was bedeutet "Binäreingang"? Wird nicht die Anzahl gezählter Impulse gesendet?
Binär bedeutet eigentlich, dass es nur die Werte 0 und 1 gibt. -
Es handelt sich um einen Binäraktor von MDT.
Dieser zählt die Impulse und sendet dann seinen "Zählerstand" .
Das ist das "knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung". Diesen Wert sendet er alle 5 Impulse.
Das mache ich deswegen, damit der KNX-Bus nicht so zugeballert wird, wenn der Wechselrichter auf maximaler Leistung fährt (5 KW).
Also bislang war es zumindest so:
Der Aktor zählt nach jedem Impuls aufwärts. Aktuell steht er bei 6560
Den nächsten Wert würde er dann bei 6565 senden.Ich verstehe nicht, wieso das jetzt so lange funktioniert hat und nun nach dem Update plötzlich nicht mehr.
Hat jemand eine Idee? Würde ungern ein Rollback auf die alte Version machen. Irgendwas muss sich geändert haben - ich komme nur einfach nicht dahinter.
Liebe Grüße
-
@paul53 sagte in Rechnen von S0 funktioniert nach Update nicht mehr richtig?:
on({id: 'knx.0.Sensoren.Verbrauchsdaten.Strom_Erzeugung', change: "gt" }, function (obj) {
Das funktioniert schon wesentlich besser (also bis jetzt).
Vielen vielen Dank dafür.
Er "hängt" allerdings etwas und zeigt immer 20 - 50 Watt weniger an, als tatsächlich erzeugt wird. Kann man das vielleicht noch etwas optimieren?
Viele Grüße