Anleitungen/Beispiele zur Vollautomatisierung mit andfhem und Tasker

Begonnen von hillbicks, 14 September 2014, 21:03:45

Vorheriges Thema - Nächstes Thema

hillbicks

Hallo zusammen,

ich habe in meinem Urlaub endlich die Zeit gefunden eine Anleitung zu schreiben die beschreibt wie man mit Hilfe von Tasker und andfhem die Heimautomatisierung noch einen Schritt weiter bringen kann und auf die individuellen Beduerfnisse zurecht schneiden kann. An dieser Stelle grossen Dank an Matthias der mir bei meinen zahlreichen Fragen mit Rat und Tat zur Seite stand. :)

Der Plan ist erstmal verschiedene Beispiele hier im Forum zu posten da die Anleitung sicher an der ein oder anderen Stelle verbessert werden kann/muss und da bin ich natuerlich auf euer Feedback gespannt/angewiesen. Anschliessend wuerde ich dann noch einen Wiki Eintrag anlegen und Matthias anbieten das er die Anleitung auf seiner Seite aufnehmen kann.

Vorwort: Ich bin vor einigen Monaten in die FHEM Welt eingestiegen und habe mir als Android Nutzer natuerlich auch sofort andfhem von Matthias Klass besorgt. Auf der Seite von Matthias wurde dann noch die Moeglichkeit beschrieben externe Interfaces per sogenannter Intents zu bedienen bzw mit Informationen zu versorgen womit dann Tasker ins Spiel kam. Wer Tasker nicht kennen sollte, es ist eine Android App mit der sich im grunde genommen alles automatisieren laesst. Man erstellt dazu ein Profil welches auf bestimmte Bedingungen reagiert (Uhrzeit, Tag, WLAN verbunden, im Umkreis eines bestimmten Ortes, Display aus um wirklich nur ein paar Beispiele zu geben, die komplette Liste ist wahnsinnig lang und laesst kaum Wuensche offen). Wenn diese Bedingung eintritt, kann eine bestimmte Akion ausgeloest werden, z.B. eine Musikdatei abspielen, das WLAN einschalten, das Geraet stumm schalten. Zusaetzlich lassen sich schleifen bauen, "wenn dann" Abfragen einbinden, es gibt wirklich kaum etwas das man mit Tasker in Android nicht machen kann. Einige Entwickler stellen plugins fuer Tasker zur Verfuegung um die Einbindung ihrer Apps einfacher, bzw. Ueberhaupt moeglich zu machen (z.b. andfhem), andere wiederum stellen lediglich intents zur Verfuegung was die Einbindung etwas schwerer macht, aber dazu spaeter mehr.


Die Konfiguration von andfhem kann der Webseite entnommen werden und ist nicht Bestandteil dieser Anleitung.

Part 1: Das Licht anschalten sobald wir mit unserem WLAN verbunden sind.
Part 2: Licht gedimmt anschalten wenn beim Mediacenter xbmc/kodi Pause gedrueckt wird
Part 3: Info und Kontrollwidgets mit Zooper

hillbicks

#1
Tasker starten und ein neues Profil hinzufuegen.

(http://i.imgur.com/heqR4SZ.png)


Namen fuer das Profil vergeben "Licht an Wenn Zuhause"


(http://i.imgur.com/NyClVXm.png)
(http://i.imgur.com/cjzekSh.png)
Als naechstes waehlen wir die Bedingung aus die zutreffen muss damit unser Licht angeht.
State → Net → Wifi Connected

(http://i.imgur.com/sLUaJYE.png)
(http://i.imgur.com/C0zUrYO.png)
(http://i.imgur.com/cjzekSh.png)




Hier kann wahlweise die IP/MAC des AccessPoints oder einfach nur die SSID eingetragen werden. Wenn die Verbindung zum WLAN gerade aktiv ist, kann der Name der SSID (oder die MAC) auch ueber die Lupe ausgewaehlt werden. Anschliessend ueber das Symbol links oben zurueck.

(http://i.imgur.com/7AHqG2w.png)


Nun wird die eigentliche Aktion hinzugefuegt, also was passieren soll wenn wir zu "Meine WLAN SSID" verbunden sind.  New Task und dann den Namen vergeben "Licht an"

(http://i.imgur.com/4cX11qj.png)
(http://i.imgur.com/5Fl94tG.png)

+ Symbol am Ende auswaehlen.

Plugin

(http://i.imgur.com/jmwaDtu.png)

AndFHEM Command


(http://i.imgur.com/yWFBTy1.png)


Rechts oben auf das Stiftsymbol neben Configuration klicken

(http://i.imgur.com/gjHPiZa.png)


Den eigentlichen FHEM Befehl den wir senden wollen eintragen

(http://i.imgur.com/YO306Dq.png)


Die FHEM Verbindung auswaehlen, anschliessend save druecken.

(http://i.imgur.com/8oEQAM2.png)

Wieder ueber das Symbol links oben zurueck gehen.
(http://i.imgur.com/bWNbl71.png)


Fertig. Das war es "schon". Jetzt noch einmal mit der zurueck Taste zum Hauptbildschirm wechseln und Tasker sollte aktiv sein, zu erkennen an dem Blitzsymbol in der Notification Leiste.

(http://i.imgur.com/6isx5Gg.png)


Sobald sich euer Android Geraet nun zum WLAN verbindet wird sofort der FHEM Befehl abgesetzt um das Licht einzuschalten. Wie man an dem Screenshot oben sehen kann ist der eigentliche Task mit einem gruenen Pfeil versehen, was bedeutet das dieser ausgefuehrt wird sobald die Bedingung erfuellt ist. Man kann zusaetzlich oder stattdessen einen Task hinzufuegen um das Licht auszuschalten sobald man NICHT mehr mit dem WLAN verbunden ist, sprich die Bedingung nicht mehr zutrifft. Vorrausetzung fuer diesen speziellen Task mit dem WLAN ist natuerlich das FHEM auch von aussen erreichbar ist ;) Da das umschalten von WLAN auf Mobilfunk erfahrungsgemaess ein paar Sekunden dauert, warten wir vor dem eigentlichen Ausschalten des Lichtes 5 Sekunden und setzen dann erst den Befehl ab.

Lange auf "Licht an" klicken und dann "Add Exit Task" auswaehlen
(http://i.imgur.com/SMjrvLq.png)

Namen fuer den Exit Task vergeben "Licht aus"

(http://i.imgur.com/lRcOoE1.png)

Ueber das + Symbol und den Punkt "Task" fuegen wir nun den Task hinzu der nichts weiter macht als 10 Sekunden zu warten.
(http://i.imgur.com/OklrQhn.png)
(http://i.imgur.com/L4q6hck.png)



Wait auswaehlen
(http://i.imgur.com/1tq1GXH.png)


5 Sekunden auswaehlen und ueber das Symbol oben links wieder zurueck.
(http://i.imgur.com/XRSXvcR.png)

Jetzt wiederholen wir die Schritte um den Task "Licht an" anzulegen, der einzige Unterschied ist natuerlich das der Task das wir beim fhem Befehl anstatt "set device on" nun "set device off" verwenden.


Anschliessend wieder ueber das Symbol oben links zurueck
(http://i.imgur.com/bmvr68m.png)
(http://i.imgur.com/JT49w42.png)

Jetzt ist der Task komplett, das Licht wird bei Verbindung mit dem WLAN eingeschaltet und bei Verbindungsverlust wird 5 Sekunden gewartet bevor das Licht ausgeschaltet wird.

(http://i.imgur.com/zbOtcoG.png)

Damit sollte die grundsaetzliche Funktionsweise von Tasker relativ klar sein und jeder von euch kann sich ja mal die zahlreichen Alternativen zu den Bedingungen und Tasks ansehen und ueberlegen was er damit anstellen moechte.

hillbicks

#2
Nachdem wir nun ein recht einfaches Profil eingerichtet haben, kommen wir zu den eingangs angesprochenen Intents.

Ich verwende als Mediacenter kodi, ehemals XBMC/Kodi mit der dazugehoerigen Fernbedienung yatse.  Yatse liefert leider plugin fuer tasker, deshalb muessen wir uns mit den entsprechenden Intents begnuegen. Eine Uebersicht der in Yatse zur Verfuegung stehenden Intents gibt es auf der Homepage der app.

Wenn ich einen Film ueber das Mediacenter sehe und zwischendurch Pause mache, ist es sehr praktisch wenn das Licht automatisch angeht (Wohnzimmer, Kueche, GaesteWC). Natuerlich soll es auch wieder ausgehen wenn der Film weitergeht, bzw. Gestartet wird.

Vorweg ist noch der Unterschied zwischen States und Events in Tasker zu erklaeren. Events sind einmalige Ereignisse wie z.b. der Empfang einer SMS, oder eben ein Intent. Ein Intent ist im Grunde genommen eine Systemnachricht die von einer App an das Android System gesendet wird und auf die Tasker dann entsprechend reagieren kann.

Wir legen also wieder ein neues Profil an mit dem Namen "Licht an bei Pause"
(http://i.imgur.com/vHIRgZM.png)

Event
(http://i.imgur.com/Vpj4Lrd.png)

System
(http://i.imgur.com/LvEMz1L.png)

Intent Received
(http://i.imgur.com/7tJLU5L.png)

Action: org.leetzone.android.yatsewidget.INFO_STATUS_CHANGED und wieder zurueck ueber das Symbol oben links.
(http://i.imgur.com/1KWsRGH.png)

Der eben angelegte Intent reagiert auf alle Statusaenderungen, also Play, Stop, Pause, Forward, deshalb muessen wir im eigentlichen Task noch eine Abfrage einbauen ob etwas abgespielt wird oder nicht, konkret schauen wir ob der Player aktiv ist. Dazu behelfen wir uns einer If Abfrage denn yatse liefert auch diese Informationen mit.

So sieht der fertige Task aus
(http://i.imgur.com/6HIcvyX.png)


Den eigentlichen Task anlegen "Licht an bei Pause"
(http://i.imgur.com/EMcdenc.png)

+ Symbol am Ende auswaehlen.
Task
(http://i.imgur.com/jmwaDtu.png)

If
(http://i.imgur.com/1tq1GXH.png)

If
(http://i.imgur.com/SjVMskr.png)

Auf der linken Seite ist die Variable einzutragen die wir auf einen Wert ueberpruefen wollen, in diesem Fall heisst die Variable %org_leetzone_android_yatsewidget_media_isactive
Der Button in der Mitte legt die Art der Ueberpruefung fest (Matches, doesn't match, etc.). wir waehlen hier matches. Auf der rechten Seite wird nun der eigentliche Wert eingetragen den wir ueberpruefen wollen, true.

Wenn jetzt also eine Statusaenderung von yatse durchgefuehrt wird, dann registriert Tasker dies und schaut Tasker jetzt nach ob der Player aktiv ist (also ein Film abgespielt wird), ansonsten wuerde der naechste Schritt auch ausgefuehrt werden wenn der Film vorbei ist. (yatse sendet eine Statusaenderung weil sich der Status von Play auf Stop aendert). Wer das moechte kann die erste if Abfrage natuerlich weglassen.

Zweite If Abfrage hinzufuegen:
- Variable:  %org_leetzone_android_yatsewidget_media_isplaying
- Ueberpruefung: Matches
- Wert: false

Licht anschalten

Plugin

(http://i.imgur.com/jmwaDtu.png)

AndFHEM Command


(http://i.imgur.com/yWFBTy1.png)


Rechts oben auf das Stiftsymbol neben Configuration klicken

(http://i.imgur.com/gjHPiZa.png)


Den eigentlichen FHEM Befehl den wir senden wollen eintragen

(http://i.imgur.com/YO306Dq.png)


Die FHEM Verbindung auswaehlen, anschliessend save druecken.

(http://i.imgur.com/8oEQAM2.png)

Wieder ueber das Symbol links oben zurueck gehen.
(http://i.imgur.com/bWNbl71.png)

End If

Damit das Licht wieder ausgeschaltet wird wenn der Film weitergeht, brauchen wir eine zweite Schleife die wir im Grunde nur umdrehen. Wenn die Variable true und nicht false enthaelt, dann schalte das Licht aus. Dafuer sparen wir uns die Abfrage ob der Player aktiv ist, denn wenn etwas abgespielt wird, dann ist der Player auf jeden Fall aktiv.

Also wieder eine if schleife bauen:
- Variable:  %org_leetzone_android_yatsewidget_media_isplaying
- Ueberpruefung: Matches
- Wert: true

fhem plugin hinzufuegen und das Licht wieder ausschalten

End if hinzufuegen
(http://i.imgur.com/6HIcvyX.png)

Damit ist der Task fertig. Wie zuvor zweimal zurueck um zur Hauptseite zu kommen und Tasker wird das Profil ab sofort benutzen.



siggi85

Hallo,

erst mal danke für deine Mühe. Damit können Neulinge in die wundervolle Welt von Tasker in Verbindung mit FHEM einsteigen. :)

Allerdings würde ich das "Licht an bei Pause Szenario" eher direkt über ein Notify in FHEM machen (was ich auch habe ;) ). Man muss nur darauf achten, dass XBMC in FHEM als TCP konfiguriert ist, um auch Events in FHEM zu erzeugen.
Gerade wenn man viele XBMC Instanzen hat, muss in Yatse sonst immer die richtige ausgewählt sein, damit die internen Intents gesendet werden. Wenn man das über notifys löst, kann man außerdem für jeden benötigten Raum/Device ein eigenes Notify mit der zugehörigen Lichtquelle schalten (oder auch nicht, falls es sich um ein mobiles XBMC Device handelt). Außerdem funktioniert das ganze auch, wenn der Hausherr mal nicht mit seinem Handy zu Hause ist oder es gerade leer ist. :)

Trotzdem: Daumen hoch für die Anleitung! Sehr nachvollziehbar geschrieben. Kannst ja mal einige Anwendungsfälle aufschreiben die du gerade nutzt, vielleicht kann man sich etwas inspirieren lassen. ;)

PS: Yatse ist eine der genialsten und durchdachtesten Apps die es gibt! Und ohne Tasker wäre meine Welt nicht die selbe. Das ist meine Hauptschnittstelle zu manuellen Aktionen in FHEM.

hillbicks

*sigh*

Antwort wieder weg. Ich danke Dir fuer das Feedback und den Hinweis mit dem notify. Mir war nicht bewusst das fhem xbmc auch direkt steuern kann, das eroeffnet ja ganz neue Moeglichkeiten. Ich denke damit ist klar was ich am Wochenende machen werde, bisher habe ich auch einfach noch nicht genug mit notify befasst.

Ich werde meinen Post dann auch noch um einem entsprechenden Hinweis auf das Modul und notify erweitern. Ich hoffe dann komme ich auch dazu endlich das HowTo fuer das Zooper Widget zu schreiben, damit bleiben dann naemlich wirklich keine Wuensche mehr offen :)

gangwi

Hallo siggi85,

kannst du mir ein beispiel zeigen wie so ein befehl aussieht, damit das lich bei üause an geht und bei play wieder aus...


bin noch ein ziemlicher neuling auf diesem gebiet.

über eine Antwort würde ich mich sehr freuen.

Danke Gruß
gangwi
Fhem: 5.6 auf Rasperry Perl: v5.14.2
RFXTRX 433Mhz  5x Brennstuhl Steckdosenschalter
Wetterstation WS2350
Home Easy 875 Wandschalter

hillbicks

Zitat von: gangwi am 09 Oktober 2014, 01:15:33
Hallo siggi85,

kannst du mir ein beispiel zeigen wie so ein befehl aussieht, damit das lich bei üause an geht und bei play wieder aus...


bin noch ein ziemlicher neuling auf diesem gebiet.

über eine Antwort würde ich mich sehr freuen.

Danke Gruß
gangwi

Hattest Du den wiki Eintrag zu XBMC gesehen? Da steht das eigentlich erklaert.
http://www.fhemwiki.de/wiki/XBMC

Ich habs fuer mich allerdings leicht modifiziert, da mir zum einen die Formatierung Probleme gemacht hat und ich desweiteren die Einschraenkung auf den typ movies nicht brauche.

define notify_wz_XBMC_playing notify wz_XBMC:playStatus.* { if (ReadingsVal("wz_XBMC", "playStatus", "") eq "playing") { fhem("trigger LightAll off") } }
define notify_wz_XBMC_paused notify wz_XBMC:playStatus.* { if (ReadingsVal("wz_XBMC", "playStatus", "") eq "paused") { fhem("trigger LightMedia") } }


Mein Beispiel sorgt allerdings dafuer, dass das Licht angeschaltet wird wenn sich der Player im Status "pause" befindet, egal ob Filme, Serie oder Musik. Da ich aber keine Musik ueber mein Mediacenter hoere, ist diese Einschraenkung fuer mich dabei egal.

Ich hoffe ich komme in den naechsten Tagen endlich mal dazu die letzte Anleitung fertig zu schreiben, das ist in jedem Fall die interessanteste.

siggi85

Ich habe momentan meine Konfiguration nicht da, kann aber heute abend mal schauen.
Das Prinzip ist aber, ich schaue anhand des Status einer Lampe (habe 3 im Wohnzimmer, und diese ist bei jeder meiner Szenen an) ob die Lampen an sind und ob es sich um einen Film handelt. Ob es sich um einen Film handelt prüfe ich anhand des XBMC Reading "type" und den Status meiner Lampe über deren STATE.
Und Falls die Lampe an sein sollte, speichere ich über LightScene den Status meiner Lampen in einer temporären Szene. Sobald Pause oder Stop passiert, wird diese Temporäre Szene wieder hergestellt und die temporäre Szene wieder gelöscht.

Wie gesagt, ich schaue zu Hause mal nach meinen Code, aber deine Notifys würe ich anders schreiben (im Moment werden immer beide Notifys ausgelöst und erst im Notify wird geprüft).
Entweder du baust ein Notify, in dem du mit IF dann entweder bei Play oder Pause|Stop verschiedene Aktionen ausführst.
Oder du baust 2 Notifys für jeden Zustand, also dass du schon im RegEx den jeweiligen PlayStatus mit abfängst.

Meine Notifys habe ich nach dem zweiten Schema gebaut und sie sehen ungefähr so aus:
define notify_wz_XBMC_pause_stop notify wz_XBMC:playStatus.paused|stopped { ... }
define notify_wz_XBMC_play notify wz_XBMC:playStatus.playing { ... }


EDIT: Ich habe mittlerweile auch mit gcmsend, Tasker und dem Zooperwidget gearbeitet und ein Widget mit dem Status meiner Komponenten gebaut (du wirst ja noch ein HowTo dafür schreiben). Jedoch kommen nicht immer aller Intents durch (die meisten aber), gerade wenn ich nicht im WLAN bin. Hast du ähnliches beobachtet? Ich vermute, dass GCM Events nicht puffert, falls das Device mal nicht erreichbar ist. Der Fehler kann theoretisch aber an den anderen Schnittstellen liegen: AndFHEM <-> Tasker <-> Zooper

hillbicks

Du hast voellig Recht siggi, keine Ahnung warum ich das so geloest hatte. Werde das heute abend direkt mal anpassen. Das war auf jeden Fall ein sehr guter Hinweise mit dem XBMC Modul, so muss man das alles nur einmal einrichten und pflegen und nicht auf den 5 Android Geraeten die ich zuhause im Einsatz habe.