openHAB XII: Verbindungsprobleme zu Homematic IP

Geschätzte Lesezeit: 3 Minuten.

Ich nutze Homematic IP für verschiedene Zwecke in meiner Heimautomatisierung. Unter anderem nutze ich es zur Heizungssteuerung und für die Benachrichtigung von Waschmaschine und Trockner. Außerdem möchte ich demnächst eine Rollladensteuerung etablieren.

Umso ärgerlicher ist es daher, dass die Verbindung zwischen openHAB und Homematic IP regelmäßig abschmiert. openHAb zeigt dann übrigens als Status für die CCU3 OFFLINE - COMMUNICATION_ERROR. Das liegt wahrscheinlich weder an dem einen noch an dem anderen, sondern an der Konfiguration, sprich: An mir.

Ich habe irgendwo gelesen, dass ein häufiges Problem ist, dass die WLAN-Verbindung des Raspberry Pi instabil sein kann. openHAB, welches auf den Raspberry Pi installiert ist, kann sich dann nicht mehr mit der CCU3 verbinden, und schafft es auch nach dem Wiederaufbau der WLAN-Verbindung nicht, die Verbindung zur CCU3 herzustellen. Nach einem Neustart von openHAB kann die Verbindung aber wieder aufgebaut werden – daher boote ich den RasPi immer mal wieder manuell neu. Aber das kann doch nicht die Lösung sein, oder?

Tag 1: Erstmal das Binding neu installieren

Ich habe ja alles schön dokumentiert, alle Einstellungen und Schritte und so weiter. Da kann ich das Binding ja mal löschen, und neu installieren. Vielleicht hilft es.

Tja, es hilft schon, aber nur temporär. Es läuft für ein paar Tage, und dann schmiert es wieder ab.

Tag 2: Vielleicht löst sich das Problem durch Update auf openHAB 3.0?

Haha, nein.

Tag 3: Sind es Konfigurationsprobleme?

Ich prüfe die Konfiguration des Things CCU3. Natürlich stillt die Gateway Address, die hat genau die richtige IP-Adresse. Sonst würde es ja nie verbinden.

Hm. Was ist denn die Callback Network Address? Eine Runde googlen hilft nicht wirklich. Da steht nur, man solle die openHAb-Server-Adresse dort eintragen, aber leider nicht, warum. Egal, ich probiere es, vielleicht hilft es ja.

Leider stelle ich fest, dass dies nicht die Lösung war, denn das Problem ist noch nicht behoben.

Tag 4: Der Holzhammer – Automatischer Neustart

Mir reicht es jetzt. Ich will, dass der RasPi sich einfach jede Nacht neu startet. Das ist nicht elegant, aber solange es funktioniert…

Also, Anleitung gesucht und gefunden. Ich verbinde mich per SSH und öffne crontab als Admin:

sudo crontab -e

Ich wähle nano als Editor, da ich noch nie vorher crontab geöffnet hatte. Anschließend füge ich am Ende folgende Zeile hinzu:

0 3   *   *   *    /sbin/shutdown -r 0

Automatischer Neustart, jeden Tag um 03:00 Uhr. Strg + X, Y, Enter. Seitdem habe ich keine Verbindungsprobleme mehr. Deckel drauf.

openHAB XI: Müllkalender per ical einbinden – OH 3.0

Geschätzte Lesezeit: 8 Minuten.

Mein Haus soll mich erinnern, wann ich Mülltonnen herausrollen soll. In einem vorigen Artikel hatte ich meine Bemühungen ausführlich dokumentiert, wie ich dieses Szenario für openHAB 2 implementiert hatte. Das hat auch funktioniert – und dann habe ich beschlossen, auf openHAB 3 zu aktualisieren. Seitdem geht nichts mehr, denn das zugrunde liegende Binding binding-caldav-personal1 (1.14.0) existiert nicht mehr. Also muss ich einmal von vorne beginnen.

Tag 1: Langenfeld ist doof

Bisher hatte die Stadt Langenfeld einen schönen ics-Kalender angeboten, in dem sämtliche Abfall-Abholungs-Termine vorhanden waren. Leider gibt es das nicht mehr, ich muss also als erstes sämtliche Termine händisch in meinen Kalender eintragen. Das ist doof, aber letztlich nur Fleißarbeit.

Kommen wir zu openHAB.

Es gibt ein neues Binding: iCalendar (3.0.1). Und es gibt auch einen kleinen Guide im openHAb-Forum. Ich installiere das Binding. Anschließend erzeuge ich ein neues Thing, indem ich Things > + wähle. Ich wähle das iCalendar-Binding, und den Typ Kalender (mit blauem Bridge-Label). So weit, so einfach.

Nun folgt die Konfiguration des Abfallkalenders. Ich vergebe das Label „Abfallkalender“. Außerdem gibt es einige Felder zu füllen. Der folgende Screenshot zeigt die bei mir funktionierende Lösung, aber es hat einige Versuche benötigt, bis ich das alles herausgefunden habe.

Grundsätzlich liegt mein Kalender in einer ownCloud-Instanz, im zugehörigen Kalender-Modul. Daher kann ich Benutzername und Passwort leicht korrekt ausfüllen – dabei hilft mir mein Passwortmanager1Du benutzt keinen Passwortmanager? Dann höre jetzt sofort auf, diesen Artikel zu lesen, und installiere dir einen Passwortmanager. Es ist simpel, und es erhöht deine Sicherheit im Internet extrem. Warte nicht mehr länger, mache dies genau jetzt. Los!. Die maximale Größe lasse ich bei 16 Mebibytes, das sollte schon passen. Das sind ungefähr 16 MB, und meine Kalenderdateien sind viel kleiner. Das Aktualisierungsintervall werde ich während des folgenden Testens immer mal wieder verändern, aber im Endeffekt ist 60 Minuten ein guter Wert. Das ginge sogar noch seltener, denn mein Abfallkalender ändert sich ja nicht regelmäßig.

So. Kommen wir zur Herausforderung, der URL. Und, oh je, das war wirklich schwierig. Denn hier versuche ich zwei Dinge zu verheiraten, die eigentlich nicht zusammenpassen: Ein openHAB-Binding, das ical-Dateien haben will, und eine ownCloud-Kalender-Instan, die WebDAV kommunizieren möchte. ical und WebDAV sind aber zwei völlig verschiedene Dinge, weshalb mein erster Versuch, die Adresse einzugeben, kollossal scheiterte. Analog zum letzten Mal gab ich nämlich folgende Adresse ein:

https://***/remote.php/dav/calendars/***/testkalender/

Der Status des Kalenders blieb offline, und in den Logs sah ich folgendes:

 [WARN ] [g.icalendar.internal.handler.PullJob] - Not able to read downloaded iCal. Validation failed or file not readable. Error message is: No calendar was parsed.

Ich muss ganz ehrlich sagen, ich habe hier viele Dinge ausprobiert, die ich mir nicht alle merken konnte. Irgendwann kam mal die Fehlermeldung, dass der Download abgebrochen wurde, weil die Downloadzeit zu lang war, oder so etwas in der Art. Ich kann meine Versuche nicht mehr alle nachvollziehen. Daher springe ich direkt zur Lösung des Problems.

Also, die Lösung. ownCloud kann ical-Dateien exportieren und zum Download anbieten. In meiner ownCloud-Instanz klicke ich dazu auf drei Punkte rechts neben des Kalenders, und klicke dann auf „Herunterladen“. Anschließend wird mir der Download einer ics-Datei mit dem heutigen Datum angeboten, aber diese hilft mir nicht, denn ich möchte ja, dass es immer aktualisiert wird. In der Adresszeile meines Browsers erscheint aber kurz folgende Adresse:

https://***/remote.php/dav/calendars/***/testkalender?export

Und das ist die Lösung. Das ermöglicht den Direktzugriff von openHAB auf das Exportmodul von ownCloud. Damit kann openHAB nun eine ical-Datei herunterladen, und diese verarbeiten. Natürlich hat auch das nicht auf Anhieb funktioniert – irgendwie hatte mein openHAB Schluckauf oder so. Die Anzeige des Kalenderstatus wollte einfach nur „offline“ sein. Aber in diesem Falle hat es einfach geholfen, das System ein paar Tage in Ruhe zu lassen, denn beim nächsten Nachsehen war der Status plötzlich grün.

Ich weiß, dass das albern klingt, aber ich habe wirklich nichts mehr geändert. openHAB hat sich selbst repariert. Vielleicht war irgendwo etwas im Cache, oder so, aber jetzt funktioniert es.

Tag 2: Die Regeln

Jetzt habe ich viel über die Einbindung des Things geschrieben, und das war auch definitiv die größte Herausforderung. Aber eigentlich möchte ich ja Nachrichten bekommen, wenn ich die Mülltonnen herausrollen muss. Dazu brauche ich eine Regel. Und Items. Also schaue ich mir die Channels des Abfallkalenders mal etwas genauer an.

