Autor Thema: FHEM als Modbus Slave  (Gelesen 37349 mal)

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 970
Antw:FHEM als Modbus Slave
« Antwort #45 am: 05 Oktober 2019, 14:33:48 »
Hallo,

Ich habe das Modul geändert so dass es auch unter Windows mit Strawberry Perl funktioniert.

Ob du 99_CommPort benötigst kann ich nicht sagen, eventuell enthält es den Fix für die serielle Schnittstelle unter 64-Bit Perl.

Kannst du mir die Datei schicken, sie befindet sich im FHEM-Verzeichnis.

Grüße,

ChrisD

Edit 24.09.2022: die angehängte Version ist nicht mehr aktuell, bitte von hier herunterladen
« Letzte Änderung: 24 September 2022, 19:21:26 von ChrisD »

Offline Sjae

  • New Member
  • *
  • Beiträge: 9
Antw:FHEM als Modbus Slave
« Antwort #46 am: 05 Oktober 2019, 17:43:49 »
Hallo,

99_ ist eine Kopie von 99_myUtilys und hatte ich selbst angelegt, das ist mir eingefallen als ich es geöffnet habe um nachzusehen was es macht.

Ich hab die neue Version probiert, aber ich glaube es geht trotzdem nicht, siehe Log???

2019.10.05 17:37:18 0: Server shutdown
2019.10.05 17:37:22 1: registering fhem as Windows Service
2019.10.05 17:37:22 1: starting fhem as a service
2019.10.05 17:37:22 1: Including C:/FHEM/fhem.cfg
2019.10.05 17:37:24 3: WEB: port 8083 opened
2019.10.05 17:37:24 2: eventTypes: loaded 91 events from ./log/eventTypes.txt
2019.10.05 17:37:27 3: CMI: port 502 opened
2019.10.05 17:37:27 1: Including ./log/fhem.save
2019.10.05 17:37:27 3: Opening SDM630 device com4
2019.10.05 17:37:27 3: Setting SDM630 serial parameters to 19200,8,N,1
2019.10.05 17:37:27 3: SDM630 device opened
2019.10.05 17:37:27 0: Featurelevel: 5.9
2019.10.05 17:37:27 0: Server started with 269 defined entities (fhem.pl:20069/2019-08-27 perl:5.030000 os:MSWin32 user:SYSTEM pid:1580)
2019.10.05 17:37:27 3: FHEMWEB WEB CSRF error: csrf_565145487979007 ne csrf_143286092711894 for client WEB_127.0.0.1_49972 / command shutdown restart. For details see the csrfToken FHEMWEB attribute.
2019.10.05 17:37:27 0: Server shutdown
2019.10.05 17:37:30 1: registering fhem as Windows Service
2019.10.05 17:37:30 1: starting fhem as a service
2019.10.05 17:37:30 1: Including C:/FHEM/fhem.cfg
2019.10.05 17:37:31 3: WEB: port 8083 opened
2019.10.05 17:37:31 2: eventTypes: loaded 91 events from ./log/eventTypes.txt
2019.10.05 17:37:33 3: CMI: port 502 opened
2019.10.05 17:37:33 1: Including ./log/fhem.save
2019.10.05 17:37:33 3: Opening SDM630 device com4
2019.10.05 17:37:33 3: Setting SDM630 serial parameters to 19200,8,N,1
2019.10.05 17:37:33 3: SDM630 device opened
2019.10.05 17:37:33 0: Featurelevel: 5.9
2019.10.05 17:37:33 0: Server started with 269 defined entities (fhem.pl:20069/2019-08-27 perl:5.030000 os:MSWin32 user:SYSTEM pid:8476)
2019.10.05 17:37:33 3: FHEMWEB WEB CSRF error: csrf_143286092711894 ne csrf_758795323537473 for client WEB_127.0.0.1_49976 / command shutdown restart. For details see the csrfToken FHEMWEB attribute.


es werden auch keine Daten gesendet

VG

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 970
Antw:FHEM als Modbus Slave
« Antwort #47 am: 05 Oktober 2019, 18:01:21 »
Hallo,

Im Log ist keine Meldung die zeigt dass es nicht gehen würde. Steht verbose beim SDM630 noch auf 5 ?

Zitat
99_ ist eine Kopie von 99_myUtilys und hatte ich selbst angelegt, das ist mir eingefallen als ich es geöffnet habe um nachzusehen was es macht.

Wieso hast du die seriellen Funktionen (CloseHandle, CreateFile , etc) in 99_myUtils ? Hast du die Datei selbst erstellt ?

Wenn du die x64 Version von Perl verwendest muss die Datei perl\vendor\lib\Win32API\CommPort.pm angepasst werden. Ansonsten funktioniert die serielle Schnittstelle nicht. Details gibt es hier.

Grüße,

ChrisD

Offline Sjae

  • New Member
  • *
  • Beiträge: 9
Antw:FHEM als Modbus Slave
« Antwort #48 am: 05 Oktober 2019, 20:34:09 »
Fast am Ziel:

verbose steht auf 5...

Ich habe mir aus Verzweiflung alles mögliche kopiert und eingefügt, um irgendwie die Daten zu empfangen, von selber schreiben bin ich tausende Kilometer entfernt.

Zitat
Wenn du die x64 Version von Perl verwendest muss die Datei perl\vendor\lib\Win32API\CommPort.pm angepasst werden. Ansonsten funktioniert die serielle Schnittstelle nicht. Details gibt es hier.

Hatte ich noch nie was davon gehört also gleich überprüft und geändert, hat aber leider nicht sofort geholfen.

In der Annahmme das es mit dem neuen 36_... gehen muss, habe ich alle Datein unter C:\fhem\FHEM...... gelöscht und aus einer frischen Download Version reinkopiert plus 36_ModbusSlave und 36ModbusTCP_CC und siehe da einen "shutdown und neustart" später und nun geht es.

Allerdings sendet es noch das falsche, es müsste  399,1335 (hex 01 04 04 43 C7 91 17 72 63) aus

define SDM630_30053 dummy
attr SDM630_30053 comment MBR:1,52,H,,F
attr SDM630_30053 group SDM630
attr SDM630_30053 room SDM630

senden ;

sendet aber 01 84 02 C2 C1 von keine Ahnung woher. Hier bin ich noch ratlos aber wenigstens klappt die Verbindung erstmal, nochmal vielen dank.

VG
Sven

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 970
Antw:FHEM als Modbus Slave
« Antwort #49 am: 05 Oktober 2019, 21:06:31 »
Hallo,

Die Meldung 01 84 02 ... besagt dass versucht wurde Daten zu lesen die nicht definiert sind. Das kann daran liegen dass es 2 Adressierungsmöglichkeiten gibt:

01 04 00 34 00 02 30 05ist die Anfrage nach 2 Worten ab Adresse 52 oder Register 53. Die Registernummern (die ModbusSlave verwendet) liegen immer um 1 höher als die Adressen. SDM630_30053 ist über Register 52, also Adresse 51 erreichbar, so dass die obige Anfrage nicht funktioniert. Kannst du den Wechselrichter umparametrieren so dass er die Daten von Adresse 51 liest ?

Grüße,

ChrisD



Offline Sjae

  • New Member
  • *
  • Beiträge: 9
Antw:FHEM als Modbus Slave
« Antwort #50 am: 05 Oktober 2019, 22:40:31 »
Am Wechselrichter kann ich nicht einstellen.

Ich habe jetzt versucht in FHEM mit der Adresse hoch und runter zu gehen, in der Hoffnung die Richtige zu treffen, aber das hilft nix, nur wenn ich aus H ein I mache ändert sich was bzw. wird was gesendet allerdings nicht das richtige.

MBR:1,53,I,,F --> 01 04 04 80 00 43 C7 A2 E6

MBR:1,52,I,,F --> 01 04 04 00 00 01 8F BB B0

und senden sollte es 01 04 04 "399,1335" + CRC


viele grüße

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 970
Antw:FHEM als Modbus Slave
« Antwort #51 am: 05 Oktober 2019, 23:07:37 »
Hallo,

Der Wechselrichter will Input Register lesen (Code 04), deshalb musst du I oder * verwenden.

Wenn du das Attribut änderst, ändert sich dann auch der Wert des Dummy ?

Kannst du das Attribut auf MBR:1,53,*,,F setzen und ein Log mit verbose 5 von CMI und SDM630 erstellen ?

Grüße,

ChrisD

Offline Sjae

  • New Member
  • *
  • Beiträge: 9
Antw:FHEM als Modbus Slave
« Antwort #52 am: 06 Oktober 2019, 06:13:26 »
Guten Morgen,


es ist geschafft und es läuft. Nachdem ändern auf "*" kamen die Daten an, zunächst erst noch vertauscht aber das waren dann nur noch 2 klicks, einmal in IP Sycon auf

"Swap LSW/MSW for 32Bit/64Bit values
,

und das "B" in

MBR:1,53,*,,FB

