Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbruchsmeldeanlage (EMA) / Alarmanlage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Einbruchsmeldeanlage (EMA) / Alarmanlage

    Hallo,

    aus aktuellem Anlass in der Nachbarschaft möchte ich einen Einbruch detektieren und daraus Aktionen ableiten können.
    Ich habe dazu einen schnellen Hack aktiv, den ich jetzt "industrialisieren" möchte.

    Bevor ich damit jedoch konkret werde, möchte ich hier meine Gedanken dazu diskutieren.
    Vorab jedoch die Frage: Hat schon jemand eine solche Funktion realisiert, oder sich Gedanken dazu gemacht?

    Gruß,
    Hendrik

    #2
    Hallo Hendrik,

    Gedanken gemacht ja, machen möchte ich das auch, gemacht aber noch nicht.
    Wäre sicher ne schöne Geschichte für ein Plugin.

    Letztendlich habe ich ne Menge Sensoren, die ich auswerten möchte: Verschlußüberwachung an den Fenstern, Kontakte an den Türen und Bewegungsmelder im ganzen Haus. Aktivierung und Deaktivierung über Visu im Eingangsbereich mit PIN-Abfrage.
    Alarmierung mehrstufig: Stiller Alarm über Mail, SMS, Prowl, ..., Akustischer Alarm intern über Brandmelder, extern akustisch und optisch über Warnmelder.

    Gruß
    Markus

    Kommentar


      #3
      Ja, ich habe mir Gedanken gemacht. Im Grunde genommen müsste man je nach Zuständen (intern scharf, extern scharf) auf verschiedene Ereignisse (Fensterkontakt in Raum X geht auf) jeweils definierte Aktionen ggf. in bestimmter Reihenfolge auslösen (Licht im Nebenraum geht an, Nachricht wird abgesetzt, über Squeezeplayer wird ein Geräusch ausgegeben, Rollos fahren hoch, das gesamte Licht im Haus blinkt, alle Player spielen ACDC auf voller Lautstärke, Alarmsirene lößt aus).
      Habe mir noch keine konkreten Gedanken für die Definition der Aktionen gemacht, ggf. direkt in den Überwachungsitems könnte man es so machen:
      PHP-Code:
      [Kueche]
      [[
      Bewegungsmelder]]
      alarm_intern_1 sh.whatsapp('bewegungsmeldung Küche''12345234'), sh.wohnzimmer.licht_decke(), sh.schlafzimmer.licht.dimmen(25), sh.squeezeplayer.kueche.playlist('alarm_intern')
      alarm_intern_2 sh.hauptalarm.intern()
      [[
      Fensterkontakt]]
      alarm_extern_1 sh.whatsapp('Fensteröffnung Küche''12345234'), sh.squeezeplayer.kueche.playlist('hundegebell')
      alarm_extern_2 sh.hauptalarm.extern() 
      Eine Logik/Plugin könne nun durch die Sensoren getriggert werden und nach Überprüfung des Scharfschaltungszustands die Aktionen in den Alarmdefinitionen ausführen. Dabei würde ich die Anzahl der Alarmarten nicht vorher festlegen.
      Zuletzt geändert von Marcov; 12.10.2015, 22:12.

      Kommentar


        #4
        Zitat von Marcov Beitrag anzeigen
        alle Player spielen ACDC auf voller Lautstärke
        Dann denkt aber jeder, bei dir ist Party. Wenn schon würde ich was von The Police spielen. Ein halbwegs intelligenter Einbrecher würde den Wink mit dem Zaunpfahl vielleicht verstehen!

        Kommentar


          #5
          Moin!
          Hätte da auch interesse, habe auch schon mal etwas vorbereitet in einer Logik.
          Bin noch nicht ganz so fit mit Phyton aber mit Logik im allgemeinen schon :-) habe einiges grundlegend schon geschafft... aber halt noch nicht alles...
          Habe dann wegen Zeitmangel aufgehört....

          Das Hauptproblem war: wie Trigger ich die Logik Sinnvoll:
          Mein Ansatzpunkt momentan: meher Logiken machen. Je Zone eine Logik, die dann wiederrum die "Auswertung" aufruft.
          Entweder über einen Trigger durch die Items, was ich für sehr aufwändig halte, alternativ jede Sekunde die Logik starten und abarbeiten...

          Würde mich freuen wenn wir das Thema noch mal aufgreifen und gemeinsam die Logik weiter entwickeln!

          Gruß Marian

          Edit:
          Eine Idee => Die Zonen über "Eval" auswerten und dort die "Und / Oder" verknüpfung hinein für die Zone....
          Also: Je Zone ein Item. Ändert sich die Zone von 0 auf 1 oder umgekehrt wird die Auswertung angestoßen.
          Ist "Scharf = 1" dann weiter, sonst direkt die Logik wieder verlassen...

          Code:
          #Logik fuer eine Alarmanlage mit 4 Zonen
          #Zone 1 - 4 Ausloesung nach eingestellter Zeit
          #Zone 5 loest direkt aus, ohne Wartezeit und scharf-Bedigung bsp. Feuer oder Wasser
          #Zone 6 loest direkt aus, ohne Wartezeit und scharf-Bedigung bsp. Sabotage
          #Ausgaenge
          #Voralarm => sh.ema.Vorwarnung
          #Alarmmeldung => sh.ema.Alarm
          #Zone 1 => sh.ema.Zone.Z1
          #Zone 2 => sh.ema.Zone.Z2
          #Zone 3 => sh.ema.Zone.Z3
          #Zone 4 => sh.ema.Zone.Z4
          #Zone 5 => sh.ema.Zone.Z5
          #Zone 6 => sh.ema.Zone.Z6
          
          
          #Erlaubtes Item fuer Unscharfschaltung
          #Unscharf = 'ema.unscharf'
          #Trigger = trigger['by']
          #Quelle = trigger['source']
          #Wert = trigger['value']
          
          
          #Definiton der Zonennamen
          NameZone1 = 'Bewegungsmelder'
          NameZone2 = 'Aussenhaut'
          NameZone3 = 'Garage'
          NameZone4 = 'Sonstiges'
          
          #Definiton der Zonennamen der Sonderzonen
          NameZone5 = 'Feuer'
          NameZone6 = 'Sabotage'
          
          #Definiton der Wartezeiten vor Ausloesung
          warten = 30      #maximale Wartezeit vor Ausloesung
          ZeitZone1 = 5
          ZeitZone2 = 1
          ZeitZone3 = 1
          ZeitZone4 = 1
          
          #Definiton der Wartezeiten vor Scharf
          warten_ein = 10
          
          
          #Reaktion auf Sonderzonen
          #Zone 5 Feuer
          if sh.ema.Zone5():
                 Zone5 = '0'
                 logger.critical("EMA-Direktalarm:" + NameZone5 + " ausgeloest!")
                 sh.ema.Zone.Z5()
                 #Option Nachrichtenversand
                 #sh.nma('A L A R M !!! Zuhause 3.0', 'EMA-Direktalarm: ' + NameZone5 + ' ausgeloest!', 2)
                 #sh.mail('marian@mgiesen.eu', 'A L A R M !!! Zuhause 3.0', 'EMA-Direktalarm: ' + NameZone5 + ' ausgeloest!' )
          
          #Zone 6 Sabotage
          if sh.ema.Zone6():
                 Zone5 = '0'
                 logger.warning("EMA-Sabotage:" + NameZone6 + " ausgeloest!")
                 sh.ema.Zone.Z6()
                 #Option Nachrichtenversand
                 #sh.nma('Sabotage Zuhause 3.0', 'EMA-Sabotage: ' + NameZone6 + ' ausgeloest!', 1)
                 #sh.mail('marian@mgiesen.eu', 'Sabotage Zuhause 3.0', 'EMA-Direktalarm: ' + NameZone6 + ' ausgeloest!' )
          
          #Unscharf
          if not sh.ema.unscharf() and not sh.ema.reset():
                   logger.warning("Anlage unscharf")
                   not sh.ema.aktiv()
          
          #Ruecksetzen der Ausgaenge
          if not sh.ema.unscharf() and sh.ema.reset():
                   logger.warning("Ausgaenge zuruecksetzen")
                   not sh.ema.Vorwarnung()
                   not sh.ema.Alarm()
                   not sh.ema.Zone.Z1()
                   not sh.ema.Zone.Z2()
                   not sh.ema.Zone.Z3()
                   not sh.ema.Zone.Z4()
                   not sh.ema.Zone.Z5()
                   not sh.ema.Zone.Z6()
                   not sh.ema.reset()
          
          #Scharfschaltung
          if sh.ema.unscharf():
                   logger.warning("Alarmanlage E I N")
                   for i in range(warten_ein):
                           if sh.ema.unscharf():
                                   time.sleep(1)
                                   i = i + 1
                           else:
                                   continue
                   else:
                           logger.warning("Alarmanlage S C H A R F")
                           sh.ema.aktiv()
          
          # Itemdefinition als oeffner-Schleife => 0 fuehrt zur Ausloesung
          while sh.ema.unscharf():
          
                 #Bedigung fuer Zone1 => sh.ema.Zone1 Test und Beispiel
                 if sh.ema.Zone1():
                          Zone1 = '0'
                          logger.warning("EMA: " + NameZone1 + " ausgeloest!")
                          sh.ema.Zone.Z1()
                          if warten > ZeitZone1:
                                   warten = ZeitZone1
                 else:
                          Zone1 = '1'
          
                 #Bedigung fuer Zone2
                 if sh.ema.Zone2():
                          Zone2 = '0'
                          logger.warning("EMA: " + NameZone2 + " ausgeloest!")
                          sh.ema.Zone.Z2()
                          if warten > ZeitZone2:
                                   warten = ZeitZone2
                 else:
                          Zone2 = '1'
          
                 #Bedigung fuer Zone3
                 if sh.ema.Zone3():
                          Zone3 = '0'
                          logger.warning("EMA: " + NameZone3 + " ausgeloest!")
                          sh.ema.Zone.Z3()
                          if warten > Zeitzone3:
                                   warten = ZeitZone3
                 else:
                          Zone3 = '1'
          
                 #Bedigung fuer Zone4
                 if sh.ema.Zone4():
                          Zone4 = '0'
                          logger.warning("EMA: " + NameZone4 + " ausgeloest!")
                          sh.ema.Zone.Z4()
                          if warten > Zeitzone4:
                                   warten = ZeitZone4
                 else:
                          Zone4 = '1'
          
          
                 if Zone1==('0') or Zone2==('0') or Zone3==('0') or Zone4==('0'):
                         #Definition Vorwarnung ohne Wartezeit
                         logger.warning("EMA: Vorwarnung")
                         sh.ema.Vorwarnung()
                         #Die kuerzeste Wartezeit der 4 Schleifen gilt.
                         #Wird vor Ablauf dere Zeit unscharf geschaltet, werden die Ausgaenge zurueck gesetzt
                         for i in range(warten):
                           if sh.ema.unscharf():
                                   time.sleep(1)
                                   i = i + 1
                           else:
                                   logger.warning("EMA: unscharf vor Ausloesung")
                                   not sh.ema.Vorwarnung()
                                   not sh.ema.Alarm()
                                   not sh.ema.Zone.Z1()
                                   not sh.ema.Zone.Z2()
                                   not sh.ema.Zone.Z3()
                                   not sh.ema.Zone.Z4()
                                   not sh.ema.Zone.Z5()
                                   break
                           continue
                         else:
                         #nach Ablauf der Wartezeit wird der Hauptalarm ausgeloest
                         #nach Ausloesung wird die Schleife unterbrochen und die Logik beendet
                              if sh.ema.unscharf():
                                      logger.critical("EMA: Alarmausloesung!")
                                      sh.ema.Alarm
                                      #Option Nachrichtenversand
                                      #sh.nma('A L A R M ! ! ! Zuhause 3.0', 'EMA-Alarm: ' + '\n' + NameZone1 + ' => ' + sh.ema.Zone.Z1() + '\n' + NameZone2 + ' => ' + sh.ema.Zone.Z2() + '\n' + NameZone3 + ' => '  + sh.ema.Zone.Z3() + '\n' + NameZone4 + ' => ' + sh.ema.Zone.Z4() + '\n' + NameZone5 + ' => ' + sh.ema.Zone.Z5() + '\n' + NameZone6 + ' => ' + sh.ema.Zone.Z6(), 2)
                                      #sh.mail('marian@mgiesen.eu', 'A L A R M ! ! ! Zuhause 3.0', 'EMA-Alarm: ' + '\n' + NameZone1 + sh.ema.Zone.Z1() + ' => ' + '\n' + NameZone2 + sh.ema.Zone.Z2() + ' => ' + '\n' + NameZone3 + sh.ema.Zone.Z3() + ' => ' + '\n' + NameZone4 + ' => ' + sh.ema.Zone.Z4() + '\n' + NameZone5 + ' => ' + sh.ema.Zone.Z5() + '\n' + NameZone6 + ' => ' + sh.ema.Zone.Z6())
                                      break
          else:
                   logger.info("EMA hat langeweile")
          Zuletzt geändert von marian; 15.10.2015, 12:56.

          Kommentar


            #6
            Moin Zusammen!
            Ich habe eine Logik soweit fertig, dass man sie Real testen kann :-)
            Mir fehlen aktuell noch ein paar sensoren zur Auslösung... aber wer interesse hat kann sich melden. Wenn es also noch interesse gibt, Poste ich gerne mal den Code und die Funktionen im Detail.

            Gruß Marian

            Kommentar


              #7
              Hi Marian,

              Da dies auch noch ein offener Punkt bei uns ist würde ich mich sehr über den Code freuen, da er mir vermutlich etliche Stunden abnimmt.

              Danke schon mal.

              Kommentar


                #8
                Hi Marian,
                ich hätte auch Interesse an dem Code.
                Die Simulation von Sensoren kannst Du mit groupsocketwrite machen. Einfach die Telegrame auf den Bus senden....


                Danke und Gruß
                Chrstian

                Kommentar

                Lädt...
                X