Neue Versionen und Support zum Modbus-Modul

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

Vorheriges Thema - Nächstes Thema

Mad-at

Lieber Stefan,

vielen Dank! Ja, ausprobiert, "unpack L>" funktioniert großartig, Danke!

LG,
Matthias

Tueftler1983

Darf ich fragen welche Hardware ich am.Raspberry PI brauche um einen Zähler mit Modbus RTU an Fhem anzubinden?

Adimarantis

Ein RS485 Modul oder USB Adapter.
Ich hab sowas an meinen Raspi angeschlossen, was prima funktioniert:
https://www.aliexpress.com/item/1005001346792286.html
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

StefanStrobel

Wenn es Modbus-RTU über RS485 ist, dann gibt es hunderte USB-zu-RS485-Adapter, die mal besser mal schlechter funktionieren. Ein (ggf. auch überflüssiges) Qualitätsmerkmal wäre dabei eine galvanische Trennung.
Manche Geräte machen aber auch Modbus-RTU über RS232, dann ist es ein normaler RS232-Adapter.

Gruss
   Stefan

Aurel_B

Ich habe 3 der "Waveshare Industrial USB TO RS232/RS485/TTL Isolated Converter" https://www.aliexpress.com/item/1005004359061166.html seit über einem Jahr im Einsatz (an einem Raspberry), funktionieren einwandfrei. Sind etwas teurer als normale USB-to-RS485 Adapter.
Was ich darauf achten würde: ganz billige Adapter haben keine eindeutige USB ID, das heisst sie bekommen eventuell eine andere Gerätekennung wenn du sie an einem anderen USB Port ansteckst. Die Waveshare Adapter haben eine Kennung, d.h. man kann sie via "/dev/serial/by-id" finden und so in FHEM einbinden. Dann spielt es keine Rolle, an welchem USB Port sie hängen

Sonnenwolf

Hallo Stefan,

ich möchte mir ein ModBus Relay bauen auf das ich per loopbach 127.0.0.1 zugreifen kann. Hintergrund ist dass ich Aurora/ABB/Fimer Wechselrichter und CG-Zähler per Modbus USB-RS485- Adapter auslesen möchte wobei ich einen RPI mit FHEM und SolarView instalation nutze. Aktuel greift Solarview direkt auf den RS485-Adapter zu doch möchte ich gerne die CG-Zähler per ModBus-TCP einem anderen Logger verfügbar machen.
Meine Idee ist ich binde den RS485-Adapter in FHEM ein und erstelle ein Relay auf das ich per TCP zugreifen kann. Problem ist wenn ich in Solarview das loop back einstelle wird FHEM total überlastet so dass auch kein log mehr geschrieben wird. Bei externen zugriff ist das kein problem.

Mein Define:
defmod MB_485 Modbus /dev/ttyUSB1@19200,8,N,1
defmod MB_WR1 ModbusAttr 1 0
defmod MBBridge_WR1 ModbusAttr 1 relay 127.0.0.1:5021 RTU to MB_WR1
defmod MB_WR2 ModbusAttr 2 0
defmod MBBridge_WR2 ModbusAttr 2 relay 127.0.0.1:5021 RTU to MB_WR2
.
.
.
Mach ich hier grundsätzlch etwas falsch oder ist das nicht ohne tiefere eingriffe möglich?
Ich habe auch schon mit den IP-Adressen gespielt zB. "global" oder die des FHEM servers.



Hausrobot

Hallo ihr,

ich habe einen Solaredge E30K Wechselrichter und eine Solaredge-Wallbox (aka keba P30x). Leider lässt der SE WR nur einen Modbus TCP-Client zu. Proof: Greife ich via FHEM zu, dann kann ein SolarMon (geniale App, Handy) nicht mehr auf den Modbus zugreifen. 3 SolarMon parallel dagegen schon.

Nun ist es so, dass aktuell das SE-eigene Überschussladen nur bis zu WR-Typ SE15k unterstützt wird. Das SE30k Firmware-Update offen  :'( .

Lösung? Vielleicht funktioniert das ÜS-Laden mit https://github.com/evcc-io/evcc . Dazu müsste ich aber eine zweiten Modbus-Client auf den SE30k schalten dürfen. NOP.

Gibt es einen Modbus TCP-Proxy (Multiclient)? Im Modul hier habe ich nichts gefunden. Und https://github.com/3cky/mbusd ist ein Protokollmapper TCP RTU, wenn ich es richtig verstehe.

Gesucht:
SE WR (Modbus TCP)
 ∟ modbus-Proxy
     ⊢ FHEM
     ⊢ EVCC
     ⊢ SolarMon
     ⊢ ...

Weiß jemand Rat?

Viele Grüße
Hausrobot

StefanStrobel

Hallo Sonnenwolf,

