NEWS
Stromzähler per Sonoff ESP8266 auslesen
-
@RalfTh Ok jetzt hab ich mich selbst verwirrt. D7 am D1 war schon richtig als GPIO13 im Skript. Musste selbst nochmal nachschlagen gerade.
Aber das sich dein Skript immer wieder deaktiviert ist nicht richtig. Ich hatte den Fall bei mir auch mal und musste die Firmware neu flashen. Scheint ein Bug zu sein. Vergiss nur nicht den CFG_HOLDER zu verändern bevor du neu compilierst, wie in der Anleitung beschrieben.
Gruß Jaschkopf
-
Kann mir jemand sagen wo das problem bei mir liegt?
19:57:34 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:34","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0xD87B604E"}} 19:57:35 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:35","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0x70E7939E"}} 19:57:36 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:36","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0xDDE94BCF"}} 19:57:37 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:37","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0x49A6AF84"}} 19:57:37 RSL: tele/tasmota/STATE = {"Time":"2020-02-06T19:57:37","Uptime":"0T00:29:07","UptimeSec":1747,"Heap":24,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"Wifi":{"AP":2,"SSId":"FRITZ!Box 7590 CJ","BSSId":","Channel":1,"RSSI":100,"Signal":-47,"LinkCount":1,"Downtime":"0T00:00:06"}} 19:57:37 RSL: tele/tasmota/SENSOR = {"Time":"2020-02-06T19:57:37","OBIS":{"Total_in":0.0000,"Total_out":0.0000,"Power_curr":0,"Meter_number":""}} 19:57:38 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:38","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0x41150F2B"}} 19:57:39 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:39","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0x70E7939E"}} 19:57:40 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:40","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0xCE7EA1E4"}} 19:57:41 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:41","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0x4A92522B"}} 19:57:42 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:42","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0x41150F2B"}} 19:57:43 RSL: tele/tasmota/RESULT = {"Time":"2020-02-06T19:57:43","IrReceived":{"Protocol":"UNKNOWN","Bits":50,"Hash":"0x29724952"}}
bekomme zwar daten gelesen aber werden nicht umgewandelt?
Zähler(MT691) ist freigeschaltet
20:01:37 CMD: sensor53 d1 20:01:37 RSL: stat/tasmota/RESULT = {"Time":"2020-02-06T20:01:37","SML":{"CMD":"dump: 1"}}
-
@mpl1338 also laut Internet Sender der Zähler 1x pro Sekunde die Daten unaufgefordert. Wenn du den dump mit sensor53 d1 aktiviert hast sollte jede Sekunde ein riesiges Datenpakete mit hex Werten rein kommen. Das ist bei dir offensichtlich nicht der Fall wie ich auch deinem log sehe. Der Fehler muss wo anders liegen. Postete sich mal deinen Aufbau und dein Skript.
Gruß Jaschkopf
-
habs gefunden
einstellungen -> gerät konfigurieren -> D7 GPIO13 Led1i "none" hatte hier zuvor "IRrecv"
jetzt kommen die Daten.
Ist es möglich die einzelnen Phasen zu sehen? (Leistung/Strom)
-
@mpl1338 der Gerätetyp muss auf Generic stehen, sonst muss nichts verändert werden. Ob dein Zähler die Leistung pro Phase ausgibt musst du mal im Datenblatt nachlesen. Postete doch mal ein dump deiner Rohwerte aus der Konsole mit aktiviertem Debugging.
Gruß Jaschkopf
-
22:00:39 CMD: sensor53 d1 22:00:39 RSL: stat/tasmota/RESULT = {"Time":"2020-02-06T22:00:39","SML":{"CMD":"dump: 1"}} 22:00:40 : ca 1b 1b 1b 1b 01 01 01 01 76 05 03 dd a0 6f 62 00 62 00 72 63 01 01 76 22:00:40 : 01 01 05 01 49 e0 25 0b 0a 01 49 53 4b 00 04 42 5a 58 72 62 01 65 01 49 df 24 62 01 63 a0 9a 00 76 05 03 dd a0 70 62 00 62 00 72 63 07 01 22:00:40 : 77 01 0b 0a 01 49 53 4b 00 04 42 5a 58 07 01 00 62 0a ff ff 72 62 01 65 01 49 df 24 74 22:00:40 : 77 07 01 00 60 32 01 01 01 01 01 01 04 49 53 4b 01 22:00:40 : 77 07 01 00 60 01 00 ff 01 01 01 01 0b 0a 01 49 53 4b 00 04 42 5a 58 01 22:00:40 : 77 07 01 00 01 08 00 ff 65 00 1c 01 04 01 62 1e 52 ff 65 03 1c 46 73 01 22:00:40 : 77 07 01 00 10 07 00 ff 01 01 62 1b 52 00 53 02 b2 01 01 01 63 7b 62 00 76 05 03 dd a0 71 62 00 62 00 72 63 02 01 71 22:00:40 RSL: tele/tasmota/STATE = {"Time":"2020-02-06T22:00:40","Uptime":"0T00:42:47","UptimeSec":2567,"Heap":24,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":52,"MqttCount":0,"Wifi":{"AP":2,"SSId":"FRITZ!Box 7590 CJ","BSSId":"44:4E:6D:52:0C:91","Channel":1,"RSSI":100,"Signal":-47,"LinkCount":1,"Downtime":"0T00:00:06"}} 22:00:40 RSL: tele/tasmota/SENSOR = {"Time":"2020-02-06T22:00:40","SML":{"DJ_TPWRIN":5218.469,"DJ_TPWROUT":0.000,"DJ_TPWRCURR":0.701}} 22:00:41 : ae 1b 1b 1b 1b 01 01 01 01 76 05 03 dd a0 72 62 00 62 00 72 63 01 01 76 01 01 05 01 49 e0 22:00:41 : 26 0b 0a 01 49 53 4b 00 04 42 5a 58 72 62 01 65 01 49 df 25 62 01 63 7f a0 00 76 05 03 dd a0 73 62 00 62 00 72 63 07 01 22:00:41 : 77 01 0b 0a 01 49 53 4b 00 04 42 5a 58 07 01 00 62 0a ff ff 72 62 01 65 01 49 df 25 74 22:00:41 : 77 07 01 00 60 32 01 01 01 01 01 01 04 49 53 4b 01 22:00:41 : 77 07 01 00 60 01 00 ff 01 01 01 01 0b 0a 01 49 53 4b 00 04 42 5a 58 01 22:00:41 : 77 07 01 00 01 08 00 ff 65 00 1c 01 04 01 62 1e 52 ff 65 03 1c 46 75 01 22:00:41 : 77 07 01 00 10 07 00 ff 01 01 62 1b 52 00 53 00 76 05 03 dd a0 74 62 00 62 00 72 63 02 01 71 01 63 98 df 00 00 1b 1b 22:00:42 : 1b 1b 1b 1b 01 01 01 01 76 05 03 dd a0 75 62 00 62 00 72 63 01 01 76 01 01 05 01 49 e0 27 0b 0a 01 49 53 4b 00 04 42 5a 58 72 62 01 65 01 49 df 26 62 01 63 0d aa 00 76 05 03 dd a0 76 62 22:00:42 : 00 62 00 72 63 07 01 22:00:42 : 77 01 0b 0a 01 49 53 4b 00 04 42 5a 58 07 01 00 62 0a ff ff 72 62 01 65 01 49 df 26 74 22:00:42 : 77 07 01 00 60 32 01 01 01 01 01 01 04 49 53 4b 01 22:00:42 : 77 07 01 00 60 01 00 ff 01 01 01 01 0b 0a 01 49 53 4b 00 04 42 5a 58 01 22:00:42 : 77 07 01 00 01 08 00 ff 65 00 1c 01 04 01 62 1e 52 ff 65 03 1c 46 07 00 ff 01 01 62 1b 52 00 53 02 b3 01 01 01 63 b1 22:00:43 : bf 1b 1b 1b 1b 01 01 01 01 76 05 03 dd a0 78 62 22:00:43 : 00 62 00 72 63 01 01 76 01 01 05 01 49 e0 28 0b 0a 01 49 53 4b 00 04 42 5a 58 72 62 01 65 01 49 df 27 62 01 63 13 bb 00 76 05 03 dd a0 79 62 00 22:00:43 CMD: sensor53 d0
da wäre mal was
-
@mpl1338 sieht nicht so aus als würde er die Leistung pro Phase ausgeben. Muss zuhause nochmal in meine Dokumente gucken aber sieht so aus als würde er nur die zählerstände und aktuelle wirkleistung ausgeben. Wenn der Zähler die Werte nicht im Display anzeigt dann kann er sie auch nicht über die Schnittstelle ausgeben.
Gruß jaschkopf
-
@mpl1338 sagte in Stromzähler per Sonoff ESP8266 auslesen:
habs gefunden
einstellungen -> gerät konfigurieren -> D7 GPIO13 Led1i "none" hatte hier zuvor "IRrecv"
jetzt kommen die Daten.
Ist es möglich die einzelnen Phasen zu sehen? (Leistung/Strom)
Kann mir nicht vorstellen, dass das möglich ist!
Ist doch nur ein Lesekopf der die Summe ausliest.
Da musst Du wohl auf den neuen Shelly EM30 (?) warten, da kommt dann über jede Phase ein Adapter. -
@mkrobe es gibt schon Stromzähler die diese Daten messen und über die Schnittstelle ausgeben. Hab ich in einem anderen Forum schon gesehen
-
Hallo,
Danke @Jaschkopf für die sehr gute Anleitung. Dank dieser Anleitung habe ich ATOM zum laufen gebraucht und hab auch die ersten Sonoff POW R2 geflashed.
Der Sonoff POW R2 funktioniert mit Tasmota sehr gut, aber leider habe ich das auslesen per SML nicht hinbekommen.
Ich habe eine BPW40 mit Poti am RX ( natürlich auch 3,3V und GND) wie im Bild beschrieben Bild der Schaltung im Punkt Singalaufbereitung
angeschlossen. Aber leider bekomme aber leider keine Daten.
Nun ist die Frage, welcher GPIO ist der richtige für einen Sonoff POW R2 oder Sonoff RF?Danke
Viele Grüße, -
@fruehwi ich kann das Bild leider nicht öffnen. Musst rausfinden an welchem gpio du mit rx dran bist und den dann in Skript angeben.
Gruß Jaschkopf
-
@Jaschkopf Also ich bin ziemlich frustriert. Habe jetzt schon einen zweiten Wemos Nano D1 geflasht und trotzdem geht nichts. Den Lesekopf habe ich auch schon gedreht, aber auch Fehlanzeige.
Mir fehlt auch irgendwie eine Beschreibung, was dieser Lesekopf und der ESP alles macht. Ich kann das Verhalten meines Zählers überhaupt nicht nachvollziehen.Nochmal meine Konfiguration:
Mein Zähler
Wenn ich mit der Taschenlampe die PIN eingebe erscheint in der zweiten Zeile des Display die aktuelle Leistung , also P. Setze ich jetzt den Lesekopf auf, beginnt das Infofeld (zweite Zeile des Displays) plötzlich zwischen den einzelnen Informationen hin und her zu schalten. Irgendwann endet dies bei der PIN-Eingabe und der wahllosen Eingabe eines PIN. Dies führt letztendlich dazu, dass der Zähler, wegen fehlender korrekter PIN das Infofeld sperrt. Ich habe meinen Lesekopf so positioniert, dass T1 auf die Datenschnittstelle "schaut" und D1 auf den Lichtsensoreingang. (Siehe Bild 2) Das habe ich auch mehrmals kontrolliert.
Dieses Verhalten zeigt der Zähler, sobald ich den Lesekopf am Zähler montiere und diesen, ohne Rx, lediglich an die Versorgungsspannung anschließe.
Hat noch jemand einen solchen Zähler im Einsatz?
-
@RalfTh wenn dein Zähler eine Eingabe registriert muss er ja über die optische Taste Impulse bekommen die vom Lesekopf kommen müssen. Wenn du tx und rx nicht angeschlossen hast und es trotzdem passiert hast du vermutlich beim Zusammenbau des Lesekopf einen Fehler gemacht. Vielleicht irgendwo ein Kurzschluss oder ein Bauteil durch zu hohe Temperatur beim löten beschädigt. Guck man durch deine Handy Kamera auf den Lesekopf ob die ir led leuchtet bzw blinkt. Wenn du tx nicht angeschlossen hast und die led trotzdem leuchtet muss der Fehler in der Hardware des Lesekopf liegen.
Gruß Jaschkopf
-
@Jaschkopf ...bekomme auch keine Daten mit dem Lesekopf. Ist es normal, dass OBIS angezeigt wird, obwohl SML comiliert ist ?
Liegt es vielleicht daran? Habe einen EMH ED300L mit dem USB-Lesekopf an einem Raspi funktionierte das bislang einwandfrei. -
Also da offensichtlich häufig Probleme auftreten hier nochmal ein paar Tipps:
- In der Firmware wird lediglich der Treiber sowie das Skript aktiviert
- Die Konfiguration des Zählers erfolgt dann in der Weboberfläche im Skript
- Im Skript muss die Zählersprache (SML, OBIS, MODBUS, etc.) der RX/TX Pin, die Baudrate, etc angegeben werden
- In der Firmware muss nichts weiter eingestellt werden
- Der Lesekopf muss akkurat gelötet werden. Wenn Transistoren oder Dioden zu heiß gelötet werden, können diese zerstört werden!
- Der Lesekopf muss mit dem schwarzen "Auge" (Fototransistor=Eingang=RX) so ausgerichtet werden, dass er auf der Infrarotdiode des Zähler liegt. Das kann mit einer Handykamera geprüft werden, dadurch wird das IR-Licht sichtbar. Ggf muss der Lesekopf um 180° gedreht werden.
- Der RX-Pin des Lesekopf muss an richtigen GPIO angeschlossen werden. Dieser wird im Skript hinterlegt. Ggf. mal einen anderen Pin probieren. Ich konnte z.B. mit einem NodeMCU auf GPIO1+3 die als RX+TX auf dem Board beschriftet sind, keine Daten empfangen. Vermutlich weil Tasmota die Pins für etwas anderes nutzt. Deswegen bin ich beim NodeMCU auf GPIO 13/15 (D7/D8) gegangen.
- Um zu Prüfen ob der Zähler Daten sendet, kann die Schnittstelle durch eine Handykamera betrachtet werden. Durch den Filter der Kamera wird das IR-Licht sichtbar.
- Um zu Prüfen ob der Lesekopf Daten vom Zähler empfängt, kann über die Konsole des Webinterface das Debugging aktiviert werden. Dazu in der Konsole "sensor53 d1" eingeben. "d1" aktiviert in diesem Fall das Debugging für den 1. im Skript definierten Zähler. Wenn mehrere Zähler mit mehren Leseköpfen bedient werden kann auch das Debugging für den 2. Zähler mit "sensor53 d2" aktiviert werden. Mit "sensor53 d0" wird das Debugging für alle Zähler deaktiviert.
- Sollten mit aktiviertem Debugging nicht regelmäßig (ca. 1x pro sek.) Datenpakete in der Konsole sichtbar sein, stimmt etwas aus den vorigen Punkten nicht.
Beispiel für ein Datenpaket eines SML Zähler:
11:16:59 : 38 00 76 05 00 d5 97 8b 62 00 62 00 72 63 07 01 11:16:59 : 77 07 ff ff ff ff ff ff 0b 0a 01 4c 47 5a 00 03 34 b7 af 07 01 00 62 0a ff ff 72 62 01 65 00 47 35 34 75 11:16:59 : 77 07 01 00 60 32 01 01 01 01 01 01 04 4c 47 5a 01 11:16:59 : 77 07 01 00 60 01 00 ff 01 01 01 01 0b 0a 01 4c 47 5a 00 03 34 b7 af 01 11:16:59 : 77 07 01 00 01 08 00 ff 65 00 1c 11 04 72 62 01 65 00 47 35 34 62 1e 52 ff 69 00 00 00 00 00 b5 98 96 01 11:16:59 : 77 07 01 00 c4 d1 01 11:16:59 : 77 07 01 00 10 07 00 ff 01 01 62 1b 52 00 59 00 00 00 00 00 00 71 01 63 45 bd 00 00 00 1b 1b 1b 1b 1a 02 e1 11:16:59 : d2 1b 1b 1b 1b 01 01 01 01 76 05 00 d5 97 11:16:59 : 8d 62 00 62 00 72 63 01 01 76 01 07 ff ff ff ff ff ff 05 00 47 32 84 0b 0a 01 4c 47 5a 00 03 34 b7 af 72 62 01 65 00 47 35 35 01 63 29 a2 00 76 05 00 d5
OBIS Zähler senden etwas andere Strings. Dort kann man dann deutlich die OBIS Kennzahl erkennen:
1-0:1.8.0 = Summe Wirkenergie Verbrauch Tarife T1 + T2 [Wh]
1-0:1.8.1 = Wirkenergie Verbrauch Hochtarif T1 [Wh]
1-0:1.8.2 = Wirkenergie Verbrauch Niedertarif T2 [Wh]
1-0:16.7.0 = Momentane Leistung [W]
1-0:36.7.0 = Momentane Leistung Phase L1 [W]
1-0:56.7.0 = Momentane Leistung Phase L2 [W]
1-0:76.7.0 = Momentane Leistung Phase L3 [W]Ich hoffe das hilft einigen weiter.
Gruß Jaschkopf
-
@Jaschkopf : wofür steht in Deinem Skript "tper=10" ?
Finde dazu in der Anleitung keine Beschreibung. -
@mkrobe mit tper=10 wird die teleperiod auf 10sek gesetzt. Das ist der Intervall in dem die Daten per MQTT gesendet werden. 10 ist kleinst mögliche Wert.
Hier sind noch ein paar sehr nützliche Links:
Syntax für das Skript:
https://github.com/arendst/Tasmota/wiki/smart-meter-interface
Beispielskripte für verschiedene Zähler:
https://github.com/arendst/Tasmota/wiki/Smart-Meter-Interface-Descriptors
Wiki für Skript Sprache:
https://github.com/arendst/Tasmota/wiki/Scripting-Language
Kommandos für Sensor53:
https://github.com/arendst/Tasmota/wiki/Commands#sensor53Wenn man mal die Wiki's durch geht findet man eigentlich alles sehr gut beschrieben was der Skripter so kann.
Hier nochmal ein Screenshot von meinem Webinterface und dazu mein Skript. Da kann man gut sehen was alles (und noch viel mehr!!) möglich ist. Die Skript Sektion ist ein sehr mächtiges Tool in Tasmota!
>D s1="Tagesverbrauch: {m}<b><span style=" v2=0 hr=0 md=0 yr=0 ;Strom p:sm=0 sd=0 p:sma=0 smn=0 p:sya=0 syn=0 sspr=0.2583 yspr=0 ysgp=156.00 y€=0 >T v2=SML#DJ_TPWRIN >B ->sensor53 r tper=10 >S ;Tagesverbrauch hr=hours if chg[hr]>0 and hr==0 and v2>0 then sm=v2 svars endif if upsecs%tper==0{ sd=v2-sm } ;Monatsverbrauch md=day if chg[md]>0 and md==1 and v2>0 then sma=v2 svars endif if upsecs%tper==0{ smn=v2-sma } ;Jahresverbrauch yr=year if chg[yr]>0 and hr==0 and md==1 and v2>0 then sya=v2 svars endif if upsecs%tper==0{ syn=v2-sya ;Kosten yspr=syn*sspr+ysgp } >J ,"Verbrauch Tag":"%sd%" ,"Verbrauch Monat":"%smn%" ,"Verbrauch Jahr":"%syn%" ,"Zählerstand 0:00Uhr":"%3sm%" ,"Zählerstand Monatsanfang":"%3sma%" ,"Zählerstand Jahrenanfang":"%3sya%" >W ============== Tagesverbrauch: {m} %3sd% KWh Monatsverbrauch: {m} %3smn% KWh Jahresverbrauch: {m} %3syn% KWh ============== Preis/kWh: {m} %4sspr% € Grundpreis: {m} %2ysgp% € -------------- Kosten lfd. Jahr:{m} %2yspr% € ============== Zählerstände: aktuell: {m} %3v2% KWh 0:00 Uhr: {m} %3sm% KWh Monatsanfang: {m} %3sma% KWh Jahresanfang: {m} %3sya% KWh ============== >M +1,13,s,16,9600,SML 1,77070100010800ff@1000,Verbrauch,KWh,DJ_TPWRIN,4 1,77070100020800ff@1000,Einspeisung,KWh,DJ_TPWROUT,4 1,77070100100700ff@1,Akt. Verbrauch,W,DJ_TPWRCURR,0 #
Gruß Jaschkopf
-
@Jaschkopf In deiner ersten Beschreibung habe ich nichts von PIN 15 und Tx gefunden. Deshalb habe ich das überhaupt nicht angeschlossen. Und in deinem ersten Skript habe ich den PIN 15 (Zeile 6) auch nicht gefunden. Ich probier das jetzt mal mit deinem anderen Skript und werde berichten.
-
@RalfTh lass dich davon bitte nicht verwirren. Es gibt Zähler die senden ihre Daten nicht freiwillig. Da dein Zähler aber unaufgefordert die Daten alle 1sek sendet kannst du TX völlig vernachlässigen. Dein Problem liegt wo anders weil dein Zähler offensichtlich eine Betättigung der optischen Taste registriert sobald du den Lesekopf aufsetzt. Das darf nicht sein! Da stimmt garantiert etwas mit deiner Platine nicht. Mach mal bitte ein Foto von deiner Platine, vielleicht kann man darauf etwas erkennen. Bitte von beiden Seiten!
Gruß Jaschkopf
-
Hier übrigens ein weiteres Tutorial. Wenn man nicht unbedingt eine Sendediode benötigt für deinen Zähler, um diesen anzustoßen überhaupt etwas zu senden, reicht auch ein normaler fototransistor für ein paar Cent zum auslesen der Zähler.
Und selbst für den zweiten Fall, kann man mit etwas Elektro Verständnis auch eine ir led zum leuchten->senden bekommen.