FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Carsten K. am 01 Januar 2016, 17:02:59

Titel: Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Carsten K. am 01 Januar 2016, 17:02:59
Gutes neues Jahr!

Weihnachten hat mir einen Türkontakt beschert - funzt super.
Meine Wunsch: ich möchte eine Aktion ausführen, wenn der Türkontakt länger als x Sekunden offen ist (unsere Haustür schließt nicht immer korrekt).

DOIF habe ich schon ausprobiert, hat nicht geklappt.
Ich könnte natürlich ein "at" definieren, aber ich denke, dass kostet zuviel Ressourcen.

Ich habe bis jetzt einen Zeitwert vom letzten Öffnen der Tür.
Meine Bedingung könnte sein "(time - doorLastOpened) > 120)".

Welchen "schicken" Ansatz seht Ihr?
Ich bin gespannt.

VG
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: marvin78 am 01 Januar 2016, 17:04:07
Wie wäre es mit einem watchdog?

Wobei das mit DOIF sicher auch funktioniert.
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Rince am 01 Januar 2016, 17:06:28
Ich verwende DOIF, klappt sehr gut.
Wenn du mal ein list <türöffnerdevice> posten würdest, könnte man dir auch helfen...
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Carsten K. am 01 Januar 2016, 17:06:36
Ich dachte, für DOIF brauche ich einen Event (Notify) von irgendeinem Device.
Habe ich vielleicht noch nicht richtig verstanden.
Ich werde da noch weiterüben.

WatchDog kenne ich noch nicht - werde ich auch mal ausprobieren.

Vielen Dank für die Hinweise
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Carsten K. am 01 Januar 2016, 17:09:06
List TuerKontakt1:
Internals:
   CUL1_MSGCNT 167
   CUL1_RAWMSG A0C3584413FC224000000013400::-82:CUL1
   CUL1_RSSI  -82
   CUL1_TIME  2016-01-01 16:11:46
   DEF        3FC224
   IODev      CUL1
   LASTInputDev CUL1
   MSGCNT     167
   NAME       TuerKontakt1
   NR         286
   NTFY_ORDER 50-TuerKontakt1
   STATE      closed
   TYPE       CUL_HM
   lastMsg    No:35 - t:41 s:3FC224 d:000000 013400
   protCmdDel 4
   protLastRcv 2016-01-01 16:11:46
   protResnd  3 last_at:2015-12-30 17:44:17
   protResndFail 1 last_at:2015-12-30 18:15:15
   protSnd    4 last_at:2015-12-30 18:15:14
   protState  CMDs_done_Errors:1
   rssi_at_CUL1 avg:-72.59 min:-101 max:-50.5 lst:-82 cnt:167
   Readings:
     2015-12-30 15:37:49   Activity        alive
     2015-12-24 21:28:44   CommandAccepted yes
     2015-12-24 21:28:38   D-firmware      2.4
     2015-12-24 21:28:38   D-serialNr      MEQ1138668
     2015-12-24 21:28:38   R-pairCentral   set_0xF11234
     2015-12-31 16:34:23   alive           yes
     2016-01-01 16:11:46   battery         ok
     2016-01-01 16:11:46   contact         closed (to broadcast)
     2015-12-31 16:34:23   recentStateType info
     2015-12-31 16:34:23   sabotageError   off
     2016-01-01 16:11:46   state           closed
     2016-01-01 16:11:46   trigger_cnt     52
   Helper:
     HM_CMDNR   53
     PONtest    1
     getCfgList all
     getCfgListNo ,4
     mId        00B1
     rxType     28
     Expert:
       def        1
       det        0
       raw        1
       tpl        0
     Io:
       newChn     +3FC224,00,00,00
       nextSend   1451661106.55549
       prefIO
       rxt        2
       vccu
       p:
         3FC224
         00
         00
         00
     Mrssi:
       mNo        35
       Io:
         CUL1       -80
     Prt:
       bErr       0
       sProc      0
     Q:
       qReqConf
       qReqStat
     Role:
       chn        1
       dev        1
     Rssi:
       At_cul1:
         avg        -72.5928143712575
         cnt        167
         lst        -82
         max        -50.5
         min        -101
Attributes:
   IODev      CUL1
   actCycle   028:00
   actStatus  alive
   autoReadReg 4_reqStatus
   expert     2_full
   firmware   2.4
   group      Tuerklingel
   model      HM-SEC-SC-2
   room       5_System
   serialNr   MEQ1138668
   subType    threeStateSensor
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: chunter1 am 01 Januar 2016, 17:11:22
Machs mit einem einfachen DOIF und dem attr wait x.
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Carsten K. am 01 Januar 2016, 17:24:26
Vielen Dank für die Tips.
Ich werde meine Ergebnisse dann später hier kundtun.

