[OH3] Main-UI Selection Widget sendet keine 0

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

MrCrashy
Beiträge: 113
Registriert: 2. Jan 2021 09:53
Answers: 0

[OH3] Main-UI Selection Widget sendet keine 0

Beitrag von MrCrashy »

Hallo Zusammen,

ich habe mich mit OH3 etwas vertraut gemacht und würde mich gerne jetzt mit meiner Nutzeroberfläche auseinandersetzen. Ich habe in zwei Räumen eine Zeitschaltuhr über Selection-Items realisiert. Da OH3 im Interface kein Selection-Widget hat, habe ich etwas gesucht und einen Code für mich gefunden, der eigentlich reicht. Dieses sieht wie folgt aus:

Code: Alles auswählen

uid: Selection Zeitschaltuhren Ein
props:
  parameters:
    - description: Der Titel der Betriebsart
      label: Titel
      name: title
      required: true
      type: TEXT
    - context: item
      description: Das Item für das die Betriebsart eingestellt wird
      label: Betriebsart Item
      name: item
      required: true
      type: TEXT
  parameterGroups: []
timestamp: Feb 11, 2021, 6:01:48 PM
component: oh-list-card
config:
  title: =props.title
slots:
  default:
    - component: oh-list-item
      config:
        title: Aus
        action: command
        actionItem: =props.item
        actionCommand: -1
        icon: "=items[props.item].state === '-1' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: Automatik
        action: command
        actionItem: =props.item
        actionCommand: 0
        icon: "=items[props.item].state === '0' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 17 Uhr
        action: command
        actionItem: =props.item
        actionCommand: 1
        icon: "=items[props.item].state === '1' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 18 Uhr
        action: command
        actionItem: =props.item
        actionCommand: 2
        icon: "=items[props.item].state === '2' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 19 Uhr
        action: command
        actionItem: =props.item
        actionCommand: 3
        icon: "=items[props.item].state === '3' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 20 Uhr
        action: command
        actionItem: =props.item
        actionCommand: 4
        icon: "=items[props.item].state === '4' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
Um den Automatik-Modus verwenden zu können, muss ich dem Item eine "0" senden. Wenn ich dies aber versuche, dann bekomme ich folgende Meldung in den Logs:

Code: Alles auswählen

2021-02-11 18:04:08.214 [ERROR] [rg.apache.cxf.jaxrs.utils.JAXRSUtils] - No message body reader has been found for class java.lang.String, ContentType: application/octet-stream

2021-02-11 18:04:08.218 [WARN ] [s.impl.WebApplicationExceptionMapper] - javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type

	at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1382)

	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processRequestBodyParameter(JAXRSUtils.java:877)

	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:822)

	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:214)

	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:78)

	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)

	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)

	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)

	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)

	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)

	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:216)

	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:301)

	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:220)

	at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)

	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:276)

	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852)

	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:544)

	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71)

	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)

	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536)

	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)

	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581)

	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)

	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307)

	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:293)

	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)

	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482)

	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549)

	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)

	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204)

	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)

	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80)

	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

	at org.eclipse.jetty.server.Server.handle(Server.java:494)

	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:374)

	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268)

	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)

	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)

	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)

	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)

	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)

	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)

	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)

	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367)

	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918)

	at java.base/java.lang.Thread.run(Thread.java:834)
Andere Nummern, wie -1, 1, 2 usw gehen. Nur die 0 nicht. Leider fällt mir keine andere Lösung ein.
Vielleicht kann mir hier jemand helfen?

EDIT: Ich möchte ebenfalls die Items in meiner UI in der Anordnung ändern. Leider finde ich die Möglichkeit dazu nicht. Diese werden einfach nur "stumpf" nebeneinander angeordnet. Wenn die Reihe voll ist, wird die nächste Angefangen. Ich möchte die Items aber lieber "frei" positionieren, so wie es im HABPanel möglich ist.
Dachte eigentlich dass es über "Configure Masonry" möglich ist, doch das Pop-Up ist komplett leer.
Hat hier ebenfalls jemand eine Idee?