Man sieht an dem Screenshot, dass ich die Tendenz dazu habe, einfach alle Channels erstmal mit Items zu verknüpfen, die irgendwie sinnvoll klingen, und danach zu überlegen, was ich wirklich brauche.

Der Trigger für meine Regel wird der Switch „Präsenz eines aktuellen Eintrags“. Den verknüpfe ich mit dem Item Abfallkalender_PrasenzeinesaktuellenEintrags. Dieser Switch schaltet nämlich von OFF zu ON, sobald ein Event des Kalenders beginnt. Wenn also mein Kalender sagt, dass ich heute um 07:00 die Papiermülltonnen herausrollen soll, dann schaltet dieser Switch genau um 07:00 Uhr von OFF auf ON. Und genau das triggert dann meine Regel.

Außerdem brauche ich noch den Titel des aktuellen Eintrages, denn ich will ja wissen, welche Mülltonne ich herausrollen soll. Ich verlinke also den entsprechenden Channel mit dem Item Abfallkalender_TiteldesaktuellenEintrags. Und dann kann ich auch schon die Regel überarbeiten, die ich bereits das letzte Mal benutzt habe.

zur Erinnerung, so sah die Regel in openHAB 2 mit dem calDAV-Binding aus:

rule "Abfallkalender"
when
   Item CalDav_Muelltonne changed
then
   if (CalDav_Muelltonne.state != UNDEF) {
      sendNotification("<E-Mail-Adresse>", "Abholung heute: " + CalDav_Muelltonne.state) 
   }
end

Eigentlich muss ich nicht viel ändern. CalDav_Muelltonne wird zu Abfallkalender_PrasenzeinesaktuellenEintrags. Die Statuskontrolle != UNDEF ändere ich zu == ON. Und ganz zum Schluss brauche ich noch das Item Abfallkalender_TiteldesaktuellenEintrags. Und schon sieht es so aus:

rule "Abfallkalender"
when
    Item Abfallkalender_PrasenzeinesaktuellenEintrags changed
then
    if (Abfallkalender_PrasenzeinesaktuellenEintrags.state == ON) {
        sendNotification("<E-Mail-Adresse>", "Abholung heute: " + Abfallkalender_TiteldesaktuellenEintrags.state) 
    }
end

Nun folgt der Wahnsinn: Es funktioniert. Einfach so. Ohne dass ich noch etwas anpassen oder ändern müsste. Es funktioniert!

Tag 3: Langenfeld ist nicht mehr ganz doof

Zu Beginn des neuen Jahres muss ich wieder die Termine in den Kalender eintragen. Zum Glück bietet Langenfeld mittlerweile wieder ics-Dateien an, und damit ich den Link nächstes Jahr wiederfinde, speichere ich ihn hier. Das ist der Link: https://mymuell.jumomind.com/webmodul/langenfeld/

openHAB X: Endlich die korrekte Uhrzeit

This entry is part 10 of 10 in the series openHAB
Geschätzte Lesezeit: 2 Minuten.

Es gibt da eine Kleinigkeit, die mich schon lange stört: Die Uhrzeit meiner openHAB-Installation ist falsch. Sie geht eine Stunde nach, anstatt z.B. 10:43 steht dort 09:43. Das erste Mal ist mir dies aufgefallen, als ich eine zeitgesteuerte Regel zur Beleuchtung eingerichtet habe.

Ich bin bisher davon ausgegangen, dass mein openHAB nicht weiß, dass es Sommer- und Winterzeit gibt. Diese Annahme war zu dem Zeitpunkt, als ich die Beleuchtungsregeln schrieb, durchaus valide, denn es war Juli, also Sommerzeit. Derzeit ist aber Winterzeit, und jetzt müsste die Uhr richtig gehen. Leider ist dies nicht der Fall, es ist also etwas anderes falsch eingestellt.

Zum Glück ist die Lösung total einfach. Und gefunden habe ich sie hier. Die Lösung ist: Mein openHAB hatte die falsche Zeitzone eingestellt.

So kann dies behoben werden:

  1. Ich verbinde mich per SSH und tippe sudo openhabian-config.
  2. Im sich öffnenden Menü wähle ich Option 30 – System Settings.
  3. Anschließend wähle ich Option 33 – Set System Timezone. Hier steht schon in der Beschreibung dabei, dass man diese Option wählen soll, falls die echte Zeit nicht der Systemzeit entspricht (was ja bei mir der Fall ist).
  4. Zum Schluss muss ich die korrekte Zeitzone auswählen. Das war für mich Europe > Berlin (vorher war tatsächlich Europe > London eingestellt).

Das war es auch schon. Ein kurzer Fix, aber extrem wichtig.