Benötige Hilfe bei Custom Widget

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
mj1234
Beiträge: 13
Registriert: 30. Jul 2020 09:44
Answers: 1

Benötige Hilfe bei Custom Widget

Beitrag von mj1234 »

Hallo Zusammen,
ich habe gerade angefangen mich in das Thema Widgets einzuarbeiten und hänge an einem Problem, welches ich hach intensiver suche nicht schaffe zu lösen.

Code: Alles auswählen

uid: Battery_Sensor
tags: []
props:
  parameters:
    - description: Label for Smoke Detector
      name: label
      required: false
      type: TEXT
    - context: item
      description: Smoke Detector Item
      label: Item
      name: Temp
      required: false
      type: TEXT
    - context: item
      description: Smoke Detector Battery Item
      label: Item
      name: battery
      required: false
      type: TEXT
timestamp: Dec 26, 2024, 12:19:28 AM
component: oh-label-item
config:
  icon: "=(props.battery.state => 100) ? 'f7:battery_100' : (props.battery.state <=
    50) ? 'f7:battery_25' : 'green'"
  iconColor: "=(props.battery.state => 100) ? 'green' : (props.battery.state <=
    50) ? 'yellow' : 'red'"
  iconUseState: true
Ich versuche ein Widget für den Batteriestatus eines Smoke Detectors zu bauen.
Der SD hat einen Batteriestand von 100% Wenn ich in der Zeile
"icon: "=(props.battery.state => 100) ? 'f7:battery_100' : (props.battery.state <= 50) ? 'f7:battery_25' : 'green'""
den Vergleich Größer Geich schreibe bekomme ich das Icon angezeigt, dass ich erwarte.
Ich möchte aber auf == vergeleichen. Dies scheint aber nicht zu funktionieren.
Ich habe in diversen Voragen "===" gefunden, geht aber auch nicht.
Kann mir jemand erklären was ich falsch mache? Und wieseo wird manchmal "===" verwendet?

Viele Grüße
Michael

Harka
Beiträge: 487
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Benötige Hilfe bei Custom Widget

Beitrag von Harka »

Moin,
beim => vs. == 100 muss ich raten. Vermutlich ist der Wert intern als 100.00004 o.ä. abgespeichert und damit nicht mehr gleich 100. Ich selbst würde beim Füllstand der vollen Batterie nicht auf 100 prüfen sondern eher auf =>75 bzw. 80 ?
Der Unterschied zwischen == und === wird hier erklärt -> https://wiki.selfhtml.org/wiki/JavaScri ... operatoren

mj1234
Beiträge: 13
Registriert: 30. Jul 2020 09:44
Answers: 1

Re: Benötige Hilfe bei Custom Widget

Beitrag von mj1234 »

Moin Harka,
danke für die Antwort.
Die Erklärung habe ich verstanden.
Allerdings habe ich in der Zwischenzeit etwas weiter getestet.
Ich habe mir ein Test Item als Number definiert und setze den Wert des Test Items auf der Karaff Console auf 100.
Funktioniert leider auch nicht. Auch bei Werten mit Dezimalstellen 100.0 funktioniert nur ein >= nicht aber ein ==.

Kann noch jemand helfen?

Viele Grüße

Michael

Harka
Beiträge: 487
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Benötige Hilfe bei Custom Widget

Beitrag von Harka »

versuch mal

Code: Alles auswählen

(Number.parseFloat(props.battery.state) == 100)
Habe gerade hier gespickt.

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

Re: Benötige Hilfe bei Custom Widget

Beitrag von peter-pan »

Hier noch ein Beispiel aus meinem SetUp, allerdings nur mit zwei Vergleichsparametern. Aber wie es mit weiteren geht weisst du ja.

Code: Alles auswählen

                    icon: '=(Number.parseFloat(items.snzb02p_01_battery.state) >= 40 ) ?
                      "oh:battery-90" : "oh:battery-10"'
Bei mir sind auch die Vergleichsoperatoren etwas anders ">=". Aber wie @Harka das schon beschrieben hat, musst du den Vergleichswert in einen numerischen Wert verwandeln. Das machst du mit der "Number.parseFloat"-Methode oder evtl. auch mit "Number.parseInt"
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Benötige Hilfe bei Custom Widget

Beitrag von udo1toni »

Um auch noch Senf beizumischen...
Eventuell müsste es auch .numericState als Eigenschaft geben (ich habe mich noch nicht weiter mit den Widgets auseinandergesetzt, numericState steht aber allgemein an vielen stellen zur Verfügung, nicht in der DSL, aber z.B. in JavaScript, und die Main UI Widgets sind da vermutlich dicht dran.
Also evtl. so:

Code: Alles auswählen

config:
  icon: "=(props.battery.numericState == 100) ? 'f7:battery_100' : (props.battery.numericState <=
    50) ? 'f7:battery_0' : 'f7:battery_25'
  iconColor: "=(props.battery.numericState == 100) ? 'green' : (props.battery.numericState <=
    50) ? 'yellow' : 'red'"
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mj1234
Beiträge: 13
Registriert: 30. Jul 2020 09:44
Answers: 1

Re: Benötige Hilfe bei Custom Widget

Beitrag von mj1234 »

Hallo Leute,
danke für die Unterstützung.
Manchmal muss man Dinge einfach ruhen lassen.
Nach meinem Urlaub habe ich nochmals getestet und es funktioniert.
Ich kann nicht erklären warum.

Viele Grüße

Michael

Antworten