Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Funksteckdose per Bewegungsmelder schalten

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    895

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Funksteckdose per Bewegungsmelder schalten

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 2 Kommentatoren 1.1k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    Superdad
    schrieb am zuletzt editiert von
    #1

    Hallo,

    habe mir einen Bewegungsmelder (HM-Sec-MDIR-2) und eine Funksteckdose (HM-ES-PMSw1-PI-DN-R1) gekauft.

    Ziel ist es, den Bewegungsmelder ins Bad zu stellen und damit über die Funksteckdose die Zirkulationspumpe zu schalten.

    Dazu habe ich mir folgendes Script "zusammen geklaut".

    // isTimeInRange
    function currentDate() {
        var d = new Date();
        return new Date(d.getFullYear(), d.getMonth(), d.getDate());
    }
    function addTime(strTime) {
        var time = strTime.split(':');
        var d = currentDate();
        d.setHours(time[0]);
        d.setMinutes(time[1]);
        d.setSeconds(time[2]);
        return d;
    }
    function isTimeInRange(strLower, strUpper) {
        var now = new Date();
        var lower = addTime(strLower);
        var upper = addTime(strUpper);
        var inRange = false;
        if (upper > lower) {
            // opens and closes in same day
            inRange = (now >= lower && now <= upper) ? true : false;
        } else {
            // closes in the following day
            inRange = (now >= upper && now <= lower) ? false : true;
        }
        return inRange;
    }
    // isTimeInRange ENDE
    
    createState('Warmwasser.Trigger', false, {
        name: 'Warmwasser bei Bewegung',
        type: 'boolean'
    });
    
    var idBewegung = "hm-rpc.0.MEQ0700004.1.MOTION", // Auslösender Bewegungsmelder
        idTrigger = 'Warmwasser.Trigger';
    
    setState("hm-rpc.0.NEQ0707005.1.STATE"/*Schalter-1.STATE*/,true); //Funksteckdose einschalten
    
    on({id: idBewegung, val: true}, function (obj) {
       if ( isTimeInRange('04:30:00', '08:00:00')) setState(idTrigger, true); // Trigger auslösen
    });
    
    // Zurücksetzen vom Trigger
    schedule("1 8 * * *", function () {
        setState(idTrigger, false);
    });
    
    

    Jetzt meinen Fragen als absoluter Anfänger in JavaScript.

    Wird das Programm nur einmal in der angegebenen Zeit ausgeführt?

    Schaltet der BW die Steckdose?

    Um es einmal zu testen, wo muss ich die Zeit ändern? Zum Beispiel zwischen 08:00 und 20:00? Das rot markierte?

    on({id: idBewegung, val: true}, function (obj) {

    if ( isTimeInRange('04:30:00', '08:00:00')) setState(idTrigger, true); // Trigger auslösen

    });

    // Zurücksetzen vom Trigger

    schedule("1 8 * * *", function () {

    setState(idTrigger, false);

    Gruss Superdad

    CCU3

    iOBroker auf IntelNUC Proxmox

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      Hallo superdad,

      dein Skript schaltet die Variable bei der ersten Bewegung zwischen 4:30 Uhr und 8:00 Uhr. Um 08:01 setzt es die Variable wieder zurück.

      isTimeInRange('04:30:00', '08:00:00')
      ````liefert __true__, wenn die aktuelle Uhrzeit zwischen halb fünf und acht Uhr ist.
      

      schedule("1 8 * * *", function () {
      setState(idTrigger, false);
      });

      
      Für die Zeit zwischen 19:00 und 20:00 Uhr sollte es so aussehen:
      
      >! ````
      >! // isTimeInRange
      function currentDate() {
          var d = new Date();
          return new Date(d.getFullYear(), d.getMonth(), d.getDate());
      }
      function addTime(strTime) {
          var time = strTime.split(':');
          var d = currentDate();
          d.setHours(time[0]);
          d.setMinutes(time[1]);
          d.setSeconds(time[2]);
          return d;
      }
      function isTimeInRange(strLower, strUpper) {
          var now = new Date();
          var lower = addTime(strLower);
          var upper = addTime(strUpper);
          var inRange = false;
          if (upper > lower) {
              // opens and closes in same day
              inRange = (now >= lower && now <= upper) ? true : false;
          } else {
              // closes in the following day
              inRange = (now >= upper && now <= lower) ? false : true;
          }
          return inRange;
      }
      // isTimeInRange ENDE
      >! createState('Warmwasser.Trigger', false, {
          name: 'Warmwasser bei Bewegung',
          type: 'boolean'
      });
      >! var idBewegung = "hm-rpc.0.MEQ0700004.1.MOTION", // Auslösender Bewegungsmelder
          idTrigger = 'Warmwasser.Trigger';
      
      setState("hm-rpc.0.NEQ0707005.1.STATE"/*Schalter-1.STATE*/,true); //Funksteckdose einschalten
      
      on({id: idBewegung, val: true}, function (obj) {
         if ( isTimeInRange('19:00:00', '20:00:00')) setState(idTrigger, true); // Trigger auslösen
      });
      >! // Zurücksetzen vom Trigger
      schedule("1 20 * * *", function () {
          setState(idTrigger, false);
      });
      >! ````
      
      Gruß
      
      Pix

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        Superdad
        schrieb am zuletzt editiert von
        #3

        Danke dir für die schnelle Antwort.

        Habe ich ja mal was hin bekommen. Mit Hilfe des Forums.

        Jetzt frage ich mich aber, ob das Script nur einmal ausgeführt wird zwischen 04:30 und 08:00 Uhr?

        Ist das so richtig geschrieben?

        Und wenn ich das Script dann noch einmal zwischen 19:00 und 20:00 Uhr ausführen möchte, dann einfach?

        on({id: idBewegung, val: true}, function (obj) {
           if ( isTimeInRange('05:00:00', '06:00:00') || isTimeInRange('19:00:00', '20:00:00')) setState(idTrigger, true); // Trigger auslösen
        });
        

        Gruß

        CCU3

        iOBroker auf IntelNUC Proxmox

        1 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          Superdad
          schrieb am zuletzt editiert von
          #4

          Da mir aufgefallen ist, dass die Zirkulationspumpe jetzt von 4.30 - 8.00 Uhr durch läuft (zumindest nach meinem Verständnis als Anfänger), habe ich noch eine Ablaufzeit eingegeben.

          Hoffe, dass es so richtig ist.

          Vielleicht kann ja ein Profi mal drüber schauen?

          // isTimeInRange
          function currentDate() {
              var d = new Date();
              return new Date(d.getFullYear(), d.getMonth(), d.getDate());
          }
          function addTime(strTime) {
              var time = strTime.split(':');
              var d = currentDate();
              d.setHours(time[0]);
              d.setMinutes(time[1]);
              d.setSeconds(time[2]);
              return d;
          }
          function isTimeInRange(strLower, strUpper) {
              var now = new Date();
              var lower = addTime(strLower);
              var upper = addTime(strUpper);
              var inRange = false;
              if (upper > lower) {
                  // opens and closes in same day
                  inRange = (now >= lower && now <= upper) ? true : false;
              } else {
                  // closes in the following day
                  inRange = (now >= upper && now <= lower) ? false : true;
              }
              return inRange;
          }
          // isTimeInRange ENDE
          
          createState('Warmwasser.Trigger', false, {
              name: 'Warmwasser bei Bewegung',
              type: 'boolean'
          });
          
          var idBewegung = "hm-rpc.0.MEQ0700004.1.MOTION", // Auslösender Bewegungsmelder
              idTrigger = 'Warmwasser.Trigger';
          
          setState("hm-rpc.0.NEQ0707005.1.STATE"/*Schalter-1.STATE*/,true); //Funksteckdose einschalten
          setStateDelayed("hm-rpc.0.NEQ0707005.1.STATE", false, 10 * 60000); //Funksteckdose nach 10min. ausschalten
          
          on({id: idBewegung, val: true}, function (obj) {
             if ( isTimeInRange('04:30:00', '08:00:00')) setState(idTrigger, true); // Trigger auslösen
          });
          
          // Zurücksetzen vom Trigger
          schedule("1 8 * * *", function () {
              setState(idTrigger, false);
          });
          
          

          Gruss

          CCU3

          iOBroker auf IntelNUC Proxmox

          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            Superdad
            schrieb am zuletzt editiert von
            #5

            So hat es heute früh funktioniert.

            // isTimeInRange
            function currentDate() {
                var d = new Date();
                return new Date(d.getFullYear(), d.getMonth(), d.getDate());
            }
            function addTime(strTime) {
                var time = strTime.split(':');
                var d = currentDate();
                d.setHours(time[0]);
                d.setMinutes(time[1]);
                d.setSeconds(time[2]);
                return d;
            }
            function isTimeInRange(strLower, strUpper) {
                var now = new Date();
                var lower = addTime(strLower);
                var upper = addTime(strUpper);
                var inRange = false;
                if (upper > lower) {
                    // opens and closes in same day
                    inRange = (now >= lower && now <= upper) ? true : false;
                } else {
                    // closes in the following day
                    inRange = (now >= upper && now <= lower) ? false : true;
                }
                return inRange;
            }
            // isTimeInRange ENDE
            
            createState('Warmwasser.Trigger', false, {
                name: 'Warmwasser bei Bewegung',
                type: 'boolean'
            });
            
            var idBewegung = "hm-rpc.0.MEQ0700004.1.MOTION", // Auslösender Bewegungsmelder
                idTrigger = 'Warmwasser.Trigger';
            
            setState("hm-rpc.0.NEQ0707005.1.STATE",true); //Funksteckdose einschalten
            setStateDelayed("hm-rpc.0.NEQ0707005.1.STATE", false, 10 * 60000); //Funksteckdose nach 10min. ausschalten
            
            on({id: idBewegung, val: true}, function (obj) {
               if ( isTimeInRange('04:30:00', '08:00:00')) setState(idTrigger, true); // Trigger auslösen
            });
            
            // Zurücksetzen vom Trigger
            schedule("1 8 * * *", function () {
                setState(idTrigger, false);
            });
            
            

            Kann man das eventuell kürzer fassen?

            Gruss

            CCU3

            iOBroker auf IntelNUC Proxmox

            1 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            536

            Online

            32.6k

            Benutzer

            82.1k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe