Homematik mit Smashing Dashboards verbinden
Das Hausautomationssystem Homematik bietet zwar eine Weboberfläche und eine App an um die verschiedenen Stati wie “Fenster offen” oder “Heizung Temperatur einstellen” zu beobachten und zu verwalten aber wenn man nur einzelne Objekte beobachten möchte ist das immer etwas fusselig. Möchte man dann auch noch andere Informationen auf ein Dashboard bekommen ist diese Variante ungeeignet.
Aufgrund diverser Reviews möchte ich versuchen ein “Dashboard” mit Hilfe des Dashboard Framework Smashing zu erstellen. Beginnen möchte ich mit zwei besonders wichtigen Information
- Kellertür zu / offen
- Alle Fenster zu / offen
und später noch weitere Informationen wie Überwachungskamera hinzufügen
Die Installation auf Debian 8 war mit folgenden Schritten schnell gelungen
sudo apt-get install ruby-dev nodejs
gem install bundler
gem install smashing
smashing new ho
cd ho/
bundle
smashing start
Thin web server (v1.6.4 codename Gob Bluth)
Maximum connections set to 1024
Listening on 0.0.0.0:3030, CTRL+C to stop
For the twitter widget to work, you need to put in your twitter API keys in the jobs/twitter.rb file.
Dann kann man mit dem Browser auf die IPAddresse:3030 gehen und bekommt die Standardseite angezeigt.
Das ist natürlich nicht das was wir haben wollen. Um nur ein Element auf der Seite zu haben passen wir die Definition an
vi sample.erb
<% content_for :title do %>My super sweet dashboard<% end %>
<div class="gridster">
<ul>
<li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
<div data-id="hm-keller-tuer" data-view="Text" data-title="Kellertür"></div>
</li>
</ul>
</div>
Das gibt erst mal ein einfaches “Dashboard” mit einem Element
Jetzt wollen wir natürlich auch etwas angezeigt bekommen. Das Framework kann sich “die Daten für ein Widget” auch selber holen. Es gibt aber auch die Möglichkeit den Status für ein Widget über eine REST Api zu setzen. Da die CCU2 von Homematik am ehesten bemerkt wann sich ein Status ändert möchte ich diesen Weg gehen.
Hier ist beschrieben das man die Inhalte des Dashboards auch über eine API Aufruf ändern kann. Dazu passt man den zuerst default auth_token für das Dashboard an
vi config.ru
require 'dashing'
set :auth_token, 'asp2y9"yd2'
Jetzt kann ich mit curl oder wget den Status an das Widget senden
curl -d '{ "auth_token": "asp2y9yd2", "text": "geschlossen" }' http://your.dashing.srv:3030/widgets/hm-keller-tuer
curl -d '{ "auth_token": "asp2y9yd2", "text": "offen" }' http://your.dashing.srv:3030/widgets/hm-keller-tuer
wget -O- --post-data='{ "auth_token": "asp2y9yd2", "text": "zu" }' http://your.dashing.srv:3030/widgets/hm-keller-tuer
So, jetzt wissen wir wie das zukünftige Dashboard geändert werden kann. Jetzt möchten wir aber das diese Änderungen automatisch durch die CCU2 von Homematik durchgdführt wird. Dazu hat mir dieser Artikel den entscheidenden Hinweis gegeben.
Wir richten ein Programm mit folgendem Inhalt ein und verbinden dies mit der Statusänderung des relevanten Fenster- / Türkontaktes
string stderr;
string stdout;
string cmd= 'wget -q -O /dev/null --post-data={\\"auth_token\\":\\"asp2y9yd2\\ ",\\"text\\":\\"offen\\"} http://your.dashing-srv:3030/widgets/hm-keller-tuer';
system.Exec("sh -c '" # cmd # "'", &stdout, &stderr);
Bis ich das hin bekommen habe hat es etwas Trial and Error gebraucht. Bitte genau auf die Leerzeichen achten. Macht man da “zuviele” geht es einfach nicht. Zum debuggen hat mir folgender Befehl geholfen
tcpflow -c port 3030
Dann schaltet sich das Widget auf dem Dashboard auch sofort um wenn sich die beobachtete Tür öffnet.