und nun geht es.

Brauchst Du das Log trotzem?

Danke für die Hilfe das hätte ich wahrscheinlich nie alleine geschafft.

Beste Grüße
Sven

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 970
Antw:FHEM als Modbus Slave
« Antwort #53 am: 06 Oktober 2019, 11:01:34 »
Hallo,

Schön dass es funktioniert.

Das Log brauche ich nicht.

Grüße,

ChrisD

Offline bugs

  • New Member
  • *
  • Beiträge: 8
Antw:FHEM als Modbus Slave
« Antwort #54 am: 22 November 2019, 16:41:18 »
Hallo

Ich bin auf der Suche einer Lösung für eine Kommunikation zwischen digitalSTROM (dSS20) und Codesys welches als Runtime auf einem Raspberry PI 3 B+ läuft. Meine Idee ist FHEM, auf dem Raspi installiert, als Gateway zu nutzen. Die Kommunikation zwischen digitalSTROM und FHEM habe ich mit Hilfe einer detaillierten Anleitung zum Laufen gebracht. (https://wiki.fhem.de/wiki/DigitalSTROM_einbinden)
FHEM kenne ich leider nur rudimentär und schaffe es nicht eine Verbindung zu Codesys via Modbus-TCP aufzubauen. Das Modul ‚36_ModbusTCP_CC.pm ‘ konnte ich installieren komme nun aber nicht weiter, mir fehlen einfach die Kenntnisse.
Hilfreich wäre eine ähnlich ausführliche Anleitung wie die Projektierung FHEM-digitalSTROM im wiki.fhem. Vielleicht gibt es jemand der mir weiterhelfen kann, ich verstehe aber auch wenn mein Wunsch zu viel verlangt und sich deshalb niemand die Arbeit macht.
Ich bin auch daran FHEM besser zu verstehen was leider nicht ganz einfach ist und viel Zeit beansprucht, zu FHEM findet man im Web viele unterschiedliche und teils auch widersprüchliche Angaben.
Noch eine Zusatzfrage, wie bringe ich FHEM dazu dass der Port 502 deklariert werden kann, die Massnahme in Antwort #4 funktioniert bei mir leider nicht.

Beste Grüsse aus der Zentralschweiz
Heinz

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 970
Antw:FHEM als Modbus Slave
« Antwort #55 am: 24 November 2019, 20:47:15 »
Hallo,

Kannst du etwas genauer beschreiben welche Informationen du weitergeben möchtest ? Auf Basis des Wiki könnte die Definition eventuell so aussehen:
attr dSM_0000131e comment MBR:1,1,I,Consumption,F
In den Beiträgen 2 und 7 sowie in der CommandRef ist die Funktion des Modules beschrieben, welche Informationen fehlen dir ?

Zitat
Noch eine Zusatzfrage, wie bringe ich FHEM dazu dass der Port 502 deklariert werden kann, die Massnahme in Antwort #4 funktioniert bei mir leider nicht.

Was funktioniert nicht ?
Gibt es eine Fehlermeldung ?
Es kann sein dass die CoDeSys-Runtime Port 502 blockiert, in dem Fall musst du einen anderen Port verwenden.

Grüße,

ChrisD

Offline bugs

  • New Member
  • *
  • Beiträge: 8
Antw:FHEM als Modbus Slave
« Antwort #56 am: 02 Dezember 2019, 17:26:25 »
Hallo Chris
Danke für deine Unterstützung, bitte entschuldige die späte Reaktion meinerseits.

Grundsätzlich möchte ich Messwerte wie z.B. den aktuellen Stromverbrauch von digitalSTROM via FHEM zu Codesys übertragen aber auch Ereignisse der Schaltuhr von digitalSTROM zu Codesys senden. Umgekehrt sollten Ereignisse von Codesys, z.B. Steuerbefehle Umwälzpumpe Fussbodenheizung ein-aus, über FHEM zu digitalSTROM gesendet werden.

Dein Code-Vorschlag werde ich testen und schauen ob ich von FHEM zu Codesys eine Kommunikation aufbauen kann.
Mir fehlen einfach die Kenntnisse um FHEM korrekt zu projektieren, zu kontrollieren und zu testen.

Beim Einbinden ‚define mbcc ModbusTCP_CC‘ kommt die folgende Fehlermeldung
.mbcc: Can't open server port at 502: Permission denied‘, mit dem Port 10502 kommt jedoch keine Fehlermeldung. Der Port 502 wird auf der Codesys-Seite benutzt für eine Kommunikation über Modbus-TCP mit einem PV-Wechselrichter (Solaredge).

Es scheint jedoch, dass der Port trotzdem korrekt ist im FHEM, unter Internals DeviceName steht hinter der IP-Adresse ….:502.

Schöne Grüsse aus der Zentralschweiz
Heinz

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 970
Antw:FHEM als Modbus Slave
« Antwort #57 am: 05 Dezember 2019, 21:20:36 »
Hallo,

Zitat
Can't open server port at 502: Permission denied‘
kommt wahrscheinlich daher dass der Benutzer unter dem FHEM läuft keine Root-Rechte hat. Entweder musst du auf einen Port >1024 ausweichen oder FHEM den Zugriff auf Port 502 erlauben. Dazu gibt es eine Reihe von Möglichkeiten, die vom eingesetzten Betriebssystem abhängen, für Linux z.B. nach 'linux privileged ports' suchen.

Zitat
Es scheint jedoch, dass der Port trotzdem korrekt ist im FHEM, unter Internals DeviceName steht hinter der IP-Adresse ….:502.
FHEM zeigt den konfigurierten Port an, ob dieser geöffnet werden konnte wird an der Stelle nicht angezeigt.

Zitat
Der Port 502 wird auf der Codesys-Seite benutzt für eine Kommunikation über Modbus-TCP
Wenn Codesys Port 502 belegt musst du einen anderen verwenden. Da du den Port in Codesys für jeden ModbusTCP-Slave getrennt einstellen kannst sollte das kein Problem sein.

Grüsse,

ChrisD

Offline bugs

  • New Member
  • *
  • Beiträge: 8
Antw:FHEM als Modbus Slave
« Antwort #58 am: 30 Dezember 2019, 17:17:08 »
Hallo Chris
Danke für deine Hinweise und Tipps.

Den Port änderte ich auf beiden Seiten auf 1502 eine Verbindung kommt jedoch nicht zustande.
Ich versuchte ziemlich viel, leider alles ohne Erfolg, mir fehlt einfach das notwendige FHEM-Wissen für die Projektierung der Modbus-Kommunikation. Aufgeben werde ich trotzdem noch nicht, die Hoffnung stirbt bekanntlich zuletzt.

Grüsse und einen guten Rutsch ins neue Jahr
Heinz

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 276
Antw:FHEM als Modbus Slave
« Antwort #59 am: 08 Juni 2021, 18:45:55 »
Hallo Chris,

das Thema ist zwar schon über ein Jahr alt, aber ich hoffe die Frage erreicht Dich trotzdem.

Ich habe ein spezielles Problem. Ich betreibe mehrere PV-Anlagen und jetzt kommt noch eine Weitere (incl. Batteriespeicher) hinzu. Dafür installiere ich auch das Fenecon Energy Management System (FEMS). Dieses steuert dann die Energieflüsse aller Wechselrichter und der ebenfalls hinzukommenden Batterieanlage. Dafür muß pro PV-Anlage ein Energiezähler installiert werden. Alles zusammen wird mit FEMS per Modbus RTU (RS485) verbunden (siehe anhängendes Schema).

Das Problem ist nun das in FEMS zur Zeit nur bestimmte Zähler implementiert sind und genau diese entweder nicht zu bekommen sind oder absolut überteuert sind. Das betrifft die zusätzlichen Zähler (in meinem Beispiel die Zähler 1+2). Ich habe mir nun überlegt ob ich nicht als Ersatz ein anderes Fabrikat nehmen könnte, die Daten dann mit FHEM abfragen, dort die Register quasi "ummappen" und dann FHEM als Slave an den vorgesehenen Modbus hänge und damit dem FEMS praktisch andere Zähler vorspiegelt werden. Die Registerbelegungen der (in FEMS) implementierten Zähler als auch die der Ersatztypen habe ich natürlich.

Wäre dieses Konstrukt problemlos umzusetzen oder hälst Du das für nicht, bzw. nur mit unverhältnismäßigem Aufwand machbar?
- RaspPI 4+: (Cuno V2 -2x KS300, JeeLink -13x EC3000)
- Stromzähler (B+G E-Tech): 6x SDM120M, 9x XTM100A, 38x DRS110M
- LAN: IT LAN-Gateway mit 34x RMF-R1 (Rohrmotor24)
- WLAN: 85x Shelly, 12x Gosund SP111, 16x D1-Mini, 15x Sonoff Basic
- DECT: 6x DECT200, 8x DECT301, - HmIP: 3x FalmotC12, 16x WTH2