ONLINE

openHAB und das Astro Binding

Dieser Beitrag schrieb ich vor 2 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

openHAB Astro Binding Die ersten Versuche mit meiner Funksteckdose machte ich davon abhängig, ob jemand von uns zu Hause war; es war Weihnachtszeit, und waren wir zu Hause, so durfte die Lichterkette an sein. Saisonal bedingt hängt an der Funksteckdose inzwischen ein LED-Band, und es ist nicht nötig, dieses ständig leuchten zu lassen. Ich könnte mir Regeln definieren, die das Band zu bestimmten Uhrzeiten an- und ausschalten; ich könnte es aber auch vom Stand der Sonne abhängig machen.

Das klingt nun irgendwie ein Stück weit irre, ist in der Praxis aber ziemlich einfach umzusetzen: openHAB bietet hierfür das Astro binding. Das müssen wir in die addons/ schieben (cp org.openhab.binding.astro-$VERSION.jar /opt/openhab/addons/), konfigurieren — und schon können wir eine Fülle an Parametern nutzen, um unser Regelwerk zu verfeinern.

$ vim configurations/openhab.cfg
################################# Astro Binding #######################################
// Für diese Demo setze ich die Koordinaten auf den Eiffelturm in Paris
astro:latitude=48.858370
astro:longitude=2.294481
# astro:interval=

Die Lat/Long-Angaben habe ich analog zu meiner mqtt-Konfiguration gemacht. Ist das JAR an Ort und Stelle und die Konfiguration syntaktisch korrekt, werden beim start_debug.sh Meldungen wie diese hier auftauchen:

09:04:19.438 [DEBUG] [.a.internal.bus.AstroActivator:32   ] - Astro binding has been started.
09:04:20.954 [INFO ] [.b.a.internal.bus.AstroBinding:70   ] - AstroConfig[latitude=48.858370,longitude=2.294481,interval=disabled,systemTimezone=Europe/Berlin (CET +0100),daylightSavings=false]

Grossartig! Darauf lässt sich nun ein Regelwerk aufsetzen, wir können Items definieren, Switches, Events — wie gehabt. Zu beachten ist hierbei natürlich, dass wir Map-Files benötigen, um die Rückgabewerte »einzudeutschen«; aufgrund gestiegener Nachfrage verwalte ich die Konfigurationen nun per GitHub, und ihr dürft sie gerne aus Ausgangspunkt für eigene Spielereien verwenden. Sie gehören nach /opt/openhab/configurations/transform.

  1. Ich nutze eines, das mir die Mondphasen übersetzt (Mond.mapGITHUB),
  2. eines für die Jahreszeiten (Jahreszeit.mapGITHUB) und
  3. eines für die Tierkreiszeichen (Tierkreiszeichen.mapGITHUB)

Als erstes wollen wir uns in unserer Sitemap eine kleine Übersicht anzeigen lassen. Der Übersichtlichkeit halber erstellen wir uns dazu eine neue Item-Konfiguration (astro.itemsGITHUB)

## /opt/openhab/configurations/items/astro.items
Group		Astro		<sun>		(All)
 
DateTime	Sonnenaufgang_Time	"Sonnenaufgang [%1$tH:%1$tM]"			<sun>		(Astro)		{ astro="planet=sun, type=rise, property=start" }
DateTime	Sonnenuntergang_Time	"Sonnenuntergang [%1$tH:%1$tM]"			<sun>		(Astro)		{ astro="planet=sun, type=set, property=end" }
String		Mondphase		"Mondphase [MAP(Mond.map):%s]"			<moon>		(Astro)		{ astro="planet=moon, type=phase, property=name" }
String		Sternzeichen		"Sternzeichen [MAP(Tierkreiszeichen.map):%s]"	<colorwheel>	(Astro)		{ astro="planet=sun, type=zodiac, property=sign" }
String		Jahreszeit		"Jahreszeit [MAP(Jahreszeit.map):%s]"		<sun_clouds>	(Astro)		{ astro="planet=sun, type=season, property=name" }
 
// Setzt den Switch zur Zeit auf ON, gefolgt von OFF
// Event genau zum Sonnenaufgang
Switch		Sonnenaufgang_Event										{ astro="planet=sun, type=rise, property=start" }
// Event genau zum Sonnenuntergang
Switch		Sonnenuntergang_Event										{ astro="planet=sun, type=set, property=end" }
// Event 20min *nach* Sonnenaufgang
Switch		Sonnenaufgang_20A_Event										{ astro="planet=sun, type=rise, property=start, offset=20" }
// Event 10min *vor* Sonnenaufgang
Switch		Sonnenaufgang_10B_Event										{ astro="planet=sun, type=rise, property=start, offset=-10" }
// Event 20min *nach* Sonnenuntergang
Switch		Sonnenuntergang_20A_Event									{ astro="planet=sun, type=set, property=end, offset=20" }
// Event wenn Vollmond ist
Switch		Vollmond_Event											{ astro="planet=moon, type=phase, property=full" }

In der Sitemap kann es nun einfach eingebunden werden; für diese Demo erstelle ich eine neue sitemap und nenne sie astro.sitemapGITHUB.

sitemap default label="Mein Haus"
{
  Frame {
    Group item=Astro
  }
}

Bringt man nun alles zusammen und startet den Dienst im Debug-Mode, so erhält man unter anderem Output wie diesen:

12:42:22.411 [INFO ] [c.internal.ModelRepositoryImpl:80   ] - Loading model 'astro.sitemap'
12:42:22.528 [INFO ] [c.internal.ModelRepositoryImpl:80   ] - Loading model 'astro.items'
12:42:22.574 [DEBUG] [i.internal.GenericItemProvider:154  ] - Processing binding configs for items from model 'astro.items'
12:42:22.578 [DEBUG] [i.internal.GenericItemProvider:133  ] - Read items from model 'astro.items'
12:42:23.575 [INFO ] [.o.u.w.i.servlet.WebAppServlet:79   ] - Started Classic UI at /openhab.app
12:42:26.495 [DEBUG] [.a.internal.bus.AstroActivator:32   ] - Astro binding has been started.
12:42:26.801 [INFO ] [.b.a.internal.bus.AstroBinding:70   ] - AstroConfig[latitude=48.85837,longitude=2.294481,interval=disabled,systemTimezone=Europe/Berlin (CET +0100),daylightSavings=false]
12:42:29.820 [DEBUG] [a.internal.job.AbstractBaseJob:40   ] - Starting Astro DailyJob
12:42:29.841 [DEBUG] [.b.a.internal.job.JobScheduler:207  ] - Scheduled job with name Season at 2015-03-20 23:46:00
12:42:29.846 [DEBUG] [.b.a.internal.job.JobScheduler:212  ] - Skipping job with name Sonnenaufgang_Event for today, starttime is in the past
12:42:29.848 [DEBUG] [.b.a.internal.job.JobScheduler:212  ] - Skipping job with name Sonnenaufgang_10B_Event for today, starttime is in the past
12:42:29.848 [DEBUG] [.b.a.internal.job.JobScheduler:207  ] - Scheduled job with name Sonnenuntergang_Event at 2015-02-24 18:26:00
12:42:29.849 [DEBUG] [.b.a.internal.job.JobScheduler:207  ] - Scheduled job with name Sonnenuntergang_20A_Event at 2015-02-24 18:46:00
12:42:29.849 [DEBUG] [.b.a.internal.job.JobScheduler:212  ] - Skipping job with name Sonnenaufgang_20A_Event for today, starttime is in the past
12:42:29.851 [INFO ] [runtime.busevents             :26   ] - Sonnenaufgang_Time state updated to 2015-02-24T07:45:00
12:42:29.852 [INFO ] [runtime.busevents             :26   ] - Jahreszeit state updated to Winter
12:42:29.853 [INFO ] [runtime.busevents             :26   ] - Sonnenuntergang_Time state updated to 2015-02-24T18:26:00
12:42:29.853 [INFO ] [runtime.busevents             :26   ] - Sternzeichen state updated to Pisces
12:42:29.854 [INFO ] [runtime.busevents             :26   ] - Mondphase state updated to Waxing Crescent
12:42:29.854 [DEBUG] [.b.a.internal.job.JobScheduler:207  ] - Scheduled job with name Vollmond_Event at 2015-03-05 19:07:00

