Neue Versionen und Support zum Modbus-Modul

Begonnen von StefanStrobel, 20 August 2017, 12:11:08

Vorheriges Thema - Nächstes Thema

StefanStrobel

Hallo franky08,

Wenn es nicht funktioniert, kann das viele Gründe haben:
- serielle Parameter (Baudrate, Datenbits, Parität, Stoppbits) müssen übereinstimmen
- Modbus-Adresse muss übereinstimmen (es muss nicht die 1 sein)
- die RS485-Schnittstelle muss verfügbar sein (wenn Dein HM485 Modul die schon verwendet, könnte das ein Problem sein)
- die physische Verkabelung muss passen (der Digitus hat möglicherweise schon einen Abschlusswiderstand eingebaut. Doppelt terminiert führt evt. dazu, dass nichts mehr geht)
- es müssen die richtigen Register abgefragt werden. Viele Geräte antworten einfach nicht (auch nicht mit einer Fehlermeldung) wenn eine unbekannte Register-Adresse angefragt wird.

Ich hoffe das hilft bei der Fehlersuche.

Gruß
    Stefan


franky08

Hallo Stefan, Danke für die Antwort, hatte hier einen anderen Thread aufgemacht:https://forum.fhem.de/index.php/topic,105654.0.html

der SDM530 steht auf Adresse 1, 2400 Baud, EVEN und einem Stop Bit, genau so habe ich das in HM485_LAN:
Internals:
   DEF        localhost:2000
   DeviceName localhost:2000
   FD         7
   FUUID      5dd960f8-f33f-9332-9f01-9e4258504d86364f
   HM485d_CommandLine ./FHEM/lib/HM485/HM485d/HM485d.pl --hmwId 00000001 --serialNumber SGW0123456 --device /dev/ttyUSB0 --localPort 2000
   HM485d_PID  7466
   HM485d_STATE started
   InterfaceType HMW-SOFT-GW
   NAME       hm485
   NR         142
   PARTIAL   
   ProtokolVersion 01
   STATE      opened
   SerialNumber SGW0123456
   TYPE       HM485_LAN
   Version    0.2.2
   hmwId      00000001
   msgCounter 202
   READINGS:
     2019-11-23 22:02:37   state           opened
   keepalive:
     ok         1
     retry      0
Attributes:
   HM485d_bind 1
   HM485d_device /dev/ttyUSB0
   hmwId      00000001
   room       ModBus,System
   verbose    3


Das Modul ModbusSDM630M.pm habe ich mit der Register Belegung vom SDM530 verglichen und das Modul für diesen Zähler angepasst (da hat der 630 nur eine Register mehr, die habe ich raus genommen).

Internals:
   CFGFN     
   DEF        1 60
   FUUID      5dd99ec7-f33f-9332-adf3-b68f038d3f4cf6d2
   INTERVAL   60
   IODev      ModBusLine
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.1.5 - 17.9.2019
   NAME       SDM530M
   NOTIFYDEV  global
   NR         149
   NTFY_ORDER 50-SDM530M
   PROTOCOL   RTU
   STATE      opened
   TRIGGERTIME 1574547129.93382
   TRIGGERTIME_FMT 2019-11-23 23:12:09
   TYPE       ModbusSDM530M
   lastUpdate 1574547069.93382
   FRAME:
   READ:
   READINGS:
     2019-11-23 22:04:07   state           opened
   REMEMBER:
     lrecv      1574544637.32669
     lsend      1574547069.95952
   lastRead:
Attributes:
   room       ModBus


ModBusLine :
Internals:
   DEF        /dev/ttyUSB0@2400,E,1
   DeviceName /dev/ttyUSB0@2400,E,1
   EXPECT     idle
   FD         11
   FUUID      5dd96221-f33f-9332-bd7e-141e66337d33a419
   LASTOPEN   1574547268.06125
   MODE       master
   NAME       ModBusLine
   NR         143
   NTFY_ORDER 50-ModBusLine
   PARTIAL   
   PROTOCOL   RTU
   STATE      opened
   SerialConn 1
   TYPE       Modbus
   devioLoglevel 3
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2019-11-23 23:14:28   state           opened
   REMEMBER:
     lid        1
     lname      ModBusLine
     lrecv      1574547086.02487
     lsend      1574547268.0041
   defptr:
     SDM530M    1
Attributes:
   room       ModBus,System


Zitatdie RS485-Schnittstelle muss verfügbar sein (wenn Dein HM485 Modul die schon verwendet, könnte das ein Problem sein)

