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. JavaScript
  5. Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
27 Beiträge 3 Kommentatoren 1.6k Aufrufe 1 Watching
  • Ä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.
  • M Offline
    M Offline
    mguenther
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen,
    bastel gerade an meinem nächste Projekt und stelle meine Programme von der CCU auf ioBroker um - UND benötige Hilfe... :(
    Wir haben an 3 Hausseiten in Summe 4 Bewegungsmelder. Ich habe zusätzlich eine Variable, die es mir ermöglicht, den Bewegungsmelder zu "aktiven" bzw. zu "deaktiven". Heißt, ich werte ihn bei Deaktivierung nicht aus, er erkennt weiterhin die Bewegung.
    Wir haben einen Bewegungsmelder auf der Ost-, einen auf der Nord- und 2 auf der Westseite. Die Bewegungsmelder erzeugen bei erkannter Bewegung eine boolsche Variable true/false, wenn zusätzlich einer der beiden Grenzwerte der Helligkeit und der Elevation unterschritten wird (Programm 1).

    const idHelligkeit = 'javascript.0.Bewegungsmelder.Helligkeit'/*Helligkeit*/;
    const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
    const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
    const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
    
    const idMelderNord = 'hm-rpc.0.NEQ1544423.1.MOTION'/*Aussenlicht BW Nord:1 MOTION*/;
    const idBewegungNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
    const idBewegung_aktivNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord_Melder_aktiv'/*Bewegung Nord Melder aktiv*/;
    
    const idMelderOst = 'hm-rpc.0.NEQ1544508.1.MOTION'/*Aussenlicht BW Ost:1 MOTION*/;
    const idBewegungOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost'/*Bewegung Ost*/;
    const idBewegung_aktivOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost_Melder_aktiv'/*Bewegung Ost Melder aktiv*/;
    
    const idMelderWestNord = 'hm-rpc.0.NEQ0120731.1.MOTION'/*Aussenlicht BW WestNord:1 MOTION*/;
    const idBewegungWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
    const idBewegung_aktivWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Melder_aktiv'/*Bewegung WestNord Melder aktiv*/;
    
    const idMelderWestSued = 'hm-rpc.0.NEQ0121152.1.MOTION'/*Aussenlicht BW WestSued:1 MOTION*/;
    const idBewegungWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
    const idBewegung_aktivWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Melder_aktiv'/*Bewegung WestSued Melder aktiv*/;
    
    var helligkeit = getState(idHelligkeit).val;
    var elevation = getState(idElevation).val;
    var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
    var elevation_grenze = getState(idGrenzwertElevation).val;
    
    var melderNord = false;
    var bewegung_aktivNord =false;
    var bewegungNord = false;
    var melderOst = false;
    var bewegung_aktivOst =false;
    var bewegungOst = false;
    var melderWestNord = false;
    var melderWestSued = false;
    var bewegung_aktivWestNord =false;
    var bewegung_aktivWestSued =false;
    var bewegungWestNord = false;
    var bewegungWestSued = false;
    
    on(idMelderNord, function(obj) {
        melderNord = obj.state.val;
        bewegung_aktivNord = getState(idBewegung_aktivNord).val;
        helligkeit = getState(idHelligkeit).val;
        elevation = getState(idElevation).val;
        if ((melderNord) && (bewegung_aktivNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungNord, true, true);
        else setState(idBewegungNord, false, true);
    });
    on(idMelderWestNord, function(obj) {
        melderWestNord = obj.state.val;
        bewegung_aktivWestNord = getState(idBewegung_aktivWestNord).val;
        helligkeit = getState(idHelligkeit).val;
        elevation = getState(idElevation).val;
        if ((melderWestNord) && (bewegung_aktivWestNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestNord, true, true);
        else setState(idBewegungWestNord, false, true);
    });
    on(idMelderWestSued, function(obj) {
        melderWestSued = obj.state.val;
        bewegung_aktivWestSued = getState(idBewegung_aktivWestSued).val;
        helligkeit = getState(idHelligkeit).val;
        elevation = getState(idElevation).val;
        if ((melderWestSued) && (bewegung_aktivWestSued) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestSued, true, true);
        else setState(idBewegungWestSued, false, true);
    });
    

    Auf der Nordseite (Programm 2) haben wir keinen tatsächlichen Taster zum Ein-/Ausschalten des Außenlichtes, das wollten wir über einen virtuellen Taster in VIS später lösen.
    Habe ich so gelöst und funktioniert auch - Verbesserungsvorschläge nehme ich logisch immer an:

    //Lichtschaltung auf Nordseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
    //Möglichkeit 1: Bewegungsmelder für die Dauer von 5min
    //Möglichkeit 2: Taster bzw. virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
    const idBewegung = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
    const idLicht = 'hm-rpc.0.OEQ0248749.1.STATE'/*Gartenhaus Schalter Aussenlicht:1 STATE*/;
    const idTaster_virtu = 'javascript.0.Aussen.Bewegung_Nord_virtu_Taster'/*Bewegung Nord virtu Taster*/;
    const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
    const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
    const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
    const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
    
    var bewegung = getState(idBewegung).val;
    var helligkeit = getState(idHelligkeit).val;
    var elevation = getState(idElevation).val;
    var licht = getState(idLicht).val;
    var taster_virtu = getState(idTaster_virtu).val;
    var timer = null;
    var dauer = 300; //in Sekunden
    var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
    var elevation_grenze = getState(idGrenzwertElevation).val;
    
    function Bewegung(){
        var cnt = dauer; 
        if (bewegung) {
            if(timer) clearInterval(timer); // Stopp Timer
            timer = null;
            timer = setInterval(function() {
                cnt--;
                if(cnt <= 0) {
                clearInterval(timer);
                timer = null;
                setState(idLicht, false);
                };
            }, 1000);
            setState(idLicht, true);
        };
    };
    
    on(idBewegung, function(obj) {
        taster_virtu = getState(idTaster_virtu).val;
        bewegung = obj.state.val;
        if (!taster_virtu) Bewegung();
    });
    
    on(idTaster_virtu, function(obj){
        licht = getState(idLicht).val;
        helligkeit = getState(idHelligkeit).val;
        elevation = getState(idElevation).val;
        taster_virtu = obj.state.val;
        if (!taster_virtu) setState(idLicht, false);
        if ((helligkeit < helligkeit_grenze) || (elevation <= elevation_grenze)) {
            clearInterval(timer);
            timer = null;
            if ((!licht) && (taster_virtu))  setState(idLicht, true);
            if ((licht) && (taster_virtu)) {
                setState(idLicht, true);
            }
        }
    });
    

    Jetzt komme ich aber nicht mehr weiter. Auf der Westseite habe ich nun 2 Bewegungsmelder (WestNord und WestSued), 2 Außenlichter und 2 Wandtaster, um die Lichter separat zu steuern. Wir hätten gerne folgendes umgesetzt - ich bekomms nicht hin:

    • Bei Erkennen von Bewegung eines der beiden Melder sollen beide Lichter angehen und für den Zeitraum von x Sekunden anbleiben.
    • Bei Betätigung eines Tasters soll nur das eine zugehörige Licht angehen.
    • Bei Betätigung eines Tasters während das Licht aufgrund einer Bewegung (beide Lichter an) an ist, soll nur für das Licht der timer unterbrochen werden, zu dem der Taster gehört.
    • Bei Betätigung des virtuellen Tasters soll für beide Lichter das Licht geschaltet werden, falls timer aktiv aus Bewegungen sind, sind diese zu unterbrechen.

    Das sind meine Variablen:

    //Lichtschaltung auf Westseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
    //Möglichkeit 1: Bewegungsmelder 1 und/oder 2 für die Dauer von 5min
    //Möglichkeit 2: virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
    //Möglichkeit 3: Wandtaster an/aus - hat Vorang gegenüber Bewegungsmelder und virtueller Taster
    const idBewegung1 = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
    const idBewegung2 = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
    const idLicht1 = 'hm-rpc.4.MEQ0064673.14.STATE'/*12 7 Rest:14 STATE*/;
    const idLicht2 = 'hm-rpc.4.MEQ0064673.13.STATE'/*12 7 Rest:13 STATE*/;
    const idTaster1_1 = 'hm-rpc.4.MEQ0064673.8.PRESS_LONG'/*12 7 Rest:08 PRESS LONG*/;
    const idTaster1_2 = 'hm-rpc.4.MEQ0064673.8.PRESS_SHORT'/*12 7 Rest:08 PRESS SHORT*/;
    const idTaster2_1 = 'hm-rpc.4.MEQ0064673.7.PRESS_LONG'/*12 7 Rest:07 PRESS LONG*/;
    const idTaster2_2 = 'hm-rpc.4.MEQ0064673.7.PRESS_SHORT'/*12 7 Rest:07 PRESS SHORT*/;
    const idTaster_virtu = 'javascript.0.Aussen.Bewegung_West_virtu_Taster'/*Bewegung West virtu Taster*/;
    const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
    const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
    const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
    const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
    

    Die Ostseite hat dann die gleichen Prämissen, allerdings habe ich da einen Bewegungsmelder, einen Taster und 2 Lichter.

    Kann mir wer weiterhelfen?

    Danke
    Marcus

    paul53P 4 Antworten Letzte Antwort
    0
    • M mguenther

      Hallo Zusammen,
      bastel gerade an meinem nächste Projekt und stelle meine Programme von der CCU auf ioBroker um - UND benötige Hilfe... :(
      Wir haben an 3 Hausseiten in Summe 4 Bewegungsmelder. Ich habe zusätzlich eine Variable, die es mir ermöglicht, den Bewegungsmelder zu "aktiven" bzw. zu "deaktiven". Heißt, ich werte ihn bei Deaktivierung nicht aus, er erkennt weiterhin die Bewegung.
      Wir haben einen Bewegungsmelder auf der Ost-, einen auf der Nord- und 2 auf der Westseite. Die Bewegungsmelder erzeugen bei erkannter Bewegung eine boolsche Variable true/false, wenn zusätzlich einer der beiden Grenzwerte der Helligkeit und der Elevation unterschritten wird (Programm 1).

      const idHelligkeit = 'javascript.0.Bewegungsmelder.Helligkeit'/*Helligkeit*/;
      const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
      const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
      const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
      
      const idMelderNord = 'hm-rpc.0.NEQ1544423.1.MOTION'/*Aussenlicht BW Nord:1 MOTION*/;
      const idBewegungNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
      const idBewegung_aktivNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord_Melder_aktiv'/*Bewegung Nord Melder aktiv*/;
      
      const idMelderOst = 'hm-rpc.0.NEQ1544508.1.MOTION'/*Aussenlicht BW Ost:1 MOTION*/;
      const idBewegungOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost'/*Bewegung Ost*/;
      const idBewegung_aktivOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost_Melder_aktiv'/*Bewegung Ost Melder aktiv*/;
      
      const idMelderWestNord = 'hm-rpc.0.NEQ0120731.1.MOTION'/*Aussenlicht BW WestNord:1 MOTION*/;
      const idBewegungWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
      const idBewegung_aktivWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Melder_aktiv'/*Bewegung WestNord Melder aktiv*/;
      
      const idMelderWestSued = 'hm-rpc.0.NEQ0121152.1.MOTION'/*Aussenlicht BW WestSued:1 MOTION*/;
      const idBewegungWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
      const idBewegung_aktivWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Melder_aktiv'/*Bewegung WestSued Melder aktiv*/;
      
      var helligkeit = getState(idHelligkeit).val;
      var elevation = getState(idElevation).val;
      var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
      var elevation_grenze = getState(idGrenzwertElevation).val;
      
      var melderNord = false;
      var bewegung_aktivNord =false;
      var bewegungNord = false;
      var melderOst = false;
      var bewegung_aktivOst =false;
      var bewegungOst = false;
      var melderWestNord = false;
      var melderWestSued = false;
      var bewegung_aktivWestNord =false;
      var bewegung_aktivWestSued =false;
      var bewegungWestNord = false;
      var bewegungWestSued = false;
      
      on(idMelderNord, function(obj) {
          melderNord = obj.state.val;
          bewegung_aktivNord = getState(idBewegung_aktivNord).val;
          helligkeit = getState(idHelligkeit).val;
          elevation = getState(idElevation).val;
          if ((melderNord) && (bewegung_aktivNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungNord, true, true);
          else setState(idBewegungNord, false, true);
      });
      on(idMelderWestNord, function(obj) {
          melderWestNord = obj.state.val;
          bewegung_aktivWestNord = getState(idBewegung_aktivWestNord).val;
          helligkeit = getState(idHelligkeit).val;
          elevation = getState(idElevation).val;
          if ((melderWestNord) && (bewegung_aktivWestNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestNord, true, true);
          else setState(idBewegungWestNord, false, true);
      });
      on(idMelderWestSued, function(obj) {
          melderWestSued = obj.state.val;
          bewegung_aktivWestSued = getState(idBewegung_aktivWestSued).val;
          helligkeit = getState(idHelligkeit).val;
          elevation = getState(idElevation).val;
          if ((melderWestSued) && (bewegung_aktivWestSued) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestSued, true, true);
          else setState(idBewegungWestSued, false, true);
      });
      

      Auf der Nordseite (Programm 2) haben wir keinen tatsächlichen Taster zum Ein-/Ausschalten des Außenlichtes, das wollten wir über einen virtuellen Taster in VIS später lösen.
      Habe ich so gelöst und funktioniert auch - Verbesserungsvorschläge nehme ich logisch immer an:

      //Lichtschaltung auf Nordseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
      //Möglichkeit 1: Bewegungsmelder für die Dauer von 5min
      //Möglichkeit 2: Taster bzw. virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
      const idBewegung = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
      const idLicht = 'hm-rpc.0.OEQ0248749.1.STATE'/*Gartenhaus Schalter Aussenlicht:1 STATE*/;
      const idTaster_virtu = 'javascript.0.Aussen.Bewegung_Nord_virtu_Taster'/*Bewegung Nord virtu Taster*/;
      const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
      const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
      const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
      const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
      
      var bewegung = getState(idBewegung).val;
      var helligkeit = getState(idHelligkeit).val;
      var elevation = getState(idElevation).val;
      var licht = getState(idLicht).val;
      var taster_virtu = getState(idTaster_virtu).val;
      var timer = null;
      var dauer = 300; //in Sekunden
      var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
      var elevation_grenze = getState(idGrenzwertElevation).val;
      
      function Bewegung(){
          var cnt = dauer; 
          if (bewegung) {
              if(timer) clearInterval(timer); // Stopp Timer
              timer = null;
              timer = setInterval(function() {
                  cnt--;
                  if(cnt <= 0) {
                  clearInterval(timer);
                  timer = null;
                  setState(idLicht, false);
                  };
              }, 1000);
              setState(idLicht, true);
          };
      };
      
      on(idBewegung, function(obj) {
          taster_virtu = getState(idTaster_virtu).val;
          bewegung = obj.state.val;
          if (!taster_virtu) Bewegung();
      });
      
      on(idTaster_virtu, function(obj){
          licht = getState(idLicht).val;
          helligkeit = getState(idHelligkeit).val;
          elevation = getState(idElevation).val;
          taster_virtu = obj.state.val;
          if (!taster_virtu) setState(idLicht, false);
          if ((helligkeit < helligkeit_grenze) || (elevation <= elevation_grenze)) {
              clearInterval(timer);
              timer = null;
              if ((!licht) && (taster_virtu))  setState(idLicht, true);
              if ((licht) && (taster_virtu)) {
                  setState(idLicht, true);
              }
          }
      });
      

      Jetzt komme ich aber nicht mehr weiter. Auf der Westseite habe ich nun 2 Bewegungsmelder (WestNord und WestSued), 2 Außenlichter und 2 Wandtaster, um die Lichter separat zu steuern. Wir hätten gerne folgendes umgesetzt - ich bekomms nicht hin:

      • Bei Erkennen von Bewegung eines der beiden Melder sollen beide Lichter angehen und für den Zeitraum von x Sekunden anbleiben.
      • Bei Betätigung eines Tasters soll nur das eine zugehörige Licht angehen.
      • Bei Betätigung eines Tasters während das Licht aufgrund einer Bewegung (beide Lichter an) an ist, soll nur für das Licht der timer unterbrochen werden, zu dem der Taster gehört.
      • Bei Betätigung des virtuellen Tasters soll für beide Lichter das Licht geschaltet werden, falls timer aktiv aus Bewegungen sind, sind diese zu unterbrechen.

      Das sind meine Variablen:

      //Lichtschaltung auf Westseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
      //Möglichkeit 1: Bewegungsmelder 1 und/oder 2 für die Dauer von 5min
      //Möglichkeit 2: virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
      //Möglichkeit 3: Wandtaster an/aus - hat Vorang gegenüber Bewegungsmelder und virtueller Taster
      const idBewegung1 = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
      const idBewegung2 = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
      const idLicht1 = 'hm-rpc.4.MEQ0064673.14.STATE'/*12 7 Rest:14 STATE*/;
      const idLicht2 = 'hm-rpc.4.MEQ0064673.13.STATE'/*12 7 Rest:13 STATE*/;
      const idTaster1_1 = 'hm-rpc.4.MEQ0064673.8.PRESS_LONG'/*12 7 Rest:08 PRESS LONG*/;
      const idTaster1_2 = 'hm-rpc.4.MEQ0064673.8.PRESS_SHORT'/*12 7 Rest:08 PRESS SHORT*/;
      const idTaster2_1 = 'hm-rpc.4.MEQ0064673.7.PRESS_LONG'/*12 7 Rest:07 PRESS LONG*/;
      const idTaster2_2 = 'hm-rpc.4.MEQ0064673.7.PRESS_SHORT'/*12 7 Rest:07 PRESS SHORT*/;
      const idTaster_virtu = 'javascript.0.Aussen.Bewegung_West_virtu_Taster'/*Bewegung West virtu Taster*/;
      const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
      const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
      const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
      const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
      

      Die Ostseite hat dann die gleichen Prämissen, allerdings habe ich da einen Bewegungsmelder, einen Taster und 2 Lichter.

      Kann mir wer weiterhelfen?

      Danke
      Marcus

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @mguenther sagte:

      Bei Betätigung eines Tasters soll nur das eine zugehörige Licht angehen.

      Für wie lange ? Bis zu erneuter Betätigung des Tasters ?

      Bei Betätigung eines Tasters während das Licht aufgrund einer Bewegung (beide Lichter an) an ist, soll nur für das Licht der timer unterbrochen werden, zu dem der Taster gehört.

      Soll das zugehörige Licht, das durch den Bewegungsmelder ein ist, dann ausgehen ?

      Bei Betätigung des virtuellen Tasters soll für beide Lichter das Licht geschaltet werden, falls timer aktiv aus Bewegungen sind, sind diese zu unterbrechen.

      Ist das ein Taster oder ein Schalter (mit false/true) ?

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      M 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @mguenther sagte:

        Bei Betätigung eines Tasters soll nur das eine zugehörige Licht angehen.

        Für wie lange ? Bis zu erneuter Betätigung des Tasters ?

        Bei Betätigung eines Tasters während das Licht aufgrund einer Bewegung (beide Lichter an) an ist, soll nur für das Licht der timer unterbrochen werden, zu dem der Taster gehört.

        Soll das zugehörige Licht, das durch den Bewegungsmelder ein ist, dann ausgehen ?

        Bei Betätigung des virtuellen Tasters soll für beide Lichter das Licht geschaltet werden, falls timer aktiv aus Bewegungen sind, sind diese zu unterbrechen.

        Ist das ein Taster oder ein Schalter (mit false/true) ?

        M Offline
        M Offline
        mguenther
        schrieb am zuletzt editiert von
        #3

        @paul53 sagte in Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern:

        @mguenther sagte:

        Bei Betätigung eines Tasters soll nur das eine zugehörige Licht angehen.

        Für wie lange ? Bis zu erneuter Betätigung des Tasters ?

        ja, ohne timer

        Bei Betätigung eines Tasters während das Licht aufgrund einer Bewegung (beide Lichter an) an ist, soll nur für das Licht der timer unterbrochen werden, zu dem der Taster gehört.

        Soll das zugehörige Licht, das durch den Bewegungsmelder ein ist, dann ausgehen ?

        hmmm, gute Frage. Hatte ich noch nicht auf dem Schirm - wäre aber nicht sinnvoll. Frau bestätigt gerade, bitte Licht dann anlassen.

        Bei Betätigung des virtuellen Tasters soll für beide Lichter das Licht geschaltet werden, falls timer aktiv aus Bewegungen sind, sind diese zu unterbrechen.

        Ist das ein Taster oder ein Schalter (mit false/true) ?

        Sorry, ist nen Schalter mit true/false. Steht auch schon im Prg1 mit drin, z.B.
        idBewegung_aktivNord

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          Mir ist die Rolle von Helligkeit und Elevation noch nicht ganz klar: Soll damit nur die Lichtfunktion der BWM feigegeben werden, was schon im 1. Skript passiert, oder sollen damit noch weitere Freigaben erfolgen ?

          Sollen PRESS_SHORT und PRESS_LONG die gleiche Funktion auslösen ?

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          M 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            Mir ist die Rolle von Helligkeit und Elevation noch nicht ganz klar: Soll damit nur die Lichtfunktion der BWM feigegeben werden, was schon im 1. Skript passiert, oder sollen damit noch weitere Freigaben erfolgen ?

            Sollen PRESS_SHORT und PRESS_LONG die gleiche Funktion auslösen ?

            M Offline
            M Offline
            mguenther
            schrieb am zuletzt editiert von
            #5

            @paul53 sagte in Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern:

            Mir ist die Rolle von Helligkeit und Elevation noch nicht ganz klar: Soll damit nur die Lichtfunktion der BWM feigegeben werden, was schon im 1. Skript passiert, oder sollen damit noch weitere Freigaben erfolgen ?

            Sollen PRESS_SHORT und PRESS_LONG die gleiche Funktion auslösen ?

            Ich dachte eigentlich, dass ich Helligkeit und Elevation nur im ersten Programm brauchte, habe aber dann im 2. Programm den virtuellen Taster danach nochmal gesteuert.

            on(idTaster_virtu, function(obj){
                licht = getState(idLicht).val;
                helligkeit = getState(idHelligkeit).val;
                elevation = getState(idElevation).val;
                taster_virtu = obj.state.val;
                if (!taster_virtu) setState(idLicht, false);
                if ((helligkeit < helligkeit_grenze) || (elevation <= elevation_grenze)) {
                    clearInterval(timer);
                    timer = null;
                    if ((!licht) && (taster_virtu))  setState(idLicht, true);
                    if ((licht) && (taster_virtu)) {
                        setState(idLicht, true);
                    }
                }
            });
            

            hatte das erst nicht, wollte nur vermeiden, dass mein weibliches Wesen es unwissend tagsüber aktiviert.

            Bei den Tastern haben SHORT und LONG die gleiche Funktion, wollte nur beide Fälle "abfangen"

            1 Antwort Letzte Antwort
            0
            • M mguenther

              Hallo Zusammen,
              bastel gerade an meinem nächste Projekt und stelle meine Programme von der CCU auf ioBroker um - UND benötige Hilfe... :(
              Wir haben an 3 Hausseiten in Summe 4 Bewegungsmelder. Ich habe zusätzlich eine Variable, die es mir ermöglicht, den Bewegungsmelder zu "aktiven" bzw. zu "deaktiven". Heißt, ich werte ihn bei Deaktivierung nicht aus, er erkennt weiterhin die Bewegung.
              Wir haben einen Bewegungsmelder auf der Ost-, einen auf der Nord- und 2 auf der Westseite. Die Bewegungsmelder erzeugen bei erkannter Bewegung eine boolsche Variable true/false, wenn zusätzlich einer der beiden Grenzwerte der Helligkeit und der Elevation unterschritten wird (Programm 1).

              const idHelligkeit = 'javascript.0.Bewegungsmelder.Helligkeit'/*Helligkeit*/;
              const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
              const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
              const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
              
              const idMelderNord = 'hm-rpc.0.NEQ1544423.1.MOTION'/*Aussenlicht BW Nord:1 MOTION*/;
              const idBewegungNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
              const idBewegung_aktivNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord_Melder_aktiv'/*Bewegung Nord Melder aktiv*/;
              
              const idMelderOst = 'hm-rpc.0.NEQ1544508.1.MOTION'/*Aussenlicht BW Ost:1 MOTION*/;
              const idBewegungOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost'/*Bewegung Ost*/;
              const idBewegung_aktivOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost_Melder_aktiv'/*Bewegung Ost Melder aktiv*/;
              
              const idMelderWestNord = 'hm-rpc.0.NEQ0120731.1.MOTION'/*Aussenlicht BW WestNord:1 MOTION*/;
              const idBewegungWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
              const idBewegung_aktivWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Melder_aktiv'/*Bewegung WestNord Melder aktiv*/;
              
              const idMelderWestSued = 'hm-rpc.0.NEQ0121152.1.MOTION'/*Aussenlicht BW WestSued:1 MOTION*/;
              const idBewegungWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
              const idBewegung_aktivWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Melder_aktiv'/*Bewegung WestSued Melder aktiv*/;
              
              var helligkeit = getState(idHelligkeit).val;
              var elevation = getState(idElevation).val;
              var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
              var elevation_grenze = getState(idGrenzwertElevation).val;
              
              var melderNord = false;
              var bewegung_aktivNord =false;
              var bewegungNord = false;
              var melderOst = false;
              var bewegung_aktivOst =false;
              var bewegungOst = false;
              var melderWestNord = false;
              var melderWestSued = false;
              var bewegung_aktivWestNord =false;
              var bewegung_aktivWestSued =false;
              var bewegungWestNord = false;
              var bewegungWestSued = false;
              
              on(idMelderNord, function(obj) {
                  melderNord = obj.state.val;
                  bewegung_aktivNord = getState(idBewegung_aktivNord).val;
                  helligkeit = getState(idHelligkeit).val;
                  elevation = getState(idElevation).val;
                  if ((melderNord) && (bewegung_aktivNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungNord, true, true);
                  else setState(idBewegungNord, false, true);
              });
              on(idMelderWestNord, function(obj) {
                  melderWestNord = obj.state.val;
                  bewegung_aktivWestNord = getState(idBewegung_aktivWestNord).val;
                  helligkeit = getState(idHelligkeit).val;
                  elevation = getState(idElevation).val;
                  if ((melderWestNord) && (bewegung_aktivWestNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestNord, true, true);
                  else setState(idBewegungWestNord, false, true);
              });
              on(idMelderWestSued, function(obj) {
                  melderWestSued = obj.state.val;
                  bewegung_aktivWestSued = getState(idBewegung_aktivWestSued).val;
                  helligkeit = getState(idHelligkeit).val;
                  elevation = getState(idElevation).val;
                  if ((melderWestSued) && (bewegung_aktivWestSued) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestSued, true, true);
                  else setState(idBewegungWestSued, false, true);
              });
              

              Auf der Nordseite (Programm 2) haben wir keinen tatsächlichen Taster zum Ein-/Ausschalten des Außenlichtes, das wollten wir über einen virtuellen Taster in VIS später lösen.
              Habe ich so gelöst und funktioniert auch - Verbesserungsvorschläge nehme ich logisch immer an:

              //Lichtschaltung auf Nordseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
              //Möglichkeit 1: Bewegungsmelder für die Dauer von 5min
              //Möglichkeit 2: Taster bzw. virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
              const idBewegung = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
              const idLicht = 'hm-rpc.0.OEQ0248749.1.STATE'/*Gartenhaus Schalter Aussenlicht:1 STATE*/;
              const idTaster_virtu = 'javascript.0.Aussen.Bewegung_Nord_virtu_Taster'/*Bewegung Nord virtu Taster*/;
              const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
              const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
              const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
              const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
              
              var bewegung = getState(idBewegung).val;
              var helligkeit = getState(idHelligkeit).val;
              var elevation = getState(idElevation).val;
              var licht = getState(idLicht).val;
              var taster_virtu = getState(idTaster_virtu).val;
              var timer = null;
              var dauer = 300; //in Sekunden
              var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
              var elevation_grenze = getState(idGrenzwertElevation).val;
              
              function Bewegung(){
                  var cnt = dauer; 
                  if (bewegung) {
                      if(timer) clearInterval(timer); // Stopp Timer
                      timer = null;
                      timer = setInterval(function() {
                          cnt--;
                          if(cnt <= 0) {
                          clearInterval(timer);
                          timer = null;
                          setState(idLicht, false);
                          };
                      }, 1000);
                      setState(idLicht, true);
                  };
              };
              
              on(idBewegung, function(obj) {
                  taster_virtu = getState(idTaster_virtu).val;
                  bewegung = obj.state.val;
                  if (!taster_virtu) Bewegung();
              });
              
              on(idTaster_virtu, function(obj){
                  licht = getState(idLicht).val;
                  helligkeit = getState(idHelligkeit).val;
                  elevation = getState(idElevation).val;
                  taster_virtu = obj.state.val;
                  if (!taster_virtu) setState(idLicht, false);
                  if ((helligkeit < helligkeit_grenze) || (elevation <= elevation_grenze)) {
                      clearInterval(timer);
                      timer = null;
                      if ((!licht) && (taster_virtu))  setState(idLicht, true);
                      if ((licht) && (taster_virtu)) {
                          setState(idLicht, true);
                      }
                  }
              });
              

              Jetzt komme ich aber nicht mehr weiter. Auf der Westseite habe ich nun 2 Bewegungsmelder (WestNord und WestSued), 2 Außenlichter und 2 Wandtaster, um die Lichter separat zu steuern. Wir hätten gerne folgendes umgesetzt - ich bekomms nicht hin:

              • Bei Erkennen von Bewegung eines der beiden Melder sollen beide Lichter angehen und für den Zeitraum von x Sekunden anbleiben.
              • Bei Betätigung eines Tasters soll nur das eine zugehörige Licht angehen.
              • Bei Betätigung eines Tasters während das Licht aufgrund einer Bewegung (beide Lichter an) an ist, soll nur für das Licht der timer unterbrochen werden, zu dem der Taster gehört.
              • Bei Betätigung des virtuellen Tasters soll für beide Lichter das Licht geschaltet werden, falls timer aktiv aus Bewegungen sind, sind diese zu unterbrechen.

              Das sind meine Variablen:

              //Lichtschaltung auf Westseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
              //Möglichkeit 1: Bewegungsmelder 1 und/oder 2 für die Dauer von 5min
              //Möglichkeit 2: virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
              //Möglichkeit 3: Wandtaster an/aus - hat Vorang gegenüber Bewegungsmelder und virtueller Taster
              const idBewegung1 = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
              const idBewegung2 = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
              const idLicht1 = 'hm-rpc.4.MEQ0064673.14.STATE'/*12 7 Rest:14 STATE*/;
              const idLicht2 = 'hm-rpc.4.MEQ0064673.13.STATE'/*12 7 Rest:13 STATE*/;
              const idTaster1_1 = 'hm-rpc.4.MEQ0064673.8.PRESS_LONG'/*12 7 Rest:08 PRESS LONG*/;
              const idTaster1_2 = 'hm-rpc.4.MEQ0064673.8.PRESS_SHORT'/*12 7 Rest:08 PRESS SHORT*/;
              const idTaster2_1 = 'hm-rpc.4.MEQ0064673.7.PRESS_LONG'/*12 7 Rest:07 PRESS LONG*/;
              const idTaster2_2 = 'hm-rpc.4.MEQ0064673.7.PRESS_SHORT'/*12 7 Rest:07 PRESS SHORT*/;
              const idTaster_virtu = 'javascript.0.Aussen.Bewegung_West_virtu_Taster'/*Bewegung West virtu Taster*/;
              const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
              const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
              const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
              const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
              

              Die Ostseite hat dann die gleichen Prämissen, allerdings habe ich da einen Bewegungsmelder, einen Taster und 2 Lichter.

              Kann mir wer weiterhelfen?

              Danke
              Marcus

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #6

              @mguenther sagte:

              Bei Betätigung eines Tasters soll nur das eine zugehörige Licht angehen.
              Bei Betätigung eines Tasters während das Licht aufgrund einer Bewegung (beide Lichter an) an ist, soll nur für das Licht der timer unterbrochen werden, zu dem der Taster gehört.

              Das kann man so machen (Beispiel für 1 Licht):

              var licht1 = getState(idLicht1).val;
              
              on(idLicht1, function(dp) {
                 licht1 = dp.state.val;
              });
              
              on({id: [idTaster1_1, idTaster1_2]}, function() {
                 if(timer1) { // Timer läuft --> Licht bleibt an
                    clearTimeout(timer1);
                    timer1 = null;
                 } else setState(idLicht1, !licht1); // Toggle
              });
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • M mguenther

                Hallo Zusammen,
                bastel gerade an meinem nächste Projekt und stelle meine Programme von der CCU auf ioBroker um - UND benötige Hilfe... :(
                Wir haben an 3 Hausseiten in Summe 4 Bewegungsmelder. Ich habe zusätzlich eine Variable, die es mir ermöglicht, den Bewegungsmelder zu "aktiven" bzw. zu "deaktiven". Heißt, ich werte ihn bei Deaktivierung nicht aus, er erkennt weiterhin die Bewegung.
                Wir haben einen Bewegungsmelder auf der Ost-, einen auf der Nord- und 2 auf der Westseite. Die Bewegungsmelder erzeugen bei erkannter Bewegung eine boolsche Variable true/false, wenn zusätzlich einer der beiden Grenzwerte der Helligkeit und der Elevation unterschritten wird (Programm 1).

                const idHelligkeit = 'javascript.0.Bewegungsmelder.Helligkeit'/*Helligkeit*/;
                const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
                const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
                const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
                
                const idMelderNord = 'hm-rpc.0.NEQ1544423.1.MOTION'/*Aussenlicht BW Nord:1 MOTION*/;
                const idBewegungNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
                const idBewegung_aktivNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord_Melder_aktiv'/*Bewegung Nord Melder aktiv*/;
                
                const idMelderOst = 'hm-rpc.0.NEQ1544508.1.MOTION'/*Aussenlicht BW Ost:1 MOTION*/;
                const idBewegungOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost'/*Bewegung Ost*/;
                const idBewegung_aktivOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost_Melder_aktiv'/*Bewegung Ost Melder aktiv*/;
                
                const idMelderWestNord = 'hm-rpc.0.NEQ0120731.1.MOTION'/*Aussenlicht BW WestNord:1 MOTION*/;
                const idBewegungWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
                const idBewegung_aktivWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Melder_aktiv'/*Bewegung WestNord Melder aktiv*/;
                
                const idMelderWestSued = 'hm-rpc.0.NEQ0121152.1.MOTION'/*Aussenlicht BW WestSued:1 MOTION*/;
                const idBewegungWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
                const idBewegung_aktivWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Melder_aktiv'/*Bewegung WestSued Melder aktiv*/;
                
                var helligkeit = getState(idHelligkeit).val;
                var elevation = getState(idElevation).val;
                var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
                var elevation_grenze = getState(idGrenzwertElevation).val;
                
                var melderNord = false;
                var bewegung_aktivNord =false;
                var bewegungNord = false;
                var melderOst = false;
                var bewegung_aktivOst =false;
                var bewegungOst = false;
                var melderWestNord = false;
                var melderWestSued = false;
                var bewegung_aktivWestNord =false;
                var bewegung_aktivWestSued =false;
                var bewegungWestNord = false;
                var bewegungWestSued = false;
                
                on(idMelderNord, function(obj) {
                    melderNord = obj.state.val;
                    bewegung_aktivNord = getState(idBewegung_aktivNord).val;
                    helligkeit = getState(idHelligkeit).val;
                    elevation = getState(idElevation).val;
                    if ((melderNord) && (bewegung_aktivNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungNord, true, true);
                    else setState(idBewegungNord, false, true);
                });
                on(idMelderWestNord, function(obj) {
                    melderWestNord = obj.state.val;
                    bewegung_aktivWestNord = getState(idBewegung_aktivWestNord).val;
                    helligkeit = getState(idHelligkeit).val;
                    elevation = getState(idElevation).val;
                    if ((melderWestNord) && (bewegung_aktivWestNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestNord, true, true);
                    else setState(idBewegungWestNord, false, true);
                });
                on(idMelderWestSued, function(obj) {
                    melderWestSued = obj.state.val;
                    bewegung_aktivWestSued = getState(idBewegung_aktivWestSued).val;
                    helligkeit = getState(idHelligkeit).val;
                    elevation = getState(idElevation).val;
                    if ((melderWestSued) && (bewegung_aktivWestSued) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestSued, true, true);
                    else setState(idBewegungWestSued, false, true);
                });
                

                Auf der Nordseite (Programm 2) haben wir keinen tatsächlichen Taster zum Ein-/Ausschalten des Außenlichtes, das wollten wir über einen virtuellen Taster in VIS später lösen.
                Habe ich so gelöst und funktioniert auch - Verbesserungsvorschläge nehme ich logisch immer an:

                //Lichtschaltung auf Nordseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
                //Möglichkeit 1: Bewegungsmelder für die Dauer von 5min
                //Möglichkeit 2: Taster bzw. virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
                const idBewegung = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
                const idLicht = 'hm-rpc.0.OEQ0248749.1.STATE'/*Gartenhaus Schalter Aussenlicht:1 STATE*/;
                const idTaster_virtu = 'javascript.0.Aussen.Bewegung_Nord_virtu_Taster'/*Bewegung Nord virtu Taster*/;
                const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
                const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
                const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
                const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
                
                var bewegung = getState(idBewegung).val;
                var helligkeit = getState(idHelligkeit).val;
                var elevation = getState(idElevation).val;
                var licht = getState(idLicht).val;
                var taster_virtu = getState(idTaster_virtu).val;
                var timer = null;
                var dauer = 300; //in Sekunden
                var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
                var elevation_grenze = getState(idGrenzwertElevation).val;
                
                function Bewegung(){
                    var cnt = dauer; 
                    if (bewegung) {
                        if(timer) clearInterval(timer); // Stopp Timer
                        timer = null;
                        timer = setInterval(function() {
                            cnt--;
                            if(cnt <= 0) {
                            clearInterval(timer);
                            timer = null;
                            setState(idLicht, false);
                            };
                        }, 1000);
                        setState(idLicht, true);
                    };
                };
                
                on(idBewegung, function(obj) {
                    taster_virtu = getState(idTaster_virtu).val;
                    bewegung = obj.state.val;
                    if (!taster_virtu) Bewegung();
                });
                
                on(idTaster_virtu, function(obj){
                    licht = getState(idLicht).val;
                    helligkeit = getState(idHelligkeit).val;
                    elevation = getState(idElevation).val;
                    taster_virtu = obj.state.val;
                    if (!taster_virtu) setState(idLicht, false);
                    if ((helligkeit < helligkeit_grenze) || (elevation <= elevation_grenze)) {
                        clearInterval(timer);
                        timer = null;
                        if ((!licht) && (taster_virtu))  setState(idLicht, true);
                        if ((licht) && (taster_virtu)) {
                            setState(idLicht, true);
                        }
                    }
                });
                

                Jetzt komme ich aber nicht mehr weiter. Auf der Westseite habe ich nun 2 Bewegungsmelder (WestNord und WestSued), 2 Außenlichter und 2 Wandtaster, um die Lichter separat zu steuern. Wir hätten gerne folgendes umgesetzt - ich bekomms nicht hin:

                • Bei Erkennen von Bewegung eines der beiden Melder sollen beide Lichter angehen und für den Zeitraum von x Sekunden anbleiben.
                • Bei Betätigung eines Tasters soll nur das eine zugehörige Licht angehen.
                • Bei Betätigung eines Tasters während das Licht aufgrund einer Bewegung (beide Lichter an) an ist, soll nur für das Licht der timer unterbrochen werden, zu dem der Taster gehört.
                • Bei Betätigung des virtuellen Tasters soll für beide Lichter das Licht geschaltet werden, falls timer aktiv aus Bewegungen sind, sind diese zu unterbrechen.

                Das sind meine Variablen:

                //Lichtschaltung auf Westseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
                //Möglichkeit 1: Bewegungsmelder 1 und/oder 2 für die Dauer von 5min
                //Möglichkeit 2: virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
                //Möglichkeit 3: Wandtaster an/aus - hat Vorang gegenüber Bewegungsmelder und virtueller Taster
                const idBewegung1 = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
                const idBewegung2 = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
                const idLicht1 = 'hm-rpc.4.MEQ0064673.14.STATE'/*12 7 Rest:14 STATE*/;
                const idLicht2 = 'hm-rpc.4.MEQ0064673.13.STATE'/*12 7 Rest:13 STATE*/;
                const idTaster1_1 = 'hm-rpc.4.MEQ0064673.8.PRESS_LONG'/*12 7 Rest:08 PRESS LONG*/;
                const idTaster1_2 = 'hm-rpc.4.MEQ0064673.8.PRESS_SHORT'/*12 7 Rest:08 PRESS SHORT*/;
                const idTaster2_1 = 'hm-rpc.4.MEQ0064673.7.PRESS_LONG'/*12 7 Rest:07 PRESS LONG*/;
                const idTaster2_2 = 'hm-rpc.4.MEQ0064673.7.PRESS_SHORT'/*12 7 Rest:07 PRESS SHORT*/;
                const idTaster_virtu = 'javascript.0.Aussen.Bewegung_West_virtu_Taster'/*Bewegung West virtu Taster*/;
                const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
                const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
                const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
                const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
                

                Die Ostseite hat dann die gleichen Prämissen, allerdings habe ich da einen Bewegungsmelder, einen Taster und 2 Lichter.

                Kann mir wer weiterhelfen?

                Danke
                Marcus

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

                @mguenther sagte:

                Bei Betätigung des virtuellen Tasters soll für beide Lichter das Licht geschaltet werden, falls timer aktiv aus Bewegungen sind, sind diese zu unterbrechen.

                Vorschlag:

                var taster_virtu = getState(isTaster_virtu).val;
                var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
                var elevation_grenze = getState(idGrenzwertElevation).val;
                
                on(idTaster_virtu, function(dp) {
                   taster_virtu = dp.state.val;
                   if(timer1) {
                      clearTimeout(timer1);
                      timer1 = null;
                   }
                   if(timer2) {
                      clearTimeout(timer2);
                      timer2 = null;
                   }
                   if(!taster_virtu) {
                      if(licht1) setState(idLicht1, false);
                      if(licht2) setState(idLicht2, false);
                   } else {
                      var helligkeit = getState(idHelligkeit).val;
                      var elevation = getState(idElevation).val;
                      if (helligkeit < helligkeit_grenze || elevation <= elevation_grenze) {
                         if(!licht1) setState(idLicht1, true);
                         if(!licht2) setState(idLicht2, true);
                      }
                   }
                });
                

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Antwort Letzte Antwort
                0
                • M mguenther

                  Hallo Zusammen,
                  bastel gerade an meinem nächste Projekt und stelle meine Programme von der CCU auf ioBroker um - UND benötige Hilfe... :(
                  Wir haben an 3 Hausseiten in Summe 4 Bewegungsmelder. Ich habe zusätzlich eine Variable, die es mir ermöglicht, den Bewegungsmelder zu "aktiven" bzw. zu "deaktiven". Heißt, ich werte ihn bei Deaktivierung nicht aus, er erkennt weiterhin die Bewegung.
                  Wir haben einen Bewegungsmelder auf der Ost-, einen auf der Nord- und 2 auf der Westseite. Die Bewegungsmelder erzeugen bei erkannter Bewegung eine boolsche Variable true/false, wenn zusätzlich einer der beiden Grenzwerte der Helligkeit und der Elevation unterschritten wird (Programm 1).

                  const idHelligkeit = 'javascript.0.Bewegungsmelder.Helligkeit'/*Helligkeit*/;
                  const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
                  const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
                  const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
                  
                  const idMelderNord = 'hm-rpc.0.NEQ1544423.1.MOTION'/*Aussenlicht BW Nord:1 MOTION*/;
                  const idBewegungNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
                  const idBewegung_aktivNord = 'javascript.0.Bewegungsmelder.Bewegung_Nord_Melder_aktiv'/*Bewegung Nord Melder aktiv*/;
                  
                  const idMelderOst = 'hm-rpc.0.NEQ1544508.1.MOTION'/*Aussenlicht BW Ost:1 MOTION*/;
                  const idBewegungOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost'/*Bewegung Ost*/;
                  const idBewegung_aktivOst = 'javascript.0.Bewegungsmelder.Bewegung_Ost_Melder_aktiv'/*Bewegung Ost Melder aktiv*/;
                  
                  const idMelderWestNord = 'hm-rpc.0.NEQ0120731.1.MOTION'/*Aussenlicht BW WestNord:1 MOTION*/;
                  const idBewegungWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
                  const idBewegung_aktivWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Melder_aktiv'/*Bewegung WestNord Melder aktiv*/;
                  
                  const idMelderWestSued = 'hm-rpc.0.NEQ0121152.1.MOTION'/*Aussenlicht BW WestSued:1 MOTION*/;
                  const idBewegungWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
                  const idBewegung_aktivWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Melder_aktiv'/*Bewegung WestSued Melder aktiv*/;
                  
                  var helligkeit = getState(idHelligkeit).val;
                  var elevation = getState(idElevation).val;
                  var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
                  var elevation_grenze = getState(idGrenzwertElevation).val;
                  
                  var melderNord = false;
                  var bewegung_aktivNord =false;
                  var bewegungNord = false;
                  var melderOst = false;
                  var bewegung_aktivOst =false;
                  var bewegungOst = false;
                  var melderWestNord = false;
                  var melderWestSued = false;
                  var bewegung_aktivWestNord =false;
                  var bewegung_aktivWestSued =false;
                  var bewegungWestNord = false;
                  var bewegungWestSued = false;
                  
                  on(idMelderNord, function(obj) {
                      melderNord = obj.state.val;
                      bewegung_aktivNord = getState(idBewegung_aktivNord).val;
                      helligkeit = getState(idHelligkeit).val;
                      elevation = getState(idElevation).val;
                      if ((melderNord) && (bewegung_aktivNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungNord, true, true);
                      else setState(idBewegungNord, false, true);
                  });
                  on(idMelderWestNord, function(obj) {
                      melderWestNord = obj.state.val;
                      bewegung_aktivWestNord = getState(idBewegung_aktivWestNord).val;
                      helligkeit = getState(idHelligkeit).val;
                      elevation = getState(idElevation).val;
                      if ((melderWestNord) && (bewegung_aktivWestNord) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestNord, true, true);
                      else setState(idBewegungWestNord, false, true);
                  });
                  on(idMelderWestSued, function(obj) {
                      melderWestSued = obj.state.val;
                      bewegung_aktivWestSued = getState(idBewegung_aktivWestSued).val;
                      helligkeit = getState(idHelligkeit).val;
                      elevation = getState(idElevation).val;
                      if ((melderWestSued) && (bewegung_aktivWestSued) && (helligkeit<helligkeit_grenze) && (elevation<=elevation_grenze)) setState(idBewegungWestSued, true, true);
                      else setState(idBewegungWestSued, false, true);
                  });
                  

                  Auf der Nordseite (Programm 2) haben wir keinen tatsächlichen Taster zum Ein-/Ausschalten des Außenlichtes, das wollten wir über einen virtuellen Taster in VIS später lösen.
                  Habe ich so gelöst und funktioniert auch - Verbesserungsvorschläge nehme ich logisch immer an:

                  //Lichtschaltung auf Nordseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
                  //Möglichkeit 1: Bewegungsmelder für die Dauer von 5min
                  //Möglichkeit 2: Taster bzw. virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
                  const idBewegung = 'javascript.0.Bewegungsmelder.Bewegung_Nord'/*Bewegung Nord*/;
                  const idLicht = 'hm-rpc.0.OEQ0248749.1.STATE'/*Gartenhaus Schalter Aussenlicht:1 STATE*/;
                  const idTaster_virtu = 'javascript.0.Aussen.Bewegung_Nord_virtu_Taster'/*Bewegung Nord virtu Taster*/;
                  const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
                  const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
                  const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
                  const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
                  
                  var bewegung = getState(idBewegung).val;
                  var helligkeit = getState(idHelligkeit).val;
                  var elevation = getState(idElevation).val;
                  var licht = getState(idLicht).val;
                  var taster_virtu = getState(idTaster_virtu).val;
                  var timer = null;
                  var dauer = 300; //in Sekunden
                  var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
                  var elevation_grenze = getState(idGrenzwertElevation).val;
                  
                  function Bewegung(){
                      var cnt = dauer; 
                      if (bewegung) {
                          if(timer) clearInterval(timer); // Stopp Timer
                          timer = null;
                          timer = setInterval(function() {
                              cnt--;
                              if(cnt <= 0) {
                              clearInterval(timer);
                              timer = null;
                              setState(idLicht, false);
                              };
                          }, 1000);
                          setState(idLicht, true);
                      };
                  };
                  
                  on(idBewegung, function(obj) {
                      taster_virtu = getState(idTaster_virtu).val;
                      bewegung = obj.state.val;
                      if (!taster_virtu) Bewegung();
                  });
                  
                  on(idTaster_virtu, function(obj){
                      licht = getState(idLicht).val;
                      helligkeit = getState(idHelligkeit).val;
                      elevation = getState(idElevation).val;
                      taster_virtu = obj.state.val;
                      if (!taster_virtu) setState(idLicht, false);
                      if ((helligkeit < helligkeit_grenze) || (elevation <= elevation_grenze)) {
                          clearInterval(timer);
                          timer = null;
                          if ((!licht) && (taster_virtu))  setState(idLicht, true);
                          if ((licht) && (taster_virtu)) {
                              setState(idLicht, true);
                          }
                      }
                  });
                  

                  Jetzt komme ich aber nicht mehr weiter. Auf der Westseite habe ich nun 2 Bewegungsmelder (WestNord und WestSued), 2 Außenlichter und 2 Wandtaster, um die Lichter separat zu steuern. Wir hätten gerne folgendes umgesetzt - ich bekomms nicht hin:

                  • Bei Erkennen von Bewegung eines der beiden Melder sollen beide Lichter angehen und für den Zeitraum von x Sekunden anbleiben.
                  • Bei Betätigung eines Tasters soll nur das eine zugehörige Licht angehen.
                  • Bei Betätigung eines Tasters während das Licht aufgrund einer Bewegung (beide Lichter an) an ist, soll nur für das Licht der timer unterbrochen werden, zu dem der Taster gehört.
                  • Bei Betätigung des virtuellen Tasters soll für beide Lichter das Licht geschaltet werden, falls timer aktiv aus Bewegungen sind, sind diese zu unterbrechen.

                  Das sind meine Variablen:

                  //Lichtschaltung auf Westseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
                  //Möglichkeit 1: Bewegungsmelder 1 und/oder 2 für die Dauer von 5min
                  //Möglichkeit 2: virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
                  //Möglichkeit 3: Wandtaster an/aus - hat Vorang gegenüber Bewegungsmelder und virtueller Taster
                  const idBewegung1 = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
                  const idBewegung2 = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
                  const idLicht1 = 'hm-rpc.4.MEQ0064673.14.STATE'/*12 7 Rest:14 STATE*/;
                  const idLicht2 = 'hm-rpc.4.MEQ0064673.13.STATE'/*12 7 Rest:13 STATE*/;
                  const idTaster1_1 = 'hm-rpc.4.MEQ0064673.8.PRESS_LONG'/*12 7 Rest:08 PRESS LONG*/;
                  const idTaster1_2 = 'hm-rpc.4.MEQ0064673.8.PRESS_SHORT'/*12 7 Rest:08 PRESS SHORT*/;
                  const idTaster2_1 = 'hm-rpc.4.MEQ0064673.7.PRESS_LONG'/*12 7 Rest:07 PRESS LONG*/;
                  const idTaster2_2 = 'hm-rpc.4.MEQ0064673.7.PRESS_SHORT'/*12 7 Rest:07 PRESS SHORT*/;
                  const idTaster_virtu = 'javascript.0.Aussen.Bewegung_West_virtu_Taster'/*Bewegung West virtu Taster*/;
                  const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
                  const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
                  const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
                  const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
                  

                  Die Ostseite hat dann die gleichen Prämissen, allerdings habe ich da einen Bewegungsmelder, einen Taster und 2 Lichter.

                  Kann mir wer weiterhelfen?

                  Danke
                  Marcus

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  @mguenther sagte:

                  Bei Erkennen von Bewegung eines der beiden Melder sollen beide Lichter angehen und für den Zeitraum von x Sekunden anbleiben.

                  var timer1 = null;
                  var timer2 = null;
                  const dauer = 300; // in s
                  
                  on([idBewegung1, idBewegung2], function(dp) {
                     if (!taster_virtu && dp,state.val) {
                        if(!licht1) setState(idLicht1, true);
                        if(!licht2) setState(idLicht2, true);
                        if(timer1) clearTimeout(timer1);
                        if(timer2) clearTimeout(timer2);
                        timer1 = setTimeout(unction() {
                           setState(idLicht1, false);
                           timer1 = null;
                        }, 1000 * dauer);
                        timer2 = setTimeout(function() {
                           setState(idLicht2, false);
                           timer2 = null;
                        }, 1000 * dauer);
                     }
                  });
                  

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Antwort Letzte Antwort
                  0
                  • M Offline
                    M Offline
                    mguenther
                    schrieb am zuletzt editiert von
                    #9

                    danke dir - ich probiere es heute abend mal aus

                    1 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      mguenther
                      schrieb am zuletzt editiert von
                      #10

                      funktioniert - hatte ein paar Kleinigkeiten noch korrigieren müssen (fehlernder Buchstabe oder "." statt ",", aber habs hinbekommen, was mir jetzt noch fehlt, ist der Wandtaster. Müsste ja vom Vorgehen her analog dem virtuellen Taster sein. Ich würde noch ne Variable beim Auslösen der Bewegung einfügen und entsprechend diese Zeile ändern:

                         if (!taster_virtu && dp,state.val) {
                      

                      in

                         if (!taster && !taster_virtu && dp,state.val) {
                      

                      es wird nur komplex für mich bei "wenn Taster1, dann Änderung bei Licht1" und "wenn Taster2, dann Änderung bei Licht2". Mal sehen, was ich hinbekomme... :)

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • M mguenther

                        funktioniert - hatte ein paar Kleinigkeiten noch korrigieren müssen (fehlernder Buchstabe oder "." statt ",", aber habs hinbekommen, was mir jetzt noch fehlt, ist der Wandtaster. Müsste ja vom Vorgehen her analog dem virtuellen Taster sein. Ich würde noch ne Variable beim Auslösen der Bewegung einfügen und entsprechend diese Zeile ändern:

                           if (!taster_virtu && dp,state.val) {
                        

                        in

                           if (!taster && !taster_virtu && dp,state.val) {
                        

                        es wird nur komplex für mich bei "wenn Taster1, dann Änderung bei Licht1" und "wenn Taster2, dann Änderung bei Licht2". Mal sehen, was ich hinbekomme... :)

                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von paul53
                        #11

                        @mguenther sagte:

                        was mir jetzt noch fehlt, ist der Wandtaster.

                        Passt mein Vorschlag für einen von beiden Tastern nicht ?
                        Das noch einmal mit licht2, idLicht2, idTaster2_1, idTaster2_2, timer2

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        0
                        • M Offline
                          M Offline
                          mguenther
                          schrieb am zuletzt editiert von
                          #12

                          probiere ich noch aus, noch nicht eingebunden

                          1 Antwort Letzte Antwort
                          0
                          • M Offline
                            M Offline
                            mguenther
                            schrieb am zuletzt editiert von
                            #13
                            on(idLicht1) function(dp) {
                               licht1 = dp.state.val;
                            });
                            

                            das funktioniert nicht so ganz. ich würde es in Zeile 2 schreiben - probiere ich aber morgen aus.

                            on({id: [idTaster1_1, idTaster1_2]}, function() {
                            licht1 = getState....;
                               if(timer1) { // Timer läuft --> Licht bleibt an
                                  clearTimeout(timer1);
                                  timer1 = null;
                               } else setState(idLicht1, !licht1); // Toggle
                            });
                            

                            Danke

                            paul53P 2 Antworten Letzte Antwort
                            0
                            • M mguenther
                              on(idLicht1) function(dp) {
                                 licht1 = dp.state.val;
                              });
                              

                              das funktioniert nicht so ganz. ich würde es in Zeile 2 schreiben - probiere ich aber morgen aus.

                              on({id: [idTaster1_1, idTaster1_2]}, function() {
                              licht1 = getState....;
                                 if(timer1) { // Timer läuft --> Licht bleibt an
                                    clearTimeout(timer1);
                                    timer1 = null;
                                 } else setState(idLicht1, !licht1); // Toggle
                              });
                              

                              Danke

                              paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von
                              #14

                              @mguenther sagte

                              das funktioniert nicht so ganz

                              Sorry, Tippfehler. Die schließende Klammer hinter idLicht1 muss natürlich ein Komma sein.

                              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                              1 Antwort Letzte Antwort
                              0
                              • M Offline
                                M Offline
                                mguenther
                                schrieb am zuletzt editiert von
                                #15

                                hatte ich schon geändert, ich probiere es morgen nochmal aus - eben hats nicht geklappt...

                                1 Antwort Letzte Antwort
                                0
                                • M mguenther
                                  on(idLicht1) function(dp) {
                                     licht1 = dp.state.val;
                                  });
                                  

                                  das funktioniert nicht so ganz. ich würde es in Zeile 2 schreiben - probiere ich aber morgen aus.

                                  on({id: [idTaster1_1, idTaster1_2]}, function() {
                                  licht1 = getState....;
                                     if(timer1) { // Timer läuft --> Licht bleibt an
                                        clearTimeout(timer1);
                                        timer1 = null;
                                     } else setState(idLicht1, !licht1); // Toggle
                                  });
                                  

                                  Danke

                                  paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von
                                  #16

                                  @mguenther sagte in Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern:

                                  licht1 = getState....;

                                  Zeile 2 ist unnötig, da licht1 eine globale Variable ist, die durch den Trigger auf idLicht1 aktualisiert wird.

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  1 Antwort Letzte Antwort
                                  0
                                  • M Offline
                                    M Offline
                                    mguenther
                                    schrieb am zuletzt editiert von
                                    #17

                                    bekomme es nicht hin

                                    //Lichtschaltung auf Westseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
                                    //Möglichkeit 1: Bewegungsmelder 1 und/oder 2 für die Dauer von 5min
                                    //Möglichkeit 2: virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
                                    //Möglichkeit 3: Wandtaster an/aus - hat Vorang gegenüber Bewegungsmelder und virtueller Taster
                                    const idBewegung1 = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
                                    const idBewegung2 = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
                                    const idLicht1 = 'hm-rpc.4.MEQ0064673.14.STATE'/*12 7 Rest:14 STATE*/;
                                    const idLicht2 = 'hm-rpc.4.MEQ0064673.13.STATE'/*12 7 Rest:13 STATE*/;
                                    const idTaster1_1 = 'hm-rpc.4.MEQ0064673.8.PRESS_LONG'/*12 7 Rest:08 PRESS LONG*/;
                                    const idTaster1_2 = 'hm-rpc.4.MEQ0064673.8.PRESS_SHORT'/*12 7 Rest:08 PRESS SHORT*/;
                                    const idTaster2_1 = 'hm-rpc.4.MEQ0064673.7.PRESS_LONG'/*12 7 Rest:07 PRESS LONG*/;
                                    const idTaster2_2 = 'hm-rpc.4.MEQ0064673.7.PRESS_SHORT'/*12 7 Rest:07 PRESS SHORT*/;
                                    const idTaster_virtu = 'javascript.0.Bewegungsmelder.Bewegung_West_virtu_Taster'/*Bewegung West virtu Taster*/;
                                    const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
                                    const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
                                    const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
                                    const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
                                    const idTasterWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Taster'/*Bewegung WestSued Taster*/;
                                    const idTasterWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Taster'/*Bewegung WestNord Taster*/;
                                    
                                    var bewegung1 = getState(idBewegung1).val;
                                    var bewegung2 = getState(idBewegung2).val;
                                    var licht1 = getState(idLicht1).val;
                                    var licht2 = getState(idLicht2).val;
                                    var taster1_1 = getState(idTaster1_1).val;
                                    var taster1_2 = getState(idTaster1_2).val;
                                    var taster2_1 = getState(idTaster2_1).val;
                                    var taster2_2 = getState(idTaster2_2).val;
                                    var tasterWestSued= getState(idTasterWestSued).val;
                                    var tasterWestNord= getState(idTasterWestNord).val;
                                    var helligkeit = getState(idHelligkeit).val;
                                    var elevation = getState(idElevation).val;
                                    var timer1 = null;
                                    var timer2 = null;
                                    var dauer = 30; //5min in Sekunden
                                    
                                    var taster_virtu = getState(idTaster_virtu).val;
                                    var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
                                    var elevation_grenze = getState(idGrenzwertElevation).val;
                                    
                                    on(idLicht1, function(dp) {
                                       licht1 = dp.state.val;
                                    });
                                    on(idLicht2, function(dp) {
                                       licht2 = dp.state.val;
                                    });
                                    
                                    //Licht durch Bewegungsmelder
                                    on([idBewegung1, idBewegung2], function(dp) {
                                        if (!taster_virtu && dp.state.val) {
                                            if(!licht1) setState(idLicht1, true);
                                            if(!licht2) setState(idLicht2, true);
                                            if (!tasterWestSued) {     //Wandtaster
                                                if(timer1) clearTimeout(timer1);
                                                timer1 = setTimeout(function() {
                                                    setState(idLicht1, false);
                                                    timer1 = null;
                                                }, 1000 * dauer);
                                            }
                                            if (!tasterWestNord) {     //Wandtaster
                                                if(timer2) clearTimeout(timer2);
                                                timer2 = setTimeout(function() {
                                                    setState(idLicht2, false);
                                                    timer2 = null;
                                                }, 1000 * dauer);
                                            }
                                        }
                                    });
                                    
                                    //Virtueller Taster an/aus
                                    on(idTaster_virtu, function(dp) {
                                        taster_virtu = dp.state.val;
                                        if(timer1) {
                                            clearTimeout(timer1);
                                            timer1 = null;
                                        }
                                        if(timer2) {
                                            clearTimeout(timer2);
                                            timer2 = null;
                                        }
                                        if(!taster_virtu) {
                                            if(licht1) setState(idLicht1, false);
                                            if(licht2) setState(idLicht2, false);
                                        } else {
                                            var helligkeit = getState(idHelligkeit).val;
                                            var elevation = getState(idElevation).val;
                                            if (helligkeit < helligkeit_grenze || elevation <= elevation_grenze) {
                                                if(!licht1) setState(idLicht1, true);
                                                if(!licht2) setState(idLicht2, true);
                                            }
                                        }
                                    });
                                    
                                    //Wandtaster WestSued
                                    on({id: [idTaster1_1, idTaster1_2]}, function() {
                                        if (licht1) setState(idTasterWestSued, false);
                                        else setState(idTasterWestSued, true);
                                        if(timer1) { // Timer läuft --> Licht bleibt an
                                            clearTimeout(timer1);
                                            timer1 = null;
                                        } 
                                        else setState(idLicht1, !licht1); // Toggle
                                    });
                                    
                                    //Wandtaster WestNord
                                    on({id: [idTaster2_1, idTaster2_2]}, function() {
                                        if (licht2) setState(idTasterWestNord, false);
                                        else setState(idTasterWestNord, true);
                                        if(timer2) { // Timer läuft --> Licht bleibt an
                                            clearTimeout(timer2);
                                            timer2 = null;
                                        } 
                                        else setState(idLicht2, !licht2); // Toggle
                                    });
                                    

                                    irgendwo hab ich nen Denkfehler drin. Wenn Bewegungsmelder ausgelöst hat und ich dann einen Wandtaster drücke, dann soll das Licht anbleiben und auch nicht nach der abgelaufenen Zeit aus dem Bewegungsmelder ausgehen. Das 2. Licht, wo der Taster nicht zugehört, soll entsprechend ausgehen.
                                    2. Fall: wenn ein Licht über den Wandtaster an ist und der Bewegungsmelder löst aus, dann soll das eine Licht aber nicht ausgehen, wenn der Timer aus de Bewegungsmelder abläuft. macht er aber....

                                    AsgothianA 1 Antwort Letzte Antwort
                                    0
                                    • M mguenther

                                      bekomme es nicht hin

                                      //Lichtschaltung auf Westseite - Bedingung: Elevation <=Grenzwert oder Helligkeit <Grenzwert
                                      //Möglichkeit 1: Bewegungsmelder 1 und/oder 2 für die Dauer von 5min
                                      //Möglichkeit 2: virtueller Taster an/aus - hat Vorang gegenüber Bewegungsmelder
                                      //Möglichkeit 3: Wandtaster an/aus - hat Vorang gegenüber Bewegungsmelder und virtueller Taster
                                      const idBewegung1 = 'javascript.0.Bewegungsmelder.Bewegung_WestSued'/*Bewegung WestSued*/;
                                      const idBewegung2 = 'javascript.0.Bewegungsmelder.Bewegung_WestNord'/*Bewegung WestNord*/;
                                      const idLicht1 = 'hm-rpc.4.MEQ0064673.14.STATE'/*12 7 Rest:14 STATE*/;
                                      const idLicht2 = 'hm-rpc.4.MEQ0064673.13.STATE'/*12 7 Rest:13 STATE*/;
                                      const idTaster1_1 = 'hm-rpc.4.MEQ0064673.8.PRESS_LONG'/*12 7 Rest:08 PRESS LONG*/;
                                      const idTaster1_2 = 'hm-rpc.4.MEQ0064673.8.PRESS_SHORT'/*12 7 Rest:08 PRESS SHORT*/;
                                      const idTaster2_1 = 'hm-rpc.4.MEQ0064673.7.PRESS_LONG'/*12 7 Rest:07 PRESS LONG*/;
                                      const idTaster2_2 = 'hm-rpc.4.MEQ0064673.7.PRESS_SHORT'/*12 7 Rest:07 PRESS SHORT*/;
                                      const idTaster_virtu = 'javascript.0.Bewegungsmelder.Bewegung_West_virtu_Taster'/*Bewegung West virtu Taster*/;
                                      const idHelligkeit = 'hm-rpc.0.NEQ1544423.1.BRIGHTNESS'/*Aussenlicht BW Nord:1 BRIGHTNESS*/;
                                      const idElevation = 'javascript.0.Sonne.Elevation'/*Elevation*/;
                                      const idGrenzwertHelligkeit = 'javascript.0.Bewegungsmelder.Grenzwert_Helligkeit'/*Grenzwert Helligkeit*/;
                                      const idGrenzwertElevation = 'javascript.0.Bewegungsmelder.Grenzwert_Elevation'/*Grenzwert Elevation*/;
                                      const idTasterWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Taster'/*Bewegung WestSued Taster*/;
                                      const idTasterWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Taster'/*Bewegung WestNord Taster*/;
                                      
                                      var bewegung1 = getState(idBewegung1).val;
                                      var bewegung2 = getState(idBewegung2).val;
                                      var licht1 = getState(idLicht1).val;
                                      var licht2 = getState(idLicht2).val;
                                      var taster1_1 = getState(idTaster1_1).val;
                                      var taster1_2 = getState(idTaster1_2).val;
                                      var taster2_1 = getState(idTaster2_1).val;
                                      var taster2_2 = getState(idTaster2_2).val;
                                      var tasterWestSued= getState(idTasterWestSued).val;
                                      var tasterWestNord= getState(idTasterWestNord).val;
                                      var helligkeit = getState(idHelligkeit).val;
                                      var elevation = getState(idElevation).val;
                                      var timer1 = null;
                                      var timer2 = null;
                                      var dauer = 30; //5min in Sekunden
                                      
                                      var taster_virtu = getState(idTaster_virtu).val;
                                      var helligkeit_grenze= getState(idGrenzwertHelligkeit).val;
                                      var elevation_grenze = getState(idGrenzwertElevation).val;
                                      
                                      on(idLicht1, function(dp) {
                                         licht1 = dp.state.val;
                                      });
                                      on(idLicht2, function(dp) {
                                         licht2 = dp.state.val;
                                      });
                                      
                                      //Licht durch Bewegungsmelder
                                      on([idBewegung1, idBewegung2], function(dp) {
                                          if (!taster_virtu && dp.state.val) {
                                              if(!licht1) setState(idLicht1, true);
                                              if(!licht2) setState(idLicht2, true);
                                              if (!tasterWestSued) {     //Wandtaster
                                                  if(timer1) clearTimeout(timer1);
                                                  timer1 = setTimeout(function() {
                                                      setState(idLicht1, false);
                                                      timer1 = null;
                                                  }, 1000 * dauer);
                                              }
                                              if (!tasterWestNord) {     //Wandtaster
                                                  if(timer2) clearTimeout(timer2);
                                                  timer2 = setTimeout(function() {
                                                      setState(idLicht2, false);
                                                      timer2 = null;
                                                  }, 1000 * dauer);
                                              }
                                          }
                                      });
                                      
                                      //Virtueller Taster an/aus
                                      on(idTaster_virtu, function(dp) {
                                          taster_virtu = dp.state.val;
                                          if(timer1) {
                                              clearTimeout(timer1);
                                              timer1 = null;
                                          }
                                          if(timer2) {
                                              clearTimeout(timer2);
                                              timer2 = null;
                                          }
                                          if(!taster_virtu) {
                                              if(licht1) setState(idLicht1, false);
                                              if(licht2) setState(idLicht2, false);
                                          } else {
                                              var helligkeit = getState(idHelligkeit).val;
                                              var elevation = getState(idElevation).val;
                                              if (helligkeit < helligkeit_grenze || elevation <= elevation_grenze) {
                                                  if(!licht1) setState(idLicht1, true);
                                                  if(!licht2) setState(idLicht2, true);
                                              }
                                          }
                                      });
                                      
                                      //Wandtaster WestSued
                                      on({id: [idTaster1_1, idTaster1_2]}, function() {
                                          if (licht1) setState(idTasterWestSued, false);
                                          else setState(idTasterWestSued, true);
                                          if(timer1) { // Timer läuft --> Licht bleibt an
                                              clearTimeout(timer1);
                                              timer1 = null;
                                          } 
                                          else setState(idLicht1, !licht1); // Toggle
                                      });
                                      
                                      //Wandtaster WestNord
                                      on({id: [idTaster2_1, idTaster2_2]}, function() {
                                          if (licht2) setState(idTasterWestNord, false);
                                          else setState(idTasterWestNord, true);
                                          if(timer2) { // Timer läuft --> Licht bleibt an
                                              clearTimeout(timer2);
                                              timer2 = null;
                                          } 
                                          else setState(idLicht2, !licht2); // Toggle
                                      });
                                      

                                      irgendwo hab ich nen Denkfehler drin. Wenn Bewegungsmelder ausgelöst hat und ich dann einen Wandtaster drücke, dann soll das Licht anbleiben und auch nicht nach der abgelaufenen Zeit aus dem Bewegungsmelder ausgehen. Das 2. Licht, wo der Taster nicht zugehört, soll entsprechend ausgehen.
                                      2. Fall: wenn ein Licht über den Wandtaster an ist und der Bewegungsmelder löst aus, dann soll das eine Licht aber nicht ausgehen, wenn der Timer aus de Bewegungsmelder abläuft. macht er aber....

                                      AsgothianA Offline
                                      AsgothianA Offline
                                      Asgothian
                                      Developer
                                      schrieb am zuletzt editiert von Asgothian
                                      #18

                                      ... nix zu sehen - @paul53,s Feld

                                      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                                      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                                      M 1 Antwort Letzte Antwort
                                      0
                                      • AsgothianA Asgothian

                                        ... nix zu sehen - @paul53,s Feld

                                        M Offline
                                        M Offline
                                        mguenther
                                        schrieb am zuletzt editiert von
                                        #19

                                        @Asgothian sagte in Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern:

                                        @mguenther Dumme Frage: kannst du die Taster betätigen ohne den BM auszulösen ? Wenn nein, dann setzt der BM den timer wieder nachdem du den Taster gedrückt hast.

                                        wenn das so ist, brauchst du:
                                        Pro Taster eine Variable “licht_mit_diesem_taster_eingeschaltet”
                                        Die setzt du auf wahr wenn man mit dem Schalter das Licht an macht, und auf false wenn das Licht aus geht (entweder per Event am Licht oder im Schalter-Event.
                                        Und im timer, bevor du das Licht ausschaltest fragst du sie ab.. bei true - nix tun.

                                        A.
                                        Ich bin gerade unterwegs und kann dir das nicht sauber in js en - ich hoffe der Hinweis reicht aber.

                                        hab ich ja.

                                        const idTasterWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Taster'/*Bewegung WestSued Taster*/;
                                        const idTasterWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Taster'/*Bewegung WestNord Taster*/;
                                        

                                        werden entsprechend auf true/false gesetzt. Ich habe aber irgendwo oben nen Denkfehler drin bei dem Vorschlag von Paul

                                        AsgothianA 2 Antworten Letzte Antwort
                                        0
                                        • M mguenther

                                          @Asgothian sagte in Skript zur Steuerung Aussenlicht mit Bewegungsmelder und Tastern:

                                          @mguenther Dumme Frage: kannst du die Taster betätigen ohne den BM auszulösen ? Wenn nein, dann setzt der BM den timer wieder nachdem du den Taster gedrückt hast.

                                          wenn das so ist, brauchst du:
                                          Pro Taster eine Variable “licht_mit_diesem_taster_eingeschaltet”
                                          Die setzt du auf wahr wenn man mit dem Schalter das Licht an macht, und auf false wenn das Licht aus geht (entweder per Event am Licht oder im Schalter-Event.
                                          Und im timer, bevor du das Licht ausschaltest fragst du sie ab.. bei true - nix tun.

                                          A.
                                          Ich bin gerade unterwegs und kann dir das nicht sauber in js en - ich hoffe der Hinweis reicht aber.

                                          hab ich ja.

                                          const idTasterWestSued = 'javascript.0.Bewegungsmelder.Bewegung_WestSued_Taster'/*Bewegung WestSued Taster*/;
                                          const idTasterWestNord = 'javascript.0.Bewegungsmelder.Bewegung_WestNord_Taster'/*Bewegung WestNord Taster*/;
                                          

                                          werden entsprechend auf true/false gesetzt. Ich habe aber irgendwo oben nen Denkfehler drin bei dem Vorschlag von Paul

                                          AsgothianA Offline
                                          AsgothianA Offline
                                          Asgothian
                                          Developer
                                          schrieb am zuletzt editiert von Asgothian
                                          #20

                                          ... nix zu sehen - @paul53,s Feld

                                          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                                          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                                          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

                                          754

                                          Online

                                          32.6k

                                          Benutzer

                                          82.2k

                                          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