Beiträge zu “Homematic”

Keine Freude an Homematic mit mqtt

Bei meine ersten Gehversuchen mit Dashing und Homematic habe ich die Aktualisierung der Dashboard Elemente von der Homematic mit wget Aufrufen gegen die Rest API implementiert.

Das funktioniert zwar ist aber recht fusselig und wegen des Usability der Homematic Oberfläche auch sehr umständlich.

Um eine bessere Lösung zu finden habe ich mal hm2mqtt mit dieser Beschreibung ausprobiert.

Das ganze lässt sich zwar schnell und einfach installieren und man bekommt auch innerhalb kürzester Zeit “sichtbare” Ergebnisse aber ich werde diesen Pfad nicht weiter verfolgen.

Das hat im wesentlichen zwei Gründe. Die Nachrichten auf dem Bus müssen erst noch zerlegt werden damit der Dashboard mqtt job die darstellen kann. Das ist an sich kein Problem übersteigt jedoch meine Ruby Programmierkenntnisse. Das an sich wäre vielleicht noch machbar nur leider habe ich auf dem Bus keine Änderungen in den Systemvariablen gesehen. Und das ist genau das was ich eigentlich darstellen möchte. Man mag das ganze vielleicht noch hinbekommen aber den Aufwand mag ich momentan nicht treiben.

Es kommt noch ein dritter Aspekt dazu. Damit das ganze läuft brauche einen weiteren Service der gestartet und gepflegt werden muss.

Schade für die investierte Zeit aber da bleibe ich fürs erste lieber bei den fusseligen Aufrufen in der Homematic.

7.7.17
Weitere Beiträge zu: Homematic   mqtt  

Wechselnde Farben in Smashing Dashboards

An dieser Stelle habe ich meine ersten Gehversuche mit Smashing Dashboard beschrieben. Mein Dashboard ist inzwischen etwas weiter und enthält jetzt die wichtigsten Information aus der Homematic. Hauptsächlich geht es darum schnell zu sehen ob

  • alle Fenster geschlossen sind
  • die Kellertür zu ist
  • Der Bewegungsmelder angeschlagen hat
  • Den Status der Alarmanlage zu überwachen. (hier muss später noch mehr dazukommen)

Jetzt möchte ich natürlich das sich die Farben ändern wenn sich ein Status ändert. Hier meine Schritte mit denen ich das hin bekommen habe:

Zuerst erstellen wir ein leeres Widget

  smashing generate widget Alert
   exist  widgets
   create  widgets/alert/alert.coffee
   create  widgets/alert/alert.html
   create  widgets/alert/alert.scss

Damit das Widget auf dem Dashboard sichtbar ist brauche wir mindestens einen Hintergrund

vi widgets/alert/alert.html 
  .widget-alert { background: #00ff99;}

Um das ganze etwas hübscher zu machen möchte ich den Titel und den Wert im Widget angezeigt bekommen

vi widgets/alert/alert.html 
 <h1 class="title" data-bind="title"></h1>
 <div data-bind="value"></div>

Das Widget muss nun in meinem Dashboard eingebunden werden

vi dashboards/hm.erb
 
  <li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
      <div data-id="hm_keller_tuer" data-view="Alert" data-title="Kellertür" ></div>
  </li>

Jetzt können wir wieder mit curl die ersten Tests durchführen ob das Widget funktioniert

 curl -d '{ "auth_token":"asp2y9yd2","value":"zu" }' http://your.dashing.srv:3030/widgets/hm_keller_tuer
 curl -d '{ "auth_token":"asp2y9yd2","value":"offen"}' http://your.dashing.srv:3030/widgets/hm_keller_tuer

Für die Farbanpassung nach Status fügen wir dem Widget auf dem Dashboard noch ein data-addclass-…. Attribut zu

vi dashboards/hm.erb
  <div data-id="hm_keller_tuer" data-view="Alert" data-title="Kellertür" data-addclass-danger="isOpen"></div>

Und legen für das Widget jetzt fest wann “isOpen” zutrifft

vi widgets/alert/alert.coffee 
   class Dashing.Alert extends Dashing.Widget
   onData: (data) ->
    @accessor 'isOpen', ->
      @get('value') =offen 

und definieren die css Eigenschaften durch eine neue Klasse .danger

vi widgets/alert/alert.scss
 .danger { background:  #003399;}

So ist das dann in live aus. Oben der Ausschnitt aus dem Browser und unten das Terminal das die REST-API aufruft. “In echt” das natürlich von der Homematic bei der Statusänderung

2.7.17
Weitere Beiträge zu: Homematic   smashing   dashboard  

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.

28.6.17
Weitere Beiträge zu: Homematic   smashing   dashboard  

Ein bewegungsgesteuerter Heizkörper mit Homematik und Openhab

Ich möchte es erreichen das in meinem Büro in dem dieser Bewegungsmelder arbeitet das Homematik Heizungsthermostat solange auf einem definierten Komfortlevel eingestellt bleibt wie innerhalb eines Zeitraumes von x (20) Minuten Bewegungen erkannt werden. Dazu habe ich in Openhab einen “Status” mit dem Namen “Buero_Besetzt” eingefügt.

vi items/demo.items 
     Switch Buero_Besetzt "Büro" (DG_Buero) {ON,OFF}

Dieser Schalter wir von dem Bewegungsmelder Script über die REST API auf ON gesetzt wenn eine Bewegung erkannt worden ist.

vi pir_1.py 
 ...
 ...
 # PIR is triggered
  print "  Motion detected!"
  subprocess.call("/root/DG_B_motion.sh")
  # Record previous state

Das aufgerufene Script macht dann:

  vi DG_B_motion.sh 
#!/bin/sh
    /usr/bin/curl --header "Content-Type: text/plain" --request PUT --data "ON" http://deine.openhab-addres.se:8080/rest/items/Buero_Besetzt/state

So jetzt haben wir einen Mechanismus der regelmäßig eine Openhab Variable auf ON setzt wenn eine Bewegung gemeldet worden ist. Jetzt möchte ich aber nicht “minütlich” meine Heizung neu einstellen, sondern es soll nur die Temperatur geändert werden wenn sich über einen längeren Zeitraum (20 oder 30 Minuten) nichts bewegt hat. Dazu habe ich diese Openhab Regel etwas angepasst

vi rules/DB_Buero_Motion.rules 
var Number DG_B_counter = 0
var Number DG_B_lastCheck = 0
rule "Dachgeschoss_Buero_Heizung_On"
when
    Item Buero_Besetzt changed from OFF to ON or
then
    DG_B_counter = DG_B_counter + 1
    sendCommand(DG_Buero_Mode_Low,OFF)
    sendCommand(DG_Buero_Mode_Comfort, ON)
end

rule "Dachgeschoss_Buero_Heizung_Off"
when
    Time cron "0 */20 * * * ?"
then
    if(DG_B_lastCheck == DG_B_counter) {
            DG_B_counter = 0
            DG_B_lastCheck = -1;
            sendCommand(Buero_Besetzt, OFF)
sendCommand(DG_Buero_Mode_Comfort, OFF)
sendCommand(DG_Buero_Mode_Low,ON)
    } else {
            DG_B_lastCheck = DG_B_counter
    }
end

Jetzt fehlen noch die “Schalter” für Wohlfühl- und Niedrigtemperatug

vi items/demo.items
  Switch DG_Buero_Mode_Comfort "Comfort" <temperature>  {homematic="address=LEQ1287169, channel=4, parameter=COMFORT_MODE"}
  Switch DG_Buero_Mode_Low "Niedrig" <temperature>  {homematic="address=LEQ1287169, channel=4, parameter=LOWERING_MODE"}

Fertig. Das ganze hätte man natürlich auch mit einem fertigen Funkmodul von Homematik machen können. Der kostet aber fast das doppelte wie die Lösung mit dem Pi und wahrscheinlich kann ich an einem Pi auch mehrere naheliegende Räume überwachen und noch weitere Sensoren anschließen.

1.3.15
Weitere Beiträge zu: openhab   Homematic  

Hausautomation: Benachrichtigung wenn das Fenster zu lange offen ist

Es soll eine Benachrichtigung (per Telefon) erfolgen wenn ein Fenster (in diesem Fall das Badezimmerfenster) einen bestimmten Zeitraum offen steht. Verwendet werden dazu die Homematic Zentrale und Openhab. Man könnte das ganze auch komplett in Homematic abbilden aber ich fühle mich unter Linux mit Openhab einfache wohler ;-)

Dazu wird in der Homematic Zentrale zuerst eine Systemvariable eingefügt welche auf 1 gesetzt wird wenn das Fenster 10 Minuten offen ist.

alternat-txt

Dieser Variable muss auch wieder gelöscht werden wenn das Fenster geschlossen wird

alternat-txt

Um die Änderung in der Systemvariablen von Homematic auch an Openhab zu senden ist noch der zusätzliche Reload Trigger notwendig.

Dann noch die Variable die man in Openhab verwendet

 vi /etc/openhab/configurations/items/demo.items 
     String  Badezimmer_Fenster_Alarm        (Fenster)            {homematic="variable=BadFensterWarnung"}

Und die Regel

 vi /etc/openhab/configurations/rules/alarm.rules

   rule "Window_Bathroom_opened"
   when
   Item Badezimmer_Fenster_Alarm2 changed from false to true
   then
    sendCommand(SIPCALL_WINDOW_BATHROOM, ON)
   end

In diesem Fall verwende ich einen Script welches ein Telefon im Haushalt anruft.

Wenn es wieder wärmer wird möchte ich die Regel noch um die Außentemperatur erweitern.

14.2.15
Weitere Beiträge zu: openhab   Homematic  

Homematic Variablenänderung an Openhab senden

Ja es steht in der Doku nur leider habe ich das erst nach einigem Trial und Error gefunden.

Homematik erlaubt das Setzen von “Systemvariablen” z.B. “DerChefIstDa” oder “BadezimmerfensterAlarm” wenn sich der Status von Geräten verändert.

Diese Variablen werden beim Starten von Openhab auch ausgelesen. Nur leider bekommt Openhab nichts davon mit wenn sich Variablen ändern :-(

The CCU only sends a message if a datapoint of a device has changed. There is (currently) no way to receive a event automatically when a variable has changed. But there is a solution … variable sync. This is done with the help of the ‘Virtual remote control’ feature of the CCU. The CCU supports 50 virtual remote control channels and you can use one of them for variable sync.

Der Workaround ist dann. Wir definieren uns eine virtuelle Fernbedingung auf der Zentrale

alternat-txt

Erstellen ein Item dafür

 Switch Reload_Variables {homematic="address=BidCoS-RF, channel=1, parameter=PRESS_SHORT, action=RELOAD_VARIABLES"}

Und können da diese “Fernbedienung” in Programmen verwenden um ein Reload der Variablen zu triggern

alternat-txt

10.2.15
Weitere Beiträge zu: openhab   Homematic  

Integration von Homematik Fensterkontakten in Openhab

Mit der Einführung der ersten Homematik Module steht natürlich auch deren Integration in den vorhandenen Openhab Service an. Zwar bietet auch Homematik eine Web Übersicht an und es gibt auch Apps, aber natürlich sind beide ausschließlich auf Homematik ausgerichtet und bieten keine Integration anderer Dienste an.

Zuerst das openhab Modul installieren

  apt-get install openhab-addon-binding-homematic

und die Adresse der Zentrale in die Konfiguration eintragen

 vi ../openhab.cfg 
    # Hostname / IP address of the Homematic CCU
    homematic:host=ccu2.your-domain.de

Dann sollte man nach dem Neustart Einträge zum Homematic im Logfile sehen

 /etc/init.d/openhab restart
 tail /var/log/openhab/openhab.log 
 2015-02-07 22:43:35.182 [INFO ] [.o.u.w.i.servlet.WebAppServlet] - Started Classic UI at /openhab.app
 2015-02-07 22:43:39.868 [INFO ] [o.o.b.h.i.bus.HomematicBinding] - HomematicConfig[host=ccu2.caserio.lcl,callbackHost=192.168.221.5,callbackPort=9123,aliveInterval=300]
 2015-02-07 22:43:39.870 [INFO ] [.b.h.i.c.HomematicCommunicator] - Starting Homematic communicator
 2015-02-07 22:43:39.893 [INFO ] [.service.AbstractActiveService] - Exec Refresh Service has been started
 2015-02-07 22:43:40.110 [INFO ] [.b.h.i.c.HomematicCommunicator] - Homematic ServerId[name=CCU,version=2.11.9,address=LEQ1324009]
 2015-02-07 22:43:40.118 [INFO ] [o.o.b.h.i.c.client.CcuClient  ] - Starting CcuClient
 2015-02-07 22:43:40.173 [INFO ] [b.h.i.communicator.StateHolder] - Loading Homematic datapoints
 2015-02-07 22:43:40.935 [INFO ] [b.h.i.communicator.StateHolder] - Finished loading 258 Homematic datapoints
 2015-02-07 22:43:40.936 [INFO ] [b.h.i.communicator.StateHolder] - Loading Homematic Server variables
 2015-02-07 22:43:40.960 [INFO ] [b.h.i.communicator.StateHolder] - Finished loading 2 Homematic server variables
 2015-02-07 22:43:40.961 [INFO ] [b.h.i.c.s.BinRpcCallbackServer] - Starting BinRpcCallbackServer at port 9123
 2015-02-07 22:43:41.110 [INFO ] [.o.b.h.i.c.client.BinRpcClient] - Interface BidCos-Wired not available, disabling support.
 2015-02-07 22:43:41.111 [INFO ] [.o.b.h.i.c.client.BinRpcClient] - Interface CUxD not available, disabling support.
 2015-02-07 22:43:41.112 [INFO ] [.b.h.i.c.HomematicCommunicator] - Scheduling one datapoint reload job in 60 seconds
 2015-02-07 22:43:41.113 [INFO ] [.service.AbstractActiveService] - Homematic server keep alive thread has been started

Um nun den Fensterkontakt darzustellen müssen drei Dateien geändert werden.

Eine “Map” Datei in der die Umwandlung von den Zahlenwerten in Text definiert ist:

vi transform/fenster-kontakt.map
  0=Zu
  1=Offen
  -=UNKNOWN

Die Items Datei (address=seriennummer des Kontakts):

 vi items/demo.items
   Group   Fenster
   Number  Badezimmer_Fenster                      "Badezimer [MAP(fenster-kontakt.map):%d]" <contact>     (Fenster, Badezimmer)    {homematic="address=LEQ1058224, channel=1, parameter=STATE" }

Und natürlich die Sitemap in der der Kontakt dargestellt werden soll.

vi sitemaps/default.sitemap
Frame {
           ....
           ....
           ....
            Group item= Fenster {
                    Text item=Badezimmer_Fenster
            }
    }

Natürlich kommen hier noch weitere Darstellungen hinzu.

alternat-txt

Mit dem Binding Beispiel von hier bin ich mit dem Fensterkontakt nicht zum Ziel gekommen

Ein

   Number lrWindowRight "Window Right [MAP(contact.map):%d]" <contact> (gRLvng) { homematic="IEQ0203214:1#STATE" }

führte zu der Meldung

Binding configuration of type 'homematic' of item 'lrHeaterRight' could not be parsed correctly. org.openhab.model.item.binding.BindingConfigParseException: Each entry must have a key and a value
8.2.15
Weitere Beiträge zu: openhab   Homematic  

Homematic Heizkörperthermostat befestigen

Die ersten “echten” Smarthome Komponenten halten Einzug. Auf Basis “vertrauenswürdiger” Ratschläge haben wir uns entschlossen drei Heizkörper mit Komponenten von Homematic auszustatten und zu steuern. Dazu kommt noch ein Fensterkontakt und natürlich die Steuerung (CCU2)

Zu den Thermostaten heißt es in der Anleitung:

Die Montage des HomeMatic Heizkörperthermostat ist einfach und kann ohne Ablassen von Heizungswasser oder Eingriff in das Heizungssystem erfolgen. Spezialwerkzeug oder ein Abschalten der Heizung ist nicht erforderlich.

Da ich noch nie an der Heizung gearbeitet habe war ich sehr misstrauisch was diese Aussage angeht aber am Ende kann ich das für meinen Fall voll bestätigen. Ich brauchte eigentlich nur eine Rohrzange und einen kleinen Schraubenzieher (und es ist auch kein Wasser ausgetreten).

Das alte Thermostat auf “Maximal” stellen und abschrauben.

alternat-txt

alternat-txt

Wenn notwendig einen der mitgelieferten Adapter anbringen

alternat-txt

Thermostat anschrauben

alternat-txt

und die “Booster” Taster drücken. Danach kann man das Thermostat über die Weboberfläche der CCU2 anlernen.

6.2.15
Weitere Beiträge zu: Homematic  

Dies ist ein privater Blog von Hagen Bauer- berufstätiger Vater, Ehemann, Naturliebhaber, Läufer, Zelter, technikverliebt.


Creative Commons License
This blog is licensed under a Creative Commons License