SML Stromzähler per USB Schreib-Lesekopf?

Begonnen von matzefisi, 04 August 2013, 14:14:48

Vorheriges Thema - Nächstes Thema

Omega-5

#285
Zitat von: willybauss am 01 März 2016, 20:08:56
Die vorbelegte Variable heißt $scaler = 10. Da könnte man doch glatt einen Zusammenhang vermuten ...

Könnte man. Aber ganz so einfach ist das nicht. Der scaler ist hier nämlich ein Teiler und wenn der nicht initialisiert ist (dann = 0) tritt der Fehler auf.
Wenn ihr in den Code schaut, werdet ihr sehen das 3 mögliche Faktoren berücksichtigt werden. Was passiert wenn der Zähler einen nicht bekannten Code sendet oder ein Übertragungsfehler auftritt? Dann wird der Faktor nicht gesetzt.

Auszug aus der Ausgabe meines Zählers:
<134>      77
               07 01 00 01 08 00 FF             objName 1-0:1.8.0*255
                                                Wirkarbeit Bezug total
               64 00 02 82
               01                               valTime
               62 1E                            unit (unsigned8) 1E = Wh
               52 FF                            scaler (int8) -1 = *10^-1 = /10
<151>          56 00 02 CB 07 E0                value  46860256/10 = 4686025,6 Wh
               01                               valueSignature (leer)


Um der Sache auf den Grund zu gehen, müsste man mal die Ausgabe deines Zählers aufzeichnen und analysieren.  8)

Gruß Friedrich

Edit:
Ich habe nochmal in die Beschreibung des SML-Datenprotokolls geschaut.
Es gibt auch die Möglichkeit das der scaler weitere Werte annimmt.

52FD = 10^-3 (x0,001)
52FE = 10^-2 (x0,01)
52FF = 10^-1 (x0,1)
5200 = 10^0 (x1)
5201 = 10^1 (x10)
5202 = 10^2 (x100)


@ matzefisi
Das solltest du also im Code noch berücksichtigen.
RaspberryPi2, nanoCUL, 3x DS18B20, FS20: 4x Funk-Schalter ST-4, LaCrosseGW,
HomeMatic: HMLAN, HM-WDS10-TH-O, HM_MYS_RelaisBoard,
I2C: HYT221 über modifiziertes Modul I2_I2C_SHT21.pm (Q&D),

matzefisi

Hi zusammen,

das Problem mit dem teilen durch null sollte nun erstmal durch die Vorbelegung mit 1 gefixt sein. (Auch nur als Workaround).

Eine neue Version ist gerade im Github eingecheckt. https://github.com/matzefisi/fhem-70_SMLUSB Diese beinhaltet nun auch einen PollingMode um die Last auf z.B. einen Raspberry deutlich zu reduzieren. (Quelle: http://forum.fhem.de/index.php/topic,49515.msg412969.html#msg412969)

Des weiteren habe ich die Readings umbenannt um diesen Fehler zu eliminieren:
Zitat2016.02.28 20:45:15 3: WARNING: unsupported character in reading Zählerstand-Bezug-Total (not A-Za-z/\d_\.-), notify the dummy module maintainer.

Die Sache mit dem Scaler ist wirklich nicht so einfach. Der Scaler ist auch ein einem Typ-Length Field (T/L) abgebildet. Also z.B. 52 FF dass wäre dann Binär "01010010 11111111". Und wie man das nun in einen Scaler umwandelt ist in diesem PDF auf Seite 33 und 34 beschrieben: http://www.emsycon.de/downloads/SML_081112_103.pdf

Um das SML Protokoll komplett sauber abzubilden, fehlt dem SMLUSB Modul also noch eine Funktion die die T/L "übersetzen" kann. Da ich es bislang noch nicht geschafft habe die zu bauen, habe ich halt erstmal die Scaler hart kodiert.

MfG
Matthias

diesaege

Hallo Matzefisi,

ich hab die neue Version vom Github ausprobiert. https://github.com/matzefisi/fhem-70_SMLUSB
Also einfach gegen meine bisherige Version getauscht (Rechte auch gesetzt).

Leider kamen dann keine Daten mehr an (das Logfile blieb leer).
Muß man die Attribute anpassen / erweitern?
Hab auch etwas mit
Zitatattr powerZaehler event-min-interval .*:30
gespielt.
Das hat leider nichts gebracht.

Zu guter letzt hab ich wieder die alte Version kopiert und schon lief wieder alles wie bisher...

Gruß

PS: Einziges Problem was mir immer auffällt, sind "Löcher" in der Aufzeichnung der Momentanleistung bei negativen Werten (also wenn die Solaranlage mehr liefert als ich verbrauche). Ansonsten wirklich ein geniales Teil - VIELEN DANK!

Decki

Hallo,

ich habe das gleiche festgestellt. update auf dieletzte Version von Github und danach bekomme ich keine Werte mehr. Die vorherige Version hat funktioniert. Leider habe ich diese nicht gesichert. Wo kann man diese herunterladen?

Ich habe einen EHZ 21 mit 2 Wege Stromzähler und Echtzeitverbrauch.

MfG
Andreas
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

matzefisi

Hi,

sorry das es bei Euch nicht geht. Bei mir läuft es komischerweise 1a. Ich werde es mir nächste Woche direkt nochmal anschauen.

Solange könnt Ihr Euch noch in der Github Historie bedienen.

Das hier ist die letzte Version, bevor ich die pollingMode Funktion eingebaut habe.

https://github.com/matzefisi/fhem-70_SMLUSB/commit/b3df9cd8233d073639e0126ba39aa42910659a0a

MfG
Matzefisi

immi

#290
Hi Matzefisi
I like your module, thanks for your work.
I am running it on a ISKRA MT681 since 2h without errors.
I am using a very buggy breadboard IR-detector with esp8266 and ser2net (the detector is still fixed with adhesive tape :)

Your module was not running out of the box with ser2net, therefore I changed something.
Maybe, you are interested in merging some code, which you find interesting; I would be honored.
My patch should be compatible with the original USB interface, I will test it next weekend.
define <name> SMLUSB <devicename>\@baudrate'
or
define <name> SMLUSB IP:PORT'"

I concentrated in the detection of the begin and end of the message.
I deleted all the polling code; I prefer to remain FHEM mainstream :)
I understood, you introduced polling for improving speed; I will have a look at speed next week-end.

p.s. feel free to answer in german; I type just faster in engl.
edit:. small hack for the scaler (newfile uploaded at 21:42)
b.r.
immi

zYloriC

#291
Hallo zusammen,

ich nutze seit Wochen einen selbst gebauten IR-Zähler mit dem SMLUSB-Modul. An meinem Hager-Zweirichtungs-Zähler.

Leider bekomme ich keine Werte zum erzeugten Strom, da dieser auch auf dem Zähler selbst nur als positiver Wert angezeigt wird. Es ist auch auf dem Zähler nicht erkennbar, ob es Ertrag oder Verbraucht handelt .... außer über eine kleine Anzeige im Zähler links oben: Dort zeigt ein Pfeil über einem "A" an ob Strom verbraucht oder erzeugt wird. (Abhängig von der Pfeilrichtung)

Meine Frage: Gibt es im SML-Protokoll eine Möglichkeit die Pfeilrichtung des As oder generell die Richtung von Zweirichtungszählern auszulesen??
Somit könnte man dann zwischen MomentanVerbrauch und MomentanErzeugung unterscheiden. Das wäre super.

Viele Grüße, zYloriC


PS: gibt es einen unterschied zwischen der Momentanleistung und der "aktuelle Wirkleistung key=01000F0700FF"

matzefisi

Hi zYloriC,

das bildet mein Modul eigentlich schon ab. Und war steht das meiner Erkenntnis nach im Statusword:

77070100010800FF 640101 A2 01 621E 52FF 56 0001450FA101  --> Einspeisung
77070100010800FF 640101 82 01 621E 52FF 56 000145A40201  --> Bezug


