Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. [Projekt] Alarmanlage mit mehreren Alarmstufen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Projekt] Alarmanlage mit mehreren Alarmstufen

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

      Hi zusammen,

      die nächste Idee ist es, daß offene Fenster beim Scharfschalten angezeigt werden - dann kann nicht scharfgeschaltet werden, solange nicht alle Fenster zu sind…

      vg, sckibo...

      1 Reply Last reply Reply Quote 0
      • T
        tempestas last edited by

        gibts in diversen Skripten hier. Hier ein Ausschnitt aus meinem Skript. Bei mir kann allerdings weiter scharfgeschaltet werden, es wird aber informiert, dass noch etwas offne ist. Grund: falls ich unterwegs bin und die Automatik die Alarmanlage einschaltet, habe ich nichts davon, wenn ich wg. eines offenen Fensters, an dem ich dann eh nichts mehr ändern kann, die Alarmanlage grundsätlich nicht einschalte.

        Wenn ich sie manuell daheim anschalte, wird es optisch dargestellt und beim einschalten nochmals gewarnt, wenn ein Fenster noch offen sein sollte.

        ! ````
        // ########################################################################
        // ####### Fensterstatus beim einschalten der Alarmanlage überwachen #####
        ! var fensterOffen =[];
        var info;
        ! function fensterPruef() {
        ! var cacheSelectorState = $('channelstate.id=*.STATE');
        ! cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Alarmanlage_Huelle
        var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) // alt: getState(id).val;
        var obj = getObject(id);
        var name = getObject(id).common.name;
        var devicename = name.substring(0, name.indexOf(":1.STATE")); //:1.state aus Text entfernen

            if(status ||status === 1){
            fensterOffen.push(devicename);                                          // offene Fenster zum Array hinzufügen    
            fensterOffen.sort;                                                      // Array sortieren
            if(debug2) log(fensterOffen);
            }
        });
        if(fensterOffen.length > 0) info = "Folgende Fenster noch offen: "+fensterOffen;
        else info = "Alle Fenster geschlossen.";
        if(debug2) log("Info ist "+info);    
        

        }

        ! ````

        1 Reply Last reply Reply Quote 0
        • S
          sckibo last edited by

          Hi Tempestas,

          das sieht gut aus, schau ich mir spöter genau an. Wie nimmst Du denn dann das betreffende Fenster aus der Alarmierung raus? Ich verstehe, daß Du die Alarmanlage trotzdem scharfschaltest, auch wenn ein Sensor auslöst. Dann kann dieser Sensor aber nicht mehr alarmieren, oder?

          @tempestas:

          gibts in diversen Skripten hier. Hier ein Ausschnitt aus meinem Skript. Bei mir kann allerdings weiter scharfgeschaltet werden, es wird aber informiert, dass noch etwas offne ist. Grund: falls ich unterwegs bin und die Automatik die Alarmanlage einschaltet, habe ich nichts davon, wenn ich wg. eines offenen Fensters, an dem ich dann eh nichts mehr ändern kann, die Alarmanlage grundsätlich nicht einschalte.

          Wenn ich sie manuell daheim anschalte, wird es optisch dargestellt und beim einschalten nochmals gewarnt, wenn ein Fenster noch offen sein sollte.

          1 Reply Last reply Reply Quote 0
          • T
            tempestas last edited by

            Wenn der Einbrecher das Fenster freundlicherweise schließt, um es dann wieder zu öffnen schon. Sonst natürlich nicht.

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

              Update:

              Nur der Vollständigkeit halber - ich hab meinen Fehler zwischenzeitlich gefunden und behoben. Wenn man auf "var selFacade = $('state…" prüft, aber "var selFacade = $('channel …" verwenden sollte, kann das nicht funktionieren! :roll:


              Hallo,

              erst einmal ein großes Lob für die Entwicklung der Alarmanlage. Leider bekomme ich sie bei mir aber nicht ans Laufen. 😞

              Ich habe die beiden Skripte unter "Common" angelegt und gestartet. Unter "Objekte" werden mir die einzelnen Felder auch angezeigt. Wenn ich im View einen Status aktiviere oder deaktiviere, bekomme ich das auch unter "Objekte" entsprechend mit. Aber was muss ich jetzt genau tun, um bestimmte Sensoren zu überwachen?

              Testweise wollte ich nun mal meine Osram Steckdose überwachen. Dazu habe ich unter "Aufzählungen" eine Funktion "facade" angelegt und damit die Steckdose versehen. Außerdem habe ich sie auch dem Raum "Esszimmer" zugeordnet. Mein Verständnis war nun, dass beim Schalten der Steckdose irgendwie auch der Alarm ausgelöst wird. Ich kann jedoch schalten wie ich will - es passiert letztlich nichts. Alle Datenpunkte unter alarm.out bleiben auf "false" stehen.

              Ich hab auch schon ein "sendTo" eingefügt, um mich per Telegram informieren zu lassen, wenn etwas passiert. Beim de-/aktivieren der Alarmanlage funktioniert das auch. Aber ansonsten erhalte ich keinerlei Mitteilungen.

              Gibt's vielleicht eine Step-by-step Anleitung für Dummies? :roll:

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

                Hallo, ich würde mich dem anschließen…Finde die Idee und Umsetzung klasse. Hab soweit alles installiert. jetzt bin ich gerade dabei zu verstehen wo ich was eintragen muss, um das ganze entsprechend meiner Infrastruktur zu konfigurieren. Verstanden habe ich das schon mit den Zuweisungen der funktionen unter den Aufzählungen. Und auch das die Aktoren unde Sensoren wohl über diese Aufzählungen durch das Script ausgewerdet werden.

                Wäre es vlt. möglich das Script mit ein paar Hinweisen zu versehen, oder beispiel Werte einzutragen und dises Evtl. zu markieren, damit auch Anfänger wie ich wissen wo sie etwas ändern oder anpassen müssen / können?

                Das wäre echt prima...Danke schon mal...

                1 Reply Last reply Reply Quote 0
                • ?
                  A Former User last edited by

                  @smartboart:

                  Wäre es vlt. möglich das Script mit ein paar Hinweisen zu versehen, oder beispiel Werte einzutragen und dises Evtl. zu markieren, damit auch Anfänger wie ich wissen wo sie etwas ändern oder anpassen müssen / können? `

                  Ich habe im ersten Post noch ein Beispielskript eingefügt in dem ich zeige wie ich aktuell die einzelnen Alarme nutze um bestimmte Aktionen zu starten.

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

                    Vielen Dank, Wie das nun alles gedacht ist und was passiert habe ich soweit verstanden, denke ich…Nun ist es an der Zeit sich intensiver mit dem Erstellen und Bearbeiten von scripten zu beschäftigen. Ich denke das würde jetzt den Rahmen sprenen hie sämtlice Fragen zu stellen bis das so läuft wie ich es möchte...

                    Ich hatte mir ohnhin mal vorgenommen eine Fortbildung im Bereich javascript zu gönnen.. Danke für die Unterstützung bis hier hin...

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

                      Aber eine zwei Fragen hätte ich doch noch…

                      Die Sensoren welche ich unter facade und oder motion anlege, werden die in dem Script als true abgefragt, also bei true geht die scharfe Anlage auf Alarm?

                      Habe unter Aufzählungen unter functions die motion und facade angelegt und jeweils ein script zugeordnet unter java.0 welches ein true und false ausgibt...Es passiert aber leider nichts bei den Outputs des Alarmscripts... Muss ich in dem Logik Script / Auszug unten die komplette ID einragen oder oder reicht das so mit dem * ?

                      var selFacade = $('statestate.id=javascript.0.*');

                      1 Reply Last reply Reply Quote 0
                      • ?
                        A Former User last edited by

                        @smartboart:

                        Aber eine zwei Fragen hätte ich doch noch…

                        Die Sensoren welche ich unter facade und oder motion anlege, werden die in dem Script als true abgefragt, also bei true geht die scharfe Anlage auf Alarm?

                        Habe unter Aufzählungen unter functions die motion und facade angelegt und jeweils ein script zugeordnet unter java.0 welches ein true und false ausgibt...Es passiert aber leider nichts bei den Outputs des Alarmscripts... Muss ich in dem Logik Script / Auszug unten die komplette ID einragen oder oder reicht das so mit dem * ?

                        var selFacade = $('statestate.id=javascript.0.*'); ` Poste doch Mal dein Skript und einen Screenshot der Objekte. Dann ist es einfacher das zu verstehen was du alles eingerichtet hast.

                        Gesendet von meinem Pixel 2 mit Tapatalk

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

                          Hallo, hab mal ein paar Bilder zusammen gestellt.

                          Ist das richtig, dass profil auto und default nicht in der Vis activiert werden können? Nur die Rückmeldung falls aktiv?

                          Was ist der gedanke hinter disen beiden Profilen? Aktivierung über Anwesenheitserkennung automatish? und das default Profil?

                          6558_scripte.png 6558_objekte_alarm.png 6558_light.png 6558_facade.png 6558_20180424_095451.jpg

                          /* 
                          
                          multi channel burglar alarm - v 0.01
                          
                          features:
                          - six different alarm channels
                          - delayed alarm action
                          - delayed sensor check
                          - alarmlog
                          - define settings as profil
                          
                          changelog:
                           29.09.2017 initial version
                           01.10.2017 restructered with revealing module pattern 
                           03.10.2017 profiles added for alarm channels and sensor groups
                          
                          */
                          
                          var ALARM = (function () {
                          
                              //Settings
                              var instance = 'javascript.0.';
                              var maxLogEntries = 5;
                          
                              //Internal states
                              var enable = false;
                              var state = 0;
                              var alarm = false;
                              var alarmDelay;
                              var alarmTimer = {};
                              var alarmLog = [];
                              var sensorDelay;
                              var sensorTimer = {};
                          
                              //Sensors
                              var selFacade = $('state[state.id=javascript.0.*](functions=facade)');
                              selFacade.on(function(obj) {
                                  _checkSensor(obj,'facade');
                              });
                              var selMotion = $('state[state.id=javascript.0.*](functions=motion)');
                              selMotion.on(function(obj) {
                                  _checkSensor(obj,'motion');
                              });
                          
                              function _checkSensor(obj, group){
                                  if(sensorDelay[group] === 0){
                                      _check(obj);
                                  }else if(sensorDelay[group] > 0){
                                      setTimeout(_check,(sensorDelay[group]*1000),obj);
                                  }
                                  log('checkSensor group:'+group);
                              }
                          
                              function _loadSettings(profile){
                                  switch(profile) {
                                      case 'silent':
                                          sensorDelay = {motion:0,facade:0};
                                          alarmDelay = {silent:0};
                                          break;
                                      case 'night':
                                          sensorDelay = {facade:0};
                                          alarmDelay = {silent:0,intern:60,extern:60};
                                          break;
                                      case 'full':
                                          sensorDelay = {motion:0,facade:0};
                                          alarmDelay = {silent:0,sound:30,strobe:30,intern:60,extern:60,mail:120};
                                          break;
                                      case 'presence':
                                          sensorDelay = {motion:0,facade:0};
                                          alarmDelay = {silent:0,sound:30,strobe:30,intern:60,extern:60,mail:120};
                                          break;
                                      case 'auto':
                                          sensorDelay = {motion:0,facade:0};
                                          alarmDelay = {silent:0,sound:30,strobe:30,intern:60,extern:60,mail:120};
                                          break;
                                      default:
                                          profile = 'default';
                                          sensorDelay = {motion:0,facade:0};
                                          alarmDelay = {silent:0,sound:30,strobe:30,intern:60,extern:60,mail:120};
                                  }
                                  setState(instance+'alarm.out.profile', profile, true);
                                  log('loadSettings profile:'+profile);
                              }
                              function _enable(profil){
                                  enable = true;
                                  state = 1;
                                  _resetAlarm();
                                  _loadSettings(profil);
                                  log('enable');
                              }
                              function _disable(){
                                  enable = false;
                                  state = 0;
                                  _resetAlarm();
                                  _resetAlarmTimer();
                                  log('disable');
                              }
                              function _stop(){
                                  state = 1;
                                  _resetAlarm();
                                  log('stop');
                              }
                              function _resetAlarmTimer(){
                                  for (var elem in alarmTimer) {
                                      clearTimeout(alarmTimer[elem]);
                                      alarmTimer[elem] = null;
                                  }
                                  log('resetAlarmTimer');
                              }
                              function _resetAlarm(){
                                  alarm = false;
                                  setState(instance+'alarm.out.state', state, true);
                                  setState(instance+'alarm.out.alarm', false, true);
                                  setState(instance+'alarm.out.alarm_silent', false, true);
                                  setState(instance+'alarm.out.alarm_sound', false, true);
                                  setState(instance+'alarm.out.alarm_strobe', false, true);
                                  setState(instance+'alarm.out.alarm_intern', false, true);
                                  setState(instance+'alarm.out.alarm_extern', false, true);
                                  setState(instance+'alarm.out.alarm_mail', false, true);
                                  _resetAlarmTimer();
                                  log('resetAlarm state:'+state);
                              }
                              function _startAlarm(elem){
                                  alarm = true;
                                  setState(instance+'alarm.out.alarm_'+elem, true, true);
                                  setState(instance+'alarm.out.state', 3, true);
                                  log('startAlarm elem:'+elem);
                              }
                              function _check(obj){
                                  if(obj.state.val && enable){
                                      for (var elem in alarmDelay) {
                                          if(alarmDelay[elem] === 0){
                                              _startAlarm(elem);
                                          } else if(!alarmTimer[elem]){
                                                  alarmTimer[elem] = setTimeout(_startAlarm,(alarmDelay[elem]*1000),elem);
                                          }
                                          log('startAlarms elem'+elem+':'+alarmDelay[elem]);
                                      }
                                      _logSensor(obj);
                                      log('alarm triggered by sensor '+obj.common.name);
                                  }
                                  log('check obj:'+obj.common.name);
                              }
                              function _logSensor(obj){
                                  var time = (new Date()).toLocaleDateString()+' '+(new Date()).toLocaleTimeString();
                                  var sensor = obj.common.name;
                                  var room = getObject(obj.id, 'rooms').enumNames[0];
                                  alarmLog.push(time+' '+sensor+' '+room);
                                  alarmLog.splice(maxLogEntries);
                                  setState(instance+'alarm.out.log', alarmLog.join('
                          '), true);
                                  setState(instance+'alarm.out.last_sensor', time+' '+sensor+' '+room, true);
                              }
                          
                              _loadSettings();
                          
                              return {
                                  enable: _enable,
                                  disable: _disable,
                                  stop: _stop
                              };
                          
                          })();
                          
                          on({id:'javascript.0.alarm.in.enable', change:'any'}, function(obj){
                              ALARM.enable(obj.state.val);
                              log('on: in.enable val:'+obj.state.val);
                          });
                          on({id:'javascript.0.alarm.in.disable', change:'any'}, function(obj){
                              ALARM.disable();
                              log('on: in.disable');
                          });
                          on({id:'javascript.0.alarm.in.stop', change:'any'}, function(obj){
                              ALARM.stop();
                              log('on: in.stop');
                          });
                          on('javascript.0.presence', function(obj){
                              var state = getState('javascript.0.alarm.out.state').val;
                              var profile = getState('javascript.0.alarm.out.profile').val;
                              if(profile == 'auto'){
                                  if(obj.state.val && state > 0){
                                      setState('javascript.0.alarm.in.disable', true, true);
                                  }else{
                                      setState('javascript.0.alarm.in.enable', 'auto', true);
                                  }
                              }
                          });
                          
                          
                          C 1 Reply Last reply Reply Quote 0
                          • ?
                            A Former User last edited by

                            Das sieht doch schon sehr gut aus.

                            Die Alarmanlage ist auf deinen Screenshot disabled. Ist das Absicht?

                            Aktivier die Alarmanlage mal per GUI oder über setzen des states "'javascript.0.alarm.in.enable" auf z.B. den Wert "full".

                            Profil "auto" aktiviere ich über eine automatische Anwesenheitserkennung.

                            Profil "default" nutze ich aktuell nicht.

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

                              Hallo, ja das ist disabled, weil ich aktuell noch am testen bin.. habe noch keine Sensoren und keine Sirene als Aktor. Im Moment habe ich nur die Aussenbeleuchtung und den emailversand als Alarmoutput eingebunden…

                              habe versucht den Sensor mit nem Sonoff switch zu simulieren in dem ich ihn als facade und motionin in Aufzählungen eingebunden habe...Mit Status des Sonoff true, müsste doch eigentlich der Alarm losgehen wenn auf aktiv steht. oder verstehe ich das falsch?

                              Hast du ein Tip wie ich kontrollieren kann, ob die Enum / Aufzählungen vom Script sauber eingelesen und angesteuert werden?

                              Hab auch die Anwesenheitssimulation laufen mit der AWS Aktiv würde ich auch gerne die Alarmanlage scharf schalten. Kannst du mir da auch ein Tipp zu geben?

                              Dachte da an ein zusätzliches kleines Script wie:
                              ` > on({id: 'javascript.0.Anwesenheitssteuerung.AWSAktiv'}, function (obj) {

                              setState("javascript.0.alarm.in.enable", auto);

                              }); `

                              oder wie hast du das gelöst?

                              1 Reply Last reply Reply Quote 0
                              • ?
                                A Former User last edited by

                                @smartboart:

                                oder wie hast du das gelöst? `

                                on('javascript.0.central.presence', function (obj) {
                                    var state = getState('javascript.0.alarm.out.state').val;
                                    var profile = getState('javascript.0.alarm.out.profile').val;
                                    if (profile == 'auto' || state === 0) {
                                        if (obj.state.val && state > 0) {
                                            setState('javascript.0.alarm.in.disable', true, true);
                                        } else {
                                            setState('javascript.0.alarm.in.enable', 'auto', true);
                                        }
                                    }
                                });
                                
                                1 Reply Last reply Reply Quote 0
                                • ?
                                  A Former User last edited by

                                  @smartboart:

                                  Hast du ein Tip wie ich kontrollieren kann, ob die Enum / Aufzählungen vom Script sauber eingelesen und angesteuert werden? `

                                  Dazu gibt es folgendes in der Doku des javascript Adapters:

                                  $('channel[state.id=*.STATE](functions=Windows)').each(function (id, i) {log(id);}); - print all states of enum "windows" in log
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • smartboart
                                    smartboart last edited by

                                    Super danke für das script Automatische Aktivierung…Das Aktivieren funktioniert prima mit meiner Anwesenheitssteuerung.

                                    Leider kann ich es so nicht verwenden, da meine Anwesenheitssteuerung welche bei jemand zu Hause auf false schaltet , die Alarmanalge nicht deaktiviert. wenn ich die Anweseheitssteuerung auf true force funktioniert das auto aktivieren einwandfrei...force ich auf false bleibt die Alarmanalge aktiviert.

                                    Ist das bei dir so gewollt? Stellst du die Alarmanlage dann manuell unscharf? oder hast du noch ein separates script für das Deaktivieren? Ist natürlich doof wenn bei Anwesenheit die restlichen Profile nicht mehr aktiviert werden können. Wie machst du das?

                                    1 Reply Last reply Reply Quote 0
                                    • ?
                                      A Former User last edited by

                                      Das Problem hab ich irgendwie nicht verstanden.

                                      Was meinst du mit "true force"?

                                      Ich stelle die Anlange automatisch unscharf, wenn das Profil auto aktiv ist und jemand nach Hause kommt (javascript.0.central.presence wechselt auf true). Das passiert nicht in dem genannten Skript und nicht seperat.

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

                                        Mit true forcen meine ich meine Startbedingung auf true setzen javascript.0.Anwesenheitssteuerung.AWSAktiv. Diese Objekt ID wird bei mir true wenn keiner zu Hause ist..Mit dieser Bedingung gehe ich in die Automatikfunktion der Alarmanlage..Dazu habe ich dein Programmteil der Alarmanlage verwendet , weil es viel besser ist als meine eigenen stümperhaften Gehversuche. Das funktioniert auch prima…Wenn jetzt jemand heim kommt, wird die oben genannte Objekt ID false...Damit müsste ich jetzt noch die javascript.0.alarm.in.disable erneut true schalten um die Alarmanlage wieder zu deaktivieren, aber so, dass ich jederzeit die 4 andern Profile manuell über vis aktivieren kann...Also nur kurz antriggern und nicht ständig auf false halten... Ist das in dem Programmteil der Alarmanlage so gelöst? Das macht es nämlich nicht bei mir..

                                        ` > on('javascript.0.Anwesenheitssteuerung.AWSAktiv', function (obj) {

                                        var state = getState('javascript.0.alarm.out.state').val;

                                        var profile = getState('javascript.0.alarm.out.profile').val;

                                        if (profile == 'auto' || state === 0) {

                                        if (obj.state.val && state > 0) {

                                        setState('javascript.0.alarm.in.disable', true, true);

                                        } else {

                                        setState('javascript.0.alarm.in.enable', 'auto', true);

                                        }

                                        }

                                        }); `

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

                                          Ok hab es geschnallt….hab bei der ganzen Sache etwas auf dem Schlauch gestanden..wenn ich mir meine fragen jetzt so durchlese möchte ich sie am liebsten löschen. Aber aller Anfang ist schwer....die Alarmanlage ist nun in Betrieb und läuft bestens....danke für die tolle Arbeit ...

                                          1 Reply Last reply Reply Quote 0
                                          • ?
                                            A Former User last edited by

                                            @smartboart:

                                            Ok hab es geschnallt….hab bei der ganzen Sache etwas auf dem Schlauch gestanden..wenn ich mir meine fragen jetzt so durchlese möchte ich sie am liebsten löschen. Aber aller Anfang ist schwer....die Alarmanlage ist nun in Betrieb und läuft bestens....danke für die tolle Arbeit ... `

                                            so haben wir alle mal angefangen. Viel Spaß weiterhin

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            766
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

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