Forum: Mikrocontroller und Digitale Elektronik Digitale Stromzähler auslesen und in DB speichern


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Peter R. (peter_r689)



Lesenswert?

Hallo zusammen,
nach einem Jahr Test und deren Ergebnisse sind hier die aktuellen 
Progamme.

Der bisherige Beitrag war:
Beitrag "DTZ541 mMe Datenlogger mit ESP (WEB-Sicht)"
Das Programm läuft auf den ESP8266 Chip.

Was ist neu?
Unterstützung mehrerer Zähler, speziell alle, die nach dem SML-Protokoll 
die Daten liefern. Holley, EMH, Apator, Logarex, Iskra und allen die den 
SML Standard unterstützen. Auch die AS1440, E640 und ISKRA MT174 werden 
unterstützt, wenn das entspechende sketch übertragen wird. Allerdings 
brauchen diese unbedingt eine Infrarot Sendediode am StromLog.
Anbei die dementsprechenden Programme. Für alle Module, wie z.B. WEMOS 
muss im Setup der Serial.swap() aktiviert werden.
Die white List und der Schaltplan ist hier zu finden 
https://zaehlerinfo.de
Anbei sind die Arduinodateien und die Serverscripts.
Um das Filesystem einzubinden, was unbedingt gemacht werden muss, finden 
sie unter ESP8266 LittleFS Data Upload. Einfach mal googeln ;-)

Warum? Naja... Arduino ist ein offenes System ;-) allerdings alles 
wieder ohne Datenverschlüsselung!

Gruß infozaehler.de und Peter

von Peter R. (peter_r689)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

hier eine neue Version des StromLogs 3.9.

- Anzeige der Minusleistung für LogaRex LK13 (ab BJ 2019) ergänzt
- JSON script Unterstützung ergänzt
- Unterstützung des Home Assistant
  https://www.home-assistant.io/

Beschreibungen sind hier:
https://infozaehler.de/dtztecdiscr.html

Gruß infozaehler.de oder einfach nur Peter

: Bearbeitet durch User
von Dieter R. (drei)


Lesenswert?

Hochinteressant, aber anderswo lese ich, dass man "intelligenten" 
Zählern auch was senden muss und nicht nur empfangen kann - hier sehe 
ich in den Schaltplänen aber nur einen Fototransistor zum Empfang!?

Ich selbst habe da keine Erfahrung, mein Zähler ist dumm und sendet nur 
S0-Impulse. Trotzdem frage ich mich, wie zukunftssicher dieses Projekt 
ist, wenn die Senderichtung fehlt.

von Peter R. (peter_r689)


Lesenswert?

Dieter R. schrieb:
> Hochinteressant, aber anderswo lese ich, dass man "intelligenten"
> Zählern auch was senden muss und nicht nur empfangen kann - hier sehe
> ich in den Schaltplänen aber nur einen Fototransistor zum Empfang!?
>
> Ich selbst habe da keine Erfahrung, mein Zähler ist dumm und sendet nur
> S0-Impulse. Trotzdem frage ich mich, wie zukunftssicher dieses Projekt
> ist, wenn die Senderichtung fehlt.

Jupp, das ist eine gute Frage, bzw. wenn man das 
Messstellenbetriebsgesetz kennt, dann löst sich das auf ;-)

Alle neu verbauten Zähler müssen mindestens mME oder iMS sein. Die 
Messstellenbetreiber sind verpflichtet bis 2032 Zähler auszutauschen, 
wenn diese nicht den neuen Anforderungen entsprechen.
Diese sind:
- alle 1...2,3, Sekunden sendet der Zähler per push den aktuellen Stand, 
plus Zusatzdaten, nach Eingabe einer PIN. Die werden nur dekodiert und 
an irgendeine Datenbank gesendet. Entweder die Eigene oder eben meinen 
Service ;-)

Also braucht man keine Sendediode, weil der Zähler sendet von sich 
selbst alle paar Sekunden das Protokoll.
Allerdings ist die Schaltung auch für den pull-Betrieb ausgelegt. Nur 
ist das Programm nur im ersten Betrag enthalten. Also der AS1440 z.B. 
benötigt eine Sendediode. Schaltplan kann ich veröffentlichen, wenn 
Bedarf besteht.

Gruß Peter

: Bearbeitet durch User
Beitrag #7065099 wurde von einem Moderator gelöscht.
von my2ct (Gast)


Lesenswert?

Sinnerklärer schrieb im Beitrag #7065099:
> Gibts einen bestimmten (Hobby) oder unbestimmten (Kontrollfreak) Grund?

Schon mal auf die Strompreise geguckt?
Da rechnet es schnell, wenn man weiß, wo irgendetwas versickert. Hast du 
schon mal deine Grundlast angeguckt und überlegt, was da alles läuft?

Die einfache Antwort könnte sein: "Weil ich's kann"

von Jens K. (jensky)


Lesenswert?

Peter R. schrieb:
> Gruß infozaehler.de oder einfach nur Peter

Hallo einfach nur Peter :-)

Danke für die Infos! Das würde mir als Bastelprojekt auch reizen!

Frage wegen ESP:
Nutzt du die Espressif IDE? Weil wenn ich mir Arduino anschaue gibt es 
dort keine strings.h etc obwohl die Sourcen auf .ino lauten.

Zudem:
Würdest du einen Beispielcode teilen bei dem  der ESP einfach die 
optische Schnittstelle ausliest und per WiFi versendet? ggf mit 
decodierung von 1.8.0 und 2.8.0 sowie 16.7.0 für die 
Momentanverbrauchsanzeige?

PS: deine WebSite nutzt SSL und das Zertifikat ist ungültig! Damit 
würdest du bei Google auf den hintersten Platz landen und man würde dich 
nicht finden.

Grüße
Jens

Gesendet von meinem iPhone 13 Pro via Tapatalk

: Bearbeitet durch User
von Jens K. (jensky)


Lesenswert?

Kurze Frage:

Du schreibst: "The meter transmit its data per UV-light continuously 
every 1..60 seconds. Our UV optocoupler receive this UV light and 
exchange it for a serial stream"...

Ist das wirklich UV? Ich meine es ist IR!

von Peter R. (peter_r689)


Lesenswert?

Jens K. schrieb:
> Kurze Frage:
>
> Du schreibst: "The meter transmit its data per UV-light continuously
> every 1..60 seconds. Our UV optocoupler receive this UV light and
> exchange it for a serial stream"...
>
> Ist das wirklich UV? Ich meine es ist IR!

Ja, sorry.. das ist InfraRot ;-)
Muss ich den Text überarbeiten.

Übrigens, der Code ist hier im Beitrag weiter oben enthalten. 
Programmiert mit Arduino. LittleFS, WiFiManager und NTPClient muss mit 
eingebunden werden. Ist in den Bibliotheken bei Arduino zu finden und 
muss eingebunden werden.

Gruß Peter

: Bearbeitet durch User
von Heiner K. (heinerkuhlmann)


Lesenswert?

Hallo Peter,

Dein Projekt ist das, was ich benötige.

Fast: Ich möchte die Daten dazu verwenden, eine Wärmepumpe für 
Warmwasser so zusteuern, dass sie dann, wenn meine Photovoltaikanlage 
überschüssige Energie an das EVU liefert, in den Super-Modus schaltet 
und den Wassertank auf eine höhere Temperatur bring.

Die Wärmepumpe braucht nur über einen Relaiskontakt angesteuert zu 
werden.

Ich brauche dafür die Info von meinem Smart-Meter (Logarex LK13), ob und 
wie viel Energie an das EVU abgegeben wird.

Meine Frage: liefert mein Smart-Meter im Standard-Modus (nur ein 
IR-Empfänger) eine Info über die ans EVU abgegebene (negative) Energie.

Oder ist es dazu notwendig die IR-Schnittstelle mit einen Sender zu 
versehen.

Danke und Grüße

Heiner

von Peter R. (peter_r689)


Lesenswert?

Heiner K. schrieb:
> Oder ist es dazu notwendig die IR-Schnittstelle mit einen Sender zu
> versehen.

Hallo Heiner,

nein, du brauchst wahrscheinlich keine IR-Sendediode. Wenn dein Logarex 
ein LK13BE80xxxx und nicht älter als BJ 2019 ist, dann sendet der 
automatisch alle paar Sekunden die internen Werte. Das kannst du 
rausbekommen, wenn du mit der Handykamera raufguckst (Umgebung 
abdunkeln). Dann siehts man blinken.
Die momentane Leistungswerte sendet der Zähler aber erst, wenn das 
erweiterte Protokoll mit INFO on eingeschaltet wurde. Dazu brauchst du 
die PIN zum Freischalten. Die bekommt man vom Netzbetreiber. Dann ist 
dein Vorhaben möglich.
Das sieht im Protokoll so aus (wenn negativ, steht ein "-" davor):
********andere Werte *******
1-0:16.7.0*255(000123*W)
1-0:32.7.0*255(223.0*V)
1-0:52.7.0*255(240.1*V)
1-0:72.7.0*255(229.9*V)
1-0:31.7.0*255(021.45*A)
1-0:51.7.0*255(001.31*A)
1-0:71.7.0*255(004.03*A)
******** weitere Werte *****
ABER: Die Logarex haben ein Problem mit der Helligkeit der IR-Diode. Die 
lässt im Laufe der Zeit nach. Dann muss der Lesekopf empfindlicher 
gemacht werden. Das erreicht man mit der Veränderung zweier Widerstände. 
Als optimal hat sich bewährt, am Emitter des 4,7 k und am Kollektor des 
BCxyz 1,2 k anzuschließen. Allerdings musste ich bei einem Zähler sogar 
mal 22 k einlöten.

In dem hier veröffentlichten Programm ist noch nicht die 
JSON-Erweiterung eingebunden und es noch ein BUG mit dem Minus drin. 
Kommt später noch.

Gruß Peter

von Georg G. (df2au)


Lesenswert?

"Mein" Zähler liefert im 2s Rhythmus ohne Pin und Anregung sowohl 
bezogene als auch gelieferte Arbeit - allerdings nur volle kWh ohne 
Nachkommastellen. Das dürfte für deine Anwendung zu ungenau sein. Mit 
Pin und ohne Anregung kommen angeblich 4 Nachkommastellen.

von Peter R. (peter_r689)


Lesenswert?

Peter R. schrieb:
> In dem hier veröffentlichten Programm ist noch nicht die
> JSON-Erweiterung eingebunden und es noch ein BUG mit dem Minus drin.
> Kommt später noch.

Ohh sorry, die aktuelle Version habe ich doch schon ober weiter 
veröffentlicht ;-)
Also ist der BUG weg und JSON Erweiterung schon drinne.

Gruß Peter

von Peter R. (peter_r689)


Lesenswert?

Georg G. schrieb:
> "Mein" Zähler liefert im 2s Rhythmus ohne Pin und Anregung sowohl
> bezogene als auch gelieferte Arbeit - allerdings nur volle kWh ohne
> Nachkommastellen. Das dürfte für deine Anwendung zu ungenau sein. Mit
> Pin und ohne Anregung kommen angeblich 4 Nachkommastellen.

Richtig. Im Normalzustand kommt nur die beiden Zählerstände in kWh ohne 
Kommastellen und Zusatzdaten raus.
Nach Einschalten von INFO on kommen die Zählerstände mit 4 
Nachkommastellen, die momentane Leistung und je nach Netzbetreiber 
weitere Werte Spannung, Strom usw. raus.

Hier mal ein komplettes Protokoll, eines freigeschalteten Zählers:
/LOG5LK13BE803049

1-0:96.1.0*255(001LOG0064800017)
1-0:1.8.0*255(000956.4392*kWh)
1-0:1.8.1*255(000816.0000*kWh)
1-0:1.8.2*255(000354.4392*kWh)
1-0:2.8.0*255(000531.8322*kWh)
1-0:16.7.0*255(000123*W)
1-0:32.7.0*255(223.0*V)
1-0:52.7.0*255(240.1*V)
1-0:72.7.0*255(229.9*V)
1-0:31.7.0*255(021.45*A)
1-0:51.7.0*255(001.31*A)
1-0:71.7.0*255(004.03*A)
1-0:81.7.1*255(000*deg)
1-0:81.7.2*255(000*deg)
1-0:81.7.4*255(000*deg)
1-0:81.7.15*255(000*deg)
1-0:81.7.26*255(000*deg)
1-0:14.7.0*255(48.9*Hz)
1-0:1.8.0*96(00000.0*kWh)
1-0:1.8.0*97(00000.0*kWh)
1-0:1.8.0*98(00000.0*kWh)
1-0:1.8.0*99(00000.0*kWh)
1-0:1.8.0*100(00000.4*kWh)
1-0:0.2.0*255(ver.03,EF8C,20170504)
1-0:96.90.2*255(0C69)
1-0:97.97.0*255(00000000)
!

Gruß Peter

von Heiner K. (heinerkuhlmann)


Lesenswert?

Peter R. schrieb:

> nein, du brauchst wahrscheinlich keine IR-Sendediode. Wenn dein Logarex
> ein LK13BE80xxxx und nicht älter als BJ 2019 ist, dann sendet der
> automatisch alle paar Sekunden die internen Werte. Das kannst du
> rausbekommen, wenn du mit der Handykamera raufguckst (Umgebung
> abdunkeln). Dann siehts man blinken.

Mist, der Zähler ist von 2018 und in der Handykamera blink nichts.

Was kann ich da machen?

Grüße Heiner

von Georg G. (df2au)


Lesenswert?

Heiner K. schrieb:
> Was kann ich da machen?

anderes Handy oder Digitalkamera probieren. Manche (guten) Kameras haben 
IR Filter hinter der Linse.

von Heiner K. (heinerkuhlmann)


Lesenswert?

Georg G. schrieb:

> anderes Handy oder Digitalkamera probieren. Manche (guten) Kameras haben
> IR Filter hinter der Linse.

Danke für den Tipp. Bei einer anderen Kamera blinkt's.

Ist das Protokoll bei älteren LK13BE80xxxx, hier KL13BE803039, anders?

Grüße Heiner

von Peter R. (peter_r689)


Lesenswert?

Heiner K. schrieb:
> Ist das Protokoll bei älteren LK13BE80xxxx, hier KL13BE803039, anders?

also, wenn der von alleine blinkt, denke ich, sendet der auch das 
Protokoll ;-)

Ich weis nicht, welche Module du schon hast? Also irgendein ESP8266 
Modul (WEMOS, WIFI Kit8 o.ä.) nehmen. Das Programm mit JSON Erweiterung 
raufspielen. Lesekopf basteln (geht auch ohne MAX485). Den Kollektor per 
Widerstandsteiler (wegen Pegelwandlung auf 3,3V) an RxD anschließen. Bei 
einigen Modulen ist der Serial0 durch USB-Anschluss belegt, dann in der 
Setup-Routine folgenden Code nach Serial.begin(9600,SERIAL_8N1) 
einfügen:
Serial.swap();  // set serial pins on 13(RX) and 15(TX)
und damit RxD auf einen anderen PIN legen.
Mehr Infos hier: http://stefanfrings.de/esp8266/
Mit dem Handy ESP-WLAN suchen und verbinden. Dein WLAN-Daten eingeben 
und speichern. Dann die IP des ESP suchen -> wenn gefunden (ggf. im 
Router gucken)
Dann die IP im Browser eingeben... dann müsstest du schon etwas sehen.
Was alles rauskommt, an Daten, siehst du wenn im Browser eingibst:
DEINEIP/allData

Man kann auch das Rohprotokoll ausgeben lassen, aber dann braucht man 
einen Server, der das entgegennimmt und speichert (zur Not nimm meinen:
 infozaehler.de/json2server.php). Einzustellen bei den Einstellungen. 
Für das Rohprotokoll sind keine Logindaten nötig. Geht ohne ;-)
DEINEIP/sendProtocols

Nachgucken dann hier: https://infozaehler.de/logJSONProt.txt
Das Rohprotokoll steckt in der Variable "buffer" und ist mit BASE64 
codiert.
Decode mit: https://base64.guru/converter/decode/ascii

Gruß Peter

: Bearbeitet durch User
von Sven (Gast)


Lesenswert?

Ich habe das Teil auch gerade nachgebaut und im Testbetrieb mit 4 AA 
Zellen betrieben - nach ca. 30 Std. waren die Batterien leer :-(

In einem eigenen Projekt hatte ich beim ESP den sleep Modus verwendet 
und konnte trotz 5 Minuten wake-up eine Laufzeit von 4 Wochen 
erreichen...

Evtl. könnte man hier auch noch etwas Energie sparen?

von Peter R. (peter_r689)


Lesenswert?

Sven schrieb:
> Evtl. könnte man hier auch noch etwas Energie sparen?

Tja, ausgelegt ist das Projekt mit 5V Netzteil. Wenn das über Batterien 
realisiert werden soll, gibt es einige Herausforderungen:
- der Lesekopf wird statisch mit 5V versorgt. Stromschlucker 1
- der StromLog sendet alle 15 min die Daten, also muss der rechtzeitig 
aktiviert werden. Stromschlucker 2
- einen Zugriff auf den ESP ist in dem Sleep-Modus wahrscheinlich 
schwierig -> nicht getestet und man kann nicht den aktuellen Verbrauch 
sehen.
möglicher Ansatz:
- WakeUp rechtzeitig vor dem Senden. Läuft die Softwareuhr dann noch?
- Spannung für den Lesekopf zuschalten. Machbar mit Pin vom ESP.
- warten bis ein komplettes Protokoll empfangen wurde. Wie viele sind 
nötig?
 (beim ersten wird die Schnittstellengeschwindigkeit identifiziert. 
Danach der Zählertyp und dann die Daten. Das kann ein paar Sekunden 
dauern)
- Daten senden und wieder zurück in den Sleep-Modus

Wäre eine Option... aber nach einer doch nicht allzu langen Zeit sind 
die Batterien leer gesaugt. Und die dann alle 2,3..5 oder X Monate zu 
wechseln? Wird schwierig. Dafür saugt der ESP leider zu viel Strom.

Gruß Peter

von Sven (Gast)


Lesenswert?

>Wäre eine Option... aber nach einer doch nicht allzu langen Zeit sind
die Batterien leer gesaugt.

Ja, das ist richtig, sollte bei mir ja auch nur eine Übergangslösung 
sein. 30 Std. finde ich überraschend wenig, aber erscheint logisch nach 
deinen Ausführungen.
Danke für dein praktische Projekt.

Mangels vorhandener Bauteile habe ich mir die Lesekopfplatine + Magnet 
bei ebay für 12€ besorgt (Platine TTL IR Lesekopf Lese-schreib-Kopf 
Volkszähler Smartmeter Stromzeller PCB). Der Magnet passt genau in ein 
30er Installationsrohr.

von Peter R. (peter_r689)


Lesenswert?

Sven schrieb:
> Ja, das ist richtig, sollte bei mir ja auch nur eine Übergangslösung
> sein. 30 Std. finde ich überraschend wenig, aber erscheint logisch nach
> deinen Ausführungen.

Wenn du einen Elektriker kennst, der kann eine Steckdose im 
Zählerschrank einbauen. Dann hat die Batterielösung ausgedient ;-)

Ich habe hier noch andere ESPs für Temperaturen und sowas am laufen. Da 
sind Akkus verbaut mit Solarzelle. Die funktionieren von Februar bis 
November gut durch. Aber Dezember und Januar reicht die Sonne nicht aus 
und ich stecke ein Netzteil ran. Der ESP braucht beim Senden bis zu 
500mA. Das ist schon nicht gerade wenig, ist aber im Vergleich zu 
anderen Verbrauchern im Haushalt ist das noch wenig. Einen kWh Verbrauch 
des ESPs habe ich noch keine auswertbaren Daten. Das könnte ich aber mit 
den Testzählern in der Werkstatt mal ausprobieren. Da hängen ja ein paar 
rum ;-)
Einfach mal den Verbrauch damit testen... gute Idee ;-)

Gruß Peter

von Peter R. (peter_r689)


Lesenswert?

Hallo zusammen,

hier ist ein Link zum Stromverbrauch aus dem Netz des StromLog.

In meiner Werkstatt hängt ein LogaRex LK13BE80XXX, wo nur das Netzteil 
des StromLog dranne ist. Damit kann man den Verbrauch des StromLog 
einsehen.
Benutzer: StromLog
Passwort: StromLog
Anmelden kann man sich hier:
https://infozaehler.de/meinzaehler.php

Nach der Anmeldung bleibt man, wenn die Cookies nicht gelöscht werden, 
einen Monat eingeloggt.

Gruß Peter

von Sven (Gast)


Lesenswert?

Hallo Peter,
ist es richtig, dass nach einem Reset (oder power fail) Nutzer-Id- und 
Daten-Server- Einstellungen verloren gehen?

von Peter R. (peter_r689)


Lesenswert?

Sven schrieb:
> Hallo Peter,
> ist es richtig, dass nach einem Reset (oder power fail) Nutzer-Id- und
> Daten-Server- Einstellungen verloren gehen?

Nein, die Daten werden im internen Dateisystem gespeichert und werden 
nach dem Reset oder Spannungsausfall wieder eingelesen. Dafür ist die 
class configDTZ implementiert. Wenn das nicht funktioniert, dann ist das 
Filesystem nicht richtig installiert!
Wie das gemacht wird steht hier:
https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html

Gruß Peter

von Stefan M. (peff)


Lesenswert?

Hi,

ich habe gelesen Du hast den MT691 bei Dir implementiert.
Habe Dein Sketch getestet, bekomme aber nur den Gesamtverbrauch.
Kann der Zähler nicht mehr?
habe schon das I-Net kreuz und Quer gelesen bin aber nicht schlüssig 
geworden.

Gruß
Stefan

von Peter R. (peter_r689)


Lesenswert?

Stefan M. schrieb:
> Hi,
>
> ich habe gelesen Du hast den MT691 bei Dir implementiert.
> Habe Dein Sketch getestet, bekomme aber nur den Gesamtverbrauch.
> Kann der Zähler nicht mehr?
> habe schon das I-Net kreuz und Quer gelesen bin aber nicht schlüssig
> geworden.
>
> Gruß
> Stefan

Hallo Stefan,
Es kann sein, dass der Zähler nicht auf INFO on per Pin freigeschaltet 
wurde. Dann sendet der nur den Zählerstand ohne kommastellen. Auch die 
Leistung wird nicht ausgegeben. Also Pin vom netzBetreiber besorgen und 
mit Taschenlampe INFO on einstellen. Dann kommt auch die momentane 
Leistung raus.

Gruß Peter

von Stefan M. (peff)


Lesenswert?

Hi,

Verdammt!
Ich dachte wenn da Info steht ist Info aktiv.
Fehlanzeige!
Erst als ich das Ding beblinkt hatte und mit der Pin befröhlicht hatte.
Kamen dann die Daten :-)
Man Man Man. Daaanke!
Ganzen Tag mit zerspielt^^

Wäre es möglich nur den Teil Deines Skripts zu bekommen, der den MT691 
ausliest. Ohne das ganze Drumrum.
Du kennst Dein Skript ja sicher in und auswendig, dann muss ich das 
nicht erst auseinanderpflücken.
Und könnte den Part in mein Standarddatensammelskript übernehmen.

Danke & Gruß

Stefan

von Peter R. (peter_r689)


Lesenswert?

Hi,
Schön, dass du die Ursache identifizieren konntest ;-)
Also, der StromLog beinhaltet zwei Protokolle. SML und S0, beim ersten 
Start wird nach der Zählerkennung gesucht... Oder besser gesagt, nach 
den Protokolltypen und bei der aktuellen Version, noch die 
Schnittstellengeschwindigkeit. Der MT961 sendet mit SML 8n1 9600 und das 
S0 wird ignoriert. Also, aus der Rechenbelastung ist das nicht mehr 
wichtig, dass zu trennen. Und gerade das SML Protokoll ist 
rechenintensiver als S0. Und sorry... Das jetzt zu trennen, ändert 
nichts, zumal beide Protokolldekodierungen teilweise gleiche Funktionen 
nutzen.
Also, überall, wo S0 steht, kann nach Prüfung gelöscht werden... Und 
natürlich deren Aufruf. Bei den Unteraufrufen ist mit Vorsicht zu 
agieren. Sorry... Ich werde die beiden Versionen / Protokolle nicht 
trennen, weil ich mit einem einzigen Script soviele Zähler, wie möglich 
unterstützen will. Es ist einfacher, nur ein Script aktuell zu halten, 
als viele unterschiedliche Versionen.

Gruß Peter

von Stefan M. (peff)


Lesenswert?

Hi Peter,
kein Problem, ich schaue mir das mal an und pflücke ein wenig dran rum.
Danke für Deine Hilfe soweit und die genialen Vorgaben an denen ich mich 
bedienen kann :-)

Gruß
Stefan

von Peter R. (peter_r689)


Lesenswert?

Hallo Stefan,
das bekommst du schon hin ;-) und ich meine natürlich auch den MT691.

Übrigens, das mit meiner Bezeichnung "S0" (Protokoll) stimmt nicht ganz 
mit der Normung überein. Ich habe das nur so genannt. In Wirklichkeit 
gibt es zwei Protokolle:
- das SML "Smart Meter Language" wird hexadezimal übertragen
- und das nach IEC 62056-21 (was ich einfacher halber S0 bezeichne) 
Dieses übertragt die Daten im menschlesbaren Format, so wie ich das vom 
LogaRex schon gepostet habe.

Hier das Protokoll des ISKRA MT691 (SML, 8N1, 9600):


1B1B1B1B01010101
76
   05 000343C5
   62 00
   62 00
   72
      63 0101
      76
   01
   01
   05 00011697
   0B 0A0149534B00045EC391
   72
      62 01
      65 000114EB
   62 01
   63 5F1C
   00
   76
      05 000343C6
      62 00
      62 00
      72
   63 0701
   77
      01
      0B 0A0149534B00045EC39107
      01
   00
   620AFFFF
      72
   62 01
   65 000114EB
      75
         7707 01 00 60 32 01 01 01 01 01 01 04 49534B 01
         7707 01 00 60 01 00 FF 01 01 01 01 0B 0A0149534B00045EC391 01
         7707 01 00 01 08 00 FF 65 00082D04 01 62 1E 52 FF 62 00 01
         7707 01 00 02 08 00 FF 01 01 62 1E 52 FF 63 01A1 01
         7707 01 00 10 07 00 FF 01 01 62 1B 52 00 52 FF 01 01 01 63 1543
   00
76
   05 000343C7
   62 00
   62 00
   72
      63 0201
      71
   01
   63 9A39
00
000000
1B1B1B1B1A
03
6B9F


Gruß Peter

von Stefan M. (peff)


Lesenswert?

Hi Peter,

wenn Du mir jetzt noch verraten könntest in welchen Bytes die KWh und 
die aktuellen Watt liegen.
Ich hatte erst die Vermutung, das es sich hier um die Bytes ohne Space 
handeln könnte, kam aber nicht auf schlüssige Ergebnisse.

7707 01 00 60 32 01 01 01 01 01 01 04 49534B 01
7707 01 00 60 01 00 FF 01 01 01 01 0B 0A0149534B00045EC391 01
7707 01 00 01 08 00 FF 65 00082D04 01 62 1E 52 FF 62 00 01
7707 01 00 02 08 00 FF 01 01 62 1E 52 FF 63 01A1 01
7707 01 00 10 07 00 FF 01 01 62 1B 52 00 52 FF 01 01 01 63 1543

Danke
Stefan

von Peter R. (peter_r689)


Lesenswert?

Stefan M. schrieb:
> 7707 01 00 01 08 00 FF 65 00082D04 01 62 1E 52 FF 62 00 01