MfG
von peter-pan » 12. Feb 2021 20:54
Was meinst du mit passiert nichts ? Also bei mir geht die angeschlossene Lampe an und aus. Hast du probiert zu speichern und dann den Schalter in der "richtigen" Page zu benutzen, also nicht im "Run"-Mode ?

Also grundsätzlich würde ich mal sagen, kannst du ja zwei List-Cards machen eine für Einschaltzeit, die andere für Ausschaltzeit.
So oder so ähnlich:
ein aus.jpg
Leider habe ich keine HUE-Lampen, da könnte ich vielleicht das was du erreichen willst, besser verstehen bzw. das was die HUE-Lampen für Features bieten und du heraus holen willst.

Also das was du da mit den Icons (der Code) machst, dass ist ja schon toll, das gefällt mir richtig. Das kannte ich bisher so noch gar nicht.

Ich hab' einfach mal mit den ersten zwei List-Widgets "gespielt" und wieder mein "Switch-Item", die Schreibtischlampe benutzt.
Der YAML zum ersten Listen-Element (Toggle-List):

Code: Alles auswählen

component: oh-toggle-item
config:
  title: Ein/Aus
  item: Sonoff_Basic_03
  iconUseState: true
  icon: oh:light
  color: blue
Als Icon habe ich "light" verwendet und damit wird das icon auch beim Umschalten "gelb" bzw. "weiss".

Der YAML zum zweitenListen-Element (List):

Code: Alles auswählen

component: oh-list-item
config:
  title: "=items.Sonoff_Basic_03.state === 'ON' ? \"An\" : \"Aus\""
  action: toggle
  actionItem: Sonoff_Basic_03
  actionCommand: ON
  icon: "=items.Sonoff_Basic_03.state === 'ON' ? 'f7:circle_fill' : 'f7:circle'"
  iconColor: red
  actionCommandAlt: OFF
slots: null
Hier habe ich deine Code-Sequenz gleich mal benutzt und für die Titel-Zeile angepasst.
f7.jpg
Leider kann ich dir sonst nicht weiter helfen. Aber Danke dafür, dass du mir dieses Code.Snippet "geschenkt" hast.

Gruss
Peter
Gehe zur vollständigen Antwort

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: [OH3] Main-UI Selection Widget sendet keine 0

Beitrag von harteknut »

Den Fehler mit der 0 kenne ich nicht. Ich vermeide die 0 als Status, weil die öfter Probleme verursacht. Hast Du mal versucht, den Wert bei „Action Command“ in Anführungsstriche zu setzen?

Zum Thema „freie Anordnung“: So wie bei HABPanel geht es (glaube ich) nicht mehr, und darüber freue ich mich sehr:
Bei HABPanel musste ich die Darstellung immer auf einen bestimmten Screen bzw. eine Auflösung anpassen. Das brauch ich jetzt nicht mehr, OH3 passt das immer an, die Widgets werden inkl. Schrift und icons skaliert.
Arbeitest Du mit Widgets oder Cells?

MrCrashy
Beiträge: 113
Registriert: 2. Jan 2021 09:53
Answers: 0

Re: [OH3] Main-UI Selection Widget sendet keine 0

Beitrag von MrCrashy »

Ich werde es morgen mal mit den Anführungszeichen versuchen.

Ich arbeite hauptsächlich mit Cells. Irgendwie gefällt mir aber die Anordnung nicht so wirklich. Hätte nämlich als Beispiel folgende Anordnung:

Zwei vertikale Slider. Über und unter den Slider jeweils eine Schaltfläche in der Breite von beiden Slidern.
Also so:
_______
|. |
|. |
|. |
_______

Leider werden die Schaltflächen nur daneben und nebeneinander angeordnet.
Mit Widgets in OH3 habe ich leider nicht so die Erfahrung.

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

Re: [OH3] Main-UI Selection Widget sendet keine 0

Beitrag von peter-pan »

Hast du es schon mit "List-Cards" probiert ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.6 openhabian

MrCrashy
Beiträge: 113
Registriert: 2. Jan 2021 09:53
Answers: 0

Re: [OH3] Main-UI Selection Widget sendet keine 0

Beitrag von MrCrashy »

