Einfache Alarmanlage

Begonnen von The-Holgi, 17 Dezember 2013, 17:52:56

Vorheriges Thema - Nächstes Thema

The-Holgi

Hallo,
habe mir mit ein paar Max Fensterkontakten eine einfache Alarmanlage gebastelt.
Hier der Code:
define Alarm.LastReactTime dummy
attr Alarm.LastReactTime room Waechter

define Kontakt.Notify notify ...Kontakt {\
my $now = time;;\
my $lastReactTime = Value("Alarm.LastReactTime");;\
if((Value("Alarm_AN") eq "on")&&($lastReactTime + 30 < $now))\
{\
fhem("set Alarm.LastReactTime $now");;\
fhem("set Pushover1 msg 'Achtung' 'Unberechtigter Zutritt!' '' 0 ''");;\
}\
}


define Alarm_AN dummy
attr Alarm_AN room Waechter
attr Alarm_AN setList off on


Möchte jetzt noch zum aktivieren einen Fensterkontakt am Schlüsselbrett, der mittels Magnet am Schlüssel aktiviert wird einbauen.
Kann ich die Zeile: if((Value("Alarm_AN") eq "on")&&($lastReactTime + 30 < $now))\
dazu einfach um ein weiteres Value erweitern:
if((Value("Schlusselmagnet") eq "opened")&&(Value("Alarm_AN") eq "on")&&($lastReactTime + 30 < $now)))\

Oder ist das Blödsinn ?

Die readings des Kontaktes sehen so aus:
2013-12-17_17:25:15 th_Kontakt battery: ok
2013-12-17_17:25:15 th_Kontakt onoff: 1
2013-12-17_17:25:15 th_Kontakt opened
2013-12-17_17:25:18 th_Kontakt battery: ok
2013-12-17_17:25:18 th_Kontakt onoff: 0
2013-12-17_17:25:18 th_Kontakt closed


Gruß Holgi
Raspberry Pi 5

Puschel74

Hallo,

Ja.
Das ist der Sinn an Programmen bzw. am Programmieren.

Man kann Bedingungen einbauen - erweitern - umbauen - ändern.
Ebenso aud den Programmcode.
Das FHEM-Logfile ist dein Freund und zeigt dir wenn was falsch ist.
Und - versuch macht kluch

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

The-Holgi

Habe jetzt noch das Problem das der Alarm grundlos alle paar Minuten ausgelöst wird. Könnte es daran liegen das die Kontakte ihren Status ca. alle 60 min ins filelog schreiben ?
Für meinen Briefkastenalarm habe ich fast den gleichen code verwendet hier funktioniert es. Allerdings wird hier nur ins filelog geschrieben wenn der Kontact von closed nach opened wechselt.
Raspberry Pi 5

Puschel74

Hallo,

verwende mal den Event monitor und schau was so alles bei dir durch die Luft schwirrt.
Dort siehst du dann auch was deine Kontakte so senden und mit dem regexp kannstdu dann heraus finden wie oft dein notify ausgelöst wird.

Den Event monitor nur einmal anklicken und dann warten.

Grüsse
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

The-Holgi

Hallo,
im Eventmonitor sieht man das die Kontakte alle 60min diese Daten übertragen:
2013-12-18 10:47:56 MAX ku_Kontakt battery: ok
2013-12-18 10:47:56 MAX ku_Kontakt onoff: 0
2013-12-18 10:47:56 MAX ku_Kontakt closed

Genau dann wird auch jedesmal der Alarm ausgelöst.
Gibt es eine Möglichkeit das zu ändern, so daß die Kontakte ihren Status nur bei einem Ereignis ( opened/closed) übertragen ?
Ist ja auch mal abgesehen vom Fehlalarm für mich unnötiges Daten aufkommen.

Komischerweise wird bei dem Kontakt im Briefkasten nur beim öffnen ins filelog geschrieben. Habe diesen aber genauso durch autocreate anlegen lassen wie die anderen auch.
Raspberry Pi 5

Puschel74

Hallo,

ZitatGibt es eine Möglichkeit das zu ändern, so daß die Kontakte ihren Status nur bei einem Ereignis ( opened/closed) übertragen ?
Autsch - Frage falsch formuliert  ;D

Klar geht das.

Du musst den Kontakt nur öffnen - den verbauten Microcontroller ausfindig machen - eine passende Schnittstelle für die programmierung zusammen bauen - das im Micorcontroller enthaltene Programm irgendwo her bekommen - die gewünschten Änderungen einbauen - compilieren und wieder in den Controller schreiben.

Oder du versuchst erstmal ein
attr <Name_des_Kontakts> event_on_change_reading .*
Wenn dein Kontakt das Attribut bereits unterstützt löst FHEM nur dann ein Event aus wenn sich der Status ändert.

Grüsse
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

The-Holgi

#6
Super, besten Dank.
Werde ich wenn ich nachher Zuhause bin gleich testen.
Verstehe nur nicht warum ein Kontakt aus der Reihe tanzt.

Edit: So gehts attr tv_Kontakt event-on-change-reading .*
jetzt kann weiter gebastelt werden.

Gruß Holgi
Raspberry Pi 5

Puschel74

Hallo,

ja - zulange auf der Shift-Taste gewesen _  ;D

Aber schön das es jetzt klappt.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

The-Holgi

Hallo,
bastele gerade daran einen Max Fensterkontakt als zusätzlichen Schalter zum Alarm an und ausschalten zu integrieren.
Desweiteren sollte das Ganze mit einer Zeitverzögerung schalten.
Leider klappt das integrieren des Schalters schon nicht. Hatte es so versucht:
if((Value("Schlusselmagnet") eq "opened")&&(Value("Alarm_AN") eq "on")&&($lastReactTime + 30 < $now)))\
Klappt nicht, und bei genauer Überlegung müßten dann ja auch zum scharf schalten beide Schalter on bzw opened sein. Ist auch nicht so toll wenn man die Anlage von Unterwegs aus scharf schalten möchte.
Hat vielleicht jemand noch einen Tipp für mich ?
So sieht es bis jetzt aus:
define Alarm.LastReactTime dummy
attr Alarm.LastReactTime room Waechter

define Kontakt.Notify notify ...Kontakt {\
my $now = time;;\
my $lastReactTime = Value("Alarm.LastReactTime");;\
if(((Value("Alarm_AN") eq "on")&&(Value("Magnetschalter") eq "opened")&&($lastReactTime + 30 < $now)))\
{\
fhem("set Alarm.LastReactTime $now");;\
fhem("set Pushover1 msg 'Achtung' 'Unberechtigter Zutritt!' '' 0 ''");;\
}\
}\

attr Kontakt.Notify room Waechter

define Alarm_AN dummy
attr Alarm_AN room Waechter
attr Alarm_AN setList off on


Gruß Holgi
Raspberry Pi 5

The-Holgi

Hallo,
komme hier nicht weiter. Hat vielleicht jemand einen Tipp wie ich die Anlage Zeitverzögert einschalten kann ?
Weiß nicht wie ich ein "at" da rein basteln soll.

Gruß Holgi
Raspberry Pi 5

juppzupp

wie wäre es wenn dein magnetschalter einen dummy triggert
define atdummymagnet at +00:00:10 set dummymagnet on

und du in deiner routing den dummy aufgreifst?

grüße

The-Holgi

#11
Hallo, danke für den Tipp.
Hm, der Alarm_An ist ein dummy Schalter. Schön wäre ja jetzt wenn ich diesen durch betätigen des Magnetschalters zeitverzögert einschalten kann.
Habe schon viel probiert hat leider noch nicht geklappt.

Edit: verzögert ein mittels Magnetschalter klappt jetzt:
define Alarm.LastReactTime dummy
attr Alarm.LastReactTime room Waechter

define Kontakt.Notify notify ...Kontakt {\
my $now = time;;\
my $lastReactTime = Value("Alarm.LastReactTime");;\
if((Value("Alarm_AN") eq "on")&&($lastReactTime + 30 < $now))\
{\
fhem("set Alarm.LastReactTime $now");;\
fhem("set Pushover1 msg 'Achtung' 'Unberechtigter Zutritt!' '' 0 ''");;\
fhem("set Dimmer on");;\
fhem("define DimmerOff at +00:00:15 set Dimmer off");;\
}\
}


define act_on_Magnetschalter notify Magnetschalter { if ("%" ne "opened") { fhem("define verzoegert_an at +00:00:10 set Alarm_AN on") } }
attr act_on_Magnetschalter room Waechter


Im log taucht aber immer der Fehler auf:
2013.12.23 12:37:57 3: define verzoegert_an at +00:00:10 set Alarm_AN on : verzoegert_an already defined, delete it first
2013.12.23 12:37:57 3: act_on_Magnetschalter return value: verzoegert_an already defined, delete it first


Warum ist das so ?
Desweiteren suche ich noch nach einer Möglichkeit den Alarm mittels geschlossenen Magnetschalters wieder aus zu schalten. Kann man vielleicht irgendwie ein else set Alarm_AN off einbauen ?

Gruß Holgi
Raspberry Pi 5

The-Holgi

Hm, hab es jetzt so geändert:
define act_on_Magnetschalter notify Magnetschalter { if ("%" ne "closed") { fhem("define verzoegert_an at +00:00:05 set Alarm_AN on") } else {fhem("set Alarm_AN off") }}\
So wird der Alarm nach auflegen des Magneten auch abgeschaltet, allerdings nur für 5 sekunden.
Raspberry Pi 5

The-Holgi

#13
Hallo,
habe die Idee mit dem Fensterkontakt zum Aktivieren wieder verworfen. Ich nutze jetzt den Eco Taster zum scharf stellen.
Eco_Taster:(onoff).* { if ("%EVTPART1" eq "1") {fhem("set ku_Thermostat,wz_Thermostat,bd_Thermostat,fl_Thermostat desiredTemperature eco");fhem("define at_Alarm at +00:00:25 set Alarm_AN on");} else {fhem("set ku_Thermostat,wz_Thermostat,bd_Thermostat,fl_Thermostat desiredTemperature auto");fhem("set Alarm_AN off");}}

Hat jemand eine idee wie ich es hin bekomme das der Alarm nicht sofort auslöst wenn eine Tür geöffnet wird ?
So ist es ja nicht möglich die Wohnung zu betreten ohne das der Alarm sofort auslöst.

...Kontakt {
my $now = time;
my $lastReactTime = Value("Alarm.LastReactTime");
if((Value("Alarm_AN") eq "on")&&($lastReactTime + 30 < $now))
{
fhem("set Alarm.LastReactTime $now");
fhem("set Pushover1 msg 'Achtung' 'Unberechtigter Zutritt!' '' 0 ''");
fhem("set Dimmer on");
fhem("define DimmerOff at +00:00:15 set Dimmer off");
}
}


Gruß Holgi
Raspberry Pi 5

juppzupp

hier mal meine richtung, vielleicht hilft es dir :

meine fenster bzw. türkontakte setzen einen voralarm
define AlarmTrigger notify CUL_HM_HM_SEC_SC_.*:open {if (Value("anlage_status") eq "on" && Value("VorAlarm") eq "on") {fhem "set HauptAlarm on"}};;;;{if (Value("anlage_status") eq "on" && Value("VorAlarm") eq "off") {fhem "set VorAlarm,AlarmWurdeAusgeloest on"}}


wenn der voralarm nicht binnen 30 sekunden "bestätigt" wird, löst der hauptalarm aus.
define VorAlarmAusloeser notify VorAlarm:on {if (Value("anlage_status") eq "on") {fhem "define HauptAlarm_timer at +00:00:30 set HauptAlarm on"}}


"bestätigen" wird durch abschalten der anlage erreicht.

define AlarmanlageAus notify anlage_status:off {{fhem "set VorAlarm,HauptAlarm off"};;;;{fhem "delete HauptAlarm_timer"};;{fhem "set rpiLCD_LED1 off"};;system("client 1234 setBacklight,100 & client 1234 text,0,50,'Anlage : Unscharf',0,1  & sleep 5 && client 1234 setBacklight,0 &")}