Abrufbar ist die Seite per http://$SERVERNAME:8080/openhab.app?sitemap=astro; ich nutze greent, da ist die Adresse einfach http://localhost:8080/greent/, die astro.sitemap habe ich dann ausgewählt. Basierend auf den Items & Co. können nun natürlich wiederum Regeln definiert werden: schalte das LED-Band 20min vor Sonnenaufgang an. Schalte es zu Sonnenuntergang ab, aber nur, wenn draussen weniger als 5°C herrschen. Schalte es zu Vollmond an, aber nur im Winter und… okay, ihr versteht.

UnterschriftMeine astro.rules ist noch in Arbeit; das Partnerdings sabotiert sie, indem es ständig auf dem Knopf der Funksteckdose herumdrückt. Sobald ich eine einigermassen getestete Version habe, stelle ich sie als Idee hier (bzw. auch auf GitHub) zur Diskussion.

  1. Vielen Dank für die gute Anleitung 🙂 Damit konnte ich die Astro Binding endlich zum laufen bringen 😉

  2. Hallo,
    Bei mir klappt das Astro Binding nicht. Hast du einen Tipp für mich? Fehler bei der Initialisierung… Wollte darüber meine Rollos steuern. Hast du vielleicht dafür eine passende rule bzw Sitemap. Bin totaler Anfänger aber deine Beispiele haben mir schon sehr geholfen. Vielen dank!

    • Hi Chris,

      welche OpenHAB-Version setzt du denn ein? Kannst du den Output der Debug-Konsole mal zeigen? An der Sache mit den Rollos sitze ich gerade, hab aber leider noch keine Aktoren, so dass ich es nicht wirklich testen kann :-/

      Viele Grüße,
      Marianne

      • Hi,
        danke für die schnelle Antwort. Ich nutze die Version 1.8.0 von openhab.
        Ich versuche gerade schon herauszufinden, wie ich den debug starten kann, start_debug.sh geht bei mir leider nicht…

        Wenn Du eine Idee hättest, wäre ich dir sehr dankbar. Ich habe gefühlt schon das gesamte Netz abgesucht 😉

        LG
        Chris

        • Hm, ich hab vor etwa zwei Wochen ein Update meines 1.7.1-Produktivsystems auf 1.8 versucht und bin kläglich gescheitert – da lief irgendwie überhaupt nichts mehr rund. Ehe ich das nochmal angehe wollte ich es in einer Testumgebung ausprobieren. Die Twitter-Action hat beispielsweise überhaupt nicht funktioniert…

          Insofern: zu 1.8 kann ich im Moment wenig sagen. Unter 1.7.1 läuft alles fehlerfrei :-/

          Viele Grüße!

          • ok, dann trotzdem vielen Dank! Falls Du noch etwas finden solltest, gib mir gerne bescheid 🙂 Ich schau des öfteren auf deine Seite 🙂

            LG

        • Nimm doch mal die 1.8.1, das ist die aktuelle STABLE — ich bin gerade dabei, sie innerhalb einer Testumgebung aufzusetzen, und im Zusammenspiel mit dem Astro-Binding tut alles tadellos bei mir. Und wenn start_debug.sh bei dir nicht funktioniert, scheint da ja insgesamt was im Argen zu liegen 🙂

  3. Hi,

    Danke für die sehr ausführliche Erklärung zum Astro-Binding, ich konnte mit Hilfe deiner Beschreibung auf Anhieb das Astro auf meinem openhab-raspberry-pi einrichten um meine Rolläden auf KNX anzusteuern, bisher hatte ich eine timer-rule die ständig manuell entsprechend der Jahreszeit nachgestellt werden musste.
    Besonders gut ist die Sache mit den 20 Minuten nach Sonnen- Auf/Untergang, es passt dadurch wirklich sehr genau !

    Bis dann Jürgen………..

  4. Nice!Muss ich mal nem Kollegen sagen, der renoviert gerade und installiert EIB, mal schauen ob das dort sinvoll integrierbar ist 😀

    via plus.google.com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.