Was sich hinter dieser mysteriösen Überschrift verbirgt, erfahrt Ihr in diesem Gast-Artikel von okatzer.
Die Idee zu diesem Projekt existierte schon lange in meinen Gedanken. Der Ausgangspunkt war ein kleines Android-Tablet an der Wand, welches im zentralen Bereich meiner Wohnung hängt und als Informations- und Bedieneinheit für mein Fibaro HomeCenter 2 gute Dienste leistet. Dieses Tablet sollte aber eigentlich noch mehr Aufgaben erfüllen können.
Als Erstes kamen mir da akustische Benachrichtigungen von Ereignissen - und zusätzliche visuelle Hinweise in den Sinn. Für eine bessere Akustik wurde das Tablet per Bluetooth mit einem Mini-Lautsprecher-Würfel gekoppelt. Dieser liegt unsichtbar auf dem Garderobenschrank und ist in der ganzen Wohnung gut zu hören.
Inspiriert vom Waschmaschinen-Skript, sollte diese Idee dann umgesetzt werden. Dass das Fibaro HomeCenter 2 Push-Mitteilungen verschicken kann, ist ja nichts Neues. Problematisch bei Push-Mitteilungen ist allerdings die Kommunikation über das Internet, da diese Kommunikation über mehrere Server (GCM - Google Cloud Messaging) verteilt abläuft. Dadurch besteht die Gefahr, dass Nachrichten nicht zeitnah am Gerät ankommen. Ich habe teilweise mehrere Minuten Versatz feststellen können.
Dies kann man vielleicht bei der Benachrichtigung über das Ende des Waschvorgangs tolerieren, aber spätestens wenn man das Betätigen der Haustürklingel gemeldet bekommen möchte, ist dies ein absolutes NoGo. Schnell war klar, dass so etwas nur mittels einer Kommunikation innerhalb des lokalen WLAN-Netzes zu erreichen ist. Nach viel Recherche und Tests habe ich folgende Lösung gefunden:
Autoremote und Tasker für lokale Pushnachrichten
Mit der Kombination AutoRemote und Tasker der Firma joaoapps.com sollte dies möglich sein. Beide Apps können im Google Playstore geladen werden.
Tasker ist ja bekannt als eierlegende Wollmilchsau, was die Steuerung von Android Geräten angeht. Es gibt kaum etwas das Tasker nicht kann. Vom Verändern der Lautstärke, der Helligkeit bis hin zum Ein- und Ausschalten des Tablets ist alles möglich.
Hier alle Funktionen zu beschreiben würde den Rahmen sprengen, aber im Netz findet man genügend Tutorials dazu!
Nur die prinzipielle Arbeitsweise von Tasker sei hier erwähnt. Tasker setzt sich aus drei Bereichen zusammen.
Profile, Tasks und Szenen. In den Profilen beschreibt man die auslösenden Ereignisse z.B. ein bestimmter Tag, Uhrzeit, Position, Status des WLAN und so weiter.
Was dann passieren soll wird in den Tasks beschrieben. Hier ist es möglich ganze Abläufe zu programmieren. Schleifen, If-Abfragen, Zugriff auf Variablen, fast alles ist hier machbar.
Szenen dienen dazu Bedien- und Anzeigeoberflächen zu gestalten und werden durch eine Task aufgerufen.
Buttons, Textboxen, Labels, Menüs und vieles mehr stehen zur Verfügung und können wenn gewünscht durch eine Task dynamisch mit Informationen befüllt werden.
Also kurz gesagt, Tasker ist das Arbeitstier das all das macht was wir und so vorstellen.
Kommen wir zu AutoRemote. AutoRemote ist eine App vom selben Hersteller und dient dazu Meldungen zwischen verschiedenen Geräten auszutauschen.
Handys, Tablets und sogar PC‘s können mittels eines Chrome Plugins erreicht werden.
AutoRemote integriert sich als Plugin in Tasker und kann dort in Profilen als auslösendes Ereignis verwendet werden oder in Tasks Messages an andere AutoRemote-Geräte senden.
Also zum Beispiel: wenn eine Meldung von AutoRemote mit dem Textinhalt "Waschmaschine" kommt, dann führe den Task "DoWaschmaschiene" aus.
Es ist möglich die AutoRemote Meldung zu zerlegen und in Variablen abzulegen, auf die man dann in den Tasker Tasks zugreifen kann.
Im Normalfall bedient sich AutoRemote auch der Kommunikation über das Internet mittels GCM, hat aber einen "Autoremote-WiFi-Service" mit an Bord der, wenn er gestartet ist, die lokale Kommunikation im WLAN-Netz ermöglicht.
Bis jetzt ist dieses Feature in der AutoRemote App leider noch nicht aktivierbar, sondern muss mittels einer Tasker Tasks durchgeführt werden.
AutoRemote versucht standardmäßig erst im lokalen WiFi-Netz den Adressaten zu erreichen, wenn das nicht möglich ist geht der Weg ins Internet zu den Servern von joaoapps.com
Bis jetzt hat das Ganze ja noch nichts mit unserer HC2 zu tun, aber mittels http-requests ist es möglich mit AutoRemote Kontakt aufzunehmen.
Leider wird es jetzt etwas knifflig was die Umsetzung der http-requests angeht. Fibaro hat leider zwei unterschiedliche Klassen für http-requests in LUA-Szenen und in virtuellen Modulen.
Ich beschreibe jetzt mal was ich geschafft habe zu realisieren und was nicht geht, was aber nicht bedeutet das es nicht doch möglich ist.
In LUA-Szenen kann man http-requests versenden die AutoRemote Geräte über das Internet/GCM erreichen
In LUA-Szenen hab ich es nicht geschafft über das lokale WLAN den AutoRemote WiFi-Service zu erreichen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
--[[ %% properties %% events %% globals --]] -- ********************************************************* local debug = true; -- Debug true or false -- ********************************************************* -- Grundfunktion: Debug("red", "Nachrichtentext") -- die local Variable "debug" muß gesetzt werden Debug = function(color, message) if (debug) then fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end end -- Callback bei Erfolg local function successCallback(resp) Debug('green', 'Verbindung erfolgreich, status: ' .. resp.status) -- komplette respons ausgeben --Debug('white', json.encode(resp)) end -- Callback bei Fehler local function errorCallback(resp) Debug('red', 'Verbindung fehlgeschlagen, error: ' .. resp) end -- Http-Request für AutoRemode mittels GCM (Google Cloud Messaging) -- ***** funzt in Szenen ***** local function sendPushover(requestUrl, requestCommand) local http = net.HTTPClient() Debug('orange', 'enter sendPushover') http:request( requestUrl .. requestCommand, { options = {method = 'GET'}, success = successCallback, error = errorCollback } ) end -- nur eine Instanz if (fibaro:countScenes() > 1) then Degug('orange', 'nur eine Szene -> abort') fibaro:abort(); end Debug('white', 'Scene gestartet') -- hier wird das Ziel Gerät beschrieben -- die kurz Url http://goo.gl/XyZ1aBC wird von der Autoremote App vergeben -- local targetUrl = 'https://autoremotejoaomgcd.appspot.com/sendmessage?key=xxxxxxxxxxxxxxxxxxx-yyyyyyyyyyy-zzzzzzzzzzz&message=' -- das zu sendende Kommando local command = 'Waschmaschine' -- senden über GCM - Google Cloud Messaging sendPushover(targetUrl, command) Debug('white', 'Scene verlassen') |
Beim starten dieser Szene wird an die targetUrl das Kommando 'Waschmaschine' gesendet.
Die targetUrl erhält man indem die von der AutoRemote App vergebene kurz Url in einen Browser eingibt. Die Kommando wird per GCM übertragen.
Mit der Fibaro Klasse für http-requests in virtuellen Modulen, habe ich es nicht geschafft mit AutoRemote Kontakt aufzunehmen.
Aber es gibt von "krikroff" ein Toolkit-Framework in dem ein http-request realisiert ist der funktioniert. Dieses Toolkit-Framework ist Opensource und kann auf github herunter geladen werden.
current release: http://krikroff77.github.io/Fibaro-HC2-Toolkit-Framework/
latest release: https://github.com/Krikroff77/Fibaro-HC2-Toolkit-Framework/releases/latest
Dieses Toolkit-Framework funktioniert allerdings nur in virtuellen Modulen.
Der Framework-Code wird einfach in die Mainloop oder den Lua-Bereich eines Buttons kopiert und kann dann aufgerufen werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
-- CODE-Ausschnitt des virtuellen Moduls (Button 'sende Befehl') ------------------ --+++++++++++++++++++++++++++++++++++ -- hier das Toolkit-Framework einfügen --+++++++++++++++++++++++++++++++++++ -- Funktion zum Senden an AutoRemote mit WiFi Service enabled -- funzt nur in virtuellen Modulen local function sendLocal(receiverIP, AutoRemotePort, SenderKey, Command) -- local httpClient = Tk.Net.HttpRequest(receiverIP,AutoRemotePort) payload = { message = Command, sender = SenderKey, ttl=0, communication_base_params = { type = 'Message', fallback = false, via = 'Wifi' }, version = '1.63' } local strPayload = json.encode(payload) --httpClient:setWaitBeforeReadMs(500) local response, status, errorCode = httpClient:request('POST', '', {}, strPayload) -- disconnect socket and release memory... httpClient:disconnect() httpClient:dispose() httpClient = nil end -- set Toolkit.Net.* trace enabled Toolkit.Net.isTraceEnabled = true; -- AutoRemote Wifi Service Port local TargetPort = '1817' TargetIP = {} TargetIP.Android1 = 'local IP' -- anpassen z.B. '192.168.178.43' TargetIP.Samsung = 'Local IP' -- anpassen z.B. '192.168.178.24' TargetIP.Xperia = 'Local IP' -- anpassen z.B. '192.168.178.38' local SenderKey = 'Fibaro_HC2' -- aus den globalen Variablen target und command auslesen local AutoRemoteCmd = fibaro:getGlobal('AutoRemoteCmd') local AutoRemoteTarget = fibaro:getGlobal('AutoRemoteTarget') sendLocal(TargetIP[AutoRemoteTarget], TargetPort, SenderKey, AutoRemoteCmd) |
Dies sind 'AutoRemoteTarget' und 'AutoRemoteCmd'. In 'AutoRemoteTarget' wird der Klarname des Ziel-Gerätes z.B. 'Android1' oder 'Samsung' oder 'Xperia' abgelegt.
In 'AutoRemoteCmd' wird der zu sendende Text-Befehl hinterlegt. Ist das geschehen, wird der Button 'sende Befehl' des virtuellen Moduls per Code gedrückt.
Der Klarname des Ziel-Gerätes wird im virtuellen Modul in einen IP-Adresse umgewandelt.
1 2 3 4 5 6 7 8 |
------------------------ CODE -------------------------- -- befüllt die globalen Variablen mit einm Testbefehl -- an das Gerät 'Android1' fibaro:setGlobal('AutoRemoteTarget','Android1') fibaro:setGlobal('AutoRemoteCmd','doTest') local vDeviceID = xyz -- hier die ID des virtuellen Moduls eintragen fibaro:call(vDeviceID,'pressButton','2') ------------------------ CODE ENDE -------------------------- |
Fazit:
Es ist ein langer Weg bis alles funktioniert, aber es lohnt sich.
Das System hat viel Potential und kann kreativ benutzt werden.
hi,
kostenlose Alternative: TNES tasker plugin.
Ich habe etwas ähnliches mit dem Tasker Network Event Server plugin umgesetzt.
TNES bietet auch die Möglichkeit die Nachrichten lokal oder über das Internet zu senden.
Am besten funktioniert es mit JSON.
Homepage: https://thacthab.herokuapp.com/TNES.html
zu beachten: https://mediola.answerbase.com/2181253/Android-Tasker-aus-Neo-Remote-per-HTTP-triggern-So-geht-s#answer2395637
Gruß - kro
Hi kro,
der Artikel hat ziemlich lange gebraucht bis er jetzt veröffentlicht wurde.
Ich hatte schon gar nicht mehr daran geglaubt. Der erste Kontakt zu SIIO war im Mai 2016.
Mittlerweile bin ich auch zu TNES gewechselt. Funktioniert super und ist viel Einfacher zu handhaben.
Gruß - okatzer