Also das ist so zu lesen:
77 -> Liste mit 7 Einträgen
07 -> Wert mit 6 Einträgen, hier die OBIS Kennzeichnung
  01 00 01 08 00 FF -> Kennzeichnung für Bezug
65 -> Status: Wert unsigniert (uint) mit 4 Stellen
  00 06 2D 04 -> Wert (keine Ahnung was der aussagt= meist ist der 0)
01 -> Werte-Zeit: hier 0
62 1E -> uint mit einem Wert -> Das ist die Einheit
52 FF -> int mit -1 -> das ist der Scaler für den Zahlenwert -> also mal 
10^-1
62 00 -> uint mit Wert 0 -> das ist die Zahl für den hier OBIS 
Kennzeichnung
(Das ist der eigentliche Wert = Zahl mal Scaler mal Einheit)
01 -> Wertsignatur -> hier 0

OBIS-Kennzeichnungen gibt es sehr viele, aber für Stromzähler im 
Haushalt sind die überschaulich:
1.8.0 Bezug tariflos
1.8.1 Bezug Tarif 1
1.8.X Bezug Tarif X (X ist eine Zahl von 1-9)
2.8.0 Einspeisung Tariflos
2.8.X Einspeisung Tarif X ( X = 1-9)
10.7.0 momentane Leistung

Alle weiteren OBIS kannste in der strings.h im Programm-Code nachschauen 
oder googeln ;-)

Gruß Peter

: Bearbeitet durch User
von Stefan M. (peff)


Lesenswert?

Hi,

ich verstehe es nicht, Verdammt!

Dein Beispiel
7707 01 00 01 08 00 FF 65 00082D04 01 62 1E 52 FF 62 00 01

hier meine Daten, irgendwie länger?!?
7707 01 00 01 08 00 ff 65 001c0104 01 62 1e 52 ff 65 05 60 c4 b8 01
Der Zähler steht hier bei 9022


Die aktuelle Leistung --> 77070100100700ff
habe ich auch schon sind die beiden markierten Bytes
77 07 01 00 10 07 00 ff 01 01 62 1b 52 00 53|00 c3|01 01 01 63 77 6e


Ich blicke es nicht. Vielleicht das Thema mit Wald und Bäumen und so.

Danke soweit
Stefan

von Peter R. (peter_r689)


Lesenswert?

Stefan M. schrieb:
> hier meine Daten, irgendwie länger?!?
> 7707 01 00 01 08 00 ff 65 001c0104 01 62 1e 52 ff 65 05 60 c4 b8 01
> Der Zähler steht hier bei 9022
>
> Die aktuelle Leistung --> 77070100100700ff
> habe ich auch schon sind die beiden markierten Bytes
> 77 07 01 00 10 07 00 ff 01 01 62 1b 52 00 53|00 c3|01 01 01 63 77 6e

Das ist auch nicht ganz easy ;-)
Das Protokoll hat einige Kodierungen. Das ist auch der Grund, warum 
deiner länger ist.
Das Byte, was vor dem Zahlenwert kommt sind die ersten 4 bit der Typ des 
Wertes und die nächsten 4 bit die Länge des Wertes.
7(X) => 7 ist ein Listenelement und X ist immer die Länge
0(X) => 0 ist nicht definiert (offen für alle Werte) und wird für 
Hersteller- Zählernummer verwendet
5(X) => 5 ist Zahlenwert signiert, also Plus- oder Minuswert
6(X) => 6 ist Zahlenwert unsigniert, also nur Pluswerte

Beispiel, dein Zählerstand:
62 1e = 6(2) 6 unsigniert,(2) Länge, inkl. Kennzeichnungsbyte (62 1e 
sind zwei Werte) und 1e -> Code für W/h
52 FF = 5(2) 5 signiert mit FF -> also -1, das ist der Skaler 10^-1, als 
mal 0,1
65 05 60 c4 b8 = 6(5wer Länge) -> (hex)05 60 c4 b8 ->(dez)90227896

Und jetzt zusammen: 90227896 mal 0,1 = 9022789,6 W/h -> durch 1000 für 
kW/h = 9022,7896 kWh

Und die Leistung ist: Einheit 1b = W, Scaler = 0, Wert (hex)00 
c3-(dez)195
macht zusammen 195 mal 1 mal Einheit W = 195 W

Achso, noch was. Mein Testzähler ist nagelneu und hat deshalb 0 W/h noch 
;-)
Gruß Peter

: Bearbeitet durch User
von Stefan M. (peff)


Lesenswert?

Danke Peter,

hätte aber auch selbst drauf kommen können.
Nun habe ich eine Kombi aus Deiner und der hier
-->https://github.com/akabza/ESP8266_SML
was eigenes gebaut.

Daaaanke noch einmal
Stefan

von Peter R. (peter_r689)


Lesenswert?

Hallo zusammen,
jetzt habe ich ein Protokoll des Zählers Holley DTZ541 mit BJ 2018 
bekommen. Dieser konnte mit der normalen Software nicht ausgelesen 
werden, weil der Hersteller in seiner Firmware ein Bug in der CRC16 
Berechnung drin hat.
Nach einer Analyse habe ich die Software entsprechend angepasst.
In der CRC16 Berechnung ist zu ändern:
- CRC StartValue ist 0x0000 (SML Standard ist 0xffff)
- OutputValue XOR ist 0x0000 (SML Standard ist 0xffff)
- Im Holley 2018 Protokoll sind die CRC16 Bytes vertauscht. Also erst 
kommt das MSB und dann das LSB (Standard ist LSB, MSB)

Mit folgenden Ergänzungen kann nun auch der Holley Bj 2018, das 
Protokoll ausgelesen werden. In der Funktion "void decodeDataSML()" 
einfügen/bzw austauschen:
#define HLY2018
.......
#ifdef HLY2018
      crc_ccitt = refUint(crc,16)^0x0000;  // reflected CRC-output and 
finish it with xor by 0x0000 HLY 2018
#else
      crc_ccitt = refUint(crc,16)^0xffff;  // reflected CRC-output and 
finish it with xor by 0xffff
#endif
.......
#ifdef HLY2018
    uint16_t check_crc = dataDTZ[pointerEOT+1];  // load the first value 
of crc HLY2018
    check_crc <<= 8; // do it to a MSB
    check_crc |= dataDTZ[pointerEOT+2];      // add the lower part 
HLY2018
#else
    uint16_t check_crc = dataDTZ[pointerEOT+2];  // load the first value 
of crc correct SML
    check_crc <<= 8; // do it to a MSB
    check_crc |= dataDTZ[pointerEOT+1];      // add the lower part
#endif
.......
#ifdef HLY2018
    crc = 0x0000;               // set crc to begin by 0x0000 HLY2018
#else
    crc = 0xFFFF;               // set crc to begin by 0xffff
#endif

Gruß Peter

von Klaus B. (klaus_b540)


Lesenswert?

Hallo Peter,

ich versuche schon seit längerem, mehr oder weniger erfolglos, meinen 
PV-Zähler ISKRA MT681 auszulesen. Die zum Teil älteren Code-Beispiele, 
die ich in der Vergangenheit gefunden habe, konnten selten überzeugen. 
Mit deinem DTZ-Logger hast du nicht nur ein "frisches" Programm 
geliefert, sondern es auch komfortabel ausgestattet - Wifi-Manager zum 
einloggen, LittleFS zum abspeichern, Datenbankanbindung.
Alle Achtung !!! Daumen hoch !!!
Ich habe deine zuletzt veröffentliche Version 3.91 vom 9.5.2022 runter 
geladen und versucht zu verstehen und anzupasssen. Zum Auslesen benutze 
ich einen "Hichi IR ttl". Zu meiner Schande hat sich bis jetzt nicht der 
gewünschte Erfolg eingestellt.
Das Fabrikat ISKRA wird zwar erkannt, aber dann bekomme ich keine 
weiteren Daten.
Meine Fragen an dich wären:
Müsste der MT681 von deinem Programm erkannt werden und wärst du event. 
bereit eine aktualisiertere Version deines Programms zu veröffentlichen.

Mit freundlichen Grüßen
Klaus

von Peter R. (peter_r689)


Lesenswert?

Hallo Klaus,
Danke für die Blumen ;-)
Also der MT681 müsste eigentlich funktionieren, weil dieser das SML nach 
FNN Lastenheft unterstützt. Es kann sein, dass der MT681 mit 64 bit die 
Daten liefert. Das wird mit der Version 3.91 noch nicht vollständig 
unterstützt. Die neuere Version habe ich noch nicht veröffentlich. Die 
hat jetzt auch OTA (Firmware-update) drin.
Wenn du eine LED am Anschluss IO14 dran hast, dann blinkt diese immer 
kurz auf, wenn ein Protokoll sauber empfangen wird. Du kannst diese auch 
auf einen anderen Ausgang umlegen mit: #define LED 14 (14 ist der 
Ausgang) Beim Einwählen ins WLAN blinkt diese auch 30 sek mit ca.0,5 Hz.
Was für ein ESP kommt zur Anwendung? Wenn der ein USB-Anschluss hat, 
muss die serielle Schnittstelle auf die zweite umgestellt werden, und 
dann an diesen Eingang den Lesekopf ran hängen ( Serial.swap();  // set 
serial pins on 13(RX) and 15(TX) if it nessecary, for WEMOS or other 
modules).
Ich habe mit einem "Hichi IR wifi" getestet und funktioniert. Der läuft 
nur mit dem neuen Release 4.0x nicht mehr, wegen zu wenig Speicher. Aber 
der darin verbaute Lesekopf ist der Gleiche, wie deiner.
Wenn der bei dir blinkt, einfach mal in der Adresszeile eingeben:
DEINEIP/sendProtocols
Als Serveradresse muss drin stehen:
infozaehler.de/json2server.php
Dann kann ich mir das Roh-Protokoll anschauen und dir auch zusenden. 
Auch testen kann ich das Protokoll dann.

Gruß Peter

von Klaus B. (klaus_b540)


Lesenswert?

Hallo Peter,
vielen Dank für deine schnelle Antwort.
-
ich habe einige ESP12/32 zu verfügung und hätte bei zwei 
Hardwareschnittstellen lieber einen ESP32 eingesetzt. Um aber dein 
Programm ohne Softwareänderungen einsetzen zu können habe ich mich für 
das Feather-HUZZAH-Board von Adafruit entschieden. Der Grund sind nicht 
nur die kompakten Boardabmessungen, sondern auch der verbaute 
LIPO-Laderegler und der dazugehörige Batterieanschluß. Immer wenn ich 
eine Schaltung habe die zum einen auch bei Spannungsausfall weiterlaufen 
soll, oder an die externe Module angeschlossen werden sollen, die vom 
Stromverbrauch her gepuffert werden müssen, entscheide ich mich für 
Feather-Huzzah oder den Wemos-LOLIN32.
Der IR-Empfänger ist sicherlich nicht der große Stromfresser. Anders 
siehts z.B. bei einem SIM800-GSM-Modul aus mit Spitzenströmen bis zu 2A.
(Sicher ist sicher)
-
Für die zweite Schnittstelle habe ich folgende Zeile eingefügt:
#include <SoftwareSerial.h>
#define RXD2 13 // (GPIO13)/MOSI) //
#define TXD2 12 // (GPIO12)/MISO  //
(Hat bisher immer funktioniert)
-
Die LED 14 blinkt, wie von dir beschrieben, regelmässig kurz auf.
Rufe ich den StromLog-Status auf, steht unter Protocol errors meistens 
so etwas wie 100%.
Der Aufruf von 'http://192.168.178.36/sendProtocols'; bringt folgende 
Meldung: '10 RAW Protocols will be send to server now.'

Ich zweifel allerdings daran, dass irgendetwas sinnvolles übertragen 
wurde.
-
Bevor ich jetzt laut um Hilfe rufe schaue ich erstmal nach, was ich denn 
wohl sonst so noch verbockt haben könnte.

Ich melde mich
(Versprochen !)

von Peter R. (peter_r689)


Lesenswert?

Klaus B. schrieb:
> Die LED 14 blinkt, wie von dir beschrieben, regelmässig kurz auf.
> Rufe ich den StromLog-Status auf, steht unter Protocol errors meistens
> so etwas wie 100%.

Hallo Klaus,
dieses Verhalten zeigt, dass die Prüfsumme des Zähler-Protokolls nicht 
mit der errechneten übereinstimmt. Und wenn die Prüfsumme nicht stimmt, 
werden die darin enthaltenen Werte nicht genutzt / verworfen.
Kurzer Trick um die Werte zu sehen:
// if(check_crc == crc_ccitt){     // compare crc-strings
      readValuesOBIS();
//}

Nehme diese if-Anweisung raus, so dass readValuesOBIS(); immer 
aufgerufen wird. Dann sind wahrscheinlich Werte da. Wenn die sogar 
stimmen, dann liegt das Problem in der CRC-Berechnung.

Gruß Peter

von Peter R. (peter_r689)


Lesenswert?

Peter R. schrieb:
> Kurzer Trick um die Werte zu sehen:
> // if(check_crc == crc_ccitt){     // compare crc-strings
>       readValuesOBIS();
> //}

Sorry, richtig ist es so:
//**************** debug end ****************************************
//  if(check_crc == crc_ccitt){ // compare crc-strings <- 
auskommentieren
      readValuesOBIS();
//************** protokoll debug only ****************/
      if(sendProtocols > 0){
        send2dbasePOST(sendProtokollDebug(),false);  //debug
        sendProtocols --;
      }
//************** protokoll debug end *****************/
//    }    // <- auskommentieren
    else {
      errorCounter ++;
//      meterManufractur = 0;
    }

Dann funktioniert auch das senden des Roh-Protokolls ohne CRC-Prüfung.

Gruß Peter

: Bearbeitet durch User
von Flachtroll (Gast)


Lesenswert?

Allenfalls wuerde es Sinn machen den Stromverbrauch selbst zu messen wie 
mit aufwndigen Tricks die bestehenden Zaehler auszulesen.
Ich kenne jemanden bei einer grossen Liegenschaftsverwaltung, die lesen 
die Stromzaehler mit einer SPS aus...

Ein Verbrauchsmesschip kostet ein paar Taler und ist selbst Low Power.

von Klaus B. (klaus_b540)


Lesenswert?

Hallo 'Flachtroll',

sicherlich könnte man den Stromverbrauch in der Zuleitung selber messen.
Wenn ich allerdings möchte, dass sich meine Messwerte mit denen meines 
Energieversorgers zum Jahresende decken, dann ist die beste Lösung wenn 
wir beide auf die gleiche Messeinrichtung (nämlich den installierten 
Zähler) zurückgreifen.
Und um an diese Messwerte zu kommen muss ich sie zwangsläufig auslesen.
-
Ziel dieses Forums ist es ja nicht einen Ersatz für die vielen 
existierenden, kommerziellen Lösungen zu finden, sondern 'verstehen zu 
wollen'.
'Verstehen wollen' ist aber oftmals ein mühsehliger Prozess, dem sich 
viele nicht aussetzen wollen und stattdessen auf eine Fertiglösung 
zurück greifen.
Eine Liegenschaftsverwaltung hat da eben ganz eindeutig andere 
Prioritäten.
-
Ich möchte einfach nur meinen erzeugten PV-Strom mit meinen Kauf- und 
Verkaufs-Strom in relation setzen.
Dazu muss ich, zumindest für einen längeren Zeitraum, messen, 
protokollieren und wenn möglich visualisieren, immer in der Hoffnung 
dass sich positive Effekte für mein Verbrauchsverhalten ergeben.
-
Da ich ja für alle neuen Denkansätze offen bin, hast du mich mit dem 
Hinweis auf einen 'Low-Power-Verbrauchsmesschip' neugierig gemacht.
Vielleicht hast du ja einen entsprechenden Link zur hand.

Gruß
Klaus

von Flachtroll (Gast)


Lesenswert?

Ja, der Link waere : ADE7758  Das ist ein ganze Familie.

Sin die modernen installierten Zaehler denn dafuer gemacht, sie selbst 
auszulesen ? Also mit eigener Schnittstelle fuer den Benutzer ? Fuer 
dessen Haussystem

Mein Kollege von der Immobilienverwaltung hatte diese drehenden Zaehler, 
die hatten einen Reflektor pro Umgang. den hat er mit einer SPS 
gezaehlt. Die Lichtschranke alleine zug 20mA, plus natuerlich die SPS. 
Keine Siemens Logo, sondern eine dickere.

von Klaus B. (klaus_b540)


Angehängte Dateien:

Lesenswert?

Peter R. schrieb:
>
> Dann funktioniert auch das senden des Roh-Protokolls ohne CRC-Prüfung.
>
Hallo Peter,
- RICHTIG VERMUTET -

Nachdem ich die von dir vorgeschlagenen Änderungen und die für den HLY 
2018 eingefügt hatte, wurden alle Werte auf der HTML-Seite korrekt 
angezeigt. Allerdings immer noch mit 100% Protocol Errors (wohl wg. 
fehlender Prüfsumme).
-
Ein anderes Problem wurde bereits unter 
Beitrag "Re: Digitale Stromzähler auslesen und in DB speichern" beschrieben. 
Solange der ESP läuft kann ich unter 'Einstellungen' meine vorher 
eingegebenen Daten abrufen. Nach einem Reset geht's wieder neu los.
Ich habe versucht unter meinem Arbeitsverzeichnis einen Unterordner 
\data anzulegen und von dort die 'config.ini' mit den entsprechenden 
Inhalten fertig hochzuladen. Bisher ohne Erfolg.
Was mache ich falsch ???

Soweit für heute
Gruß
Klaus

von Peter R. (peter_r689)


Lesenswert?

Klaus B. schrieb:
> Ich habe versucht unter meinem Arbeitsverzeichnis einen Unterordner
> \data anzulegen und von dort die 'config.ini' mit den entsprechenden
> Inhalten fertig hochzuladen. Bisher ohne Erfolg.

Hallo Klaus,
das kann vielleicht am Speicher des ESPs liegen. Die ich nutze haben 
2MB. Bei 1MB habe ich das getestet und es funktioniert das Dateisystem 
nur, wenn kein OTA installiert wird. Also es gibt keinen Fehler beim 
Kompilieren, aber danach werden keine Daten gespeichert. Es gibt auch 
welche mit 512kB, da kann ich mir vorstellen, dass da kein Filesystem 
mehr raufpasst. Getestet habe ich das aber nicht.

Gruß Peter

von Thomas (Gast)


Lesenswert?

Hallo Peter,

