Display von Android-Tablets per Befehl einschalten

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 71 Mal

Display von Android-Tablets per Befehl einschalten

Beitrag von klassisch » 30.05.2015, 22:23

Nachdem ein freundlicher Kollege mir auf die Sprünge geholfen hat, schalten nun auch meine Android Tablets das Display auf Kommando an - und nicht nur beim Schalten der Versorgungsspannung.

Dazu benötigt man
1 Socat auf der der CCU
2 Die App "WoLi" auf dem Tablet
3 Eine sh-Datei auf der CCU
4 Eine Scriptzeile, die durch Aufruf obiger Datei ein UDP-Kommando verschickt

1 Socat
socat für CCU1 und CCU2 sind unterschiedlich:
- CCU2: http://homematic-forum.de/forum/viewtop ... 33#p128433
- CCU1: http://homematic-forum.de/forum/viewtop ... 701#p24701
Zum Aufspielen auf die CCU habe ich den FTP vom TotalCommander (TC) verwendet.
Die tar.gz Dateien auf dem Windows Rechner mit dem TC entpackt und dann mit dem FTP Client des TC auf die CCU nach

Code: Alles auswählen

/usr/local/addons
kopiert. Mein FTP loggt sich als root mit den entsprechenden Passwort ein.
Damit socat ausgeführt werden kann, schadet es nicht, die Dateiattribute der socat-Datei auf 777 zu setzen. Auch das kann der TC (->Dateien -> Dateiattribute ändern).
Achtung: Socat reagiert nicht auf einen einfachen Aufruf von der Konsole (putty) aus. Um Socat zu testen benötigt es noch den zweiten Schritt.

2 Woli
Im Playstore gibt es die App Woli, die ein KNX-Forumsteilnehmer geschrieben und im Playstore hinterlegt hat https://play.google.com/store/apps/deta ... woli&hl=de .
Die Befehle werden dort erläutert: http://knx-user-forum.de/forum/%C3%B6ff ... post559627
Diese App auf das Android-Tablet installieren.
Für den Anfang reicht es erst mal, "use UDP" auf "An" zuschalten. Es wird der UDP Port 6666 vorgeschlagen.
Dann noch rechts oben durch "Start WoLi" aktivieren.

Jetzt kann schon der erste Test erfolgen. Dazu das Display des Tablet ausgehen lassen und mit Telnet, Putty oä. in die Konsole der CCU gehen und folgendes Kommando absetzen (IP Adresse natürlich anpassen):

Code: Alles auswählen

echo 'Wolido:DisplayON' | /usr/local/addons/socat UDP:192.168.1.35:6666,cr –
Das Display des Tablets, welches im Beispiel die Adresse 192.168.1.35 hat, müßte jetzt angehen und an bleiben. Wenn das funktioniert geht es weiter:

3 Eine sh-Datei auf der CCU anlegen
Hierzu schreibe ich die Datei auf meinem Windows PC mit Notepad++. Diesen im Unix-Mode betreiben (-> Bearbeiten -> Format Zeilenende ->Konvertiere zu Linux) und kopiere sie dann mit dem FTP des TC auf die CCU
Datei mit Notepad++ im Unix-Mode erstellen

Code: Alles auswählen

# more DispON.sh
# Android-Geraet schaltet Display ein. Display bleibt an.
# Nachdem ein Wolido:DisplayOFF empfangen wurde, geht das Display nach der eingestellten Zeit aus  
echo 'Wolido:DisplayON' | /usr/local/addons/socat UDP:192.168.1.35:6666,cr -
#
Diese Datei benennen

Code: Alles auswählen

DispON.sh
und auf die CCU nach

Code: Alles auswählen

/usr/local/addons
kopieren als

Code: Alles auswählen

/usr/local/addons/DispON.sh
Wir brauchen noch eine zweite Datei, da ansonsten das Display immer an bleibt:

Code: Alles auswählen

# more DispOFF.sh
# Nachdem ein Wolido:DisplayOFF empfangen wurde, geht das Display nach der eingestellten Zeit aus  
echo 'Wolido:DisplayOFF' | /usr/local/addons/socat UDP:192.168.1.35:6666,cr -
#
Diese Datei benennen

Code: Alles auswählen

DispOFF.sh
und nach

Code: Alles auswählen

/usr/local/addons
kopieren als

Code: Alles auswählen

/usr/local/addons/DispOFF.sh
4 Eine Scriptzeile, die durch Aufruf obiger Datei ein UDP-Kommando verschickt
In einem HM-WebUI-Programm, welches das Display anschalten soll, muß folgende Skirptzeile eingefügt werden:
Scriptaufruf (in einer einzigen Zeile):

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/bin/sh /usr/local/addons/DispON.sh") 
Nach ca. 10 Sekunden schicke ich noch eine Zweite Skrpitzeile auf den Weg:
Scriptaufruf (in einer einzigen Zeile):

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/bin/sh /usr/local/addons/DispOFF.sh") 
Der erste Befehl schaltet das Display an und läßt es an.
Durch den zweiten Befehl wird die Sperre (wake lock) aufgehoben und das Display geht nach der in den Android Systemeinstellungen eingestellten Zeit (z.B. 5 Minuten) in den Ruhemodus.

Natürlich muß in den Android-Einstellungen: "WLAN im Ruhemodus aktiviert lassen" eingestellt sein. Zu finden in ->Einstellungen -> WLAN ->Kontextmenue -> Erweitert

Jetzt wäre es noch praktisch, wenn WoLi nach jedem Neustart automatisch starten würde. Und auch das geht:
WoLi: Autostart einschalten.
Dazu im WoLi Menue die WLAN SSID selektieren, die dann grün wird. Anschließend "Autostart WoLi" auf "AN" schalten

klaus99
Beiträge: 68
Registriert: 07.06.2015, 18:54
Danksagung erhalten: 4 Mal

Re: Display von Android-Tablets per Befehl einschalten

Beitrag von klaus99 » 14.01.2016, 22:44

Hallo,

vielen Dank klassisch für Deine super aufbereiteten Informationen zu Woli.

Da ich gerade ein altes Smartphone zum Nachttisch-Minidisplay pimpe, kommt Woli gerade recht.

Die Version 0.26 (eigentlich 2.26) ist gerade aktuell und funktioniert problemlos.
Da es wirklich schade ist, Woli nur zum steuern des Displays zu nutzen, habe ich Deine Skriptzeilen
etwas angepasst um flexibler zu sein:

Aus der echo Zeile im Skript

Code: Alles auswählen

echo 'Wolido:DisplayON' | /usr/local/addons/socat UDP:192.168.1.35:6666,cr -
wird

Code: Alles auswählen

echo $1 | /usr/local/addons/socat UDP:192.168.1.35:6666,cr -
Um jetzt einen Befehl an Woli zu senden, wird dieser einfach beim Aufruf des Skriptes als Parameter mitgegeben:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/bin/sh /usr/local/addons/woliskript.sh wolido:display:on") 
Die Variable $1 übernimmt dann diesen Befehl.

Damit ist jetzt mit nur einem Skript auch z.B. Sprachausgabe oder das Senden einer Notification über Woli möglich.

Gruss

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Display von Android-Tablets per Befehl einschalten

Beitrag von dtp » 15.01.2016, 13:06

Das klingt aber mächtig kompliziert.

Also ich habe mir mit Tasker auf dem Tablet einen kleinen Task zum Einschalten des Displays angelgt, den ich dann über ein Programm mit folgendem Skript aufrufe:

Code: Alles auswählen

! EG Flur Tablet Display einschalten
string tablet_ip;
string url;

tablet_ip = dom.GetObject("EG Flur SV Tablet IP").Variable();

url="http://" # tablet_ip # ":50000/tasker=Display_an"; 
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O /dev/null " # url); 
dom.GetObject("CUxD.CUX2801001:1.CMD_RUNS").State("1");
Ausschalten tue ich das Display dann mit dem nachfolgenden Skript, das den Task "Display_aus" in Tasker aufruft.

Code: Alles auswählen

! EG Flur Tablet Display ausschalten
string tablet_ip;
string url;

tablet_ip = dom.GetObject("EG Flur SV Tablet IP").Variable();

url="http://" # tablet_ip # ":50000/tasker=Display_aus"; 
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O /dev/null " # url); 
dom.GetObject("CUxD.CUX2801001:1.CMD_RUNS").State("1");
Die Systemvariable "EG Flur SV Tablet IP" kann man natürlich auch fest in den Skripten definieren. Auf dem Tablet ist neben Tasker ggf. nur noch der Home24 Mediaplayer erforderlich. That's it.

Bis dann,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Display von Android-Tablets per Befehl einschalten

Beitrag von Xel66 » 15.01.2016, 13:49

