Seite 1 von 1

[Problem] Übergabe von JSON an Openhab

Verfasst: 29. Mär 2021 09:41
von F_self
Guten Morgen,
Ich habe die Tage angefangen mal meine Wohnung etwas smarter zu gestalten. Dafür habe ich mir im Angebot einige Eqiva Bluetooth Thermostate gekauft. Nun wollte ich Openhab 3 nutzen um diese zu visualisieren. Dafür habe ich die Anleitung von https://www.boringhome.de/eqiva-thermostat-openhab/ verwendet. Dies funktioniert bis zu dem Punkt wo ich die items, http.cfg und sitemap anlege. Die JSON wird kreiert und auf diese kann ich auch zugreifen.
json.png
Jedoch wird dies leider nicht korrekt in mein BasicUI überführt.
basicUI.png
Der Inhalt meiner thermostat.items sieht folgendermaßen aus:

Code: Alles auswählen

Number thermostat_wz "Thermostat Wohnzimmer [%.1f °C]" <temperature> { http=">[*:GET:http://openhabian/eq3.php?mac=XX-XX-XX-XX-XX-XX&temperature=%2$s{Authorization=Basic SECRET}] <[thermostatWohnzimmer:600000:JSONPATH($.temperature)]" }
Switch thermostat_wz_mode "Thermostat Auto [%s]" { http=">[*:GET:http://openhabian/eq3.php?mac=XX-XX-XX-XX-XX-XX&mode=%2$s{Authorization=Basic SECRET}] <[thermostatWohnzimmer:600000:JSONPATH($.mode.auto)]" }
Switch thermostat_wz_boost "Thermostat Boost [%s]" { http=">[*:GET:http://openhabian/eq3.php?mac=XX-XX-XX-XX-XX-XX&boost=%2$s{Authorization=Basic SECRET}] <[thermostatWohnzimmer:120000:JSONPATH($.mode.boost)]" }
Number thermostat_wz_valve "Thermostat Ventil [%.1f]"  { http="<[thermostatWohnzimmer:600000:JSONPATH($.valve)]"}
Der Inhalt der http.cfg sieht folgendermaßen aus:

Code: Alles auswählen

thermostatWohnzimmer.url=http://openhabian/eq3.php?mac=XX-XX-XX-XX-XX-XX{Authorization=BasicSECRET}
thermostatWohnzimmer.updateInterval=120000
Die MAC Adressen habe ich unkenntlich gemacht. Weiß jemand wo mein Problem ist? Ich komme leider beim besten Willen nicht darauf was ich falsch gemacht habe.

Gruß Frederick

Re: [Problem] Übergabe von JSON an Openhab

Verfasst: 29. Mär 2021 20:02
von udo1toni
Es geht mal damit los, dass die Anleitung für openHAB1 und openHAB2 gültig ist, aber keinesfalls für openHAB3.
In openHAB3 gibt es auschließlich Bindings, welche zwingend über Things konfiguriert werden. Konfigurationsdateien im Verzeichnis ./openhab/services/ gibt es nicht mehr (bezogen auf die Bindings natürlich, andere Konfigurationsdateien gibt es in diesem Verzeichnis durchaus).

Du musst also ein http Thing anlegen (als Anfänger am besten über die Main UI). Zum reinen Auslesen reicht es, die komplette URL als Base URL im Thing einzutragen. Anschließend (nachem das Thing angelegt wurde) kannst Du im Thing Channel definieren. Da du mit JSON arbeitest, gibt es zwei Möglichkeiten. Zum einen kannst Du für jeden auszulesenden Wert einen eigenen Channel anlegen und dort jeweils den JSONPATH Ausdruck als Transformation eintragen.
Du kannst aber auch nur einen (String) Channel ohne Transformation anlegen, in dem das gesamte JSON Objekt gespeichert wird. Dann verlinkst Du die verschiedenen Items (Typ Number, Switch usw.) und trägst jeweils den passenden JSONPATH Ausdruck als Profile ein. Beide Wege sind valide.

Re: [Problem] Übergabe von JSON an Openhab

Verfasst: 21. Mär 2022 21:45
von wats92
Hallo zusammen,
auch ich bin neu im Bereich Openhab und wurschtel mich so durch.
Auch ich hab ein eq3-Thermostat und versuche es in Openhab3 einzubinden.

Ich bin mittlerweile an dem Punkt, dass mir meine UI zumindest den aktuellen Wert, der eingestellt ist ausgibt, sprich "lesen" funktioniert.
Leider komme ich beim schreiben nicht weiter, damit ich über OH3 die Temperatur einstellen kann.

Hat hier vielleicht jemand ein Tipp für mich?

Besten Dank!

Re: [Problem] Übergabe von JSON an Openhab

Verfasst: 22. Mär 2022 14:04
von udo1toni
Willkommen im Forum!

Wie sieht denn Deine Konfiguration bis jetzt aus? Es gibt da einen Code-Reiter in der Konfiguration, rechts neben den Channels, diesen Code kannst Du hier als Code markiert einfügen. Falls Passworte oder Tokens zur Konfiguration gehören, kannst Du die auch gerne unkenntlich machen :)

Wie sieht das Datenformat aus, welches Du zur Steuerung benötigst?

Re: [Problem] Übergabe von JSON an Openhab

Verfasst: 23. Mär 2022 14:34
von wats92
Hallo Udo,

mein Code in OH sind wie folgt aus:

Code: Alles auswählen

UID: http:url:wthermosthat
label: Thermostat_W_HTTP
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://192.168.178.64/eq3.php?mac=00-1A-22-0C-F9-7C
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: PUT
  contentType: application/json
  timeout: 300000
  bufferSize: 2048
location: Wohnzimmer
channels:
  - id: thermostat_wz
    channelTypeUID: http:number
    label: Wohnzimmerthermostat
    description: ""
    configuration:
      mode: READWRITE
      stateTransformation: JSONPATH:$.temperature
      command: temperature=%2$
und die URL sieht so aus:
http://192.168.178.64/eq3.php?mac=00-1A-22-0C-F9-7C

Code: Alles auswählen

{
  "mac" : "00:1A:22:0C:F9:7C",
  "temperature" : 21.0,
  "valve" : 0,
  "mode" : {
    "auto" : "ON",
    "manual" : "OFF",
    "low battery" : "OFF",
    "open window" : "OFF",
    "vacation" : "OFF",
    "locked" : "OFF",
    "boost" : "OFF",
    "unknown" : "OFF",
    "dst" : "ON",
    "on" : "OFF",
    "off" : "OFF"
  },
  "vacation" : null
}
Steuern über verlängern der URL zu bspw. umstellen auf 21°C über den Weg:
http://192.168.178.64/eq3.php?mac=00-1A ... erature=21

funktioniert

weiter bin ich bisher leider nicht gekommen

Re: [Problem] Übergabe von JSON an Openhab

Verfasst: 23. Mär 2022 20:23
von udo1toni
Das sieht ja schon ganz gut aus.

Du musst in der Channel Konfiguration auf Show Advanced klicken (Innerhalb der Konfiguration rechts oben), dann bekommst Du zusätzliche Parameter angeboten. Du brauchst die Command URL Extension, die Du auf &temperature=%2$s setzen musst. Die BASE-URL setzt openHAB automatisch davor. Das %2$s ist der Wert, der vom Item an den Channel gesendet wird.

Re: [Problem] Übergabe von JSON an Openhab

Verfasst: 23. Mär 2022 21:01
von wats92
hab ich gemacht wie beschrieben, leider klappt es immernoch nicht. kann der Fehler auch beim Item sein? ich hab als Steuerelement Setpoint genommen:

Sitemap:

Code: Alles auswählen

sitemap HoheLinde3 label="Wohnung" {
    Setpoint item=HTTPwthermostat_Wohnzimmerthermostat label="Thermostat [%.1f °C]" maxValue=30 minValue=14.5 step=0.5
}
thing:

Code: Alles auswählen

UID: http:url:wthermosthat
label: Thermostat_Wohnzimmer
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://192.168.178.64/eq3.php?mac=00-1A-22-0C-F9-7C
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: PUT
  contentType: application/json
  timeout: 300000
  bufferSize: 2048
location: Wohnzimmer
channels:
  - id: thermostat_wz
    channelTypeUID: http:number
    label: Wohnzimmerthermostat
    description: ""
    configuration:
      mode: READWRITE
      stateTransformation: JSONPATH:$.temperature
      commandExtension: "&temperature=%2$"
      command: temperature=%2$
sorry für evtl "dumme" "einfache" Fehler

Re: [Problem] Übergabe von JSON an Openhab

Verfasst: 23. Mär 2022 21:12
von udo1toni
Ups, da hab ich ein s unterschlagen... Es muss %2$s heißen... Ich habe das oben mal ergänzt...

Das Command musst Du dann nicht setzen.

Re: [Problem] Übergabe von JSON an Openhab

Verfasst: 23. Mär 2022 21:24
von wats92
Nach deinem Hinweis ging es leider immernoch nicht, habe dann ein bisschen rumprobiert und konnte das letzte Hindernis finden:
Openhab hat sich irgendwie verschluckt, weil refresh und timeout gleich groß waren. endlich empfängt das Thermostat auch Befehle :D

Vielen Dank!!!