Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Shelly Door/Window 2 ( gelöst )

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    SOLVED Shelly Door/Window 2 ( gelöst )

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stefu87_CH last edited by stefu87_CH

      Hallo zusammen

      Wer von euch verwendet die Shelly Door / Window 2 Sensoren für die Fensterüberwachung?

      Möchte gerne auf der Visu anzeigen, wie lange das Fenster schon offen ist. Habe im Moment 2 Fenster die Überwacht werden, und diese möchte ich gerne angezeigt haben. Wer weiss wie das am besten gelöst werden könnte?

      BananaJoe 1 Reply Last reply Reply Quote 0
      • S
        stefu87_CH @BananaJoe last edited by

        @bananajoe Hab es mit Blockly gelöst und scheint zu funktionieren.

        92274e97-8680-4292-8c4e-932874f5ad10-grafik.png

        1 Reply Last reply Reply Quote 0
        • BananaJoe
          BananaJoe Most Active @stefu87_CH last edited by BananaJoe

          @stefu87_ch ich habe tatsächlich noch 4 Stück von denen hier im Hause kleben - und sogar noch in ioBroker eingebunden, nutze die aber nicht mehr (ZigBee funktioniert irgendwie besser/schneller).

          Aber ... das ist ja kein Shelly Door/Window 2 Problem:

          Ob es offen oder geschlossen ist ist ja im Datenpunkt

          shelly.0.SHDW-2#D8BFC01A72AE#1.sensor.door
          

          hinterlegt (dann halt mit deiner ID)

          Die Einschaltdauer - da nutze ich etwas mit meinen Tasmota-Steckdosen, und zwar wie folgt:
          Ich hab in JavaScript einen Trigger auf den Datenpunkt mit Ein/Aus, hier wäre das dann der .sensor.door
          Der Trigger schreibt beim Einschalten die aktuelle Zeit als UNIXTIME weg:

          i_global_unixtimeSwitchedOn = Math.floor(Date.now() / 1000);
          setState("0_userdata.0.tmp.unixtimeSwitchedOn", i_global_unixtimeSwitchedOn, true);
          

          UNIXTIME ist die aktuelle Zeit als Sekunden seit dem 1.1.1970. Da kann man nämlich prima mit Rechnen.
          Schalte ich wieder aus so wird wieder die aktuelle Zeit ermittelt und dann einfach subtrahiert:

          i_global_unixtimeSwitchedOff = Math.floor(Date.now() / 1000);
          setState("0_userdata.0.tmp.unixtimeSwitchedOff", i_global_unixtimeSwitchedOff, true);
          i_Duration = i_global_unixtimeSwitchedOff - i_global_unixtimeSwitchedOn;
          s_Duration = ConvertTimeHumanReadable(i_Duration);
          

          ConvertTimeHumanReadable() ist dabei eine Funktion welche die Sekunden in Stunden, Minuten, Sekunden etc. umrechnet:

          // Wandelt Sekunden in Tage/Stunden/Minuten/Sekunden um:
          function ConvertTimeHumanReadable(i_seconds) {
            var i_days     = Math.floor(i_seconds / (24*60*60));
                i_seconds -= i_days    * (24*60*60);
            var i_hours    = Math.floor(i_seconds / (60*60));
                i_seconds -= i_hours   * (60*60);
            var i_minutes  = Math.floor(i_seconds / (60));
                i_seconds -= i_minutes * (60);
            return ((0<i_days)?(i_days+"d "):"")+((0<i_hours)?(i_hours+"h "):"")+((0<i_minutes)?(i_minutes+"m "):"")+((0<i_seconds)?(i_seconds+"s"):"");
          }
          

          Die habe ich bestimmt irgendwo im Internet gefunden ...

          Damit hätte man schon mal die Gesamtzeit ermittelt.
          Meine Tasmota-Steckdosen senden einmal die Minute Ihren Status - darauf habe ich wieder einen extra Trigger der dann auch immer gleich die aktuelle Einschaltzeit errechnet und in einen extra Datenpunkt schreibt:

          // Ok, wo schon mal dabei sind können wir auch gleich die aktuelle Laufzeit errechenen und wegschreiben
          i_global_CurrentPowerOnTimeSeconds = Number(Math.floor(Date.now() / 1000) - i_global_unixtimeSwitchedOn);
          setState("0_userdata.0.tmp.Time-CurrentPowerOnTimeSeconds", i_global_CurrentPowerOnTimeSeconds, true);
          i_global_CurrentPowerOnTimeH = ConvertTimeHumanReadable(i_global_CurrentPowerOnTimeSeconds);
          setState("0_userdata.0.tmp.Time-CurrentPowerOnTimeH", i_global_CurrentPowerOnTimeH, true);
          

          Das könnte man natürlich auch per Zeitplan machen. Den Datenpunkt könntest du dann in der VIS verwenden. Wenn das Gerät ausgeschalte setze ich den immer auf 0 (weil läuft ja nicht).

          Verzeih das ich das hier nur so zusammenkopiert habe, das ganze ist Teil eines großen anderen Skript, so Plug&Play habe ich das nicht fertig.
          In Blockly müsste man das auch bauen können, im Datum und Zeit Bereich bekommt man auch die aktuelle Zeit als Sekunden

          S 1 Reply Last reply Reply Quote 0
          • S
            stefu87_CH @BananaJoe last edited by

            @bananajoe Hab es mit Blockly gelöst und scheint zu funktionieren.

            92274e97-8680-4292-8c4e-932874f5ad10-grafik.png

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            940
            Online

            31.9k
            Users

            80.3k
            Topics

            1.3m
            Posts

            2
            3
            1279
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo