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. Alarmmeldung, sofern viele unreach in kurzer Zeit. Kann ein Könner drauf gucken?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Alarmmeldung, sofern viele unreach in kurzer Zeit. Kann ein Könner drauf gucken?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 2 Kommentatoren 456 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.
  • T Offline
    T Offline
    tempestas
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    als Ergänzung meines Alarmanlagenskripts schwebt mir vor, einen Alarm einzubauen, sofern innerhalb kurzer Zeit (definierbar, z.B. 10 Sekunden) eine Menge X der Sensoren plötzlich "unreach" melden.

    Das könnte in meiner laienhaften Vorstellung der Fall sein, falls jemand mit einem Jammer sich dem Haus nähert. Zugegeben, wer so vorbereitet ist, der wird wohl auch sonst sich kaum aufhalten lassen, aber sei es drum. Es schadet ja nicht.

    Mein Problem besteht darin, dass ich zum einen den Trigger "unreach" nutzen muss, andererseits danach das Skript sich ja nicht mehr selber triggern soll. Außerdem lässt sich so ein Skript wohl nur schwer testen (wie Glasbruchsensoren auch :lol: ), daher wäre ich dankbar, wenn ein paar von den Könnern hier einmal draufgucken

    Gedachter Ablauf:

    Sensor 1 (im Sinne von "der erste") wird unerreichbar, CCU2 merkt das
    Unreachmeldung in iobroker wird gesetzt und triggered das Skript
    Timer startet, bspl. 10 Sekunden
    Am Ende des Timers wird function ausgeführt, die nochmal über alle Sensoren (aus "Verschluss") läuft und zählt.
    Sofern count > z.B. 3 --> telegram
    
    

    Hier ist mein Ansatz (ich tippe den gerade im Forum zusammen, Flüchtigkeitsfehler also garantiert enthalten):

    
    // VARIABLEN
    
    var triggered = false;  			// Var als Bedingung, damit während der Laufzeit nicht ständig neu getriggered wird
    var timing = 15;				// Zeit in Sekunden, nach deren Ablauf durchgezählt wird 
    var minCount = 3;			// Mindestanzahl an unreach Meldungen im definierten Gewerk die erreicht sein müssen, um Alarm auszulösen
    var nachricht;				// Telegram Nachricht 
    
    var cacheSelectorUNREACH  = $('channel[state.id=*.UNREACH](functions="Verschluss")');		// Test soll sich nur auf die sicherheitsrelevanten Sensoren beziehen, kein Alarm wg. ausgestöpselter Steckdosen o.ä.
    
    // TRIGGER
    
    cacheSelectorUNREACH.on(function(obj) {   
    
    	if(!triggered) {	
    
       		setTimeout(countUNREACH(obj), timing * 1000);
       		triggered = true;
       	}
    });
    
    // FUNCTION
    
    function countUNREACH(obj) {
    
    	var count = 0;
    
       		cacheSelectorUNREACH.each(function (id, i) {
          			var status = getState(id).val; 
          			if (status === true) {
          			++count;                                       
       		}); 
    
       	triggered = false;
    
    	if(count >= minCount){
    
    		nachricht = "Ungewöhnliche Anzahl von Unreach-Meldungen. Insgesamt " +count +" Sensoren nicht erreichbar";
    		sendTo('telegram.0', nachricht);
    		}
    	}
    }
    
    

    Funktioniert das so, habe ich etwas übersehen?

    Vielen Dank vorab

    <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
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      Die Callback-Funktion in setTimeout wird falsch aufgerufen.

               setTimeout(countUNREACH, timing * 1000);
      

      Die Funktion countUNREACH() benötigt keinen Übergabeparameter, der nicht in der Funktion ausgewertet wird

      function countUNREACH() {
      

      Bei der Abfrage von status fehlt die schließende geschweifte Klammer oder (da nur ein Kommando) ohne Klammern

                     if (status) ++count;
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        tempestas
        schrieb am zuletzt editiert von
        #3

        Hallo Paul,

        vielen Dank für die Rückmeldungen, werde ich anpassen.

        Falsch ist glaube ich meine "if(!triggered)" Abfrage, oder? ich starte ja mit triggered = false, d.h. die Abfrage prüft auf true und würde damit niemals stimmen. Denn true wird ja erst später gesetzt

        // VARIABLEN
        
        var triggered = false;           // Var als Bedingung, damit während der Laufzeit nicht ständig neu getriggered wird
        var timing = 15;            // Zeit in Sekunden, nach deren Ablauf durchgezählt wird 
        var minCount = 3;         // Mindestanzahl an unreach Meldungen im definierten Gewerk die erreicht sein müssen, um Alarm auszulösen
        var nachricht;            // Telegram Nachricht 
        
        var cacheSelectorUNREACH  = $('channel[state.id=*.UNREACH](functions="Verschluss")');      // Test soll sich nur auf die sicherheitsrelevanten Sensoren beziehen, kein Alarm wg. ausgestöpselter Steckdosen o.ä.
        
        // TRIGGER
        
        cacheSelectorUNREACH.on(function() {   
        
           if(triggered == false) {   
        
                 setTimeout(countUNREACH, timing * 1000);
                 triggered = true;
              }
        });
        
        // FUNCTION
        
        function countUNREACH() {
        
           var count = 0;
        
                 cacheSelectorUNREACH.each(function (id, i) {
                       var status = getState(id).val; 
                       if (status === true) ++count;                                       
                 }); 
        
              triggered = false;
        
           if(count >= minCount){
        
              nachricht = "Ungewöhnliche Anzahl von Unreach-Meldungen. Insgesamt " +count +" Sensoren nicht erreichbar";
              sendTo('telegram.0', nachricht);
              }
           }
        }
        
        

        <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
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @tempestas:

          Falsch ist glaube ich meine "if(!triggered)" Abfrage, oder? ich starte ja mit triggered = false, d.h. die Abfrage prüft auf true und würde damit niemals stimmen. `
          Nein, die Abfrage if(!triggered) prüft auf false und entspricht der Abfrage if(triggered == false).

          Unter sendTo() ist eine schließende geschweifte Klammer zuviel. Das müsste allerdings schon der JS-Editor anmeckern ?

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            tempestas
            schrieb am zuletzt editiert von
            #5

            Hallo Paul,

            Ich dachte, "!" würde immer negieren; und da ich initial "triggered = false" setze, war ich der Meinung, es prüft auf ungleich false, mithin true. Danke fürs richtigstellen. Edit: bei genauerer Überlegung hätte ich mir das auch denken können. Da habe ich mich selbst verschlimmbessert…

            Kann gut sein, dass eine Klammer fehlt oder zuviel ist. Wie gesagt habe ich es nicht im JS Editor geschrieben sondern nur hier im Forum, bin nicht daheim.

            Von der Logik her passt aber alles?

            Danke dir!

            Steffen

            <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
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            623

            Online

            32.6k

            Benutzer

            82.3k

            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