Per Fully Kiosk Browser REST API eine Steckdose fürs Laden eines Tablets schalten

Dieser Post befand sich vorher dort:
https://www.symcon.de/forum/threads/38804-Fehlermeldung-Webfront-mit-Fully-Kiosk-Browser?p=391338#post391338

Um den Drachen nicht zu wecken habe ich alles nach hier in einen eigenen Thread verschoben!

Original:

Hallo alsk1 und prozanko,

das ganze ist recht einfach gestrickt, aber auch schon eine Weile her. Ich hoffe ich vergesse nichts.

Zu meiner Ausstattung:

  • Samsung Galaxy Tab E mit Android 4.4.4 mit fester IP-Adresse, da wir das Tablet später anpollen
  • Fully Kiosk Browser 1.28.1 PLUS Version (also gekaufte Version ca. 5€ damals)
  1. Im Browser von Links nach Rechts wischen um in die Einstellungen zu gelangen
  2. ‚Settings‘ auswählen
  3. ‚Remote Administration‘ auswählen
  4. ‚Enable Remote Administration‘ einschalten
  5. ‚Remote Admin Password‘ festlegen
  6. ‚Remote Admin from Local Network‘ einschalten

Das sollte im Fully Browser reichen.

Ich habe dann noch den Browser so eingestellt, dass er durch die Kamera und das Mikrofon wieder aufwacht.
(Vielleicht nicht jedermanns Sache, aber bei mir steht es an der Haustür und dort finden eher selten sensible Gespräche statt)

Weiter in IPS:

  1. Einbindung im Baum:

Script Inhalt:

<?
//
//	 Funktion:	Steuerung der Ladung eines Webfront Tablets, dass mit 
//							einem 'Fully Kiosk Browser' ausgestattet ist
//
//		History:	26.09.18 gr		erstellt
//

//
// Script ID fuer die Anzeige von Meldungen
//
$tmp_meldungsanzeige_script = 52962;


//
// Die App 'Fully Kiosk Browser' auf dem Tablet bzgl. des Status anfragen
//
$response = Sys_GetURLContent( "http://" . GetValueString( IPS_GetObjectIDByName( "Webfront-Tablet" , $_IPS['SELF'] ) ) . ":2323/?cmd=deviceInfo&password=fkb&type=json" ); 
if( $response === false )
{
	//
	// Meldung auf Meldungsseite
	//
	IPS_RunScriptWaitEx( $tmp_meldungsanzeige_script, array( 'action' => 'add', 'text' => date( "d.m.y G:i:s" ) . ' Das Tablet [' . GetValueString( IPS_GetObjectIDByName( "Webfront-Tablet" , $_IPS['SELF'] ) ) . '] konnte nicht erreicht werden !', 'type' => '2', 'removable' => true ));
	
	IPS_LogMessage( IPS_GetScriptFile( $_IPS['SELF'] ) , "[" . IPS_GetName( $_IPS['SELF'] ) . "] -> " . 'Das Tablet [' . GetValueString( IPS_GetObjectIDByName( "Webfront-Tablet" , $_IPS['SELF'] ) ) . '] konnte nicht erreicht werden !' );	
}
else
{
	//
	// Die Information bzgl. Akkustand aus der Antwort json extrahieren
	//
	$status = json_decode( $response, True );
	
	$ladungszustand = $status["batteryLevel"];
	
	if( $ladungszustand < 30 )
	{
		//
		// Ladegeraet einschalten
		//
		if( HM_WriteValueBoolean( IPS_GetParent( $_IPS['SELF'] ), "STATE", true ) == false )
		{
			IPS_RunScriptWaitEx( $tmp_meldungsanzeige_script, array( 'action' => 'add', 'text' => date( "d.m.y G:i:s" ) . ' Das Ladegerät für das Tablet [' . GetValueString( IPS_GetObjectIDByName( "Webfront-Tablet" , $_IPS['SELF'] ) ) . '] konnte nicht eingeschaltet werden !', 'type' => '2', 'removable' => true ));
		}
	}
	else if( $ladungszustand > 90 )
	{
		//
		// Ladegeraet ausschalten
		//
		if( HM_WriteValueBoolean( IPS_GetParent( $_IPS['SELF'] ), "STATE", false ) == false )
		{
			IPS_RunScriptWaitEx( $tmp_meldungsanzeige_script, array( 'action' => 'add', 'text' => date( "d.m.y G:i:s" ) . ' Das Ladegerät für das Tablet [' . GetValueString( IPS_GetObjectIDByName( "Webfront-Tablet" , $_IPS['SELF'] ) ) . '] konnte nicht ausgeschaltet werden !', 'type' => '2', 'removable' => true ));
		}
	}
}


