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

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Projekt] Alarmanlage mit mehreren Alarmstufen

    This topic has been deleted. Only users with topic management privileges can see it.
    • ?
      A Former User last edited by

      Vielen Dank nochmals für die vielen Ideen @Uhula

      Ich möchte insbesondere die Einfachheit im Vordergrund behalten.

      Da die Kombination aus Meldelinie, Scharf-Zustand, Sensor, Verzögerung schnell unkontrollierbar wird habe ich mal ausprobiert diese Kombinationen als Profile abgebildet.

      Mit den Profilen lassen sich Meldelinien und Alarmkanäle aktivieren, bzw mit einer Verzögerung versehen.

      Ein erster Vorgeschmack schon mal vorab.

      Ich habe noch nicht ausgiebig getestet und auch noch die Widgets nicht angepasst, daher sind bestimmt noch Fehler drin 🙂

      Meint ihr die Nutzung der Profil ist ein guter Einsatz um Einfachheit und gleichzeitig Flexibilität abzubilden.

      ! ````
      /*

      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(profil){
          switch(profil) {
              case 'silent':
                  sensorDelay = {motion:0,facade:0};
                  alarmDelay = {silent:0};
                  break;
              case 'night':
                  sensorDelay = {door: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;
              default:
                  sensorDelay = {motion:0,facade:0};
                  alarmDelay = {silent:0,sound:30,strobe:30,intern:60,extern:60,mail:120};
          }
      }
      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.log', '', 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);
          }
      }
      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');
      });

      
      Angepasste States:
      
      >! ````
      //Input
      createState('alarm.in.enable', {
          read: true, 
          write: true, 
          desc: "Is used to arm the system, but cannot be used to disarm it.", 
          type: "string"
      });
      createState('alarm.in.disable', {
          read: true, 
          write: true, 
          desc: "Turns off the activated outputs and disarms the alarm system.", 
          type: "boolean"
      });
      createState('alarm.in.stop', {
          read: true, 
          write: true, 
          desc: "Can be used to stop the alarm.", 
          type: "boolean"
      });
      >! //Output
      createState('alarm.out.state', 0, {
          read: true, 
          write: false, 
          desc: "Returns the current state of the system,", 
          type: "number", 
          min:  '0',
          max:  '3',
          states: '0:Disabled;1:Armed with motion sensors;2:Alarm triggered',
          def: 0
      });
      createState('alarm.out.alarm', {
          read: true, 
          write: false, 
          desc: "Alarm", 
          type: "boolean"
      });
      createState('alarm.out.alarm_silent', {
          read: true, 
          write: false, 
          desc: "Silent alarm", 
          type: "boolean"
      });
      createState('alarm.out.alarm_sound', {
          read: true, 
          write: false, 
          desc: "Sound alarm", 
          type: "boolean"
      });
      createState('alarm.out.alarm_strobe', {
          read: true, 
          write: false, 
          desc: "Strobe alarm", 
          type: "boolean"
      });
      createState('alarm.out.alarm_intern', {
          read: true, 
          write: false, 
          desc: "Internal alarm", 
          type: "boolean"
      });
      createState('alarm.out.alarm_extern', {
          read: true, 
          write: false, 
          desc: "External alarm", 
          type: "boolean"
      });
      createState('alarm.out.alarm_mail', {
          read: true, 
          write: false, 
          desc: "Mail alarm", 
          type: "boolean"
      });
      createState('alarm.out.log', {
          read: true, 
          write: false, 
          desc: "List with last sensors.", 
          type: "string"
      });
      createState('alarm.out.last_sensor', {
          read: true, 
          write: false, 
          desc: "Tells you which sensor has been activated. The output gives the room, name, date and time.", 
          type: "string"
      });
      
      1 Reply Last reply Reply Quote 0
      • ?
        A Former User last edited by

        Die neue Version mit Profilen und ein paar Umbauten hab ich im ersten Post hinterlegt.

        Ich hab auch die Anzeige noch etwas angepasst Aufgrund der Profile.

        Ebenfalls ist am Ende des Skripts eine Minimallösung wie ich bei mir die Automatische Aktivierung/Deaktivierung anhand von Anwesenheit gelöst habe über das Profil 'auto'.

        Viel Spaß beim ausprobieren

        1 Reply Last reply Reply Quote 0
        • A
          andy6d last edited by

          Hallo, bin gerade dabei das Script von nisio einzubinden.

          Blöde Frage, wo und wie mache ich das? :shock:

          Sorry fange gerade mit dem Thema an und komme einfach nicht darauf.

          Habe es als eigenen Ordner unter Scripts am laufen aber da passiert rein gar nichts. Weiter fehlt mir der Bezug auf die "eigene" Anlage Melder usw. Vielleicht kann mir da jemand kurz auf die Sprünge helfen :roll:

          Achso in Zeile 177 und 178 steht alram drin, sollte bestimmt alarm heißen.

          1 Reply Last reply Reply Quote 0
          • B
            Blackeye last edited by

            Hi,

            auch ich wäre um ein paar Tipps dankbar. Habe noch nie Dinge importiert.

            Gesendet von iPhone mit Tapatalk Pro

            1 Reply Last reply Reply Quote 0
            • B
              Blackeye last edited by

              Hi,

              Kann mir sagen wie ich den Card View importieren kann? Mit den png Dateien weiß ich ach nicht wohin.

              Und was muss ich noch machen wenn ich alles importiert habe? Profile kenne ich nicht, bin noch neu in IoBroker.

              Danke

              Lars

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

                @andy6d:

                Hallo, bin gerade dabei das Script von nisio einzubinden.

                Blöde Frage, wo und wie mache ich das? :shock:

                Sorry fange gerade mit dem Thema an und komme einfach nicht darauf.

                Habe es als eigenen Ordner unter Scripts am laufen aber da passiert rein gar nichts. Weiter fehlt mir der Bezug auf die "eigene" Anlage Melder usw. Vielleicht kann mir da jemand kurz auf die Sprünge helfen :roll:

                Achso in Zeile 177 und 178 steht alram drin, sollte bestimmt alarm heißen. `

                Zeile #177 und #178 habe ich angepasst, Danke für den Hinweis.

                Benötigt wird der Javascript Adapter "ioBroker.javascript".

                Ich habe zwei Skripte unter dem Ordner Common angelegt.

                Das erste beinhaltet die States und das zweite Skript die eigentliche Logik. Die Skripte sind auch im Beitrag #1 enthalten.

                Beide Skripte müssen aktiviert sein (grünes Symbol).

                Eigene Melder lassen sich beliebig hinzufügen.

                Dazu muss nur in Zeile #35+ ein neuer Selektor angelegt werden.

                Wenn dazu eine neue Sensorgruppe (motion, facade, neu1, neu2) benutzt werden soll, dann muss diese noch hinzugefügt werden in der Funktionen _loadSettings und dort einem der Profile als sensorDelay zugeordnet. Ansonsten laufen die neuen Melder ins Leere.

                Hilft das weiter?

                Gerne weitere Fragen stellen…

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

                  @Blackeye:

                  Hi,

                  Kann mir sagen wie ich den Card View importieren kann? Mit den png Dateien weiß ich ach nicht wohin.

                  Und was muss ich noch machen wenn ich alles importiert habe? Profile kenne ich nicht, bin noch neu in IoBroker.

                  Danke

                  Lars `

                  Die Visualisierung basiert komplett auf dem Material Design von Uhula.

                  Dort sind auch alle Infos zu Cards zu finden.

                  Importieren kann man die Card View im Vis Editor unter dem Tab "Views" gibt es dazu einen Button "Import View"

                  Die png Dateien liegen bei mir im root des Vis projects, z.B. /vis.0/main/

                  Man kann dazu den File Manager im Vis Editor verwenden.

                  Profile sind innerhalb des Skripts mit der Logik.

                  Damit lassen sich Melder gruppieren und zu verschiedenen Alarmlevel kombinieren, z.B.:

                  • Nachts Aussenhaut überwachen und stillen Alarm auslösen

                  • Tagsüber nur Sabotagealarm aktivieren

                  • Voller Alarm bei Abwesenheit

                  -…

                  1 Reply Last reply Reply Quote 0
                  • B
                    Blackeye last edited by

                    Hi,

                    Danke für die wirklich schon mal große Hilfe. :idea:

                    Aber wie klappt das mit den Gruppen? Geht das automatisch nach starten des Scripts? Bei mir werden nämlich nur die Schalter angelegt.

                    @nisio:

                    @Blackeye:

                    Hi,

                    Kann mir sagen wie ich den Card View importieren kann? Mit den png Dateien weiß ich ach nicht wohin.

                    Und was muss ich noch machen wenn ich alles importiert habe? Profile kenne ich nicht, bin noch neu in IoBroker.

                    Danke

                    Lars `

                    Die Visualisierung basiert komplett auf dem Material Design von Uhula.

                    Dort sind auch alle Infos zu Cards zu finden.

                    Importieren kann man die Card View im Vis Editor unter dem Tab "Views" gibt es dazu einen Button "Import View"

                    Die png Dateien liegen bei mir im root des Vis projects, z.B. /vis.0/main/

                    Man kann dazu den File Manager im Vis Editor verwenden.

                    Profile sind innerhalb des Skripts mit der Logik.

                    Damit lassen sich Melder gruppieren und zu verschiedenen Alarmlevel kombinieren, z.B.:

                    • Nachts Aussenhaut überwachen und stillen Alarm auslösen

                    • Tagsüber nur Sabotagealarm aktivieren

                    • Voller Alarm bei Abwesenheit

                    -… `

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

                      Hallo @Blackeye,

                      Hast du das Skript mit den States aktiviert? Dann sollten alle States angelegt worden sein.

                      Hast du das Skript mit der Logik aktiviert? Dann kannst du über den View im Vis oder direkt über den State javascript.0.alarm.in.enable die Alarmanlage aktivieren. Dazu wird der Wert des States als Profilname weitergegeben an die Funktion _loadSettings.

                      Die Sensorgruppen werden nur durch den Selektor definiert.

                      Ich nutze dazu sehr gerne die enum Funktion.

                      Alle Sensoren für die Gruppe Fassade gebe ich als Funktion genau diese enum.

                      Man kann so z.B. alle Türsensoren und Fensterkontakte im Reiter "Objekte" die Funktion Fassade zuweisen und anschliessend diese als Selektor nutzen.

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

                      selFacade.on(function(obj) {

                      _checkSensor(obj,'facade');

                      });

                      Auf diese Weise kann man beliebig viele verschiedene Meldergruppen aus seinen Sensoren aufbauen.

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

                        Hallo zusammen,

                        ich habe jetzt versucht, bei mir das Projekt laufenzulassen. Die beiden Scripte laufen, die Widgets habe ich in Vis importiert.

                        Wenn ich die Seite aufrufe, erhalte ich allerdings nur eine leere Seite, auf der unten Kästchen mit "Silent", "Night", "Full" und "Presence" stehen.

                        Was könnte ich denn falschgemacht haben?

                        Danke für die Info, das Projekt sieht nämlich genau nach dem aus, was ich suche …

                        lg, sckibo
                        4423_alarmanlage.png

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

                          Hallo @sckibo,

                          hast du das Material Design von Uhula eingebunden als CSS in deinem Projekt?

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

                            @nisio:

                            Hallo @sckibo,

                            hast du das Material Design von Uhula eingebunden als CSS in deinem Projekt? `

                            Das hatte ich tatsächlich vergessen - ich habe es jetzt eingefügt, aber ausser der Farbe der "Buttons" hat sich nichts geändert.

                            Irgendetwas habe ich wohl falsch gemacht.

                            Danke für die Hilfe,

                            sckibo
                            4423_alarm2.png

                            1 Reply Last reply Reply Quote 0
                            • C
                              ChrisX last edited by

                              ich kenne das Alarmanlagen Modul von Fhem das arbeitet auch mit verschiedenen Alarmstufen Actor / Sensor.

                              Gibt es deine Alarmanlage später auch irgendwie als Komplett Paket ? geht das in iobroker ? Sorry bin noch absoluter iobroker Neuling nach 6 Jahren FHEM.

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

                                Hallo ChrisX,

                                was meinst du mit Komplettpaket?

                                Welche Features des Fhem Alarmpakets nutzt du?

                                Ich bin noch am testen der Alarmanlage im Alltag um rauszufinden was ich an Features wirklich benötige.

                                Für Ideen und Feedback bin ich immer dankbar

                                1 Reply Last reply Reply Quote 0
                                • O
                                  olifall last edited by

                                  Hallo zusammen,

                                  ich wollte mal fragen ob mir jemand mit Blockly weiterhelfen kann.

                                  Ich bin Neuling in Sache ioBroker und mit Programmieren kenne ich mich auch nicht gut aus.

                                  Bei mir läuft Homematic mit Fenster/Türkontakten und sonst noch ein paar Aktoren. Ich habe mit einem CCU2 Programm eine Alarmanlage realisiert, das leider nicht immer 100% läuft, es ist

                                  immer wieder mal ein komisches Verhalten vorhanden.

                                  Jetzt habe ich gedacht, weil ioBroker so eine super Sache ist, (habe es geschafft meine Geräte über Siri zu steuern) würde ich gerne das Alarmanlage Programm von der CCU auf ioBroker zu

                                  übernehmen. Leider bekomme ich es nicht hin.

                                  Vielen Dank schonmal

                                  Gruss Oli

                                  Hier mein CCU Programm:
                                  4366_alarmierungog1.jpg
                                  4366_alarmierungog2.jpg

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

                                    Hallo zusammen,

                                    irgendwie komme ich leider nicht weiter.

                                    Wenn ich das Programm "alarm_run" laufenlasse, findet das Script scheinbar meine Geräte nicht:

                                    //Sensors

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

                                    var size = Object.keys(selFacade).length;

                                    log('size of selFacade: '+size+' selFacade: '+selFacade+' type: '+typeof selFacade);

                                    selFacade.on(function(obj) {

                                    _checkSensor(obj,'facade');

                                    log("Obj: ",obj);

                                    });

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

                                    size = Object.keys(selMotion).length;

                                    log('size of selMotion: '+size);

                                    selMotion.on(function(obj) {

                                    _checkSensor(obj,'motion');

                                    });

                                    Output:

                                    21:57:14.480 [info] javascript.0 Start javascript script.js.common.Alarm_Run

                                    21:57:14.483 [info] javascript.0 script.js.common.Alarm_Run: size of selFacade: 5 selFacade: [object Object] type: object

                                    21:57:14.483 [info] javascript.0 script.js.common.Alarm_Run: size of selMotion: 5

                                    21:57:14.483 [info] javascript.0 script.js.common.Alarm_Run: loadSettings profile:default

                                    21:57:14.483 [info] javascript.0 script.js.common.Alarm_Run: registered 4 subscriptions and 0 schedules

                                    Kann mir jemand sagen, wie ich feststelle, ob er die "facade" Sensoren gefunden hat?

                                    vielen Dank, Sckibo
                                    4423_facade.png

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

                                      @sckibo:

                                      //Sensors

                                      var selFacade = $('statestate.id=~~[color=#FF0000]~~javascript.0.*'); `

                                      Deine Objekte kiegen nicht unter der Instanz javascript.0.

                                      Trag mal deine korrekte Instanz dort ein "hm-rpc.0".

                                      Das könnte es schon gewesen sein.

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

                                        @nisio:

                                        @sckibo:

                                        //Sensors

                                        var selFacade = $('statestate.id=~~[color=#FF0000]~~javascript.0.*'); `

                                        Deine Objekte kiegen nicht unter der Instanz javascript.0.

                                        Trag mal deine korrekte Instanz dort ein "hm-rpc.0".

                                        Das könnte es schon gewesen sein. `

                                        yep - das war es - jetzt werden die Sensoren gefunden.

                                        Die Visualisierung funktioniert aber immer noch nicht.

                                        Wenn ich den View auswähle, erhalte ich die beiliegenden Screens.

                                        vielen Dank, sckibo
                                        4423_vis1.png
                                        4423_vis2.png
                                        4423_vis3.png
                                        4423_vis4.png

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

                                          Hast du weiß als Background-color? Probier mal etwas dunkles aus.

                                          Die meisten Symbole sind weiß und könnten daher bei deinem weißen Hintergrund unsichtbar sein.

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

                                            Hi,

                                            vielen Dank - das hat funktioniert.

                                            vg, sckibo

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            813
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            32
                                            138
                                            28095
                                            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