Smart Home Integration mit openHAB und RED Brick

Für diese Projekt setzen wir voraus, dass eine aufgebaut RED Brick Wetterstation vorhanden ist, dass der RED Brick mit mindesten Image Version 1.6 läuft und dass mindestens Brick Viewer 2.2.3 installiert ist.

Die in diesem Projekt verwendete openHAB Konfiguration basiert auf einem Beispiel von einem der openHAB Entwickler. Das originale Beispiel ist auf GitHub abrufbar.

Ziele

Wir setzen uns folgende Ziele für dieses Projekt:

  • Temperatur, Helligkeit, Luftfeuchte und Luftdruck sollen auf dem LCD 20x4 Bricklet angezeigt werden,
  • die gemessenen Werte sollen automatisch aktualisiert werden sobald sie sich verändern und
  • mit Knopf 0 am LCD 20x4 Bricklet soll die Hintergrundbeleuchtung des Displays an- und ausgeschaltet werden können.

Zusätzlich, wenn der RED Brick Netzwerkverbindung hat:

  • Temperatur, Helligkeit, Luftfeuchte und Luftdruck sollen auf einer openHAB Sitemap im RED Brick Web Interface angezeigt werden.

Im Folgenden werden wir Schritt für Schritt zeigen wie openHAB konfiguriert werden muss um diese Ziele zu erreichen.

Schritt 1: openHAB Service aktivieren

Der openHAB Service ist auf dem RED Brick standardmäßig deaktiviert, da er etwas länger zum Starten benötigt und so den Bootprozess etwas verlangsamt. Daher müssen wir zuerst openHAB aktivieren. Die RED Brick Services Dokumentation erklärt wie das geht.

Schritt 2: Bricklet Items definieren

Bricks und Bricklets werden in openHAB durch Items repräsentiert. Diese Items werden in .items Konfigurationsdateien definiert die auf dem RED Brick gespeichert werden. Der Brick Viewer ermöglicht es diese Dateien zu bearbeiten. Die RED Brick openHAB Dokumentation enthält mehr Details dazu.

  1. Öffne den openHAB Settings Tab im Brick Viewer und klicke auf New.
  2. Gib weather-station.items als Name ein und klicke auf Create.
  3. Kopiere das unten stehende .items Template in das leere Textfeld.
  4. Ersetze die UID Platzhalter (z.B. <HUMIDITY_UID>) durch die entsprechenden UIDs deiner Bricklets.
  5. Klicke auf Apply Changes um die Datei zu speichern.

Dies ist das .items Template (download), das in Schritt 3 verwendet wird:

Number TF_Humidity               "Humidity [%.1f %%]"    { tinkerforge="uid=<HUMIDITY_UID>" }
Number TF_Barometer              "Pressure [%.0f hPa]"   { tinkerforge="uid=<BAROMETER_UID>" }
Number TF_Barometer_Temperature  "Temperature [%.1f °C]" { tinkerforge="uid=<BAROMETER_UID>, subid=temperature" }
Number TF_AmbientLight           "Luminance [%.0f lx]"   { tinkerforge="uid=<AMBIENT_LIGHT_UID>" }
String TF_LCD                    "LCD"                   { tinkerforge="uid=<LCD_20X4_UID>"}
Switch TF_LCD_Backlight          "LCD Backlight"         { tinkerforge="uid=<LCD_20X4_UID>, subid=backlight"}
Switch TF_Button0                "Button0"               { tinkerforge="uid=<LCD_20X4_UID>, subid=button0"}

Schritt 3: Rules definieren

Rules ermögliches es Ereignisse und Aktionen in Wenn-Dann artiger Weise zu verbinden. Wir nutzen dies um die gemessenen Werte auf dem LCD 20x4 Bricklet anzuzeigen, wenn sie sich ändern.

Erzeuge eine neue Config Datei (wie in Schritt 1 beschrieben) namens weather-station.rules mit folgendem Inhalt (download):

import org.openhab.core.library.types.*

var Integer initialSleepTime = 10

rule "Weather Station LCD Init From Backlight"
when
    Item TF_LCD_Backlight changed or System started
then
    createTimer(now.plusSeconds(initialSleepTime)) [|
        sendCommand(TF_LCD, "TFNUM<00>Temperature:")
        sendCommand(TF_LCD, "TFNUM<019>C")
        sendCommand(TF_LCD, "TFNUM<10>Humidity   :")
        sendCommand(TF_LCD, "TFNUM<119>%")
        sendCommand(TF_LCD, "TFNUM<20>Pressure   :")
        sendCommand(TF_LCD, "TFNUM<217>hPa")
        sendCommand(TF_LCD, "TFNUM<30>Luminance  :")
        sendCommand(TF_LCD, "TFNUM<318>lx")
        sendCommand(TF_LCD, String::format("TFNUM<013>%4s", TF_Barometer_Temperature.state.format("%.1f")))
        sendCommand(TF_LCD, String::format("TFNUM<113>%4s", TF_Humidity.state.format("%.1f")))
        sendCommand(TF_LCD, String::format("TFNUM<213>%4s", TF_Barometer.state.format("%.0f")))
        sendCommand(TF_LCD, String::format("TFNUM<313>%4s", TF_AmbientLight.state.format("%.0f")))
    ]

end

rule "Goodbye"
when
    System shuts down
then
    sendCommand(TF_LCD_Backlight, OFF)
end

rule "Weather Station LCD Backlight"
when
    Item TF_Button0 changed
then
    if (TF_LCD_Backlight.state == ON)
        sendCommand(TF_LCD_Backlight, OFF)
    else
        sendCommand(TF_LCD_Backlight, ON)
end

rule "Weather Station LCD Update Temperature"
when
    Item TF_Barometer_Temperature received update
then
    sendCommand(TF_LCD, String::format("TFNUM<013>%4s", TF_Barometer_Temperature.state.format("%.1f")))
end

rule "Weather Station LCD Update Humidity"
when
    Item TF_Humidity received update
then
    sendCommand(TF_LCD, String::format("TFNUM<113>%4s", TF_Humidity.state.format("%.1f")))
end

rule "Weather Station LCD Update Air Pressure"
when
    Item TF_Barometer received update
then
    sendCommand(TF_LCD, String::format("TFNUM<213>%4s", TF_Barometer.state.format("%.0f")))
end

rule "Weather Station LCD Update Ambient Light"
when
    Item TF_AmbientLight received update
then
    sendCommand(TF_LCD, String::format("TFNUM<313>%4s", TF_AmbientLight.state.format("%.0f")))
end
  • Die "Weather Station LCD Init From Backlight" Rule schreibt den fixen Teil des Textes auf das Display und schaltet die Hintergrundbeleuchtung ein.
  • Die "Weather Station LCD Update *" Rules aktualisieren die angezeigten Messwerte wenn sie sich ändern.
  • Die "Weather Station LCD Backlight" Rule schaltet die Hintergrundbeleuchtung ein und aus, wenn Knopf 0 am LCD 20x4 Bricklet gedrückt wird.

Schritt 4: Sitemap definieren

Eine Sitemap definiert die Elemente des openHAB User Interfaces. Wir nutzen dies, um die Messwerte im RED Brick Web Interface anzuzeigen.

Erzeuge eine neue Config Datei (wie in Schritt 1 beschrieben) namens weather-station.sitemap mit folgendem Inhalt (download):

sitemap tf_weather_station label="Starter Kit: Weather Station"
{
    Frame
    {
        Text item=TF_Humidity
        Text item=TF_Barometer
        Text item=TF_Barometer_Temperature
        Text item=TF_AmbientLight
        Switch item=TF_LCD_Backlight
    }
}

Jetzt ist das Web Interface dieser Sitemap erreichbar unter:

http://<RED_BRICK_IP_ADDRESS>:8080/openhab.app?sitemap=weather-station
openHAB Beispiel Sitemap

Alternativ kann auch die Sitemap auch über das RED Brick Web Interface aufgerufen werden, da sort alle Sitemaps verlinkt sind:

http://<RED_BRICK_IP_ADDRESS>