?>

Natürlich ist in dem Script noch einiges für euch anzupassen. Die Log Meldungen könnt ihr natürlich entfernen oder ersetzen.
Und die Schaltbefehle müssen ganz sicher ersetzt werden. Da kann ich euch kaum helfen. Bei mir ist es ein Homematik Schaltaktor.

Wenn es noch Fragen gibt, dann bitte schön. Ich hoffe ich kann sie beantworten…

Grüße

Gollum

@prozanko fragte noch:

Super, besten Dank! Versuche mich mal die Tage dran Hoffe ich muss im Skript nicht zu viel anpassen, da habe ich leider weniger Ahnung von:/
Eine Frage noch zu IPS: Außer dem Skript benötige ich nur noch den Webfront-Tablet String, oder noch mehr?
Grüße

Den ‚Webfront-Tablet String‘ habe ich nur angelegt damit ich die IP nicht im Script setzen muss, sondern sie im direkt im Baum sehe.
Du kannst sie natürlich auch einfach in das Script schreiben.

Ich versuche mal das Script auf das wesentliche zu reduzieren!

<?
//
//	 Funktion:	Steuerung der Ladung eines Webfront Tablets, dass mit 
//							einem 'Fully Kiosk Browser' ausgestattet ist
//

//
// Die App 'Fully Kiosk Browser' auf dem Tablet bzgl. des Status anfragen
//
$response = Sys_GetURLContent( "http://192.168.x.x:2323/?cmd=deviceInfo&password=fkb&type=json" ); 

//
// Die Information bzgl. Akkustand aus der Antwort json extrahieren
//
$status = json_decode( $response, True );

$ladungszustand = $status["batteryLevel"];

if( $ladungszustand < 30 )
{
	//
	// Ladegeraet einschalten
	//
	HM_WriteValueBoolean( IPS_GetParent( $_IPS['SELF'] ), "STATE", true )
}
else if( $ladungszustand > 90 )
{
	//
	// Ladegeraet ausschalten
	//
	HM_WriteValueBoolean( IPS_GetParent( $_IPS['SELF'] ), "STATE", false )
}



?>

Wenn es weitere Fragen dazu gibt, nur zu…

Gruß

Gollum

Hallo,
habe noch Fragen zu dem Skript:
Muss ich nirgends das Passwort, welches ich im Kiosk Browser eingestellt habe, eingeben?

