Raspberry Pi mit openHAB als Smart Home Schaltzentrale

Aus Laub-Home.de Wiki
Zur Navigation springen Zur Suche springen
Raspberry Pi openHAB Dashboard.jpg

Wer kennt das nicht, man möchte zu Hause alles schön digitalisieren und per Alexa, Homepod oder Handy App fernsteuern und hat auf einmal die Verschiedenen Dinge in eigenen Apps, Portalen und anderen Alexa Skills. Man kauft eine Smart Home Glühbirne und schon hat man die eigens dafür geschriebene App auf dem Handy. Die Idee, alles in ein Tool paken und steuern. Genau dafür kommt openHAB in Frage. Dieses kann man dann zum Schluss noch an den Homepod oder Alexa hängen und alles per Sprache steuern. Die eigens zusammengebauten Dashboards erlauben einem einen guten Überblick über alles wichtige und diverse Steckdosen, Rolläden oder Lichter lassen sich bequem dadurch schalten. Auch ganze Szenen können programmiert werden und diese dann einfach zum Beispiel mit dem Befehl an Alexa gestartet werden. Ich möchte zu dem ein kleines Touchdisplay nutzen um mir zum Beispiel die Temperatur anzeigen zu lassen, und ggf. Per Knopdruck die Markise einzufahren oder die Rolläden herunterzulassen.

Mein Bisheriges Setup sieht wie folgt aus:

  • digitalSTROM (Rolläden / Licht)
  • Amazon Alexa Echo
  • Netatmo Wetterstation (Mainmodul, Indoor Module und Outdoor Modul)
  • Somfy Tahoma (Markisenmotor, Windwächter, Steckdosen, Sonnen Sensoren)
  • Ubiguiti Unifi W-Lan Lösung
  • Samsung Smart TV

Die Ursprüngliche Idee des Ganzen kam, da ich eine Smarte Wetterstation gesucht habe und über die Netatmo Wetterstation gestoßen bin. Diese bringt leider kein eigenes Display für die Anzeige der Wetterdaten mit. Hierfür gibt es aber einige gute Bastelanleitungen, wie zum Beispiel das Schreiben einer kleinen PHP Seite, die an die API von Netatmo geht. Die Seite dann eventuell via Kindl als Display im Browser öffnen, fertig ist die Wetterstation. Oder aber man macht es mit openHAB und zeigt die Daten mit HABPane auf dem Raspberry Pi und verbindet die den Amazon Echo mit den Daten und fragt: "Alexa, wie ist die Temperatur im Wohnzimmer"?

Features die ich hier mit openHAB abbilden möchte

  • Installation openHAB auf dem Raspberry Pi auf Basis eines Docker Images
  • Integration aller Smart Home Geräte
  • Erstellung von automatischen Regeln (z.B.: Wenn es draußen zu Warm ist schließe die Rolläden zu 50%)
  • Anzeige aller wichtigsten Daten, Temperatur, Status der Rolläden und Lichter (Steckdosen)
  • Sind alle Fenster geschlossen
  • Alle Geräte über eine App / Webinterface bedienbar machen
  • Raspberry Pi mit Touchdisplay zur Steuerung
  • Den Stromverbrauch auch rückwirkend anzeigen (Grafana Grafiken)
  • Die Wetter Messwerte visualisieren (Grafana Grafiken)

Hardware

Ich habe hier für mein Setup die folgende Hardware verwendet:

Raspberry Pi 4 B rev. 1.2

Für dieses kleine Projekt habe ich mir zunächst mal einen neuen Raspberry Pi gegönnt. Es handelt sich um das 4GB Model des Raspberry Pi 4 B inkl. Original USB-C Netzteil und passiven Kühlkörpern. Erster Eindruck:

Immer wieder erstaunlich, das so ein kleines Gerät ein vollwertiger kleiner Computer ist :-)

Habe natürlich auch gleich mal den Stromverbrauch beim Booten von Raspbian Lite gecheckt:

Ohne Anschluss von jeglichem Zubehör (Tastatur, Maus, USB Geräten, LAN Kabel, WLAN)

  • 4 Watt

Mit LAN Kabel

  • 4 Watt

Mit WLAN Verbindung

  • 4 Watt

Unter Volllast und WLAN (mit dem Tool stress --cpu 4):

  • 6 Watt

7" official Raspberry Pi Touch Display

Mehr Informationen zum offiziellen Raspberry Pi Touchdisplay, wie man das Touchdisplay anschließt und ein paar Konfigurations-Tips und Tricks dazu, findet ihr in diesem Artikel:

Der Stromverbrauch samt Display liegt bei voller Helligkeit bei:

  • 9Watt

Stellt man die Helligkeit zum Beispiel auf den Wert 100:

  • 6Watt

Rahmen, beziehungsweise Gehäuse

Der Rahmen kommt gut verpackt und besteht aus 7 Einzelteilen. Eine super Anleitung wie man das Display "einbaut" liegt ebenfalls bei. Der Einbau ist super einfach und alle Teile waren bei mir sehr gut verarbeitet und hatten eine Schutzfolie, die man als erstes abziehen muss. Zusammengebaut sieht alles sehr gut aus. Der Winkel ist ebenfalls gut gewählt und das Ganze hat einen stabilen Stand. Man kann also sehr gut auch das "Touch" verwenden. Eine einzige Sache ist mir aufgefallen, mein Standard MicroUSB Kabel schaut über den Display Rand hinaus, deshalb habe ich mir, da ich bereits das offizielle Raspberry Pi USB-C Stromkabel habe, einen USB-C auf MicroUSB Winkel Adapter gekauft.

RaspberryPi und Touchdisplay Galerie 1.jpgRaspberryPi und Touchdisplay Galerie 2.jpg

Nach dem nun alles zusammen gebaut und angeschlossen ist, können wir loslegen!

USB Winkel Adapter für die Stromzufuhr

Möchte man nicht, dass das Stromkabel oben über das Display schaut, kann man sich einfach einen Winkel Adapter kaufen.

USB Winkel Adapter.jpgRPI Display USB-C to MicroUSB Winkel Adapter.jpg

Installation Raspbian und Docker

hierfür habe ich bereits einen Artikel erfasst:

Installiert habe ich den Pi inklusive WLAN Verbindung und nicht als 64Bit Version. Zusätzlich habe ich noch eingerichtet das Mailing lokal vom System aus funktioniert um zum Beispiel E-Mails vom cron Daemon zu bekommen:

Falls ihr wie ich Probleme habt, dass euer Raspberry sich nicht via ac Wifi verbindet, schaut mal hier rein:

Und ich habe hier den AVAHI Daemon deinstalliert:

apt -y --auto-remove purge avahi-daemon

Bitte auch den Screen wie hier beschrieben um 180 Grad drehen:

Fail2ban

Als kleine Sicherheitsmaßnahme habe ich noch Fail2Ban installiert um meinen SSH Zugang abzusichern:

apt install fail2ban

für den SSH Schutz einfach folgende Datei anlegen: /etc/fail2ban/jail.d/sshd.conf

[sshd]

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
mode    = aggressive
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

nun noch eine E-Mail Benachrichtigung einrichten, falls man das überhaupt möchte: /etc/fail2ban/jail.d/action.conf

[DEFAULT]

# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = YOURMAILADDRESS

# Choose default action.  To change, just override value of 'action' with the
# interpolation to the chosen action shortcut (e.g.  action_mw, action_mwl, etc) in jail.local
# globally (section [DEFAULT]) or per specific section
action = %(action_mwl)s

und zum Aktivieren den Dienst neu starten:

systemctl restart fail2ban

Automatische Paket Updates

Da ich mein System immer auf dem aktuellen Stand haben möchte, habe ich noch cron-apt installiert und eingerichtet.

apt install cron-apt

/etc/cron-apt/config

APTCOMMAND="/usr/bin/apt-get"
MAILON="changes"

/etc/cron-apt/action.d/9-notify

-q -q --no-act upgrade

/etc/cron-apt/action.d/4-upgrade

autoclean -y dist-upgrade -y -o APT::Get::Show-Upgraded=true

Mehr Informationen:

Browser Kiosk Modus

Da ich via HABPanel und dem Touchscreen unser Smart Home steuern möchte, wird ein Browser im Kiosk Modus auf dem Raspberry Pi benötigt. Wie das geht, erfahrt ihr hier:

Bitte hier auch den warten auf HABPanel Tweak mit der until Schleife mit einbauen, wie es in oben stehendem Artikel beschrieben ist.

Installation OpenHAB via docker-compose

openHAB bringt zwar für den Raspberry Pi ein eigenes OS mit, openHabian, welches super einfach zu benutzen ist, denoch habe ich mich entschieden, das Ganze hier mittels Docker Containern aufzubauen. Der Vorteil dieser Lösung ist, dass man den Pi auch zum Beispiel als Pi-hole benutzen kann, oder sonstige Tools und Services darauf verwenden kann. Da ich dem Pi auch ein Touchdisplay spendiert habe, um die HABPanel Dashboards direkt zu bedienen, muss ich das OS sowieso nach meinen Wünschen anpassen. OpenHAB ist von sich aus leider nicht fähig von sich aus Daten persistent zu behalten, dass heißt wir brauchen noch eine Datenbank. Ich habe mich hier für die Lösung mittels InfluxDB entschieden.

Als erstes erstellen wir einen Docker Compose Projekt Ordner:

mkdir -p /opt/openHAB/

in diesem legen wir dann unsere .env Datei ab. Ändert in dieser die Ports und die Zugangsdaten für die Datenbank.

/opt/openHAB/.env

# Config File for openHAB Application

# InfluxDB Configuration
INFLUXDB_ADMIN_USER=admin
INFLUXDB_ADMIN_PASSWORD=bijcdfvgdfbfgrrapni
INFLUXDB_USER=openhab
INFLUXDB_USER_PASSWORD=havpijbfgbdfgCofpit9
INFLUXDB_READ_USER=openhab_ro
INFLUXDB_READ_USER_PASSWORD=keHattOjEcsdvsdfhidaw

# Port Configuration openHab
OPENHAB_HTTP_PORT=8080
OPENHAB_HTTPS_PORT=8443

# Timezone
TZ=Europe/Berlin

Und natürlich noch unsere docker-compose.yml
/opt/openHAB/docker-compose.yml

version: '3.7'

services:
  openhab:
    image: openhab/openhab:latest-alpine
    depends_on:
      - influxdb
    restart: always
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"
      - "./data/openhab/conf:/openhab/conf"
      - "./data/openhab/addons:/openhab/addons"
      - data_openhab_userdata:/openhab/userdata
    environment:
      TZ: ${TZ}
      OPENHAB_HTTP_PORT: ${OPENHAB_HTTP_PORT}
      OPENHAB_HTTPS_PORT: ${OPENHAB_HTTPS_PORT}
      CRYPTO_POLICY: "unlimited"
      EXTRA_JAVA_OPTS: "-Duser.timezone=${TZ}"
    labels:
        com.centurylinklabs.watchtower.enable: "true"
    network_mode: host

  influxdb:
    image: influxdb:latest
    restart: always
    environment:
      - INFLUXDB_DATA_ENGINE=tsm1
      - INFLUXDB_REPORTING_DISABLED=false
      - INFLUXDB_ADMIN_USER=${INFLUXDB_ADMIN_USER}
      - INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_ADMIN_PASSWORD}
      - INFLUXDB_USER=${INFLUXDB_USER}
      - INFLUXDB_USER_PASSWORD=${INFLUXDB_USER_PASSWORD}
      - INFLUXDB_READ_USER=${INFLUXDB_READ_USER}
      - INFLUXDB_READ_USER_PASSWORD=${INFLUXDB_READ_USER_PASSWORD}
      - INFLUXDB_DB="openhab_db"
      - TZ=${TZ}
    labels:
        com.centurylinklabs.watchtower.enable: "true"
    volumes:
      - data_openhab_influxdb:/var/lib/influxdb
    network_mode: host

  grafana:
    image: grafana/grafana:latest-ubuntu
    depends_on:
      - influxdb
    restart: always
    user: "0"
    environment:
      - GF_INSTALL_PLUGINS=grafana-clock-panel,briangann-gauge-panel,natel-plotly-panel,grafana-simple-json-datasource
      ## mailing
      #- GF_SMTP_ENABLED=true
      #- GF_SMTP_HOST=mail.domain.tld:465
      #- GF_SMTP_USER=monitoring@domain.tld
      #- GF_SMTP_PASSWORD=YOURPASSWORD
      #- GF_SMTP_FROM_ADDRESS=monitoring@domain.tld
      ## anonymous graphic access, to use graphs in openHAB or HABPanel
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_SECURITY_ALLOW_EMBEDDING=true
      - TZ=${TZ}
    labels:
        com.centurylinklabs.watchtower.enable: "true"
    volumes:
      - data_openhab_grafana:/var/lib/grafana
    network_mode: host

volumes:
  data_openhab_userdata:
  data_openhab_influxdb:
  data_openhab_grafana:

Dann deployen wir das komplette Compose Projekt:

cd /opt/openHAB
docker-compose up -d

Konfiguration openHAB

Wir greifen nun via Browser auf die WebUI von openHAB zu, hierfür gibt es die Möglichkeit via IP oder Hostnamen zuzugreifen. Und beides via http Port 8080 oder https Port8443:

https://YOURRASPBERRYPIIP:8443

http://YOURRASPBERRYPIIP:8080

oder

https://YOURRASPBERRYPIHOSTNAME:8443

http://YOURRASPBERRYPIHOSTNAME:8080

Am besten nutzt die HTTPs Verbindung. Die SSL Fehlermeldung kann man ignorieren.

Nach dem ersten Zugriff auf openHAB begrüßt uns die Frage, was wir installieren möchten. Hier geht es darum, welche UIs installiert werden. Ich habe mich für Standard entschieden, da ich am Ende PaperUI und HABPANEL verwenden möchte und beides hier mit inkludiert ist. Man kann sämtliche UIs auch nachträglich installieren.

Nachdem die Installation nun abgeschlossen ist, kümmern wir uns mittels PaperUI darum, alle benötigten Smart Home Geräte in openHAB zu integrieren.

Konfiguration der Items mit PaperUI

Mittels PaperUI ist es relativ einfach sämtliche Smart Home oder IoT Devices in openHAB zu integrieren. Die Reihenfolge ist dabei folgende:

  1. Binding installieren und konfigurieren
  2. Things anlegen und ggf. konfigurieren dann via Channel die Items die genutzt werden sollen konfigurieren (oder beim Simple Linking einfach aktivieren)
  3. Eine erste Übersicht über alle angelegten Items bekommt man nun unter Control
  4. Die Items können nun in allen openHAB UIs (HABPanel), mittels persistenten Daten in Grafana oder via Alexa Sprachsteuerung genutzt werden.

Ich nutze hier die folgenden Bindings:

Um dann noch persistente Daten nutzen zu können, brauchen wir noch die Anbindung an die InfluxDB. Mehr hierzu im Kapitel Persistent mit InfluxDB

Tipp: Möchte man das Items automatisch verlinkt werden, kann man dies in der Konfiguration aktivieren. Der Nachteil dieser Methode: die Items werden readonly angelegt und können so nicht manuell bearbeitet werden, um zum Beispiel einen Tag für Alexa zu setzen, oder um die Ausgabe Werte zu ändern (Thema HABPanel Prozent Zeichen und Eclipse Icons). Ich habe bei meiner Konfiguration das Grobe mit Automatic Item Linking gemacht und dann ein paar Änderungen ohne die Aktivierung vollzogen, also ein switch zwischen beidem.

Configuration --> System --> Item Linking

OpenHAB PaperUI ITEM Linking.png

Items manuell erstellen

Möchte man ein Item manuell erstellen und nicht das automatische Item Linking nutzen geht man wie folgt vor:

  • gewünschtes Thing öffnen
  • Bei Channels neues Item verlinken
  • Item erstellen und speichern.

Hier ein Beispiel anhand des Network Bindings:

OpenHAB Network Binding.png

Zuerst fügen wir ein neues Thing hinzu:

OpenHAB Item linking 1.png

wählen dann hier unser Network Binding aus.

OpenHAB Item linking 2.png

es fängt dann automatisch an nach verfügbaren Things zu suchen.

OpenHAB Item linking 3.png

Man kann nun eines der Things in der Liste auswählen. Oder wie zum Beispiel für den Online Status ein Thing Manuell hinzufügen:

OpenHAB Item linking 4.png

ich wähle hier als Beispiel mein System selbst, auf dem ein Webserver läuft aus:

OpenHAB Item linking 5.png

vergeben einen Namen für unser Thing und gehen auf ADD AS THING:

OpenHAB Item linking 6.png

Nun wechseln wir in die Thing Ansicht und werden sehen, dass dort unser openHAB Server Thing entstanden ist und der Status im Normalfall auf Online steht. Hier gehen wir nun auf das edit Symbol.

OpenHAB Item linking 7.png

hier sehen wir nun, das wir 3 Channel zur verfügung haben. Ein Klick rechts auf die beiden Pfeil Symbole erweitert den Chanel und man sieht dass auch noch kein Item Verlinkt ist.

OpenHAB Item linking 8.png

nun aktivieren wir einen Der Channel und sehen, das ein PopUp erscheint, wo wir ein neues Item erstellen auswählen können:

OpenHAB Item linking 9.png

OpenHAB Item linking 10.png

hier kann ich nun den Item Namen vergeben, sollte ein gut Lesbarer einmaliger Name sein. Die Vorschläge sind meist OK. Ebenfalls kann ich einen Label Namen vergeben. Und ich kann eine Category vergeben und es sollte beim verwenden einer bereits vorhanden Kategorie ein Symbol daneben auftauchen. (hier network)

OpenHAB Item linking 11.png

weiter unten kann ich noch eine Gruppe angeben, falls ich zum Beispiel alle Items in einer Gruppe zusammenfassen möchte. Bei Rollladen oder Lichtern sinnvoll um mehrere gleichzeitig zu schalten. dann gehen wir auf Link und haben das Item erstellt.

OpenHAB Item linking 12.png

Unsere Thing Ansicht sieht nu so aus. Unser Item ist angelegt und kann nun verwendet werden.

OpenHAB Item linking 13.png

In der Control Ansicht finden wir es nun genauso wie unter Configuration --> Items:

OpenHAB Item linking 14.pngOpenHAB Item linking 15.png

Items manuell löschen

Möchte man ein Item wieder löschen, da man es nicht mehr braucht und damit auch ein wenig performance sparen möchte, dann geht wie folgt vor:

  • Item Linking von Thing --> Channel entfernen
  • Item löschen
  • ggf. Thing löschen

Linking löschen:

OpenHAB Item deleting 1.png

Item löschen:

OpenHAB Item deleting 2.png

Optional, Thing löschen:

OpenHAB Item deleting 3.png

Netatmo einbinden

Fangen wir mal mit der Netatmo Wetterstation an. Als erstes installieren wir das Netatmo Binding unter Configuration --> Bindings --> + --> Netatmo Binding. Dann konfigurieren wir das Ganze. Hierfür müssen wir als erstes bei Netatmo eine "WebApp" erstellen um Zugriff auf die API zu bekommen. Dies machen wir unter:

OpenHAB Netatmo App Creation 1.png

Dies sind die minimal Felder die ausgefüllt werden müssen. Verwendet hier was immer ihr wünscht. Nachdem bestätigen mit SAVE, werden die von uns benötigten API Keys erzeugt.

OpenHAB Netatmo App Creation 2.png

Wir benötigen gleich die Client ID und den Client Secret Key. Also am besten den Tab im Browser offen lassen.

Nun gehen wir zurück zur PaperUI und dort nach Configuration --> Things und wählen das + um ein neues Thing hinzuzufügen. Im nächsten Schritt wählen wir dann das Netatmo Binding aus. Und im nachfolgenden Fenster Netatmo API:

OpenHAB Netatmo Binding Configuration.png

Dann mit dem Hacken oben bestätigen. Hat alles geklappt sollte nach kurzer Zeit auf der folgenden Seite ein ONLINE zu sehen sein:

OpenHAB Netatmo Binding ONLINE.png

Nun, da die Verbindung zu Wetterstation steht, können wir die Items anlegen. Dafür gehen wir in der PaperUI zur Inbox und klicken rechts oben auf das Scan Symbol OpenHAB PaperUI Inbox Scan Symbol.png.

Im darauf erscheinenden Auswahlmenü klicken wir links neben dem Netatmo Binding auf das hier in Blau hinterlegte Scan Symbol. Danach bestätigen wir das Menü mit OK und sollten dann in der Inbox unsere Wetterstation und die dazugehörenden Module finden:

OpenHAB PaperUI Inbox Netatmo.png

Mit einem Klick auf den blau hinterlegten Haken, fügen wir die Things hinzu und können Ihnen einen Namen geben, falls ih das möchtet. Ich habe Sie wie folgt benannt:

  • Netatmo Home Station
  • Netatmo Home Outdoor

Springen wir nun nach Configuration --> Things sollten wir unsere hinzugefügte Wetterstation sehen:

OpenHAB Netatmo Things.png

Wenn wir nun eines der Things per klick öffnen, sollten wir bei Channels sehen, dass die Items automatisch angehakt sind.

OpenHAB Netatmo Channels.png

Geht man nun in der PaperUI zu Controll, sollte man die Wetterstation samt aller Daten sehen:

OpenHAB Netatmo Overview.png

Solltet ihr hier einen Wert vermissen, wie zum Beispiel den Temperatur Trend, so kann man unter Configuration --> Things --> Netatmo Home (Station/Outdoor) bei Channels die Items erweitern in dem man auf SHOW MORE klickt. Dann einfach das zusätzlich gewollte ITEM oder auch gerne alle aktivieren.

OpenHAB Netatmo More Items.png

und schon sollte der Temperatur Trend auch im Controller Center zu sehen sein.

digitalStrom einbinden

Um den digitalSTROM Server einzubinden, benötigen wir als erstes das Binding. Dafür gehen wir in der PaperUI nach Configuration --> Bindings --> + --> Bindings und wählen hier das digitalSTROM Binding aus. Nach dem es installiert ist, gehen wir nach Configuration --> Things und fügen ein Thing mittels + hinzu. Hier wählen wir nun das digitalSTROM Binding aus. Nachdem die Suche keinen Treffer liefert gehen wir auf ADD MANUALLY und wählen den digitalSTROM-Server aus. Im Nachfolgenden Fenster geben wir dann unsere Interne IP oder den Internen DNS Namen des digitalSTROM Servers und dessen Zugangsdaten (Benutzername und Passwort) an. Nach einem Klick auf den blau hinterlegten Haken links oben, speichern wir die Daten ab. In der Nachfolgenden Übersicht (Configuration --> Things) sollte der digitalStrom Server dann als Online markiert sein:

OpenHAB digitalSTROM Server online.png

Nun sollten in der Inbox alle möglichen Geräte vom digitalSTROM Server aufzufinden sein. Ein Klick auf den blau hinterlegten Haken bei den Things, fügt diese automatisch hinzu:

OpenHAB digitalSTROM Inbox Things.png

danach sind diese unter Configuration --> Things zu finden:

OpenHAB digitalSTROM Things.png

Wenn wir vorher eingestellt haben, das Items automatisch generiert werden sollen, dann brauchen wir diese nicht noch generieren, ansonsten Klick auf das Thing eurer Wahl und dann einfach das gewünschte Item unter Channels aktivieren.

OpenHAB digitalSTROM Items.png

Unter Control sollte nun das Item verfügbar sein und in meinem Fall der Rolladen in der Küche steuerbar sein:

OpenHAB digitalSTROM Control.png

Da das digitalSTROM Binding leider bei mir einiges an Problemen verursacht hat, habe ich ein kleines Script gebastelt, was mir ein wenig mehr Stabilität gebracht hat:

Somfy TaHoma einbinden

Um die Markise auch via openHAB steuerbar zu machen, die Somfy Sonnensensoren auszulesen und die Smarten Steckdosen an und aus zu schalten, habe ich das Somfy TaHoma Binding in openHAB installiert und konfiguriert.

Dazu wie gewohnt in PaperUI --> Add-ons --> Bindings das Somfy TaHoma Binding installieren:

OpenHAB Somfy TaHoma Binding Installation.png

Um die Verbindung zur TaHoma API einzurichten, fügen wir nun ein Thing hinzu, dass dann auch als Bridge fungiert:

PaperUI --> Configuration --> Things --> + --> Somfy TaHoma Binding

dort suchen wir dann die Somfy Tahoma Bridge

OpenHAB Somfy TaHoma Bridge.png

Und konfigurieren diese nach unseren Wünschen:

OpenHAB Somfy Tahoma Bridge Konfiguration.png

Speichert man das Ganze ab, wird man nach ein paar Minuten alle verfügbaren Things in der Inbox finden:

OpenHAB Somfy Tahoma Things.png

einfach die gewünschten Things hinzufügen und dann die gewünschte Items einrichten.

Amazon Echo einbinden

Wie auch bei Netatmo und digitalSTROM, gehen wir in der PaperUI nach Configuration --> Things und klicken auf + (ADD). Hier dann Amazon Echo Steuerung Binding auswählen. Hier dann Amazon Konto anklicken und das nachfolgende Konfigurationsmenü mit dem blau hinterlegten Haken links oben bestätigen. Nun springt es wieder zurück nach Configuration --> Things wo bei Amazon Konto nun Offline - Configuration_Pending stehen sollte:

OpenHAB Amazon Konto Offline.png

Also gehen wir nun hinein und werden sehen, das man nun eine URL zum Verbinden des Amazon Kontos aufrufen soll:

OpenHAB Amazon Konto verbinden.png

Copy and Paste die angezeigte URL und passt sie an:

  • http(s)://<YOUROPENHAB>:<YOURPORT>/amazonechocontrol/5851e81d

sieht dann so aus:

OpenHAB Amazon Konto Verbinden 2.png

Hier einfach euren Amazon Account nutzen. Dann gehen wir wieder zurück zur PaperUI und werden sehen, das unser Amazon Konto nun auf ONLINE steht und dass es neue Devices in der Inbox gibt:

OpenHAB Amazon Echo.png

