Ich wollte gerne auf meinen FTUI (FHEM Tablet UI) meine offene Fenster darstellen
die ich mit den AQara Fenster- / Türkontaksensor * überwache.

Um festzustellen ob und auch wie viele Fenster offen sind,
habe ich ein DOIF erstellt der die Zählt und auch die benötigten Readings  beinhaltet.

 

Die Readings:

  • openWindowsState 
    • Zeigt die Anzahl der geöffneten Fenster an
  • openWindowsState
    • Zeigt einen globalen open/closed State an

 

Das DOIF:

define Monitoring.DOIF.Fenster DOIF ([#".*\.Sensor\.Fenster":state:"open"] > 0)\
(\
  set $SELF openWindowsCount [#".*\.Sensor\.Fenster":state:"open"],\
  set $SELF openWindowsState open\
)\
DOELSE\
(\
  set $SELF openWindowsCount 0,\
  set $SELF openWindowsState closed\
)\

attr Monitoring.DOIF.Fenster alias Monitoring.DOIF.Fenster
attr Monitoring.DOIF.Fenster do always
attr Monitoring.DOIF.Fenster icon helper_doif
attr Monitoring.DOIF.Fenster readingList openWindowsCount  openWindowsState
attr Monitoring.DOIF.Fenster room 2.1_Sensoren,9.2_DOIF
attr Monitoring.DOIF.Fenster stateFormat openWindowsState (openWindowsCount)

Wenn das jetzt geklappt habt solltest ihr nun ein neues DOIF haben 🙂

 

Weiter mit FTUI:

Hier habe ich den Count und den State auf einen FTUI Widget data-type=“popup“ gelegt.

 

Der dann durch einen Klick bzw. Touch das Popup der Übersicht öffnet.

Der HTML Code:

<!DOCTYPE html>
<html>

<head>
  <!-- Template für Fensterstatus -->
</head>

<body>
  <div data-type="popup" id="fenster" data-height="300px" data-width="600px" data-return-time="45"
    data-draggable="false" data-return-time="10" data-mode="no-animate">
    <div data-type="symbol" data-device="Monitoring.DOIF.Fenster" data-get="openWindowsState"
      data-get-on='["closed","open"]' data-icons='["oa-fts_window_1w","oa-fts_window_1w_open"]'
      data-warn="Monitoring.DOIF.Fenster:openWindowsCount" data-warn-background-color="#505050"
      data-warn-color="#ffffff" data-colors='["white","orange"]' style="font-size:150%; margin-top:2px;"></div>

    <div class="dialog">
      <header style="background-color:#202020;">
        <div class="sheet">
          <div class="left"
            style="margin-left:15px; margin-top:17px; margin-bottom:15px; font-size:20px; color:white;">
            FENSTER</div>
          <div data-type="link" data-on-color="white" data-icon-left="fa-times" class="right big"
            style="margin-top:10px;" onclick="$('.dialog-close').trigger('click');"></div>
        </div>
      </header>

      <div class="inline">
        <div data-type="symbol" data-device="BU.Sensor.Fenster" data-get-on='["open","closed"]'
          data-icons='["oa-fts_window_1w_open","oa-fts_window_1w"]' data-colors='["orange","white"]'
          class="bigger"></div>
        <div class="big top-narrow">Büro</div>
      </div>

      <div class="inline">
        <div data-type="symbol" data-device="BZ.Sensor.Fenster" data-get-on='["open","closed"]'
          data-icons='["oa-fts_window_1w_open","oa-fts_window_1w"]' data-colors='["orange","white"]'
          class="bigger"></div>
        <div class="big top-narrow">Badezimmer</div>
      </div>

      <div class="inline">
        <div data-type="symbol" data-device="GB.Sensor.Fenster" data-get-on='["open","closed"]'
          data-icons='["oa-fts_window_1w_open","oa-fts_window_1w"]' data-colors='["orange","white"]'
          class="bigger"></div>
        <div class="big top-narrow">Gästebad</div>
      </div>

      <div class="inline">
        <div data-type="symbol" data-device="KU.Sensor.Fenster" data-get-on='["open","closed"]'
          data-icons='["oa-fts_window_1w_open","oa-fts_window_1w"]' data-colors='["orange","white"]'
          class="bigger"></div>
        <div class="big top-narrow">Küche</div>
      </div>

      <div class="inline">
        <div data-type="symbol" data-device="SZ.DOIF.Sensor.Fenster.Doppel" data-get="myState"
          data-get-on='["open-left","open_right","open","closed"]'
          data-icons='["oa-fts_window_2w_open_l","oa-fts_window_2w_open_r","oa-fts_window_2w_open_lr","oa-fts_window_2w"]'
          data-colors='["orange","orange","orange","white"]' class="bigger"></div>
        <div class="big top-narrow">Schlafzimmer</div>
      </div>

      <div class="inline">
        <div data-type="symbol" data-device="KZ.Sensor.Fenster" data-get-on='["open","closed"]'
          data-icons='["oa-fts_window_1w_open","oa-fts_window_1w"]' data-colors='["orange","white"]'
          class="bigger"></div>
        <div class="big top-narrow">Kinderzimmer</div>
      </div>

      <div class="inline">
        <div data-type="symbol" data-device="KZ.DOIF.Sensor.Fenster.Doppel" data-get="myState"
          data-get-on='["open_left","open-right","open","closed"]'
          data-icons='["oa-fts_window_2w_open_l","oa-fts_window_2w_open_r","oa-fts_window_2w_open_lr","oa-fts_window_2w"]'
          data-colors='["orange","orange","orange","white"]' class="bigger"></div>
        <div class="big top-narrow">Kinderzimmer</div>
      </div>
    </div>
  </div>
</body>

</html>

 

Jetzt noch paar Bilder:

 

Mit * markierte Links sind Amazon ParnerNet Affiliate Links


10 Kommentare

Thomas · 4. Februar 2021 um 07:06

Hallo Shojo,

genau das habe ich gesucht. Ich bin allerdings auch noch nicht fit mit Regex. Ich habe allerdings auch erst einen Fensterkontakt und der ist wie folgt bezeichnet:
Shelly_Terrasse_Tuer
So würde ich dann auch die Endung bei Türen beibehalten und bei den Fenstern _Fenster
Ich habe schon einiges versucht aber bekomme immer Fehlermeldungen.

Danke und VG Thomas

    IdleBit · 4. Februar 2021 um 08:46

    HiThomas ,

    aus
    [#".*\.Sensor\.Fenster":state:"open"]
    wird dann bei dir z.B.
    [#".*_Fenster":state:"open"]
    bzw.
    [#".*_Tuer":state:"open"]

      Thomas Krebs · 4. Februar 2021 um 13:29

      Hallo Shojo,

      ich habe das geändert aber ich bekomme es nicht zum laufen. Ich habe auch dann noch das Reading geändert aber klappt leider auch nicht. Hast Du noch eine Idee?

      ([#“.*_Tuer“:dwIsOpened:“1″] > 0)\
      (\
      set $SELF openWindowsCount [#“.*_Tuer“:dwIsOpened:“1″],\
      set $SELF openWindowsState open\
      )\
      DOELSE\
      (\
      set $SELF openWindowsCount 0,\
      set $SELF openWindowsState closed\
      )\

      Gruß Thomas

        Thomas Krebs · 4. Februar 2021 um 16:50

        Hallo Shojo,

        ich habe dann doch hinbekommen. Es sieht jetzt bei mir so aus

        ([#“.*_Tuer“:dwIsOpened:“1″] >0)
        (
        set $SELF openWindowsCount [#“.*_Tuer“:dwIsOpened:“1″],
        set $SELF openWindowsState open
        )
        DOELSE
        (
        set $SELF openWindowsCount 0,
        set $SELF openWindowsState closed
        )

        VG Thomas

Jan · 24. Januar 2020 um 11:22

Dumme Frage wahrscheinlich, aber ich bin noch nicht so der Freak:

Was muss ich denn jezt noch machen, damit er das auf meine spezifischen Kontakte anwendet? Meine Device heißen „Kontakt_Haustuer“ „Kontakt_Bad“.

Kleiner Hinweis wäre super – Ansonsten klappt alles super!

    Shojo · 27. Januar 2020 um 11:00

    Moin Jan,

    du musst die Regex in den DoIf auf deiner Bennenung anpassen
    Aus
    [#".*\.Sensor\.Fenster":state:"open"]
    wird dann z.B.
    [#"Kontakt_.*":state:"open"]

Dirk Scholz · 18. Juni 2019 um 08:24

wenn ich den code in fhem eingebe kommt folgende fehlermeldung :

Monitoring.DOIF.Fenster DOIF: expected DOELSEIF or DOELSE: \ (\ set Monitoring.DOIF.Fenster openWindowsCount [#“.*\.Sensor\.Fenster“:state:“open“],\ set Monitoring.DOIF.Fenster openWindowsState open\ )\ DOELSE\ (\ set Monitoring.DOIF.Fenster openWindowsCount 0,\ set Monitoring.DOIF.Fenster openWindowsState closed\ )\

was mache ich falsch ?

    Shojo · 18. Juni 2019 um 08:29

    Moin Dirk,

    wo hast DU den das Define eingefügt?
    Denn diese muss als „Multiliner“ übergeben werden.

    Gruß
    Dennis

      Dirk Scholz · 14. Juli 2019 um 18:09

      wie mache ich das als multiliner ? ich will die config ungern händisch editieren

        Shojo · 18. Juli 2019 um 20:44

        Das macht man mit dem Plus neben der Eingabezeile.

Schreibe einen Kommentar

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.