VG
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Wuppi68 am 01 Januar 2016, 19:00:22
und richtig pairen

Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Carsten K. am 01 Januar 2016, 20:41:24
Zitat von: Wuppi68 am 01 Januar 2016, 19:00:22
und richtig pairen
Was meinst Du mit "richtig pairen"?
Das Gerät ist schon eingebunden und meldet auch korrekt  ::)
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Puschel74 am 01 Januar 2016, 20:58:04
Zitat2015-12-24 21:28:38   R-pairCentral   set_0xF11234
Das Device ist noch nicht eingebunden und das es korrekt meldet sagt nichts aus.
Das set_ muss weg.
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Rince am 01 Januar 2016, 23:02:35
So gehts mit DOIF
DEF        ([fl_TK_Haustuer] eq "opened") (say Bitte denkt daran die Haustüre wieder zu schließen)
Attributes:
   repeatcmd  60
   room       Flur,Sicherheit
   wait       120


fl_TK_Haustuer tauscht du gegen denen Namen aus
"say" ist bei mir ein cmdalias, welches dann die Sprachausgabe erledigt
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Carsten K. am 03 Januar 2016, 17:58:43
Hallo Ihr Lieben!

ich habe die Vorschläge und Dokus durchgearbeitet und habe es tatsächlich hinbekommen  :o
Folgende Elemente habe ich definiert (ist noch im Test, daher keine "echten" Werte):
- DOIF auf das Device (den Türkontakt)
([TuerKontakt1] eq "open") ( setreading dum_TuerKontaktCheck urHaustuer open ) DOELSE ( setreading dum_TuerKontaktCheck urHaustuer closed )
- mit "wait" kann ich super die Nachlaufzeit steuern :)
- Dummy dum_TuerKontaktCheck mit UserReading "urHaustuer", damit ich danach ein Notify für eine Folgeaktion darauf setzen kann.
- Notify auf das UserReading des Dummy "dum_TuerKontaktCheck"

Vielen Dank!
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Rince am 04 Januar 2016, 07:14:21
Sehr schön  :)
Zitatdanach ein Notify für eine Folgeaktion darauf setzen kann
Kann man machen.

Du könntest aber auch die Folgebefehle direkt in das DOIF schreiben, dann hättest du alles an einem Ort. Im DEF Editorfenster kannst du bequem mit Zeilenumbrüchen werkeln, um das ganze schön übersichtlich zu halten.
Der Vorteil wäre, dass du dann eine Zeitsteuerung gleich dazu bekommst:

(say die Haustüre ist übrigens noch offen) (say macht endlich die Haustüre zu) (say wenn jetzt nicht bald die Haustüre zugemacht wird, spiele ich Volksmusik) (set Squeezebox play Volksmusik)

wait 60, 60, 45, 60
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Carsten K. am 04 Januar 2016, 08:04:36
ich würde gerne Perl-Code (also eine Funktion in 99_myUtil.pm) aufrufen, da ich es später als Alarm-Event verwenden möchte.
Das habe ich aber so nicht hinbekommen  :(
Daher habe ich die mir bekannten Mittel genommen  ;D und es über das Notify gelöst.

Falls ich ein Beispiel zum Aufruf einer Perl-Funktion bekäme  :-[, wäre das (für mich) der Königsweg  :D
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Rince am 04 Januar 2016, 08:40:19
Perlcode in fhem ist immer in {  }
Wenn du eine Funktion in der 99myUtils hast, dann kannst du ihren Namen in geschweiften Klammern aufrufen.

Ein Beispiel, welches nicht exakt das macht (was besseres habe ich grade nicht zur Hand (mein dLAN spinnt)):

Codeauszug aus einer Readingsgroup:
attr Spritpreise valueStyle {Werte($READING,$VALUE)}

99er Code:

###################################################
###     Spritpreisübersicht - Farbsortierung    ###
###################################################

sub Werte($$) {
  my ($name, $wert) = @_;
# Log(3,"$name $wert");
  if ($name eq "Diesel") {
    return 'style="color:red"' if($wert >= 1.39);
    return 'style="color:blue"' if(($wert >= 1.33) && ($wert < 1.39));
    return 'style="color:green;;font-weight:bold"' if($wert <= 1.32);
  }elsif ($name eq "SuperE10") {
    return 'style="color:crimson"' if($wert >= 1.70);
    return 'style="color:yellow"' if(($wert >= 1.55) && ($wert < 1.70));
    return 'style="color:lightgreen;;font-weight:bold"' if($wert < 1.55);
  }elsif ($name eq "SuperE5") {
    return 'style="color:red"' if($wert >= 1.59);
    return 'style="color:blue"' if(($wert >= 1.49) && ($wert < 1.59));
    return 'style="color:green;;font-weight:bold"' if($wert <= 1.48);
  } 
}

Die Funktion "Werte" wird aufgerufen mit 2 Parametern:  {Werte($READING,$VALUE)}

In der Funktion "Werte" nehmen wir die 2 Werte, definieren 2 Variablen und weisen ihnen diese Werte zu...

sub Werte($$) {
  my ($name, $wert) = @_;
# Log(3,"$name $wert");
....


Hilft dir das weiter?
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Carsten K. am 04 Januar 2016, 08:51:30
Vielen Dank Rince!

Anscheinend hatte ich einen Knoten im Hirn  :-[
Ich habe eine Test-Funktion mit Log-Ausgabe aufgerufen - hat gefunzt wie erwartet (erhofft ;))

Jetzt habe ich alle Elemente zusammen, um weiterzumachen.

Have a nice day  8)
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: raspklaus am 04 Januar 2016, 10:39:56
Ich habe dies über watchdog gelöst:

define Kelleroffen watchdog Hintereingang:open 00:15 Hintereingang:closed set  PushBulletX message Die Kellertür ist seit längerem offen!;; trigger Kelleroffen .
attr Kelleroffen regexp1WontReactivate 1
attr Kelleroffen room Keller,Sicherheit


ist me schlicht und übersichtlich
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: fvt am 04 Januar 2016, 11:34:34
Moin zusammen,

das ist ziemlich exakt was ich benötige.
Da ich einen Raum habe, der Fußboden-Heizung hat, und die nicht an FHEM angeschlossen ist, habe ich dem Raum einen Fensterkontakt (Drehgriffvariante) gegönnt.
Ziel:
Wenn das Fenster länger als 30mins geöffnet ist, möchte ich eine email erhalten, und das dann im 30 Minutentakt bis das Fenster wieder zu ist.

Habt ihr da eine hilfreiche Variante?

Danke

Frank
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Puschel74 am 04 Januar 2016, 12:19:41
Zitat von: fvt am 04 Januar 2016, 11:34:34
Habt ihr da eine hilfreiche Variante?

Wie wäre es mit der Lösung im Beitrag grad über deinem  :o
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: fvt am 05 Januar 2016, 16:59:15
hallo noch einmal.
habe das mit dem watchdog eingebaut.
Scheinbar funktioniert es auch irgend wie (muss das noch mal explizit nachverfolgen).
Jedenfalls wird ein Dummy mit dem definierten Wert gesetzt.

Jetzt wollte ich eine Mail verschicken mit:
OG_KZ_links_Fenster:open 00:01 OG_KZ_links_Fenster:closed { DebianMail('fvt@xyz.de','Info vom FHEM System','Das EMail Modul funktioniert');;};; setstate KZL_OFFEN defined
aber da tut sich nix, was mache ich da falsch?

Danke
Frank
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Rince am 05 Januar 2016, 20:20:18
Zitataber da tut sich nix, was mach eich da falsch?
Du postet keinen Auszug aus dem Logfile der uns weiter helfen würde.
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Puschel74 am 05 Januar 2016, 20:21:14
Tja, wer angepinnte Beiträge nicht liest muss warten bis jemand nachfrägt  ::)
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: fvt am 05 Januar 2016, 20:33:30
Moin, mir ging es eigentlich nur um den Aufruf des DebianMail-Calls, der Rest funktioniert ja.
Der DebianMail Call funktioniert alleine, und der watchdog funktioniert auch alleine, nur zusammen nicht.
Demnach dachte ich an einen Syntax-Fehler (Klammer, Semikolon, etc)
Ich bin echt kein Perl-Mann, eher JAVA, C, C++

Ich werde das Log noch nachreichen...

Danke
Frank
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: Puschel74 am 05 Januar 2016, 20:36:17
Und um Anfängern das Leben leichter zu machen gibt es die angepinnten Beiträge.
So kann der Fragesteller nachlesen was benötigt wird und bekommt recht zügig eine Lösung da nicht lange nachgefragt werden muss.
Und was bei dir geht oder nicht wissen wir nicht - das musst du uns schon mitteilen.
Aber ein - das geht und das nicht - ist zuwenig daher --- siehe mein angepinnter Beitrag  ;)
Titel: Antw:Lösungsansatz für Öffnungsdauer von Türöffnerkontakt
Beitrag von: fvt am 05 Januar 2016, 23:39:12
----gelöst-----

Problem war ein doppeltes ";;" zwischen zwei COMMANDS.
So wie im Beispiel von mir aufgeführt.

OG_KZ_links_Fenster:open 00:01 OG_KZ_links_Fenster:closed { DebianMail('fvt@xyz.de','Info vom FHEM System','Das EMail Modul funktioniert');;};; setstate KZL_OFFEN defined

Ein einfacher Blick eines erfahren Perl-Könners hätte die Frage schnell lösen können.

Das hatte nichts mit Logs zu tun.....

Trotzdem Danke.... dadurch habe ich mal den Loglevel 5 ausprobiert.....

Salue
Frank