Modbus Kommunikation mit Pichler LG 150 Wohnraumlüftung

Begonnen von fhainz, 16 Dezember 2017, 18:05:22

Vorheriges Thema - Nächstes Thema

fhainz

Hallo!

In meiner Wohnung ist eine LG 150 Komfort Wohnraumlüftung der Firma Pichler verbaut. Diese Lüftungsanlage bietet auch die möglichkeit zur Steuerung via Modbus.
Das Modbus Device ist eingerichtet und meldet opened. ModbusAttr Device ist ebenso eingerichtet und meldet auch opened. Jetzt hab ich versucht einige Werte aus der Anlage zu lesen. Leider hat das bisher noch nicht funktioniert. Ich hab hier eine Tabelle mit dem Modbus Protokoll der Anlage aber bei der Register Number stehe ich an.

Auszug:

Istwerte:
Register number      Data  description R/W Length Units Valid response Remarks
3x0000 PIC_AD_T2 R 1 UINT16 0-4095 Raw AD value from T2
3x0001 PIC_AD_T1 R 1 UINT16 0-4095 Raw AD value from T1
3x0002 PIC_AD_0_10Vin_S1 R 1 UINT16 0-4095 Raw AD value from S1
3x0003 PIC_AD_0_10Vin_S2 R 1 UINT16 0-4095 Raw AD value from S2


Istwerte:
Register number     Data  description R/W Length Units Valid response Remarks  Min Max Default Decimal
4x0001 001.  Sommer_Winter_Betrieb (1=Sommer, 2=Winter) R/W 1 UINT16 collom i-j Write with function 6 1 2 1 0
4x0002 002.  Luftstufe (0=Stdby, 1=LS1, 2=LS2, 3=LS3, 4=Grundlüftung) R/W 1 UINT16 collom i-j Write with function 6 0 4 0 0
4x0003 003.  EWT_Sommer R/W 1 UINT16 collom i-j Write with function 6 0 2000 1000 1


Ich hab es mit
attr modbusAttr obj-i1-reading temperatureFrischluft
attr modbusAttr obj-i3001-reading temp1

versucht, aber ich befürchte ich mach da etwas grundsätzlich falsch. Kann mit jemand weiterhelfen?

Grüße

StefanStrobel

Vermutlich sind die Adressen hexadezimal...

Gruss
    Stefan

fhainz

#2
Hallo Stefan,

das habe ich auch schon vermutet. Aber ich schaffe es einfach nicht einen Wert aus der Anlage zu lesen.
Ich habe es mit
attr modbusAttr obj-c0001-reading temp1
attr modbusAttr obj-c30001-reading temp11
attr modbusAttr obj-d0001-reading temp2
attr modbusAttr obj-d30001-reading temp21
attr modbusAttr obj-h0001-reading temp3
attr modbusAttr obj-h30001-reading temp31
attr modbusAttr obj-i0001-reading temp4
attr modbusAttr obj-i30001-reading temp41

versucht, aber leider nichts.

Im Protokoll steht als Modbus Adresse 20. Das müsste im Modul die ID sein, richtig?

Ich hänge mal meine Definitionen und das pdf an das ich habe, vielleicht kannst du dir daraus einen Reim machen.

Internals:
   BUSY       0
   DEF        /dev/ttyUSB0@19200
   DeviceName /dev/ttyUSB0@19200
   FD         10
   NAME       ModBusLine
   NR         19
   PARTIAL
   STATE      opened
   TYPE       Modbus
   Readings:
     2017-12-18 20:19:14   state           opened
   Defptr:
     20:
       DEF        20 60
       DEST
       INTERVAL   60
       IODev      ModBusLine
       MODBUSID   20
       ModuleVersion 3.5.12 - 06.01.2017
       NAME       modbusAttr
       NOTIFYDEV  global
       NR         20
       NTFY_ORDER 50-modbusAttr
       PROTOCOL   RTU
       STATE      opened
       TRIGGERTIME 1513703546.95587
       TRIGGERTIME_FMT 2017-12-19 17:12:26
       TYPE       ModbusAttr
       Lastread:
   Helper:
     buffer
Attributes:



Internals:
   DEF        20 60
   DEST
   INTERVAL   60
   IODev      ModBusLine
   MODBUSID   20
   ModuleVersion 3.5.12 - 06.01.2017
   NAME       modbusAttr
   NOTIFYDEV  global
   NR         20
   NTFY_ORDER 50-modbusAttr
   PROTOCOL   RTU
   STATE      opened
   TRIGGERTIME 1513703546.95587
   TRIGGERTIME_FMT 2017-12-19 17:12:26
   TYPE       ModbusAttr
   Lastread:
Attributes:
   IODev      ModBusLine
   enableControlSet 1
   obj-c0001-reading temp1
   obj-c30001-reading temp11
   obj-d0001-reading temp2
   obj-d30001-reading temp21
   obj-h0001-reading temp3
   obj-h30001-reading temp31
   obj-i0001-reading temp4
   obj-i30001-reading temp41
   userattr   IODev enableControlSet obj-c0001-reading obj-c30001-reading obj-d0001-reading obj-d30001-reading obj-h0001-reading obj-h0044-reading obj-h256-expr obj-h30-expr obj-h30-reading obj-h30001-reading obj-i0001-reading obj-i0044-reading obj-i196609-reading obj-i30-expr obj-i30-reading obj-i30001-reading obj-i3030-reading obj-i354-reading



Grüße

Edit:
Kann ich irgendwie sehen ob überhaupt eine Verbindung aufgebaut werden konnte, also auch ob die ID richtig ist?

StefanStrobel

Hallo,

leider kann man bei Modbus-RTU über eine serielle Leitung nicht erkennen, ob "eine Verbindung aufgebaut wurde", da es kein Protokoll zum Aufbau der Verbindung gibt. Entweder der Modbus-Slave bekommt und versteht eine Anfrage und er Antwortet darauf, oder er tut es nicht.
Das macht die Fehlersuche recht unangenehm.

Das Problem kann auf mehreren Ebenen liegen:

1) physische Verbindung: die Kabel können falsch verbunden sein, die Terminierung stimmt nicht (meist haben die RS485-Adapter schon einen Abschlusswiderstand eingebaut und ein zusätzlicher Widerstand behindert dann die Kommunikation), Anschluss an den falschen Klemmen des Slaves etc.

2) serielles Protokoll: Evt. stimmt die Baudrate nicht, oder Dein Gerät verwendet eine andere Parität etc. Hast Du es mal mit even parity versucht?

3) falsche Modbus ID

4) falsche function codes oder auch mal vom Gerät falsch implementierte function codes

5) falsche Register-Adressen

usw.

Du kannst leider nur alle Kombinationen ausprobieren...
Ich würde mit der seriellen Kommunikation anfangen.

Gruss
   Stefan

gelbetomate

bist du damit weiter gekommen?

Für mich wäre interessant wie du das am Leistungsteil angeschlossen hast. Ich habe ein LG250 und habe einen RS485 auf Netzwerk Umsetzer parallel zum Display gehängt und bekomme auch eine Antwort vom Bus, es steht allerdings auch nicht sinnvolles drin und ich bin mir nicht sicher ob das Bedienteil antwortet oder das Leistungsteil.

Vielleicht können wir uns gegenseitig weiterhelfen?

fhainz

Hallo!

Sry, für die späte Antwort, der thread ist bei mir irgenwie untergegangen.

@gelbetomate
Nein. Leider bin ich noch nicht weitergekommen, hatte aber bisher keine Zeit mich intensiv mit dem Thema zu beschäftigen.
Mein Ethernet Kabel habe ich mit Schraubklemmen an einer Steckverbindung anklemmen können. Der Stecker kam dann wieder auf die Platine. Leider hab ich kein Foto von der Platine, nur eins vom Stecker.

@Stefan
Zu 1:
Einen Abschlusswiderstand hab ich nicht verbaut. Die verkabelung hab ich beim Aufbau mehrfach gecheckt aber natürlich könnte mir trotzdem ein Fehler unterlaufen sein. Werde ich nochmals überprüfen!

Zu 2:
Die Baudrate habe ich aus dem pdf des Hersteller. An even parity könnte ich mich nicht erinnern? Was ist das?

Zu 3, 4, 5:
Das hab ich auch alles aus dem pdf des Herstellers. Ich werde das aber alles nochmal kontrollieren und mich nochmal melden. Ist ja leider schon ein paar Monate her.

Grüße

gelbetomate

Hallo!

Danke für das Bild, am Stecker sehe ich schon, dass du das LG150 mit MODBUS RTU Schnittstelle hast. Das ist bei mir nicht so. Habe noch eine ältere Steuerungselektronik und wahrscheinlich auch ein anderes Protokoll und da suche ich im Moment aber die Infos sind rar. Da können wir uns eher nicht so viel helfen.

Bei MODBUS generell kannst/musst du die Parity (Parität) einstellen Even/Odd (Gerade/Ungerade), in deiner Definition habe ich das nicht gefunden, das wird Stefan meinen:

von hier https://wiki.fhem.de/wiki/ModbusAttr :
define <iodevice> Modbus /dev/device@baudrate,bits,parity,stop

Grüße