Ich habe mich mal an "List-Cards" probiert. Ein Widget basiert auf darauf. Aber das ist mit mehr Glück als Verstand zusammen gebaut. Also so sehr kenne ich mich nicht damit aus.

Ich blicke allgemein nicht wirklich durch. Ich erstelle eigentlich alles über "Masonry". Die "Blocks" bzw "Cells" nutze ich eigentlich nie. Mir fehlen da einfach die ganzen Widgets.
Ich finde auch irgendwie keine einfache Möglichkeit eine "Schaltfläche" zu erstellen. Also einfach nur einen Knopf, welcher bei einem einem "Druck" das Item einschaltet und bei dem nächsten "Druck" wieder ausschaltet.

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

Re: [OH3] Main-UI Selection Widget sendet keine 0

Beitrag von peter-pan »

Hab nicht ganz verstanden, was du meinst. Masonry arbeitet doch mit List-Cards, während Block mit Cells arbeitet.

Wenn du einen einfachen Schalter mit Cells machen willst, hier ein YAML-Code dazu.

Code: Alles auswählen

component: oh-cell
config:
  action: toggle
  actionItem: Sonoff_Basic_03
  title: Schreibtischlampe
  icon: oh:siren
  actionCommand: ON
  actionCommandAlt: OFF
  subtitle: =items.Sonoff_Basic_03.displayState
Sonoff_Basic_03 ist ein Switch Item, der zum Schalten einer Schreibtischlampe dient.

Das sieht dann so aus:
switch.jpg
Im Gegensatz dazu kannst du ein List-Card-Widget mit mehreren Items definieren. Der YAML dazu könnte so aussehen:

Code: Alles auswählen

component: oh-list-card
config:
  mediaList: true
slots:
  default:
    - component: oh-player-item
      config:
        title: Sonos Arbeitszimmer
        icon: oh:sonos_play1
        item: AZ_Sonos_Control
        showRewindFFward: false
        artistItem: AZ_Sonos_CurrentArtist
        trackItem: AZ_Sonos_CurrentTitle
    - component: oh-stepper-item
      config:
        title: Lautstärke
        item: AZ_Sonos_Volume
        fill: false
        raised: true
        icon: oh:soundvolume
    - component: oh-toggle-item
      config:
        title: Mute
        item: AZ_Sonos_Mute
        iconUseState: true
        icon: oh:soundvolume_mute
        color: red
    - component: oh-label-item
      config:
        item: AZ_Sonos_CurrentTitle
        title: "Es läuft:"
und das sieht dann so aus:
list-card.jpg
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.6 openhabian

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

Re: [OH3] Main-UI Selection Widget sendet keine 0

Beitrag von peter-pan »

Hab grad noch eine andere Möglichkeit mit "Label-Cell" getestet. Hier der YAML dazu.

Code: Alles auswählen

component: oh-label-cell
config:
  header: Schreibtischlampe
  icon: oh:siren
  item: Sonoff_Basic_03
  action: toggle
  actionCommand: ON
  actionCommandAlt: OFF
  color: lightblue
  actionItem: Sonoff_Basic_03
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.6 openhabian

MrCrashy
Beiträge: 113
Registriert: 2. Jan 2021 09:53
Answers: 0

Re: [OH3] Main-UI Selection Widget sendet keine 0

Beitrag von MrCrashy »

Hallo, danke für deine Zeit. Ich habe gerade mal deine erste Möglichkeit mit den Cells probiert und es funktioniert wunderbar. Leider bin ich bei dieser YAML - Geschichte nicht ganz dabei. Ich hätte nämlich lieber anstatt den Item-State einfach eine farbliche Kennzeichnung der Schalterstellung. Also z.B. wenn das Licht an ist, dann soll der Button "Blau" sein. Wenn das Licht aus ist, soll der Button "normal" sein.

Außerdem habe ich mal ein anderes "List-Item" geschrieben.
Das sieht jetzt so aus:
Unbenannt.PNG
Das Problem ist jetzt aber, dass es zwei Listen untereinander sind. Ich hätte diese aber lieber nebeneinander. Es sind nämlich einmal "Einschaltzeit" und "Ausschaltzeit". Also bis 20 Uhr ist die Einschaltzeit. Danach ist wieder ausschaltzeit.

