Feb 26

Display für Homematic selber gebaut – für unter 10 EUR (Teil 1 von 2)

Homematic ist ein super System. Die zahlreichen verfügbaren Komponenten lassen kaum Wünsche offen.

Kaum !

Was aber, wenn die angebotenen Status-Anzeigen einfach nicht in das Erscheinungsbild der neuen Wohnzimmer-Einrichtung passen wollen, oder Euren Anforderungen nicht genügen ?

Selber bauen !

Meine Anforderungen waren:

  • Grafik-fähig
  • stromsparend
  • groß !  Auch aus der Ferne (von der Couch) gut ablesbar
  • kostengünstig
  • ohne viele Kabel auskommen, Steuerungsmöglichkeiten per Funk
  • sollte zur Wohnzimmer-Einrichtung „passen“.
  • und natürlich mit Homematic flexibel ansteuerbar sein

Einsatzzwecke

Das Status-Display soll eingesetzt werden, um beispielsweise

  • den aktuellen Status der verschiedenen Komponenten anzuzeigen (Alarmsystem, Außentemperatur, offene Fenster usw.)
  • Zustände der einzelnen Räume (Temperatur, Heizung, Licht usw.) anzuzeigen
  • usw.

 

So siehts aus… die fertige Lösung

Das fertige LED-Matrix Display Marke China-Eigenbau im Einsatz…

Ein Display integriert in die Wohnztimmer-Möbel, hier hinter einer halbdurchlässigen Rauchglas-Scheibe montiert. Steuerbar per Homematic über MQTT oder über NodeRED im Raspberry Pi.

 

Das Display

Eine 4fache 8×8 Matrix mit Max7219 Controller vom Ebay-Händler aus China – für knapp 5 EUR

Bei Auswahl der Hardware habe ich mich beim eigentlichen Display für eine 8×8 LED-Matrix entschieden. Diese gibt es mit 4 Modulen in Reihe auf einer Platine direkt mit passendem MAX7219 Controller zur einfachen Ansteuerung.
Damit ergeben sich 4x8x8 Pixel also 24×8 = 256 einzelne LEDs. Wem das noch nicht reicht, kann zwei dieser Module horizontal oder auch vertikal kombinieren und kommt auf 512 bzw. 48×8 oder 24×16 LED-Pixel.  Denkbar wären vielleicht noch mehr davon, aber es könnte sein, dass der Controller an seine Grenzen kommt. Hierzu liegen mir noch keine Erfahrungswerte vor, die verwendete Software spricht von maximal 8 verwendbaren 8×8 Modulen.

Erfreulich: Ein 4er Modul kostet gerade mal um die 5 EUR.  Ein einzelnes sogar nur 1,50 EUR.  Ziel kostengünstig:  erreicht !  Nur etwas Geduld mitbringen, die Lieferung aus China kann schonmal 6-8 Wochen dauern – dafür aber versandkostenfrei. Verrückte Globalisierung !

OK,. ein Display haben wir, aber wie kann die Homematic damit sprechen ?

Der Controller

Unser Allheilmittel:  Der Arduino. Naja, nicht ganz. Der Arduino ist super, nur fehlt ihm etwas Entscheidendes:  Die Netzwerk-Schnittstelle. Ein Netzwerk-Shield ? Geht, ist aber vergleichsweise zu teuer, zu umständlich, zu gross.  Irgendwelche anderen Funk-Module ? Zu unflexibel für andere Einsatzzwecke.  Also was tun ?

Es muss kein Arduino sein. Es reicht auch ein vergleichbarer Microcontroller, der die Netzwerkschnittstelle evtl. schon mitbringt und vielleicht noch leistiungsfähiger, aber wesentlich günstiger ist – bei genau so einfacher und komfortabler Programmierung.

Gibts nicht ? Doch !  Es lohnt sich wieder der Blick nach China:

ESP-8266 -12e Microcontroller – aus China ab 4 EUR zu bekommen. Hier in der Bastel-Version mit Breadboard-PINs.

Der Kandidat nennt sich ESP8266, hier in der Variante 12E abgebildet und bringt eine ganze Menge mit:

  • 40 MHz CPU
  • 4 MB Flash Speicher
  • WLAN integriert
  • USB-Programmer an Board
  • sehr klein !
  • über die Arduino-IDE programmierbar
  • jede Menge GPIOs

Er bringt natürlich auch alle für Microcontroller erdenklichen Schnittstellen mit, so auch für den SPI-Bus, welchen wir für die Ansteuerung des LED-Controllers verwenden.

Den ESP 8266 gibt es noch in anderen Versionen, teilweise noch kleiner (Briefmarken-Format, dann aber ohne USB-Programmer) und günstiger.

Briefmarken-Format. ESP-8266 hier in der Mini-Version ohne Vollständige PIN-Ausführung, aber genau so leistungsstark incl. vollständiger WLAN-Schnittstelle. Der Transistor dient nur dem Größen-Vergleich

Verkabelung

ESP8266 und das LED-Modul können über den SPI-Bus miteinander verbunden werden. Dafür sind neben der Stromversorgung (3,3V + GND) nur noch 3 weitere Kabel nötig.

Die Modul-Anschlüsse: VCC (+3V), GND (Masse), DIN, CS, CLK

 

Ein starkes Team: ESP8266-12E und Max7219 LED-Matrix im 4er Paket – Gesamtpreis: 8,96 EUR incl. Kabel !

PIN-Belegung LED-Modul => ESP8266:

  • DIN => D7
  • CS => D8
  • CLK => D5
  • VIN => 3.3V
  • GND => GND

Die Software

Dann fehlt jetzt nur noch die Software….

(Fortsetzung mit Teil 2 „Software“   folgt in Kürze !)

Bleibt dran !

Viel Spaß beim Basteln….

Kami

 

 

Feb 19

Homematic CCU sendet MQTT-Nachrichten

Freunde des IoT (Internet of Things) wissen das MQTT-Protokoll für den Datenaustausch zwischen Geräten sehr zu schätzen.  MQTT ist sehr schlank und ressourcenschonend und hat sich mit seinen einfachen und dennoch flexiblen Fähigkeiten zur 1. Wahl für den Heimautomatisierungs-Bastler entwickelt.

Höchste Zeit also, um der Homematic-CCU das Versenden von MQTT-Nachrichten an andere Geräte beizubringen.
Als „Gesprächspartner“ für die CCU kämen beispielsweise in Frage:

  • Raspberry PI
  • Arduino / Genuino
  • ESP8266 Microcontroller
  • PCs (Linux, Windows, MacOS)
  • Smartphones / Tablets mit entsprechenden Apps

Diese könnten den Zustand von Homematic-Geräten aufnehmen und weiterverarbeiten. Dies ist eine wichtige Grundlage auch für die Vernetzung von ganz unterschiedlichen Systemen wie z.B. der Homematic und einem Arduino: Eine Schnittstelle !

Umgesetzt

Die Umsetzung soll möglichst einfach sein, wenige Ressourcen auf der CCU beanspruchen und leicht zu warten sein. Hierzu gibt es mehrere Lösungen, ich habe mich für eine entschieden, die (außer CUxD) ohne Plugins oder Modifikationen der CCU auskommt und stattdessen einen ein RaspberryPi nutzt .

Wir brauchen:

  • eine Homematic CCU (ach was !)
  • CUxD Daemon zur Ausführung von Exec-Kommandos auf der CCU
  • einen RaspberryPi im Heimnetz
  • einen MQTT-Broker, z.B. Mosquitto (läuft auf dem RaspberryPi)
  • einen Webserver mit PHP-Unterstützung (ebenfalls RaspberryPi)

Der Plan

Die Homematic-CCU versendet die MQTT-Nachricht per HM-Script. Dadurch sind wir flexibel bei der Einbindung in unsere Programme. Das Script enthält einen WGET-Aufruf an unseren PHP Webserver auf dem RaspberryPi. Dort wird ein PHP-Script aufgerufen, welches per URL-Parameter die Meldungsdetails entgegennimmt und an den MQTT-Broker Mosquitto (ebenfalls auf dem RaspberryPi) weitergibt. Der Mosquitto-Server erstellt dann die entsprechenden Broadcasts an die Zielgeräte.

Vorbereitungen

Als Vorbereitung bitte die folgenden Schritte ausführen. Genaue Informationen sind zu Hauf im Internet zu finden:

  1. CUxD auf der CCU installieren
  2. RaspberryPi im Heimnetz in Betrieb nehmen (LAN oder WLAN)
  3. Webserver „Apache2“ auf dem RaspberryPi installieren (incl. PHP Interpreter)
  4. Mosquitto-Broker auf dem RaspberryPi installieren
  5. Entsprechende MQTT-Clients auf euren Zielgeräten einrichten

 

Los gehts…

In das www-Verzeichnis des Apache Webservers auf unserem RaspberryPi packen wir nun das folgende Script und nennen es „mqtt_send.php“:

<?php 
  echo("<h1>Send MQTT-Message</h1>");
  $server  = escapeshellcmd($_REQUEST["p_server"]); 
  $topic   = escapeshellcmd($_REQUEST["p_topic"]); 
  $message = escapeshellcmd($_REQUEST["p_message"]); 

  echo("<BR>Server: ".$server);
  echo("<BR>Topic: ".$topic);
  echo("<BR>Message: ".$message);

  exec("mosquitto_pub -h ".$server." -t ".$topic." -m ".$message);

  echo("<BR>Fertig.");
?>

Dieses Script sendet eine MQTT-Message über den Mosquitto-Client auf dem RaspberryPi.

Dazu fragt es beim Aufruf die übergebenen Parameter ab:

  • p_server:   Server-Adresse unseres MQTT-Brokers (in unserem Fall identisch mit der IP-Adresse des RaspberryPi. (z.B. 192.168.178.123)
  • p_topic:  das Topic unserer Nachricht  (z.B. „hue_beleuchtung“)
  • p_message:  der Inhalt unserer „Nachricht“  (z.B. „gedimmt_fernsehen“)

Anschließend wird aus den Parametern der EXEC-Befehl generiert und an die Kommandozeile des Raspberrys zur Ausführung gegeben.

Somit brauchen wir nur noch ein Homematic-Script, welches das PHP-Script samt Parametern aufruft:

string stdout;
string stderr;
string url="";
string topic="hue";
string message="aus";

url="http://(IP-Adresse-des-Raspberrys)/mqtt_send.php?p_server=(IP-Adresse-des-MQTT-Brokers)&p_topic="#topic#"&p_message="#message#"";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -O /dev/null -q '"#url#"'");

Hier müsst Ihr noch die IP-Adressen und die Details der Nachricht in den Variablen „topic“ und „message“ sowie ggf. die CUxD-Objektbezeichnung anpassen.

Es kommt das CUxD-Tool auf der CCU zum Einsatz, um zuverlässige System-Executes ausführen zu können. Diese rufen den standardmässig installierten wget zum Absenden des HTTP-Requests an den Apache Server auf.

Fortan kann die Homematic-CCU also über diesen Weg per Script Nachrichten an den MQTT-Broker senden.

Und wozu das Ganze ?

Die Einsatzzwecke der CCU im Zusammenspiel mit dem IoT erweitern sich dadurch enorm. Folgende Funktionen werden möglich:

  • Datenaustausch mit einem Arduino, z.B. Schaltzustände an den GPIOs des Arduino aus der CCU setzen.
  • Kommunikation zwischen Homematic und Node-red, dadurch fast unendliche Möglichkeiten
  • Steuerung von externen Displays
  • Daten-Logging in verschiedenen Datenbanken
  • ….
  • ….

In einem der nächsten Beiträge berichte ich über konkrete Projekte, in denen die MQTT-Kommunikation zwischen Homematic und anderen Systemen zum Einsatz kommt.

Viel Spaß beim Basteln !

Kami

Jul 18

Anwesenheits-Simulation mit Homematic: Licht und andere Aktoren zufällig schalten

Ein neues Homematic-Projekt passend zur Urlaubszeit:

Wir bauen uns eine Anwesenheits-Simulation zur Abschreckung von Einbrechern.
Unser Haus soll den Eindruck erwecken, dass jemand zuhause ist. Ein guter Anfang ist die Rolladen-Steuerung. Gehen die Rolladen abends automatisch runter und morgends wieder hoch, ist es für vorbeifahrende Gauner schonmal schwerer zu erkennen, dass niemand zuhause ist. Bitte nicht das Haus mit halb geschlossenen Rolladen verlassen, wie in meiner Nachbarschaft einige praktizieren. Dass heisst übersetzt: „wir sind mindestens 2 Wochen in Urlaub und keiner ist da“.

Die Homematic-Rolladensteuerung ist wahrscheinlich jedem bekannt, darauf gehe ich hier nicht näher ein. Nur ein Tipp:  Lasst die Rolladen zeitlich versetzt hoch- und runterfahren, vielleicht in 1-2 Minuten Abstand das erweckt nicht den Eindruck, dass eine vollautomatische Steuerung den Job auch ohne Anwesenheit übernimmt.

Zufällige Lichtsteuerung

Eine Anwesenheits-Simulation soll den Eindruck erwecken, dass jemand im Haus ist. Also wären Lampen, die sich zufällig ein- und ausschalten eine geeignete Sache. Die Lampen sollten natürlich so gewählt werden, dass sie einen von außen sichtbaren Lichtschein werfen. Also z.B. eine Flur-Beleuchtung, sofern die Haustür Glas-Elemente besitzt.  Dass diese Lampen mit Homematic-Schaltaktoren versehen sind, wird natürlich hier vorausgesetzt.

Zufalls-Generator ?

Mit Homematic Lampen schalten ist einfach.  Aber für unsere Anwesenheits-Simulation müssen wir diese zufällig schalten. Einbrecher erkennen sonst leicht die „an“-„aus“ Muster einer statischen Programmierung.

Wir brauchen also: Einen Zufalls-Generator !
Aber: Kann die Homematic „Zufall“ ??

Ja und Nein.  „Echter“ Zufall im mathematischen Sinne ist gar nicht so einfach. Eine präzise Zufalls-Ermittlung ist aber für unsere Zwecke gar nicht nötig. Wir begnügen uns also mit „Pseudo-Zufall“. Und das ist auch mit Homematic-Mitteln möglich:

Es geht los…

Wir brauchen:

  • Zwei Homematic-Variablen:   „_ZUFALL_“  und „Zufall_10“
  • Programme:  Ein Initialisierungs-Script „Zufall_Seed“, ein weiteres Seed-Script „Zufall_Temp“ und ein Aktualisierungsprogramm „Zufall_Akt“
  • Ein Programm für die regelmäßige Änderung der Zufalls-Werte

1. Variable „_ZUFALL_“ anlegen:

Die Variable „_ZUFALL_“ ist eine Hilfsvariable, welche den Pseudo-Zufallswert enthalten wird. Aus diesem Wert leiten wir uns einen Arbeitswert für die Verwendung in Homematic-Programmen ab. In unserem Fall möchten wir einen Wert zwischen 0 und 10 erzeugen, daher heisst die Arbeitsvariable „Zufall_10“.

2. Programm anlegen „Zufall_Seed“:

Die _ZUFALL_ Variable muss nun mit einem Zufallswert „gefüttert“ werden. Hierfür verwenden wir ein Homematic-Programm „Zufall_Seed“ mit eingebautem Script:

Initialisierung des Zufalls-Wertes bei CCU-Neustart

Initialisierung des Zufalls-Wertes bei CCU-Neustart

In das Script packen wir den folgenden Code:

var seed = system.Date("%S").ToInteger();
var sv_rand = dom.GetObject("_ZUFALL_");
sv_rand.State(seed);

Was passiert: Die Sekunden der aktuellen Systemzeit werden als Startwert verwendet. Das ist natürlich kein echter Zufall, der Pseudo-Zufall reicht aber, wenn das Seed-Script zu einer „zufälligen“ Uhrzeit aufgerufen wird. Das sollte zunächst beim Neustart der CCU-Zentrale erfolgen, damit die Variable nicht leer ist. (Homematic-Programm anlegen, ohne Ausführungs-Bedingung)

3. Periodische Neuinitialisierung nach zufälligem Zeitpunkt: Programm „Zufall_Temp“ anlegen

Die Anzahl der Sekunden nach beim Neustart der Zentrale ist schon mal prima Pseudo-zufällig. Die Zentrale wird aber zu selten neu gestartet, um den Zufallswert durchgängig zu initialisieren.Also nehmen wir als weiteren periodischen Event den Änderungsimpuls eines Temperatursensors. (Ein Bewegungsmelder oder Schalter ginge auch, aber wenn niemand zuhause ist…).  Der Trick:  Ein Homematic Temperatursensor meldet in Intervallen den Temperaturstand zurück. Er ändert sich laufend, und kann einen Event „bei Veränderung“ auslösen. Wann diese Änderung der Temperatur genau stattfindet ist schonmal gut pseudo-zufällig:

Homematic Temperatur Zufallssteuerung

„Zufall_Temp“: Programm für den Zufalls-„Seed“ durch den Temperatur-Sensor

Innerhalb dieses Programmes rufen wir lediglich das schon oben erwähnte Programm „Zufall_Seed“ nochmal auf:

var ausfuehren = dom.GetObject("Zufall_Seed");
ausfuehren.ProgramExecute();

So, jetzt haben wir schonmal tolle Pseudo-Zufallszahlen in der Variable „_ZUFALL_“. Jetzt müssen wir nur noch Sicherstellen, dass sich die Werte auch öfters ändern, auch wenn mal zufälligerweise KEINE Änderung der Temperatur in den letzten Minuten stattgefunden hat:

4. Periodische Änderung der Zufallszahl:  Das Programm „Zufall_akt“

Hierfür nehmen wir einfach alle X-Minuten den letzten Wert und rechnen mit einer mathematischen Formel den Wert unserer Variablen „_ZUFALL_“ weiter:

Das Programm Zufall_Akt:  Regelmäßig "neue" Zufallswerte erzeugen

Das Programm Zufall_Akt: Regelmäßig „neue“ Zufallswerte erzeugen

Für das Script verwenden wir diesmal den folgenden Code:

var a = 1297;
var b = 4693;
var m = 21870;

var sv_rand = dom.GetObject("_ZUFALL_");

var  rand = 0 + sv_rand.State();
rand = ((rand * a) + b) % m;
rand = rand + 10000;

var randstr = rand.ToString(rand);
randstr = randstr.Substr(3,1);

var randstr_sys = dom.GetObject("zufall_10");
randstr_sys.State(randstr);
sv_rand.State(rand);

Was passiert hier? Der Wert unserer Variable „_Zufall_“ wird ausgelesen und es werden Additionen und Multiplikationen ausgeführt, welche hier natürlich keine zufälligen neuen Werte, aber durchaus brauchbare Pseudo-Werte ergeben. Dieses Programm wird alle 8 Minuten aufgerufen und liefert in Kombination mit dem Programm „Zufall_Temp“ ganz brauchbare Werte. Das Ergebnis sind wechselnde 5-stellige Zahlen in der Variablen _ZUFALL_

5. Brauchbare Zufallszahlen ableiten

Für Programme brauchen wir vereinfachte Zufallszahlen, welche in Ausführungs-Entscheidungen innerhalb der CCU-Programme eingebaut werden können:  Die Homematic soll ein Programm ausführen, wenn eine bestimmte Wahrscheinlichkeit (Zufallswert) eintrifft.

Also machen wir aus den 5-stelligen Zahlen in „_ZUFALL_“ noch schnell eine einstellige Zahl mit Werten zwischen 0 und 9:  Auch das ist in unserem obenstehenden Programm-Script „Zufall_akt“ enthalten: Dieses befüllt ebenfalls die Variable „Zufall_10“ mit einer solchen Ziffer.

6. Zufallszahl  verwenden

Bringen wir alles zusammen:
Wir haben eine Zufalls-Ziffer in der Variable „Zufall_10“ in der Homematic-CCU, welche sich alle 8 Minuten ändert und einen (fast) zufälligen Wert enthält.
Diese können wir nun mit einem Programm verwenden, welches die Lampen zufällig ein- und ausschaltet:

Programm mit Auslösungs-Timer alle 8 Minuten:

Wenn „Zufall_10“ < 5 dann Lampe ein, ansonsten Lampe aus.

Die Ein-Ausschalt-Intervalle lassen sich dadurch natürlich schön feinsteuern. So kann über größere Werte als „5“ auch die Einschaltphase länger werden und durch kleinere Werte kürzer.

Einfach mal ausprobieren.
Natürlich lassen sich auch die Werte / Intervalle der Zufallszahl-Erzeugung kleiner stellen. Mit einer CCU2 sollten auch minütliche Berechnungen möglich sein, die schwächere CCU1 hingegen sollte wegen des schwachen Prozessors nicht überfordert werden.

Viel Spaß beim nachbauen…

Kami

 

Dez 05

Philips Living Colors Iris (ab 2. Gereration) an Philips Hue Bridge anmelden ?

Ihr kennt vielleicht die „Philips Living Colors“- Leuchten wie „IRIS“, „BLOOM“ usw.
Das sind tolle LED-Lampen zur indirekten Stimmungsbeleuchtung. Diese können das komplette RGB-Farbspektrum abgeben, gehen also in eine ähnliche Richtung wie die System-Leuchtmittel der Philips hue.

Also wäre es ja naheliegend, die IRIS, BLOOMs usw. mit der bestehenden Bridge aus dem hue-System zu verbinden und dann gemeinsam über die APP zu steuern.

Bei IRIS und BLOOM Leuchten, die über die neueste Generation „Friends of hue“ vertrieben werden, sind entsprechende Funbktionalitäten zum Anlernen in der hue-Bridge schon vorgesehen. Was aber mit den (älteren) Modellen tun, welche nicht Bestandteil des „Friends of hue“ Konzeptes sind ?

Interessant ist, dass die „alten“ Living-Colors Leuchten ab Version 2, welche mit den runden (statt ovalen) Fernbedienungen geliefert wurden, prinzipiell nach dem gleichen Standard funktionieren wie die hue. Beide sprechen das Zigbee-Funkprotokoll. Die neueren „Friends-of-hue“ Modelle unterscheiden sich nur darin, dass keine Fernbedienung mehr mitgeliefert wird, und dass der Anlern-Prozess wie bei den normalen hue Leuchtmitteln funktioniert.

Für die Living-Colors (ab 2. Gereration, runde Fernbedienung) gibt es aber eine Möglichkeit diese manuell an die Bridge anzulernen. Leider sind diese Schritte nicht von Philips dokumentiert.

Daher hier die Anleitung:

Ihr braucht:

  1. Philips hue Bridge (z.B. aus dem Starterpaket)
  2. Eine Philips Living Colors (z.B. IRIS) ab 2. Generation
  3.  Die (runde, nicht ovale) Fernbedienung

Ein direktes Anlernen der Leuchte an der Bridge ist nicht möglich, aber es gibt einen Umweg über die Fernbedienung. Der Vorteil ist dabei, dass nach dem Anlernen die Fernbedienung noch zusätzlich zur App genutzt werden kann. Also hat man noch gleich einen praktischen Schalter wie den hue-Tap zur Steuerung der gesamten Lichter (hue und Living Colors).

So gehts:

  1. den Anlern-Knopf der Bridge drücken
  2. die Living-Colors-Fernbedienung unmittelbar an die Bridge halten und die ON-Taste (I) und die Favorit 1-Taste gleichzeitig drücken.
  3. ca. 10 Sekunden warten, bis das Pairing durch Erlischen der LEDs angezeigt wird.
  4. jetzt zu jeder Lampe gehen (hue und Living-Colors) und jede Lampe an der Fernbedienung anlernen: Fernbedienung unmittelbar an die Lampe halten und solange die On-Taste (I) auf der Fernbedienung drücken, bis die Lampen aufgehört haben zu blinken. (mit jeder Lampe wiederholen)
  5. Nochmal den Bridge Anlernknopf-drücken
  6. Fernbedienung an die Bridge halten und die ON-Taste (i) der Fernbedienung lange halten, bis eine Reaktion an den LEDs sichtbar war und diese wieder aus sind (ca 10 Sek.)
  7. In die Hue-App wechseln und die Lampe abfragen. Es sollten alle hue und Living-Colors Lampen erscheinen
  8. Am Schalter der Fernbedienung Ein / Aus testen: es sollten ALLE angelernten Lampen steuerbar sein.

Fertig.

Der Vorteil ist:  Die IRIS und BLOOMs ohne direkte hue-Unterstützung (Friends of hue) sind teilweise in Sonderaktionen als Auslauf-Modell deutlich günstiger zu haben. (Ich habe eine IRIS neu bei Amazon für 55 EUR als Blitzangebot erworben). Bei diesem Preis ist eine Fernbedienung / Schalter ähnlich des hue-Taps schon mit dabei.

Einen Nachteil haben die „Friends of hue“ allerdings gegenüber den hue:  Der Farbraum ist reines RGB und nicht wie bei den hue eine spezielles weiß-optimiertes Farbmodell. Dadurch können die RGBs nicht in allen Lichtrezepten der App verwendet werden, welche auf Weißtöne optimiert sind. Das stört aber kaum. Der Vorteil sind auf der anderen Seite kräftigere Farben für die Effekt-Beleuchtung.

Viel Spaß beim experimentieren…

Kami

 

 

Mai 18

Homematic: Anwesenheits-Status „Zuhause“ oder „abwesend“ zuverlässig automatisch erkennen ?

Ein neues Kleinprojekt für das Homematic-Haussteuerungssystem:

Die Homematic Bewegungsmelder sind gut und zuverlässig. Sie gibts für innen und außen und sie schalten beliebige Homematic Komponenten bei erkannter Bewegung. Soweit so gut.
Aber was, wenn man das Gegenteil erreichen will ? Also schalten, wenn keiner im Haus ist, wenn keine Bewegung erkannt wird ? Also nach dem Motto:

„schalte die Heizung aus, wenn keiner da ist.“, „Alarm scharfschalten, wenn wir in Urlaub sind“

Klar kann man das über eine System-Variable wie z.B.

„Anwesenheit“

tun, die aber auch bei jedem rein und rausgehen manuell gesetzt werden will. Was ist, wenn das vergessen wird ? Und man selber ist im Urlaub. Nein. Es muss auch automatisch gehen. Ein intelligentes Haus muss wissen, wenn sein Besitzer:

  • zu Hause ist
  • nach Hause kommt
  • nicht mehr zu Hause ist.

Was brauchen wir dafür ?

Mindestens einen Bewegungsmelder, welcher im Innenraum installiert wird. Dieser sollte sich an einer möglichst zentralen Position befinden, also z.B. im Flur, im Wohnzimmer, oder überall da, wo man sich regelmäßig und häufig aufhält, wenn man zuhause ist.

Die Idee hinter der Anwesenheitsautomatik ist jetzt die: Wenn jemand sich im Inneren bewegt, registriert das dieser (oder weitere) Bewegunsmelder. Das Problem ist aber: Er ist dumm und „vergisst“ die Bewegung von vor 10 Minuten, je nachdem welches Intervall ihr dem Melder mitgegeben habt. (das Standard-Intervall ist glaube ich 5 oder 6 Minuten). In der Praxis wirkt sich das so aus: Ihr lauft im Wohnzimmer rum. Der Melder registriert das und weiss für die nächsten 5-6 Minuten, dass einer im Haus ist. Ihr bewegt euch aber nicht ununterbrochen im Einflussbereich. 10 Minuten in der Küche würde bedeuten, dass die Anlage von einer Abwesenheit ausgeht und schlimmstenfalls den Alarm scharfschaltet oder die Heizung runterfährt.

Was also tun ?
Hier kommt etwas Logik ins Spiel:

Wir erstellen eine Variable „Anwesenheit“ (vom Typ Boolean / Wahrheitswert), (falls noch nicht vorhanden). Diese nimmt später den eigentlichen Zustand auf.

Dann erstellen wir eine zweite Hilfsvariable „Anwesenheit_num“ (oder ähnlich) vom Typ „numerisch“. Diese Variable wird immer dann auf einen Wert (z.B. 10) geetzt, wenn der (oder bei mehreren ein) Bewegungsmelder im Innenraum Bewegung erkennt. Ein Programm dazu ist Homematic-Standard:

Bewegungsmelder:

Auslösen auf Änderung:   Wenn Bewegung erkannt,

setze Variable auf den Wert 10,

setze Variable „Anwesenheit“ auf „wahr“

Das reicht aber noch nicht. Wir brauchen ein weiteres Programm:  „Timer alle 10 Minuten: Wenn KEINE Bewegung erkannt, zähle die Variable um eins runter“. Das funktioniert leider nicht per Standard Programm, hier brauchen wir ein selbstgebasteltes Homematic Script:

dom.GetObject("Anwesenheit_num").State(dom.GetObject("Anwesenheit_num").State() - 1);

Dieses Script soll also alle 10 Min. aufgerufen werden. Falls zum Prüfzeitpunkt keine Bewegung erkannt ist, wird aus dem Wert 10 die 9 usw. (Achtung: Systemvariable „Anwesenheit_num“ muss existieren).

Wenn wir bei 0 angekommen sind, wissen wir:  es hat sich in den letzten 10 * 10 Minuten (=100 Min.) keiner bewegt, also liegt die Vermutung nahe, dass keiner im Haus ist. Jetzt wird eine zweite Variable „Anwesenheit“ auf „falsch“ gesetzt. Diese Variable enthält den wahrscheinlichen Zustand und kann für weitere Steuerungsfunktionen genutzt werden (Heizung, Licht, Alarm, usw.)

Systemvariable:

Wenn  „Anwesenheit_num“ = 0 (auslösen auf Änderung)

dann  Variable „Anwesenheit“ auf „falsch“ setzen.

Das ganze Verfahren funktioniert natürlich umso besser, wenn mehrere Bewegungsmelder im ganzen Haus verteilt mitspielen.

Nochmal in der Zusammenfassung:

  1. Ein (oder mehrere) Bewegungsmelder setzen die Variable „Anwesenheit_num“ bei erkannter Bewegung auf „10“, die Variable „Anwesenheit“ auf „wahr“
  2. Ein Homematic-Programm prüft per Timer periodisch: haben der (oder bei mehreren: alle) Melder „Keine Bewegung“:  wenn ja (keine Bewegung): „Anwesenheit_num“ um 1 runterzählen
  3. „Anwesenheit_num“ bei 0 angekommen (Homematic-Script:  Systemvariable=0, auslösen auf Änderung):  Zeitintervall ist abgelaufen, es ist wahrscheinlich keiner da. ==> Variable „Anwesenheit“ auf „falsch“ setzen

Die Zeiten (Timer-Interval in Minuten, Startwert der Variable) können natürlich dem eigenen Verhalten angepasst werden. Insbesondere der Einsatz mehrerer  Melder kann die Präzision der Voraussage deutlich erhöhen.
Denkbar wären z.B. auch:  Bewegung: alle 5 Minuten prüfen, Startwert = 30. Damit ergeben sich dann 150 Minuten von der Anwesenheit bis zur (dann sehr wahrscheinlichen) Abwesenheits-Schaltung.

Einfach aber gut, insbesondere, wenn in jedem Flur oder Zimmer ein Melder hängt… Erweiterungen mit Türkontakten sind natürlich ebenfalls möglich…

 

 

 

 

Mrz 11

Philips Hue LED Lampen mit Homematic steuern ?

Die Licht-Bastler unter euch kennen sicherlich die tollen Philips hue LED Leuchtmittel. (s. hier…)
Diese LED Leuchtmittel bieten enorme Möglichkeiten für die stimmungsvolle Beleuchtung eurer Räumlichkeiten. Die verwendete LED-Technologie hat Philips dabei perfektioniert: So sind warmweiss-Töne in allen Helligkeiten (bis zu 600 Lumen pro Leuchtmittel) möglich.

Die Bedienung erfolgt dabei per Smartphone-App. Und genau da liegt das Problem: Wer möchte schon immer das Smartphone rauskramen, die App starten, darin rumnavigieren und dann kompliziert die Lampen schalten ?  Die Leuchtmittel sind klasse, aber früher gings doch viel einfacher:  Wandschalter AN oder Wandschalter AUS. Was nämlich, wenn das Smartphone gerade ganz woanders ist, womöglich in einer anderen Etage des Hauses ? Mal eben „Licht einschalten“ geht dann nicht. Bleibts dann dunkel ?

NEIN!  Also ein tolles neues Projekt:  Philips hue LED System mit einem Wandschalter ODER der Smartphone-App steuern.

Bei mir ist das Haussteuerungssystem Homematic im Einsatz, welches bisher schon viele andere Steuerungsaufgaben übernimmt. Warum also nicht dann auch die Philips hue damit steuern ? Und das auch noch mit einem vorhandenen Installations-Wandschalter wie aus den Busch-Jäger (oder Gira, oder …) Serien ?

Was brauchen wir ?

  • Philips hue natürlich (mind. 1 Lampe und die Hue-Bridge)
  • Homematic Zentrale CCU1 oder CCU2
  • Einen beliebigen Homematic Sender (Handsender oder Installationsadapter, Fernbedienung oder ähnliches)
  • Heimnetz mit Router
  • Etwas Bastler-Geschick und Grundkenntnisse in Elektro-Installationen

 Los Gehts:

Die Philips Hue wird über ein LAN-Ethernet Kabel mit eurem Hausnetz (Router) verbunden. Die Bridge gibt die Schaltsignale per Funk (Zigbee-Protokoll) an die einzelnen Lampen weiter. Daher die Bridge besser nicht elektromagnetisch abschirmen oder in den hintersten Keller-Winkel verbannen, wenn auch Lampen im Dachbereich geschaltet werden sollen. Bei mir gabs jedoch noch nie Reichweiten-Probleme.

Steuerung über die Homematic-Zentrale

Der Clou beim Hue-System ist, dass die Lampen über standardisierte Protokolle geschaltet werden können. Auch die Smartphone App bedient sich dieser. Konkret muss nur ein JSON-Objekt per HTTP (put) an die Bridge gesendet werden. Das JSON-Objekt enthält dabei die Steuerparameter (Lampen-Nr., Helligkeit, Farbe usw.). Also werden auch die Bedingungen klar: Der Absender des Steuerbefehls (könnte auch ein Browser sein) muss sich also im gleichen Heimnetz befinden wie die Bridge. Der Bridge ist es dabei egal, welchen Ursprung dieser Steuerbefehl hat, sofern sich die Anwendung vorher Registriert hat. Dazu dient der „Anlern-Knopf“ der Hue-Bridge.

Hue API-Key erzeugen

Dieses Anlernen erfolgt, indem man einen „Usernamen“ bei der Bridge registriert. Über einen Key in Form eines MD5-Hash kann man danach auf die Bridge über HTTP (put) zugreifen. Dieser Prozess ist ganz passend in folgendem Blog-Eintrag beschrieben: Hack the Hue – Ross McKillop

Hue API-Key testen:

Habt ihr einen solchen Key angelegt besser kurz testen:
Gebt die folgende Adresse in euren Browser (im Hausnetz) ein:

http://[IP-Adresse-Bridge]/api/[EUER-API-KEY]/lights/1/

Damit wird der Status der Lampe 1 („lights/1/“) ausgelesen. Die Bridge sendet bei Erfolg etwa sowas zurück:

{"state": {"on":false,"bri":108,"hue":13117,"sat":210,"xy":[0.5113,0.4145],"ct":463,"alert":"none","effect":"none","colormode":"hs","reachable":true}, "type": "Extended color light", "name": "Fernseher", "modelid": "LCT001", "swversion": "65003148", "pointsymbol": { "1":"none", "2":"none", "3":"none", "4":"none", "5":"none", "6":"none", "7":"none", "8":"none" }}

Das sind die einzelnen Konfigurationsdetails der Lampe 1. Sollte der API-Key nicht korrekt registriert sein (die Sache mit dem Bridge-Knopf drücken), erscheint sowas hier:

[{"error":{"type":1,"address":"/lights","description":"unauthorized user"}}]

In diesem Fall den API-Key nochmals sauber registrieren.
Danach geht es mit der Homematic weiter:

Homematic CCU vorbereiten

Als Zentrale für die Steuer-Aufgaben dient die Homematic CCU1 oder CCU2. Diese zentrale ist je eh immer aktiv und eignet sich somit perfekt. Also müssen wir dieser nur noch beibringen, einen HTTP-PUT an die Bridge zu senden, und zwar genau dann, wenn der Schalter gedrückt wird. Die CCU ist dabei ein Linux-System, welches sich einfach mit Root-Rechten versehen lässt. Damit kommen wir in die komfortable Lage die für den HTTP-PUT Aufruf erforderlichen Tools nachzuinstallieren: CURL
CURL ist ein Linux Programm, welches die nötigen JSON Objekte per PUT (oder GET) an das HTTP-Ziel der Bridge versenden kann. Um CURL auf der CCU zu installieren sind einige Linux-Kniffe nötig, die nachfolgend aber sehr einfach und Schritt für Schritt erläutert sind:  Homematic-Forum: CURL

CuxD statt system.Exec

Die Homematic-Zentrale kann jetzt theoretisch per Script und Aufruf von system.Exec(„curl…“) einen solchen Aufruf starten. Allerdings ist der system.Exec Befehl inoffiziell und fehlerhaft:  Die CCU (zumindest CCU1) stürzte bei mir in ca. 1 von 20 Fällen beim Aufruf ab, wodurch ein Neustart nötig wurde. Also ist von system.Exec() abzuraten. Es gibt aber eine Lösung:  Ein Homematic Plugin Namens CuxD.
Dieses Plugin enthält einen sicheren und stabilen EXEC-Ersatz, welcher störungsfrei und dauerhaft zuverlässig arbeitet. Also noch schnell das obenstehende CuxD wie beschrieben installieren.

Homematic Scripte

Nach CURL und CuxD gehts jetzt an die Scripte. Ist alles korrekt installiert, sollte das folgende Homematic-Script eine Lampe einschalten:  (Grundkenntnisse zu Homematic-Scripten werden hier vorausgesetzt)

string jdata=" {\"on\":true,\"bri\":108,\"hue\":13122,\"sat\":211,\"xy\":[0.5119,0.4147],\"ct\":467,\"alert\":\"none\",\"effect\":\"none\",\"colormode\":\"ct\",\"reachable\":true}";
string curlcommand="curl --request PUT --data '"+jdata#"' http://192.168.178.38/api/[euer API-Key]/lights/1/state/ ";
 dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(curlcommand);

ACHTUNG:  Die IP-Adresse, die CUxD-Adresse und der oben erzeugte API-Key müssen noch durch eure Konfigurationsdetails ersetzt werden !

Die CuxD-Adresse könnt ihr nach der Installation abfragen: es wird ein neues „virtuelles Gerät“ angelegt, dessen Name ungefähr so lautet: HM-Sen-EP CUX2801001:1   –  Die letzte Zeichenfolge ist die CuxD-Adresse, hier:  „CUX2801001:1„.

Das Ausschalten einer Lampe funktioniert so:

string jdata=“{\“on\“:false}“;

(Der Rest dann wie oben)

 

HUE-Parameter

Die oben beschriebenen Scripte enthalten die JSON-Parameter zum Einstellen der Licht-Parameter. Eine Dokumentation ist von Philips veröffentlicht worden: Philips Hue Developer API. Hier könnt ihr die genauen Bedeutungen nachlesen.

Homematic-Programme

Jetzt nur noch ein neues „Programm“ in der CCU anlegen mit dem obenstehenden Code und dieses dann dem Schalter zuordnen.

Das obenstehende Beispiel würde nun, wenn der verknüpfte Schalter betätigt wird, per CuxD den CURL-Befehl absetzen, welcher die Parameter zur Hue senden und die Lampe 1 mit den Eigenschaften der ersten Zeile (Helligkeit, Sättigung, Farbton usw.) einschaltet.

Etwas kompliziert, funktioniert aber prima !!

Kami