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 an die Scriptprofis,

      Ich möchte meine Homematic in Verbindung mit iobroker als "Alarmanlage" nutzen. Ich möchte gerne folgende Dinge realisieren:

      Abfrage einer geofancy Variable ob "0" Personen zu Hause sind.

      Wenn ja (also null) dann soll eine Variable Alarmanlage "an" / "aus" / "automatik" geprüft werden. (Diese soll das Script auch neu anlegen)

      Wenn an oder Automatik gesetzt ist, sollen alle vorhanden Aktoren im Gewerk Verschluss auf Änderung geprüft werden.

      Hierbei handelt es sich um optische türsensoren (homematic) und fensterdrehgriff Kontakte (homematic)

      Ändert sich ein Zustand von zu / auf, soll eine Telegram Nachricht gesendet werden und eine sprachansahe auf dem Tablet per Browser erfolgen.

      Also

      Anwesenheit 0

      Und

      Alarmanlage auf an oder automatik

      Und alle Fenster zu aus dem Gewerk Verschluss

      Dann

      Nachricht Telegram

      Ansage auf Browser

      Ich hoffe man kann verstehen was genau ich beschreiben wollte.

      Also ich habe im Forum leider nichts passendes umbauen können. Vielleicht kann da jemand etwas Starthilfe geben.

      Vielen Dank für eure Mühe, vielleicht können es ja auch noch ein paar außer mir gebrauchen. 🙂

      Gruß Sven

      Gesendet von iPhone mit Tapatalk

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

        Hallo Sven,

        die Schnipsel waren alle im Forum verfügbar 8-)

        Zuerst Objekt Alarmanlage erstellt (Werteliste 0:aus, 1:an, 2:Automatik), also etwas abgewandelt von deiner Reihenfolge. Macht aber mehr Sinn 0 mit aus und 1 mit ein zu belegen.

        Die Abfrage der Fenster und Türen im Gewerk "Verschluss" erfolgt immer bei Änderung, auch wenn jemand da ist. Es wird aber nur gemeldet, wenn die Alarmanlage scharf ist. So kannst du diese Abfrage später für weitere Anzeigen nutzen (Fensterzustand, etc.).

        Die Pushmeldung und die Sprachansage musst du selbst eintragen. Entsprechende Zeilen sind kommentiert. Das findest du aber wirklich selbst im Forum.

        Die Nachricht ist auch für Sprache formatiert.

        Bedenke: Dieses Skript dient NICHT dazu, bei eintretener Abwesenheit (also beim Weggehen) zu melden, welche Fenster noch offen sind. Das ist was ganz anderes. Das muss auch bei der Meldung ganz anders aufgebaut werden, da ja mehrere Fenster gleichzeitig offen sein könnten und der Status nur in EINER Ansage gemeldet werden soll. Hier geht es nur darum, bei scharfer Alarmanlage die Zustandsänderung (nach offen) von EINEM Kontakt zu melden.

        Bitte den Code vervollständigen und ein paar Tage prüfen.

        ! ````
        /* Alarmanlage
        für Sven2013
        ! 31.07.2016 erstellt von Pix
        ! */
        ! // ##############################
        // Variable Alarmanlage erstellen
        createState('Alarmanlage', {
        name: 'Alarmanlage',
        type: 'number',
        min: '0',
        max: '2',
        states: '0:aus;1:an;2:automatik',
        desc: 'Status Alarmanlage'
        });
        ! var idAlarmanlage = 'javascript.0.Alarmanlage';
        ! // Alarmanlagenstatus überwachen
        on(idAlarmanlage, function (obj) {
        if (obj.state.val === 0) {
        log('Alarmanlage ausgeschaltet');
        } else if (obj.state.val == 1) {
        log('Alarmanlage eingeschaltet');
        } else if (obj.state.val == 2) {
        log('Alarmanlage auf <automatik> geschaltet');
        }
        }); // Fehler im Ursprungsskript korrigiert

        // ######################
        // Geofency überwachen
        var idGeofency = 'geofency.0.atHome';
        on(idGeofency, function (data) { // alten Fehler korrigiert
        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);
        }
        }); // Fehler im Ursprungsskript korrigiert

        ! // ######################
        // Aussenhülle überwachen
        function fensterstatus(zustand) {
        var meldung;
        if (zustand == 1) meldung = 'RHS gekippt';
        if (zustand == 2) meldung = 'RHS offen';
        if (zustand) meldung = 'TFK offen';
        if (zustand === 0 || !zustand) meldung = 'geschlossen';
        return(meldung);
        }
        ! 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) {
                    nachricht = nachricht + ' erkannt (Alarmanlage aus)';
                }
                log(nachricht);
            } 
        }); 
        

        }

        ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *. STATE im Gewerk Alarmanlage_Huelle
        bewegungFenster(obj);
        });</verschluss></automatik>

        
        Gruß
        
        Pix
        
        EDIT: in der Eklärung oben vergessen - die Alarmanlage geht nach 60s auf <automatik>, wenn keine Person mehr zu Hause ist. Ich habe solch eine Automatik nicht. Bitte prüfen, wie das ist, wenn man nach dem Verlassen der Geofency-Zone, aber innerhalb von 60s wieder zurückkommt (weil man zB etwas vergessen hat).
        
        EDIT: 02.08.2016 weiter unten angesprochene Fehler korrigiert.
        
        03.08.2016 Geo(n)fency Fehler korrigiert</automatik>
        1 Reply Last reply Reply Quote 0
        • S
          Sven2013 last edited by

          Hallo Pix,

          ertsmal vielen Dank für deine Mühe. Ich habe tätsächlich vor meinem Post einige Scripte gefunden die ähnlich funktionieren, allerdings war ich auch nach mehrfachem Probieren nicht in der Lage dazu das so umzusetzen, dass es funktioniert. Ich habe immer nur 1000 Fehler Logs produziert. Ich finde es sehr gut dass du das Script für mich nachvollziehbar (mit Beschreibung) erstellt hast.

          Nun bin ich heute endlich dazu gekommen das Script per VPN einzubauen, da ich erst in 2 Wochen wieder zu Hause bin.

          Nun hat das Script in Zeile 38 und 52 ein rotes x davor mit einer Fehlerbeschreibung.

          Ich denke es fehlt hier nur ein Zeichen, aber wie finde ich raus welches? Woher kann ich das ableiten? Ich habe schon mit anderen Scripten verglichen, aber es fällt mir nichts auf das "anders" zu seien scheint….

          Die Fehlermedung beim starten des Scripts lautet deshalb:

          javascript.0 script.js.Alarmanlage_Aussenhaut compile failed: SyntaxError: missing ) after argument list

          Gruss Sven

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

            ist nur eine Kleinigkeit.

            in Zeile 34 und 48 fehlt ein

            );
            

            also (hier der betroffenen Bereich):

            on(idAlarmanlage, function (obj) {
                if (obj.state.val === 0) {
                    log('Alarmanlage ausgeschaltet');
                } else if (obj.state.val == 1) {
                    log('Alarmanlage eingeschaltet');
                } else if (obj.state.val == 2) {
                    log('Alarmanlage auf <automatik>geschaltet');
                }
            });
            
            // ######################
            // Geofency überwachen
            var idGeofency = 'geofency.0.atHome'; 
            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);
                }
            });</automatik> 
            
            1 Reply Last reply Reply Quote 0
            • S
              Sven2013 last edited by

              Hallo htrecksler,

              Vielen Dank für deine Korrektur. Kannst du mir sagen wie ich das das nächste mal selber rausfinde? Kann ich das aus der Fehlermeldung ableiten? Oder muss ich dafür zwingend Java können?

              Gruß Sven

              Gesendet von iPhone mit Tapatalk

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

                Hallo Sven,

                wenn du im Editor mit der Maus über das rote X gehst, zeigt der Editor den Fehler an.

                Gruß

                Pix

                Gesendet mit Tapatalk

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

                  :lol:

                  Allerdings sind die Fehlermeldungen nicht immer "sofort verständlich"

                  Ein wenig Kenntnis in Javascript (nicht Java) braucht es schon. Aber wenn man sich damit beschäftigt und etwas affin ist kann man sich Javascript in Grundzügen sehr gut selber beibringen.

                  Bei Deiner Fehlermeldung hat er das "missing Semikolon" vor dem Statement angemeckert.

                  Daraus konnte man dann schließen, das der Befehl vor der Fehlermeldung nicht OK war. Und dann kommt man relativ schnell auf die Klammern.

                  Wie gesagt, etwas Grundverständnis benötigt man schon.

                  Ansonsten…einfach Fragen...

                  Ich kenne kein anderes Forum in den derart engagiert geholfen wird. Und schnell.

                  Gruss Hermann

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

                    Hallo Hermann, hallo Pix,

                    Vielen Dank für eure Hilfe. Wenn ich wieder zu Hause bin schicke ich Bluefox meine views und scripte die dank eurer (und aller anderen forumsteilnehmer) kräftigen Hilfe entstanden sind.

                    So können alle etwas davon nutzen.

                    Also nochmal vielen Dank.

                    @hermann, hat du dir JavaScript auch selbst beigebracht? Wenn ja wie hast du begonnen? Gibt es da gute Einstiegshilfen?

                    Gruss Sven

                    Gesendet von iPhone mit Tapatalk

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

                      Hallo Sven,

                      ja, mit dem Einstieg in ccu.io (und kurze Zeit später kam dann auch schon ioBroker) habe ich damit begonnen mich mit Javascript zu beschäftigen. Allerdings nicht mit irgendeiner Schulungsunterlage, sondern damit nicht einfach zu kopieren, sondern das was ich hier im Forum gefunden hatte und benutzen wollte auch zu verstehen.

                      Inzwischen steuere ich alles was vorher die CCU2 gemacht hat über ioBroker. Die CCU2 dient nur noch als "Schnittstelle". Dort gibt es außer ein paar Systemvariablen keine Programme mehr. (Und die CCU2 läuft absolut zuverlässig)

                      Sämtliche Lichter, Rollladen, Heizungen und sonstige Kleinigkeiten werden komplett über ioBroker gesteuert und in VIS visualisiert.

                      Und manchmal sind es nur Kleinigkeiten die Fehlen (Werte miteinander vergleichen oder allgemeine Syntaxfragen). Da hilft mir dann google meistens sehr schnell weiter.

                      Und nicht verzagen, vieles gibt es hier im Forum bereits und man muss nur etwas suchen. Und wenn mal etwas fehlt…einfach Fragen.

                      Und ganz wichtig... keine Angst "dumme" Fragen zu stellen. Hier hilft man gerne und schnell. Was nützt es wenn ich etwas umsetzen will, aber tagelang auf eine Antwort warte. Das geht hier echt schnell. Manchmal glaube ich schon einige hier machen das Hauptamtlich 😄

                      Gruss Hermann

                      EDIT: Eines hab ich noch vergessen. Ich lese hier im Forum täglich mit. Fast jeden einzelnen Beitrag/Kommentar. Sehr oft brauche ich die Informationen zu dem Zeitpunkt gar nicht, aber ich weiß zumindest... "Da war doch mal was" wenn ich mal etwas ähnliches brauche.

                      Manche Sachen speichere ich mir auch einfach in OneNote wenn ich mir sage, "irgendwann könnte ich das mal angehen". Die Suche im Forum ist nämlich nicht wirklich gut. Die ist im Homematic Forum deutlich besser.

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

                        @htrecksler:

                        Hallo Sven,

                        ja, mit dem Einstieg in ccu.io (und kurze Zeit später kam dann auch schon ioBroker) habe ich damit begonnen mich mit Javascript zu beschäftigen. Allerdings nicht mit irgendeiner Schulungsunterlage, sondern damit nicht einfach zu kopieren, sondern das was ich hier im Forum gefunden hatte und benutzen wollte auch zu verstehen.

                        Inzwischen steuere ich alles was vorher die CCU2 gemacht hat über ioBroker. Die CCU2 dient nur noch als "Schnittstelle". Dort gibt es außer ein paar Systemvariablen keine Programme mehr. (Und die CCU2 läuft absolut zuverlässig)

                        Sämtliche Lichter, Rollladen, Heizungen und sonstige Kleinigkeiten werden komplett über ioBroker gesteuert und in VIS visualisiert.

                        Und manchmal sind es nur Kleinigkeiten die Fehlen (Werte miteinander vergleichen oder allgemeine Syntaxfragen). Da hilft mir dann google meistens sehr schnell weiter.

                        Und nicht verzagen, vieles gibt es hier im Forum bereits und man muss nur etwas suchen. Und wenn mal etwas fehlt…einfach Fragen.

                        Und ganz wichtig... keine Angst "dumme" Fragen zu stellen. Hier hilft man gerne und schnell. Was nützt es wenn ich etwas umsetzen will, aber tagelang auf eine Antwort warte. Das geht hier echt schnell. Manchmal glaube ich schon einige hier machen das Hauptamtlich 😄

                        Gruss Hermann

                        EDIT: Eines hab ich noch vergessen. Ich lese hier im Forum täglich mit. Fast jeden einzelnen Beitrag/Kommentar. Sehr oft brauche ich die Informationen zu dem Zeitpunkt gar nicht, aber ich weiß zumindest... "Da war doch mal was" wenn ich mal etwas ähnliches brauche.

                        Manche Sachen speichere ich mir auch einfach in OneNote wenn ich mir sage, "irgendwann könnte ich das mal angehen". Die Suche im Forum ist nämlich nicht wirklich gut. Die ist im Homematic Forum deutlich besser. `

                        Klingt wie meine Geschichte :lol:

                        Auch mit ccu.io angefangen, dann ioBroker gewagt und belohnt worden. Copy & Paste waren meine Lehrer. Und natürlich das Forum. Seit über einem Jahr läuft die CCU1 ohne Programme, alles in ioBroker.

                        Das Mitlesen im Forum gehört auch zu meinen täglichen Routinen. Ich helfe, wenn ich kann. Das festigt natürlich auch das Gelernte. Und, genau wie Hermann es sagt, wenn etwas Interessantes auftaucht, sichere ich es offline. Das kann ich nur empfehlen. So behalte ich auch Ziele im Fokus.

                        Gruß

                        Pix

                        1 Reply Last reply Reply Quote 0
                        • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            833
                                            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