dtp hat geschrieben: Auf dem Tablet ist neben Tasker ggf. nur noch der Home24 Mediaplayer erforderlich. That's it.
Warum nicht dann entsprechen der Homepage vom Home24-Mediaplayer gleich die Befehle "screenon" und "screenoff" benutzen? Dann brauchst Du den Tasker nicht.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 71 Mal

Re: Display von Android-Tablets per Befehl einschalten

Beitrag von klassisch » 15.01.2016, 15:25

Kann man sich dadurch "socat" sparen?

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Display von Android-Tablets per Befehl einschalten

Beitrag von dtp » 15.01.2016, 15:27

Danke für die Info. Werde ich mal bei Gelegenheit anpassen. Tasker nutze ich aber auch noch zu anderen Dingen. Daher hatte sich das irgendwie angeboten. ;)

Bis dann,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Xel66
Beiträge: 14148
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Display von Android-Tablets per Befehl einschalten

Beitrag von Xel66 » 15.01.2016, 15:56

klassisch hat geschrieben:Kann man sich dadurch "socat" sparen?
Habe ich nicht drauf. Die Befehle werden direkt an die Schnittstelle des Home24-Mediaplayers gesendet. Ich benutze diesen noch für die Wiedergabe von Statusinformation aus der CCU per Text to Speech (z.B. Info über offene Fenster nach 30 Minuten). Das ist eigentlich meine Hauptanwendung.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Display von Android-Tablets per Befehl einschalten

Beitrag von dtp » 15.01.2016, 16:10

klassisch hat geschrieben:Kann man sich dadurch "socat" sparen?
Theoretisch braucht es auf der CCU keinerlei Zusatzsoftware. Allerdings würde ich dringend empfehlen, CUxD zu installieren um etwaigen Problemen mit system.exec aus dem Weg zu gehen.

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Arist
Beiträge: 123
Registriert: 21.04.2014, 15:00

Re: Display von Android-Tablets per Befehl einschalten

Beitrag von Arist » 09.04.2016, 21:32

Hallo!

Hmmm würde gerne mal höflichst anfragen wollen.

Habe mir das Script von DTP mal im Minutentakt (nur zum Testen, später nicht mehr) ablaufen lassen. Leider ohne Erfolg. Und da ich nicht scripten kann.......
Na ja es kommt halt zu Fehlern in der CUxD die wie folgt aussehen:

Code: Alles auswählen

Apr  9 21:08:14 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Apr  9 21:10:01 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 144 0x90 [1] 0 0x00 [2] 6 0x06 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Apr  9 21:13:13 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Apr  9 21:15:01 homematic-ccu2 local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 144 0x90 [1] 0 0x00 [2] 6 0x06 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Das Script habe ich wie folgt angepasst:

Code: Alles auswählen

! Tablet1 Display einschalten
string tablet_ip;
string url;

tablet_ip = dom.GetObject(192.168.216).Variable();

url="http://192.168.1.216:50000/tasker=Aufgewacht"; 
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State("wget -q -O /dev/null " # url); 
dom.GetObject("CUxD.CUX2801002:1.CMD_RUNS").State("1");
Dabei sei erwähnt, dass ich mir ein zweites CUxD Gerät angelegt habe CUxD.CUX2801002:1 In der CCU als Gerät sichtbar, sieht alles gut aus.
Den Task "Aufgewacht" hatte ich bereits angelegt gehabt, er arbeitet mit Motion zusammen, erfolgreich.
Home24–MediaPlayer ist installiert.

Wenn es noch weitere Info`s braucht, dann bitte ebbes rückfragen.

Kann es ev. daran liegen, weil das WLAN des Tablets einschlaft? Dann wäre ja ggf. noch ein anderer Weg zu gehen. Aber was sagt die Fehlermeldung denn aus?

Bin da um Hilfe verlegen........



Grüße

Arist

Benutzeravatar
unlight
Beiträge: 484
Registriert: 23.12.2012, 13:03
Wohnort: Ruhrpott

Re: Display von Android-Tablets per Befehl einschalten

Beitrag von unlight » 09.04.2016, 21:50

Der 11622 Fehler ist der Standardbugfehler der ccu, den kannst du ignorieren. Ich habe 3 tablets hier, 2 sind trotz aller nötigen Einstellungen nicht per WLAN erreichbar wenn das Display aus ist. Da hilft dann nur Strom einschalten!

Gruß
Unlight

Gesendet von meinem RAINBOW JAM mit Tapatalk
“Sometimes I think the surest sign that intelligent life exists elsewhere in the universe is that none of it has tried to contact us.”

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“