http Binding und Abfrage einer URL unter openHAB 4

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

oliverbaush
Beiträge: 23
Registriert: 4. Jan 2022 23:01
Answers: 0
Wohnort: Aschaffenburg

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von oliverbaush »

Moin zusammen,

ich bin immer wieder begeistert von eurem Support!

@peter-pan mit dem Ansatz komme ich zum gewünschten Ergebnis. Eine Frage zu

Code: Alles auswählen

  baseURL: https://api.eiswarnung.de?key=<KEY>&lat=<GPS_LAT>&lng=<GPS_LNG>
-> sind die spitzen Klammern Platzhalter für die tatsächlichen Parameter oder handelt es sich um Variablen? Ich hab einfach die tatsächlichen Werte eingetragen.

@udo1toni ich hab die Scale Transformation installiert um es zu probieren und die Anpassungen vorgenommen (Item per textual angelegt, Transformation über UI angelegt. Als label hab ich in der UI eis.scale genommen.
Nach einem Neustart des Things kommt folgende Meldung im Log

Code: Alles auswählen

2024-03-08 20:20:58.203 [WARN ] [.profiles.ScaleTransformationProfile] - Could not transform state '0' with function 'eis.scale' and format '%s'
Der Switch wurde zum testen vorher auf ON gesetzt und hat sich nach dem Neustart nicht geändert. Es kommt die gleiche Fehlermeldung :-( Hab ich da was übersehen?

Das Ziel am Ende ist dann über eine Rule eine Nachricht zu verschicken, wenn gekratzt werden soll. Wenn die Pflicht erfüllt ist, kann ich nach genaueren Methoden ausschau halten ;-)
Zuletzt geändert von oliverbaush am 8. Mär 2024 21:34, insgesamt 1-mal geändert.
openHAB4.1.2, installiert unter openhabian

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von peter-pan »

oliverbaush hat geschrieben: 8. Mär 2024 20:56 -> sind die spitzen Klammern Platzhalter für die tatsächlichen Parameter oder handelt es sich um Variablen? Ich hab einfach die tatsächlichen Werte eingetragen.
Du hast das schon richtig gemacht. Das sind die Platzhalter um zu signalisieren, dass hier Parameter eingesetzt werden sollen.

Wenn du die Scale von Udo nochmal genau anschaust, wirst du feststellen, dass du in der zweiten Zeile eine "geöffnete eckigen Klammer" stehen hast. Udo hat hier aber eine "geschlossene eckige Klammer, so :

Code: Alles auswählen

[..0]=OFF
]0..]=ON
;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

oliverbaush
Beiträge: 23
Registriert: 4. Jan 2022 23:01
Answers: 0
Wohnort: Aschaffenburg

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von oliverbaush »

sorry, mein Fehler. Hab es grad nachgelesen, dass es so gedacht war. Um niemanden zu verwirren, hab ich den falschen Text gelöscht ;)

UPDATE: die Fehlermeldung ist verschwunden (und der Switch wurde mit dem richtigen Status atualisiert. Im Channel vom Switch wurde das Profil von SCALE auf STANDARD geändert.
openHAB4.1.2, installiert unter openhabian

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von peter-pan »

oliverbaush hat geschrieben: 8. Mär 2024 20:56 Das Ziel am Ende ist dann über eine Rule eine Nachricht zu verschicken, wenn gekratzt werden soll. Wenn die Pflicht erfüllt ist, kann ich nach genaueren Methoden ausschau halten ;-)
Hier eine kleine Rule mit der du dir evtl. ein e-mail senden kannst. (der e-mail-versand ist momentan auskommentiert)

Code: Alles auswählen

rule "Eisberge in Sicht"
 when 
    Item forecastId changed 
 then
    if (forecastId.state >= 1) {
//        val mailActions = getActions("mail","mail:smtp:tonline-smtp")
//        mailActions.sendMail("franz.kanns@t-online.de", "Eiswarnung", "Es ist Kratzen angesagt")
        logInfo("Eis", "Kratzen ist angesagt {}", forecastText.state.toString)
    }
end
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

oliverbaush
Beiträge: 23
Registriert: 4. Jan 2022 23:01
Answers: 0
Wohnort: Aschaffenburg

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von oliverbaush »

Danke, wir haben eine Telegram Gruppe gebaut, die die "relevanten" Nachrichten bekommt. Damit bekommt meine Frau auch die Infos (für sie wird der Eiskratzwarner erstellt) Da hätte ich 2x geprüft und bei Bedarf eine Message geschickt/bzw gelogged:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "2"
    configuration:
      time: 18:00
    type: timer.TimeOfDayTrigger
  - id: "3"
    configuration:
      time: 20:00
    type: timer.TimeOfDayTrigger
conditions: []
actions:
  - inputs: {}
    id: "1"
    configuration:
      type: application/javascript
      script: >
        var logger  =
        Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' +
        ctx.ruleUID);

        var things = Java.type('org.openhab.core.model.script.actions.Things');



        if (items.getItem('EisWarnung_SwitchItem').state == 'ON') {
          things.getActions('telegram', 'telegram:telegramBot:XYZ70b110').sendTelegram('Auto muss abgedeckt werden, ansonsten: kratzen');
          logger.info("Eiskratzwarnung an Telegram geschickt");
        }
    type: script.ScriptAction
openHAB4.1.2, installiert unter openhabian

Benutzeravatar
udo1toni
Beiträge: 13984
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von udo1toni »

oliverbaush hat geschrieben: 8. Mär 2024 21:35 sorry, mein Fehler. Hab es grad nachgelesen, dass es so gedacht war. Um niemanden zu verwirren, hab ich den falschen Text gelöscht ;)
Ich hätte das vielleicht noch etwas ausführen sollen :)
Die Klammern zeigen an, ob der angegebene Wert mit zum Wertebereich gehört. Die Punkte sind quasi das "bis" Symbol, links steht der niedrige Wert, rechts steht der hohe Wert. Fehlt der Wert, so ist die entsprechende Seite "offen", also alle nachfolgenden Werte sind mit eingeschlossen. Entsprechend ist die Klammer in diesem Fall immer nach innen gerichtet.

Code: Alles auswählen

