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. Alarmanlagen Script

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

Alarmanlagen Script

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

    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. :-)

    Gruss Hermann

    ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

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

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

      Pix

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

      1 Antwort Letzte Antwort
      0
      • htreckslerH Offline
        htreckslerH Offline
        htrecksler
        Forum Testing
        schrieb am zuletzt editiert von
        #14

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

        ️

        Gesendet von meinem SM-G935F mit Tapatalk

        Gruss Hermann

        ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

        1 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          Sven2013
          schrieb am zuletzt editiert von
          #15

          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 Antwort Letzte Antwort
          0
          • P Offline
            P Offline
            pix
            schrieb am zuletzt editiert von
            #16

            @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

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

            1 Antwort Letzte Antwort
            0
            • J Offline
              J Offline
              jensus11
              schrieb am zuletzt editiert von
              #17

              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 Antwort Letzte Antwort
              0
              • T Offline
                T Offline
                tempestas
                schrieb am zuletzt editiert von
                #18

                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"`?

                <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                1 Antwort Letzte Antwort
                0
                • J Offline
                  J Offline
                  jensus11
                  schrieb am zuletzt editiert von
                  #19

                  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 Antwort Letzte Antwort
                  0
                  • T Offline
                    T Offline
                    tempestas
                    schrieb am zuletzt editiert von
                    #20

                    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

                    <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                    1 Antwort Letzte Antwort
                    0
                    • J Offline
                      J Offline
                      jensus11
                      schrieb am zuletzt editiert von
                      #21

                      Super, so funktioniert das wie ich es wollte.

                      Danke.

                      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

                      427

                      Online

                      32.4k

                      Benutzer

                      81.5k

                      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