Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Alarmanlagen Script

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Alarmanlagen Script

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

      Hallo Männer,

      Ich habe eine ähnliche Geschichte wie ihr beiden zuerst ccu.io aber nur kurz und dann iobroker. Ich habe mir eine Menge hier aus dem Forum gesucht und auch eine Menge mittlerweile verstanden, dich bei den Scripten bin ich immer noch aufgeschmissen. Deshalb versuche ich es mal weiter neben bei zu verstehen.

      Nun aber nochmal zu dem oben beschriebenen Script.

      Ich habe nun einen weiteren Fehler. Für mich sieht das aus als fehlt der Datenpunkt bei geofency. Den allerdings habe ich.

      Hier das Bild dazu.

      ~~![](</s><URL url=)<link_text text="http://uploads.tapatalk-cdn.com/2016080 ... d4e1ab.png">http://uploads.tapatalk-cdn.com/20160802/58203c0c85bd6247155cedb6e8d4e1ab.png</link_text>" />

      Gruß Sven

      Gesendet von iPhone mit Tapatalk~~

      1 Reply Last reply Reply Quote 0
      • htrecksler
        htrecksler Forum Testing last edited by

        manchmal sieht man den Wald…

        kleiner Schreibfehler im Script...

        // ######################
        // Geofency überwachen
        var idGeofency = 'geofency.0.atHome'; 
        on(idGeonfency, function (data) {
            if (data.state.val === 0) {
        

        Da wird die Variable idGeofency deklariert aber direkt danach "idGeonfency" (mit "n") benutzt. Und die meckert er ja auch an. 🙂

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

          Hermann, vielen Dank für die Korrektur meiner Fehler. Nächstes Mal teste ich das Skript wieder vorher. :oops: :oops:

          Pix

          1 Reply Last reply Reply Quote 0
          • htrecksler
            htrecksler Forum Testing last edited by

            Alles gut, nächstes mal darfst du meine Fehler korrigieren

            ️

            Gesendet von meinem SM-G935F mit Tapatalk

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

              Hallo ich bins mal wieder 🙂

              also das Script läuft nun soweit. Bei mir steht allerdings die Zahl für Geofancy in einer anderen Variable:

              var idGeofency = 'geofency.0.atHomeCount';
              ````Diese habe ich geändert und da nun keine Fehler mehr auftauchen, scheint das ok zu sein.
              
              Nun funktioniert:
              
              + Die Scharfschaltung nach 60 Sekunden Abwesenheit :-)
              
              + Wenn jemand zurück kehrt die deaktivierung der Alramanlage :-)
              
              - Kommt jemand innerhalb der 60 Sekunden zurück wird sie leider nicht deaktiviert :-(
              
              Nun habe ich mich Versucht in der Aktion der Pushnachrichten. Hier brauche ich nun nochmal ein paar Erklärungen.
              
              Dieses sollte doch der Codeteil sein, aus dem die Infos für die Push entnommen werden können oder?
              
              

              var cacheSelectorState = $('channelstate.id=*.STATE');

              function bewegungFenster(obj) {
              log('Bewegung im Gewerk <verschluss> - Auslösender Aktor: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat

              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)
                  var obj    = getObject(id);
                  var name = getObject(id).common.name;
                  //var geraet = getObject(obj.deviceId).native.TYPE;
                  var devicename = name.substring(0, name.indexOf(".STATE"));             //.state aus Text entfernen
                  if (status /*TFK*/ || status === 1 || status === 2 /*RHS*/) {  // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
                      var alarmanlage = getState(idAlarmanlage).val,
                          betreff = 'ioBroker Alarmanlage',
                          nachricht = devicename + ' hat Öffnung (' + fensterstatus(status) + ')';
                      if (alarmanlage > 0 ) { // Alarmanlage Automatik/An
                          nachricht = nachricht + ' bei scharfer Alarmanlage erkannt';
                          // hier Nachrichtendienst einfügen (Funktion, Befehl oder globale Funktion)
                          // hier Sprachansage einfügen (Funktion, Befehl oder globale Funktion)
                      } // Ende Alarmanlage scharf
                      else if (alarmanlage === 0) {</verschluss>
              
              
              Diese Nachrichten kann ich aus dem Log ja entnehmen. Als Push hätte ich dann gerne auch die Infos für (rot markiert)
              
              info script.js.Alarmanlage_Aussenhaut: Alarmanlage automatisch eingeschaltet
              
              info script.js.Alarmanlage_Aussenhaut: keine Person zu Hause - in 60s wird Alarmanlage scharf geschaltet
              
              info adapter geofency received webhook from device sven with values: name: atHome, entry: 0
              
              info script.js.Alarmanlage_Aussenhaut: Alarmanlage ausgeschaltet
              
              info script.js.Alarmanlage_Aussenhaut: Es sind wieder Personen zu Hause, Alarmanlage wird unscharf geschaltet
              
              info script.js.Alarmanlage_Aussenhaut: Zahl der Personen zu Hause: 1
              
              info script.js.Alarmanlage_Aussenhaut: Kuechenfenster hat Öffnung (TFK offen) bei scharfer Alarmanlage erkannt
              
              info script.js.Alarmanlage_Aussenhaut: Bewegung im Gewerk - Auslösender Aktor: hm-rpc.0.LEQ0567007.1.STATE: 2
              
              Nun war meine Einschätzung für das Script der Push Nachrichten folgendermaßen:
              
              

              var status = "getState(id).val";
              var obj = "getObject(id");
              var name = "getObject(id).common.name";
              var alarmanlage = "getState(idAlarmanlage).val";

              on({id: Alarmanlage_Huelle, val: true}, function() {
              sendTo('telegram', " [color]??????????[/color]");
              });

              
              Aber irgendwie läuft das so leider gar nicht….
              
              Was mache ich denn falsch?
              
              Zuerst müssen doch alle Variablen im Telegram benannt werden oder?
              
              Und dann im send müssen die Variablen wieder "aufgegriffen" werden oder?
              
              Oh man ich habe scheinbar doch noch viel zu wenig Plan davon...
              
              Gruß Sven
              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                @Sven2013:

                Hallo ich bins mal wieder 🙂

                also das Script läuft nun soweit. Bei mir steht allerdings die Zahl für Geofancy in einer anderen Variable:

                var idGeofency = 'geofency.0.atHomeCount';
                ````Diese habe ich geändert und da nun keine Fehler mehr auftauchen, scheint das ok zu sein.
                
                Nun funktioniert:
                
                + Die Scharfschaltung nach 60 Sekunden Abwesenheit :-)
                
                + Wenn jemand zurück kehrt die deaktivierung der Alramanlage :-)
                
                - Kommt jemand innerhalb der 60 Sekunden zurück wird sie leider nicht deaktiviert :-(
                
                Nun habe ich mich Versucht in der Aktion der Pushnachrichten. Hier brauche ich nun nochmal ein paar Erklärungen.
                
                Dieses sollte doch der Codeteil sein, aus dem die Infos für die Push entnommen werden können oder?
                
                

                var cacheSelectorState = $('channelstate.id=*.STATE');

                function bewegungFenster(obj) {
                log('Bewegung im Gewerk <verschluss> - Auslösender Aktor: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat

                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)
                    var obj    = getObject(id);
                    var name = getObject(id).common.name;
                    //var geraet = getObject(obj.deviceId).native.TYPE;
                    var devicename = name.substring(0, name.indexOf(".STATE"));             //.state aus Text entfernen
                    if (status /*TFK*/ || status === 1 || status === 2 /*RHS*/) {  // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
                        var alarmanlage = getState(idAlarmanlage).val,
                            betreff = 'ioBroker Alarmanlage',
                            nachricht = devicename + ' hat Öffnung (' + fensterstatus(status) + ')';
                        if (alarmanlage > 0 ) { // Alarmanlage Automatik/An
                            nachricht = nachricht + ' bei scharfer Alarmanlage erkannt';
                            // hier Nachrichtendienst einfügen (Funktion, Befehl oder globale Funktion)
                            // hier Sprachansage einfügen (Funktion, Befehl oder globale Funktion)
                        } // Ende Alarmanlage scharf
                        else if (alarmanlage === 0) {</verschluss>
                
                
                Diese Nachrichten kann ich aus dem Log ja entnehmen. Als Push hätte ich dann gerne auch die Infos für (rot markiert)
                
                info script.js.Alarmanlage_Aussenhaut: Alarmanlage automatisch eingeschaltet
                
                info script.js.Alarmanlage_Aussenhaut: keine Person zu Hause - in 60s wird Alarmanlage scharf geschaltet
                
                info adapter geofency received webhook from device sven with values: name: atHome, entry: 0
                
                info script.js.Alarmanlage_Aussenhaut: Alarmanlage ausgeschaltet
                
                info script.js.Alarmanlage_Aussenhaut: Es sind wieder Personen zu Hause, Alarmanlage wird unscharf geschaltet
                
                info script.js.Alarmanlage_Aussenhaut: Zahl der Personen zu Hause: 1
                
                info script.js.Alarmanlage_Aussenhaut: Kuechenfenster hat Öffnung (TFK offen) bei scharfer Alarmanlage erkannt
                
                info script.js.Alarmanlage_Aussenhaut: Bewegung im Gewerk - Auslösender Aktor: hm-rpc.0.LEQ0567007.1.STATE: 2
                
                Nun war meine Einschätzung für das Script der Push Nachrichten folgendermaßen:
                
                

                var status = "getState(id).val";
                var obj = "getObject(id");
                var name = "getObject(id).common.name";
                var alarmanlage = "getState(idAlarmanlage).val";

                on({id: Alarmanlage_Huelle, val: true}, function() {
                sendTo('telegram', " [color]??????????[/color]");
                });

                
                Aber irgendwie läuft das so leider gar nicht….
                
                Was mache ich denn falsch?
                
                Zuerst müssen doch alle Variablen im Telegram benannt werden oder?
                
                Und dann im send müssen die Variablen wieder "aufgegriffen" werden oder?
                
                Oh man ich habe scheinbar doch noch viel zu wenig Plan davon...
                
                Gruß Sven `  
                

                In dem Skript oben ist doch extra eine Zeile eingefügt, wo man Benachrichtigungen einbauen soll (// hier Nachrichtendienst einfügen (Funktion, Befehl oder globale Funktion)). Dort hinein dann:

                sendTo('telegram', nachricht);
                

                In der Variable "nachricht" steht doch schon, wenn etwas offen ist. Du brauchst in telegram nix vorher definieren. Hier geht es nicht um den chat mit telegram, sondern um Statusnachrichten, wenn etwas passiert.

                Zum Thema Ausschalten bei vorzeitiger Rückkehr empfehle ich mal clearStateDelayed(idAlarmanlage); zum Löschen des Timers.

                Erweitere diese subscription

                on(idGeonfency, function (data) {
                    if (data.state.val === 0) {
                        log('keine Person zu Hause - in 60s wird Alarmanlage scharf geschaltet');
                        setStateDelayed(idAlarmanlage, 2, 60 * 1000); // nach 60s auf Automatik
                    } else {
                        log('Zahl der Personen zu Hause: ' + data.state.val);
                        if (getState(idAlarmanlage).val > 0) log('Es sind wieder Personen zu Hause, Alarmanlage wird unscharf geschaltet');
                        setState(idAlarmanlage, 0);
                    }
                }); 
                
                ````um die obige kursive Zeile zu diesem hier:
                

                on(idGeonfency, function (data) {
                if (data.state.val === 0) {
                log('keine Person zu Hause - in 60s wird Alarmanlage scharf geschaltet');
                setStateDelayed(idAlarmanlage, 2, 60 * 1000); // nach 60s auf Automatik
                } else {
                clearStateDelayed(idAlarmanlage); // Verzögerung vom weggehen wieder ausschalten, falls noch keine 60s um sind.
                log('Zahl der Personen zu Hause: ' + data.state.val);
                if (getState(idAlarmanlage).val > 0) log('Es sind wieder Personen zu Hause, Alarmanlage wird unscharf geschaltet');
                setState(idAlarmanlage, 0);
                }
                });

                
                Falls du die Geofency Zone noch nicht verlassen hast, aber dennoch zurückkehrst, war der Alarmcountdown ja noch nicht angelaufen.
                
                Es könnte mal Probleme geben, wenn du dich am Rand der Zone bewegst und mal drinnen und dann wieder draussen bist. Dafür sollte eigentlich eine Art Entprellung/Hysterese stattfinden. Aber das sollte der Adapter abfangen, nicht jedes einzelene Skript.
                
                Gruß
                
                Pix
                1 Reply Last reply Reply Quote 0
                • J
                  jensus11 last edited by

                  Hi, ich würde gerne die Variable Anwesenheit anstatt Geofency nutzen.

                  Ich habe das mal versucht umzuschreiben, funktioniert nur nicht.

                  Es wird zwar die Alarmanlage auf Automatik gesetzt, leider aber nicht wieder auf aus.

                  Was mache ich falsch? Muss true noch mit eingebaut werden?

                  // Anwesenheit überwachen
                  var idAnwesenheit = 'hm-rega.0.7610'; 
                  on(idAnwesenheit, function (obj) { // alten Fehler korrigiert
                      if (obj.state.val === false) {
                          log('keine Person zu Hause - in 60s wird Alarmanlage scharf geschaltet');
                          setStateDelayed(idAlarmanlage, 2, 60 * 1000); // nach 60s auf Automatik
                      } else {
                          clearStateDelayed(idAlarmanlage); // Verzögerung vom weggehen wieder ausschalten, falls noch keine 60s um sind
                          log('Zahl der Personen zu Hause: ' + data.state.val);
                          if (getState(idAlarmanlage).val > 0) log('Es sind wieder Personen zu Hause, Alarmanlage wird unscharf geschaltet');
                          setState(idAlarmanlage, 0);
                      }
                  
                  1 Reply Last reply Reply Quote 0
                  • T
                    tempestas last edited by

                    Was für einen Wert triggert deine hm-rega denn?

                    Was sagt das Log, funktioniert denn grundsätzlich die else Funktion, oder bleibt die komplett "stumm"`?

                    1 Reply Last reply Reply Quote 0
                    • J
                      jensus11 last edited by

                      true und false soll getriggert werden.

                      False wird auch getriggert und das funktioniert auch mit den Alarmmeldungen.

                      Wenn dann true getriggert wird kommt dieser Fehler im Log.

                      javascript.0	2017-11-07 20:46:48.821	error   at Object. (script.js.Meldungen_Alarme.Alarmanlage_Anwesenheit:45:46)
                      javascript.0	2017-11-07 20:46:48.821	error	Error in callback: ReferenceError: data is not defined
                      

                      Zeile 45:46 ist das.

                      log('Zahl der Personen zu Hause: ' + data.state.val);
                      if (getState(idAlarmanlage).val > 0) log('Es sind wieder Personen zu Hause, Alarmanlage wird unscharf geschaltet');
                      
                      1 Reply Last reply Reply Quote 0
                      • T
                        tempestas last edited by

                        in der function steht (obj), in der Abfrage aber data.state.val

                        log('Zahl der Personen zu Hause: ' + data.state.val);
                        

                        das müsste

                        log('Zahl der Personen zu Hause: ' + obj.state.val);
                        

                        Allerdings ergibt das log dann auch keinen Sinn (es sollte aber funktionieren), da das Log dann ausgibt "Zahl der Personen zu Hause true"; aber das macht ja nichts

                        1 Reply Last reply Reply Quote 0
                        • J
                          jensus11 last edited by

                          Super, so funktioniert das wie ich es wollte.

                          Danke.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          809
                          Online

                          31.7k
                          Users

                          79.8k
                          Topics

                          1.3m
                          Posts

                          5
                          21
                          5157
                          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