Stell doch mal verbose auf 5 und starte dann erst Solarview. bevor nichts mehr geht, muss ja etwas im Log sichtbar sein.

Gruss
   Stefan

StefanStrobel

Zitat von: Hausrobot am 16 Mai 2023, 21:44:29Gibt es einen Modbus TCP-Proxy (Multiclient)? Im Modul hier habe ich nichts gefunden. Und https://github.com/3cky/mbusd ist ein Protokollmapper TCP RTU, wenn ich es richtig verstehe.

Hallo Hausrobot,

Du kannst Fhem als Modbus-Relay verwenden. Das evcc-Szenario kam hier auch schon mal vor - müsste im Forum zu finden sein...

Gruss
   Stefan

holle75

Ihr Lieben, Mmh, gedacht Modbus bekomme ich jetzt easy hin. Stefan hatte mir ja schonmal geholfen, kann man verstehen und adaptieren. Denkste.

4 Stunden den Wechselrichter/RCC gequält. Den Modbus-Adapter (die Extra-Hardware am Wechselrichter) sogar mehrmals zum Neustart verleitet, so falsch müssen meine Anweisungen für das arme Gerät sein ;)

Andere Readings vom Wechselrichter bekomme ich wunderbar rein

So frage ich als Beispiel verkürzt Infos ab

defmod Studer485_XTM ModbusAttr 43 7
attr Studer485_XTM dev-defLen 2
attr Studer485_XTM dev-defShowGet 1
attr Studer485_XTM dev-defUnpack f>
attr Studer485_XTM dev-h-read 3
attr Studer485_XTM dev-h-write 16
attr Studer485_XTM dev-i-read 4
attr Studer485_XTM dev-timing-timeout 1
attr Studer485_XTM obj-i16-format %.2f
attr Studer485_XTM obj-i16-poll 1
attr Studer485_XTM obj-i16-reading Low_Voltage_disconnect

und das habe ich minimalst für die Messages versucht (andere ID weil anderes Gerät im Verbund)

defmod Studer485_Gateway ModbusAttr 33 55
attr Studer485_Gateway dev-defPoll 1
attr Studer485_Gateway dev-defShowGet 1
attr Studer485_Gateway dev-i-read 4
attr Studer485_Gateway dev-timing-timeout 1
attr Studer485_Gateway event-on-change-reading Last_Message
attr Studer485_Gateway group Xtender
attr Studer485_Gateway obj-i0-len 1
attr Studer485_Gateway obj-i0-reading Message_Count_must_read_first
attr Studer485_Gateway obj-i2-len 4
attr Studer485_Gateway obj-i2-reading Last_Message


Nach Anleitung müsste ich nach Register 0 die 1 Abfragen. Dann bekomme ich aber bei jeder Anfrage einen Neustart des Adapters. Hab ich mal Register 2 probiert. Bekomme ich auch Antwort, aber richtig/sinnig ist die nicht. Gemein ist, dass die Messages komplett anders als alle anderen Infos/Settings gelesen/geschrieben werden. Hat einer von euch das "Prinzip Modbus RTU" verstanden und kann mir anhand des 3 Seiten-Auszugs der Anleitung sagen, was ich falsch mache? Oder ein kleiner Schubs?

Grüsse!
H.

StefanStrobel

Hallo Holle,

vermutlich musst Du nach dem Lesen von Input-Register 0 erst mal prüfen, ob auch Nachrichten zum Lesen anstehen.
Dann Input-Register 1 (nicht 2) mit Länge 4 lesen.
Was passiert denn dann?

Gruss
   Stefan

holle75

Hallo Stefan, wenn ich statt

attr Studer485_Gateway obj-i2-len 4
attr Studer485_Gateway obj-i2-reading Last_Message

attr Studer485_Gateway obj-i1-len 4
attr Studer485_Gateway obj-i1-reading Last_Message

probiere (davon ausgehend, dass "len 4" length 4 ist) macht mein Adapter (das Teil was an die Solaranlage ageschlossen ist) einen Neustart. Passend ist, dass dann der Message_Count_must_read_first runterzählt. Laut Anleitung wird die Message gelöscht wenn ausgelesen. Das macht Sinn, aber diese Neustarts können nicht richtig sein.

Wie ich das Auslesen der Messages davon abhängig machen kann, dass auch welche existieren, ist mir auch schleierhaft.

holle75

Es könnte sein, dass

1) das Teil abschmiert, weil ausgelesen wird, obwohl keine Messages da sind.

2) bekomme ich mit i1 nur immer das Reading "11" oder "54305". Allerdings hat es gerade keine Messages und ich stochere ein bißchen im Dunklen, was diese mal "11", mal "54305" bedeuten könnten.
Interessant wäre, wie ich die komplette Message entwursteln könnte. Oder es ist ein Platzhalter für keine Messages, oder, oder.
Allerdings habe ich mit i1 auch als es Messages gab dann nur eine "11" bekommen. Das könnte die ID des Gerätes sein, die die Message hinterlegt hat, aber dann müßte noch mehr Info im Reading kommen.

3) Wie kann man in Modbus ein IF THEN einbauen?

holle75

Internals:
   DEF        33 55
   FUUID      646a39ea-f33f-6bb4-d3dc-f92f7fb67885441d
   IODev      Eastron
   Interval   55
   MODBUSID   33
   MODE       master
   MODULEVERSION Modbus 4.4.02 - 31.3.2021
   NAME       Studer485_Gateway
   NOTIFYDEV  global
   NR         591
   NTFY_ORDER 50-Studer485_Gateway
   PROTOCOL   RTU
   STATE      inactive
   TYPE       ModbusAttr
   FRAME:
   OLDREADINGS:
   READ:
   READINGS:
     2023-05-22 15:21:50   Last_Message    11
     2023-05-22 15:29:02   Message_Count_must_read_first 14
     2023-05-22 15:29:14   state           inactive
   REMEMBER:
     lrecv      1684762143.34253
     lsend      1684762143.3173
   gotReadings:
     Message_Count_must_read_first 14
   lastRead:
     i0         1684762142.69145
     i1         1684761710.9561
     i2         1684688427.30298
Attributes:
   dev-defPoll 1
   dev-defShowGet 1
   dev-defUnpack n
   dev-i-read 4
   dev-timing-timeout 1
   disable    0
   group      Xtender
   obj-i0-len 1
   obj-i0-reading Message_Count_must_read_first
   obj-i1-len 4
   obj-i1-reading Last_Message

inactive, weil ich mir die Messages "aufheben" möchte um weiter zu probieren. "11" könnte die ID des Wechselrichters sein. Die "54305" scheint zu kommen, wenn es keine Messages mehr gibt.

Es scheint er liest zwei Register statt 4? Könnte bedeuten, die anderen zwei sind leer? Das Ergebnis von i1 und i2 wird in ein Ergebnis gepackt? i2 sollte eigentlich die gesuchte Information (Errorcode) enthalten.

fireball

#1139
Moinsen und Frohe Pfingsten euch...

ich habe seit kurzem ein Problem mit meinem ModbusAttr Device, um meinen SunnyBoy 2.5 auszulesen.
Das auslesen selber klappt, aber im Sekundentakt wird connected und disconneced.

Ich habe mich erst gewundert, warum mein eigener Status in FHEM nicht mehr angezeigt wird, aber dann habe ich gesehen, dass permanent open/connected/disconneced im state steht.
Der Event-Monitor sagt:
2023-05-28 08:05:14 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:14 ModbusAttr SunnyBoy Temperatur: 0
2023-05-28 08:05:14 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:15 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:15 ModbusAttr SunnyBoy Netzstrom_Phase_L2: 0.00
2023-05-28 08:05:15 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:16 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:33 ModbusAttr SunnyBoy Status: 0
2023-05-28 08:05:33 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:33 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:33 ModbusAttr SunnyBoy Wirkleistung_Begrenzung: 0
2023-05-28 08:05:33 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:34 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:35 ModbusAttr SunnyBoy Gesamtertrag: 122
2023-05-28 08:05:35 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:36 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:36 ModbusAttr SunnyBoy Tagesertrag: 0.000
2023-05-28 08:05:36 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:37 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:37 ModbusAttr SunnyBoy DC_Strom_Eingang: 0.00
2023-05-28 08:05:37 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:38 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:38 ModbusAttr SunnyBoy DC_Spannung_Eingang: 0.00
2023-05-28 08:05:38 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:39 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:39 ModbusAttr SunnyBoy DC_Leistung_Eingang: 0.00
2023-05-28 08:05:39 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:40 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:40 ModbusAttr SunnyBoy Wirkleistung_Phase_L2: 0
2023-05-28 08:05:40 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:41 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:41 ModbusAttr SunnyBoy Netzspannung_Phase_L2: 0.00
2023-05-28 08:05:41 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:42 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:42 ModbusAttr SunnyBoy Nennfrequenz: 0.00
2023-05-28 08:05:42 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:43 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:43 ModbusAttr SunnyBoy Wirkleistung_Max: 0
2023-05-28 08:05:43 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:44 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:44 ModbusAttr SunnyBoy Temperatur: 0
2023-05-28 08:05:44 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:45 ModbusAttr SunnyBoy CONNECTED
2023-05-28 08:05:45 ModbusAttr SunnyBoy Netzstrom_Phase_L2: 0.00
2023-05-28 08:05:45 ModbusAttr SunnyBoy DISCONNECTED
2023-05-28 08:05:46 ModbusAttr SunnyBoy CONNECTED

Ich sehe aber auch, dass pro Abfrage eines Wertes des SunnyBoys hier sogar ein reconnect erfolgt, ansonsten scheint er im opened Status zu bleiben.

Anbei mal mein Device... lief bisher einwandfrei...

Internals:
  DEF        3  30  192.168.178.7:502  TCP
  DevIoJustClosed 1
  DeviceName 192.168.178.7:502
  EXPECT    idle
  FUUID      608005a6-f33f-0804-ef70-a711145ff3715ef4
  IODev      SunnyBoy
  Interval  30
  LASTOPEN  1685253194.75924
  LeadingZeros 1
  MODBUSID  3
  MODE      master
  MODULEVERSION Modbus 4.4.14 - 30.1.2023
  NAME      SunnyBoy
  NOTIFYDEV  global
  NR        596
  NTFY_ORDER 50-SunnyBoy
  PROTOCOL  TCP
  STATE      disconnected
  TCPConn    1
  TYPE      ModbusAttr
  devioLoglevel 3
  eventCount 271355
  nextOpenDelay 60
  nextQueueRun 1685253195.81792
  OLDREADINGS:
  QUEUE:
    HASH(0x7febf80)
    HASH(0x806f2c0)
    HASH(0x7f90f98)
    HASH(0x8019c30)
    HASH(0x8008058)
  READ:
    BUFFER   
  READINGS:
    2023-05-28 07:06:38  DC_Leistung_Eingang 159.00
    2023-05-28 07:07:59  DC_Spannung_Eingang 210.21
    2023-05-28 07:08:35  DC_Strom_Eingang 0.77
    2023-05-28 07:06:34  Gesamtertrag    8025288
    2023-05-28 07:06:41  Nennfrequenz    49.99
    2021-04-23 08:09:54  Nennleistung_im_Zustand_Ok 2500
    2023-05-28 07:08:00  Netzspannung_Phase_L2 225.21
    2023-05-28 07:06:44  Netzstrom_Phase_L2 0.69
    2023-05-28 07:09:07  Status          OK
    2023-05-28 07:07:22  Tagesertrag    0.137
    2023-05-28 07:08:01  Temperatur      21
    2023-05-28 07:08:34  Wirkleistung_Begrenzung 2500
    2023-05-28 07:08:37  Wirkleistung_Max 2500
    2023-05-28 07:08:36  Wirkleistung_Phase_L2 147
    2023-05-28 07:53:14  state          disconnected
  REMEMBER:
    lid        3
    lname      SunnyBoy
    lrecv      1685253194.79929
    lsend      1685253194.77371
  defptr:
    SunnyBoy  3
  gotReadings:
  helper:
    _98_statistics EnergieManagement
  lastRead:
Attributes:
  alias      SunnyBoy
  dev-h-defExpr $val & 0x1FFFFFFF
  dev-h-defIgnoreExpr ( ( $val==536870911 ) || ( $val==2147483648 ) || ( $val==4294967295 ) || ( $val==65535 ) || ( $val==15498 ))
  dev-h-defLen 2
  dev-h-defPoll 1
  dev-h-defUnpack N
  obj-h30201-map 35:Fehler, 303:Aus, 307:OK, 455:Warnung
  obj-h30201-reading Status
  obj-h30233-reading Wirkleistung_Begrenzung
  obj-h30529-reading Gesamtertrag
  obj-h30535-expr $val/1000
  obj-h30535-format %.3f
  obj-h30535-reading Tagesertrag
  obj-h30769-expr ($val)/1000
  obj-h30769-format %.2f
  obj-h30769-reading DC_Strom_Eingang
  obj-h30771-expr ($val)/100
  obj-h30771-format %.2f
  obj-h30771-reading DC_Spannung_Eingang
  obj-h30773-format %.2f
  obj-h30773-reading DC_Leistung_Eingang
  obj-h30775-reading Wirkleistung_Phase_L2
  obj-h30785-expr $val/100
  obj-h30785-format %.2f
  obj-h30785-reading Netzspannung_Phase_L2
  obj-h30803-expr ($val  & 0x13FF) / 100
  obj-h30803-format %2.2f
  obj-h30803-reading Nennfrequenz
  obj-h30837-reading Wirkleistung_Max
  obj-h30953-expr ($val  & 0xFFFF) / 10
  obj-h30953-format %.0f
  obj-h30953-reading Temperatur
  obj-h30979-expr ($val & 0x7FFF) /1000
  obj-h30979-format %.2f
  obj-h30979-reading Netzstrom_Phase_L2
  room      ENERGIE,HWR
  stateFormat Status
<br>
Tagesertrag kw/h Momentanertrag DC_Leistung_Eingang

  verbose    5


Update:
Hier habe ich grad das gleiche Problem gefunden:
https://forum.fhem.de/index.php?topic=123012.0
Aber alles Löschen als Lösung ...