SDM630 Modbus V2 Stromzähler via EspEasy auslesen

Begonnen von fhemfreund, 12 Dezember 2017, 21:44:16

Vorheriges Thema - Nächstes Thema

fhemfreund

#15
Zitat von: _Niemand_ am 09 April 2018, 16:20:44
Hallo Andreas,
das ist eine super Idee mit ESP einen SDM auszulesen.
Weißt Du zufällig (oder hast Du es sogar schon getestet) ob man auch den 1-phasigen SDM230 mit Deiner Software auslesen kann, oder muss man da gewisse Dinge anpassen?

Danke!
Viele Grüße 
    Heinz

Hallo Heinz,

Einen SDM230 habe ich nicht getestet. Mein Ansatz wäre, ggf. die SDM230 Register in der Firmware anzupassen und zu schauen, ob es geht. Da die Hardware Kosten sich doch sehr im Rahmen halten, kann man das ja einfach mal probieren. Wenn die Hardware steht, kann man mal ggf. nach den Registern schauen ... Allerdings kann ich nicht versprechen, dass es geht - wie gesagt ist es halt nicht getestet. Aber das war es in meinem Fall auch nicht ;-)

Die Register Infos zum SDM230 stehen übrigens in https://bg-etech.de/download/manual/SDM230-Modbus.pdf auf Seite 50 + 51. Habe mal diese mal auf die Schnelle mit den 630er Registern von https://bg-etech.de/download/manual/SDM630-Modbus-V2.pdf auf Seite 55 ff verglichen - würde mal vermuten, dass da nicht so grosse Unterschiede sind - sogar die Register Addressen sind gleich (natürlich unter Beachtung 3 Phasen vs. 1 Phasen Zähler).

Andreas

_Niemand_

Hallo Andreas,
Danke für die Infos. Sieht ja eigentlich gut aus, dass ich mit Deiner Konfiguration auch beim SDM230 erste Werte auslesen können sollte.

Habe mir mal die Teile bestellt und werde es demnächst testen. Bin schon sehr gespannt wie gut das läuft.
Vielleicht schon mal zwei Fragen:
1) Falls ich noch andere Register auslesen will, die bislang nicht zur Verfügung stehen, wie ändere ich das dann in der ESPEasy Konfiguration?
2) Läuft Dein ESP8266 stabil? Ich hatte in der Vergangenheit immer das Problem, dass das Modul nach gewisser Zeit sich aufhängte.
Danke+Viele Grüße
Heinz

_Niemand_

Hallo Andreas,
So.. die Teile sind angekommen und es läuft wunderbar! :)
Vielen Dank! Super Idee und super Arbeit!
Jetzt wäre nur noch interessant, wie das mit den zusätzlichen Registern einbauen funktioniert.
Wär nett, wenn Du vielleicht hier kurz beschreiben kannst wie das geht bzw. Deine Sourcefiles anhängst.

Danke!

Viele Grüße
Heinz

fhemfreund

#18
Hallo Heinz,

Zitat von: _Niemand_ am 13 April 2018, 19:49:34
So.. die Teile sind angekommen und es läuft wunderbar! :)
Vielen Dank! Super Idee und super Arbeit!

Danke - gerne. Das freut mich. Möchte aber noch sagen, dass andere auch wichtige Vorarbeit dazu im iNet geleistet haben - ist also nicht alles nur von mir ;-)

Zitat von: _Niemand_ am 13 April 2018, 19:49:34
Läuft Dein ESP8266 stabil? Ich hatte in der Vergangenheit immer das Problem, dass das Modul nach gewisser Zeit sich aufhängte

Häufiger Resets hatte ich mit meiner S0 Lösung (siehe Eingangspost) auch und somit falsche Werte. Das war daher der Auslöser für meine Arbeit. Da aber via Modbus immer konkrete Werte übertragen werden, machen Resets nichts aus - die Werte stimmen immer. Sobald der Esp rebootet verbindet er sich wieder mit dem SDM und liest die Werte weiter aus. Hänger kann man gut vermeiden, wenn man ein gutes Netzteil + Kondensatoren verwendet (habe ich oben auch beschrieben). Meine Lösung läuft nun seit ein paar Monaten ohne einen Hänger (aber mit gelegentlichen Resets, die aber wie gesagt kein Problem sind).

Zitat von: _Niemand_ am 13 April 2018, 19:49:34
Falls ich noch andere Register auslesen will, die bislang nicht zur Verfügung stehen, wie ändere ich das dann in der ESPEasy Konfiguration?

Habe das mal grob zusammengefasst. Wichtig ist: mit den verlinken Dateien funktioniert es - mittlerweile gibt es neuere Versionen, die ich aber nicht (!) getestet habe.


1) Download der Software
-> Atom IDE zum Compilen und Bauen der angepassten EspEasy Binary: https://www.letscontrolit.com/wiki/index.php/Tutorial_building_and_uploading_with_platformio
-> EspEasy Binaries: https://github.com/letscontrolit/ESPEasy/releases/download/v2.0.0-dev12/ESPEasy_v2.0.0-dev12.zip

2) Ziel ist es, mit den unten angepassten Files eine neue EspEasy Firmware zu bauen:
-> Anpassen des EspEasy Menüs im File: _P150_SDM630.ino
-> Anpassen der SDM Register im File: SDM_V2.h

Die Menüs geben vor, was später im WebInterface ausgewählt werden soll. Idealerweise die Parameter, die einem wichtig sind.
Die SDM Register sind selbsterklärend im SDM_V2.h File aufgeführt. Man muss nur noch die gewünschten Register hinzufügen.
Praktischerweise stehen die Hex-Werte der Register im SDM 230 Manual auf Seite 50 in der Spalte 'Modbus Protocol Start Address Hex'
schon 'mundgerecht' drin, sodass man diese nur abschreiben muss.

4) Kopieren der angepassten Files (+ ein benötigtes Headerfile) in die Espeasy Source File Struktur nach: /ESPEasy_v2.0.0-dev12/Source/src
-> _P150_SDM630.ino
-> SDM_V2.h
-> SoftwareSerial.h

Habe alle 3 Files an diesen Post angehängt.

5) Firmware in Atom IDE compilen und zum Esp hochladen

6) Fertig!


Wenn noch Fragen sind, einfach hier melden. Normalerweise schafft man das mit ein etwas Lesen + Probieren - ist auf jeden Fall keine Rocket-Science ;-)

Andreas

_Niemand_

Hallo Andreas,

danke für die Details. Werde ich, sobald mal Zeit ist, auf alle Fälle ausprobieren.

Viele Grüße
Heinz

_Niemand_

Hallo Andreas,

ich habe versucht das nach zu bauen.
Aber irgendwie ist da der Wurm drin.
Welche Build-Option (nach Drücken der F7-Taste im Atom) nimmst Du her?
Wenn ich "PIO build (dev_ESP8266_4096)"nehme sagt Atom:
...src/_P150_SDM630.ino: In function 'boolean Plugin_150(byte, EventStruct*, String&)':
Wenn ich "PIO build (normal_ESP8266_4096)" läuft der Build zwar durch, aber nach den Laden der Firmware in den ESP8226 gibt es  kein "Device" zur Auswahl welches "SDM630" heißt.
Ich habe alle drei Files von Dir in den "src" Ordner kopiert, oder müssen die h-files wo anders hin?
Danke+Viele Grüße
Heinz


fhemfreund

#21
Hallo Heinz,

Hast du zunächst mal versucht, mit meinen beiden Files zu compilen? (um sicher zu sein, dass deine Umgebung geht). Wenn du ein Projekt öffnest, müssen alle 3 Files im gleichen src Ordner inkl. des Headerfiles sein. Habe mal einen Screenshot zur Verdeutlichung angehängt und die wichtigen Infos schwarz umrandet.

Ich habe (via F7) den PIO Build (dev_4096) verwendet. Damit werden alle Plugins im Status 'Dev.' compiled (also auch unseres). Bei Build Optionen mit 'Normal' nicht - daher gibt es dann auch nicht unser SDM Device zur Auswahl.

Was mich noch wundert: eine 'PIO build (dev_ESP8266_4096)' Option habe ich nicht zur Auswahl - eine Auswahl meiner Optionen habe ich auch mal hier als Screenshot angehängt. Welche Software Versionen hast du verwendet? Bei mir sind es:

- AtomIDE:     1.22.1 x64
- Esp Sourcen: ESPEasy_v2.0.0-dev12.zip

Die Firmware (...\ESPEasy_v2.0.0-dev12\Source\.pioenvs\dev_4096\firmware.bin) habe ich mit dem esptool aus dem 'ESPEasy_v2.0.0-dev12.zip' File auf den Wemos geflasht.

Nehme mal an du hast auch das Tutorial unter https://www.letscontrolit.com/wiki/index.php/Tutorial_Install_Platformio beachtet?
Ein Sache die mir sehr geholfen hat: ich habe alles in eine VM (Oracle Virtual Box) gepackt - damit kann man jederzeit mit einem Klick 'ungewollte' Änderungen ohne grosse Probleme revidieren.

Andreas

_Niemand_

Hallo Andreas,
danke für Deine Hilfestellung. Leider klappt es bei mir immer noch nicht.
Die Anleitungen habe ich strikt befolgt, auch habe ich Deine Sourcen korrekt kopiert und als Ausgangspunkt "ESPEasy_v2.0.0-dev12.zip" genommen.
Der einzige Unterschied, den ich jetzt erkennen kann, ist die AtomIDE... meine ist die aktuelle (neuere) Version 1.25.1
Wenn ich da das dev-4096-Target builde gibt es die Fehlermeldungen... siehe Anhang.

Ich habe deshalb auch mal mit den neueren ESPMega-Sourcen versucht das Ganze zum Laufen zu bringen.. da ging zumindest der "normale"Build (aber eben auch nicht der "dev").
Mit den "ESPEasy_v2.0.0-dev12.zip"-Sourcen geht nicht mal der "normal" Build... scheint also was mit der Atom-IDE-Version zu tun zu haben.
Wenn ich mal Zeit habe, probiere ich es auch mal in einer "sauberen Virtual Box" Umgebung... (was nimmst Du dort eigentlich als "Gastsystem" Windows/Linux"?)

Viele Grüße
Heinz

fhemfreund

Zitat von: _Niemand_ am 16 April 2018, 21:15:16
...
Mit den "ESPEasy_v2.0.0-dev12.zip"-Sourcen geht nicht mal der "normal" Build... scheint also was mit der Atom-IDE-Version zu tun zu haben.
Wenn ich mal Zeit habe, probiere ich es auch mal in einer "sauberen Virtual Box" Umgebung... (was nimmst Du dort eigentlich als "Gastsystem" Windows/Linux"?)
...

Ja das denke ich auch. Würde das mal mit der gleichen Atom Version probieren (z.b. von hier https://github.com/atom/atom/releases/download/v1.22.1/AtomSetup-x64.exe). Und es macht tatsächlich Sinn das mal in einer sauberen VM zu versuchen. Habe bei mir Win 7 Prof. 64 Bit als Gast verwendet.

Andreas

_Niemand_

Hurra ... es läuft  :D

Habe das Problem (mit Googles Hilfe) gefunden und behoben.
Die Atom-IDE und auch das Betriebssystem waren nicht die Ursache warum der Build mit Fehler abgebrochen hatte.
Die Lösung findet sich hier:
https://github.com/letscontrolit/ESPEasy/issues/725
Die "Platformio"-IDE zieht leider inkonsistente Sourcen herunter.
Der Workaround ist aber einfach:
Im File /lib/IRemoteESP8266/ IRremoteESP8266.h

diese zwei Zeilen hinzufügen, dann klappts.
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))

Ich konnte nun auch meine Adressen für den SDM230 in die Sourcen von Andreas einbauen und bekomme nun endlich die Werte für Power/Strom usw. richtig für den SDM230 angezeigt.

Super Sache... und vor allem viel billiger und kleiner als die RasPi-Lösungen...

Danke nochmal an Andreas für das "veröffentlichen" hier im Forum...

fhemfreund

Zitat von: _Niemand_ am 18 April 2018, 18:47:29
Hurra ... es läuft  :D

Habe das Problem (mit Googles Hilfe) gefunden und behoben.
Die Atom-IDE und auch das Betriebssystem waren nicht die Ursache warum der Build mit Fehler abgebrochen hatte.
Die Lösung findet sich hier:
https://github.com/letscontrolit/ESPEasy/issues/725
Die "Platformio"-IDE zieht leider inkonsistente Sourcen herunter.
Der Workaround ist aber einfach:
Im File /lib/IRemoteESP8266/ IRremoteESP8266.h

diese zwei Zeilen hinzufügen, dann klappts.
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))

Ich konnte nun auch meine Adressen für den SDM230 in die Sourcen von Andreas einbauen und bekomme nun endlich die Werte für Power/Strom usw. richtig für den SDM230 angezeigt.

Super Sache... und vor allem viel billiger und kleiner als die RasPi-Lösungen...

Danke nochmal an Andreas für das "veröffentlichen" hier im Forum...

Na das freut micht aber :-)
Vielleicht baut ja der Eine oder Andere das noch nach und die Dokumentationsmühen haben sich gelohnt.

Habe mir mal deinen Link angeschaut - das ist krass. Gibt doch immer wieder was Neues. Scheinbar war das bei meinem initialen Build im Nov. noch kein Thema. Hatte übrigens letzte Woche nochmal einen Test-Compile gemacht - ohne Fehler (hatte das nochmal getestet bevor ich die Infos hier hochgeladen hatte)

Andreas

mac1001

Hallo,
das ist genau nachdem ich gesucht habe.
Ich werde das mit einem einphasigen Zähler nachbauen und bedanke mich schonmal vorab für die gute Vorarbeit und deren Doku!

Grüße
FHEM ZBoxNano Debian9, nanoCUL 868MHz, MAX!, Sonoff S20&Pow, Shelly1&2.5, WemosD1Mini&SDM230-Modbus, Raspi3&ConBeeII&Phoscon, Hue Lights, Xiaomi Sensors, espRGBWW

mac1001

Hab nun alle Teile erhalten, verbaut und die *.bin von fhemfreund probehalber geflasht.
Spannung und Gesamtverbrauch lassen sich damit problemlos darstellen ;)
Am erstellen einer eigenen *.bin für ein SDM230 hab ich allerdings noch Probleme.

Grüße
FHEM ZBoxNano Debian9, nanoCUL 868MHz, MAX!, Sonoff S20&Pow, Shelly1&2.5, WemosD1Mini&SDM230-Modbus, Raspi3&ConBeeII&Phoscon, Hue Lights, Xiaomi Sensors, espRGBWW

dindihi

Hallo,
danke für die super Arbeit!
Hab meinen SDM630 bis jetzt an nem Raspberry laufen.
Wollte dies jedoch auch mal probieren.
Alles soweit OK, Atom, compiliert, und uploaded. (einige Änderungen am source um mehr Register zu lesen).

Hab jedoch als RS485 so eins:
https://www.amazon.de/gp/product/B06XHHWLMW/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

Was ich noch nicht ganz verstanden hab sind die Pin's:
DI,DE,RE,RO
DI+RO sind die Daten Pins.
In nem Arduino Thread hab ich gelesen, dass DE+RE verbunden an einem Pin sein sollen?
Hast Du da ne Info?
Besten Dank im Voraus.

fhemfreund

Es gibt unterschiedliche RS485 Module. Meine Lösung braucht eins mit automatischer Flow Control, sprich ohne DE/RE pins. Hatte mal seinerzeit diesen https://www.ebay.de/itm/RS-485-bidirektionaler-TTL-3-3V-5V-Schnittstellen-Adapter-Single-Chip-Arduino-%C2%B5C/292089610806?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649 Bay Link hier reingestellt. Mit dem geht es auf jeden Fall. Mit ca. 5€ hält sich das auch preislich in Grenzen.

Andreas