JSONPATH:$.rueckgabe in ON/OFF umwandeln (Thing/Channel)
- TorstenE
- Beiträge: 246
- Registriert: 12. Jan 2022 18:29
- Wohnort: Niederstaufen
JSONPATH:$.rueckgabe in ON/OFF umwandeln (Thing/Channel)
Hallo Mitstreiter,
ich erhalte in einem Channel die Antwort aus einem HTTP-Request als "true/false" Wert.
Wie kann ich dies in ON/OFF umwandeln, damit ein "switch"-Item damit etwas anfangen kann?
Bitte nicht mit "onValue" und "offValue" verwechseln, diese dienen zum SENDEN.
Danke
Torsten
ich erhalte in einem Channel die Antwort aus einem HTTP-Request als "true/false" Wert.
Wie kann ich dies in ON/OFF umwandeln, damit ein "switch"-Item damit etwas anfangen kann?
Bitte nicht mit "onValue" und "offValue" verwechseln, diese dienen zum SENDEN.
Danke
Torsten
Der Schlüssel dabei ist immer: Wenn Du einen Channel in beiden Richtungen verwenden willst, müssen Input und Output identisch sein.
Das wird hier nicht ganz einfach werden. Einfacher wäre es, zwei getrennte Channel zu konfigurieren, die jeweils unidirektional arbeiten.
Du kannst einfach beide Channel mit dem selben Switch Item verlinken, ein gesendeter Befehl geht dann über isOutScreensaver, ein Statusupdate kommt über isInScreensaver als Status (nicht als Command...)
Eine weitere Möglichkeit wäre, einen Channel für die ankommende Richtung zu definieren, und zwar als string Channel ohne stateTransformation. Diue Transformation kann dann direkt im Link passieren und Du brauchst nur einen einzigen Input Channel.
Gehe zur vollständigen AntwortDas wird hier nicht ganz einfach werden. Einfacher wäre es, zwei getrennte Channel zu konfigurieren, die jeweils unidirektional arbeiten.
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: isOutScreensaver
channelTypeUID: http:switch
label: isOutScreensaver
description: null
configuration:
onValue: startScreensaver
offValue: stopScreensaver
commandExtension: "&cmd=%2$s"
- id: isInScreensaver
channelTypeUID: http:switch
label: isInScreensaver
description: null
configuration:
onValue: true
stateExtension: "&cmd=deviceInfo"
offValue: false
stateTransformation: JSONPATH:$.isInScreensaver
Eine weitere Möglichkeit wäre, einen Channel für die ankommende Richtung zu definieren, und zwar als string Channel ohne stateTransformation. Diue Transformation kann dann direkt im Link passieren und Du brauchst nur einen einzigen Input Channel.
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian
- TorstenE
- Beiträge: 246
- Registriert: 12. Jan 2022 18:29
- Wohnort: Niederstaufen
Re: JSONPATH:$.rueckgabe in ON/OFF umwandeln (Thing/Channel)
Im Prinzip suche ich praktisch so etwas:
Code: Alles auswählen
stateTransformation: if (JSONPATH:$.isInScreensaver) ? ON : OFF
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: JSONPATH:$.rueckgabe in ON/OFF umwandeln (Thing/Channel)
Nein, da hast Du was missverstanden.
onValue und offValue sind für beide Richtungen.
onValue und offValue sind für beide Richtungen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
- TorstenE
- Beiträge: 246
- Registriert: 12. Jan 2022 18:29
- Wohnort: Niederstaufen
Re: JSONPATH:$.rueckgabe in ON/OFF umwandeln (Thing/Channel)
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:
Antwort im JSON-Format:
Bildschirmschoner eingeschalten:
Bildschirmschoner ausschalten:
Mein Thing inkl. Channel schaut wie folgt aus (gekürzt):
Soweit die Infos.
Der Bilschirmschoner kann über das Switch-Item ganz
normal ein-/ausgeschaltet werden. Die oben erwähnten URLs
werden zusammengesetzt aus
Ergebnis:
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
und aus dem zurückgelieferten JSON-String der Wert "batteryLevel" abgefragt
und als nummerischer Wert an das Item geliefert.
Und jetzt wird es spannend:
Es geht um die Abfrage für den ScreenSaver (Bilschirmschoner)
Die Anweisung schaut wie im BatterieStatus wie folgt aus
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
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
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
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
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"
..
Code: Alles auswählen
http://192.168.20.108:2323/?password=MeyPassword&cmd=startScreensaver
http://192.168.20.108:2323/?password=MeyPassword&cmd=stopScreensaver
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 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"
..
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
..
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
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: JSONPATH:$.rueckgabe in ON/OFF umwandeln (Thing/Channel)
Der Schlüssel dabei ist immer: Wenn Du einen Channel in beiden Richtungen verwenden willst, müssen Input und Output identisch sein.
Das wird hier nicht ganz einfach werden. Einfacher wäre es, zwei getrennte Channel zu konfigurieren, die jeweils unidirektional arbeiten.
Du kannst einfach beide Channel mit dem selben Switch Item verlinken, ein gesendeter Befehl geht dann über isOutScreensaver, ein Statusupdate kommt über isInScreensaver als Status (nicht als Command...)
Eine weitere Möglichkeit wäre, einen Channel für die ankommende Richtung zu definieren, und zwar als string Channel ohne stateTransformation. Diue Transformation kann dann direkt im Link passieren und Du brauchst nur einen einzigen Input Channel.
Das wird hier nicht ganz einfach werden. Einfacher wäre es, zwei getrennte Channel zu konfigurieren, die jeweils unidirektional arbeiten.
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: isOutScreensaver
channelTypeUID: http:switch
label: isOutScreensaver
description: null
configuration:
onValue: startScreensaver
offValue: stopScreensaver
commandExtension: "&cmd=%2$s"
- id: isInScreensaver
channelTypeUID: http:switch
label: isInScreensaver
description: null
configuration:
onValue: true
stateExtension: "&cmd=deviceInfo"
offValue: false
stateTransformation: JSONPATH:$.isInScreensaver
Eine weitere Möglichkeit wäre, einen Channel für die ankommende Richtung zu definieren, und zwar als string Channel ohne stateTransformation. Diue Transformation kann dann direkt im Link passieren und Du brauchst nur einen einzigen Input Channel.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
- TorstenE
- Beiträge: 246
- Registriert: 12. Jan 2022 18:29
- Wohnort: Niederstaufen
Re: JSONPATH:$.rueckgabe in ON/OFF umwandeln (Thing/Channel)
Woooooowwwwww... was soll ich lagen - KLASSE.
Das mit den beiden Channel ist super. Ich wusste nicht, dass ich 2 Channel auf ein Item verlinken kann.
Das Schöne an dieser Lösung ist, dass alles in den Things eingestellt ist und somit schön übersichtlich.
Ich hatte es in der Zwischenzeit mit einem Switch-Channel und einem String-Channel und dazwischen
mit zwei Rules zusammen gefummelt. Aber das hier ist einfach spitze.
Das mit den beiden Channel ist super. Ich wusste nicht, dass ich 2 Channel auf ein Item verlinken kann.
Das Schöne an dieser Lösung ist, dass alles in den Things eingestellt ist und somit schön übersichtlich.
Ich hatte es in der Zwischenzeit mit einem Switch-Channel und einem String-Channel und dazwischen
mit zwei Rules zusammen gefummelt. Aber das hier ist einfach spitze.
openHAB 5.0.0 (#4495) auf einem Pi 4 mit openHABian
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: JSONPATH:$.rueckgabe in ON/OFF umwandeln (Thing/Channel)

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet