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
Vermutlich sind die Adressen hexadezimal...
Gruss
Stefan
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?
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
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?
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
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