47_OBIS.pm Erweiterung für IEC 62056 Geräte BG-ETech DRS110M und Pafal 20ec3gr

Begonnen von patmen, 25 November 2019, 11:38:18

Vorheriges Thema - Nächstes Thema

Guzzi-Charlie

Ach so, einfach im Terminal vom RasPi. Ok, werde ich dann Morgen mal versuchen.

Danke und noch schöne Weihnachten.
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

Guzzi-Charlie

Hallo Patrick,

ich hoffe Du hattest ein schönes Weihnachtsfest.


  • ich habe nun den Maintainer Icinger mal angeschrieben (und Dich auf cc: gesetzt). Mal sehen ob, bzw. welche Antwort es gibt.

  • Ich habe auch versucht die Scripte per Terminal aufzurufen. Dazu habe ich sowohl auf dem RasPi als auch auf meinem Windows-System die Perl-Umgebung installiert. Zum Testen wollte ich das aber erstmal auf dem Windows-System machen damit ich nicht an meinem FHEM-Produktivsystem rumbasteln muß. Leider klappt das Ausführen der Scripte bisher nicht weil das "install POSIX::strptime" nicht durchläuft. Das bricht immer mit einer Fehlermeldung ab. Da das aber in Deinem Script iec1107.pm benötigt wird läuft natürlich dann auch das Script nicht. Hast Du irgendeine Idee wie ich das POSIX::strptime installieren könnte?

- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

patmen

1. Der aktuelle Entwicklungsstand ist auf Gitlab.

https://gitlab.com/Menschel/drs110m_perl

Man kann über die Kommandos

git remote set-url origin https://gitlab.com/Menschel/drs110m_perl.git
git pull

den aktuellen Stand ziehen oder alternativ das Repo neu klonen.

2. Die Dependency POSIX::strptime wurde durch DateTime bzw. DateTime::Format::Strptime ersetzt zwecks Kompatibilität.

3. Die Funktionalität zum Setzen der Uhrzeit und zum Reset des Zählers wurde hinzugefügt.
Ich hatte den Fall, dass einer der Zähler offenbar zu lange stromlos war und meinte die Uhrzeit sei irgendwann Februar 2002.

4. Die Funktionalität wurde soweit möglich gekapselt, auf dass nur noch ein Aufruf von get_values() notwendig ist, um alle Werte abzurufen. Alles andere passiert von selbst.

Guzzi-Charlie

Hallo Patrick,

Danke daß Du Dir nochmal die Mühe gemacht hast Dich mit meinem Problem zu befassen. Leider klappt es immer noch nicht.

Ich habe:

  • Win32 SerialPort installiert ==> hat geklappt
  • in der iec1107 Zeile 15 angepaßt use Win32::SerialPort; # use Device::SerialPort;
  • im test_drs110m.pl die Zeile 13 angepaßt in my $port = new Win32::SerialPort("COM6") || die $!; # my $port = Device::SerialPort->new("/dev/ttyUSB0") || die $!;
  • in Zeile 25 die Seriennummer meines Zählers eingetragen
Leider kommt es dann zu den folgenden Fehlermeldungen:
Zitatperl test_drs110m.pl
Meter: 1613300030
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
No Ack for write operation 31 : 21122802143906
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
Second Write attempted before First is done at iec1107.pm line 178.
Use of uninitialized value $written in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1580.
Second Read attempted before First is done at iec1107.pm line 179.
Use of uninitialized value $got in numeric ne (!=) at C:/Strawberry/perl/vendor/lib/Win32/SerialPort.pm line 1216.
No Response for Temperature at iec1107.pm line 115.
Hast Du vielleicht dazu auch noch eine Idee?
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

patmen


Guzzi-Charlie

Meinst Du es liegt an der HW oder an irgendwelchen falschen Einstellungen von mir?

Ich müßte eigentlich noch einen anderen Serial zu USB-Adapter haben. Kann ich auch nochmal testen.

Danke
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

gvzdus

Moin,
generell lese ich nicht *alles* im Forum, nur meine Stammthreads wie 47_OBIS.

Ich habe mir die Doku und den Code etwas angesehen: Kann es sein, dass der Zähler mehr oder weniger per Modbus angesprochen wird? Jedenfalls im Prinzip sieht mir das so ähnlich aus. Dafür gibt es ja bereits ein Modul, und ich setze es als dummer Endanwender auch ein, nämlich um meinen SolarEdge-Wechselrichter auszulesen.

