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
Wie wäre es mit einem watchdog?
Wobei das mit DOIF sicher auch funktioniert.
Ich verwende DOIF, klappt sehr gut.
Wenn du mal ein list <türöffnerdevice> posten würdest, könnte man dir auch helfen...
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
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
Machs mit einem einfachen DOIF und dem attr wait x.
Vielen Dank für die Tips.
Ich werde meine Ergebnisse dann später hier kundtun.
VG
und richtig pairen
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 ::)
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.
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
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!
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
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
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?
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)
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
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
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
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
Zitataber da tut sich nix, was mach eich da falsch?
Du postet keinen Auszug aus dem Logfile der uns weiter helfen würde.
Tja, wer angepinnte Beiträge nicht liest muss warten bis jemand nachfrägt ::)
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
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 ;)
----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