Im aktuellen Code (https://github.com/matzefisi/fhem-70_SMLUSB/blob/master/70_SMLUSB.pm) findest Du das in der Zeile 284 und 285. Aber auch das ist nur Hardcoded und kann bei einigen Zählern anders aussehen.

      $direction = "Bezug"       if (substr($telegramm,$length_all-4,2) eq "82");
      $direction = "Einspeisung" if (substr($telegramm,$length_all-4,2) eq "A2");


Du könntest evtl. mal mit einem Terminalprogramm ein paar Telegramme einfangen (wenn der Zähler auf Einspeisung läuft) dann könnte ich mir das mal anschauen.

MfG
Matzefisi

zYloriC

Hallo Matze,

vielen Dank für deine Hilfe. Anbei habe ich zwei Telegramme. Den Wert "77070100010800FF" konnte ich finden, "0001450FA101" und "000145A40201" aber nicht. Hast du eine Idee dazu?

Gruß und Dank, zYloriC

1b1b1b1b010101017609000000000701d2ba620162007263010176010109000000000255f0ea0b06484147010754ded5cf010163453f007609000000000701d2bb620162007263070177010b06484147010754ded5cf070100620affff726201650351a5997a77078181c78203ff01010101044841470177070100000009ff010101010b06484147010754ded5cf0177070100010800ff62a201621e52ff55044c02780177070100010801ff0101621e52ff55044bdb680177070100010802ff0101621e52ff5327100177070100020800ff62a201621e52ff550340e8f00177070100020801ff0101621e52ff550340c1e00177070100020802ff0101621e52ff5327100177070100100700ff0101621b520053f9f30177078181c78205ff0101010183029b147c682819fb0365a1ac68a7238153b1332cb24645e0ca769e8ca72cac1603e84166642811060867cc46a9f87af959010101633304007609000000000701d2be6201620072630201710163e7d9001b1b1b1b1a009ed11b1b1b1b010101017609000000000701d2c0620162007263010176010109000000000255f0ec0b06484147010754ded5cf010163c384007609000000000701d2c1620162007263070177010b06484147010754ded5cf070100620affff726201650351a59b7a77078181c78203ff01010101044841470177070100000009ff010101010b06484147010754ded5cf0177070100010800ff62a201621e52ff55044c02780177070100010801ff0101621e52ff55044bdb680177070100010802ff0101621e52ff5327100177070100020800ff62a201621e52ff550340e8f90177070100020801ff0101621e52ff550340c1e90177070100020802ff0101621e52ff5327100177070100100700ff0101621b520053f9f30177078181c78205ff0101010183029b147c682819fb0365a1ac68a7238153b1332cb24645e0ca769e8ca72cac1603e84166642811060867cc46a9f87af95901010163eaa9007609000000000701d2c26201620072630201710163d265001b1b1b1b1a00ebe01b1b1b1b010101017609000000000701d2c6620162007263010176010109000000000255f0ee0b06484147010754ded5cf010163c895007609000000000701d2c7620162007263070177010b06484147010754ded5cf070100620affff726201650351a59d7a77078181c78203ff01010101044841470177

1b1b1b1b010101017609000000000701d3ce620162007263010176010109000000000255f1460b06484147010754ded5cf0101631382007609000000000701d3cf620162007263070177010b06484147010754ded5cf070100620affff726201650351a6077a77078181c78203ff01010101044841470177070100000009ff010101010b06484147010754ded5cf0177070100010800ff62a201621e52ff55044c02780177070100010801ff0101621e52ff55044bdb680177070100010802ff0101621e52ff5327100177070100020800ff62a201621e52ff550340eac70177070100020801ff0101621e52ff550340c3b70177070100020802ff0101621e52ff5327100177070100100700ff0101621b520053fa010177078181c78205ff0101010183029b147c682819fb0365a1ac68a7238153b1332cb24645e0ca769e8ca72cac1603e84166642811060867cc46a9f87af95901010163dd06007609000000000701d3d06201620072630201710163e03a001b1b1b1b1a0091e71b1b1b1b010101017609000000000701d3d4620162007263010176010109000000000255f1480b06484147010754ded5cf010163e86b007609000000000701d3d5620162007263070177010b06484147010754ded5cf070100620affff726201650351a6097a77078181c78203ff01010101044841470177070100000009ff010101010b06484147010754ded5cf0177070100010800ff62a201621e52ff55044c02780177070100010801ff0101621e52ff55044bdb680177070100010802ff0101621e52ff5327100177070100020800ff62a201621e52ff550340ead00177070100020801ff0101621e52ff550340c3c00177070100020802ff0101621e52ff5327100177070100100700ff0101621b520053fa020177078181c78205ff0101010183029b147c682819fb0365a1ac68a7238153b1332cb24645e0ca769e8ca72cac1603e84166642811060867cc46a9f87af95901010163897a007609000000000701d3d6620162007263020171016397cf001b1b1b1b1a00b3bd1b1b1b1b010101017609000000000701d3d7620162007263010176010109000000000255f1490b06484147010754ded5cf01016365e7007609000000000701d3d8620162007263070177010b06484147010754ded5cf070100620affff726201650351a60b7a77078181c78203ff01010101044841470177070100000009ff010101010b06484147010754ded5cf0177070100010800ff62a201621e52ff55044c02780177070100010801ff0101621e52ff55044bdb6801

Omega-5

#294
Hallo zYloriC,
ich meine du hast am 21 Oktober 2015, 23:14:37 schon mal deinen Zähleroutput gepostet. Ich habe damals angefangen ihn zu analysieren. Irgendwas ist mir allerdings dann dazwischen gekommen. Vieleicht ist das mal ein Anfang.

1b1b1b1b Start Escape Zeichenfolge
01010101 Start Übertragung Version 1
76
09
00000000055bc413 SML-Message + transactionId
6201 groupNo
6200 abortOnError
72630101 messageBody

760101
090000000001c9415d0b
06
484147 "HAG" Hager
010754ded5cf01016303a100760900000000055bc414
6201
6200
72630701

77010b06
484147 "HAG" Hager
010754ded5cf070100620affff7262016502981d977a

77078181c78203ff Herstelleridentifikation:
01
01
01
01
04
484147 "HAG" Hager
01

77070100000009ff Geräteeinzelidentifikation
01
01
01
01
0b06
484147 HAG
010754ded5cf01

77070100010800ff Wirkenergie Total Bezug
628201
62 unit (TL[1] + unsigned[1])
1e unit = Wh
52 scaler (TL[1] + unsigned[1])
ff scaler = -1
55 value (TL[1] + integer[32])
02ab1b85 value
01 valueSignature = not set

77070100010801ff Wirkenergie Tarif 1 Bezug
0101
62
1e
52
ff
55
02aaf475
01

77070100010802ff Wirkenergie Tarif 2 Bezug
0101
62
1e
52
ff
532710
01

77070100020800ff Wirkenergie Total Lieferung
628201
62
1e
52
ff
55
031feb19
01

77070100020801ff Wirkenergie Tarif 1 Lieferung
0101
62
1e
52
ff
55
031fc409
01

77070100020802ff Wirkenergie Tarif 2 Lieferung
0101
62
1e
52
ff
532710
01

77070100100700ff            aktuelle Wirkleistung
0101
62
1b
52005301ee01

77 valListEntry (sequence)
07 objName (TL[1] + octet_string[6])
8181c78205ff OBIS: 8181C78205FFh -> öffentlicher Schlüssel
01 status (not set)
01 valTime (not set)
01 unit (not set)
01 scaler (not set)
83029b147c682819fb0365a1ac68a7238153b1332cb24645e0ca769e8ca
72cac1603e84166642811060867cc46a9f87af959010101634ab700760900000000055bc41762016200726302017101633fb000

1b1b1b1b Escape-Sequenz im Nutzdatenstrom
1a Kennzeichnung Ende der Nachricht
00 Anzahl eingefügte Zusatz-Byte
50 crc16 (MSB)
79 crc16 (LSB)


Gruß Friedrich
RaspberryPi2, nanoCUL, 3x DS18B20, FS20: 4x Funk-Schalter ST-4, LaCrosseGW,
HomeMatic: HMLAN, HM-WDS10-TH-O, HM_MYS_RelaisBoard,
I2C: HYT221 über modifiziertes Modul I2_I2C_SHT21.pm (Q&D),

zYloriC

Hallo Friedrich,
vielen Dank für deine erneute Analyse. Damals 2015 lieft SMLUSB bei mir noch nicht... mittlerweile schon.

In deiner Analyse konnte ich Werte zu "Bezug" oder "Einspeisung" in Zusammenhang zu "$direction" nicht finden.
Die kwh-Angaben zu den beiden Werten helfen mir leider nicht viel. Ich benötige zu aktuellen WATT-Zahl quasi das Vorzeichen, um zu sehen ob es Erzeugung oder Verbrauch ist...

@Matzefisi: Aktualisiert sich 70_SMLUSB.pm mit dem fhem-update Befehl, oder muss ich es manuell aktualisieren??!


Gruß, Florian



matzefisi

Hi zYloriC,

nein, das müsstest Du noch manuell über das Github machen. Es laufen aber gerade bestrebungen das SML Modul mit dem OBIS Modul zu mergen und das ist schon im FHEM update mit drin.

MfG
Matthias

Omega-5

#297
Zitat von: zYloriC am 10 März 2016, 23:52:46
In deiner Analyse konnte ich Werte zu "Bezug" oder "Einspeisung" in Zusammenhang zu "$direction" nicht finden.
Die kwh-Angaben zu den beiden Werten helfen mir leider nicht viel. Ich benötige zu aktuellen WATT-Zahl quasi das Vorzeichen, um zu sehen ob es Erzeugung oder Verbrauch ist...
Hallo Florian,

ich habe mir in meiner Anwendung ein notify gebastelt, um zu erkennen wann der Nachttarif "NT" aktiv ist. So etwas Ähnliches könnte ich mir auch bei dir vorstellen. Dazu vergleiche ich ob sich der "HT" zwischen zwei Messungen ändert. Wenn nicht muss "NT" sein. Schau mal bitte hier:
https://forum.fhem.de/index.php/topic,20525.msg140618.html#msg140618

Ich würde sehen ob sich der kWh-Wert der Einspeisung zwischen zwei Messungen ändert und daraus "$direction" ableiten.

Gruß Friedrich

PS: Gerade gesehen neues Thema, vieleicht ganz interesant für dich. https://forum.fhem.de/index.php/topic,50661.msg422886.html#msg422886
RaspberryPi2, nanoCUL, 3x DS18B20, FS20: 4x Funk-Schalter ST-4, LaCrosseGW,
HomeMatic: HMLAN, HM-WDS10-TH-O, HM_MYS_RelaisBoard,
I2C: HYT221 über modifiziertes Modul I2_I2C_SHT21.pm (Q&D),

zYloriC

Hallo Matthias,

ich habe die 70_SMLUSB.pm vom git aktualisiert. Nach einem Neustart hat mein rPi keine SML-Daten mehr empfangen.

Im Log steht
WARNING: unsupported character in reading Zählerstand-Bezug-Total (not A-Za-z/\d_\.-), notify the SMLUSB module maintainer.Ich hab die alte  70_SMLUSB.pm noch in petto, aber ich würde schon gern die neuen Features nutzen. Leider konnte ich die ÄÖÜ im .pm-File nicht finden. Hast du einen Tipp? Eigentlich wird "zÄhlerstand" doch ordentlich in fhem angezeigt.

Gruß, zYloriC


PS: gibt es eine Möglichkeit, die neue  70_SMLUSB.pm aus der FHEM-Komandozeile zu aktualisieren? Akteull habe ich per nano gemacht und musste anschließend die chown-Rechte wieder neu auf fhem setzen
PS2: kann man den fhem-Nutzer auf der raspberry auch für FTP-Verbindungen nutzen? Eigentlich ist für ihn kein Pwasswort vorhanden, oder?

Adriano

Wollte nur Bescheid geben, dass bei mir auch nicht die neueste 70_SMLUSB.pm geht mit USB IR Lesekopf von UDO und ISKRA MT681.

Habe mir ein Wolf gesucht. Aber es lag an der neuesten 70_SMLUSB.pm

Mit der Version:

Das hier ist die letzte Version, bevor ich die pollingMode Funktion eingebaut habe.

https://github.com/matzefisi/fhem-70_SMLUSB/commit/b3df9cd8233d073639e0126ba39aa42910659a0a


gehts wunderbar.

Vielleicht solltest du Rollbacken oder die Wikiseite anpassen. Damit Neulinge nicht in die selbe Falle tappen wie ich.

Trotzdem vielen vielen Dank für das Modul! Klasse Job.