Homematic Wired - Homebrew
Home > Elektronik > Homematic Übersicht  
 

RS-485 Bus für Steuerungsaufgaben im Haus

Nach ein paar Experimenten mit dem Busprotokoll "eBus" der Zeitschrift "Elektor" und dem nicht unerheblichen Aufwand vieles von Grund auf zu Programmieren, hatte ich mich nach bestehenden Lösungen umgeschaut. Da eine Anbindung an FEHM geplant war, bin ich im FHEM Wiki auf die selbst entwickelten, sogenannten "Homebrew" Geräte gestoßen.
Es gibt eine Arduino Library für das Homematic Wired Protokoll, auf dessen Basis (bzw. der Vorgänger-Library) bereits einige Geräte entwickelt wurden. Die Geräte, die ich einsetzen möchte habe ich auf die aktuelle Library portiert und zum Teil mit neuen Funktionen erweitert. Der Quellcode zu den folgenden Geräten ist auf GitHub zu finden.

 

top Funktionen

Mögliche/Geplante Funktionen und Steuerungsaufgaben

       
     

 

top Bus Module

Da die Busmodule mit "echten" Homematic Wired Geräten kompatibel seien sollen, sind neben dem Protokoll auch die elektrischen Details wichtig.
Ein paar grundlegende Komponenten sind daher in jedem Busmodul vorhanden. Neben dem RS-485 Bus Treiber (hier, meist ein MAX487), ist eine 5V Spannungsversorgung für den Mikrocontroller mit einem DC-DC Wandler um den Chip MC34063A verbaut. So soll möglichst verlustfrei die 24 Volt Gleichspannung vom Bus dem Mikrocontroller zur Verfügung gestellt werden.
Damit von der gesamten Anlange wenig Energie verbraucht wird, gibt es kaum LEDs die dauerhaft leuchten. Um z.B. den Status der Relais im Schaltaktor anzuzeigen muss ein Taster betätigt werden.

... Dokumentation der Module wird laufend ergänzt...

USB nach RS-485 Adapter  
  Anbindung an FHEM, o.ä. Mit FTDI Chip FT232RL  
     
HBW-LC-BL-8 / HBW-LC-BL-4  
  8 und 4-Kanal Rollladenaktor (Hutschiene)  
     
HBW-LC-Sw-8  
  8-fach Schaltaktor (Mit "normalen" monostabilen Relais/SSR - oder als Digitalausgänge nutzbar.) >>> GitHub  
     
HBW-CC-VD-8  
  8-fach Ventilsteller und PID Regler + OneWire Temperatursensoren  
     
HBW-LC-Sw-12  
  12-fach Schaltaktor (Mit bistabilen Relais [und Stommessung auf 6 Kanälen].) (Hutschiene)  
     
HHBW-SC-10-Dim-6  
  6 Kanal PWM/0-10V/1-10V Master Dimmer + 10 digitale Eingänge (Hutschiene)  
     
HBW-SD6-Multikey  
  6-fach Taster (6+6 Taster/Schalter Eingänge, 6+6 PWM LEDs, 6 1-Wire Temperatursensoren, 2 Analogeingänge)
 
     
HBW-CC-DT3-T6  
  3 DeltaT Regler + 6 OneWire Temperatursensoren (Hutschiene)  
     
HBW-DIS-Key-4  
  Display Modul + 4 Taster Eingänge  
     
HBW-Sen-EP  
  8-fach S0-Interface  
     
HHBW-Sen-DB-4  
  Türklingelsensor mit 4 Tastern und Beleuchtung des Klingeltableau (PWM) >>> Github  
     
PIC 1 Testnode (veraltet)  
  Microchip Prozessor und Bustreiber, sonst nix.  
     
     
  Weitere Module >>> GitHub  

 

top Busprotokoll

Busaufbau und Protokolldetails.
FHEM Forum Thema: Homematic Wired - Homebrew Devices, Entwicklung eigener Geräte.

Zusätzliche Protokolle

1-wire  
I²C  
DMX, DMX512 (simple)?  
IR (RC5)?  

 

top Sofware

Da die Funktionen in der Dokumentation des jeweiliges Moduls beschrieben sind, hier nur ein kurzer Überblick über die Bibliothek und die verwendeten Einstellungen des Mikrocontrollers.

ClickButton.h

Decodes multiple clicks on one button. Also copes with long clicks and click-and-hold.

FreeRam.h

freeRam() - zeigt aktuell freien RAM an. Zu debug zwecken.

hardware.h

Für Hardware spezifische Konfiguration, wie Adresse des Boorloaders, POWERSAVE/sleep_mode, etc.

HBWAnalogIn.h

Kanalklasse | Sensor: Analog input channel (ADC), max. 16 bit reading.

HBWBlind.h

Kanalklasse | Aktor: Rolladenaktor mit Richtungs- und Aktiv-Relais pro Kanal.

HBWDimmerAdvanced.h

Kanalklasse | Aktor: Dimmer Aktor, Peering mit TOGGLE_TO_COUNTER, TOGGLE_INVERSE_TO_COUNTER, UPDIM, DOWNDIM, TOGGLEDIM, TOGGLEDIM_TO_COUNTER, TOGGLEDIM_INVERSE_TO_COUNTER, onTime, offTime (Ein-/Ausschaltdauer), onDelayTime, offDelayTime (Ein-/Ausschaltverzögerung), RampOn, RampOff.

HBWired.h

HomeBrew-Wired RS485 Protokoll Implementierung (wird immer benötigt).

HBWKey.h

Kanalklasse | Sensor: Eingang für Taster, Schalter, Sensorkontakt oder Bewegungsmelder.

HBWlibStateMachine.h
 
HBWlibSwitchAdvanced.h
 
HBWLinkBlindSimple.h

Linkklasse | Aktor: Einfache direkte Verknüpfung (Peering), zu Rolladenaktor.

HBWLinkDimmerAdvanced.h

Linkklasse | Aktor: Direkte Verknüpfung (Peering), zu Dimmer-/Schaltausgängen.

HBWLinkInfoEventActuator.h

Linkklasse | Aktor: Direkte Verknüpfung (Peering), zu diversen Aktoren (PID Regler, Display, o.ä.) - von Sensoren (z.B. Temperatur). [Homebrew spezifische Erweiterung!]

HBWLinkInfoEventSensor.h
Linkklasse | Sensor: Direkte Verknüpfung (Peering), von diversen Sensoren (z.B. Temperatur). [Homebrew spezifische Erweiterung!]
HBWLinkKey.h
Linkklasse | Sensor: Direkte Verknüpfung (Peering), vom Tastereingang.
HBWLinkSwitchAdvanced.h
Linkklasse | Aktor: Direkte Verknüpfung (Peering), zu Schaltausgängen (z.B. Relais).
HBWLinkSwitchSimple.h
Linkklasse | Aktor: Einfache direkte Verknüpfung (Peering), zu Schaltausgängen (z.B. Relais).
HBWOneWireTempSensors.h

Kanalklasse | Sensor: 1-Wire® Temperatursensoren: DS18S20, DS18B20, DS1822.

HBWPids.h
Kanalklasse | Aktor: PID Regler (in Kombination mit HBWValve.h)
HBWSenEP.h
Kanalklasse | Sensor: Einlesen von S0-Pulsen (S0-Interface).
HBWSenSC.h
Kanalklasse | Sensor: Sensor/shutter contact. Kanäle liefern Status "contact_closed" oder "contact_open". Keine direkte Verknüpfung (Peering) möglich.
HBWSoftwareSerial.h
Modified SoftwareSerial, with even parity bit added to default SoftwareSerial.h - which is required for HMW RS485-Protokoll.
HBWSwitch.h
Kanalklasse | Aktor: Schaltausgang (z.B. Relais).
HBWSwitchAdvanced.h
Kanalklasse | Aktor: Schaltausgang (z.B. Relais), mit erweiterten Funktionen. HBWSwitchAdvanced & HBWLinkSwitchAdvanced ermöglichen folgende Funktionen: Peering mit TOGGLE, TOGGLE_TO_COUNTER, TOGGLE_INVERSE_TO_COUNTER, onTime, offTime (Ein-/Ausschaltdauer), onDelayTime, offDelayTime (Ein-/Ausschaltverzögerung).
HBWValve.h
Kanalklasse | Aktor: Einfache Ventilsteuerung "time proportioning control" für thermische Ventile (z.B. bei Fußbodenheizung).

 

Für die Entwicklung wird die Arduino IDE genutzt, so lässt sich der Arduino NANO schnell beschreiben und die serielle Textausgabe kann zur Fehlersuche und Funktionskontrolle genutzt werden.
In den fertigen Modulen kommt dann nur noch der ATmega 328p Mikrocontroller zum Einsatz, ohne USB Chip, etc. Dort wird der Mikrocontroller über die ISP Schnittstelle, mit einem entsprechenden Programmiergerät geflasht.

Fuses setzen:
avrdude -c AVRISPmkII -p m328p -U lfuse:w:0xff:m -U hfuse:w:0xd3:m -U efuse:w:0xfd:m

(Bedeutung: disable bootloader & preserve EEPROM memory - der Rest entspricht dem Standard für einen Arduino NANO)

Software flashen:
avrdude -c AVRISPmkII -p m328p -U flash:w:HBW-device.ino.eightanaloginputs.hex:i -v

(hier die HEX Datei ohne boot loader benutzen)

 

top Hardware Kernkomponenten

Um den Aufbau der Sensoren und Aktoren zu vereinfachen, wurde die Hardware in ein paar Module unterteilt, welche möglichst unverändert immer wieder zum Einsatz kommen können. Damit sollte der Aufwand zur Erstellung der Platinenlayouts, der Programmierung und auch die Anzahl der unterschiedlichen Bauteile reduziert werden.

Spannungsversorgung

Die Wandlung der Busspannung von 24 auf 5 Volt erfolgt mit einem "Step-down" Wandler. Im Gegensatz zu linear Reglern (wie z.B. µA7805) haben sie einen deutlich besseren Wirkungsgrad, da hier die Spannungsdifferenz nicht einfach "verheizt" wird. Die Kosten liegen gerinfügig höher, spart aber deutlich Standby Leistung ein. Möglich wäre auch "Step-down"/"DC-DC" Wandler als fertiges Modul einzusetzen.

Die hier genutzte Schaltung baut auf einem MC34063A auf, welcher relativ simpel, aber auch günstig ist.
Die Wandlerschaltung ist für einen maximalen Ausgangsstrom von ca. 210mA bei 5V ausgelegt. Da nur Mikrocontroller, Bustreiber und LEDs (u.ä.) versorgt werden müssen sollte dies mehr als ausreichend sein. Die Relais werden direkt mit 24V geschaltet. Ab einer Eingangsspannung von ca. 18V erreicht die Ausgangsspannung die erforderlichen 5V.

Vin: 23.5V
Vout: 5V
Iout: 214mA
Vripple: 12.4mV(pp)
Fmin: 42.9kHz
---------------------
Ct (C2)=220 pF
Ipk=428 mA
Rsc (R3, R4)=0.701 Ohm
Lmin=225 uH
Co=101 uF
R1=1k R2=3k (5V)

MC34063A design tool

 

Busankopplung

Der MAX487 stellt die Verbindung zum RS-485 Bus her. Es ist ein Half-Duplex Baustein. Von diesem Typ können bis zu 128 an einen Bus angeschlossen werden. Der Suffix "ESA", statt "CSA" weist auf einen erweiterten Temperaturbereich hin. Eine weitere Variante ist MAX487E, welcher ESD Geschützt ist (bis 15kV). Der Suffix "ECSA" identifiziert den ESD Geschützten Bautein mit normalen Temperaturbereich (0°C bis +70°C). (MAX487EESA: -40°C bis +85°C, SO-8 Gehäuse)
Wenn ein Busenkoppler ohne ESD Schutz eingesetzt wird, könnte mit zwei Überspannungsschutzdioden z.B. "P6SMB7.5CA / P6KE7.5CA" oder die speziell für den RS-485 Bus geschaffene "SM712" ein Schutz bis 30kV geschaffen werden. (vorausgesetzt der restliche Teil der Schaltung ist ebenfalls geschützt)
Als alternativen zum MAX487 Transceiver kommen auch zu Einsatz: SN65LBC184, SN65HVD72 (3,3V) , SN65HVD3082E (1/8 Unit Load)

Ein sehr einfacher, aber effektiver Schutz (nicht gegen Überspannung) ist die Verpolungsschutzdiode (B140/SB140) – auch "Idioten-Diode" genannt – für den Fall das man versehentlich die Versorgungsspannung falsch angelegt hat.

 

Prozessor

Für eine einfache Nutzung der Bibliothek und die Programmierung/Entwicklung mit der Arduino IDE ist die Basis der Geräte ein Arduino NANO, bzw. ein ATmega 328p Mikrocontroller, welcher mit 16MHz läuft. So lassen sich die Programme (Sketches) aus der IDE einfach auf den Mikrocontroller übertragen.
Mit einer Erweiterung der Arduino IDE können weitere Boards hinzufügt (z.B. https://github.com/watterott/Arduino-Boards oder https://github.com/MCUdude/MiniCore) und so Mikrocontroller wie der ATmega 328pb genutzt werden. Dieser kommt bei einigen Geräten zum Einsatz. Läuft aber, im Gegensatz zum ATmega 328p mit 12 MHz (oder 8MHz), da er etwas „wählerisch“ bei den Quarzoszillatoren ist und ich keinen stabilen Betrieb mit 16MHz erreichen konnte.