Seite 1 von 1

Visible: in custom widget

Verfasst: 6. Mai 2024 21:14
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?

Re: Visible: in custom widget

Verfasst: 6. Mai 2024 23:35
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.

Re: Visible: in custom widget

Verfasst: 7. Mai 2024 13:49
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.

Re: Visible: in custom widget

Verfasst: 7. Mai 2024 14:07
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.

Re: Visible: in custom widget

Verfasst: 7. Mai 2024 14:12
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 ?

Re: Visible: in custom widget

Verfasst: 7. Mai 2024 16:20
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 ;)

Re: Visible: in custom widget

Verfasst: 7. Mai 2024 17:13
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": ""'