Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

In den Einstellungen im Screen "Einstellungen Server" kann man das Android Gerät als SocketServer aktivieren, sodass man es von außerhalb entsprechend fernsteuern kann.

Hier eine Beschreibung der einzelnen Einstellungsmöglichkeiten:

  • Unter "Android IP Adresse" wird die aktuelle IP-Adresse angezeigt unter welcher dann der Sockstserver erreichbar ist (für die Konfiguration im Script weiter unten)
  • Unter "Hostname" wird der aktuelle Hostname angezeigt (mittels diesem Namen und Eurer Domain könnt Ihr auch das Android Gerät ansprechen)
  • Unter "Android Server" wird der aktuelle Status des Socketservers angezeigt (genauer gesagt der Android Service in welchem der SocketServer lauft)
  • Bei "TCP Port" könnt Ihr einen anderen Port einstellen unter welchem Euer SocketServer erreichbar sein soll (dieser ist relevant für die Konfiguration im Script weiter unten)
  • "Benutze Passwort" ermöglicht Euch das Android Gerät noch extra Passwort zu schützen, dann müsst Ihr unten im Script immer "PW EuerPasswort" dem eigentlichen Befehlt im Script unten voran stellen. EuerPasswort ist natürlich mit Eurem echten Passwort dann zu ändern. Beispiele siehe auch im Script unten.
  • Mit der Option "Start beim Booten" wenn diese aktiviert wird, wird der SocketServer automatisch gestartet falls Ihr Euer Android Gerät ausschaltet und wieder einschaltet bzw. einen Reboot durchführt

Folgende Hinweise noch:

  • Wenn WLAN im Standby abgeschaltet wird laut den Android Einstellungen dann ist das Gerät natürlich nicht mehr erreichbar
  • Beim Standby Deaktivieren bleibt der Sperrbildschirm des Android Gerätes aufrecht!!! Lässt sich mit der Android SDK nicht umgehen. Wenn gewünscht muss das Tablet (zB: Wandtablet) generell bzgl. Sperrbildschirm deaktiviert werden
  • Bei sehr vielen installierten Apps kann es dauern bis der Server gestartet ist wenn man auf den Start Button drückt (zB: bei 400 installierten Apps ca. 10 Sekunden; bei 40 Apps ca. 1 Sekunde); es wird nämlich eine Liste der installierten Apps gehalten da sonst jeder Versuch eine App zu starten so lange dauern würde!
  • Für Herunterfahren/Restart sind Root Rechte erforderlich (rooted Device) - Achtung: Sichert Euer WLAN entsprechend ab wenn Ihr Root Rechte freigeschaltet habt und den SocketServer verwendet
  • Sollte das Android Gerät wenig RAM haben und sehr viele Apps/Services schon laufen, kann es sein dass der Server ständig von Android beendet wird und wieder neu gestartet wird. Das liegt daran dass Android intern eine Bewertung bzgl. Wichtigkeit durchführt und aufgrund dieser bei Speicherbedarf Tasks entsprechend beendet. Eventuell habt Ihr auch irgendwelche Tasker am Laufen die dann auch den Server (Service) beenden und so es zu Restarts kommt. Der Server sollte in der App gestartet und gestoppt werden bei Bedarf.
  • Bewährt hat sich bei meinen Tests eine Zusatz App um diverse App Informationen und Tasks usw... anzuzeigen (App Name: "System Info for Android")
  • Wenn die Einstellung "Start beim Booten" in der App aktiviert wird, dann Startet der Server beim Neustart des Gerätes automatisch mit! Der Server ist nicht als eigener Prozess sichtbar, sondern lauft in der Haussteuerung mit (ursprünglich wollte ich es in einem eigenen Prozess realisieren mit dem Namen "Haussteuerung Remote", dann hatte ich aber Probleme mit dem Socket bzgl. Terminierung und diese Idee wieder verworfen)

Hier ein Beispiel php Script:

 <?
 
//Script Datum: 25.11.2016 Version 1.5
 
/* Den Port vom Android Device. Default 2001. Kann in der App Haussteuerung verändert werden! */
$service_port = 2001;
 
/* Die IP-Adresse des Zielrechners ermitteln. */
//$address = gethostbyname('android-6f94f5f5290b2696.home');
//oder so fix setzen bei Static IP
$address = '10.0.0.49';
 
//Befehle für Android Gerät (je nach Bedarf Zeilen deaktivieren/verändern)
// $in = ""; als erste Zeile immer stehen lassen
//
// WICHTIG: Wenn PasswortProtection in der App Haussteuerung aktiviert wurde, dann ist bei jedem Kommando ein "PW passwort" voranzustellen
// WICHTIG: Beispiel sieht dann so aus:
// WICHTIG: $in .= "PW AndieserStellekommtdeinPasswort Sage Das ist ein Test\r\n";
 
// DeaktiviereStandby Schaltet das Display ein, ein Lcokscreen/PIN/etc... wird aber nicht übergangen!!!
// SagenachStandby XXX wird nur ausgefüht wenn das Android Gerät im Standby Modus war und der Bildschirm aktiviert wurde
// SageohneStandby XXX wird nur ausgefüht wenn das Android Gerät nicht im Standby Modus ist, also der Bildschirm schon sichtbar ist
// Sage XXX einfach nach Sage einen Text konfigurieren der dann immer ausgegeben wird am Android Gerät im Hintergrund; Egoal ob Display im Standbymodus ist oder nicht!
// Sage1 XXX wie oberhalb aber mit geringer Lautstärke
// Sage2 XXX bis Sage4 XXX wie oberhalb aber mit höherer Lauftstärke bis beinahe maximaler Laufstärke
// Sage5 XXX wie oberhalb aber mit maximaler Lautstärke
// Warte NNNN Millisekunden 1000 Millisekunden = 1 Sekunde (Während Wartezeit wird ein transparenter Screen angezeigt wenn das Device an ist!)
// StarteApp XXX (App Name immer in Kleinbuchstaben, vorhergehendes Warte hat hier keine Auswirkung!!!)
// StarteAppnachStandby (App Name wird nur gestartet wenn das Android Gerät im Standby Modus war und der Bildschirm aktiviert wurde
// Spracheingabe Startet die Sprachsteuerung der App am Android Gerät im Hintergrund aber ohne Auslesen der Rückantwort von IP-Symcon
// SpracheingabeUndAntwort Startet die Sprachsteuerung der App am Android Gerät im Hintergrund inkl. Auslesen und Vorlesen der Rückantwort von IP-Symcon
// ÖffneUrl xxx Öffnet eine URL am Android Gerät
// Tasker xxx Startet den Tasker Task mit dem Namen xxx (WICHTIG: In Tasker unter Einstellungen -> Versch. -> Externen Zugriff erlauben einstellen!)
// Vibriere NNNN Millisekunden lässt das Android Gerät für NNNNN Millisekunden vibrieren (1000 Millisekunden = 1 Sekunde)
// Herunterfahren (benötigt ein Android Gerät mit root Rechten und der App Zugriff auf Superuser Rechte (rooted device))
// Restart (benötigt ein Android Gerät mit root Rechten und der App Zugriff auf Superuser Rechte (rooted device))
// StarteWebcam Starte eingebaute WebCam der App Haussteuerung (funktioniert nur wenn das explizit in der App unter Einstellungen WebCam erlaubt wird)
// StoppeWebcam Stoppe eingebaute WebCam der App Haussteuerung (funktioniert nur wenn das explizit in der App unter Einstellungen WebCam erlaubt wird)
// WICHTIG immer mit \r\n abschließen und $in mit .= erweitern!!!
 
$in = ""; //nicht löschen!!!
//$in .= "PW q3R$z6R DeaktiviereStandby\r\n"; //Beispiel um mit Passwort zu arbeiten
$in .= "DeaktiviereStandby\r\n";
$in .= "Warte 500\r\n";
//$in .= "SagenachStandby Das ist ein Test\r\n";
//$in .= "SageohneStandby Auch das ist ein Test\r\n";
//$in .= "Sage Das licht ist draußen an wollen sie es ausschalten\r\n";
$in .= "Sage1 Das ist ein Test ganz leise\r\n";
//$in .= "Sage4 Das ist ein Test ziemlich laut\r\n";
//$in .= "Sage Das ist wieder normale Lautstärke\r\n";
//$in .= "Spracheingabe\r\n";
//$in .= "SpracheingabeUndAntwort\r\n";
$in .= "ÖffneUrl http://www.google.at\r\n";
//$in .= "ÖffneUrl skype:thiemo99999?call&amp;video?true\r\n";
$in .= "Tasker Testthiemo\r\n";
//$in .= "Sage Ich starte jetzt die App haussteuerung\r\n";
//$in .= "StarteApp haussteuerung\r\n";
//$in .= "Herunterfahren\r\n";
//$in .= "Restart\r\n";
//$in .= "Sage Ich starte jetzt IP-Symcon\r\n";
//$in .= "StarteAppnachStandby ip-symcon\r\n";
//$in .= "Vibriere 3000\r\n";
//$in .= "PW q3R$z6R StarteWebcam\r\n"; //Beispiel um mit Passwort zu arbeiten
//$in .= "StoppeWebcam\r\n";
 
//ab hier jetzt nichts mehr verändern!!!
$in .= "\r\n";
 
$version = IPS_GetKernelVersion();
if ($version < "4.00") {
 $in = mb_convert_encoding($in, "UTF-8");
}
error_reporting(E_ALL);
 
echo "<h2>TCP/IP-Verbindung</h2>\n";
 
/* Einen TCP/IP-Socket erzeugen. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket == false) {
 echo "socket_create() fehlgeschlagen: Grund: " . socket_strerror(socket_last_error()) . "\n";
 exit;
} else {
 echo "OK.\n";
}
 
echo "Versuche, zu '$address' auf Port '$service_port' zu verbinden ...";
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 3, 'usec' => 0));
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 3, 'usec' => 0));
$result = socket_connect($socket, $address, $service_port);
if ($result == false) {
 echo "socket_connect() fehlgeschlagen.\nGrund: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
 exit;
} else {
 echo "OK.\n";
}
 
$out = '';
 
echo "HTTP request senden ...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
 
echo "Serverantwort lesen:\n";
while ($out = socket_read($socket, 2048)) {
 echo $out;
}
 
echo "\nSocket schließen ...";
socket_close($socket);
echo "OK.\n\n";
 
?> 
Source code