Das Modbus-Modul von FHEM muss halt auf das konkrete Gerät parametrisiert werden (welches Register sagt was), aber ich vermute, dass es deckungsgleich mit der Anbindung des Zählers ist.

FHEM-Module sind vom normalen Perl-Programm schon recht weit entfernt: Du kannst nicht einfach Schreiben und danach einen Read starten. Das ist der eine Grund, der andere Grund ist, dass ich kein Testgerät habe. Ich bin aber ggü. - ich denke mindestens hunderten - Leuten ggü. in der Verantwortung, mit einer neuen Version nichts kaputt zu machen. Heißt, mit Änderungen ohne Tests bin ich sehr zurückhaltend, und Tests "remote" sind - selbst bei gutem Willen - so anstrengend wie die Eltern am Telefon "ins Internet" zu bekommen.

Viele Grüße, Georg

Guzzi-Charlie

Hallo Georg,

vielen Dank für Deine schnelle Antwort.

Es ist mir vollkommen klar daß man (Du) nicht jeden Thread lesen kann. Das kann ich auch nicht (bin Moderator im Shelly Support Forum). Deshalb habe ich Dich, bzw. vorher Icinger kontaktiert um in Erfahrung zu bringen ob es noch eine Chance gibt das Modul zu integrieren. Wie schon geschrieben habe ich 38 Stück von diesen Zählern installiert und lese die seit 6 Jahren einmal im Monat händisch aus.

Die verschiedenen Modbusmodule kenne ich auch aber diese Zähler sprechen eben NICHT Modbus (auf diese Vermutung bin ich vor 6 Jahren ja auch reingefallen). Ich dachte damals RS485 = Modbus weil das bei uns in der Kraftwerksleittechnik quasi ein Synonym war. Ich habe auch das Modbusmodul für den SDM120 für weitere Hutschienenzähler (XTM100A) in Benutzung. Das habe ich auch an die andere Registerbelegung angepaßt. Das funktioniert einwandfrei.

Diese Zähler sprechen aber IEC1107 und nicht Standard-Modbus. Ich habe in den Jahren immer mal wieder versucht den Zählern Daten zu entlocken und sehr viel dazu gelesen und wenn ich mich richtig erinnere, dann muß man bei diesen Zählern (IEC1107 Protokoll) tatsächlich erst schreiben um dann die Daten auszulesen. Deshalb kann man das Modbusmodul wohl nicht einfach anpassen.

Was das Testen angeht, mit einem Testgerät könnte ich dienen. Ich habe noch einen nicht verbauten Zähler mit dem ich es ja auch gerade mal wieder versuche. Evtl. kann auch Patrick (patmen), der Erstellers des Perlprogramms einen Zähler für Testzwecke bereitstellen. Da müßte man Ihn mal fragen.

Grüße
Bernd
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

gvzdus

shelly-support.eu? Da bin ich "gvz", aber gesperrt, wegen vorgeblicher "gewerblicher Nutzung". Mail an webmaster@shelly-support.de ist nicht zustellbar. Mein gewerbliches Verbrechen war mutmaßlich, hier ins FHEM-Forum verlinkt zu haben zu CoIoT. Jedenfalls waren das meine letzten Beiträge: Aktivitäten für den Shelly-Support bei FHEM.
Sorry, wenn ich da übel gelaunt bin - ich bin morgen bestimmt viel entspannter und habe den Teil "Nein, ist nicht Modbus" zur Kenntnis genommen.

Guzzi-Charlie

Oh, sorry das zu hören. Keine Ahnung warum Du da gesperrt bist. Muß ich mal nachhören. Eigentlich geht es bei uns im Shelly-Forum sehr entspannt zu. Sperren sind wirklich sehr sehr selten. Ich selbst promote FHEM dort immer wieder. Komisch.

Ich hoffe Du nimmst es nicht persönlich, vor allem nicht mir. Ich bin unschuldig, war ich schon immer  ;)
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

Guzzi-Charlie

Hallo Patrick,

nach vielem Suchen, Versuchen, Neuinstallationen der Perl-Umgebung auf meinem Windows-PC und einem anderen RS485zuUSB-Adapters konnte ich Heute das erste Mal seit 6 Jahren mit Deinem Test-Script meinem Testzähler Werte entlocken. Es scheint also endlich etwas vorwärts zu gehen.

Die Ursache für die weiter oben geposteten Fehlermeldungen waren nicht eine defekte Schnittstelle sondern offensichtlich Inkompatibilitäten zwischen Win10 (64Bit) und der 64 Bit Perl Umgebung (Strawberry). Im Netz habe ich eine Äußerung dazu gefunden, daß es mit einer 32 Bit Umgebung funktionieren würde. Also habe ich erstmal alles wieder deinstalliert und dann die 32 Bit Umgebung installiert. Prompt hatte ich die gleiche Fehlermeldung wie am Anfang (Modul DateTime::format::strptime fehlt). Auch das einzelne Nachinstallieren brachte keinen Erfolg. Erst das Nachinstallieren eines kompletten DateTime-Paketes ('Bundle::DateTime::Complete') brachte den Erfolg. Jetzt läuft das Script

Morgen werde ich dann intensiver versuchen alles zum Laufen zu bringen. Wenn dann auch noch gvzdus Dein Script zu einem FHEM-Modul erheben würde, dann hätte meine damalige Investition doch noch ein gutes Ende gefunden.
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

Guzzi-Charlie

So, Heute habe ich weiter getestet.

Das Script läuft jetzt auch auf meinem FHEM-RasPi und ich habe inzwischen 10 (meine Twin-Aderendhülsen sind alle, Morgen kommt Nachschub) der insgesamt 14 Zähler des ersten Unterverteilers am BUS/USB-Adapter angeschlossen. Alle 10 werden ohne Probleme ausgelesen.

Nachdem es nun endlich funktioniert die Zähler auszulesen bin ich natürlich ungeduldig und würde gerne (solange kein FHEM-Modul existiert) das Perl-Script von FHEM aus aufrufen (z.B. mit einem at) und die Werte auf diesem Weg nach FHEM holen. Ich habe auch schon Einiges dazu gesucht und gelesen, aber so richtig schlau bin ich noch nicht geworden.

Hat vielleicht Jemand eine Anleitung wie man das realisieren könnte?
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

Guzzi-Charlie

Hallo,

Hier nun eine kurze Zusammenfassung des aktuellen Standes bei mir:

  • Habe am Freitag zusammen mit CoolTux an der Implementierung Deines Scripts in Mein FHEM gearbeitet (auch an dieser Stelle nochmal Vielen Dank für die tolle Unterstützung durch CoolTux).
  • Er hat das Script so angepaßt, daß es über Telnet die Daten der ausgelesenen Zähler an FHEM sendet und dort werden sie dann in einen Dummy je Zähler geschrieben.
  • Angestoßen wird das Ganze von einem cron-Job.

Prinzipiell hat das funktioniert, d.h. eine nutzbare Zwischenlösung ist greifbar nahe, bevor es vielleicht ein FHEM-Modul gibt. Es gibt im Moment allerdings noch ein Problem mit dem cron-Job. Dieser wird nur genau einmal ausgeführt wird. Ich habe da aber noch nicht nachgeschaut und auch noch nicht mit CoolTux darüber "gesprochen".

Eine Sache ist mir beim Testen noch aufgefallen. Ich habe jetzt 14 Zähler am Bus hängen. Wenn einer der Zähler nicht antwortet (ich habe nämlich einen defekten dazwischen, wußte ich vorher schon), dann bricht das Script einfach ab und die restlichen Zähler in der Liste werden nicht mehr abgefragt. Dieses Verhalten ist nicht optimal. Vielleicht könnte man das ja so anpassen, daß er in solch einem Fall nicht abbricht sondern den nicht erreichbaren überspringt.
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

CoolTux

Hallo Bernd,

Was kommt denn für eine Meldung wenn Du das Skript von Hand startest und er aussteigt bei dem einen Sensor?
Kann mir nur vorstellen das er Probleme hat den Hash aus zu lesen in der Schleife. Dann muss sowas kommen wie can't Hash as referenz bla bla
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Guzzi-Charlie

Warte mal, probier ich gerade nochmal. Bin gerade mit dem cron job am probieren, der funktioniert ja auch noch nicht.
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2