Neues Modul für Geräte mit Modbus Schnittstelle über RS232 bzw. RS485

Begonnen von StefanStrobel, 12 Juli 2014, 14:50:22

Vorheriges Thema - Nächstes Thema

Bjoernar

Hallo,

mir ist nicht ganz klar ob das hier richtig ist aber ich versuche es mal ;

Ich lese meine Lüftungsanlage per Modbus aus, klappt soweit.
Nur möchte ich gerne den Status ändern er steht immer auf STATE: opened
Kann ich hier auch etwas anderes Übergeben? und wenn ja wie?

Gruß
Björnar

mba

Hallo Björnar,

ich habe das über ReadingsProxy gelöst.
Vielleicht hilft dir das weiter.

Grüße Marco
Tinkerboard für FHEM, Modbus RTU via RS485 mit Arduino Slaves, ZWAVE mit Razberry Modul

Bjoernar

Zitat von: mba am 20 Juni 2016, 19:27:38
Hallo Björnar,

ich habe das über ReadingsProxy gelöst.
Vielleicht hilft dir das weiter.

Grüße Marco
Hmm ich würde aber gerne den State von meinem Modul das auf Modbus zurückgreift ändern. Das state kommt momentan aus dem Modbus Modul wenn ich das richtig verstehe

wthiess

Hallo!
Ich arbeite bei meiner Systemair Lüftungsanlage VR400 nun mit ModbusAttr
läuft super. Nur habe ich seit dem einspielen der neuen Dateien ModbusAttr.pm und Modbus.pm die Fehlermeldung im
Log:
PERL WARNING: Use of uninitialized value $last in addition (+) at ./FHEM/98_Modbus.pm line 841.
Habe ich was falsch gemacht?

lg
Wolfgang

Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

oniT

Hallo Zusammen,

gibt es eigentlich die Möglichkeit das ModbusAttr auf "disable" zu setzen? Ich habe jetzt mal Testweise Geräte angebunden, wenn ich allerdings die Verbindung trenne dann müllt es mir das Logfile voll. Jetzt müsste ich ja das komplette angelegte Device wieder löschen. Oder habe ich etwas überlesen oder sehe ich den Wald vor lauter Bäumen nicht?  ???

[erledigt]
Ich habe das Attribut dev-h-defPoll auf 0 gesetzt. Damit bleiben die Meldungen aus.

Danke,

Gruß
Tino
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

wthiess

Hallo!

Kann mir jemand einen Tipp geben. Nach dem ich nun meine Systemairanlage erfolgreich mit modbusattr eingebunden habe wollte ich nun ein Thermostat  WRF06-RS485-Modbus einbinden. Leider bleibt der state immer auf open. Hier meine fhem.cfg ähnlich wie ich es mit Systemair erfolgreich gemacht habe.

Die Hardeware passt. Mit einem Windows-Tool vom Hersteller kann ich mit dem Thermostat kommunizieren.

Ich hoffe das mir jemand helfen kann.

lg
Wolfgang


#ModeBus
define VR400Mod Modbus /dev/serial/by-id/usb-FTDI_USB-RS485_Cable_FTYST3LZ-if00-port0@9600,8,E,1
attr VR400Mod room Modbus

define T_AbA ModbusAttr 2 10
attr T_AbA userattr IODev dev-c-combine dev-h-defPoll obj-h11-expr obj-h11-reading sortby stateFormat
attr T_AbA IODev VR400Mod
attr T_AbA dev-h-combine 5
attr T_AbA dev-h-defPoll 1
attr T_AbA group ModbusSystemair
attr T_AbA obj-h11-reading Raumbelegung
attr T_AbA stateFormat {sprintf("%.1f Grad", ReadingsVal($name,"Raumbelegung",0))}
attr T_AbA room Modbus


Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

pejonp

Hallo
Ich glaube du must dem Modbus noch die Schnittstelle zuweisen.
Vr400 und T_AbA sind doch glaube ich 2 verschiedene Geräte .

Pejonp
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

wthiess

Nein das passt schon so. Das erste ist der USB-Adapter.  Der läuft. Dann kommt das Thermostat, von dem ich keine Werte erhalte.
So betreibe ich meine Lüftungsanlage erfolgreich.

lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

StefanStrobel

Hallo Björnar,

die meisten setzen für solche Dinge einfach das Attribute stateFormat. Bei meiner Wärmepumpe steht das z.B. auf 
attr WP stateFormat {sprintf("%.1f Grad", ReadingsVal($name,"Temp_Wasser_Ein",0))}

Gruss
    Stefan

StefanStrobel

#249
Hallo Wolfgang,

die Perl Warnung ist ein Fehler im Modul. Ich arbeite gerade an einer neuen Version, die das neue non-Blocking TCP-Connect für Modbus-TCP unterstützt. Sobald das wieder stabil ist, poste ich eine neue Version.

Zu Deiner zweiten Frage: wenn mal etwas nicht funktioniert, hilft meist ein Block ins Log bei Verbose 5. Du kannst gerne einen Auszug aus dem Log posten.

Gruss
    Stefan

wthiess

Hallo Stefan!

Hatte im Log sowas wie CRC Fehler.
Gelöst! Habe wie in einem Bericht weiter oben bei beiden Geräten USB-Stik und Thermostat die Terminatoren deaktiviert.
Verstehe ich zwar nicht. Der Modebus sollter doch an beiden Enden Terminiert werden. Möglicherweise ist das bei 1m nicht der Fall. Ich bin schon neugierig wie es in der Praxis auf der Baustelle sein wird. Dort hängt dann das Thermostat und eine Lüftungsanlage am Bus. Länge wird dann 10m sein. Auch habe ich mir eine Relaiskarte mit Modbussteuerung bestellt. Die wird dann nochmal 40m weiter betrieben.
Trotzdem möchte ich hier einen Logauszug reinstellen. Es läuft zwar aber die Logeinträge deuten für mich auf nicht 100% ok hin. Vielleicht hilft es zwecks Weiterentwicklung.

2016.07.06 11:06:46 5: VR400Mod: raw read: 01
2016.07.06 11:06:46 5: VR400Mod: ParseFrames got: 01
2016.07.06 11:06:46 5: VR400Mod: raw read: 0302
2016.07.06 11:06:46 5: VR400Mod: ParseFrames got: 010302
2016.07.06 11:06:46 5: VR400Mod: raw read: 00
2016.07.06 11:06:46 5: VR400Mod: ParseFrames got: 01030200
2016.07.06 11:06:46 5: VR400Mod: raw read: 00
2016.07.06 11:06:46 5: VR400Mod: ParseFrames got: 0103020000
2016.07.06 11:06:46 4: VR400Mod: ParseFrames: fcode 3 from 1, data 02 calc crc = 12705, read = 0 -> mismatch! expect 3 from 1 for module Anwesenheit
2016.07.06 11:06:46 5: VR400Mod: ParseFrames got wrong crc and returns (maybe data is still incomplete)
2016.07.06 11:06:46 5: VR400Mod: raw read: b8
2016.07.06 11:06:46 5: VR400Mod: ParseFrames got: 0103020000b8
2016.07.06 11:06:46 4: VR400Mod: ParseFrames: fcode 3 from 1, data 0200 calc crc = 47344, read = 47104 -> mismatch! expect 3 from 1 for module Anwesenheit
2016.07.06 11:06:46 5: VR400Mod: ParseFrames got wrong crc and returns (maybe data is still incomplete)
2016.07.06 11:06:46 5: VR400Mod: raw read: 44
2016.07.06 11:06:46 5: VR400Mod: ParseFrames got: 0103020000b844
2016.07.06 11:06:46 4: VR400Mod: ParseFrames: fcode 3 from 1, data 020000 calc crc = 17592, read = 17592  expect 3 from 1 for module Anwesenheit
2016.07.06 11:06:46 5: Anwesenheit: ParseObj called with 0000 and start 528
2016.07.06 11:06:46 5: Anwesenheit: ParseObj ObjInfo: reading=Anwesend, unpack=n, expr=, format=, map=
2016.07.06 11:06:46 4: Anwesenheit: ParseObj for Anwesend assigns 0
2016.07.06 11:06:46 5: Triggering Anwesenheit (1 changes)
2016.07.06 11:06:46 5: Starting notify loop for Anwesenheit, first event Anwesend: 0
2016.07.06 11:06:46 5: VR400Mod: ParseFrames done, reply to fCode 3, 1 readings


lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

StefanStrobel

Hallo Wolfgang,

die CRC Fehler im Debug-Log (sieht man ja nur bei Verbose 5) sind nicht wirklich Fehler. Das Modul bekommt die Daten in kleinen Häppchen und wenn ein Frame noch nicht vollständig da ist, stimmt die CRC auch nicht. Das Modul liest dann einfach weiter und in der Regel passt die CRC sobald noch ein paar Bytes mehr angekommen sind.

Gruss
   Stefan

oniT

Hallo Stefan,

da ich mich mit dem Modul jetzt mehr und mehr auseinander setze und so langsam verstehe wie man dies konfiguriert, habe ich gleich mal eine weitere Frage bzw. Problem. Ich habe ein Gerät, wo das Schreiben von Werten nur Funktionscode 10 unterstützt. Jetzt hatte ich schon verschiedene Konfigurationen mit dem Modul ModbusAttr versucht. Leider funktioniert es nicht. Wenn ich es richtig sehe, steht auch in der Commandref nichts von FC 10. Gibt es hier trotzdem eine Möglichkeit? Im Anhang stelle ich einmal die PDF mit den Registern und der Beschreibung.

Danke,

Gruß
Tino
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

StefanStrobel

Hallo Tino,

mit Function Code 10 ist sicher 10 hex, also 16 dezimal gemeint ("write multiple holding reigisters").
Der ist im Modul implementiert. Probier mal den. 10 dezimal zum Schreiben kann ich mir eigentlich nicht vorstellen (siehe Modbus Standard).

Gruss
    Stefan

StefanStrobel

#254
Hallo,

anbei nochmal eine neue Version mit folgenden Erweiterungen:

- Nonblocking Open und Reconnect bei TCP Verbindungen
- Neues Attribut disable (hat bisher gefehlt)
- Neues Attribut maxTimeoutsToReconnect für TCP-Verbindungen
  erkennt anhand mehrerer aufeinanderfolgender Timeouts dass die TCP-Verbindung zu einem Gerät nicht mehr steht
  und versucht dann die Verbindung neu aufzubauen.
- Set "reconnect" um eine TCP-Verbindung neu aufzubauen

Gruss
    Stefan

EDIT 20.7.16: Anhänge entfernt, da die neue Version inzwischen eingecheckt ist.