[..]     -> alle Werte (sinnlos, aber zum Erklären hier gut)
[..3]    -> alle Werte kleiner oder gleich 3
[..3[    -> alle Werte kleiner 3
]3..]    -> alle Werte größer 3
[3..]    -> alle Werte größer oder gleich 3
[4..47]  -> alle Wert zwischen 4 und 47 (einschließlich der beiden Grenzwerte)
]5..13[  -> alle Werte zwischen 5 und 13 (ohne die beiden Grenzwerte)
[17..22[ -> alle Werte zwischen 17 und 22 (mit der 17, aber ohne die 22)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

EnergieAndi
Beiträge: 3
Registriert: 5. Apr 2024 07:03
Answers: 0

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von EnergieAndi »

Guten Morgen in die Runde,
ich brache Euere Hilfe, um einen Schalter ans Laufen zu bekommen. Ich setze Openhab 4 ein, nutzt die UI zum Konfigurieren und möchte Schaltzustände aus einem Regler auslesen.

Code: Alles auswählen

UID: http:url:REGLER__TWE_W_STATI
label: Regler TWE HTTP URL Thing
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://172.16.30.21/json.html?FN=Read&ID=PULAPUFG&ID=TLKPUFG&ID=ZPUFG
  password: ccccc
  delay: 0
  stateMethod: GET
  refresh: 5
  commandMethod: GET
  timeout: 3000
  username: XXXX
  bufferSize: 2048
channels:
  - id: TWE_W_Schaltsignale
    channelTypeUID: http:switch
    label: Schaltsignale
    description: ""
    configuration:
      onValue: "true"
      mode: READONLY
      offValue: "false"
  - id: String-Channel
    channelTypeUID: http:string
    label: String Channel
    description: ""
    configuration: {}
Folgenden Json-String bekomme ich zurück:
[{"id":"PULAPUFG","state":0,"value":false,"type":4,"rep":3,"descr":"Off*On*Auto"},{"id":"TLKPUFG","state":0,"value":true,"type":4,"rep":3,"descr":"Off*On*Auto"},{"id":"ZPUFG","state":0,"value":true,"type":4,"rep":3,"descr":"Off*On*Auto"}]

Im String-Kanal habe ich ein Item mit folgender JSONPATH-Einstellung angelegt: $.[?(@.id == 'ZPUFG')].value
Damit bekomme ich die Zustände als true oder false angezeigt.
Nun möchte ich das aber auf den Schalter übertragen, doch der zeigt immer nur NULL an.

Ich glaube, ich mache hier grundsätzlich etwas falsch. Könnt Ihr mir helfen?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 13984
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von udo1toni »

So wie Du es beschreibst, nehme ich an, Du hast JSONPath im Profile des Links eingetragen. Das ist in diesem Fall die falsche Stelle. Lege stattdessen einen eigenen switch Channel an:

Code: Alles auswählen

UID: http:url:REGLER__TWE_W_STATI
label: Regler TWE HTTP URL Thing
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://172.16.30.21/json.html?FN=Read&ID=PULAPUFG&ID=TLKPUFG&ID=ZPUFG
  password: ccccc
  delay: 0
  stateMethod: GET
  refresh: 5
  commandMethod: GET
  timeout: 3000
  username: XXXX
  bufferSize: 2048
channels:
  - id: ZPUFG
    channelTypeUID: http:switch
    label: Schaltzustand ZPUFG_Val
    description: ""
    configuration:
      stateTransformation: JSONPATH:$.[?(@.id == 'ZPUFG')].value
      onValue: "true"
      mode: READONLY
      offValue: "false"
  - id: String-Channel
    channelTypeUID: http:string
    label: String Channel
    description: ""
    configuration: {}
Und nun verknüpfst Du den Channel ZPUFG_Val direkt mit dem Switch Item, mit dem Standard Profile-
Erklärung: onValue und offValue sind die diskreten Werte, die auf ON bzw. OFF gemappt werden. Da Du aber ein komplettes JSON Objekt als Input hast, kommen diese Werte niemals so im Channel an.

Und weil ich Korinthenkacker bin ;) Die Mehrzahl von Status ist: Status. Streng genommen ist das u beim ersten kurz, beim zweiten lang, auf dem Papier gibt es da aber keinen Unterschied.
Ich habe 20 Jahre gebraucht, um das an meinem Arbeitsplatz gegenüber den Programmierern einer speziellen Anwendung durchzudrücken, gemeinsam mit buchstäblich hunderten KollegInnen, welche alle mehr oder weniger professionell in der deutschen Sprache unterwegs sind... deshalb bin ich da... etwas... sensibel...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von peter-pan »

Hast du es schon mal so probiert ?
$.[2].value
Der Yaml-Code für den Channel könnte dann evtl. so aussehen

Code: Alles auswählen

  - id: ZPUFG_val
    channelTypeUID: http:string
    label: Schaltzustand ZPUFG_Val
    description: null
    configuration:
      mode: READWRITE
      stateTransformation: JSONPATH:$.[2].value
      escapedUrl: false
Hab's aber nicht getestet ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Benutzeravatar
udo1toni
Beiträge: 13984
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: http Binding und Abfrage einer URL unter openHAB 4

Beitrag von udo1toni »

Ja, aber nein. Der JSONPath Ausdruck ist schon der korrekte.

Grundsätzlich sollte man sich niemals darauf verlassen, dass Arrays immer in der gleichen Reihenfolge gefüllt werden. Der Ausdruck

Code: Alles auswählen

[?(@.id == 'ZPUFG')]
bedeutet: Nimm den Knoten, in dessen Unterelementen das Feld id den Wert ZPUFG hat.
Damit ist der Knoten eindeutig selektiert, während die [2] nur sagt: nimm den dritten Knoten.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten