Modbus: Register 0 im Funktionblock 4 auslesen

Begonnen von markue72, 17 August 2015, 09:51:42

Vorheriges Thema - Nächstes Thema

markue72

Guten zusammen

ich versuche gerade einen Klimafühler mit CO2, Feutigkeit und Temperatur über Modbus in fhem einzubinden .
Der Klimafühler ist über ein USb to Rs485 adapter an einem Rapberry pi angeschlossen

(http://www.voelkner.de/products/556642/USB-2.0-Adapter-1x-RS485-Stecker-1x-USB-2.0-Stecker-A-Weiss-Digitus.html?ref=43&products_model=V570921&gclid=CjwKEAjwjMauBRDH-bOCo56b13wSJABA2-HvmsiTqvH6hhl2sFVhYDaeuBHeQcjParVV57MD_4kfgRoCbIfw_wcB)

Die Datenbelegung im Modbus sieht wie folgt aus (Siehe auch Anhang)  =>

Default

Starting

Register

Decimal                       Data Description             Function    Read/Write   Length       Format             Valid Response

0                                  Co2 Measurement                 4                R            2          Float inverse           0~2000 ppm

2                                 Temp. Measurement               4                R            2          Float inverse           0.0~50.0 °C

4                                 Humi. Measurement                4                R            2          Float inverse          0.1~100.0 RH%


Die Kommunikation erfolgt über das Modul Modbus und ModbusAttr :

Auszug aus der fhem.cfg  :
define ModBusLine3 Modbus /dev/ttyUSB0@19200,8,N,2
define SVG_FileLog_R5_1 SVG FileLog_R5:SVG_FileLog_R5_1:CURRENT
define test readingsGroup Temp
define R5 ModbusAttr 5 30
attr R5 userattr IODev dev-i-defFormat dev-i-defLen dev-i-defPoll dev-i-defUnpack dev-i-read obj-i1-reading obj-i2-reading obj-i4-reading verbose
attr R5 IODev ModBusLine3
attr R5 dev-i-defFormat %.1f
attr R5 dev-i-defLen 2
attr R5 dev-i-defPoll 1
attr R5 dev-i-defUnpack f>
attr R5 dev-i-read 4
attr R5 obj-i1-reading CO2
attr R5 obj-i2-reading Temp
attr R5 obj-i4-reading HUM
attr R5 verbose 5

Für die Register 2 und 4 also Temperatur und Feuchte funktioniert alles super . Der Versuch das Register 0 anzusprechen erzeugt aber eine Fehlermeldung .  :-[

Funktioniert wahrscheinlich wegen
dieser Definition nicht .
obj-[cdih][1-9][0-9]*-reading


Meine Frage : Gibt es eine andere Möglichkeit das Register 0 anzusprechen ? Oder einen Trick?
Bechäftige mich das erstmal mit Modbus . VLt übersehe ich auch was .
Über Hilfe und Anregungen würde ich mich sehr freuen . Danke

Beste Grüße
Markus 

StefanStrobel

Hallo Markus,

das ist ein Fehler im Modul. Bisher hatte ich es nur mit Geräten zu tun, deren Adressen deutlich größer als 0 waren. Anbei eine korrigierte Version zum Testen. Da sollte auch ein Objekt mit Adresse 0 gehen.

Gruss
    Stefan

markue72

Hallo Stefan


vielen Dank für das Update . Eingepielt und lief sofort  :). Die Adresse 0 wurde sofort ausgelesen . Werde jetzt 5 diesen Fühler anschließen und die Werte mitschreiben . Also gibt es qusi ein Langzeittest  :)

Vielen Dank nochmal und Beste Grüße

Markus

StefanStrobel

Wunderbar.
Dann warte ich mal noch ein bischen auf Dein Testergebnis und checke dann die neue Version ein.

Gruss
    Stefan

markue72

#4
Hy

Ich versuche 5 Klimafühler (Temperatur, Feuchte und CO2)  parrallel auszulesen . Der erste Fühler hat die Modbus- Adresse 1 der 2. die 2 usw.
Einzel funktioniert die Auslesung super aber soblad ich die Fühelr parrallel anschließe gibt es keine Daten mehr .

Ich habe ein Modbusdevice angelegt und für die 5 Fühler die entsprechenden Modbusattr.

define ModBusLine3 Modbus /dev/ttyUSB1@19200

define R_Fuehler_020 ModbusAttr 3 300
define R_Fuehler_023 ModbusAttr 3 300

usw.


Hier die fhem.cfg:

Vlt hat jeman eine Idee . Über Antworten würde ich mich freuen . Danke

VG Markus

attr global userattr cmdIcon devStateIcon devStateStyle icon sortby webCmd widgetOverride
attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global motd SecurityCheck:\
\
WEB,WEBphone,WEBtablet has no basicAuth attribute.\
telnetPort has no password/globalpassword attribute.\
\
Restart FHEM for a new check if the problem is fixed,\
or set the global attribute motd to none to supress this message.\

attr global statefile ./log/fhem.save
attr global updateInBackground 1
attr global verbose 3

define telnetPort telnet 7072 global

define WEB FHEMWEB 8083 global
attr WEB editConfig 1

define WEBphone FHEMWEB 8084 global
attr WEBphone stylesheetPrefix smallscreen

define WEBtablet FHEMWEB 8085 global
attr WEBtablet stylesheetPrefix touchpad

# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog

define autocreate autocreate
attr autocreate filelog ./log/%NAME-%Y.log

define eventTypes eventTypes ./log/eventTypes.txt

# Disable this to avoid looking for new USB devices on startup
define initialUsbCheck notify global:INITIALIZED usb create
define ModBusLine3 Modbus /dev/ttyUSB0@19200,8,N,2
define SVG_FileLog_R5_1 SVG FileLog_R5:SVG_FileLog_R5_1:CURRENT
define test readingsGroup Temp
define R_Fuehler_020 ModbusAttr 5 30
attr R_Fuehler_020 userattr IODev dev-i-defFormat dev-i-defLen dev-i-defPoll dev-i-defUnpack dev-i-read obj-i0-reading obj-i1-reading obj-i2-reading obj-i4-reading verbose
attr R_Fuehler_020 IODev ModBusLine3
attr R_Fuehler_020 dev-i-defFormat %.1f
attr R_Fuehler_020 dev-i-defLen 2
attr R_Fuehler_020 dev-i-defPoll 1
attr R_Fuehler_020 dev-i-defUnpack f>
attr R_Fuehler_020 dev-i-read 4
attr R_Fuehler_020 obj-i0-reading CO2
attr R_Fuehler_020 obj-i2-reading Temp
attr R_Fuehler_020 obj-i4-reading HUM
attr R_Fuehler_020 verbose 5
define FileLog_R_Fuehler_020 FileLog ./log/R_Fuehler_020-%Y.log R_Fuehler_020|R_Fuehler_020:CO2:.*|R_Fuehler_020:HUM:.*|R_Fuehler_020:Temp:.*
define FileLog_Temperatur FileLog /opt/fhem/log/Temperatur-%Y-%m.log R5:Temp:.*|R_Fuehler_020:Temp:.*|Temperatur
define FileLog_Feuchte FileLog /opt/fhem/log/Feuchte-%Y-%m.log Feuchte|R5:HUM:.*|R_Fuehler_020:HUM:.*
define FileLog_CO2 FileLog /opt/fhem/log/CO2-%Y-%m.log CO2|R5:CO2:.*|R_Fuehler_020:CO2:.*
define SVG_FileLog_CO2_1 SVG FileLog_CO2:SVG_FileLog_CO2_1:CURRENT
attr SVG_FileLog_CO2_1 room plot
define SVG_FileLog_Feuchte_1 SVG FileLog_Feuchte:SVG_FileLog_Feuchte_1:CURRENT
attr SVG_FileLog_Feuchte_1 room plot
define SVG_FileLog_Temperatur_1 SVG FileLog_Temperatur:SVG_FileLog_Temperatur_1:CURRENT
attr SVG_FileLog_Temperatur_1 room plot
define R_Fuehler_026 ModbusAttr 1 300
attr R_Fuehler_026 userattr IODev dev-i-read obj-i0-reading obj-i2-reading obj-i4-reading verbose
attr R_Fuehler_026 IODev ModBusLine3
attr R_Fuehler_026 dev-i-read 4
attr R_Fuehler_026 obj-i0-reading CO2
attr R_Fuehler_026 obj-i2-reading Temp
attr R_Fuehler_026 obj-i4-reading HUM
attr R_Fuehler_026 verbose 5
define R_Fuehler_025 ModbusAttr 2 300
attr R_Fuehler_025 userattr IODev dev-i-read obj-i0-reading obj-i2-reading obj-i4-reading verbose
attr R_Fuehler_025 IODev ModBusLine3
attr R_Fuehler_025 dev-i-read 4
attr R_Fuehler_025 obj-i0-reading CO2
attr R_Fuehler_025 obj-i2-reading Temp
attr R_Fuehler_025 obj-i4-reading HUM
attr R_Fuehler_025 verbose 5
define R_Fuehler_027 ModbusAttr 3 300
attr R_Fuehler_027 userattr IODev dev-i-read obj-i0-reading obj-i2-reading obj-i4-reading verbose
attr R_Fuehler_027 IODev ModBusLine3
attr R_Fuehler_027 dev-i-read 4
attr R_Fuehler_027 obj-i0-reading CO2
attr R_Fuehler_027 obj-i2-reading Temp
attr R_Fuehler_027 obj-i4-reading HUM
attr R_Fuehler_027 verbose 5
define R_Fuehler_023 ModbusAttr 4 300
attr R_Fuehler_023 userattr IODev dev-i-defFormat dev-i-defLen dev-i-defPoll dev-i-defUnpack dev-i-read obj-i0-reading obj-i2-reading obj-i4-reading verbose
attr R_Fuehler_023 IODev ModBusLine3
attr R_Fuehler_023 dev-i-defFormat %.1f
attr R_Fuehler_023 dev-i-defLen 2
attr R_Fuehler_023 dev-i-defPoll 1
attr R_Fuehler_023 dev-i-defUnpack f>
attr R_Fuehler_023 dev-i-read 4
attr R_Fuehler_023 obj-i0-reading CO2
attr R_Fuehler_023 obj-i2-reading Temp
attr R_Fuehler_023 obj-i4-reading HUM
attr R_Fuehler_023 verbose 5
define SVG_FileLog_R_Fuehler_020_1 SVG FileLog_R_Fuehler_020:SVG_FileLog_R_Fuehler_020_1:CURRENT
define FileLog_Taupunkt FileLog /opt/fhem/log/Taupunkt-%Y-%m.log R_Fuehler_020:dewpoint:.*|Taupunkt
define dew_all dewpoint dewpoint .* Temp HUM dewpoint
attr dew_all absFeuchte 1
define SVG_FileLog_Taupunkt_1 SVG FileLog_Taupunkt:SVG_FileLog_Taupunkt_1:CURRENT
attr SVG_FileLog_Taupunkt_1 room plot
define FileLog_abs_HUM FileLog /opt/fhem/log/abs_HUM-%Y-%m.log R_Fuehler_020:absFeuchte:.*|abs_HUM
define SVG_FileLog_abs_HUM_2 SVG FileLog_abs_HUM:SVG_FileLog_abs_HUM_2:CURRENT
attr SVG_FileLog_abs_HUM_2 room plot

StefanStrobel

Hallo Markus,

hast Du schon eingegrenzt ob es wirklich an der Software liegt und nicht an der Verkabelung?
Was passiert wenn Du alles angeschlossen hast, aber in Fhem nur einen Sensor abfragst?
Wie hast Du denn alle angeschlossen?
Als Bus mit Terminierung am Ende oder tatsächlich parallel?

Gruss
    Stefan

markue72

Hallo Stefan

an der Verkabelung (Leitungsbrüche)  liegt es nicht. Ich konnte bei den einzelnen Fühler über einen Software Master die Adresse ändern .
Es liegt wahrscheinlich an der Art der Verkabelung da ich die Fühler parallel angeschlossen habe . Das das nicht die günstigste Arte der Verkabelung ist, war mir nicht bewußt . Nach Deinem Hinweis und einer kurzen Google Recherche ist es klar  :)
Aber eine Frage bleibt noch : Muß zwingend ein Abschlusswiederstand gesetzt werden ?

Beste Grüße
Markus

StefanStrobel

Hi Markus,

Ohne Bus-Verkabelung und ohne Abschlusswiderstände kann es eben zu Problemen kommen.
Das meinte ich mit Verkabelung. Ob / wie es bei Dir trotzdem mit der Stern-Verkabelung gehen könnte, kann ich Dir leider auch nicht sagen.

Gruss
    Stefan

markue72

Hallo Stefan

danke für den Hinweis.  Werde es ausprobieren . Sowohl
mit Busverkabelung sowie Stern Verkabelung. 

Grüße
Markus