Fully Kiosk Browser INFO auslesen

Ich habe seit einiger Zeit Fehlermeldungen beim Auslesen von INFO des Fully Kiosk Browser.

17.11.2019, 12:21:01 | ScriptEngine | Result for Event 13368
<br />
<b>Notice</b>: Undefined offset: 1 in <b>C:\IP-Symcon\scripts\25345.ips.php</b> on line <b>25</b><br />
<br />
<b>Notice</b>: Undefined offset: 1 in <b>C:\IP-Symcon\scripts\25345.ips.php</b> on line <b>25</b><br />
<br />

…ca. 3 dutzend mal…

<b>Notice</b>: Undefined offset: 1 in <b>C:\IP-Symcon\scripts\25345.ips.php</b> on line <b>25</b><br />
<br />
<b>Notice</b>: Undefined index: Battery level in <b>C:\IP-Symcon\scripts\25345.ips.php</b> on line <b>41</b><br />
<br />
<b>Notice</b>: Undefined offset: 1 in <b>C:\IP-Symcon\scripts\25345.ips.php</b> on line <b>44</b><br />
<br />
<b>Warning</b>: Cannot auto-convert value for parameter VariableValue in <b>C:\IP-Symcon\scripts\25345.ips.php</b> on line <b>49</b><br />

Das Scribt:

<?
//Fully Kiosk Browser INFO auslesen

$IP="xxx"; //IP-Adresse
$PW="xxx"; //Passwort fully