Einfach mit einem Klick auf den Haken klicken und schon ist der Echo hinzugefügt und kann über Control gesteuert werden. Auch hier müsst ihr ggf. noch unter Channels die Items aktivieren.

Persistent mit InfluxDB

Nun wollen wir das die gesammelten Daten auch Persistent gemacht werden um sie später zum Beispiel in Grafiken (Grafana) ausgeben zu können, oder damit bei einem Neustart openHAB den letzten Status von den Items direkt hat, ohne diesen erst auszulesen. Hierfür installieren wir uns als erstes über PaperUI --> Add-ons --> Persistence das InfluxDB Add-on (Klick auf INSTALL).

OpenHAB InfluxDB Addon.png

Die Konfiguration der des Add-ons geschieht nun via Konsole, dafür verbinden wir uns nun auf den Raspberry Pi via ssh und editieren die influxdb.cfg:

/opt/openHAB/data/openhab/conf/services/influxdb.cfg

# The database URL, e.g. http://127.0.0.1:8086 or https://127.0.0.1:8084 .
# Defaults to: http://127.0.0.1:8086
# url=http(s)://<host>:<port>
url=http://127.0.0.1:8086

# The name of the database user, e.g. openhab.
# Defaults to: openhab
# user=<user>
user=openhab

# The password of the database user.
# password=
password=havpsderffCofpit9

# The name of the database, e.g. openhab.
# Defaults to: openhab
# db=<database>
db=openhab_db

Bitte hier eure vorher verwendeten Zugangsdaten verwenden. Stehen im .env File im Docker Combos Projektordner.

Zu guter Letzt stellen wir noch ein, das die InfluxDB unser Standard für Persistenz ist. Unter Configuration --> System --> Persistence wählen wir influxdb aus.

OpenHAB Persistence mit InfluxDB .png

Um nun für alle angelegten Items eine Persistenz zu aktivieren legen wir noch in /conf/perstence/ eine influxdb.persist Datei an:

/opt/openHAB/data/openhab/conf/persistence/influxdb.persist

Strategies {
}

Items {
   *: strategy = everyUpdate, restoreOnStartup
}

Diese Konfiguration sorgt dafür das die Werte bei jedem Update gespeichert werden und dass diese bei einem Neustart von openHAB wiederhergestellt werden. Jedes Update ist wichtig um schöne Grafiken produzieren zu können.

Dies reicht uns ersteinmal. Für mehr Informationen rund um das Thema openHAB und Persistence könnt ihr diesen Links folgen:

Mit den nun abgesicherten Daten, kann man nun zum Beispiel in HABPanel das Widget Diagram verwenden oder die Daten mit Grafana auswerten. Mehr dazu weiter unten.

Erstellung von Regeln und Szenen

Für das Erstellen von Regeln und Szenen bringt PaperUI eigene Rules mit, die allerdings noch im Experimental Status sind. Unter Add-ons --> Misc findet ihr die Rule Engine. Einfach installieren und ihr werdet einen neuen Menü Eintrag mit Rules sehen:

OpenHAB PaperUI Rule Engine Installation.png

Die Rule Engine ist zum Konfigurieren eigener Regeln da, zum Beispiel Sonnenschutz AN wenn die Temperatur bei mehr als 24 Grad draußen ist oder Szenen wie Sonnenschutz, bei der zum Beispiel alle Rollläden auf 30% herunterfahren.

Sonnenschutz Szene

Ich möchte eine Aktion bzw. Szene erstellen, bei der sämtliche Rollläden per Knopfdruck auf 30% gehen, was bei mir dem entspricht das alle Rollläden gesprenkelt sind und so einen guten Schutz gegen die Hitze und Sonne im Sommer bieten. Zusätzlich möchte ich dann auch automatisch die Markise ausfahren.

Zuerst brauchen wir ein Switch Item um die Szene zu aktivieren. PaperUI --> Configuration --> Items

OpenHAB Scene Item Sonnenschutz.png


Ich habe dann der Einfachheit halber in PaperUI --> Configuration --> Items, eine Gruppe mit der Item ID Rollladen_Sonnenschutz erstellt und in diese dann alle Rolladen Items, bei denen der Sonnenschutz greifen soll hinzugefügt:

OpenHAB Gruppe Rollladen Sonnenschutz.png

OpenHAB Gruppe Sonnenschutz.png

Nun erstellen wir eine Regel, die alle Rollläden auf den Wert 30% fährt, via Alexa ausgibt das der Sonnenschutz aktiviert ist und die Markise ausfährt. Dafür im PaperUI Menü auf Rules gehen und eine Neue Regel mit Namen Sonnenschutz erstellen:

OpenHAB Rules Sonnenschutz 1.png

OpenHAB PaperUI Rule Sonnenschutz 2.png

Die Regel sieht dann wie folgt aus:

OpenHAB PaperUI Rule Sonnenschutz 3.png


Nun die Regel speichern in dem man oben auf den blau hinterlegten Haken klickt und für einen ersten Test einfach auf das Play Symbol klicken:

OpenHAB PaperUI Rule Sonnenschutz 7.png

Nun bauen wir uns noch via HABPanel und dem Button Widget einen Auslösebutton:


Das Endergebnis sieht dann so aus und sollte wenn alles richtig ist beim drücken den Sonnenschutz ausführen und Alexa sollte eine Ausgabe machen.

HABPanel Sonneschutz Widget 5.png