Ich schalte mit diesem Befehl die Steckdose:
EIB_Switch(41144 /[#HOME\02 Steckdosen\1/2 Steckdosen\HWR EG - IPS Tablet Nische]/, true);
Wie soll ich das in das Skript einfügen?

Beim Ausführen des Skriptes bekomme ich folgende Meldung:
Parse error: syntax error, unexpected ‚}‘ in C:\IP-Symcon\scripts\56164.ips.php on line 25

Sorry wenn die Frage vielleicht banal ist, ich komme mit php aber nicht wirklich klar:/

Grüße

Typischer Fehler, der mir auch immer wieder passiert. In der Zeile 24 und 31 fehlt das Semicolon";"

Besten Dank! Sowas sehe ich halt nicht:/

Trotzdem funktioniert das Skript nicht da ich noch was mit der KNX Variable falsch habe:
Code im Skript:
EIB_Switch( IPS_GetParent( $_IPS[‚SELF‘] ), „STATE“, true );
Rückmeldung IPS:
Warning: Wrong parameter count for EIB_Switch() in C:\IP-Symcon\scripts\56164.ips.php on line 25

Die fehlermeldung sagt doch was falsch ist … die übergibst die falsche Anzahl an parametern. Die Funktion erwartet: Instanz ID und einen Boolean Wert.

Siehe auch: EIB_Switch — IP-Symcon :: Automatisierungssoftware

“state“,

ist also zuviel.

Hallo prozanko,

sorry wegen der fehlenden Semikolons, dass ist durch die Minimierung des Scripts passiert.

Bzgl. des Passworts, die Stelle hast du vielleicht schon gefunden!?

$response = Sys_GetURLContent( "http://192.168.x.x:2323/?cmd=deviceInfo&password=fkb&type=json" ); 

In meinem Beispiel ist fkb das hochsicherheits Passwort :slight_smile:

Grüße

Gollum

Hallo,

wenn ich das Skript starte kommt zumindest keine Fehlermeldung mehr. Das Tablet ist zu 100% voll, das Skript schaltet die Steckdose nicht aus, aber ein wenn diese aus war.

Wenn ich aus:
else if( $ladungszustand < 15 )
{
//
// Ladegeraet ausschalten
//
//HM_WriteValueBoolean( IPS_GetParent( $_IPS[‚SELF‘] ), „STATE“, false );
EIB_Switch( IPS_GetParent( $_IPS[‚SELF‘] ), true );
ein:
EIB_Switch( IPS_GetParent( $_IPS[‚SELF‘] ), false );
mache, geht die Steckdose aus. Das passiert auch unabhängig ob ich das richtige Passwort drin habe oder nicht.
Ist es normal, dass die Zeile mit der Adresse bei mir grau ist? Bei dir sieht es ja etwas anders aus😉

Grüße

…versuch doch mal die Rückgabe des FKB im Code Editor auszugeben um zu sehen was da überhaupt vom Browser zurückkommt.

Etwa in der Art:
print_r( $status );

Diese Zeile fügst du hinter dieser ein:

$status = json_decode( $response, True );

Und betätigst anschließend ‚Ausführen‘ oben rechts auf dem Code Editor.

Dann such mal nach dem Wert von ‚batteryLevel‘.

Also du möchtest das bei einem Ladezustand kleiner 15% die Steckdose eingeschaltet und bei über 90% wieder ausgeschaltet wird.

Dazu wäre der Code.
if( $ladezustand < 15 )
{
EIB_Switch( IPS_GetParent( $_IPS[‚SELF‘] ), true );
}
else if( $ladezustand > 90 )
{
EIB_Switch( IPS_GetParent( $_IPS[‚SELF‘] ), false );
}

Ein weitere Test wäre, wenn du folgende Zeile:

$ladezustand = 10;

vor

if( $ladezustand < 15 )

einbaust und auf ‚Ausführen‘ klickt. Dann muss die Steckdoese eingeschaltet werden.

Und ebenso bei

$ladezustand = 95;

wieder ausgeschaltet werden.

Hallo,

versuche mich jetzt die Tage mal wieder an das Thema dran. Mit folgenden kann ich noch nicht ganz was anfangen:
„versuch doch mal die Rückgabe des FKB im Code Editor auszugeben um zu sehen was da überhaupt vom Browser zurückkommt“
Was genau ist der Code Editor?

Grüße

Hallo prozanko,

ich meinte den Code Editor von IPS, da wo du die Scripte anlegen und bearbeiten kannst.

Den öffnest du z.B per Doppelklick auf ein Script Objekt im Baum.
In diesem Fall das Schaltscript.

Grüsse
Gollum

Meinst du das hier?

…ja fast. Natürlich meinte ich das Script das du selber gepostet hast.

Hinter die Zeile:

//
// Die Information bzgl. Akkustand aus der Antwort json extrahieren
//
$status = json_decode( $response, True );

fügst du:

print_r( $status );

ein und führst dann das Script aus. Den Inhalt des Json Objekts wird dir dann im Ausgabefenster des Editors ausgegeben.

Grüße

Gollum

Ah ok, jetzt weiß ich Bescheid😉
Wo ich jetzt auf dem Schlauch stehe: ich habe das Fenster mit der Skriptausgabe nicht mehr!?! Ich muss es wohl irgendwie deaktiviert haben… Wie kann ich es denn aktivieren? In der webbasierten Verwaltungskonsole habe ich auch kein Skriptausgabefenster.

Übrigens, welches Tablet mit welcher Android Version nutzt du?

Grüße

Also bei mir ist nach dem Öffnen des Script Editors auch kein Bereich für eine Scriptausgabe vorhanden. Sobald ich aber ein Script über ausführen, oben rechts starte, wird im unteren Bereich des Editor ein Bereich abgetrennt und als Ausgabebereich verwendet. (IPS Version 5.1)

Zu deiner zweiten Frage zitiere ich mich aus meinem ersten Post #1, mal selber :slight_smile:

Zu meiner Ausstattung:

  • Samsung Galaxy Tab E mit Android 4.4.4 mit fester IP-Adresse, da wir das Tablet später anpollen
  • Fully Kiosk Browser 1.28.1 PLUS Version (also gekaufte Version ca. 5€ damals)

Grüße

Gollum

Bei mir kommt das Fenster nach der Skriptausführung nicht mehr, egal ob Legacy oder Webkonsole. Neustart des PCs hat auch nicht geholfen, kein Plan was jetzt wieder anders ist?!?

Hast du schon mal ein neueres Tablet mit neuere Android Version getestet? Ich habe das Problem, dass ab Android 5 die Verbindung von Fully immer nach einer gewissen Zeit abbricht:/

Grüße

Wenn das Ausgabefenster offen ist, kann man ein Kontextmenü öffnen.

Siehe:

Vielleicht hast du da mal etwas versehentlich ausgelöst…? Wobei die Frage bliebe, ob das persistent wäre und einen Neustart überlebt. Ich würde denken nein.

Zu deiner zweiten Frage. Nein ich habe es nur mit dem beschriebenen Samsung Tablet ausprobiert. Kann allerdings die Unterbrechungen bzw. Neuverbindungen bestätigen. Ich habe das immer auf die uralte Webviev Version des uralten Androids geschoben. (Es gab entsprechende Meldungen vom FKB) Die Webviev Komponente von Android die zur Anzeige von Browserinhalten benötigt wird, kann in den alten Android Versionen nicht alleine aktualisiert werden. In neueren dagegen schon. Da bleibt wirklich nur ein Neukauf, ohne die Garantie das es dann besser läuft…
Da das Gerät bei mir nicht dauerhaft anzeigt, sondern der Bildschirm nur aufgeweckt wird wenn ich davorstehe oder in die Hände klatsche bekomme ich das nur sehr selten mit. Funktional haben bei mir die Neuverbindungen keine weitere evtl. sogar negativen Auswirkungen.

Da ich zukünftig auch RTSP Streams von Überwachungskameras nutzen möchte muss ich sowieso schauen was dann sein wird. Ob die Leistung des Tablets zur Stream Anzeige im Webfront ausreicht, oder auch ob der Fully Kiosk Browser das problemlos beherrscht.

Fazit: Es gibt immer was zu basteln…

Grüße

Gollum

Ich komme einfach nicht mehr an das Fenster ran:/ Erstelle mal einen neuen Beitrag dafür, sonst komme ich ja nicht weiter…

Zu Android:
Bei mir wird das Tablet durch die Kamera aktiviert, Verbindungsabbrüche habe ich keine. Es funktioniert einwandfrei, bis auf die Performance vom Tablet.
Ich wollte es schon durch ein neues Huawei Tablet ersetzen. Damit hatte ich aber andauernd Probleme mit Verbindungsabbrüchen, sobald das Display es etwas länger inaktiv war. Daraufhin habe ich einen Thread hier und im Android Forum eröffnet und war mit den Fully Entwickler im Kontakt. So richtig zum Endergebnis bin ich aber leider nicht gekommen. Somit bleibt mir keine Wahl als IPS weiterhin mit einem alten Tablet zu nutzen:( Da es bei uns die Steuerungszentrale ist sind die Abbrüche richtig nervig:mad:

Hallo,

das Statusfenster wird nur geöffnet, wenn ein Fehler im Skript vorliegt. Ich habe einen Fehler in das Skript eingebaut damit das Fenster geöffnet wird. Dann wieder Fehler raus und Skript mit der Zeile print_r( $status ); gestartet, da passiert aber nichts.