Visible: in custom widget

GUI Relevanten, PaperUI, BasicUI, HabPanel ...

Moderatoren: seppy, udo1toni

Antworten
Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Visible: in custom widget

Beitrag von Hoggle »

Hallo.
Ich möchte einen einfachen Text nur anzeigen lassen in einem custom widget, wenn mein Garagentor geöffnet ist.
Meine Items funktionieren.
Ich habe 2 Neigungssensoren am Tor (1x oben, 1x unten am Tor befestigt) Mein Tor zieht sich oben unter die Decke der Garage.
Wenn beide Sensoren senkrecht stehen, ist mein Tor geschlossen, wenn beide waagerecht stehen, ist es offen, wenn nur der obere waagerecht ist, ist das Tor teilweise offen.
Mit einer Rule werte ich die beiden Sensoren aus und fülle ein Number-Dummy-Item (Garagentor_Status)mit den Zahlen 0 für beide Waagerecht, 50 für 1xWaagerecht, 1xSenkrecht und 100 für beide Senkrecht.
Mit einer .map-Datei wandle ich die Zahlen WAF-gerecht in "offen", "teilweise geöffnet" und "geschlossen" um.

Jetzt habe ich seit ein paar Tagen ein 7"-Display mit fullpageos am laufen und lasse mir die Wetterdaten mittels eines custom widgets anzeigen.
Da das Display unter dem Fernseher steht, welchen wir häufig Abends an haben, dachte ich mir, ich könnte mir einfach anzeigen lassen, wenn die Garage noch offen ist.
Hier die Zelle aus dem YAML, um den es geht:

Code: Alles auswählen

- component: f7-row
        config:
          style:
            height: 40px
            overflow: hidden
            width: 100%
        slots:
          default:
            - component: Label
              config:
                style:
                  color: red
                  font-size: 18px
                  margin-right: 0px
                  margin-top: 5px
                text: "Garage ist offen"
                visible: '=(Number.parseInt(items[props.Garagentor_Status].state.split(" ")[0]) <= 99) ? true : false'
Wenn ich das visible:... weg lasse, wird mir der Text logischer Weise angezeigt, aber wie kann ich den Text nur anzeigen lassen, wenn das Item "Garagentor_Status" = 100 ist?
Momentan wird der Text nie angezeigt, egal, ob ich <= 99, == 100 oder ähnliches angebe.
Ich bin mir allerdings nicht sicher, ob der parse-Teil überhaupt passt.
Ich habe auch statt parseInt schon parseFloat getestet, aber immer ohne Erfolg.
Da es sich bei dem Garagentor_Status um ein Number-Item handelt, muß ich doch auch mit Zahlen vergleichen, oder?
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

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

Re: Visible: in custom widget

Beitrag von udo1toni »

Der Status des Items ist kein Text, insofern möchte ich behaupten, dass da kein split hingehört. Außerdem, falls Du openHAB4 verwendest, sollte es auch die Eigenschaft .numericState geben, welhce explizit den numerischen Wert als Zahl ausliefert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: Visible: in custom widget

Beitrag von Hoggle »

Hallo.
Dieser folgende Ausdruck funktioniert leider nicht.
Finde ich irgendwo eine Doku für mögliche vergleiche?

Code: Alles auswählen

visible: =items.Garagentor_Status.numericState <= 99
Der Text bleibt dauerhaft ausgeschaltet, egal, ob ich <=, ==, >= schreibe.
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

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

Re: Visible: in custom widget

Beitrag von peter-pan »

So wie ich das verstehe hat du ein ungebundenes Item (numerisch), welches durch eine Rule mit den Werten 0, 50 oder100 gefüllt wird.

Es ist also so wie Udo das bereits beschrieben hat, dass du hier keine "Split-Methode/Funktion" brauchst. Ich bin mir nicht sicher, ob hier dann ein Array erzeugt wird, wenn ja, dann sollte aber trotzdem der numerische Wert erkannt werden. (Halbwissen :oops: )

Andere Frage! Hast du ein Eingabefeld (props) für dein Item in den Parametern definiert ? Etwa so:

Code: Alles auswählen

    - context: item
      label: Garagentor-Status
      name: Garagentor_Status
      required: true
      type: TEXT
 
Wobei der Name "Garagentor_Status" in dem Parameter "name: Garagentor_Status" auch anders heissen könnte, da du das eigentliche Item ja per Selektion auswählen kannst.

Sollte aber der Item-Name "fix" in deinem Widget sein, brauchst du das "props" gar nicht.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

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

Re: Visible: in custom widget

Beitrag von peter-pan »

Hoggle hat geschrieben: 7. Mai 2024 13:49 visible: =items.Garagentor_Status.numericState <= 99
Hast du

Code: Alles auswählen

visible: =items.Garagentor_Status.state <= 99 ? true : false
probiert ?

Edit: Was sind das für Sensoren und wie hast du die eingebunden ?
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: Visible: in custom widget

Beitrag von Hoggle »

peter-pan hat geschrieben: 7. Mai 2024 14:12
Hoggle hat geschrieben: 7. Mai 2024 13:49 visible: =items.Garagentor_Status.numericState <= 99
Hast du

Code: Alles auswählen

visible: =items.Garagentor_Status.state <= 99 ? true : false
probiert ?

Edit: Was sind das für Sensoren und wie hast du die eingebunden ?
Deinen Code habe ich noch nicht probiert, teste ich heute aber noch und gebe Info.

Die Sensoren sind 2 x homematic:HM-Sec-TiS
Per Rule fülle ich den Garagentor_Status

Code: Alles auswählen

Triggers:
// - When GarageOState changed
// - When GarageUState changed

// context: Garagentorstatus-1
if (GarageOState.state == CLOSED && GarageUState.state == CLOSED) //Beide Kontakte ON
       { Garagentor_Status.postUpdate(100)
        Garagentor_offen.postUpdate(OFF)} //zu
    else if (GarageOState.state == OPEN && GarageUState.state == OPEN) //Beide Kontakte OFF
        { Garagentor_Status.postUpdate(0)
        Garagentor_offen.postUpdate(ON)} //offen
    else //Zwischenposition
        { Garagentor_Status.postUpdate(50)
        Garagentor_offen.postUpdate(ON)}
/code]

Die Rule läuft auch seit einiger Zeit super.
Fehlt nur noch die Anzeige ;)
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

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

Re: Visible: in custom widget

Beitrag von peter-pan »

Kannst du nochmal den ganzen Widget-Code posten ? Evtl. lässt sich auch etwas mit dem Text-Parameter direkt realisieren, in dem die Prüfung des Status hier erfolgt:

Code: Alles auswählen

'=items.Garagentor_Status.state <= 99 ? "Garage offen": ""'
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

Antworten