Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Script Umsetzung für das "Badewannen"-Prinzip

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Script Umsetzung für das "Badewannen"-Prinzip

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

      Liebe Leute,

      im Homematic Forum wurde an manchen Stellen schon über das "Badewannen"- diskutiert, das speziell bei Anwesenheiten, bzw bei Bewegungsmeldern angewendet wird.

      Funktioniert so (Beispiel Bewegungsmelder in der Garage)

      • jedes Mal wenn eine Bewegung erkannt wird, wird zu einer Variablen z.B. 10 addiert.

      • solange die Variable nicht kleiner, gleich 0 ist werden alle 5 Sekunden wieder z.B. 2 subtrahiert

      • ist die Variable größer als 0 ist das Licht an, bei kleiner, gleich 0 aus.

      So wird reges Treiben im Carport dazu führen, dass das Licht länger ein bleibt, als wenn nur die Katze mal kurz vorbei schleicht.

      Nur - wie setzt man sowas programmtechnisch sinnvoll um? Ein Script via Schedule alle 5 Sekunden zu starten ist ja eigentlich ein Overkill wenn es 23 Stunden am Tag nicht gebraucht wird. Aber wie aktiviere ich das Badewannen Programm bei Bedarf = die erste Bewegung wird erkannt oder die Variable ist noch nicht kleiner, gleich 0 und lass' von meiner Variablen einen Wert wieder abziehen?

      Liebe Grüße

      tom

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

        Hallo,

        ich würde das mit Zeitverzögerungen lösen:

        Dein Script startet immer bei Bewegung erkannt.

        Beim ersten mal setzt es eine Variable auf ein 1 und schalter die Lampe an.

        Dann start des löschen Skriptes Zeitverzögert um 25 Sekunden mit Parameter 1.

        Bewegung innerhalb 25 Sekunden erkannt:

        Variable auf 2 setzten. Start Löschenskript mit Parameter 2 in 50 Sekunden.

        Wird jetzt das Löschenskript aufgerufen mit Parameter eins, weiss es dass es nichts zu tun hat,

        da die Variable auf zwei steht.

        Wird das Löschenskript mit Parameter 2 aufgerufen, dann das Licht ausgeschalter und die Variable auf 0 gesetzt.

        Beim Bewegungsmelder würde ich noch eine Triggerung alle max. 5 Sekunden einstellen.

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

          …OK, das ist ein guter Lösungsansatz...darauf wäre ich nicht gekommen.

          Danke!

          tom

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

            Hallo,

            ich mache das seit gut einem Jahr. Bisher werte ich die Daten nicht aus, es läuft einfach so mit.

            Pro Raum werden zwei States angelegt:
            <list type="lower-alpha">4. Bewegung zeigen und

            1. Bewegung zaehlen. Die Wohnung gilt zusätzlich als ein Raum, der alle BWM einbezieht.

            Bedeutung:
            <list type="lower-alpha">4. Bewegung zeigen ist für VIS. Die Variable wird bei Bewegung auf true gesetzt, nach 10s wieder auf false. Somit kann ich in VIS über die Sichtbarkeit eines Widgets eine bemerkte Bewegung anzeigen lassen. Ein weiterer Taster in VIS dient zum vorzeitigen Setzen er Variable auf false (also zum Ausblenden).

            1. Bewegung zaehlen ist ein Counter, der Pro Auslösung eins hochzählt und um Mitternacht auf 0 gesetzt wird. Für den Abluss der Badewanne wird zum Beispiel im Kinderzimmer per schedule alle 2 Minuten eins heruntergezählt.
              261_bildschirmfoto_2017-01-02_um_19.55.15.jpg

            ! ````
            /* Bewegungen zaehlen
            ! für hofi77 http://forum.iobroker.net/viewtopic.php?f=21&t=1703#p14520
            ! erstellt: 14.11.2015 von Pix
            04.12.2015 nach Räumen gegliedert und von VIS abgekoppelt (Ordnerstruktur)
            21.12.2015 WC hinzugefügt
            17.06.2016 Büro in Kinderzimmer umbenannt
            /
            ! /
            #############################################################################

            ganze Wohnung (Count Motion wird von anderen Räumen mit hochgezählt)

            */
            createState('Bewegung.Wohnung.zeigen', false, {
            type: 'boolean',
            name: 'Bewegung in der Wohnung in VIS anzeigen',
            desc: 'Steuervariable für VIS Widget Sichtbarkeit'
            });

            ! createState('Bewegung.Wohnung.zaehlen', 0, {
            type: 'number',
            name: 'Zahl der Bewegungen in der Wohnung',
            desc: 'Counter für Auslösungen aller Bewegungsmelder in der Wohnung'
            });
            ! var idWohnung_CountMotion = 'Bewegung.Wohnung.zaehlen',
            idWohnung_ShowMotion = 'Bewegung.Wohnung.zeigen';
            ! // alle Bewegungsmelder der Wohnung
            $('channel[state.id=.MOTION]').on(function (obj) {
            if (obj.state.val) { // Wenn Bewegung erkannt
            setState(idWohnung_CountMotion, ++getState(idWohnung_CountMotion).val); // eins hochzählen
            setState(idWohnung_ShowMotion, true); // Steuerung VIS-Widget Sichtbarkeit auf wahr
            setStateDelayed(idWohnung_ShowMotion, false, 10000); // nach 10.000 ms wieder ausblenden
            } // Ende Bewegung erkannt
            });
            ! // ab 03.1.16 wieder jede Minute
            schedule('
            /1 * * * ', function () {
            var counter_wohnung = getState(idWohnung_CountMotion).val;
            if (counter_wohnung > 0) {
            setState(idWohnung_CountMotion, --counter_wohnung);
            }
            });
            ! /
            #############################################################################

            Kinderzimmer (1x PIR)

            */
            createState('Bewegung.Kinderzimmer.zeigen', false, {
            read: true,
            write: true,
            type: 'boolean',
            name: 'Bewegung im Kinderzimmer in VIS anzeigen',
            desc: 'Steuervariable für VIS Widget Sichtbarkeit'
            });

            ! createState('Bewegung.Kinderzimmer.zaehlen', 0, {
            read: true,
            write: true,
            type: 'number',
            name: 'Zahl der Bewegungen im Kinderzimmer',
            desc: 'Counter für Auslösungen des Bewegungsmelders im Kinderzimmer'
            });
            ! var idKinderzimmer_Bewegungsmelder = 'hm-rpc.0.GEQ0007961.1.MOTION'/IR Büro.MOTION/,
            idKinderzimmer_CountMotion = 'Bewegung.Kinderzimmer.zaehlen',
            idKinderzimmer_ShowMotion = 'Bewegung.Kinderzimmer.zeigen';
            ! on({
            id: idKinderzimmer_Bewegungsmelder,
            val: true
            }, function (obj) {
            if (obj.state.val) {
            var counter_kinderzimmer = getState(idKinderzimmer_CountMotion).val; // bisherige Zahl aus Variable einlesen
            setState(idKinderzimmer_CountMotion, ++counter_kinderzimmer); // eins hochzählen
            setState(idKinderzimmer_ShowMotion, true); // Steuerung VIS-Widget Sichtbarkeit auf wahr
            setStateDelayed(idKinderzimmer_ShowMotion, false, 10000); // nach 10.000 ms wieder ausblenden
            }
            });
            ! schedule('*/2 * * * ', function () {
            var counter_kinderzimmer = getState(idKinderzimmer_CountMotion).val;
            if (counter_kinderzimmer > 0) {
            setState(idKinderzimmer_CountMotion, --counter_kinderzimmer);
            }
            });
            ! /
            #############################################################################

            Wohnzimmer (1x PIR)

            */
            createState('Bewegung.Wohnzimmer.zeigen', false, {
            read: true,
            write: true,
            type: 'boolean',
            name: 'Bewegung im Wohnzimmer in VIS anzeigen',
            desc: 'Steuervariable für VIS Widget Sichtbarkeit'
            });

            ! createState('Bewegung.Wohnzimmer.zaehlen', 0, {
            read: true,
            write: true,
            type: 'number',
            name: 'Zahl der Bewegungen im Wohnzimmer',
            desc: 'Counter für Auslösungen des Bewegungsmelders im Wohnzimmer'
            });
            ! var idWohnzimmer_Bewegungsmelder = "hm-rpc.0.IEQ0374891.1.MOTION"/IR Wohnzimmer.MOTION/,
            idWohnzimmer_CountMotion = 'Bewegung.Wohnzimmer.zaehlen',
            idWohnzimmer_ShowMotion = 'Bewegung.Wohnzimmer.zeigen';
            ! on({
            id: idWohnzimmer_Bewegungsmelder,
            val: true
            }, function (obj) {
            var counter_wohnzimmer = getState(idWohnzimmer_CountMotion).val; // bisherige Zahl aus Variable einlesen
            setState(idWohnzimmer_CountMotion, ++counter_wohnzimmer); // eins hochzählen
            setState(idWohnzimmer_ShowMotion, true); // Steuerung VIS-Widget Sichtbarkeit auf wahr
            setStateDelayed(idWohnzimmer_ShowMotion, false, 10000); // nach 10.000 ms wieder ausblenden
            });
            ! // ab 19.12. mal alle 2min
            schedule('*/2 * * * ', function () {
            var counter_wohnzimmer = getState(idWohnzimmer_CountMotion).val;
            if (counter_wohnzimmer > 0) {
            setState(idWohnzimmer_CountMotion, --counter_wohnzimmer);
            }
            });
            ! /
            #############################################################################

            WC (1x PIR)

            */
            createState('Bewegung.WC.zeigen', false, {
            read: true,
            write: true,
            type: 'boolean',
            name: 'Bewegung im WC in VIS anzeigen',
            desc: 'Steuervariable für VIS Widget Sichtbarkeit'
            });

            ! createState('Bewegung.WC.zaehlen', 0, {
            read: true,
            write: true,
            type: 'number',
            name: 'Zahl der Bewegungen im WC',
            desc: 'Counter für Auslösungen des Bewegungsmelders im WC'
            });
            ! var idWC_Bewegungsmelder = "hm-rpc.0.LEQ0643126.1.MOTION"/IR WC.MOTION/,
            idWC_CountMotion = 'Bewegung.WC.zaehlen',
            idWC_ShowMotion = 'Bewegung.WC.zeigen';
            ! on({
            id: idWC_Bewegungsmelder,
            val: true
            }, function (obj) {
            var counter_wc = getState(idWC_CountMotion).val; // bisherige Zahl aus Variable einlesen
            setState(idWC_CountMotion, ++counter_wc); // eins hochzählen
            setState(idWC_ShowMotion, true); // Steuerung VIS-Widget Sichtbarkeit auf wahr
            setStateDelayed(idWC_ShowMotion, false, 10000); // nach 10.000 ms wieder ausblenden
            });
            ! // ab 19.12. mal alle 2min
            schedule('*/2 * * * ', function () {
            var counter_wc = getState(idWC_CountMotion).val;
            if (counter_wc > 0) {
            setState(idWC_CountMotion, --counter_wc);
            }
            });
            ! /
            #############################################################################

            Reset

            */

            ! // Mitternacht Zähler zurücksetzen / ggf. mit Nachtruhe zurücksetzen
            schedule('0 0 * * *', function () {
            //setState(idWohnung_CountMotion, 0);
            //setState(idKinderzimmer_CountMotion, 0);
            //setState(idWohnzimmer_CountMotion, 0);
            });

            Die Küche habe ich noch gar nicht mit drin (da sind zwei Bewegungsmelder). Der "Abfluss" für die Wohnung passiert minütlich.
            
            Für die Auswertung sollte man natürlich die "zählen"-Datenpunkte mit History loggen. Ein Durchschnittswert der letzten Stunde/des letzten Tags von 0 kann dann auf Abwesenheit hindeuten.
            
            Wie gesagt, die Auswertung habe ich noch nicht gemacht.
            
            Gruß
            
            Pix
            1 Reply Last reply Reply Quote 0
            • etv
              etv last edited by

              @pix:

              Hallo,

              ich mache das seit gut einem Jahr. Bisher werte ich die Daten nicht aus, es läuft einfach so mit.

              Pro Raum werden zwei States angelegt:
              <list type="lower-alpha">4. Bewegung zeigen und

              1. Bewegung zaehlen. Die Wohnung gilt zusätzlich als ein Raum, der alle BWM einbezieht.

              Bedeutung:
              <list type="lower-alpha">4. Bewegung zeigen ist für VIS. Die Variable wird bei Bewegung auf true gesetzt, nach 10s wieder auf false. Somit kann ich in VIS über die Sichtbarkeit eines Widgets eine bemerkte Bewegung anzeigen lassen. Ein weiterer Taster in VIS dient zum vorzeitigen Setzen er Variable auf false (also zum Ausblenden).

              1. Bewegung zaehlen ist ein Counter, der Pro Auslösung eins hochzählt und um Mitternacht auf 0 gesetzt wird. Für den Abluss der Badewanne wird zum Beispiel im Kinderzimmer per schedule alle 2 Minuten eins heruntergezählt. `

              Servus pix,

              danke für das tolle Script + Erklärung! DIe Idee mit der Anzeige auf VIS ist auch eine gute Idee.

              Eine Frage hab ich noch dazu: der Schedule-Teil wird dann ja eigentlich alle zwei Minuten aufgerufen auch wenn die Variable 0 ist, oder? Wenn nein, fein - wenn ja, kann man das dann mit einem clearSchedule abfangen und wieder stoppen solange die Variable auf 0 steht?

              Liebe Grüße

              tom

              1 Reply Last reply Reply Quote 0
              • F
                Fitti last edited by

                Hmmm, aber ist den Pixs Lösung das Gleiche wie die Thread-Frage?

                Denn bei pix wird ein Bewegungszähler verwendet.

                Tom hingegen will doch eine längere Verzögerung bei mehreren Bewegungen.

                Ich würde es so für mich mit einem Skript lösen:

                1.) Ich definiere eine Info-Variable 'var_counter=0;'
                2.) Starte eine subscripten 'on', die auf den/die BWM (BeWegungsMelder) triggert.
                3.) Addiere var_counter=var_counter+10;
                	3a.) while (solange) var_counter => 2 ist...
                		3ab.) starte function mit SetTimeout auf 5000ms. Diese Funktion subtrahiert 2 : var_counter=var_counter-2
                	3b.) else (ansonsten) breche die subscripten ab (unsubscribe).
                

                So ist alles schön zusammen und keine Asynchronität, wenn doch mal ein Skript ausversehen aus ist. Dann klappt das nämlich alles nicht mehr.

                Übrigens: Machen die Homematic BWM das nicht von alleine, wenn man den richtigen Modus einstellt, oder?

                So long,

                Fitti

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

                  @Fitti:

                  Hmmm, aber ist den Pixs Lösung das Gleiche wie die Thread-Frage?

                  Denn bei pix wird ein Bewegungszähler verwendet.

                  Tom hingegen will doch eine längere Verzögerung bei mehreren Bewegungen.

                  Ich würde es so für mich mit einem Skript lösen:

                  1.) Ich definiere eine Info-Variable 'var_counter=0;'
                  2.) Starte eine subscripten 'on', die auf den/die BWM (BeWegungsMelder) triggert.
                  3.) Addiere var_counter=var_counter+10;
                  	3a.) while (solange) var_counter => 2 ist...
                  		3ab.) starte function mit SetTimeout auf 5000ms. Diese Funktion subtrahiert 2 : var_counter=var_counter-2
                  	3b.) else (ansonsten) breche die subscripten ab (unsubscribe).
                  

                  So ist alles schön zusammen und keine Asynchronität, wenn doch mal ein Skript ausversehen aus ist. Dann klappt das nämlich alles nicht mehr.

                  Übrigens: Machen die Homematic BWM das nicht von alleine, wenn man den richtigen Modus einstellt, oder?

                  So long,

                  Fitti `
                  Servus Fitti,

                  deine Idee schaut noch einfacher aus.

                  Ja die Melder im dynamischen Mode machen sowas ähnliches…ich bin gerade bei der Installation des ganzen Systems im Carport und kann daher noch nicht genau sagen, wie das nun tut.

                  Auf jeden Fall hängen die Bewegungsmelder nicht direkt an den Aktoren, sondern es wird alles über die CCU gesteuert.

                  Grund warum die Verzögerung egal ist:

                  Beim Rausgehen aus dem Haus ins Carport geht das Licht mit dem Öffnen der Tür an, bzw eben mit Verzögerung aber bis man durch die Tür ist ist auch schon das Licht an und beim Heimkommen mit dem Auto wird das Licht schon von weiter weg via Fernbedienung gestartet.

                  D.h. ich möchte mit den beiden Bewegungsmeldern quasi nur steuern, dass man draußen dann nie im Dunkeln steht und das Licht aber auch nicht zu lange brennt.

                  Weiters hab ich die Melder so montiert, dass die rumschleichenden Katzen eigentlich nicht dedektiert werden sollten, wenn aber doch (weil die Autos nicht da sind und dann etwas "mehr Boden" dedektiert werden kann) und es folgt keine weitere Bewegung, dann ist das Licht auch gleich wieder aus.

                  So der Plan 😉

                  Liebe Grüße

                  Tom

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

                    Hallo

                    Ich habe mal hier

                    http://forum.iobroker.net/viewtopic.php … 654#p45130

                    ein Beispiel gepostet.

                    Grüße

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

                      ….aja, super - danke dir!!

                      Ich bin eh noch am Werkeln wie ich das nun einsetzen werde/soll/möchte.

                      Hab nun auch zwei Foscam FI9900P im Einsatz die ich da auch irgendwie mitsteuern möchte und muss mir alles noch auf Sinnhaftigkeit durch denken 😉

                      Liebe Grüße

                      tom

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

                        @etv:

                        …muss mir alles noch auf Sinnhaftigkeit durch denken 😉 `
                        Das "Badewannenprinzip" macht nicht überall Sinn.

                        Bei mir ist es so etwas wie eine Nachkontrolle.

                        Wenn alles normal läuft, gilt das Prinzip, der Letzte macht das Licht aus.

                        Ich habe aber Bereiche, die von mehreren betreten werden und niemand so wirklich weis ob er der Letzte ist.

                        Da ist es schon mal vorgekommen, dass alles über Nacht oder schlimmer über's Wochenende an blieb.

                        Gegen meine eigene Schusseligkeit, stetzte ich das BWP auch in meinem Werkzeug-/Bastelkeller ein. :roll:

                        Sinnvolle Möglichkeiten gibt es genug.

                        Grüße

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

                          @etv:

                          @pix:

                          Hallo,

                          ich mache das seit gut einem Jahr. Bisher werte ich die Daten nicht aus, es läuft einfach so mit.

                          Pro Raum werden zwei States angelegt:
                          <list type="lower-alpha">4. Bewegung zeigen und

                          1. Bewegung zaehlen. Die Wohnung gilt zusätzlich als ein Raum, der alle BWM einbezieht.

                          Bedeutung:
                          <list type="lower-alpha">4. Bewegung zeigen ist für VIS. Die Variable wird bei Bewegung auf true gesetzt, nach 10s wieder auf false. Somit kann ich in VIS über die Sichtbarkeit eines Widgets eine bemerkte Bewegung anzeigen lassen. Ein weiterer Taster in VIS dient zum vorzeitigen Setzen er Variable auf false (also zum Ausblenden).

                          1. Bewegung zaehlen ist ein Counter, der Pro Auslösung eins hochzählt und um Mitternacht auf 0 gesetzt wird. Für den Abluss der Badewanne wird zum Beispiel im Kinderzimmer per schedule alle 2 Minuten eins heruntergezählt. `

                          Servus pix,

                          danke für das tolle Script + Erklärung! DIe Idee mit der Anzeige auf VIS ist auch eine gute Idee.

                          Eine Frage hab ich noch dazu: der Schedule-Teil wird dann ja eigentlich alle zwei Minuten aufgerufen auch wenn die Variable 0 ist, oder? Wenn nein, fein - wenn ja, kann man das dann mit einem clearSchedule abfangen und wieder stoppen solange die Variable auf 0 steht?

                          Liebe Grüße

                          tom `
                          Hallo Tom,

                          der Schedule Teil wird planmäßig ausgeführt, deshalb ist es ein Schedule. Wenn die Variable schon 0 ist, wird nur nichts mehr abgezogen. Ich weiss nicht, ob ein schedule oder ein Timeout mehr Ressourcen verbraucht (in diesem Fall geht es um fast gar keine Ressoucen). Aber ein Schedule ist doch leichter zu handhaben, oder nicht? Es ist nur eine Vermutung, aber wenn du wirklich deine Ressourcen minimieren willst, dann kannst natürlich auch einen anderen Schedule verwenden, der schon vom System gebaut wurde. Zum Beispiel bei jeder Abfrage des TV-Programms oder bei jeder Aktualisierung der Temperatursensoren oder oder oder.

                          @Fitti:

                          So ist alles schön zusammen und keine Asynchronität, wenn doch mal ein Skript ausversehen aus ist. Dann klappt das nämlich alles nicht mehr. ` Man kann natürlich wieder ein anderes Skript zur Kontrolle des eigentlichen Skriptes verwenden. Ich glaube, das Skript läuft schon, wenn es mal an ist.
                          @Fitti:

                          Übrigens: Machen die Homematic BWM das nicht von alleine, wenn man den richtigen Modus einstellt, oder? ` Das sehe ich auch so. Für mich ist das Badenwannen Skript dort interessant, wo nur mehrere Bewegungsmelder zusammen eindeutig eine Anwesenheit feststellen/Abwesenheit ausschließen können.

                          Gruß

                          Pix

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

                            Servus Pix,

                            danke für die Tipps. Ja es ist wie du schreibst erst sinnvoll bei mehreren Meldern - das ist bei uns im Carport der Fall…jo...Mal weiter durchdenken das Ganze. Jetzt ist es eh viiiiiieeeeelen zu kalt um die Lampen zu montieren 😄

                            Liebe Grüße

                            tom

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            1.1k
                            Online

                            31.7k
                            Users

                            79.7k
                            Topics

                            1.3m
                            Posts

                            5
                            12
                            2256
                            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