NEWS
Smartmeter-Leistung mit S0 impulse per Skript auswerten
-
-
Ich habe oben verlinkten Post gefunden und es hat mir schon teilweise geholfen. Mein Anliegen ist Folgendes:
Ich habe die aktuelle Version (5.3.8) auf einem Raspi 4 installiert und über GPIO (Pin4) ein Modul angeschlossen, was mir die Lichimpulse von meinem Stromzähler "ausliest". Er gibt mit "true" und "false" Werte zurück, mit denen ich nun (per Skript) die aktuelle Leistung ausrechnen möchte.
Mein Zähler erzeugt 1000 Impulse für 1kWh.Ich habe das oben verlinkte Skript so angepasst, dass es 1000 Impulse verarbeitet, den richtigen Eingang nimmt und dann noch ein user-objekt erstellt, in die die Daten geschrieben werden:
<block xmlns="https://developers.google.com/blockly/xml" type="control" id="Zh:,x@fPl?!iX),z3z_y" x="-391" y="-172"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Stromzähler.Lesitung</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_round" id="sjOp3d8^}jClP_0/9_]Y"> <field name="OP">ROUND</field> <value name="NUM"> <shadow xmlns="http://www.w3.org/1999/xhtml" type="math_number"> <field name="NUM">3.1</field> </shadow> <block type="variables_get" id="1_c0K2p^[!Yr.axi5F-e"> <field name="VAR" id="AP1}0!{NwZLxuu@pAF`Z">Wert</field> </block> </value> </block> </value> </block>
hier das Screenshot zum Skript:
Das ist mein User-Objekt (also in die die berehcneten Daten geschrieben werden sollen):
und das die Konfig meines GPIO-Eingangs:
Mein Problem ist nun, dass ich keine Daten ins Objekt geschrieben bekomme:
Ich bin erst seit ein paar Wochen überhaupt mit iobroker unterwegs und habe von Skripten kau Ahnung, darum sorry, falls ich hier was total falsch gemacht habe und schon mal vielen vielen Dank für alle hilfreichen Tipps und Korrekturen!
P.S.: Ja, ich weiß, es gibt dutzende Hardwarelösungen, die man alternativ nutzen kann. Da ich mir die Bauteile aber extra besorgt habe und (neben dem Raspi) damit weit unter 10 euro gekommen bin, möchte ich nicht wieder eine neue Lösung probieren, sondern mit dieser zum Ziel kommen. Ich denke, die Lösung dieses Problem könnte damit auch vielen anderen Bastlern helfen
-
Noch folgende Anmerkungen:
- ich bekomme keine Fehler im Protokoll bzw. Skriptlog
-
Zur grafischen Auswertung nutze ich Grafana. Die Berechnung (wenn nicht per Skript möglich) könnte auch dort passieren
-
ich weiß, dass es das Volkszähler-Projekt gibt und habe dadurch auch schon S0-Impulse erfolgreich auslesen können, bevorzuge aber eine iobroker-Lösung, da iobroker auch schon für andere Sachen läuft und ich nicht noch zusätzlich eine Instanz dazwischen schalten möchte.
- ich bekomme keine Fehler im Protokoll bzw. Skriptlog
-
@andy-1 Hab jetzt nicht alles durchgelesen, aber:
- um Meldungen zu bekommen solltest du sinnvolle debug-Bausteine an den interessanten Stellen deines Skripts setzen um zu sehen wo es hängt.
- bei eigenen Datenpunkten reicht ein aktualisiere, statt steuere
- du kannst die Zeit zwischen den Änderungen zum berechnen nutzen.
- Die dazu notwendigen Timestamps bekommst du aus dem selben Baustein unter Trigger, aus dem Wert stammt
- Da ist doch dein Wert her, und keine eigene Variable? - wenn doch, so ist Wert eine reservierte Bezeichnung, dann musst du deine Variable umbenennen
-
@homoran Danke Homoran für die Antwort,
also diesen Schlater sozusagen von Wert auf Zeitstempel umsetzen?
-
@andy-1
"GPIO 4" ist der S0-Impuls?
Werden alle Impulse übertragen?Damit nur auf eine Flanke des Impulses getriggert wird, ändere den Trigger auf "ist größer als letztes".
letzte Änderung
findet man unter "Trigger". -
Danke Paul53,
das habe ich gemacht und es kommen keine Werte an, er steht immer noch bei "0"
Ich hatte vorher auch schon mal diesen Schalter auf "ist wahr" gesetzt, da er bei einem (Licht)impuls den Zustand im Iobroker von "false" auf "true" ändert. Hat aber auch nichts gebracht
-
@andy-1 sagte in Smartmeter-Leistung mit S0 impulse per Skript auswerten:
das habe ich gemacht und es kommen keine Werte an, er steht immer noch bei "0"
aber dein aktueller Screenshot sieht nicht aus wie der von @paul53
-
@andy-1 sagte: er steht immer noch bei "0"
Du verwendest auch die absolute Zeit seit 1.1.1970 und nicht die Zeitdifferenz zwischen zwei Impulsen. Mein Vorschlag oben zeigt, wie es geht.
-
Ah sorry, ich habe nicht gesehen, dass es dein eigenes Setup ist. Ich dachte es wäre meins mit deinem Beschriebenen Vorschlag
Hast du das Ganze als Skript? Ich habe das noch nie gemacht und würde ewig brauchen das so hinzubekommen...ganz zu schweigen von der Fehleranfälligkeit
-
-
Danke!! muss bei jeder Objekt ID der GPIO eingesetzt werden?
-
@andy-1 sagte: muss bei jeder Objekt ID der GPIO eingesetzt werden?
Nein, bei "aktualisiere" muss der Datenpunkt mit dem Leistungswert zugewiesen werden.
-
-
ich prüfe gleich mal mit der Anzeige am SmartMeter ab..
-
SUPER!! Stimmt exact überein!!
Vielen vielen Dank!!!
Das hat mich viel Zeit, Geld und nerven gespaart
-
Nohc eine Frage: Wo kann ich den Wert für 1000 Impulse pro kWh ändern?
Ich möchte ihn auch an anderen SmartMetern einsetzen und da ist oft ein abweichendes Verhältnis von Impuls zu kWh
-
@andy-1 sagte: Wo kann ich den Wert für 1000 Impulse pro kWh ändern?
In dem Faktor (mWs / Impuls): 1000 Impulse / kWh = 1 Impuls / Wh = 1 Impuls / 3600000 mWs
-
Ah okay, das macht sinn. Ich hab es mal als als Mathematisches Element "aufgesplittet". Ist das so korrekt?
Hier der vorher-nachher-Vergleich in XML-Form:
-
@andy-1 sagte: Ist das so korrekt?
Nein. Wenn man mit Impulsen / kWh rechnet, muss man durch diesen Wert dividieren. 1 kWh = 3600000000 mWs.