$homepage = file_get_contents('http://'.$IP.':2323/?password='.$PW); // Fully Device Info Page als HTML einlesen
$Inhalt=explode("<h1>Fully Info</h1>", $homepage); //HTML-Code bei "Fully Info" unterteilen
$Inhalt=$Inhalt[1]; //mit Fully Info-Daten weiter
$Inhalt = explode("
", $Inhalt); //Daten zeilenweise aufteilen
$data=array(); //Daten-Array definieren

foreach($Inhalt as $Zeile) //Zeilenweise abarbeiten
{
    if ($Zeile!=="") //leere Zeilen ignorieren
    {
        $Zeile=str_replace('<tr class="table-row"><td class="table-cell">', '', $Zeile); //bestimmten HTML-Tag löschen
        $Zeile=str_replace('</td><td class="table-cell">', '=>', $Zeile); //bestimmen HTML-Tag löschen/ersetzen
        $Zeile=str_replace('</td></tr>', '', $Zeile); //HTML-Tag löschen
        $Zeile=strip_tags($Zeile); // restlich HTML-Tag löschen

        if ($Zeile!="" and $Zeile!="Device Info") //Daten in Array schreiben
        {
            $Zeile=explode("=>",$Zeile); // Key und Value erzeugen
            $data=array_merge($data, array($Zeile[0] => $Zeile[1])); //neuen Array an Data-Array anhängen !!!ZEILE 25!!!
        }
    }
}
$data2=json_encode($data); //Daten ins JSON-Format konvertieren

SetValue(16661 /*[Kategorielos\Webfront Tablet ansteuern\P9702_Fully Info\JSON]*/, $data2); //Daten in eine Variable schreiben

//===========================================================================================================================
//z.B. AKKUSTAND:
$data=GetValue(16661 /*[Kategorielos\Webfront Tablet ansteuern\P9702_Fully Info\JSON]*/);
$data=json_decode($data, true);

//print_r ($data);
//var_dump($data);

$akku=$data['Battery level'];
$akku=explode("%", $akku);

$power = trim ($akku[1]," ()"); // !!!ZEILE44!!!
echo $power;

$akku=$akku[0];

SetValue(23112 /*[Kategorielos\Webfront Tablet ansteuern\P9702_Fully Info\Akku]*/, $akku);
SetValueString(44793 /*[Kategorielos\Webfront Tablet ansteuern\P9702_Fully Info\Plug]*/, $power);

?>

Ist aus [i]siehe hier[/i]

Es lief mal, aber nun (IPS V5.x) dieser „Undefined offset“. Der Rest werden Folgefehler sein.
Hat jemand einen Tip?

Kenn ich, hier mußt Du das Array anzeigen lassen und dann den Eintrag wie im einfachem Beispiel hier (in die Variable (~HTML)) schreiben.
IP, PortNr und Passwort anpassen
Gruß Helmut

 <? 
$IP="192.168.x.y"; //IP-Adresse 
$PW="xxxx"; //Passwort 

$homepage = file_get_contents("http://".$IP.":PortNr/?password=".$PW); // Fully Device Info Page als HTML einlesen 
$Inhalt=explode("<h1>Fully Info</h1>", $homepage); //HTML-Code bei "Fully Info" unterteilen 

$Inhalt=$Inhalt[1]; //mit Fully Info-Daten weiter 
$Inhalt = explode("
", $Inhalt); //Daten zeilenweise aufteilen 
//print_r($Inhalt);

$Akkuwert = $Inhalt[27];
//echo $Akkuwert;
setvaluestring(ID /*[Full Kiosk Tablett\Zustand Akku]*/, $Akkuwert);

$Helligkeitswert = $Inhalt[28];
//echo $Helligkeitswert;
setvaluestring(ID /*[Full Kiosk Tablett\Helligkeit]*/, $Helligkeitswert);
?> 

Ja, scheint vom gleichen Quellscript zu sein. Erklärt aber noch nicht warum

 $data=array_merge($data, array($Zeile[0] => $Zeile[1])); //neuen Array an Data-Array anhängen !!!ZEILE 25!!!

jetzt Fehler wirft.

Warum das Script jetzt Fehler wirft, muß Dir jemand aus der PHP Ecke erklären, davon habe ich zu wenig, bis keine Ahnung.
Ich war froh, dass ich mir damit geholfen hatte.
Gruß Helmut

Die Fehlermeldung besagt, dass es kein $Zeile[1] gibt. Versuch es mal mit @$Zeile[1]. Dann sollte die Fehlermeldung weg sein.
Viele Grüße
Jürgen

OK die Fehler (Zeile25 und das dutzende mal) werden dann nicht mehr gemeldet. Aber die Weiteren schon (Zeile 41,44,49). Es wäre Blödsinn nun alles mit @ zu unterdrücken. Es scheint sich was im Befehl oder bei den Fully Info Daten geändert zu haben.

Was steht denn genau in $homepage drin?

Hallo Jürgen,
ich poste mal das Array von mir:

Array
(
[0] =>
[1] =>
[2] =>
[3] => Fully Device IDxyz
[4] => Start URLhttp://192.168.x.x:3777#44111 Load it Load other URL
[5] => Current pagehttp://192.168.0.9:3777/#44100 Screenshot Auto play
[6] => Maintenance modeoff Lock for maintenance Show message
[7] => Kiosk modeoff
[8] => Motion detectionon Cam shot
[9] => Acoustic detectionoff
[10] => Movement detectionoff
[11] => Device adminon
[12] => Last App Start19.11.2019 6:30:34 vorm. Restart App
[13] => Active fragmentmain
[14] => Fully version1.35.2 Install APK file
[15] => Webview UAMozilla/5.0 (Linux; Android 5.1.1; KFAUWI Build/L;…
[16] => App Code/Data/Cache?/?/? KB Clear webstorage Clear cache Clear cookies
[17] => App RAM (free/total)87074/98304 KB
[18] =>
[19] => Device Info
[20] =>
[21] => Device NameHelmuts 4. Fire
[22] => Hostnamesoundso
[23] => IP4 Address192.168.2.62
[24] => IP6 Addressxycccc
[25] => Mac Addressa:aa:aa:aa:88:aa
[26] => Wifi SSID"tss"
[27] => Battery level100% (plugged)
[28] => Screen brightness117
[29] => Screen statuson Turn off
[30] => Keyguard lockedoff
[31] => Full wakelockon
[32] => Partial wakelockoff
[33] => Foreground appde.ozerov.fully inactive Get focus
[34] => RAM (free/total)273/890 MB
[35] => Internal Storage (free/total)983/5765 MB Load ZIP file
[36] => Screen1024x600 px
[37] => Android version5.1.1 (SDK 22)
[38] => Webview version70.0.3538.110
[39] => Device TypeKFAUWI (Amazon)
[40] => Serialyxyz
[41] => Android IDxyz
[42] =>
[43] =>
[44] =>
)

Gruß Helmut
PS: Das wäre ein gutes Objekt um die Möglichkeiten der App Fully Kiosk in ein Modul zu packen, leider reicht mein IQ für sowas nicht ;-( , spende aber gerne eine Plus-License für Modul-Macher.

Rest Api Erklärung ist für mich aber schon eine Quelle um mit IP-symcon schicke Sachen zumachen.

In $homepage steht alles mögliche. Daraus wird das Array $Inhalt gebildet (hat Helmut schon gezeigt.)
$data müsste jetzt das Array nochmal aufteilen. Z.B. [28] => Screen brightness117 in [Screen brightness] => 117
Und da muss sich was geändert haben.

Hallo Ihr beiden,

wenn das im Array das aktuelle Format ist, dann kann das Skript oben nicht mehr funktionieren. Im Skript wird nach „=>“ als Trennzeichen gesucht. Das gibt es aber nicht. Auch sonst ist kein gemeinsames Trennzeichen mehr zu erkennen, so dass es nur mit ein bisschen Gefrickel funktioniert. Wie lange so ein Gefrickel dann Bestand hat, ist fraglich.

Ggf. schickt Ihr mir mal den Inhalt von $homepage per PN und dazu eine Liste der Daten, die Ihr braucht. Dann gucke ich mal, was ich machen kann.

Viele Grüße
Jürgen

Hallo Jürgen, wenn Du ein Android Tablet hast, lade Dir die Fully Kios App mal runter und nutze einfach mein Script von #2 , nur die IP anpassen müßte reichen, das Standart Passwort ist 1234.

Per PN was schicken ist zu lang, wird angemeckert, meine MailADR ist in meinem WWW wenn Du 's brauchst.
Gruß Helmut

Ich wusste auch nicht wie man den Inhalt von $homepage am besten versendet.
Aber ich habe den Fehler gefunden. Fully (oder PHP?) hat einige " in ’ geändert. Also zB „table-row“ in ‚table-row‘

In Helmut’s Beispielscript fehlt noch einiges. Da kann man zB. den Batterylevel nicht so ohne weiteres in eine Variable schreiben. Daher hier noch mal alles lauffähig:

<?php

//Fully Kiosk Browser INFO auslesen

$IP="xxx"; //IP-Adresse
$PW="xxx"; //Passwort fully

$homepage = file_get_contents('http://'.$IP.':2323/?password='.$PW); // Fully Device Info Page als HTML einlesen
$Inhalt=explode("<h1>Fully Info</h1>", $homepage); //HTML-Code bei "Fully Info" unterteilen
$Inhalt=$Inhalt[1]; //mit Fully Info-Daten weiter
$Inhalt = explode("
", $Inhalt); //Daten zeilenweise aufteilen
//print_r($Inhalt);
$data=array(); //Daten-Array definieren

foreach($Inhalt as $Zeile) //Zeilenweise abarbeiten
{
    if ($Zeile!=="") //leere Zeilen ignorieren
    {
        $Zeile=str_replace("<tr class='table-row'><td class='table-cell'>", '', $Zeile); //bestimmten HTML-Tag löschen
        $Zeile=str_replace("</td><td class='table-cell'>", '=>', $Zeile); //bestimmen HTML-Tag löschen/ersetzen
        $Zeile=str_replace('</td></tr>', '', $Zeile); //HTML-Tag löschen
        $Zeile=strip_tags($Zeile); // restlich HTML-Tag löschen

        if ($Zeile!="" and $Zeile!="Device Info") //Daten in Array schreiben
        {
            $Zeile=explode("=>",$Zeile); // Key und Value erzeugen
            $data=array_merge($data, array($Zeile[0] => $Zeile[1])); //neuen Array an Data-Array anhängen
        }
    }
}
$data2=json_encode($data); //Daten ins JSON-Format konvertieren

SetValue(16661 /*[Kategorielos\Webfront Tablet ansteuern\P9702_Fully Info\JSON]*/, $data2); //Daten in eine Variable schreiben

//===========================================================================================================================
//z.B. AKKUSTAND:
$data=GetValue(16661 /*[Kategorielos\Webfront Tablet ansteuern\P9702_Fully Info\JSON]*/);
$data=json_decode($data, true);

//print_r ($data);
//var_dump($data);

$akku=$data['Battery level'];
$akku=explode("%", $akku);

$power = trim ($akku[1]," ()");
echo $power;

$akku=$akku[0];

SetValue(23112 /*[Kategorielos\Webfront Tablet ansteuern\P9702_Fully Info\Akku]*/, $akku);
SetValueString(44793 /*[Kategorielos\Webfront Tablet ansteuern\P9702_Fully Info\Plug]*/, $power);

PS: ob „xx“ oder ‚xx‘ da komme ich immer durcheinander. Gibt es dazu eigentlich eine Regel?

Leider wirft das Skript wieder einige Fehler. Bei Fully wurde vor einiger Zeit wohl wieder etwas geändert. Wie ich das bisher sehe gibt es schon die Sequenz Fully Info nicht.

Hat schon jemand heraus gefunden was geändert werden muss?

Ich beantworte die Anfrage mal selber.

Den Text „Fully Info“ gibt es nicht mehr. Wenn man stattdessen nach App Info suchen lässt läuft das Skript wieder. Also Zeile 10 in

$Inhalt=explode("<h1>App Info</h1>", $homepage); //HTML-Code bei "App Info" unterteilen

ändern.