FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Bytechanger am 12 Februar 2016, 15:36:07

Titel: Einbruchkontrolle, define at variabel einsetzen
Beitrag von: Bytechanger am 12 Februar 2016, 15:36:07
Hallo,

ich möchte folgende Szenario verwirklichen:
Terrassentür hat einen Drehgriffkontakt und einen Öffnungssensor.
Die Idee, wenn der Öffnungssensor OFFEN meldet, aber der Sensor Drehgriffkontakt Zustand geschlossen ist, stimmt was nicht! Dann wurde die Tür vermutlich aufgehebelt!

#************* Sonder Terrassentür meldet auf, Griff unten! **********
define n_TerrassenTauf notify EG_Terrassentuer:[Oo]pen.* { \
  Log3 undef,3,">>Terrassentür auf!";;;;\
  if( ReadingsVal("EG_TerrassenTGriff", "state", "unbekannt") eq "closed" ){\
      #-- Terrassentür ist auf, Hebel aber zu! Zeit warten, dann nochmal prüfen\
       Log3 undef,3,">>Terrassentür auf, Türgriff zu, warte mal... !";;;;\
      fhem("define at_TerrasseEinbruchCheck at +00:00:30 { EinbruchCheckTerrasse() }");;;;\
    }\
}


Da der Drehgriff absichtlich mit 3 Sekunden Delay erst seinen Zustand meldet ist das Szenario so:
Notify auf Tür geöffnet->wenn Fensterdrehgriff noch zu->30 Sekunden warten-> nochmal prüfen ->Immernoch so = ALARM!

Aber er motzt, da die Routine auch mehrmals durchlaufen wird, un dann das at_TerrasseEinbruchCheck bereits definiert ist!

FRAGE:  Wie definiere ich hier Zeitversetzt eine Abfrage? Falls die Tür in den 30 Sekunden wieder geschossen und ERNEUT geöffnet wird (ja, geht, ich habe Kinder ;-))
soll die Wartezeit verlängert werden, um Fehlalarme zu vermeiden....


Greets

Byte
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: marvin78 am 12 Februar 2016, 15:38:20
Schau dir watchdog und defmod an.
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: Bytechanger am 12 Februar 2016, 15:53:08
OK mache ich, ein

if(defined("at_TerrasseEinbruchCheck")) {\
            Log3 undef,3,">>Terrassentür at war defined ... !";;;;\
            fhem("modify at_TerrasseEinbruchCheck +00:00:30");;;;\
         } else {\
            Log3 undef,3,">>Terrassentür at war nicht defined ... !";;;;\
            fhem("define at_TerrasseEinbruchCheck at +00:00:30 { EinbruchCheckTerrasse() }");;;;\
        }\


würde nicht funktionieren?!
Gibt es keine Möglichkeit zu testen, ob at_TerrasseEinbruchCheck bereits definiert wurde, wenn ja -> zeit verlängern, wenn nein-> 30 Sekunden setzen ??

Greets Byte
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: marvin78 am 12 Februar 2016, 16:09:17
Wie gesagt, schau dir defmod und watchdog an. Kontrolle würde ich über ein Reading oder dummy machen.
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: jmike am 12 Februar 2016, 16:43:36
Kann es gerade selber nicht testen aber kannst du von dem Notify vielleicht per ReadingVal was einlesen um zu prüfen ob es existiert?

Und: Es ist ja nach wie vor gang und gäbe das Glas einzuschlagen um den Griff zu bedienen. Wäre dann dein Check nicht umgangen?

Wenn nicht schon passiert vielleicht auch mal das Modul Alarmanlage von Prof. Dr. Peter A. Henning anschauen, da könntest du einen delay für Aktion und einen Sensor-gesteuerten Cancel einbauen. Vielleicht auch eine Lösung.

lg
mike
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: Bytechanger am 12 Februar 2016, 17:02:33
Hallo,

natürlich nutze ich das Alarmanlagenmodul. Da man aber schon mal vergisst, diese scharf zu stellen, würde ich diese Prüfung IMMER laufen lassen! Man kann es also nicht vergessen ;-)

Ich bezweifel, dass das Scheibeeinwerfen so üblich ist.


Wie gesagt, ist nur ein Auffang-Not notify, falls mal vergessen wird, die Anlage scharf zu stellen!
Diese Kombi (Griff zu und Tür trotzdem offen) sollte im Normalen ja nicht vorkommen, oder?

Danke nochmal, teste defmod mal. Wenn ich es richtig verstanden habe, macht es ganau dass, was ich will...

Glaube watchdog würde nicht funktionieren, denn es gäbe ja theoretisch auch das Szenario, Terrassentürgriff auf auf stellen, ohne zu öffnen,
später öffnen, dann würde watchdog auf open des Fensterkontaktes triggern und ewig auf den Fenstergriff warten....


Greets

Byte
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: frank am 12 Februar 2016, 17:08:08
ZitatDiese Kombi (Griff zu und Tür trotzdem offen) sollte im Normalen ja nicht vorkommen, oder?
kommt auf deine tür an.  :)

bei meiner geöffnetten tür kann ich den hebel verstellen.
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: Bytechanger am 12 Februar 2016, 20:05:47
Tja, irgendwas mache ich falsch

define n_TerrassenTauf notify EG_Terrassentuer:[Oo]pen.* defmod mdOff at +00:00:30 {\
  Log3 undef,3,">>Terrassentür 30 Sekunden auf!";;\
  if( ReadingsVal("EG_Terrassentuer", "state", "unbekannt") ne "closed" ){\
     if( ReadingsVal("EG_TerrassenTGriff", "state", "unbekannt") eq "closed" ){\
      #-- Terrassentür ist auf, Hebel aber zu!\
      SendMEMail(1,"Warnung Terrassentür offen, Hebel zu?! Einbruch??","WARNUNG Einbruch??!");;\
      SendSMS(1,"Warnung Terrassentür offen, Hebel zu?! Einbruch??","WARNUNG Einbruch??!");;\
    }\
   }\
}

Tuts nicht nur Fehlermeldungen im Log.
Habe ich die Syntax nicht verstanden von defmod

Greets

Byte
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: marvin78 am 12 Februar 2016, 20:09:27
Interessant wären die Fehlermeldungen. Die werden ja nicht umsonst ins Log geschrieben.

Und ich würde es bevorzugen, den Code aus dem DEF des ats hier zu lesen.
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: Bytechanger am 12 Februar 2016, 20:42:57
EG_Terrassentuer:[Oo]pen.* defmod mdOff at +00:00:30 {
  Log3 undef,3,">>Terrassentür 30 Sekunden auf!";
  if( ReadingsVal("EG_Terrassentuer", "state", "unbekannt") ne "closed" ){
     if( ReadingsVal("EG_TerrassenTGriff", "state", "unbekannt") eq "closed" ){
      #-- Terrassentür ist auf, Hebel aber zu!
      SendMEMail(1,"Warnung Terrassentür offen, Hebel zu?! Einbruch??","WARNUNG Einbruch??!");
      SendSMS(1,"Warnung Terrassentür offen, Hebel zu?! Einbruch??","WARNUNG Einbruch??!");
    }
   }
}


Log
2016.02.12 20:40:17 3: n_TerrassenTauf return value: Unknown command if(, try help.
Unknown command SendSMS(1,"Warnung, try help.
Unknown command }
, try help.
2016.02.12 20:40:17 3: n_TerrassenTauf return value: Unknown command if(, try help.
Unknown command SendSMS(1,"Warnung, try help.
Unknown command }
, try help.
2016.02.12 20:40:47 3: mdOff: Unknown command {, try help.


Kann defmod kein perl (also die Klammern {} ) ??

Greets

Byte
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: Bytechanger am 13 Februar 2016, 07:52:37
Vielleicht habe ich einen grundlegenden Fehler bei dem Befehl gemacht, aber mit einem Dummy Taster ging es!

Also ist es vielleicht nicht möglich dem defmod-Befehl PERL-Code zu übergeben?
In der Doku stand nichts...
(Ich habe bisher aber auch noch keine Beiträge gefunden, die Perl-Code verwendeten, immer andersherum, also aus Perl heraus nach fehm).

Greets

Byte
Titel: Antw:Einbruchkontrolle, define at variabel einsetzen
Beitrag von: marvin78 am 13 Februar 2016, 12:29:15
Du schachtelst. Wenn du schachtelst, musst du ; escapen, also verdoppeln.

EG_Terrassentuer:[Oo]pen.* defmod mdOff at +00:00:30 {
  Log3 undef,3,">>Terrassentür 30 Sekunden auf!";;
  if( ReadingsVal("EG_Terrassentuer", "state", "unbekannt") ne "closed" ){
     if( ReadingsVal("EG_TerrassenTGriff", "state", "unbekannt") eq "closed" ){
      SendMEMail(1,"Warnung Terrassentür offen, Hebel zu?! Einbruch??","WARNUNG Einbruch??!");;
      SendSMS(1,"Warnung Terrassentür offen, Hebel zu?! Einbruch??","WARNUNG Einbruch??!");;
    }
   }
}


Das gilt für den DEF Bereich. Direkt in der Config müssten es sogar 4 sein.

Ob es in deinen subs noch Fehler gibt, weiß ich nicht.