Neues Modul für Alarmanlage

Begonnen von Prof. Dr. Peter Henning, 08 September 2014, 20:43:06

Vorheriges Thema - Nächstes Thema

gamauf

Hallo Alex!

Diese zwei Notifies triggern eine Aktion beim scharf bzw. unscharf schalten des Alarm Level 5:

define disarm5_N notify .*AAA.*level5.*disarmed <ACTION>
define arm5_N notify .*ATTR.*AAA.*level5.*[^s]armed <ACTION>

("<ACTION>" ist natürlich durch die gewünschte Aaktion zu ersetzen z.B. "set WebCam scharf")
LG
Rainer

alexschomb

Hallo Rainer,

super, vielen Dank! Da stand ich einfach auf dem Schlauch, die Lösung ist wirklich simpel :)

Ein Nachteil bei der Sache ist, dass diese Einstellung dann nicht im Interface der Alarmanlage auftaucht, doch damit kann ich leben.

Liebe Grüße,

Alex

Bytechanger

Hi,

ich überwache das Haus mittels Öffnungssensoren (Bewegungsmelder geht nicht, da wir ein Tier haben).
Nun kam es immer wieder vor, dass meine Frau beim Betreten des Hauses vergaß, dass die Alarmanlage eingeschaltet ist.

Nun habe ich in der Armed_Action noch folgendes Reading hinzugefügt:

if (AttrVal("Alarmanlage", "level1xec", "unbekannt") eq "armed") { fhem("setreading Alarmanlage level1Status armed") }

Analog Disarm_Action

if (AttrVal("Alarmanlage", "level1xec", "unbekannt") eq "disarmed") { fhem("setreading Alarmanlage level1Status disarmed") }

Damit kann ich bei der Öffnung der Haustür nicht nur den Status abfragen, sondern auch WANN die Alarmanlage scharf gestellt wurde.
Ist dies eine gewisse Zeit her, wird noch eine WARNMELDUNG abgespielt, so dass sie daran denken muss...


Nochmals danke für dieses tolle Modul!

Greets

Byte

duke-f

Zitat von: NilsB am 12 Mai 2016, 11:23:20
Zum Thema der konsistenten Speicherung der "levelNExec". Ich verstehe, was du sagst, pah. Aber mir ist nicht ganz klar warum die aktuellen Zustände der Alarmlevel nicht nur zur Laufzeit FHEMs gespeichert werden sollten (also als Readings). Nach einem Neustart würde ich es absolut begrüßen, wenn erstmal alles "unscharf" ist. Mit dem momentanen Stand habe ich nämlich immer Angst, mir einen Alarmlevel als aktiv in der Config zu speichern und beim nächsten Neustart zu Wartungszwecken die Alarmanlage unbewusst scharf zu schalten (was dann in hektischem Gerenne endet, wenn der nächste ein Fenster aufmacht...).

Mir geht es im Moment genau anders herum: Aus unerfindlichen Gründen startet mein Cubie in nicht regelmäßigen neu (darüber gibt's extra Themen). Dann ist aber jedes Mal die Alarmanlage deaktiviert. Diese Neustarts vollziehen sich dank watchdog komplett automatisch ohne merklich relevante Unterbrechung, bis auf die Alarmanlage. In dieser Situation ware für mich wichtig, dass die Alarmanlage nach dem Neustart wieder den Zusatnd wie vorher hätte.
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

Prof. Dr. Peter Henning

Ich habe sogar beide Probleme...

Geplant ist in der Tat, so etwas wie einen "Default"-State für das Modul definierbar zu machen, der nach einem Restart automatisch eingenommen wird. Da kann man dann festlegen, dass alle Level disarmed sind oder einfach der Stand vor dem Neustart wiederhergestellt wird.

Dauert aber noch, weil beruflich extrem eingespannt und massig andere Baustellen ... Patience, please

LG

pah

Bytechanger

Besteht die Möglichkeit das "arm-delay" eines Levels auf ein Notify zu legen?

Im Eventmonitor erscheint Global global DEFINED alarm6.arm.dly.

Ein notify auf .*alarm6.arm.dly { }  funktioniert bei mir nicht...

Greets

Byte

Bytechanger

So,

.*Alarmanlage.*level6xec[^s]armwait

hiermit ging es....

Gibt es auch ein Notify für Cancel eines Levels?

Und noch eine Frage, pah hatte geschrieben, dass er die Texte mit https://www.ivona.com/ als mp3 verwendet.
Wie bekommt man sie von der Ansage als mp3 File ??


Greets

Byte

Prof. Dr. Peter Henning

Aufzeichnen und umwandeln.

LG

pah

Bytechanger

Ok, danke.

Ist es richtig, dass ein cancel in einem alarmlevel kein event erzeugt?

Greets byte

hauwech

Hallo zusammen,
ich habe das Alarm-Modul entdeckt und möchte zwei Alarmstufen realisieren:
1. Interne Überwachung bestimmter Örtlichkeiten bei Anwesenheit.
2. Vollüberwachung bei Abwesenheit und/oder Nachtruhe.
Die beiden Level lassen sich mit einem Alarm-Handsender getrennt scharfschalten (armInt/armExt).
Für die interne Überwachung ist AlarmLevel0 gedacht.
Ich habe derzeit zwei Bewegungsmelder. Beide sind alarmDevice Sensor und AlarmLevel0 zugeordnet:
   level0end  23:59
   level0msg  Bewegung registriert: $NAME
   level0offact set AlarmStatus off;
   level0onact define alarm0dly1 at +00:00:05 set AlarmStatus on;define alarm0dly2 at +00:00:03 {Alarm_Exec('myAlarm',0,'AutoCancel','dummy','off')};
   level0start 00:00
   level0xec  disarmed

Die delay's sind noch Testwerte.
Als Signalgeber habe ich einen MP3 Funkgong Modul. Der soll je nachdem, wo eine Bewegung registriert wurde, entweder "Bewegung A registriert" oder "Bewegung B registriert" ausgeben.
Ich habe bisher mit zwei Dummies als AlarmDevice "actor" (einer für jeden BM) mit je einer SetAction "set <Gong> playTone xxx" und "set <Gong> playTone yyy"experimentiert.
Als Ergebnis wurden immer alle zwei Meldungen abgespielt, egal welcher BM "motion" gemeldet hat.

Wie bekomme ich die beiden separiert, daß jeder "seine" Meldung abspielt? Mir fehlt der Ansatz, vielleicht kann mich jemand auf die richtige Spur bringen.

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

Bytechanger

Klar, weil das Alarmlevel den Aktor antriggert...

Also entweder zwei Aktoren die jeweils einem eigenen Alarmlevel zugeordnet sind und Jeder Sensor löst nur in dem entsprechenden Level aus,

ODER

ein Aktor, der "perl-code" ausführt und dort auswertet welcher Melder Alarm gegeben hat und dann entsprechenden Ton ausgibt...

Greets

Byte

hauwech

#596
Hallo Byte,
Fall 1 fällt weg, da müßte ich jedem Bewegungsmelder einen Alarmlevel spendieren, ich möchte künftig noch mehr Bewegungsmelder einsetzen.
Fall 2 habe ich getestet.
Ein Dummy:
Internals:
   CFGFN
   NAME       d_Bewegung
   NR         633
   STATE      ???
   TYPE       dummy
Attributes:
   alarmDevice Actor
   alarmSettings alarm0,|{MotionAlarm($NAME)}||1

Eine Sub in einer eigenen 99_myUtilsAlarm:
sub MotionAlarm($)
{
my ($DevName) = @_;
Log(3, "Bewegung: ".$DevName);
if ($DevName eq "HG_BM_1")
{
fhem("set HG_FL_Gong playTone 025 1 8");
Log(3, "Bewegung im Keller");
}
if ($DevName eq "NG_BM_1")
{
fhem("set HG_FL_Gong playTone 023 1 8");
Log(3, "Bewegung im Anbau");
}
}

Damit bekomme ich im Log eine Fehlermeldung: alarm0dly3: Bareword "HG_BM_1" not allowed while "strict subs" in use at (eval 5553) line 1. oder eben
alarm0dly3: Bareword "NG_BM_1" not allowed while "strict subs" in use at (eval 5869) line 1.

Ich komme nicht auf den Trichter, wie ich den Devicenamen korrekt übergebe.
Muß ich den Dummy mit einem externen Notify setzen und den Devicenamen reinschreiben? Wenn ja, wie werte ich das in der sub aus?

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

Bytechanger

#597
Hi,

dies wäre eine Lösung die mir einfiele (also Dummy im Auslösefall über notify mit Bezeichnung bestücken).
Oder ein zusätzliches Reading im Arlarmmodul über ein notify erstellen....

oder wird nicht im Reading SHORT auch mitgeteilt, wer Auslöser war? Also mal SHORT anschauen...
und mit MotionAlarm($defs{'NameDesAlarmanlagenModuls'}{READINGS}{'short'}{VAL}) an Deine Funktion übergeben.

Zustatzfrage: Du bestückst im code den AKTOR mit {MotionAlarm($NAME)} ?
Welche Anführungszeichen nutz Du? Versuchs mal mit {MotionAlarm('$NAME')}
Ich habe das Wiki so verstanden, dass $NAME im Messagepart ersetzt wird, hast Du es dort auch verwendet?

Hinweis: Wenn ein Level ausgelöst hat, wird es erst wieder auslösen, wenn es zurückgesetzt ist!
               D.h. Du bekommst Du eine Meldung über die erste Bewegungserkennung.


EDIT: Habe gerade gesehen, dass es ein Reading gibt, das den Auslöser anzeigt. Also für Level6 ist es "level6"


Greets

Byte

Bytechanger

Also versuchs mal damit:

AlarmanlagenNAME und level6 müssen noch entsprechend angepasst werden!

sub MotionAlarm()
{
my $DevName = ReadingsVal("AlarmanlagenNAME","level6","");
Log(3, "Bewegung: ".$DevName);
if ($DevName eq "HG_BM_1")
{
fhem("set HG_FL_Gong playTone 025 1 8");
Log(3, "Bewegung im Keller");
}
if ($DevName eq "NG_BM_1")
{
fhem("set HG_FL_Gong playTone 023 1 8");
Log(3, "Bewegung im Anbau");
}
}


und im Aktor natürlich
{MotionAlarm()}

Greets

Byte

hauwech

Hi Byte,
danke, das isses!
my $DevName = ReadingsVal("AlarmanlagenNAME","level0","");So geht's.
Um alle Bewegungen mitzubekommen, habe ich einen Dummy wie hier im thread irgendwo beschrieben:
Internals:
   NAME       AutoCancel
   NR         592
   STATE      ???
   TYPE       dummy
Attributes:
   alarmDevice Actor
   alarmSettings alarm0,|{Alarm_Exec('myAlarm',0,'AutoCancel','dummy','off')}||3

Der macht nach dem eingestellten delay einen AutoCancel auf level 0.
Was die Anführungszeichen angeht: ich denke, daß Perl im Falle von {MotionAlarm('$NAME')} den String "$NAME" übergeben würde, während {MotionAlarm("$NAME")} den Variableninhalt auflösen würde.

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS