|
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.
Mögliche/Geplante Funktionen und Steuerungsaufgaben
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-WDS-C7 | ||
Bresser 7 in 1 Wetterstation / Sensor mit Raspberry Pi Pico. | ||
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 |
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)? |
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 |
|
|
FreeRam.h |
|
|
hardware.h |
|
|
HBWAnalogIn.h |
|
|
HBWBlind.h |
|
|
HBWDimmerAdvanced.h |
|
|
HBWired.h |
|
|
HBWKey.h |
|
|
HBWlibStateMachine.h |
|
|
HBWlibSwitchAdvanced.h |
|
|
HBWLinkBlindSimple.h |
|
|
HBWLinkDimmerAdvanced.h |
|
|
HBWLinkInfoEventActuator.h |
|
|
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 |
|
|
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)
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.
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 |
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.
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.
loetmeister ©2024