Seite 4 von 5
Re: Wlan Steckdose anbinden?
Verfasst: 3. Apr 2020 23:46
von udo1toni
Es geht ja darum, die passenden Parameter und die korrekten Parameternamen zu finden.
Du akzeptierst die automatisch gefundene Bridge. Anschließend suchst Du Dir die UID der Bridge raus (wird im Klartext angezeigt).
Nun gehst Du zur REST API Dokumentation -> things -> get /things/{ThingUID} und gibst dort die ThingUID ein. sDie API liefert ein JSON zurück, deren Struktur eindeutig genug ist, um die korrekte Struktur für die Textkonfiguration abzuleiten.
Entsprechend gehst Du auch für die anderen Things vor.
Die things-Dateistruktur ist für alle Bindings identisch, lediglich die Parameternamen differieren.
Re: Wlan Steckdose anbinden?
Verfasst: 4. Apr 2020 12:10
von int5749
Danke, das hat so weit geklappt. Extract ist da und nun werde ich mal versuchen dies "umzusortieren", dass es in meine Things Datei passt.
a little bit off-topic: Dabei habe ich gesehen, dass diese things properties haben. Kann ich mir diese auch in der Sitemap anzeigen lassen??
"properties": {
"deviceType": "",
"statsTimeoutsRecovered": "0",
"modelId": "SHPLG-S",
"updateNewVersion": "20200309-104506/v1.6.0@43056d58",
"networkIP": "254.254.254.1",
"statsTimeoutErrors": "0",
"numberMeters": "1",
"devHwRev": "prod-190815",
"serviceName": "shellyplug-s-6a1234",
"numberRollers": "0",
"hardwareBatch": "1",
"wifiNetwork": "WhoamI",
"macAddress": "xxxxxxxxxxxx",
"updateCurrentVersion": "20200309-104506/v1.6.0@43056d58",
"deviceMode": "",
"numberRelays": "1",
"vendor": "Shelly",
"updateStatus": "idle",
"firmwareVersion": "v1.6.0/20200309-104506(43056d58)",
"updateAvailable": "no"
},
z.B: wäre es gut, wenn updateAvailable auf "yes" wechselt, eine Prowl zu versenden

oder das Model mit in der Sitemap anzugeben.

Re: Wlan Steckdose anbinden?
Verfasst: 4. Apr 2020 16:25
von udo1toni
Die Infos sollten zumindest in Paper UI sichtbar sein. Wenn Du das Thing anschaust, sollte es (ich glaube, an der Stelle, wo man Channel verlinken kann) eine Schaltfläche für die Properties geben. Einen direkten Weg, auf einzelne Property-Änderungen zu reagieren, kenne ich aber nicht. Im Zweifel, frag im englischen Forum nach (da tummeln sich eigentlich alle Entwickler).
Re: Wlan Steckdose anbinden?
Verfasst: 5. Apr 2020 10:38
von int5749
Offensichtlich ist das Thema Properties etwas schwieriger und erfordert mehr JSON Kenntnisse, als ich derzeit habe :-/
Zumindest sollte es die Möglichkeit geben, über eine Rule getriggert mit dem htpp Binding einen JSON String einzulesen.
Die Adresse für den String habe ich über die REST API erstellt, derzeit scheitere ich daran diesen in ein String ITem zu schreiben. Dann könnte man/ich schauen, wie dieser JSON zerlegt werden müsste.
Im Nachgang könnten man - meiner Idee nach - zyklisch diesen String updaten und auf Änderungen prüfen. SOmit wäre es keine Live Überwachung, an dieser Stelle aber für mich auch nicht notwendig. On ich nun 1 Std eher oder später weiß, das es ein FW Update gibt ist da nicht so spannend wie wenn das Item eingeschaltet ist

Die anderen Werte wie Name etc. sind ja auch eher statisch.
Falls Du/ihr noch einen Tipp habt, wie ich einen http String der REst API in ein Item bekomme??

Re: Wlan Steckdose anbinden?
Verfasst: 5. Apr 2020 11:05
von peter-pan
Ich weiss zwar nicht genau was du wo suchst(welchen Wert genau in der REST-Api), aber hier mal ein Snippet aus ein Regel von mir, in der ich einen String aus der REST-Api auslese und mir dann per JSON einen bestimmten Wert filtere. Die grundsätzliche Vorgehensweise hat dir weiter oben Udo schon beschrieben.
Code: Alles auswählen
radiator_valve_01.postUpdate((radiator_valve_01_Temp.state as Number).floatValue - Float::parseFloat(transform("JSONPATH", "$.channels[3].configuration.offset", sendHttpGetRequest("http://192.168.x.y:8080/rest/things/avmfritz%3AComet_DECT%3A7490%3A119601003400"))))
Re: Wlan Steckdose anbinden?
Verfasst: 5. Apr 2020 11:42
von peter-pan
Hab grad noch was zum Thing-Trigger in der
Doku gelesen. Vielleicht passt das ja besser, als jede Stunde abzufragen.
Hab's aber selber noch nicht ausprobiert, deshalb wie immer ohne Gewähr

Re: Wlan Steckdose anbinden?
Verfasst: 5. Apr 2020 11:54
von int5749
peter-pan hat geschrieben: ↑5. Apr 2020 11:05
Die grundsätzliche Vorgehensweise hat dir weiter oben Udo schon beschrieben.
JA, da bin ich auch sehr dankbar dafür, so wie für jede Unterstützung, die hier mit Geduld und Nachsicht gepostet wird.
Leider liegt zwischen Erklärung und Verständnis manchmal ein Spalt und manchmal eine Kluft :-/
peter-pan hat geschrieben: ↑5. Apr 2020 11:05
Ich weiss zwar nicht genau was du wo suchst(welchen Wert genau in der REST-Api), aber hier mal ein Snippet aus ein Regel von mir, in der ich einen String aus der REST-Api auslese und mir dann per JSON einen bestimmten Wert filtere.
Ich versuche "lediglich" Werte zu lesen und bekomme Dein Beispiel nicht auf meines adaptiert :-/
Ich habe über die Rest API einen http String für das gewünschte item (hier ein Shelly Plug)
Dies liefert im Browser das gewünschte, komplette thing als JSON
Extrakt:
{
"statusInfo": {
"status": "ONLINE",
"statusDetail": "NONE"
},
"editable": true,
"configuration": {
"eventsCoIoT": false,
"eventsSwitch": true,
"updateInterval": 60,
"eventsButton": false,
"eventsPush": false
},
"properties": {
"deviceType": "",
"statsTimeoutsRecovered": "0",
"modelId": "SHPLG-S",
"vendor": "Shelly",
"updateStatus": "idle",
"updateAvailable": "no"
}
}
Über eine Webseite =>
http://jsonpath.com/ habe ich dann die Abfrage für das gewünschte Property geprüft
$.properties.updateAvailable
liefert =>>> no
Dann habe ich dies zunächst direkt bei dem Item angegeben:
Dies hagelt jedoch Fehlermeldungen
Code: Alles auswählen
11:52:00.555 [ERROR] [del.item.internal.GenericItemProvider] - Binding configuration of type 'http' of item 'ShellyAudioBeamerJson' could not be parsed correctl
y.
org.eclipse.smarthome.model.item.BindingConfigParseException: bindingConfig 'http://meinIP:8080/rest/things/shelly:shellyplugs:69abc3' doesn't represent
a valid in-binding-configuration. A valid configuration is matched by the RegExp '(.*?)(\{.*\})?:(?!//)(\d*):(.*)'
at org.openhab.core.binding.internal.BindingConfigReaderDelegate.processBindingConfiguration(BindingConfigReaderDelegate.java:55) ~[?:?]
at org.eclipse.smarthome.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:369) ~[?:?]
at org.eclipse.smarthome.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:338) ~[?:?]
at org.eclipse.smarthome.model.item.internal.GenericItemProvider.processBindingConfigsFromModel(GenericItemProvider.java:210) ~[?:?]
at org.eclipse.smarthome.model.item.internal.GenericItemProvider.modelChanged(GenericItemProvider.java:404) ~[?:?]
at org.eclipse.smarthome.model.core.internal.ModelRepositoryImpl.notifyListeners(ModelRepositoryImpl.java:311) ~[?:?]
at org.eclipse.smarthome.model.core.internal.ModelRepositoryImpl.addOrRefreshModel(ModelRepositoryImpl.java:149) ~[?:?]
at org.eclipse.smarthome.model.core.internal.folder.FolderObserver.checkFile(FolderObserver.java:247) ~[?:?]
at org.eclipse.smarthome.model.core.internal.folder.FolderObserver.processWatchEvent(FolderObserver.java:310) ~[?:?]
at org.eclipse.smarthome.core.service.WatchQueueReader.lambda$3(WatchQueueReader.java:323) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_171]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_171]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) [?:1.8.0_171]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) [?:1.8.0_171]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_171]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_171]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_171]
......
Natürlich ist meineIP eine korrekte IP
Viele Grüße,
Jörg
Re: Wlan Steckdose anbinden?
Verfasst: 5. Apr 2020 12:09
von peter-pan
Das Snippet von mir ist aus einer Regel. Ich hab das noch nicht direkt mit einem Item in der Form probiert. Mich wundert allerdings, dass sich die Fehlermeldung auf "RegExp" bezieht.
Hast du die JSONPath-Transformation installiert ?
Re: Wlan Steckdose anbinden?
Verfasst: 5. Apr 2020 12:30
von udo1toni
http bietet direkt Unterstützung für JSONPATH. Es erscheint mir nicht sinnvoll, das über ein Profile zu lösen.
In der Adresse sind Doppelpunkte, was zu Problemen führt, da das http Binding den Doppelpunkt auch verwendet, um die einzelnen Parameter voneinander zu trennen. Ohne das jetzt ausprobiert zu haben, denke ich, dass man den Doppelpunkt jeweils mit %3A ersetzen muss, damit die Adresse korrekt verwendet wird.
Es geht ja um ein Firmwareupdate, da sollte es ausreichen, einmal pro Stunde nachzuschauen, ob sich was getan hat. Entsprechend sind das 3600000 Millisekunden. Zum Schluss kommt dann direkt JSONPATH als Transformation.
Das Item sollte also so aussehen:
Code: Alles auswählen
String ShellyAudioBeamerJson "Beamer: [%s]" {http="<[http://meineIP%3A8080/rest/things/shelly%3Ashellyplugs%3A69abc3:3600000:JSONPATH($.properties.updateAvailable)]"}
Falls das nicht funktioniert, musst Du vermutlich einen http cache verwenden, da die Adresse hier allein steht.
Re: Wlan Steckdose anbinden?
Verfasst: 5. Apr 2020 12:30
von int5749
peter-pan hat geschrieben: ↑5. Apr 2020 12:09
Hast du die JSONPath-Transformation installiert ?
Ja, das funktioniert bisher bei anderen transformation auch ohne Prob.