Feuchtigkeit fehlt neuerdings im Widget

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Feuchtigkeit fehlt neuerdings im Widget

Beitrag von tommesd »

Ich nutze seit längerer Zeit folgendes Widget zur Übersicht einzelner Räume

Code: Alles auswählen

uid: Card_Room_Popup+Motion
tags:
  - motion
props:
  parameters:
    - label: Header
      name: text_header
      required: false
      type: TEXT
    - description: icon name without ".png", located in static/icons/ folder
      label: Icon
      name: iconimage
      required: false
      type: TEXT
    - description: HEX or rgba
      label: Backgroundcolor
      name: bgcolor
      required: false
      type: TEXT
    - description: Page which will be opened as popup
      label: Page ID
      name: page
      required: false
    - context: item
      description: select group for status lights
      label: Item
      name: status
      required: false
      type: TEXT
    - context: item
      description: select item for heating
      label: Item
      name: heating
      required: false
      type: TEXT
    - context: item
      description: select item for temperature
      label: Item
      name: temp
      required: false
      type: TEXT
    - context: item
      description: select item for set temperature
      label: Item
      name: settemp
      required: false
      type: TEXT
    - context: item
      description: select item for humidity
      label: Item
      name: humidity
      required: false
      type: TEXT
    - context: item
      description: select item for illuminance
      label: Item
      name: illuminance
      required: false
      type: TEXT
    - context: item
      description: select item for motion state(s)
      label: Item
      name: motion
      required: false
      type: TEXT
    - context: item
      description: select item for door lock(s)
      label: Item
      name: door_lock
      required: false
      type: TEXT
    - context: item
      description: select item for blinds group (SUM)
      label: Item
      name: blinds_closed
      required: false
      type: TEXT
    - context: item
      description: select item for speaker(s)
      label: Item
      name: speakers
      required: false
      type: TEXT
    - context: item
      description: select item for windows(s)
      label: Item
      name: windows
      required: false
      type: TEXT
    - context: item
      description: select item for numbers of windows
      label: Item
      name: windows_numbers
      required: false
      type: TEXT
    - context: item
      description: select item for boiler temp
      label: Item
      name: boiler_temp
      required: false
      type: TEXT
timestamp: Dec 14, 2021, 11:53:35 AM
component: f7-card
config:
  style:
    background-color: "=props.bgcolor ? props.bgcolor : ''"
    border-radius: var(--f7-card-expandable-border-radius)
    box-shadow: '=(items[props.status].state === "ON") ? "3px 3px 10px 0px rgba(255,255,255,255)" : "var(--f7-card-expandable-box-shadow)"'
    class:
      - padding: 0px
    height: 125px
    margin-left: 5px
    margin-right: 5px
    noShadow: false
slots:
  content:
    - component: f7-block
      config:
        style:
          left: 50px
          position: absolute
          top: -5px
      slots:
        default:
          - component: Label
            config:
              style:
                font-size: 17px
                font-weight: 600
                margin-left: 0px
                margin-top: 0px
              text: "=props.text_header ? props.text_header : 'Set Props'"
    - component: f7-block
      config:
        style:
          bottom: -37px
          left: 16px
          position: absolute
      slots:
        default:
          - component: f7-chip
            config:
              iconColor: "=themeOptions.dark === 'dark' ? 'white' : 'black'"
              iconF7: "=(items[props.status].state === 'ON') ? 'lightbulb' : 'lightbulb_slash'"
              iconSize: 18
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: "=(items[props.status].state === 'ON') ? items[props.status].state : ''"
              visible: "=props.status ? true : false"
          - component: f7-chip
            config:
              iconColor: "=themeOptions.dark === 'dark' ? 'white' : 'black'"
              iconF7: flame
              iconSize: 18
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: "=items[props.heating].state === 'ON' ? '' : ''"
              visible: =items[props.heating].state === 'ON'
          - component: f7-chip
            config:
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: "=items[props.motion].state === 'ON' ? '' : ''"
              visible: "=props.motion ? true : false"
            slots:
              media:
                - component: oh-icon
                  config:
                    icon: "=items[props.motion].state === 'ON' ? 'motion' : ''"
                    style:
                      filter: "='brightness(' + (themeOptions.dark === 'dark' ? '1' : '0.4') + ')'"
                      height: 18px
          - component: f7-chip
            config:
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: "=items[props.windows_numbers].state > 0 ? items[props.windows_numbers].state : ''"
              visible: "=items[props.windows].state === 'OPEN' ? true : false"
            slots:
              media:
                - component: oh-icon
                  config:
                    icon: window-open
                    style:
                      filter: "='brightness(' + (themeOptions.dark === 'dark' ? '1' : '0.4') + ')'"
                      height: 18px
          - component: f7-chip
            config:
              iconColor: "=themeOptions.dark === 'dark' ? 'white' : 'black'"
              iconF7: "=items[props.door_lock].state === 'ON' ? 'lock_open' : 'lock'"
              iconSize: 18
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: "=items[props.door_lock].state === 'ON' ? '' : ''"
              visible: "=props.door_lock ? true : false"
          - component: f7-chip
            config:
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: "=(Number(items[props.blinds_closed].state) === 0) ? '' : Math.floor(items[props.blinds_closed].state) + '%'"
              visible: "=(Number(Math.floor(items[props.blinds_closed].state)) > 0) ? true : false"
            slots:
              media:
                - component: oh-icon
                  config:
                    icon: "=(Number(items[props.blinds_closed].state) === 0) ? 'cinemascreen-30' : 'cinemascreen-100'"
                    style:
                      filter: "='brightness(' + (themeOptions.dark === 'dark' ? '100' : '0.3') + ')'"
                      height: 18px
          - component: f7-chip
            config:
              iconColor: "=themeOptions.dark === 'dark' ? 'white' : 'black'"
              iconF7: "=items[props.speakers].state === 'PLAY' ? 'speaker_2' : 'speaker'"
              iconSize: 18
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              visible: "=items[props.speakers].state === 'PLAY' ? true : false"
          - component: f7-chip
            config:
              iconColor: "=themeOptions.dark === 'dark' ? 'white' : 'black'"
              iconF7: sun_min
              iconSize: 18
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: =items[props.illuminance].displayState
              visible: "=props.illuminance ? true : false"
    - component: f7-block
      config:
        style:
          bottom: -65px
          left: 16px
          position: absolute
      slots:
        default:
          - component: f7-chip
            config:
              iconColor: "=themeOptions.dark === 'dark' ? 'white' : 'black'"
              iconF7: thermometer
              iconSize: 18
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: "=(items[props.temp].displayState  ? items[props.temp].displayState : items[props.temp].state) +  (props.settemp ? ' (' + items[props.settemp].state + ')' : '')"
              visible: "=props.temp ? true : false"
          - component: f7-chip
            config:
              iconColor: "=themeOptions.dark === 'dark' ? 'white' : 'black'"
              iconF7: drop
              iconSize: 18
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: =items[props.humidity].displayState
              visible: "=props.humidity ? true : false"
          - component: f7-chip
            config:
              style:
                --f7-chip-bg-color: rgba(255, 255, 255, 0)
              text: =items[props.boiler_temp].state
              visible: "=props.boiler_temp ? true : false"
            slots:
              media:
                - component: oh-icon
                  config:
                    icon: waterheater2
                    style:
                      filter: "='invert(' + (themeOptions.dark === 'dark' ? '1' : '0') + ')'"
                      height: 18px
    - component: oh-image
      config:
        style:
          height: 25px
          left: 16px
          opacity: 0.7
          position: absolute
          top: 10px
        url: ='/static/icons/' + props.iconimage + '.png'
        visible: "=props.iconimage ? true : false"
    - component: oh-link
      config:
        action: popup
        actionModal: ='page:' + props.page
        style:
          height: 110px
          left: 0px
          position: absolute
          top: 0px
          width: 100%
Items sind wie folgt angelegt

Code: Alles auswählen

Number:Dimensionless        FeuchtigkeitHobbyraum                         "Feuchtigkeit Hobbyraum [%d %unit%]"           <humidity>       (gAlleFeuchtigkeitssensorenKeller)                                           {channel="homematic:HmIP-BWTH:HomematicBridge:000C9D89B1EADA:1#HUMIDITY", alexa="CurrentHumidity"}
Seit einem der letzten Updates steht im Widget an der Stelle wo immer die Feuchtigkeit stand nichts mehr. Hat sich da etwas an den Formaten oder Syntax geändert?

Ich habe alle (Humidy-) Sensoren in Gruppen pro Etage zusammengefasst und lasse über AVG den Durchschnitt berechnen. Über eine Rule lasse ich mir eine Warnung über Telegram senden, wenn der Schwellenwert überschritten wird. Seit dem besagten Update triggert die Rule bei jeder Änderung im 1/10% Schritt, früher war das nicht so. Installiert ist die 3.4.2 openhabian. Danke für die Hilfe.
Openhabian 4.0.4

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

Re: Feuchtigkeit fehlt neuerdings im Widget

Beitrag von udo1toni »

Es gab meines Wissens eine Änderung bezüglich der Einheit "Prozent" in UoM. Habe das aber bisher nicht weiter verfolgt, weil es bei mir keine Auswirkungen hat.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Feuchtigkeit fehlt neuerdings im Widget

Beitrag von tommesd »

Kann man denn das Gruppen Item so konfigurieren, dass nur ganze Zahlen gespeichert werden sollen?
Openhabian 4.0.4

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

Re: Feuchtigkeit fehlt neuerdings im Widget

Beitrag von udo1toni »

Nein, das ist so erst mal nicht vorgesehen. Du könntest aber in der Rule, die die Meldung erzeugt eine passende Bedingung einbauen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Feuchtigkeit fehlt neuerdings im Widget

Beitrag von tommesd »

Funktioniert das dann über previousState oder besser über eine Hilfsvariable?
Openhabian 4.0.4

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

Re: Feuchtigkeit fehlt neuerdings im Widget

Beitrag von udo1toni »

Ich denke, es kommt darauf an, welches Verhalten Du genau haben möchtest.
previousState liefert den Wert vor der Änderung. Wenn Du nun nur schaust, ob previousState weniger als 0,2% vom aktuellen Status abweicht, ist das ja eher uninteressant.
Die in meinen Augen sinnvollste Variante wäre, zum einen zu prüfen, ob Dein Limit überschritten wurde, aber zum anderen auch, ob Du bereits eine Alarmierung erhalten hast. Diese Information kannst Du in einer Hilfsvariablen speichern, oder auch in einem Item, Letzteres hat den Vorteil, dass Du einfach direkt auf der Oberfläche sowohl den Zustand sehen als auch auf Wunsch zurücksetzen kannst.
Je nach Wunsch kannst Du eine Automatik in die Rule einbauen, die nach einer vorgegebenen Zeit den Zustand automatisch wieder auf "keine Meldung" setzt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Feuchtigkeit fehlt neuerdings im Widget

Beitrag von tommesd »

Hallo Udo,
ich möchte eine Telegram Warnung bekommen, wenn ein Schwellenwert überschritten wird, aber nur, wenn der neue Wert mind um 1 größer oder kleiner ist als der vorherige. Evtl. noch eine Fallunterscheidung für die Tendenz (steigend / fallend).
Ich komme irgendwie mit der Syntax nicht klar. So wie ich es jetzt habe funktioniert es nicht.

Code: Alles auswählen

rule "Feuchtewarnung"

when
    Item gAlleFeuchtigkeitssensorenKeller changed

then 
    val nAlleFeuchtigkeitssensorenKeller = (gAlleFeuchtigkeitssensorenKeller.state as Number).floatValue
    val prevAlleFeuchtigkeitssensorenKeller = (previousState.state as Number).floatValue
    val DiffFeuchtigkeit = (prevAlleFeuchtigkeitssensorenKeller)-(nAlleFeuchtigkeitssensorenKeller)
    
    if (DiffFeuchtigkeit < 1 || DiffFeuchtigkeit > -1){
        return;
    }
    
    if (nAlleFeuchtigkeitssensorenKeller >= 50){
        val telegramAction = getActions("telegram","telegram:telegramBot:Telegram_Bot")
        telegramAction.sendTelegram("Bitte Keller lüften! Durchnittsfeuchte " + gAlleFeuchtigkeitssensorenKeller.toString)
        }

end 
Openhabian 4.0.4

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

Re: Feuchtigkeit fehlt neuerdings im Widget

Beitrag von udo1toni »

Die Meldung soll also nur bei starkem Anstieg oder Absinken der Luftfeuchte auslösen. Ob das wirklich funktioniert?
Hier mal meine Variante:

Code: Alles auswählen

rule "Feuchtewarnung"
when
    Item gAlleFeuchtigkeitssensorenKeller changed
then 
    val fFeuchteNeu = (newState as Number).floatValue
    val fFeuchteAlt = (previousState as Number).floatValue

    if(Math.abs(fFeuchteAlt - fFeuchteNeu) < 1)
        return;

    if(fFeuchteNeu >= 50){
        val telegramAction = getActions("telegram","telegram:telegramBot:Telegram_Bot")
        telegramAction.sendTelegram("Bitte Keller lüften! Durchnittsfeuchte " + newState.toString)
    }
end 
Wichtigste Unterschiede:
previousState ist kein Item. Entsprechend gibt es keine Methode .state.
Wenn Du schon previousState nutzt, kannst Du auch newState nutzen, da gilt das gleiche wie bei previousState.
sprechende Namen sind etwas Tolles, aber sie sollten die Lesbarkeit des Codes nicht verringern, deshalb lieber kurz und prägnant.
Der Differenz-Wert wird nur einmal verwendet, es lohnt nicht, extra eine lokale Konstante zu erzeugen.
Der Absolutwert einer Zahl ist die Zahl ohne Vorzeichen, also die einfache Variante, um den ersten Vergleich zu vereinfachen.
In der Meldung hattest Du hinten ein Item drin stehen, aber ohne .state, das ergibt einen gänzlich anderen String, als Du erwartest :) Du könntest an dieser Stelle auch fFeuchteNeu verwenden (ebenfalls mit .toString, die lokale Konstante ist ein Objekt), aber newState steht ja auch zur Verfügung.
Die beiden impliziten Variablen previousState und newState stehen nur bei Werteänderung zur Verfügung, zum Testen kannst Du also nicht einfach den Play-Knopf der Rule drücken, dann enthalten die beiden Variablen nämlich null.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Feuchtigkeit fehlt neuerdings im Widget

Beitrag von tommesd »

Ach Mist, das funktioniert so natürlich nicht, wobei Deine rule sicherlich funktioniert. Das Problem ist wie gesagt seit einem der letzten Updates entstanden. Vorher stand im Group:AVG immer eine Ganzzahl, neuerdings steht da aber eine Zahl mit einer Nachkommastelle. Vorher konnte ich einfach auf Item gAlle... changed triggern, da sich der Wert immer entweder um 1 erhöht oder gesenkt hat. Im Prinzip hätte ich das auch gerne so wieder, sprich, Group:AVG als Ganzzahl speichern, wenn dass sich um 1 verändert und über dem Schwellenwert liegt, dann Warnung.
Openhabian 4.0.4

tommesd
Beiträge: 70
Registriert: 15. Nov 2021 10:02
Answers: 0

Re: Feuchtigkeit fehlt neuerdings im Widget

Beitrag von tommesd »

Wie sollte ich das am besten umsetzen? Benötige ich dazu ein zusätzliches Item, wo ich den neuen Wert speichere wenn der neue sich mind um 1 unterscheidet und dann auf das neue Item triggere oder geht das eleganter?
Openhabian 4.0.4

Antworten