definitiv wird die noch nicht verwendet. Habe zum testen eine Installation auf einem "nackten" System laufen.
Zitatdie physische Verkabelung muss passen (der Digitus hat möglicherweise schon einen Abschlusswiderstand eingebaut. Doppelt terminiert führt evt. dazu, dass nichts mehr geht)

Hatte vorher gar keinen Abschlusswiderstand am Digitus (irgendwo hatte ich gelesen das einige Adapter schon einen eingebaut haben, nachgemessen --> da war keiner), mit dem 120 Ohm am Digitus bekomme ich nun ja wenigstes die Timeout Meldung. Die Register Adressen stimmen mit dem im ModBusSDM630M.pm Modul zu 99.8 % überein.

Vlt. siehst du ja im List noch was.
P.S. Müsste am Zähler eigentlich auch noch ein 120 Ohm zwischen 485+ und 485- ?
Die Kabellänge zwischen dem Zähler und FHEM beträgt ca. 2 m, dürfte auch kein Problem sein.

VG
frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

blueberry63

#377
Hallo,

ich versuche mich gerade am Auslesen des Drehstromzählers OR-WE-517 von ORNO (s.: https://forum.fhem.de/index.php/topic,105685.0.html).

Nun stehe ich aber vollkommen auf dem Schlauch beim Umrechnen der Werte im Floating-Format. Zum Beispiel wird die Spannung (ca. 225V) mit "17245" ausgelesen. Kann mir jemand eine "Für Dummys"-Erklärung geben, wie man damit umgeht?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

StefanStrobel

Hallo Frank,

Setz doch mal verbose von SDM530M und ModbusLine auf 5 und poste einen Auszug aus dem Log.
Vielleicht sieht man da etwas.

Gruß
    Stefan

StefanStrobel

Hallo Blueberry63,

Schau Dir doch mal die Erklärung im Wiki an:
https://wiki.fhem.de/wiki/ModbusAttr#Handling_Data_Types

Leider gibt es viele Möglichkeiten Float-Werte darzustellen.
Du muss einfach mal ausprobieren ob als Unpack-Code f>, f<, mit oder ohne RevRegs passen könnte.
Die Lämge wird aber vermutlich 2 sein.

Gruß
    Stefan

blueberry63

Danke für den Tipp:

"obj-hxxx-unpack f>" ist die Lösung  :D

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

franky08

Hallo Stefan, im Anhang der Logauszug mit verbose 5 für ModbusLine und SDM530M. Vlt. siehst du ja etwas.

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

#382
P.S. muss der Zähler neu gestartet werden nachdem die Einstellungen für die Schnittstelle geändert wurden???
PPS. Und ist B +485 und A -485?, da gibt es widersprüchliche Inhalte im Netz und müssen die Pull-up Pull-down Widerstände noch dran?

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

StefanStrobel

Hallo Frank,

Das sieht tatsächlich seltsam aus:

2019.11.25 14:48:49 3: /dev/ttyUSB0 disconnected, waiting to reappear (ModBusLine)
2019.11.25 14:48:49 5: ModBusLine: StopQueueTimer called from Open removes internal timer to call Modbus_ProcessRequestQueue
2019.11.25 14:48:49 3: Setting ModBusLine serial parameters to 9600,8,N,1
2019.11.25 14:48:49 3: /dev/ttyUSB0 reappeared (ModBusLine)


Du hattest doch 2400,8,e,1 konfiguriert oder?

Gruß
   Stefan

franky08

#384
Bin inzwischen wieder auf 9600,N,2 gegangen, es kann sein das der Log vorher entstanden ist.

Internals:
   DEF        /dev/ttyUSB0@9600,N,2
   DeviceName /dev/ttyUSB0@9600,N,2
   EXPECT     idle
   FD         9
   FUUID      5ddbbd6e-f33f-9332-ad88-0faa635de69829ce
   IODev      ModBusLine
   LASTOPEN   1574747131.22007
   MODE       master
   NAME       ModBusLine
   NR         142
   NTFY_ORDER 50-ModBusLine
   PARTIAL   
   PROTOCOL   RTU
   STATE      opened
   SerialConn 1
   TYPE       Modbus
   devioLoglevel 3
   nextOpenDelay 60
   nextTimeout 1574747133.19154
   FRAME:
   QUEUE:
     HASH(0x5641f7399c90)
   READ:
     BUFFER     
   READINGS:
     2019-11-26 06:45:31   state           opened
   REMEMBER:
     lid        1
     lname      ModBusLine
     lrecv      1574742271.04993
     lsend      1574747131.19431
   REQUEST:
     ADR        0
     DBGINFO    getUpdate
     FCODE      4
     FRAME      (�
     LEN        40
     MODBUSID   1
     OPERATION  read
     READING    Voltage_L1__V
     SENT       1574747131.19154
     TIMESTAMP  1574747113.16472
     TYPE       i
     VALUES     0
     DEVHASH:
       DEF        1 60
       FUUID      5ddbdb7b-f33f-9332-cd96-82fc9ca5fa7b436a
       INTERVAL   60
       IODev      ModBusLine
       MODBUSID   1
       MODE       master
       MODULEVERSION Modbus 4.1.5 - 17.9.2019
       NAME       SDM530M
       NOTIFYDEV  global
       NR         143
       NTFY_ORDER 50-SDM530M
       PROTOCOL   RTU
       STATE      opened
       TRIGGERTIME 1574747173.13267
       TRIGGERTIME_FMT 2019-11-26 06:46:13
       TYPE       ModbusSDM630M
       lastUpdate 1574747113.13267
       FRAME:
       READ:
       READINGS:
         2019-11-25 22:27:10   state           opened
       REMEMBER:
         lsend      1574747131.19431
       lastRead:
   defptr:
     SDM530M    1
Attributes:
   disable    0
   room       ModBus,System
   skipGarbage 1
   verbose    0


P.S. in fhem wird mir angezeigt:
HM485d is running with PID 29004

wenn ich unter top nachschaue ist der Prozess nicht da!

   44 root      20   0       0      0      0 S  2,3  0,0   4:21.79 kworker/0:1                                                                                                                           
28506 fhem      20   0  198060 103032   3920 S  1,0  1,3   0:01.67 perl                                                                                                                                 
28472 fhem      20   0  199384 105996   5508 S  0,7  1,3   0:16.18 perl                                                                                                                                 
29178 root      20   0   42824   3620   2992 R  0,7  0,0   0:01.59 top                                                                                                                                   
  374 avahi     20   0   47256   3700   3164 S  0,3  0,0   0:05.71 avahi-daemon                                                                                                                         
    1 root      20   0  138904   6804   5340 S  0,0  0,1   0:02.34 systemd                                                                                                                               
    2 root      20   0       0      0      0 S  0,0  0,0   0:00.02 kthreadd                                                                                                                             
    3 root      20   0       0      0      0 S  0,0  0,0   0:00.29 ksoftirqd/0                                                                                                                           
    5 root       0 -20       0      0      0 S  0,0  0,0   0:00.00 kworker/0:0H                                                 

Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

StefanStrobel

Ich würde das ganze auf jeden Fall erst mal auf einem System ohne die Homematik-Komponenten testen.
Solange alle 2 Sekunden im Log steht, dass die rs485-Schnittstelle sich disconnected, ist vermutlich etwas auf der untersten Ebene faul.

Zudem könntest Du den rs485-Adapter mal an einen PC mit einem anderen Modbus-Master-Simulator hängen und von dort ein Register abfragen. Dann bist Du sicher, dass kein anderer Dienst sich die Schnittstelle klaut und siehst, ob Dein Zähler überhaupt reagiert.

Gruss
   Stefan

franky08

ZitatIch würde das ganze auf jeden Fall erst mal auf einem System ohne die Homematik-Komponenten testen.

Hallo Stefan, auf dem System läuft nur HMCCUDEV für eine CCU2 und LaCrosse.

Mal sehen...
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

R1F800

Zitat von: StefanStrobel am 26 November 2019, 18:39:27
Ich würde das ganze auf jeden Fall erst mal auf einem System ohne die Homematik-Komponenten testen.
Solange alle 2 Sekunden im Log steht, dass die rs485-Schnittstelle sich disconnected, ist vermutlich etwas auf der untersten Ebene faul.

Zudem könntest Du den rs485-Adapter mal an einen PC mit einem anderen Modbus-Master-Simulator hängen und von dort ein Register abfragen. Dann bist Du sicher, dass kein anderer Dienst sich die Schnittstelle klaut und siehst, ob Dein Zähler überhaupt reagiert.

Gruss
   Stefan

Hallo Stefan,
besteht die Möglichkeit das Modbus Modul direkt mit dem RS485 (RX / TX / Pin n) kommunizieren zu lassen?
also über UART am PIN 8 / 10 / 12 ?
vG
Ingo

StefanStrobel

Hallo Ingo,

was meinst Du mit "direkt"?
Das Modul verwendet DevIO für die Kommunikation und das geht über die üblichen Betriebssystem-Funktionen.
Falls Du statt über /dev/ttyUSBx direkt die Hardware / Pins ansprechen möchtest, dann geht das so nicht.

Gruss
   Stefan

R1F800

Ja genau,
Ich würde gerne direkt auf die Hardware.

Was genau müsste dann gemacht werden?
Gibt es noch kein passendes Modul für UART über TX RX?