So sieht der YAML-Code jetzt aus:

Code: Alles auswählen

component: oh-list-card
config:
  title: Küche Spotlight
slots:
  default:
    - component: oh-toggle-item
      config:
        title: Ein/Aus
        item: HUE_Kitchen_Spotlight1
        iconUseState: true
        icon: oh:lightbulb
        color: red
    - component: oh-list-item
      config:
        title: Aus
        action: command
        actionItem: Kitchen_Spotligh1_Timer_On
        actionCommand: -1
        icon: "=items.Kitchen_Spotligh1_Timer_On.state === '-1' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: Automatik
        action: command
        actionItem: Kitchen_Spotligh1_Timer_On
        actionCommand: -2
        icon: "=items.Kitchen_Spotligh1_Timer_On.state === '-2' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 17 Uhr
        action: command
        actionItem: Kitchen_Spotligh1_Timer_On
        actionCommand: 1
        icon: "=items.Kitchen_Spotligh1_Timer_On.state === '1' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 18 Uhr
        action: command
        actionItem: Kitchen_Spotligh1_Timer_On
        actionCommand: 2
        icon: "=items.Kitchen_Spotligh1_Timer_On.state === '2' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 19 Uhr
        action: command
        actionItem: Kitchen_Spotligh1_Timer_On
        actionCommand: 3
        icon: "=items.Kitchen_Spotligh1_Timer_On.state === '3' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 20 Uhr
        action: command
        actionItem: Kitchen_Spotligh1_Timer_On
        actionCommand: -1
        icon: "=items.Kitchen_Spotligh1_Timer_On.state === '4' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: Aus
        action: command
        actionItem: Kitchen_Spotlight1_Timer_Off
        actionCommand: -1
        icon: "=items.Kitchen_Spotligh1_Timer_Off.state === '-1' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 21 Uhr
        action: command
        actionItem: Kitchen_Spotlight1_Timer_Off
        actionCommand: 1
        icon: "=items.Kitchen_Spotligh1_Timer_Off.state === '1' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 22 Uhr
        action: command
        actionItem: Kitchen_Spotlight1_Timer_Off
        actionCommand: 2
        icon: "=items.Kitchen_Spotligh1_Timer_Off.state === '2' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
    - component: oh-list-item
      config:
        title: 22 Uhr
        action: command
        actionItem: Kitchen_Spotlight1_Timer_Off
        actionCommand: 3
        icon: "=items.Kitchen_Spotligh1_Timer_Off.state === '3' ? 'f7:circle_fill' : 'f7:circle'"
        iconColor: red
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: [OH3] Main-UI Selection Widget sendet keine 0

Beitrag von peter-pan »

MrCrashy hat geschrieben: 12. Feb 2021 15:04 Ich hätte nämlich lieber anstatt den Item-State einfach eine farbliche Kennzeichnung der Schalterstellung.
Das geht mit dem zweiten YAML (Label-Cell). "item" und "actionItem" sind dein Schalter und da habe ich die "color:lightblue" eingestellt. Wenn du nun auf die Zelle klickst, wird sie auch "blau" ;) und bei aus(OFF) wieder "normal". Es kann aber sein, dass das im "Run-Mode" nicht funktioniert. In diesem Falle abspeichern und die richtige Page aufrufen.

Das mit dem List-Widget schaue ich mir nachher noch einmal an. Vielleicht fällt mir was ein. Muss aber jetzt noch schnell was für die "Chefin" erledigen ;) .
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.6 openhabian

MrCrashy
Beiträge: 113
Registriert: 2. Jan 2021 09:53
Answers: 0

Re: [OH3] Main-UI Selection Widget sendet keine 0

Beitrag von MrCrashy »

Vielen Dank, das wäre freundlich!

Kenne ich, wir sind gerade am Umbauen und bin ständig am hin und her rennen :D

EDIT: Die "Label-Cell" habe ich ausprobiert. Die Farbe UND der Status "On" oder "Off" ändert sich beim Statuswechsel. Dennoch funktioniert er nicht als Button. Beim "Drücken" passiert leider nichts.

Antworten