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.