Seite 1 von 1

openHAB3 HTTP String Item Status Text ändern

Verfasst: 12. Feb 2022 17:08
von xvs03
Ich lese per HTTP Binding einen Reed Kontakt Status per JSONPath Transformationvom vom Garagentor aus.
Wie das geht findet ihr hier:https://www.shelly-support.eu/forum/ind ... ing#wcf118
Ich gehe diesen Weg, weil das Shellybinding einen Reed Kontakt, der am Shelly Addon angeschlossen ist, keinen Statuskanal für den Kontakt bereitstellt.
Schade, aber ist momentan so. :(

Ich habe nun ein Item erstellt, was den Status des Tors mit "0" und "1" darstellt.
Diesen Status möchte ich aber ändern in "geschlossen" und "geöffnet".
Dazu habe ich im Item (Garagentor Status) unter Add Metadata > State Description > Options: "0=geschlossen" "1=geöffnet" hineingeschrieben.
Das Item zeigt sofort den gewünschten Status Text an. Aber...
Das HAB-Panel auf dem Handy zeigt weiterhin "0" und "1" an. Ärgerlich!
Dieses Problem habe ich dann folgendermaßen gelöst:
1. Map Transformation Service Addon installiert.
2. Im Ordner "transform" ein "GarageStatus.map" Datei erstellt. ( 0=geschlossen 1=geöffnet )
3. Dann in State Description > Pattern

Code: Alles auswählen

MAP(GarageStatus.map):%s
eingegeben.
Nun wird der der gewünschte Status Text auch im HAB-Panel angezeigt.

ITEM:

Code: Alles auswählen

"Garage_Tor_Status": {
    "class": "org.openhab.core.items.ManagedItemProvider$PersistedItem",
    "value": {
      "groupNames": [
        "garage"
      ],
      "itemType": "String",
      "tags": [
        "Status"
      ],
      "label": "Garagentor Status",
      "category": "garagedoor"
State Descrition:

Code: Alles auswählen

{
  "stateDescription:Garage_Tor_Status": {
    "class": "org.openhab.core.items.Metadata",
    "value": {
      "key": {
        "segments": [
          "stateDescription",
          "Garage_Tor_Status"
        ],
        "uid": "stateDescription:Garage_Tor_Status"
      },
      "value": " ",
      "configuration": {
        "options": "1\u003dgeöffnet,0\u003dgeschlossen",
        "pattern": "MAP(GarageStatus.map):%s"
      }
    }
  }
Als Dateianhang nochhmal ein Bild vom State Description in der WebUI
AddMetadata1.jpg
Ich weiß jetzt nicht, ob das ein Bug ist, dass man alles doppelt machen muß.
Das Options Textfeld in Add Metadata, sollte die Transmission doch auch an die anderen UI´s weitergeben.
Ich habe es hin und her probiert. Das eine kann nicht ohne das andere, ohne das ein UI es nicht richtig anzeigt.

Vielleicht habt ihr, liebe Community eine andere Lösung?

Re: openHAB3 HTTP String Item Status Text ändern

Verfasst: 13. Feb 2022 01:06
von udo1toni
Das ist kein Bug. Du hast nur offensichtlich noch nicht verstanden, was Du da eigentlich tust (nicht böse gemeint!).

Du beeinflusst die state description, also die Art, wie der Status dargestellt wird. Diese Darstellung wirkt nur dort, wo das Attribut auch ausgewertet wird. HABpanel wertet die state description nicht aus und hat das auch noch nie getan. Hintergrund ist, dass man in HABpanel ohnehin sehr viel Arbeit in die Konfiguration stecken muss, egal in welcher Form die Werte ankommen.
In der Basic UI hingegen wird das Attribut beachtet und entsprechend dargestellt, genauso in der Main UI. HABpanel ist eine der UIs, die mal aus Not von jemandem dazuerfunden wurden, die Maintainer wollen aber eigentlich alle Anwender auf eine UI einschwören, einfach, um die Menga an zu pflegenden Code zu minimieren, denn der Entwickler von HABpanel ist meines Wissens auch schon längst nicht mehr aktiv. HABpanel hat aber genug Fans, dass sie nicht rausgeschmissen wurde :) .

Du könntest das Problem auch anders lösen, und zwar, indem Du ein String Item verwendest und die Umsetzung 0/1 -> Text direkt im Channel erledigst. Dann steht der Text als solcher im Status und steht überall gleichermaßen zur Verfügung.

Eigentlich würde man übrigens das Contact Item für so eine Aufgabe nutzen, es kennt die Werte OPEN und CLOSED und die entsprechenden Icons werden damit direkt dynamisch angezeigt...

Re: openHAB3 HTTP String Item Status Text ändern

Verfasst: 13. Feb 2022 11:00
von xvs03
Danke für die Antwort. Ja das HAPpanel hat seine Tücken. Ich bin noch ganz frisch in openHAB und habe das Panel mit den Handy mal auf dem Sofa zwischen der Werbepause zusammengebastelt. Über die myOpenHab Cloud funktioniert es bei mir auch noch nicht wie ich das möchte. Wenn man sich die Doku über das Speichern und Backup und Teilen anschaut, überzeugt mich das eigentlich auch nicht.
Du hast Recht, ich werde mir eine Seite bauen, das wollte ich sowieso machen. Aber man probiert ja erstmal was so geht und freut sich wenn die selbstgebastelte Wetterstation was auf dem Handy anzeigt.

Das Item hab ich mal auf

Code: Alles auswählen

"itemType": "Contact"
umgestellt, aber dann bleibt der Status auf "CLOSED" stehen und ändert sich nicht mehr.

Du schreibst man kann die Umsetzung direkt im Channel vornehmen, kannst du mir kurz erklären wie ich das hinbekomme?

Vielen Dank schon mal

Re: openHAB3 HTTP String Item Status Text ändern

Verfasst: 13. Feb 2022 15:06
von udo1toni
Also, ein Contact Item hat ja den Zustand OPEN oder CLOSED, das ist etwas anderes als 0 und 1. Du musst dann natürlich im Channel noch eintragen, dass die beiden Werte genutzt werden. Der Channeltyp muss logischerweise ebenfalls Contact sein. Bei Custom Open Value und Closed-Value kannst Du eigene Werte hinterlegen, eben 1 und 0.

Wenn Du Dir den Code des Channels anzeigen lässt, sollte das dann ungefähr so aussehen:

Code: Alles auswählen

UID: http:url:a25eb03199
label: HTTP URL Thing
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://meine.url/
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: GET
  timeout: 3000
  bufferSize: 2048
channels:
  - id: door
    channelTypeUID: http:contact
    label: Garagentor
    description: ""
    configuration:
      mode: READONLY
      openValue: "1"
      closedValue: "0"
Damit könntest Du dann ein Contact Item verlinken, welches die Zustände OPEN und CLOSED nutzt.
Wenn Du stattdessen lieber als Klartaxt geschlossen und geöffnet dastehen haben willst, musst Du stattdessen einen string Channel verwenden.

Code: Alles auswählen

UID: http:url:a25eb03199
label: HTTP URL Thing
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://meine.url/
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: GET
  timeout: 3000
  bufferSize: 2048
channels:
  - id: door
    channelTypeUID: http:contact
    label: Garagentor
    description: ""
    configuration:
      openValue: "1"
      closedValue: "0"
  - id: garagedoor
    channelTypeUID: http:string
    label: Garagentor
    description: ""
    configuration:
      mode: READONLY
      stateTransformation: MAP:GarageStatus.map
Der große Unterschied zum Mapping in der state description: Nun ist der Status des Items selbst der Text, damit steht er überall zur Verfügung. Allerdings kannst Du dann die Icons nicht mehr dynamisch steuern, da die Namen mit closed und open als Schlüsselworte arbeiten.

Re: openHAB3 HTTP String Item Status Text ändern

Verfasst: 14. Feb 2022 12:33
von xvs03
Hallo,
Danke für deine Erklärungen, du hast mir wieder einmal sehr weitergeholfen.
Da ich den Contact natürlich weiterverarbeiten möchte, hab ich mich für die Lösung 1 entschieden und den Klartext dann im ITEM zu meiner Zufriedenheit geändert.
Hat alles geklappt, ich musste lediglich im Channel die "stateTransformation" mit JSONPATH anlegen, aber anders als ich es vorher beim String Channel gemacht habe, sonst hatte ich die Fehlermeldung im Log

Code: Alles auswählen

11:48:56.053 [WARN ] [sform.CascadedValueTransformationImpl] - Transformation ignore, failed to parse transform("JSONPATH", "$.ext_switch.0.input"): The transformation pattern must consist of the type and the pattern separated by a colon
da hat mir der Artikel im Englischen Forum https://community.openhab.org/t/http-bi ... ems/117967 weitergeholfen.

Hier noch die fertige Konfig für Shelly Reed Contact über Shelly Addon im OH3 verarbeiten:

Code: Alles auswählen

UID: http:url:Garage_Door_Contact
label: Garagentor Status
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://192.168.178.43/status
  delay: 0
  stateMethod: GET
  refresh: 5
  commandMethod: GET
  contentType: application/json
  timeout: 3000
  bufferSize: 2048
location: Garage
channels:
  - id: Garage_Door_Status_open_close
    channelTypeUID: http:contact
    label: Garagentor Status geöffnet/geschlossen
    description: ""
    configuration:
      mode: READONLY
      openValue: "1"
      stateTransformation: JSONPATH:$.ext_switch.0.input
      closedValue: "0"
Vielen Dank für die schnellen Antworten und die tollen Lösungsansätze.