Ich lesen diesen Thread hier schon seit einigen Wochen mit und wollte 
mich bei Dir für die super Arbeit und Zeit bedanken, die Du in die 
Entwicklung dieser Software gesteckt hast!

Hier kurz meine Geschichte und damit vielleicht ein paar Anregungen, wie 
man die Software an seine eigenen Bedürfnisse anpassen kann...

Nachdem vor einigen Monaten unsere alten Ferraris-Stromzähler gegen 
DTZ541 ausgetauscht wurden, suchte ich nach einer Möglichkeit, die Daten 
auszulesen und in meiner HomeAssistant-Instanz aufzubereiten.

Ich wohne im Dachgeschoss (3.OG) eines Mehrfamilienhauses, WLAN reicht 
leider nicht bis in den Keller und LAN ziehen ist auch keine 
Alternative, also musste ich mir etwas anderes einfallen lassen.
Nach ein paar Recherchen, zu Möglichkeiten der kabellosen 
Datenübertragung, bin ich bei LoRa gelandet.
Also flux 2 HelTec WiFi LoRa 32 (V2.1)-Boards bestellt und losgebastelt.
Vorteile dieser Boards sind:
 - ESP32
 - LoRa + WLan + BT
 - OLED
 - Batterie-Anschluss (inkl. integrierter Ladeelektronik)

Ein Board wird als "Lesegerät/Decoder/LoRa-Client" eingesetzt. Aus 
Peter's Code hab ich mir dazu die relevanten Teile rausgefischt, die ich 
zum Auslesen und Auswerten meiner Zählerdaten benötige. Als Lesekopf 
kommt ein TRCT5000 IR-Sensor zum Einsatz. Da ich keine Möglichkeit habe, 
das Board über ein Netzteil zu betreiben, setze ich dort einen 
3000mAh-LiPo als Stromquelle ein.
Das Board startet alle 3 Minuten aus dem Deepsleep, aktiviert über GPIO 
den TRCT5000 und prüft den aktuellen Akkustand. Anschliessend werden die 
empfangenen SML-Daten ausgewertet und aufbereitet, d.h. die Daten werden 
inklusive das aktuellen AkkuStandes zu einem String zusammengepackt, 
encoded und via LoRa in den Äther geschubst. Danach wird der ESP wieder 
in den DeepSleep geschickt. Das Display zeigt nur beim ersten Start alle 
relevanten Daten an (LoRa-Verbindungsstatus, ausgelesen Werte des 
Stromzählers + AkkuStand). Bei den nachfolgenden WakeUps aus dem 
Deepsleep bleibt das Display inaktiv.
Zu Beginn dieses Projektes nutzte ich das zweite Heltec-Board in meiner 
Wohnung als "Gateway". Es empfing die LoRa-Daten des Senders und 
schickte sie via WLan an meinen MQTT-Server, von wo aus meine 
HomeAssistant-Instanz die Daten ziehen und aufbereiten konnte.
Mittlerweile setze ich einen WisGate Edge Lite 2 LoRaWan-Indoor-Gateway 
ein, der die Daten empfängt und an meinen MQTT-Server weiterleitet. 
Natürlich kann man dort auch andere Gateways und Systeme nutzen (zB TTN, 
AWS IoT o.ä.), allerdings wollte ich zwingend meine Daten ohne externe 
Dienste oder "Clouds" zur Verfügung haben.

Unterm Strich bin ich sehr zufrieden mit der Umsetzung. Die Daten kommen 
stabil an, trotz der 3 Betondecken und mehreren Wänden zwischen Sender 
und Gateway (mehr als 98% der Datenpakete kommen mit mehr als -100 dbm 
(RSSI) an). LoRa ist extrem energiesparend und kann im Freifeld unter 
guten Bedingungen auch mal schnell ein paar Kilometer überbrücken. 
Indoor schaut das natürlich ein bisschen anders aus, ist aber immer noch 
um Welten besser als WLan.
Der 3000mAh Akku im Sender hält ca. 1 Monat durch, und da ich den 
AkkuStand im HomeAssistant auswerte, kann ich, wenn nötig, bei meinem 
nächsten Gang in den Keller einfach eine Powerbank mitnehmen, die den 
Akku wieder lädt.

Soweit zu meiner Umsetzung und nochmals vielen Dank an Peter ;)

Grüße
Thomas

von Matthias S. (mat-sche)


Lesenswert?

Hallo Thomas,

würdest Du uns Deinen Code vorstellen bzw. zur Verfügung stellen?
Grüße MAT

von Collider (Gast)


Lesenswert?

Hallo Peter,

dein Projekt fand ich für das Auslesen von Zählern so gut gelöst das ich 
mir eine Version gekauft habe.

Installation war einfach und das Gerät funktioniert.

Da ich im Mietshaus wohne, bleibt nur eine Batterielösung. Diverse 
Hinweise gab es hier, wie man den Stromverbrauch reduzieren kann.

Basteln liegt mir sowie das Programmieren.

Arduino IDE installiert.
Code aus dem Forum hier kompiliert.
Testupload mit dem USB flasher und ESP auf dieses Modul

https://www.amazon.de/gp/product/B09DYGB6FY/ref=ppx_yo_dt_b_asin_image_o00_s01?ie=UTF8&psc=1

Funktioniert, ESP meldet sich mit dem Wifi-Setup.

Nun zu deiner Hardware :-)

Dein Schaltplan zeigt die Pins RXD TXD GND RST zu finden auch auf dem 
Board.
Direkt verbunden und stromversorgt über USB Powerbank  lässt er sich 
nicht ansprechen. Grüne LED dimmt etwas im Takt und die Rote blinkt 
schwach.

Stört der MAX485 der auf RXD und TXD mit drauf ist oder wo liegt der 
Haken?

PS:
Werde ich den Code, der zu einer Stromreduzierung führt, hier posten.
USB Tool zur Strommessung und Aufzeichnung ist schon bestellt.

Beste Grüße Christian

von Christian B. (christian_b549)


Lesenswert?

Die Frage wurde per Email beantwortet.

Die Lösung ist:

Es müssen alle 5 Pins vom Board mit dem Flasher verbunden werden.

Flasher(10Kontakte)  Peter's Board(5Kontakte)

RXD-RXD
TXD-TXD
IO0-IO0
RST-RST
GND-GND

Nun geht es an die Optimierung.

Update Folgt

von Matthias S. (mat-sche)


Lesenswert?

Christian B. schrieb:

> Update Folgt

nun bin ich mal gespannt! Mein erster Versuch zum Auslesen meines 
Zählers verlief nicht so positiv.....

MAT

von Christian B. (christian_b549)


Angehängte Dateien:

Lesenswert?

Also es funktioniert ja schon wie oben geschrieben(Collider)
Ich habe folgenden Zähler, siehe Bild. Ist schon ein neueres Model von 
Logarex da, mit Taste zur Pin Eingabe.

Info auf ON gestellt und ohne den Lesekopf(ohne Folie) extra zu 
positionieren drauf.

Die Anzeige INFO im Display sagt nicht das die Funktion INFO ON ist !!!
Erst wenn ihr die Wattzahl in Echtzeit seht, ist INFO ON.
Daten kommen.

von Matthias S. (mat-sche)


Lesenswert?

Ich habe einen Iskra MT174... von 2012 und bin nicht ganz sicher, was 
und ob ich etwas auslesen kann. Dieser Zähler hat noch nicht einmal ne 
PIN ....
Werde deswegen erst einmal das ganze verschieben...

von Peter R. (peter_r689)


Angehängte Dateien:

Lesenswert?

Matthias S. schrieb:
> Ich habe einen Iskra MT174... von 2012 und bin nicht ganz sicher, was
> und ob ich etwas auslesen kann.

Hallo Matthias,
den ISKRA kann man auch auslesen. Allerdings sendet der nicht von 
alleine und muss per IR-LED mit dem Befehl /?! (300baud 7E1) 
angesprochen werden. Danach gibt er seine Kennung aus, gefolgt von den 
Werten. Eine PIN hat der noch nicht drin und spukt alle Werte ohne PIN 
aus.
Im ersten Beitrag hier ist das Programm für den ISKRA MT174 bei. Am 
besten den Lesekopf TTL besorgen und per Widerstandsteiler an RX und TX 
anschließen. Das Programm fragt dann per Senden den Zähler ab und 
Empfängt die Daten.

Gruß Peter

: Bearbeitet durch User
von Christian B. (christian_b549)


Lesenswert?

Eine Pin gibt es nicht weil wohl die Richtlinien erst später auf 
"Datenschutz" umschwenkten.

Beim ISKR 174 werden die Einstellungen mit den beiden Tasten Orange und 
Blau gemacht. Wobei die Orange plombiert sein kann(Reset Fähigkeit)

Auszug aus der Anleitung:

Oben rechts in der Ecke des Zählers befindet sich
eine optische Schnittstelle, die der Norm IEC 62056-
21 entspricht. Sie ist zum lokalen Setzen der
Zählerparameter und zur Datenablesung bestimmt.
Bild 15: Optische Schnittstelle
Verwendet werden das Kommunikationsprotokoll
nach IEC 62056-21, Mode C, und die serielle
asynchrone Kommunikation. Möglich sind alle
Datenübertragungsgeschwindigkeiten von 300 Bit/s
bis 19.200 Bit/s, der standardmäßig eingestellte
Wert
beträgt
9.600
Übertragungsgeschwindigkeit
verwendeten optischen Sonde unter 9.600 Bit/s liegt,
ist die Übertragungsgeschwindigkeit der optischen
Schnittstelle auf die Geschwindigkeit der optischen Sonde zu setzen.
Die Wellenlänge des Schnittstelle beträgt 660 nm, die Lichtstärke im
aktiven Zustand ist minimal 1 mW/sr.

Vielleicht kann Peter was dazu sagen, ob sein Code das Lesen/Dekodieren 
kann. Hab mich mit dem Code noch nicht intensiv beschäftigt.
Grundsätzlich sollte alles, was digital am ESP ankommt, dekodiert werden 
können.

Eventuell ist die Baudrate der optischen Schnittstelle nicht passend.

edit:  sollte schneller schreiben :-)

: Bearbeitet durch User
von Christian B. (christian_b549)


Lesenswert?

Da ich dran arbeite:

Da die RTC noch im DEEP-SLEEP läuft kann der ESP intern aufgeweckt 
werden

//Deep-sleep for 5 seconds, and then wake up
system_deep_sleep_instant(5000*1000);

Da kann man ansetzen

von Stefan M. (peff)


Lesenswert?

Hi,

ich muss noch einmal mit meinem MT691 um die Ecke kommen.
Seitdem ich meine Guerilla PV aktive habe, kommt es teils zum 
merkwürdigen Verbräuchen jenseits der 60kW.
Also habe ich mir das Protokoll in den Momenten angeschaut.
In den Fällen steht plötzlich ein 'FF' hinter dem TL-Field?!?
Könnte mir ja vorstellen, dass wenn der Wert gegen Null geht, dass der 
den Scaler auf 'FF' setzt, der steht aber weiter auf '00'.


@Peter
Kannst Du da vielleicht Klarheit schaffen?

Hier mal ein Beispiel:
1b1b1b1b010101017605139766886200620072630101760101050687ccd80b0a0149534b 
00043e9318726201650687cf97620163287e00760513976689620062007263070177010b 
0a0149534b00043e9318070100620affff726201650687cf977477070100603201010101 
01010449534b0177070100600100ff010101010b0a0149534b00043e9318017707010001 
0800ff65001d190401621e52fe65059377430177070100100700ff0101621b520053ff7c 
01010163c4c10076051397668a62006200726302017101634d3700001b1b1b1b1a01b100

Konkret geht es dann ja hier darum:
77
070100100700ff
01
01
621b
5200 --> Stelle 3+4  Scaler '00'
53ff7c --> Stelle 1+2 TL signed Integer16 und dann das merkwürdige 'ff'
01

Danke im Voraus.
Gruß
Peff

: Bearbeitet durch User
von Stefan M. (peff)


Lesenswert?

Bin ein Stück weiter gekommen, bei meinem MT691 :-)
Sobald man einspeist dreht der Zähler quasi um.
Bedeutet:
wenn man 100W eingespeist werden gibt er 127-100 --> 27W per SML bei 
Type-Length-Value 52 aus.
wenn man 150W eingespeist werden gibt er 32.767 -150 --> 32.617W per SML 
bei Type-Length-Value 53 aus.

Auf dem Display wird die korrekte Einspeisung ausgegeben, allerdings 
ohne Vorzeichen, so dass man raten darf ob man einspeist oder nicht.

Nun ist die Frage wie man aus dem SML herausließt, ob man einspeist oder 
nicht.
Das einige was mir bisher aufgefallen ist, dass im Bereich des 
Gesamtverbrauchs sich bei Einspeisung etwas ändert.

ohne Einspeisung
77070100010800ff 6500 1c11 0401
77070100010800ff 6500 1c01 0401

mit Einspeisung
77070100010800ff 6500 1d19 0401

Beispiel Peter
77070100010800FF 6500 082D 0401

aus dem c wird ein d und aus der 1 eine 9
Aber ob ich mich darauf verlassen kann ist ziemlich unklar, da nirgends 
dokumentiert.
Zudem in Peters Beispiel von der Zähler der auf '0' steht dort was 
völlig anders steht.

Was die Änderung der 1 zur 0 bei Einspeisung bedeutet ist mir auch 
unklar.

Alles in allem noch keine Lösung aber vielleicht ein Ansatz

Bin für alle Infos zu haben.

Gruß
Peff

Beitrag #7194496 wurde vom Autor gelöscht.
von Christian B. (christian_b549)


Angehängte Dateien:

Lesenswert?

Stefan M. schrieb:
>
>
> Auf dem Display wird die korrekte Einspeisung ausgegeben, allerdings
> ohne Vorzeichen, so dass man raten darf ob man einspeist oder nicht.
>
>
> Bin für alle Infos zu haben.
>
> Gruß
> Peff



Gibt das +A und -A im Display nicht die Energierichtung an?

Gruß Christian

: Bearbeitet durch User
von Stefan M. (peff)


Lesenswert?

Ah!
Das kann sein.
Checke ich heute mal. Genau da baumelte das Kabel vom IR drüber^^

Bleibt die Frage offen, wie man es aus dem SML ausliest.
Um dann die korrekte Leistung umzurechnen.

von Christian B. (christian_b549)


Lesenswert?

Stefan M. schrieb:
>
> Bleibt die Frage offen, wie man es aus dem SML ausliest.
> Um dann die korrekte Leistung umzurechnen.

Hab mich selber mit dem SML Protokoll noch nicht befasst, aber hier ist 
eine gute Info Seite.

https://www.msxfaq.de/sonst/bastelbude/smartmeter_d0_sml_protokoll.htm

Gruß Christian

von Peter R. (peter_r689)


Lesenswert?

Hallo zusammen,
der eigentliche Wert setzt sich immer durch das Type-Length-Field (Byte) 
zusammen. Das erste Byte bezeichnet den Typ des Zahlenwertes, 
Liste(7),Boolean(4),Signiert(5) und Unsigniert(6) gefolgt von der Länge 
des Wertes.
52 -> signiert mit einem Byte (die 2 zählt auch das Type-Length-Field 
mit)
65 -> unsigniert mit 4 Bytes (32 bit)

Es gibt unterschiedliche Anwendungen bei den Zählerherstellern.
- es wird ein definiertes Type-Length-Field verwendet, was sich nie 
ändert, also fest programmiert ist.
- das Typ-length-Field ändert sich in Abhängigkeit vom Zahlenwert. Also, 
um so größer der Wert wird, umso höher wird auch die Länge (2->3->5->9). 
Die Länge passt sich dynamisch an.

Bei der momentanen Leistung liefern die Zähler ein signierten Wert. Ist 
dieser im positiven Bereich, dann wird Strom bezogen. Ist dieser Wert 
negativ, dann wird Strom eingespeist. So die Theorie ;-)
Es gibt aber Fehler in der Firmware bei einigen Zählern (DZG) die senden 
z.B. den signierten Wert mit der Bezeichnung unsigniert :-O
Und auch die Umsetzung bei der Leistung ist nicht immer gleich. Manche 
senden Bezug und Einspeisung mit unterschiedlichen Register, bzw. nur 
als positiven Wert ohne Vorzeichen, unabhängig von der 
Energieflussrichtung.

Nicht gut, aber ist so.

Gruß Peter

von Peter R. (peter_r689)


Lesenswert?

Stefan M. schrieb:
> Konkret geht es dann ja hier darum:
> 77
> 070100100700ff
> 01
> 01
> 621b
> 5200 --> Stelle 3+4  Scaler '00'
> 53ff7c --> Stelle 1+2 TL signed Integer16 und dann das merkwürdige 'ff'
> 01

Also 53 ff7c -> bedeuted signierter Wert mit 16 bit ffc7 und dezimal: 
-57
also der Zähler speist gerade (-)57 Watt in das Netz.

Gruß Peter

von Peter R. (peter_r689)


Angehängte Dateien:

Lesenswert?

Stefan M. schrieb:
> Hier mal ein Beispiel:
> 1b1b1b1b010101017605139766886200620072630101760101050687ccd80b0a0149534b
> 00043e9318726201650687cf97620163287e00760513976689620062007263070177010b
> 0a0149534b00043e9318070100620affff726201650687cf977477070100603201010101
> 01010449534b0177070100600100ff010101010b0a0149534b00043e9318017707010001
> 0800ff65001d190401621e52fe65059377430177070100100700ff0101621b520053ff7c
> 01010163c4c10076051397668a62006200726302017101634d3700001b1b1b1b1a01b100

Hier die angezeigten Werte zum Protokoll. Der Zähler speist gerade ein. 
Siehe Bild ;-)

Gruß Peter

von Stefan M. (peff)


Lesenswert?

Oh man, der Wald und die die Bäunme...

Stefan M. schrieb:
> 53ff7c --> Stelle 1+2 TL signed Integer16 und dann das merkwürdige 'ff'

Schreibe selber 'signed' hin und schnalle es nicht^^
Danke für's aufwecken!

von Peter R. (peter_r689)


Lesenswert?

Hallo zusammen,

hier ist das erste Utility für den StromLog. Leistung auslesen und 
schalten.

Beitrag "Schaltsteckdose für StromLog ESP"

Gruß Peter

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Matthias,

Sorry, hat nen bisschen länger gedauert, hab aktuell nen Haufen 
Arbeit...

Natürlich teile ich meinen Code gerne, bitte rollt aber nicht mit den 
Auge, C/C++ ist nicht meine liebste Sprache. Es gibt garantiert viele 
Stellen, die besser geschrieben sein könnten... ;)

Den Großteil des Codes habe ich aus Peter's DTZ_Logger_Open übernommen 
und auf meine Bedürfnisse angepasst.
Zusätzlich eingebaut sind die Funktionen für die Akku-Überwachung, das 
Senden der Daten an den Lora-Gateway und die Funktionen für die Ausgaben 
auf dem Display.

Noch ein paar Screenshots aus meiner HomeAssistant-Instanz und einem 
Grafana-Board mit dem Akkuverbrauch zwischen zwei "Ladezyklen".
Der 3000mAh-Akku hält aktuell ca. 35 Tage, bis er von der vollen 
Akkuladung auf ~3.6V abfällt, das finde ich vollkommen akzeptabel in 
anbetracht der Tatsache, dass alle 180 Sekunden eine Messung 
durchgeführt und übertragen wird.

Grüße
Thomas

von Peter R. (peter_r689)



Lesenswert?

Hallo zusammen,

ich habe die Software für den StromLog komplett überarbeitet und neu 
strukturiert. Nach dem immer länger werdenden Bandwurm des Codes war das 
notwendig.
In der global.h kann jetzt der Zählertyp selektiert werden. OTA ist mit 
implementiert und die Oberfläche ist auch neu überarbeitet.

Weiterhin ist es erforderlich das Dateisystem littleFS einzubinden, um 
die Einstellungen speichern zu können.
Die Datei "config.ini" muss in dem Unterordner "data" gespeichert 
werden.
Allerdings, wie vorher, alles ohne Datenverschlüsselung.

Gruß Peter

: Bearbeitet durch User
von Lars (Gast)


Lesenswert?

Hallo,

ich versuche seid einiger Zeit ebenfalls meinen digitalen Stromzähler 
über die IR-Schnittstelle auszulesen.

Komme aber leider bei der Empfangshardware nicht weiter. Könntest du 
vielleicht noch mal die Schaltung teilen mit der du die IR Signale 
empfängst?

Irgendwie scheinen (bei mir) sowohl Fototransistor/Phototransistor 
Fotodiode/Photodiode zu langsam zu sein für 96008N1.

Meine Bauteile sind:
Fotodiode, PD333-3C/H0/L2, für Tageslicht und Infrarot
Fototransistor PT333-3C; Tageslicht und Infrarot

Vielen Dank

von Peter (Gast)


Lesenswert?

Lars schrieb:
> ich versuche seid einiger Zeit ebenfalls meinen digitalen Stromzähler
> über die IR-Schnittstelle auszulesen.

Hallo,
um welchen Zählertyp handelt es sich? Es gibt Typen, die sind durch den 
Netzbetreiber per PIN verriegelt.
Typ, Hersteller und Baujahr.

Ansonsten müsste das eigentlich gehen, egal welche LED oder Transistor. 
So schnell ist 9600 8N1 nicht ;-)

Gruß Peter

von Rüdiger B. (rbruns)


Lesenswert?

Lars schrieb:
> Irgendwie scheinen (bei mir) sowohl Fototransistor/Phototransistor
> Fotodiode/Photodiode zu langsam zu sein für 96008N1.

Mit einem Smartfone sieht man ob Daten gesendet werden.

von Günter R. (guenter-dl7la) Benutzerseite


Lesenswert?

Rüdiger B. schrieb:
> Lars schrieb:
>> Irgendwie scheinen (bei mir) sowohl Fototransistor/Phototransistor
>> Fotodiode/Photodiode zu langsam zu sein für 96008N1.

Mit dem BPW40 geht es aber durchaus, ich benutze bei meinem ESY Q3MA 
einen (höher empfindlichen) SFH-309 FA4 am Front-IR-Sender.
>
> Mit einem Smartfone sieht man ob Daten gesendet werden.

Das Apfelfon meiner Frau hat ein IR-Filter, da sieht man nichts. Aber 
mit meinem alten S*msung S2 geht es. Kann man auch mit der 
IR-TV-Fernbedienung testen, man muss dann nicht in den Keller;-)

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Lars schrieb:
> Komme aber leider bei der Empfangshardware nicht weiter. Könntest du
> vielleicht noch mal die Schaltung teilen mit der du die IR Signale
> empfängst?

Anbei die Schaltung. Die kann senden und empfangen. Bei mME (Zähler ab 
2018) braucht man nur den Empfangsteil.

Gruß Peter

von Herbert N. (c64emulator)


Lesenswert?

Thomas schrieb:

> Natürlich teile ich meinen Code gerne, bitte rollt aber nicht mit den
> Auge, C/C++ ist nicht meine liebste Sprache. Es gibt garantiert viele
> Stellen, die besser geschrieben sein könnten... ;)
>
> Zusätzlich eingebaut sind die Funktionen für die Akku-Überwachung, das
> Senden der Daten an den Lora-Gateway und die Funktionen für die Ausgaben
> auf dem Display.
>

Hi Thomas,
ich beschäftige mich gerade mit LoRA und dem TTN-Netzwerk, weil mein 
Stromzähler so ungünstig platziert ist, dass er seine Daten nicht über 
WLAN weitergeben kann.
Eine Frage:  üblicherweise werden die Daten per Gateway in die TTN-Cloud 
geschoben und von dort dann wieder zurück geschickt. Du hast anscheinend 
den Network-Server vom TTN-Stack_V3 lokal auf dem Gateway und hast die 
Daten dadurch nur lokal (private).
Wird dann dafür auch ein Applikation-Server gebraucht und dafür ein 
Payload-Decoder? Wie schaut dieser Decoder für Dein Device aus?
Sind für das Device spezielle Angaben bei der Registrierung notwendig 
(Activation Mode, LoRaWAN Version, etc...).
Danke schon mal für Deine Rückmeldung.
Gruß, Herbert

von Lars (avrmen)


Lesenswert?

Hallo,

vielen Dank für die zahlreichen Antworten auf meine Frage.

Mein Zähler ist ein DTZ541. Und den PIN hatte ich bereits besorgt und 
eingegeben. Trotzdem vielen Dank für den Tipp. :-)

Nach der Eingabe konnte ich auch tatsächlich mit der Smartphone Kamera 
die IR-LED Daten senden sehen.

Ich werde es mal mit einem Nachbau der Schaltung probieren.

Vielen Dank!

Vielen Grüße

von Lars (avrmen)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe nun die Schaltung einmal nachgebaut. Leider hatte ich nicht 
genau die Widerstandswerte die in der Schaltung angegeben waren.

850ohm & 1,2k ohm sind bei mir jeweils ein 1K Widerstand.
der 4k7 wurde bei mit zu einen 4K4.

Raus gekommen ist dieses Bild.

Channel1 ist die Empfangsdiode
Channel2 ist die Sendediode

Nun hätte ich noch mal zwei Fragen:

- Wodurch kommt der Versatz zwischen der fallenden Flanke Channel2 und 
der steigenden Flanke Channel1?
- Das Signal der Sendediode ist ja "quasi" invertiert. Ist das richtig 
so wenn ich damit das serielle Signal 9600 8N1 empfangen möchte?

Vielen Dank & Viele Grüße

von Peter R. (peter_r689)


Angehängte Dateien:

Lesenswert?

Lars schrieb:
> 850ohm & 1,2k ohm sind bei mir jeweils ein 1K Widerstand.
> der 4k7 wurde bei mit zu einen 4K4.

Hallo,
die Widerstände sind nicht das Problem. Abweichungen verschieben nur den 
Arbeitspunkt der Transistoren. Da aber die in Sättigung gehen, ist das 
nicht tragisch.
Das Problem ist: Was ist das für ein Zähler? Sendet der die Daten von 
selbst? (Push-Betrieb) Oder muss der aufgefordert werden zu senden? 
(Pull)

Was aus dem Zähler rauskommt, sieht in etwa so aus, wie auf dem Bild. 
Das Diagramm im Beitrag hiervor sieht nach einer Reflexion der Sende-LED 
aus.

Gruß Peter

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

@Lars: Satte 11 MB für ein Bild mit 2 Wellenlinien. Respekt!
https://www.mikrocontroller.net/articles/Bildformate

von Jürgen (juergen47)


Lesenswert?

Hallo zusammen,

was mache ich falsch, beim compilieren kommt immer:
1
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
2
3
  376 |     int poi=SearchOBIS("/",0);
4
5
                               ^~~
und das an mehreren Stellen?

von Peter R. (peter_r689)


Lesenswert?

Jürgen schrieb:
> was mache ich falsch, beim compilieren kommt immer:

Das ist nur eine Warnung. Es funktioniert trotzdem. Es ist vielleicht 
nicht ganz sauber programmiert, war aber am einfachsten die Suchfunktion 
mehrmals mit unterschiedlichen Strings / Chars zu nutzen.
Die Funktion SearchOBIS erwartet einen Zeiger auf einen Char[x] mit 
mehreren Werten, also eigentlich ein String. Das meckert der Compiler 
an, aber es funktioniert trotzdem.
Die Angabe "/" ist ein Konstanter String, welcher selbst aber aus 
mehreren Chars besteht mit am Ende einer 0x00.

Gruß Peter

von Jürgen (juergen47)


Lesenswert?

Ah,
perfekt.
Vielen Dank für die schnelle Antwort

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.