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
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
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.
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
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.
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
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
Hallo,
ja - zulange auf der Shift-Taste gewesen _ ;D
Aber schön das es jetzt klappt.
Grüße
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
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
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
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
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.
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
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 &")}
Hallo,
ZitatIm log taucht aber immer der Fehler auf:
Code:
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 ?
Das ist kein Fehler sondern nur ein Hinweis ;D
Nicht alles was FHEM im Logfle vermerkt ist automatisch ein Fehler.
Die erste Meldung besagt nur das verzoegert_an bereits existiert - wenn es angelegt werden soll musst du das alte erst löschen
und die zweite Meldung besagt das gleiche nur mit act_on_Magnetschalter - das notify existiert bereits und du musst es erst löschen bevor es angelegt werden kann.
Dies hätte sich aber mit dem Suchbegriff (already defined delete ist first) sicher finden lassen 8)
Grüße
Hallo,
@ juppzupp das werde ich mal anpassen und testen. Besten Dank dafür.
@ Puschel habe das vielleicht falsch formuliert. Habe verzoegert_an vorher nicht definiert. Wenn ich das ganze anders nenne taucht der Hinweis alredy defined... auch wieder auf. Denke ich mache da irgendwo einen Fehler oder habe was falsch verstanden.
Gruß und frohes Fest Holgi
Hallo,
ZitatHabe verzoegert_an vorher nicht definiert.
doch hier:
define act_on_Magnetschalter notify Magnetschalter { if ("%" ne "opened") { fhem("define verzoegert_an at +00:00:10 set Alarm_AN on") } }
Sobald der Magnetschalter etwas anderes als "opened" sendet wird das notify erzeugt und angelegt.
Wenn dieser Magnetschalter innerhalb von 10 Sekunden nochmal etwas anderes als "opened" sendet wird nochmal versucht dieses notify zu erzeugen was in besagter "Mitteilung" endet.
Der zweite Teil der Meldung
Zitat2013.12.23 12:37:57 3: act_on_Magnetschalter return value: verzoegert_an already defined, delete it first
war schlecht gelesen von mir.
Hier sagt dir nur das notify für den Magnetschalter das verzoegert_an bereits existiert.
Grüße
Hallo,
Danke für die Aufklärung.
Gruß Holgi