Möchte man nun auch noch via Alexa Spracheingabe diese Scene verwenden, dann schaut am besten hier mal rein:

Weitere Regeln

Hier habe ich eine Sammlung diverser Regeln dokumentiert. Via Paper UI und via Rules Dateien. Es gibt noch ein paar Dinge die unter Paper UI Rules nicht gehen, deshalb der Mix. Einfache Regeln kann man aber wunderbar via Paper UI Rules erstellen.

Konfiguration HABPanel als Dashboard

Kommen wir nur zu unseren Dashboards um zum Beispiel die Temperatur anzuzeigen, Rolläden zu steuern oder Lichter an und auszuschalten. Wie man ein erstes Dashboard erstellt, findet ihr hier:

Nach dem ihr nun in etwa wisst wie man Dashboards baut, kommen wir nun zurück zum Raspberry Pi und unserem Touchdisplay. Um das Dashboard auf dem Touchdisplay anzeigen zu können brauchen wir eine GUI und einen Browser im Kiosk Mode. Wie das geht findet ihr hier:

Nach dem nun die Basics eingerichtet sind hier noch ein paar nützliche Artikel zum Thema HABPanel:

Einstellung der Touchdisplay Helligkeit einrichten

Ich habe mittels Exec Binding und HABPanel Slider Widget einen Schieberegler für die Display Helligkeit des Raspberry Pi Displays gebaut. Dafür sind einige Hacks erforderlich. Wie das Ganze funktioniert Könnt ihr hier sehen:

Ich habe zusätzlich noch Regeln erstellt, die das Display automatisch Tageszeit abhängig heller oder dunkler machen.

In Paper UI in den Menü Punkt Rules wechseln.

Dort habe ich drei Regeln erstellt:

  1. Touchdisplay Dunkel: its a fixed time of day (06:00 Uhr) --> send a command (Display Helligkeit Eingabewert = 100)
  2. Touchdisplay Normal: its a fixed time of day (08:00 Uhr) & its a fixed time of day (18:00 Uhr) --> send a command (Display Helligkeit Eingabewert = 120)
  3. Touchdisplay Hell: its a fixed time of day (12:00 Uhr) --> send a command (Display Helligkeit Eingabewert = 150)

Cloud Integration myopenhab.org

Möchte man seine Private openHAB Instanz dennoch von überall der Welt steuern, kann man diese mittel www.myopenhab.org ohne Portfreigabe und Dyndns benutzbar machen. Hierfür installieren wir als erstes in openHABs PaperUI den openHAB Cloud Connector.

OpenHAB PaperUI Cloud Connector.png


Nun brauchen wir noch den Secret Key und die UUID:

cat /var/lib/docker/volumes/openhab_data_openhab_userdata/_data/openhabcloud/secret 
cat /var/lib/docker/volumes/openhab_data_openhab_userdata/_data/uuid

Die beiden Keys sollte man dann via copy and paste auf der Registrierseite https://myopenhab.org einfügen um einen account zu erstellen.

MyopenHAB register.png

Die Konfiguration des Cloud Connector findet man in der PaperUI unter Configuration --> Services --> IO --> OpenHAB Cloud:

OpenHAB Cloud Configuration.png

Ich habe hier jedoch keine Einstellungen vorgenommen. Man kann hier die ITEMS die in die Cloud dürfen beschränken. Wenn man sich nun unter https://myopenhab.org einloggt sollte man dann bei Erfolg ein Online sehen:

MyopenHAB openHAB Setup Online.png

Nun kann man entweder via Browser, oder Mobileapp von überall via Internet auf die daheim laufenden Smart Home Installation zugreifen.

In der Mobileapp verwenden wir einfach die URL https://myopenhab.org und unseren Benutzernamen und das Passwort, welches wir vorhin erstellt haben.

Steuerung durch Amazon Alexa

Möchte man via Alexa Kommando Items Steuern, also zum Beispiel mit "Alexa Rolladen im Schlafzimmer komplett hoch!" oder "Alexa, wie ist die Temperatur im Wohnzimmer?" benötigt man folgende Komponenten:

  • Amazon Alexa fähiges Gerät
  • openHAB Cloud Anbindung
  • Items mit den richtigen TAGS oder Metadata

Dabei ist die alte Methode ein Item einfach zu taggen, mit der neuen Metadata Methode hat man deutlich mehr Möglichkeiten zur Konfiguration.

Wie dies im Detail funktioniert, findet ihr in diesem Artikel:

Touchdisplay Nachts ausschalten

Da ich Nachts den Raspberry Pi Kiosk nicht brauche, schalte ich mittels cronjob nachts das Display aus. Man kann auch mittels Zeitsteuerung die Display Beleuchtung anpassen falls man dies nicht via PaperUI Rule machen möchte. Der Vorteil der PaperUI Rule ist, das dass Item dann immer den aktuellen und richtigen Wert hat.

/etc/cron.d/touchdisplay

# Anschalten 5:50 Uhr
50 5 * * * root echo '0' > /sys/class/backlight/rpi_backlight/bl_power
# Ausschalten 22:30 Uhr
30 22 * * * root echo '1' > /sys/class/backlight/rpi_backlight/bl_power

# Optional wenn nicht via openHAB Rule
# hell am Vormittag
#0 10 * * * root echo '100' > /sys/class/backlight/rpi_backlight/brightness
# hell am Tag
#0 13 * * * root echo '200' > /sys/class/backlight/rpi_backlight/brightness
# dunkel am Abend und Morgen
#0 19 * * * root echo '50' > /sys/class/backlight/rpi_backlight/brightness

Optional: Browser Nachts beenden

Um ein wenig Last vom System zu nehmen, kann nachts auch der Browser geschlossen werden. Ein täglicher Restart des Browsers ist vielleicht auch gar nicht so verkehrt, da er doch einiges am Memory frisst.

ich habe folgende Zeilen einfach an den obenstehendes Cron job angehängt:

/etc/cron.d/touchdisplay

...

# chromium stoppen
30 22 * * * root killall chromium-browse
# chromium starten
50 5 * * * pi DISPLAY=:0 chromium-browser 'http://localhost:8080/habpanel/#/view/Overview' --incognito --kiosk --disable-component-update --check-for-update-interval=31536000 > /dev/null

Konfiguration Grafana

Zugriff via Browser:

http://YOURRASPBERRYPIIP:3000

oder

http://YOURRASPBERRYPIHOSTNAME:3000

Der Standard Benutzer ist admin und das Passwort ebenfalls, also admin, admin. Man wird direkt nach dem Einloggen aufgefordert dieses zu ändern. Nun begrüßt uns die Wilkommensseite und fordert uns direkt auf, eine Data Source hinzuzufügen was wir auch gleich machen:

OpenHAB Grafana InfluxDB konfigurieren 1.png

hier suchen wir nun nach influxdb und wählen dies aus:

OpenHAB Grafana InfluxDB konfigurieren 2.png

Nun geben wir unsere DB Credentials an, diese könnt ihr eurem .env File wieder entnehmen. Die Datenbank heißt openhab_db

OpenHAB Grafana InfluxDB konfigurieren 3.png

nach dem klicken auf Save + Test sollte eine Success Meldung kommen:

OpenHAB Grafana InfluxDB konfigurieren 4.png

Nun erstellen wir uns zum Test ein neues Dashboard um die Temperatur anzuzeigen.

OpenHAB Grafana Dashboard erstellen.png

Nun erstellen wir unser erstes Panel in dem wir auf Add Query gehen:

OpenHAB Grafana New Query.png

Nun Wähle wir einfach in der FROM Zeile unser gewünschtes Item aus. Ich habe hier einfach mal zum Test die aktuelle OpenWeatherMap Temperatur genommen.

OpenHAB Grafana Tempeartur Panel 1.png

Damit die Werte schön als Kurve und nicht nur als Meßpunkte angezeigt werden, wählt bei Null value einfach connected aus.

OpenHAB Grafana Tempeartur Panel 2.png

Nun geben wir noch der linken Y Achse mit, das es sich um °C handelt.

OpenHAB Grafana Tempeartur Panel 6.png

Vergeben einen Namen für das Panel und speichern das Panels samt Dashboard ab.

OpenHAB Grafana Tempeartur Panel 3.png

Name vergeben und speichern.

OpenHAB Grafana Tempeartur Panel 4.png

Das Ergebnis sieht dann so aus:

OpenHAB Grafana Tempeartur Panel 5.png

Das Ganze kann man beliebig oft und mit beliebig vielen anderen Grafiken und Werten machen. Am besten einfach ein wenig herumspielen. Hier ein paar kleine Ideen:


Backup

Backup ist wie immer obligatorisch und kann mittels meiner Scripte eingerichtet werden.

Dafür laden wir uns die Scripte als erstes herunter:

cd /usr/local/sbin
wget https://raw.githubusercontent.com/alaub81/scripts/master/backup-docker-volume.sh
wget https://raw.githubusercontent.com/alaub81/scripts/master/backup-docker-compose.sh
wget https://raw.githubusercontent.com/alaub81/scripts/master/backup-local-system.sh
chmod +x backup-*

bei beiden Skripten habe ich die Default Einstellungen verwendent, damit wird alles gesichert.

Tägliches Backup einrichten:

ln -s /usr/local/sbin/backup-docker-compose.sh /etc/cron.daily/backup-docker-compose
ln -s /usr/local/sbin/backup-docker-volume.sh /etc/cron.daily/backup-docker-volume
ln -s /usr/local/sbin/backup-local-system.sh /etc/cron.daily/backup-local-system

Einen ersten Testlauf kann man durch einfaches aufrufen der Skripte machen:

backup-docker-compose.sh
backup-docker-volume.sh
backup-local-system.sh
# prüfen ob was da ist:
ls -la /backup/*/*

Solltet ihr beim ausführen von backup-docker-volume.sh folgendes Warning bekommen:

WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

Kann man dies auf zwei arten loswerden:

A: Docker Container Memory Verbrauch begrenzen

B: Zeile mit MEMORYLIMIT="-m 35m" im backup-docker-volume.sh Skript auskommentieren. (Wenn man keine zu Hohe Memory Auslastung hat, ist dies der einfachere Weg)

Eine Ausführliche Anleitung wie man eine Docker Umgebung sichert und wiederherstellt findet ihr hier.

Nicht vergessen am besten den Backup Ordner noch auf eine anderes System kopieren, ein NAS zum Beispiel oder in die Cloud.

Weiterführende Artikel zum Thema openHAB

Außerdem habe ich noch die folgenden Dinge Umgesetzt:

Hier findet ihr alle weiteren Artikel zum Thema openHAB:

Oder in der Kategorie openHAB:

Quellen