Hausautomatisierung mit Fhem

Hardware

Fhem-Instanzen

Meine Fhem Installation läuft mittlerweile verteilt auf 3 Rasperry Pis.

  1. Raspberry Pi 3 mit Fhem – Hauptinstanz
  2. Raspberry Pi Zero W mit Fhem und angebunden über Fhem2Fhem
  3. Raspberry 3 mit HM-Funkmodul Aufsatz mit RaspberryMatic

Auf dem ersten Pi läuft Fhem, eine Homebridge für Siri und ein MQTT-Server (mosquitto). Den zweiten Pi benutze ich für Geräte, die per Bluetooth kommunizieren. Und der dritte Pi bindet Homematic-IP-Geräte ein.

Schnittstellen

Homematic und Homematic IP

Mein Start in die Hausautomatisierung begann mit einem Fhem-Server und einem HMLan-Adapter. Damit kann die Verbindung zwischen der Fhem-Instanz und den Homematic Geräten hergestellt werden. Bei mir kommen diese Homematic-Geräte zum Einsatz:

  • 3 Rolladen Aktoren (HM-LC-BL1-FM) zum Ansteuern der Rollmotoren
  • 3 Funkschalter (HM-PB-2-WM55) zum Schalten der Aktoren. Die Funkschalter sind auch direkt mit den Aktoren verbunden, so dass sie auch ohne Fhem schalten
  • 1 Funkwandsender (HM-RC-2-PBU-FM) zum schalten von beliebigen Geräten
  • 2 Rauchmelder (HM-SEC-SD)
  • ein 4fach Relais (HM-LC-SW4-PCB) zum Schalten von 24V Regner-Ventilen
  • ein 2fach Temperatur-Sensor (HM-WDS30-OT2-SM) den ich zum Feuchtigkeitssensor umgebaut habe

Da am HMLan-Adapter keine Homematic-IP Geräte angelernt werden können, verwende ich einen Rasperry Pi mit HM-Funk-Modul (HM-MOD-RPI-PCB). Damit kann ich den Status von

  • 4 Fenster/Tür Sensoren (HMIP-SWDO)

auslesen.

DIY-Homematik

Beginnt man mit Fhem ensteht schnell der Wunsch eigene Sensoren zu basteln. Los ging es bei mir damit, dass ich die günstigeren HM-Geräte als Bausatz gekauft habe. Sie sind günstiger und nur mit einfachen Lötkenntnissen zusammen zu bauen. Die Versuche über das 433Mhz Funknetz eigene Sensoren zu bauen, schlug meistens fehl. Der Nachbau des Universalsensors war zwar ambitioniert, aber am Ende mit Erfolg gekrönt. Mittlerweile habe ich 4 Stück in der Originalversion im Einsatz und eine abgewandelte mit 4 Dallas ds18b20 Temperatursensoren.

MySensors

Das MySensors-Projekt bietet einen günstigen Einstieg in den DIY-Sensor Bereich. Allerdings hab ich immer Probleme beim Verbinden des Sensors mit dem Gateway gehabt. Daher nutze ich das Protokoll zur Zeit nicht.

433 Mhz

Auf dieser Frequenz senden viele günstige Funksteckdosen und Temperatur-Sensoren. Das funktioniert auch sehr gut. Allerdings fehlt der Rückkanal beim Schalten von Steckdosen, so dass Fhem keine Meldung über den Erfolg des Schaltens bekommt.

LaCrosse mit JeeLink auf 868 Mhz

Mit einem selbstgebauten JeeLink habe ich 3 günstige Temperatursensoren vom Technoline (TX-29-DTH) eingebunden.

WLAN

Der Zoo an unterschiedlichen WLAN-Aktoren (Gateways, Sensoren, Relais u.ä.) mit dem ESP8266 wird auch immer größer. Zum Beispiel:

Diese Geräte klinken sich ins WLAN ein und lassen sich dann bequem über mqtt ansteuern.

 

 

 

Update Firmware mit OTA

Nachdem der Sensor mit dem Bootloader aktualisiert wurde, kann nun eine Firmware eingespielt werden.

Im Bootloader ist die Seriennummer enthalten. Daher wird auch nur der Sensor mit der entsprechenden Seriennummer angesprochen.

Zum Senden der Firmware benutze ich den HomeMatic OTA flasher.

git clone git://git.zerfleddert.de/hmcfgusb

auschecken und bauen.

Danach habt ihr das Tool flash-ota.

Um eure Firmware damit senden zu können, müsst ihr es in das eq3-Format wandeln. Das geht z.B. so:

php hex2eq3.php --inFile $FILE_NAME --outFile $FILE_NAME.eq3  --spmPageSize 128 --outFormat eq3 --withCrcCheck --pathTo-srec_cat /usr/local/bin/srec_cat

hex2eq3 habe ich aus diesem Repo.

Startet den Upload mit:

flash-ota -c /dev/serial/by-id/NanoCUL-Port -f $FILE_NAME.eq3 -s SerienNummer

Drückt nun den Config-Taster am Sensor und schaltet den Strom an. Der Upload beginnt…

Universalsensor für Homematic

Hier möchte ich gerne den Nachbau des Universalsensors von Dirk beschreiben. Der Sensor existiert in 2 Varianten:

  • Innensensor ( HB-UW-Sen-THPL-I )
  • Aussensensor (HB-UW-Sen-THPL-O)

Innensensor

Auf dem Innensensor kann man 3 Fühler installieren:

Weitere spezielle Bauteile sind

Die Links bei Aliexpress, sind nur Beispiele. Leider kommt es immer wieder vor, das falsche Bauteile geliefert werden. Den BMP180 hab ich von einem günstigem Breakoutboard gelötet.

Der Innensensor kann erweitert werden für 1-wire erweitert werden. Ich habe das nicht benutzt und den Platz für 2 AAA Batterien verwendet.

Die Platine ist für das Gehäuse SUPERTRONIC BOX-SENS-WHITE entwickelt worden.

Aussensensor

Der Aussensensor unterscheidet sich nur geringfügig vom Innensensor. Er enthält Platz für:

  • Temperatur / Luftdruck (BMP180)
  • Helligkeit (TSL2561)

Weitere Sensoren können über einen I2C Bus angesteuert werden.

Aufbau

  1. Drosselspule und Max1724 + C6 und C7 löten und die Spannung von 3,3V messen.
  2. Atmega und restlichen Widerstände, Kondensatoren, Konfigschalter und LED löten.
  3. Steckerleiste anlöten

Nun kann der Atmega mit dem Bootloader geflasht werden.

Bootloader für OTA (Over the Air)

Asksin OTA Bootloader hier herrunterladen: https://github.com/kc-GitHub/Asksin_OTA_Bootloader

In der Datei devices/HB-UW-Sen-THPL.h sind der Typ, die Serialnumber (z.B. UWS7475150) und die HM-ID zu ändern:

#define HM_TYPE         0xF1, 0x01    // DIY (HB-UW-Sen-THPL-I)
#define HM_SERIAL       'U','W','S','7','4','7','5','1','5','0'
#define HM_ID           0xEA, 0xD5, 0xC9

dann:

make clean HB_UW_Sen_THPL

und ein Bootloader-AskSin-OTA-HB_UW_Sen_THPL.hex wird erstellt.

Der Sensor wird wie ein Arduino Pro Mini angeschlossen:

Jetzt kann bereits der Bootloader installiert werden:

sudo bin/avrdude -Cbin/avrdude.conf -p m328p -P gpio -c gpio -U lfuse:w:0xE2:m -U hfuse:w:0xD0:m -U efuse:w:0x06:m -U lock:w:0x2F:m -e -Uflash:w:Bootloader-AskSin-OTA-HB_UW_Sen_THPL.hex:i

Ist der Bootloader erfolgreich installiert, leuchtet die Diode 8 mal.

Arduino Bootloader

Alternativ kann auch ein Ardunino Bootloader eingespiel werden. Dazu wird eine der 3 Möglichkeiten gewählt. Ich bevorzuge die Variante mit meinem Raspberry Pi, da ich dort komfortable Scripte abfahren kann.

Für den Betrieb ohne externen Oszillator verwende ich diese Settings:
bin/avrdude -Cbin/avrdude.conf -p m328p -P gpio -c gpio -U lfuse:w:0xE2:m -U hfuse:w:0xD0:m -U efuse:w:0x06:m -U lock:w:0x2F:m -e -Uflash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex:i
Danach verbinde ich den Sensor mit einem FTDI-USB-Connector und spiele die Firmware mit der Arduino-IDE ein.

 

Firmware

Zum Einspielen der Firmware verwende ich einen NanoCUL. Damit kann ich OTA das Update einspielen.

Der nanoCUL ist mit dem Rasperry Pi verbunden. Mit dem Kommando:

sudo flash-ota -c /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AI03VVGB-if00-port0 -f $FILE_NAME.eq3 -s UWS7475150

startet der Updatevorgang.