Serial/Netzwerk-RS485-Adapter: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Typos/Spelling)
Zeile 51: Zeile 51:
* '''HM485d_logVerbose''' Der Loglevel vom hm485d.
* '''HM485d_logVerbose''' Der Loglevel vom hm485d.


Die folgenden drei Attribute können verwendet werden, wenn der hm485d über einen einfachen UART ohne Flusskontrolle z.B. über den UART des Raspberry Pi, an einen RS485 Tranceiver angeschlossen wird. Dafür müssen ggf. GPIO-Pins zur Steuerung des RS485 Tranceivers (Senden/Empfangen) definiert werden:
Die folgenden drei Attribute können verwendet werden, wenn der hm485d über einen einfachen UART ohne Flusskontrolle z.B. über den UART des Raspberry Pi, an einen RS485 Transceiver angeschlossen wird. Dafür müssen ggf. GPIO-Pins zur Steuerung des RS485 Transceivers (Senden/Empfangen) definiert werden:
* '''HM485d_gpioTxenInit''' Shell-Befehl zum initialisieren des benutzten GPIO-Pins für die Sendekontrolle
* '''HM485d_gpioTxenInit''' Shell-Befehl zum Initialisieren des benutzten GPIO-Pins für die Sendekontrolle
* '''HM485d_gpioTxenCmd0''' Shell-Befehl um den Sende-GPIO-Pin zurück zu setzen
* '''HM485d_gpioTxenCmd0''' Shell-Befehl um den Sende-GPIO-Pin zurück zu setzen
* '''HM485d_gpioTxenCmd1''' Shell-Befehl um den Sende-GPIO-Pin zu setzen
* '''HM485d_gpioTxenCmd1''' Shell-Befehl um den Sende-GPIO-Pin zu setzen

Version vom 28. Dezember 2017, 18:21 Uhr

Vorbemerkungen

Alternativ zum HomeMatic_Wired_RS485_LAN_Gateway, können einfache Serial/Netzwerk-RS485-Adaptern für die Kommunikation von FHEM zu HomeMatic-Wired-Geräten eingesetzt werden. In diesem Artikel werden sowohl RS232-RS485-Adapter, USB-RS485-Adapter als auch Netzwerk-RS485-Adapter als Serial-RS485-Adaptern bezeichnet, denn in jedem Fall wird ein serieller Datenstrom an den RS485 Transceiver weitergeleitet.

Da diese hier beschriebenen Interfaces keine "Intelligenz" besitzen, also die Daten lediglich auf den RS485-Bus umsetzen, wird zur Ansteuerung noch der hm485d.pl-Daemon benötigt. Dieser Prozess setzt die RAW-Befehle in das HomeMatic-Wired-Protokoll um. Der hm485d kann dabei transparent im Hintergrund arbeiten.

Liste der aktuell getesteten Adapter / Schnittstellen (bitte ggf. ergänzen)

  • DIGITUS DA-70157: USB-Serial Adapter mit RS485 Schnittstelle. Dieser Adapter wird derzeit wahrscheinlich am häufigsten und erfolgreichsten zusammen mit FHEM eingesetzt. In ein paar Fällen gab es jedoch Probleme mit unvollständigen Lötstellen oder anderen Fabrikationsfehlern. Dies kann sich darin äußern, dass FHEM überhaupt keine Kommunikation aufbauen kann oder entweder nur senden oder nur empfangen kann. Bevor man dann lange herumprobiert ist es in den meisten Fällen besser, sich einen zweiten Adapter zuzulegen. [1]
  • Eigenbau basierend auf FT232RL und Max485 Beitrag
  • Wiznet - WIZ108SR Compact RS422/RS485-to-Ethernet module [2]
  • Wiznet - WIZ108SR im Hutschienengehäuse
  • USB - RS485 Konverter von Sertronics [3] Dieser Adapter wurde zwar erfolgreich getestet, ist aber trotzdem nicht zu empfehlen. Der Adapter beruht auf einem CH340 oder CH341 Chip und funktioniert im Gegensatz zur Beschreibung auf der Herstellerseite mit Raspbian nur nach der Installation eines neuen Treibers. Außerdem fehlen den CH34x-Chips die Seriennummer, was Probleme bereiten kann, wenn man mehrere serielle Schnittstellen hat (das schließt auch verschiedene Billig-Arduino-Clones ein). Des Weiteren gibt es keinen GND-Anschluss, weswegen der Busabschlusswiderstand nicht korrekt angeschlossen werden kann. Details dazu wurden hier diskutiert: Beitrag

Einbindung in FHEM

Zum Einbinden des Gateways braucht man ein HM485_LAN-Device mit folgender Definition:

define hm485 HM485_LAN localhost:2000
attr hm485 hmwId 00000001
attr hm485 HM485d_device <SerialDevice>
attr hm485 HM485d_bind 1

Der Name "hm485" kann frei vergeben werden. Bei <SerialDevice> muss der Gerätename angegeben werden unter dem das serielle Device anzusprechen ist.

Beispiele:

# Serieller USB-RS485-Adapter
attr HM485_LAN HM485d_device /dev/ttyUSB0
# Netzwerk-RS485-Adapter
attr HM485_LAN HM485d_device 192.168.1.15:5000

HM485d_bind 1 sorgt dafür, dass der hm485d beim FHEM-Start automatisch mit gestartet wird und durch FHEM auch gesteuert, also auch beendet werden kann.

HM485_LAN kennt weitere Attribute, die zur Kontrolle des hm485d dienen. Wichtig ist vor allem, für HM485_LAN eine Adresse festzulegen. Die HMW-ID muss eine 8-stellige Hexadezimalzahl sein. Theoretisch könnten die bis zu 256 HMW-LAN-GW angelegt werden. Diese Annahme ist aktuell aber nur Theorie und noch nicht getestet und ggf. mit einigen Problemen verbunden. Die HMW-ID's für die HMW-Interfaces könnten dafür im Bereich von 00000001 - 000000FF gewählt werden. Da in den HMW-Geräten die HMW-ID der Zentrale aber mit 00000001 vordefiniert ist, sollte hier aktuell nur diese ID verwendet werden.

Zu beachten ist auch, dass der hm485d gleichzeitig nur eine Netzwerkverbindung erlaubt. Somit ist ein Gateway auch nur mit einer Zentrale / FHEM-Instanz zur gleichen Zeit nutzbar.

HM485_LAN Attribute

  • hmwId Hier muss die HMW-ID angegeben werden. Standardmäßig wird die 00000001 benutzt.
  • do_not_notify FileLog/notify/inform Benachrichtigung für das Gerät ist abgeschaltet.
  • HM485d_bind Startet den hm485d automatisch beim Start von FHEM und ermöglicht FHEM zudem die Prozesskontrolle
  • HM485d_startTimeout Manchmal, z.B. auf langsameren Geräten wie der FritzBox oder dem Raspberry Pi, ist es erforderlich den hm485d verzögert zu starten. Hier kann die Verzögerung in Sekunden angegeben werden.
  • HM485d_device Das serielle Gerät zum Interface (siehe Beispiel oben).
  • HM485d_serialNumber Die Seriennummer die der hm485d an die Zentrale (FHEM) melden soll.
  • HM485d_logfile Der hm485d kann ein eigenes Logfile schreiben. Hier kann dafür ein Dateiname angegeben werden.
  • HM485d_detatch Wenn der hm485d mit FHEM zusammen gestartet wird (siehe HM485d_bind) so kann der Prozess hier von FHEM entkoppelt werden. Der Prozess wird dann auch nicht zusammen mit FHEM beendet.
  • HM485d_logVerbose Der Loglevel vom hm485d.

Die folgenden drei Attribute können verwendet werden, wenn der hm485d über einen einfachen UART ohne Flusskontrolle z.B. über den UART des Raspberry Pi, an einen RS485 Transceiver angeschlossen wird. Dafür müssen ggf. GPIO-Pins zur Steuerung des RS485 Transceivers (Senden/Empfangen) definiert werden:

  • HM485d_gpioTxenInit Shell-Befehl zum Initialisieren des benutzten GPIO-Pins für die Sendekontrolle
  • HM485d_gpioTxenCmd0 Shell-Befehl um den Sende-GPIO-Pin zurück zu setzen
  • HM485d_gpioTxenCmd1 Shell-Befehl um den Sende-GPIO-Pin zu setzen

Hinweis Da auch der hm485d sich noch in Entwicklung befindet, ist es möglich dass es in einigen Fällen noch zu Fehlverhalten kommen kann.

Pairen von Geräten

Jedes HM Geräte muss vor Verwendung mit der Zentrale, hier also FHEM, gepairt werden. Anders als bei den HomeMatic-Funk-Geräten erfolgt das Pairing bei HMW automatisch, sobald ein Gerät das erste Mal eine Nachricht über den Bus versendet. Alternativ kann das Pairing auch durch das Absetzen eines Discovery-Befehls ausgelöst werden. Beim Pairen werden die Geräteadressen FHEM bekannt gemacht. Die Adresse der HMW Geräte ist nicht frei wählbar, sondern fest in den Geräten eingestellt. Alle HMW-Geräte haben standardmäßig die Adresse 00000001 als Zentralen-Adresse gespeichert.

Discovery

Mit dem discovery-Befehl wird der gesamte RS485-Bus nach unbekannten HMW Geräten durchsucht. Dieser Befehl funktioniert allerdings NICHT mit dem Original eq3-Lan-Gateway!

set HM485_LAN discovery start

Nachdem neue Geräte gefunden wurden, werden diese automatisch mit FHEM gepairt.

RAW-Befehle

Über den HM485_LAN können so genannte RAW-Befehle an die am Bus angeschlossenen Geräte gesendet werden. Mit diesen RAW-Befehlen können z.B. Funktionen ausgelöst werden, die aktuell für ein Gerät noch nicht in FHEM implementiert sind.

Beispiel:

set HM485_LAN RAW 01234567 98 00000001 DDDDDD
  • 01234567 - entspricht hier der Adresse des Gerätes an das der Befehl gesendet werden soll
  • 98 - das so genannte Steuerzeichen (Siehe HMW-Protokoll-Dokumentation)
  • 00000001 - die HMW-ID der Zentrale (FHEM)
  • DDDDDD - das sind die zu sendenden Daten.

Da zum Senden von RAW-Befehlen Kenntnisse über das HMW-Protokoll vorhanden sein sollten, lohnt sich ein Blick in die HMW-Protokoll-Doku


Funktionale Beispiele:

# Rollladenaktor öffnen
set HM485_LAN RAW 01234567 98 00000001 7802C8

# Rollladenaktor stoppen
set HM485_LAN RAW 01234567 98 00000001 7802C9

# Rollladenaktor schließen
set HM485_LAN RAW 01234567 98 00000001 780200

# erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR ein
set HM485_LAN RAW 01234567 98 00000001 730003FF

# erster Ausgang (Relais) eines HMW-IO-12-Sw14-DR aus
set HM485_LAN RAW 01234567 98 00000001 73000000

Wechsel von Serial/Netzwerk-RS485-Adaptern zu HMW-LAN-GW

Der Wechsel zwischen den verschiedenen Interface-Typen geht einfach und erfordert kein neues Pairing. Ggf. müssen einige interfacespezifische Attribute in der Konfiguration hinzugefügt bzw. gelöscht werden.

Bekannte Probleme

Disconnects mit WIZ108SR

Bei Verwendung eines auf WIZ108SR (oder ähnlich) basierenden Adapters kann es zu regelmäßigen disconnects kommen. Im Log erscheint dann in etwa Folgendes:

2015.09.13 20:17:11.809 2: HM485d: DISCONNECTED
2015.09.13 20:17:11.812 2: HM485d: SERIAL connected to device 192.168.nnn.nnn:pppp
2015.09.13 20:17:11.813 2: HM485d: RECONNECTED

Das Problem lässt sich in der Regel lösen, indem man in der Konfiguration des WIZ108SR den "Inactivity Timer" auf 0 setzt. Siehe auch diesen Thread im Forum.

Links