Guten Morgen,
jetz führe ich mein Challenge doch etwas ausführlicher aus.
Es geht um den "Fully Kiosk"-Browser (
https://www.fully-kiosk.com/de)
Dieser lässt sich per REST-Api komplett steuern.
Meine Anforderung im Augenblick ist nur, schalte den Bildschirmschoner aus, wenn sich
jemand dem Display nähert (Bewegungsmelder). Weiter Möglichkeiten
können wir gerne in einem andern Tread besprechen.
D.h. ich nehme ein Switch-Item, welches ich später per Rule
schalten kann.
Nachfolgend ein paar Grundinfos, damit das ganze Thema
verstanden wird.
Mit folgender URL kann der Browser abgefragt werden:
Code: Alles auswählen
http://192.168.20.108.2323/?passwort=MyPassword&type=json&cmd=deviceInfo
Antwort im JSON-Format:
Code: Alles auswählen
{"deviceName":"Tab S7 von MeinTablet","packageName":"de.ozerov.fully","altitude":572.9000244140625,"locationProvide":"network","batteryLevel":14,"isPlugged":false,"SSID":"\"MeineSSID\"","BSSID":"de:21:f9:2e:92:90","Mac":"4A:54:CF:E3:DC:4E","ip4":"192.168.20.108","ip6":"FE80::4854:CFFF:FEE3:DC4E","hostname4":"192.168.20.108","hostname6":"fe80::4854:cfff:fee3:dc4e%wlan0","wifiSignalLevel":9,"isMobileDataEnabled":false,"screenOrientation":90,"screenBrightness":12,"screenLocked":true,"screenOn":false,"batteryTemperature":23,"plugged":false,"keyguardLocked":true,"locale":"de_DE","serial":"unknown","build":"TP1A.220624.014.T870XXU2DWB2","androidVersion":"13","webviewUA":"Mozilla/5.0 (Linux; Android 13; SM-T870 Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/112.0.5615.135 Safari/537.36","foregroundActivity":"com.sec.android.app.launcher/com.android.launcher3.uioverrides.QuickstepLauncher","motionDetectorStatus":2,"isDeviceAdmin":true,"isDeviceOwner":false,"internalStorageFreeSpace":65574977536,"internalStorageTotalSpace":114898726912,"ramUsedMemory":3199524864,"ramFreeMemory":2723545088,"ramTotalMemory":5923069952,"appUsedMemory":9815024,"appFreeMemory":527055888,"appTotalMemory":536870912,"timestamp":1683261711047,"scopedStorage":true,"displayHeightPixels":1600,"displayWidthPixels":2560,"isMenuOpen":false,"topFragmentTag":"","isInDaydream":false,"isRooted":false,"isLicensed":false,"isInScreensaver":false,"kioskLocked":false,"isInForcedSleep":false,"maintenanceMode":false,"kioskMode":false,"startUrl":"http://openhabian:8080/habpanel/#/view/Lichter","currentTabIndex":0,"deviceID":"43de72e9-6186e4d9","locationLatitude":47.6028963,"locationLongitude":9.7989675,"appVersionCode":1161,"appVersionName":"1.50.2-play","androidSdk":33,"deviceModel":"SM-T870","deviceManufacturer":"samsung","foregroundApp":"com.sec.android.app.launcher","currentPage":"http://openhabian:8080/habpanel/#/view/Lichter","lastAppStart":"03.05.23 17:15:43"}
Bildschirmschoner eingeschalten:
Code: Alles auswählen
http://192.168.20.108.2323/?passwort=MyPassword&type=json&cmd=startStreensaver
Bildschirmschoner ausschalten:
Code: Alles auswählen
http://192.168.20.108.2323/?passwort=MyPassword&type=json&cmd=stopStreensaver
Mein Thing inkl. Channel schaut wie folgt aus (gekürzt):
Code: Alles auswählen
ID: http:url:wallpanel
label: Wand Display (Samsung Galaxy S7, Fully Kiosk Browser)
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: true
baseURL: http://192.168.20.108:2323/?password=MyPassword&type=json
delay: 0
stateMethod: GET
refresh: 60
commandMethod: GET
contentType: text/plain
timeout: 3000
bufferSize: 2048
channels:
- id: batteryLevel
channelTypeUID: http:number
label: batteryLevel
description: null
configuration:
stateExtension: "&cmd=deviceInfo"
stateTransformation: JSONPATH:$.batteryLevel
stateContent: "%0f"
- id: isInScreensaver
channelTypeUID: http:switch
label: isInScreensaver
description: null
configuration:
onValue: startScreensaver
stateExtension: "&cmd=deviceInfo"
offValue: stopScreensaver
commandExtension: "&cmd=%2$s"
stateTransformation: JSONPATH:$.isInScreensaver
Soweit die Infos.
Der Bilschirmschoner kann über das Switch-Item ganz
normal ein-/ausgeschaltet werden. Die oben erwähnten URLs
werden zusammengesetzt aus
Code: Alles auswählen
...
baseURL: http://192.168.20.108:2323/?password=MyPassword
...
onValue: startScreensaver
offValue: stopScreensaver
commandExtension: "&cmd=%2$s"
..
Ergebnis:
Code: Alles auswählen
http://192.168.20.108:2323/?password=MeyPassword&cmd=startScreensaver
http://192.168.20.108:2323/?password=MeyPassword&cmd=stopScreensaver
Wird der Switch NICHT benutzt, führt der Thing alle 60 Sekunden
eine Abfrage aus.
Hier im Beispiel wird der Batteriestatus abgefragt. Die
entsprechende URL wird zusammen gesetzt
Code: Alles auswählen
http://192.168.20.108.2323/?passwort=MyPassword&type=json&cmd=deviceInfo
und aus dem zurückgelieferten JSON-String der Wert "batteryLevel" abgefragt
und als nummerischer Wert an das Item geliefert.
Code: Alles auswählen
...
baseURL: http://192.168.20.108:2323/?password=MyPassword
...
stateExtension: "&cmd=deviceInfo"
stateTransformation: JSONPATH:$.batteryLevel
stateContent: "%0f"
..
Und jetzt wird es spannend:
Es geht um die Abfrage für den ScreenSaver (Bilschirmschoner)
Die Anweisung schaut wie im BatterieStatus wie folgt aus
Code: Alles auswählen
...
baseURL: http://192.168.20.108:2323/?password=MyPassword
...
stateExtension: "&cmd=deviceInfo"
stateTransformation: JSONPATH:$.isInScreensaver
..
Nach der "Batterie"-Logik, müsste jetzt "true/false" als
Rückgabe aus der Abfrage kommen. Dieses true/false könnte
in einem ITEM-"transform" in ON/OFF umgewandelt werden.
Der Fehler der hier entsteht ist jedoch, dass im "transform"
Script überhaupt kein Wert ankommt. Gibe ich aus dem
"transform"-Script pauschal "ON" bzw. "OFF" zurück, reagiert
das ITEM entsprechend und ändert seinen Switch-Status.
Nur WIE bekomme ich jetzt praktisch den JSON-Wert
in das "transform"-Script, bzw. wandle das "true/false"
was hoffentlich auch so ankommt in ON/OFF um ?
Man(n) ich hoffe das war verständlich?
Grüße
Torsten