Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Einschaltdauer

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Einschaltdauer

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

      Bei jedem Schalter gibt es ja on-time, welche ich über ein Skript auf 600 setze, also 600 Sekunden.

      Nach 600 Sekunden schaltet das Licht auch wieder aus, soweit so gut.

      Ich möchte aber nun wissen wie lange dass Licht schon an ist,bzw. wie lange das Licht noch leuchtet von den 600 Sekunden.

      Ist dass auch gespeichert und kann ich das Abrufen? Oder müsste ich dies errechnen?

      Sprich beim Skript automatisch einen Zähler setzten, welcher dann von 600 im Sekundentakt runterzählt.
      212_schalter_1.jpg

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        @HKF8770:

        Oder müsste ich dies errechnen? `
        Ja.

        Die ON_TIME wird innerhalb des Aktors ausgewertet.

        1 Reply Last reply Reply Quote 0
        • H
          HKF8770 last edited by

          Danke Paul…dachte es mir schon aber fragen koststet ja nichts

          1 Reply Last reply Reply Quote 0
          • P
            Phantomio last edited by

            Hallo,

            falls es für Dich oder jemand anderen noch Interessant ist.

            So habe ich es gelöst:

            ! ````
            createState('BadFensterLinksZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Bad Fenster Links"});
            createState('BadFensterLinksOffen.Tag', 0, {read: true, write: true, type: 'number', name: "Bad Fenster Links Offen"});
            createState('HaustuerZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Haustuer"});
            createState('HaustuerOffen.Tag', 0, {read: true, write: true, type: 'number', name: "Haustuer Offen"});

            var BadFensterLinks = "hm-rpc.0.DeineID.1.STATE"; // Bad Drehgriff Fenster links:1.STAT
            var BadFensterLinksOffen = "javascript.0.BadFensterLinksOffen.Tag"; // Bad Fenster LinksOffen
            var Haustuer = "hm-rpc.0.DeineID.1.STATE"; // Haustuer:1.STATE
            var HaustuerOffen = "javascript.0.HaustuerOffen.Tag"; // Haustuer Offen

            ! on ({id: BadFensterLinks, val: 1}, fBadFensterLinksAuf);
            on ({id: BadFensterLinks, val: 2}, fBadFensterLinksAuf);
            on ({id: Haustuer, change: "gt"}, fHaustuer);
            on ({id: HaustuerOffen, change: "any"}, fHaustuerOffen);
            ! function fBadFensterLinksAuf (){
            setState("javascript.0.BadFensterLinksZaehler.Tag", ++getState("javascript.0.BadFensterLinksZaehler.Tag").val);
            newvalue = Number(getState("javascript.0.BadFensterLinksOffen.Tag").val);
            newvalue = newvalue + 0.01;
            newvalue = newvalue.toFixed(2);
            setState("javascript.0.BadFensterLinksOffen.Tag", newvalue);
            }
            ! function fBadFensterLinksOffen (){
            if (getState(BadFensterLinks).val !== 0){
            newvalue = Number(getState("javascript.0.BadFensterLinksOffen.Tag").val);
            newvalue = newvalue + 0.10;
            newvalue = newvalue.toFixed(2); // subtraktion beider Werte
            setStateDelayed ("javascript.0.BadFensterLinksOffen.Tag", newvalue, 6000);
            }
            }
            ! function fHaustuer (){
            setState("javascript.0.HaustuerZaehler.Tag", ++getState("javascript.0.HaustuerZaehler.Tag").val);
            newvalue = Number(getState("javascript.0.HaustuerOffen.Tag").val);
            newvalue = newvalue + 0.01;
            newvalue = newvalue.toFixed(2);
            setState("javascript.0.HaustuerOffen.Tag", newvalue);
            }
            ! function fHaustuerOffen(){
            if (getState(Haustuer).val === true){
            newvalue = Number(getState("javascript.0.HaustuerOffen.Tag").val);
            newvalue = newvalue + 0.10;
            newvalue = newvalue.toFixed(2);
            setStateDelayed ("javascript.0.HaustuerOffen.Tag", newvalue, 6000);
            }
            }
            ! ````
            So in der Art habe ich es auch schon direkt auf der CCU2 gelöst.

            Bad ist eine Drehriffkontakt von Homematic (Zustand 0, 1 , 3 je nach dem ob zu offen oder gekippt)

            Haustür ein Funk Fenster Kontakt Magnetkontakt von Homematic (true, false Zustand)

            Die eine Variable zählt die Anzahl der Öffnungen.

            Die andere ca. die Zeit (Nicht hundertprozentig, aber ich denke für die meisten Anwendungen sollte es reichen.

            Löst ein Kontakt aus, greift durch das hochzählen der Variable die zweite Funktion z.B. fHaustuerOffen

            Ach ja nicht vergessen den Zähler nachts wieder zu reseten :shock:

            ! schedule("0 0 * * *", function () { log('Schedule Aktion Tuer Fenster Kontakte Zaehler reset 00:00 Uhr'); setState("javascript.0.BadFensterLinksZaehler.Tag", 0); setState("javascript.0.BadFensterLinksOffen.Tag", 0); setState("javascript.0.HaustuerZaehler.Tag", 0); setState("javascript.0.HaustuerOffen.Tag", 0); }); !
            Das ganze kann bestimmt durch globale Funktionen noch weiter zusammengefasst werden, da ich aber Blutiger Anfänger / Hobbyprogrammierer bin,

            löse ich es oftmals nach dem KIS (KEEP IT SIMPLE) Prinzip :lol: :lol: :lol:

            Gruß

            Phantomio

            1 Reply Last reply Reply Quote 0
            • P
              pix last edited by

              Hallo Phantomio,

              interessanter Ansatz, die Zeit zu messen: Beim Öffnen der Tür wird nach 6s ein Dezimalzähler um 0.1 erhöht. Die Erhöhung startet die Subscription neu und nach 6s wird wieder erhöht, usw. So kommst du auf 10s genaue Werte und die Last hält sich in Grenzen.

              Benutze im Skript mehr idVariablen. Du hast sie ja oben schon angelegt, dann solltest du sie unten auch verwenden

              var BadFensterLinks              = "hm-rpc.0.DeineID.1.STATE";                   // Bad Drehgriff Fenster links:1.STAT
              var BadFensterLinksOffen         = "javascript.0.BadFensterLinksOffen.Tag";         // Bad Fenster LinksOffen
              var BadFensterLinksZaehler = "javascript.0.BadFensterLinksZaehler.Tag" // Bad Fenster Links Zähler (Tag)
              var Haustuer                     = "hm-rpc.0.DeineID.1.STATE";                   // Haustuer:1.STATE
              var HaustuerOffen                = "javascript.0.HaustuerOffen.Tag";                // Haustuer Offen 
              

              und unten dann

              function fBadFensterLinksAuf (){
                  setState(BadFensterLinksZaehler, ++getState(BadFensterLinksZaehler).val); 
                  newvalue = Number(getState(BadFensterLinksOffen).val);
                  newvalue = newvalue + 0.01; 
                  newvalue = newvalue.toFixed(2);
                  setState(BadFensterLinksOffen", newvalue); 
              }
              ...
              
              ````So kannst du später leichter neue Objekte einbauen oder die Struktur deiner Objekte ändern ohne groß am Skript zu basteln.
              
              Gruß
              
              Pix
              
              PS:
              

              on ({id: BadFensterLinks, val: 1}, fBadFensterLinksAuf);
              on ({id: BadFensterLinks, val: 2}, fBadFensterLinksAuf);

              on ({id: BadFensterLinks, valGe: 1}, fBadFensterLinksAuf); // größer oder gleich 1

              1 Reply Last reply Reply Quote 0
              • P
                Phantomio last edited by

                Hey Pix,

                danke für die Tipps 😄

                Ich bin für jeden Tipp dankbar.

                Gerade wenn diese einem das Leben langfristig erleichtern.

                Werde meine Scripte demnächst mal umbauen.

                Gruß

                Phantomio

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

                Support us

                ioBroker
                Community Adapters
                Donate

                723
                Online

                31.7k
                Users

                79.7k
                Topics

                1.3m
                Posts

                4
                6
                1570
                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