Neues Modul für Alarmanlage

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

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Na, dann mal ganz generell: Ich stelle hier Module bereit, dokumentiere diese und leiste in schwierigen Fällen etwas Support. Mehr ist zeitlich nicht drin. Wenn ich dann darüber hinaus einen Vorschlag mache, um ein Problem zu lösen und sofort lese, welchen "Nachteil" dieser Vorschlag hat, erhöht das meine Motivation nicht. Darum der ganz ernst gemeinte Vorschlag: Sich etwas mehr mit FHEM beschäftigen, dann kommt man ganz von alleine auf die Lösungen. Und das ist, wenn ich das sagen darf, auch viel befriedigender, als die Lösungen serviert zu bekommen.

LG

pah

chem

Mal eine kurze Dummy Frage:

Wenn ich einen Sensor (hier Taster) mehrfach in der Sensor Liste haben möchte weil ich einmal short und einmal longRelease nutzen will oder eine Sirene mehrfach als Aktor (einmal ohne und einmal mit Verzögerung) möchte geht das vmtl. nur über entsprechende Dummies?

So will ich das zumindest jetzt angehen....

NilsB

Zitat von: chem am 04 Februar 2017, 16:17:56
(...) geht das vmtl. nur über entsprechende Dummies?

Moin,
in der Annahme das richtig verstanden zu haben: Ja, richtig.
Geräte 'mehrfach' in den Alarmsettings sind mich möglich. (Beabsichtigter und sinnvoller) Workaround ist das Anlegen eines dummys, welcher den Status des eigentlichen Geräts via notify repliziert.

Grüße
Nils

chem

Bei mir schneidet das WebGui die "Set Action" Befehle bei den Actoren ab.

Wenn ich über attr AlarmSirenePreWarn alarmSettings eingebe, ist der vollständige subroutine call da (siehe Screenshot), sobald ich einmal in die WebGui gehe wird der call abgeschnitten was natürlich zu perl Fehlern führt. (siehe zweiter Screenshot)

Im WebGui kann ich das "Set Action" Feld auch nicht editieren weil es nicht vollständig angezeigt wird...

Gibt es da eine Längenbeschränkung? Kann man die umgehen?

chem

#784
Ich habe das jetzt noch etwas weiter debugged und deutlich kürzere Namen genommen. Ich kann die alarmSettings ändern und sie bleiben auch so wie ich sie definiert habe bis ich in die Alarms GUI gehe.

Dort wird dann alles nach $SHORT, abgeschnitten! Also z.B:
alarm5,|{SirOn($NAME, $EVENT, $SHORT, |{ myAlarm_SireneOff() }|0:20
   
Das war vorher:
alarm5,|{SirOn($NAME, $EVENT, $SHORT, "del")|{ myAlarm_SireneOff() }|0:20

Spätestens nach dem Set Alarms Button sind die "Set Actions" der Actors beschnitten.

Er scheint direkt nach dem ersten Anführungszeichen abzuschneiden...

Prof. Dr. Peter Henning

Einfache Anführungszeichen verwenden.

LG

pah

chem

Ja, das funktioniert.

Ich habe eine weitere Frage:
Was ist die korrekte Methode in den Wait Action, Arm Action, Disarm Action und Cancel Action den aufrufenden Kanal festzustellen?

Hintergrund ist, ich schalte zwei Kanäle (4&5) immer gleichzeit an/aus. Jetzt werden diese Funktionen zwei mal aufgerufen, einmal für Kanal 4 und einmal für Kanal 5. Die Aktionen dürfen aber nur einmal ausgeführt werden. Ich würde daher gerne Testen welcher Kanal aufruft und dann nur für Kanal 5 die Aktionen starten....

Bisher mache ich das z.B. so:

sub myAlarm_WaitAction()
{
my $level4xec=AttrVal('ISS111','level4xec',"level4xec read error");
my $level5xec=AttrVal('ISS111','level5xec',"level5xec read error");

Log(0,"myAlarm_WaitAction: level4=$level4xec, level5=$level5xec");
 
    # only execute in case level 4 is changed
# activation sequence is 4,5
# needs to be checked because the function will be called for each activated level
  if($level4xec eq "armwait") { 
if($level5xec eq "disarmed") {
fhem("set MP3Alarm_Led on");
fhem("set MP3Alarm_Mp3 playTone 001");
}
}
}


Halte das nicht für optimal insbesondere disarm funktioniert so nicht...

chem

Komisch das keiner eine Lösung für das Problem hat. Führt ihr alle immer die gleiche Aktion aus, unabhängig davon welcher Alarmlevel eingeschaltet wird? Z.B. bei mir Level 0 ist low Bat detection, Level 4,5 ist Einbruchmeldealarm. Die sollen beim ein/ausschalten natürlich verschiedene Aktionen ausführen, dazu muss ich wissen welcher Level gerade die Funktion aufgerufen hat.

Ich habe mir da jetzt was zusammengebastelt, aber ich hätte gedacht dass es eine offizielle Variable oder attribute oder sowas gibt was mir sagt welcher Kanal denn jetzt gerade ein/aus/cancled wird..

KölnSolar

Lösung hab ich nicht für Dich. Ich stelle aber Deinen case in Frage. Ich hab 2 "Typen" von Alarmen: rund-um-die-Uhr vs. im Bedarfsfall

rund-um-die-Uhr sind Dinge wie Reaktion auf einen Klingeltaster oder Wassermelder..... Und die aktiviere oder deaktiviere ich ja (in der Regel)gar nicht. Die laufen rund um die Uhr.

Mein einziger "Bedarfsfall" ist der Einbruchalarm, den ich eben im Bedarfsfall aktiviere/deaktiviere. Dafür nutze ich dann die Signalisierungen. Und wenn ich dann doch mal rund-um-die-Uhr deaktiviere, tut die Signalisierung auch nicht weh.

Sicherlich gibt es noch den 3. Fall, den ich aber (noch ?) nicht habe, dass anstatt rund-um-die-Uhr ein bestimmter Zeitraum definiert wird. Da aktiviert/deaktiviert dann die Zeit, was dann(hoffe ich für diesen Fall) nicht die disarm etc. action auslöst.

Und nun zurück zu Deinen Beispielen: Dein Level 0 ist doch der klassische rund-um-die-Uhr-Fall. Und was Deine Alarmanlage anbelangt:
ZitatHintergrund ist, ich schalte zwei Kanäle (4&5) immer gleichzeit an/aus.
Warum schaltest Du 2 Level gleichzeitig ? In meiner Glaskugel sehe ich das Szenario nicht und deshalb kommt mir auch kein workaround in den Sinn  :'(
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

chem

Bei mir ist Level 4 die Fensterschleife. Dort wird sofort ein Alarm ausgelöst wenn die Sensoren "open" melden. Der Eindringling soll möglichst früh verschreckt werden, am besten bevor das Fenster ganz auf ist.

Level 5 ist die Tür Schleife. Dort wird der Alarm verzögert damit man Gelegenheit hat die Anlage noch auszuschalten nachdem der Raum betreten wurde.

Ich habe ja eine Lösung um den einschaltenden Kanal zu detektieren, ist halt nur umständlich alle Kanäle abzuklappern. Ich hatte gehofft es gibt eine Variable oder so die die Kanalnummer anzeigt.

Prof. Dr. Peter Henning

Das ist aber in meinen Augen eine komplett falsche Denkweise. Die Level sind die Aktivierungslevel - nicht die Hardware"schleifen". Und selbstverständlich gehört zu einem Öffnen der Tür auch eine unmittelbar erfolgende Warnung, dass in so-und-soviel Sekunden der "echte" Alarm ausgelöst wird.

Fenster"schleife" und Tür"schleife" sollten als separate Sensoren für ein und denselben Alarmlevel definiert werden. Und wer unbedingt den Türalarm verzögern möchte: Dafür kann man problemlos von außen einen Dummy und ein notify verwenden.

LG

pah

gamauf

Zitat von: chem am 17 Februar 2017, 07:24:03
Bei mir ist Level 4 die Fensterschleife. Dort wird sofort ein Alarm ausgelöst wenn die Sensoren "open" melden. Der Eindringling soll möglichst früh verschreckt werden, am besten bevor das Fenster ganz auf ist.

Level 5 ist die Tür Schleife. Dort wird der Alarm verzögert damit man Gelegenheit hat die Anlage noch auszuschalten nachdem der Raum betreten wurde.

Ich habe ja eine Lösung um den einschaltenden Kanal zu detektieren, ist halt nur umständlich alle Kanäle abzuklappern. Ich hatte gehofft es gibt eine Variable oder so die die Kanalnummer anzeigt.

Hallo!

Wie immer gibt es viele Möglichkeiten eine Aufgabe zu lösen!
Ich hab das ähnlich wie chem gelöst:
Aber ich de-/aktiviere nur Alarm Level 5 mit all seinen armwait, arm und disarm actions. Level 4 wird von den folgenden notifys OHNE triggern der actions mit geschaltet:
define A_EntryDelay_disarm_N notify .*AAA.*level5.*disarmed set A_Eingang_Reset on-for-timer 1; sleep 0.5; attr AAA level4xec disarmed; setreading AAA level4 disarmed
attr A_EntryDelay_disarm_N room Alarm

define A_EntryDelay_arm_N notify .*ATTR.*AAA.*level5.*[^s]armed attr AAA level4xec armed;; setreading AAA level4 armed
attr A_EntryDelay_arm_N room Alarm


A_Eingang_Reset ist ein Dummy der Level 4 quitiert ("cancel" action).

Für mich funktioniert das so wie ich es brauche...

LG
Rainer

chem

#792
Ich finge meine Lösung auch sehr gut, bei mir wird es in Kürze noch zwei zusätzliche Alarm-Level geben, einen für Jamming Detection (level-3) und einen für Bewegungsmelder Alarm (level-2).

Auch ist es ein nützliches Feature eine Alarmerhöhung zu haben, wenn nach den Fenstern die Türen auslösen. Gleiches wenn es dann Jamming Detection und Bewegungsmelder Alarm gibt).

Das pre-Warnung, das die Alarmanlage scharf ist wenn die Haustür geöffnet wurde, habe ich auch mit dummies gelöst, funktioniert prima. Ich habe zwei dummies für Kanal 5, einer benutzt dazu das in der Web-Gui einstellbare Delay und geht auf die Sirene, der andere hat kein delay und geht auf rotes Blinklicht.

Also alles in allem ein sehr nützliches Modul, nur hatte ich am Anfang den Aufwand das richtig zum Laufen zu bekommen massiv unterschätzt...

gamauf


chem

Erkennen eines Jammers auf 868MHz* der die Funk-Interfaces lahm legt.

Einen Alarm Level habe ich noch vergessen ;), Ausfall der Netzspannung


*die Frequenz auf der mein Homematic System arbeitet