Space Automation

von schinken Hardware Software

Vortrag

Schinken hat über unsere Automatisierung an der Gulschprogrammiernacht 2014 einen Vortrag über die Spaceautomation gehalten:

Spaceautomatisierung - Wie man mit Software wie OpenHAB einen Space komplett per Web oder App steuerbar machen kann.

Zielsetzung

Nachdem immer mehr Geräte in unserem Space vorhanden sind und unsere Raum-FAQ immer voller wurde, mussten wir eine Lösung finden um den Hackerspace möglichst einfach "herunterzufahren". Bisher mussten an vielen Stellen Stecker gesteckt oder gezogen werden, Sicherungen an/ausgeschalten, Heizungsthermostate gedreht und Türen sowie die Jalousie kontrolliert werden.

Gerade für neue Mitglieder gestaltet sich diese Prozedur etwas unüberschaubar. In den meisten Fällen wurde aber zum Glück lediglich die Stereoanlage oder die Heizung vergessen auszuschalten.

Das gesetzte Ziel: Möglichst alles mit einem einzigen Taster abschalten!

Setup

Für unsere Installation haben wir die Java Umgebung OpenHAB gewählt. Mit diesem Programm ist es möglich, verschiedene Geräte per "Binding" zu kombinieren. Bindings sind getrennte Komponenten, gepackt in .jar Container, die einfach in den openhab/addons Ordner kopiert werden.

Ein rießiger Vorteil von OpenHAB ist die Möglichkeit, Dateien und Addons "On-The-Fly" nachladen zu können. Das Programm registriert automatisch Dateiänderungen oder wenn Bindings hinzugefügt oder entfernt werden. Außerdem liefert OpenHAB einen Designer, mit dem Sitemaps und Items editiert werden können, sowie eine eigene Scriptsprache inklusive Syntaxhighlighting,

Desweiteren existiert für OpenHAB eine Android und iPhone-App, sowie eine Web-Oberfläche. Die Konfiguration wird dabei jeweils dynamisch aus der Serverkonfiguration generiert. Geräte mit HABDroid bzw. der iPhone-App erkennen automatisch im WLAN die OpenHAB-Installation und zeigen unsere aktuelle Konfiguration an. Dadurch müssen keine selbstprogrammierten Apps aktualisiert werden.

Hardware

Um den Space für jedes Mitglied steuerbar zu machen hat unser Mitglied xoquox zwei 7 Zoll LélikTec Tablets in unseren Räumen installiert. Eines befindet sich in unserer Lounge (Host: brain), sowie eines in unserem Hackcenter (Host: pinky).

Wir versuchen viele verschiedene Hardware zu verwenden, welche für ihren Bereich sehr gut funktioniert um diese dann mit OpenHAB unter ein Dach zu bekommen. Hierfür währen noch KNX-Geräte wünschenswert, da diese sehr gut in Stromkästen verbaut werden können.

Bindings

Aktuell Verwenden wir folgende Bindings:

MPD

Das MPD-Binding verwenden wir um unsere mopidy-spotify-Installation steuern zu können. Hier gibt es in unserem Setup die Möglichkeit die Musik zu pausieren, sowie die Lautstärke zu regulieren

Onkyo

Mit diesem Binding steuern wir unseren Onkyo-Receiver, welcher als Medienzentrale in der Lounge steht. Hier wird z.B. beim Klingeln der Tür automatisch die Lautstärke des Receivers runtergedreht, aber auch beim Einschalten des Gerätes der dazugehörige Subwoofer per Funksteckdose geschalten.

Astro

Über die Lat/Lon des Hackerspaces ermitteln wir den aktuellen Sonnenstand und damit die Sunset/Sunrise-Zeit. Dadurch fahren wir nur unsere Rollos hoch, wenn auch noch hell drausen ist.

HTTP

Viele unsere Komponenten im Space sind per REST-API steuerbar. Dazu gehört das Ledboard, Webrelais sowie unser neustes Projekt-Mitglied Funkstrom. Durch einfaches senden der HTTP-Methoden POST oder DELETE können unsere Relais oder die Funksteckdosen geschalten werden.

Für den Status bieten unsere APIs noch den responsetype "OpenHAB" welcher ein ON oder OFF representiert, da wir noch nicht erfolgreich eine JSON-Response in OpenHAB auswerten konnten.

SNMP

Per SNMP holen wir verschiedene Werte ab, um sie in der App darzustellen. Unter anderem sind das Temperaturen der verschiedenen Räume, unseren Kontostand oder der Load unseres Servers.

HomeMatic

HomeMatic ist ein System von eQ-3 AG das wir über ELV bestellt haben.

Das "HomeMatic" Setup ist schon das zweite System das wir in unserem Space verwenden. Ein erster Aufbau mit Produkten der MAX! Serie selben Herstellers wurde aufgrund des noch instabilen Bindings (wackelig) verworfen. Die "HomeMatic" Serie wird dank der größeren Community besser von openHAB unterstützt.

Wir verwenden von HomeMatic die Heizungsthermostate sowie die Funk-Rauchmelder. Im Test haben wir zudem ein 4-Fach-Funktaster.

MQTT

Viele externe Events kommen über den MQTT-Events bei OpenHAB an. Diese Events werden durch verschiedene RaspberryPIs, unseren Bot usw. über den MQTT-Broker "mosquitto" verschickt

topicQoSretainedbodytypedescriptionactive
psa/alarm1nomessagestringirc alarm messageactive
psa/message0nomessagestringpublic service announcement messageactive
psa/pizza1nonon empty valuestring/numberirc pizza messageactive
psa/sound1nomessagestringsound file located in nfs/music/ircSoundsactive
psa/rick_me0nomessagestringjust listenactive
sensor/door/frame0yesopen/closedstringif the door is open or closedactive
sensor/door/lock0yesopen/closedstringif the door is locked or unlockedactive
sensor/door/button0yespressed/releasedstringif the door button is pressedactive
sensor/door/bell0yespressed/releasedstringif the door bell ringsactive
sensor/backdoor/lock0yesopen/closedstringstatus of the backdoor lockactive
sensor/door/cnc0yesopen/closedstringdoor server to cncactive
sensor/door/restroom0yesopen/closedstringdoor server to restroominactive
sensor/button/hackcenter/00yespressed/releasedstringHackcenter Button-Panel Button #0active
sensor/button/hackcenter/10yespressed/releasedstringHackcenter Button-Panel Button #1active
sensor/button/hackcenter/20yespressed/releasedstringHackcenter Button-Panel Button #2active
sensor/button/hackcenter/30yespressed/releasedstringHackcenter Button-Panel Button #3active
sensor/door/hackcenter0yesopen/closedstringdoor server to hackcenteractive
sensor/door/lounge0yesopen/closedstringdoor server to loungeactive
sensor/co2/hackcenter0yesCO²intco2 value of co2monitoractive
sensor/temperature/lounge/podest0yestemperaturefloattemperatureactive
sensor/temperature/lounge/ceiling0yestemperaturefloattemperatureactive
sensor/temperature/hackcenter/shelf0yestemperaturefloattemperatureactive
sensor/temperature/hackcenter/co2monitor0yestemperaturefloattemperatureinactive
sensor/temperature/misc/cnc0yestemperaturefloattemperatureactive
sensor/temperature/misc/restroom0yestemperaturefloattemperatureactive
sensor/temperature/misc/rack0yestemperaturefloattemperatureactive
sensor/temperature/misc/outside0yestemperaturefloattemperatureactive
sensor/radiation/cpm0yesradiation countsintcounts per minuteactive
sensor/radiation/uSv0yesmicro-sievert (uSv)floatradiationactive
sensor/space/member/deviceCount0yesmember devicesintmember devices count-
sensor/space/member/names0nomember namesstringmember names, comma separated, sorted a-z-
sensor/space/member/present0yesmember countintmember count presentactive
sensor/space/member/count0yesmember countintregistered member countactive
sensor/space/status0yesopen/closedstringcurrent space statusactive
sensor/space/accountBalance0yesmoneyfloatcurrent account balanceactive
sensor/power/main/L10yeswattsfloatcurrent watts on L1active
sensor/power/main/L20yeswattsfloatcurrent watts on L2active
sensor/power/main/L30yeswattsfloatcurrent watts on L3active
project/laser/operation0yesactive/inactivestringcurrent laser operation stateactive
project/laser/powered0yeson/offstringlaser powered on/offactive
project/laser/duration0yessecondsintduration laser active updated every secondactive
project/laser/finished0yessecondsintduration laser active after job has finishedactive
sensor/wifi/radio/backspace_802.1x0yes# clientsintconnected clients to backspace 802.1xactive
sensor/wifi/radio/Freifunk_Backspace0yes# clientsintconnected clients to Freifunk Backspaceactive
sensor/wifi/radio/backspace.int_2.4ghz0yes# clientsintconnected clients to backspace.int 2.4ghzactive
sensor/wifi/radio/backspace_IoT0yes# clientsintconnected clients to backspace IoTactive
sensor/wifi/room/hackcenter0yes# clientsintconnected clients to AccessPoint hackcenteractive
sensor/wifi/room/lounge0yes# clientsintconnected clients to AccessPoint loungeactive

Automatisierung

Da OpenHAB über eine mächte Rule-Engine verfügt, müssen die Automatisierungen nun nicht mehr von externen Programmen orchestriert werden, sondern können jetzt in OpenHAB direkt realisiert werden.

Die aktuell implementierten Regeln findet ihr in unserem GitHub Repository.

Implementiert

  • Beim Öffnen der Tür werden:
    • ..die Rollos in der Lounge hochgefahren, wenn es aussen Dunkel ist (Astro-Binding)
    • ..die Lichter angeschalten
    • ..die Heizung aktiviert
    • ..diverse Geräte angeschalten (Ledboard, Nyancat, Briefkasten, Schild, ...)
  • Wenn die Tür klingelt:
    • ..wird die Lautstärke der Musik in der Lounge reduziert
    • ..der Sound im Hackcenter wiedergegebn
    • ..Text auf dem LED Board angeschalten
    • ..das Alarm-Licht angeschalten
  • Die Tür zum Hackcenter geöffnet wird:
    • ..Rollos fahren hoch und Licht wird angeschalten, wenn jemand vor 3 Minuten in den Space gekommen ist
  • Sicherheitswarnungen:
    • Wenn das Rack geöffnet wurde
    • Bewegungen im Space bei ungeöffneter Tür und keine Member
    • Rauchmelder schicken SMS bei Auslösung, Licht wird angeschalten und Rollos fahren hoch

Und vieles anderes mehr...

Geplant

  • Kontakte an allen Fenstern für ALARM (Wenn niemand da und Fenster öffnet sich)
  • Aufräum-Alarm
  • Vorheizen des Spaces im Winter für z.B. Dienstags
  • Notifications an der App, wenn beim Shutdown noch $irgendwo ein Fenster geöffnet ist

Angebundene Steuerungen

Elektrische Geräte

Über die Funksteckdosen, Powerctrl und Webrelais schalten wir diverse Lichter oder Geräte.

Hackcenter

  • Licht oben
  • Licht Regal
  • Licht Arbeitstisch
  • Neon-Lampe
  • Notausgangsbeleuchtung Weiss + Rot
  • Alarm-Licht

Lounge

Küche

  • Licht
  • Steckdosen Arbeitsplatte
  • E-Herd
  • Lager

Temperatursensoren

Unsere Temperatursensoren sind per 1-Wire an bestehende RaspberryPIs angeschlossen worden. Durch das laden des Moduls ''w1-gpio'' und ''w1-therm'' ist die Temperatur per /sys/-Dateisystem erreichbar. Um das Abfragen des Temperatursensors von einer SNMP-Anfrage zu entkoppeln, läuft ein CronJob alle 10 Minuten um die Temperatur in eine Datei im /tmp-Ordner zu schreiben.

Der SNMP-Endpunkt liesst dann nur noch den Inhalt dieser Datei.

Temperatursensoren:

1Wire IDOrtMQTT-Topic
10-000802cf03d5Lounge Podest nahe RasPisensor/temperature/lounge/podest
10-000802cefd6bAussen (Eingangstür)sensor/temperature/misc/outside
10-000802cf0decLounge Deckesensor/temperature/lounge/ceiling
10-000802ceeb04Hackcenter Stereoanlagesensor/temperature/hackcenter/shelf
10-00080294ac6fCNCsensor/temperature/misc/cnc
10-00080294c7f7WC (Lufttemperatur)sensor/temperature/misc/restroom
10-00080294a912Serverschrank nahe RasPisensor/temperature/misc/rack

Thermostate

Aktuell steuern wir unsere Heizkörper per Funk-Thermostate des Herstellers eQ-3 AG. Unser Aufbau besteht aus 7 Thermostaten der Serie HomeMatic sowie einen HomeMatic Funk-LAN Gateway, welcher das Gateway zwischen Funk und LAN bildet.