Hallo zusammen,
mir füllt es hier irgendwie mein Log:
2017.11.05 11:15:30 3: Licht_an return value: Licht_aus already defined, delete it first
2017.11.05 11:15:30 3: define Licht_aus at +00:30:00 set FBDECT_fritzbox_12345_6789012 off : Licht_aus already defined, delete it first
Grund hierfür ist eine def, welche ich geschrieben habe, die eine 'Fritz DECT 200' 30 Minuten nach Aktivierung automatisch ausschalten soll:
FBDECT_fritzbox_12345_6789012 { if ("%" ne "off") { fhem("define Licht_aus at +00:30:00 set FBDECT_fritzbox_12345_6789012 off") } }
Tut eigentlich, aber dass es mir da das Log im Sekundentakt vollpumpt, muss ja jetzt auch nicht sein...
Wo habe ich denn da einen Denkfehler? :o
-Brot für die Welt
Zitat von: Brot am 05 November 2017, 11:34:18
Hallo zusammen,
mir füllt es hier irgendwie mein Log:
2017.11.05 11:15:30 3: Licht_an return value: Licht_aus already defined, delete it first
2017.11.05 11:15:30 3: define Licht_aus at +00:30:00 set FBDECT_fritzbox_12345_6789012 off : Licht_aus already defined, delete it first
Grund hierfür ist eine def, welche ich geschrieben habe, die eine 'Fritz DECT 200' 30 Minuten nach Aktivierung automatisch ausschalten soll:
FBDECT_fritzbox_12345_6789012 { if ("%" ne "off") { fhem("define Licht_aus at +00:30:00 set FBDECT_fritzbox_12345_6789012 off") } }
Tut eigentlich, aber dass es mir da das Log im Sekundentakt vollpumpt, muss ja jetzt auch nicht sein...
Wo habe ich denn da einen Denkfehler? :o
-Brot für die Welt
Wenn das ein notify sein soll, dann triggert das auf zu viele Events.
Und % wird immer ungleich off sein. Was soll das sein mit %?
Gruß
Dan
wenn Du aus "define" ein "defmod" machst wird es überschrieben wenn schon vorhanden.
und schau mal was dein notify triggert, denke das wird zu oft getriggert.
Hier solltest Du ansetzen.
evtl zeigst hier mal das ganze notiy und die dazugehörigen Geräte per "list" Befehl.
Ja also das sieht so aus:
Internals:
DEF FBDECT_fritzbox_12345_6789012 { if ("%" ne "off") { fhem("define Licht_aus at +00:30:00 set FBDECT_fritzbox_12345_6789012 off") } }
NAME Licht_an
NOTIFYDEV FBDECT_fritzbox_12345_6789012
NR 31
NTFY_ORDER 50-Licht_an
REGEXP FBDECT_fritzbox_12345_6789012
STATE 2017-11-05 11:52:49
TYPE notify
READINGS:
2017-11-05 11:52:41 state active
Attributes:
verbose 5
Internals:
DEF fritzbox:12345_6789012 powerMeter,tempSensor,switch
IODev fritzbox
LASTInputDev fritzbox
MSGCNT 2
NAME FBDECT_fritzbox_12345_6789012
NR 30
STATE off
TYPE FBDECT
fritzbox_MSGCNT 2
fritzbox_TIME 2017-11-05 11:57:49
id 12345_6789012
props powerMeter,tempSensor,switch
READINGS:
2017-11-05 11:57:49 AIN 12345 6789012
2017-11-05 11:57:49 FBNAME Licht
2017-11-05 11:57:49 FBPROP powerMeter,tempSensor,switch
2017-11-05 11:57:49 FBTYPE FRITZ!DECT 200
2017-11-05 11:57:49 ID 16
2017-11-05 11:57:49 energy 3041 Wh
2017-11-05 11:57:49 fwversion 03.87
2017-11-05 11:57:49 locked no
2017-11-05 11:57:49 mode manuell
2017-11-05 11:57:49 power 0.00 W
2017-11-05 11:57:49 present yes
2017-11-05 11:57:49 state off
2017-11-05 11:57:49 tempadjust 0.0 C
2017-11-05 11:57:49 temperature 20.5 C (measured)
Attributes:
IODev fritzbox
alias Licht
room FBDECT,alexa
Ich hatte das "define" auch schon im Auge, wusste aber nicht, wie ich das umschreiben kann. Aber das defmod ist ja mal ne nette Sache. Habe den Befehl testweise jetzt so "definiert":
defmod Licht_an notify FBDECT_fritzbox_12345_6789012 { if ("%" ne "off") { fhem("defmod Licht_aus at +00:00:10 set FBDECT_fritzbox_12345_6789012 off") } }
Bin mir jetzt nicht sicher, ob das so im Sinne des Erbauers ist, aber damit läuft mein log nicht mehr sekündlich voll. Aber irgendwie wird jetzt im 5-Minuten-Takt versucht das auszuschalten... :o
2017.11.05 12:20:58 3: FBDECT set FBDECT_fritzbox_12345_6789012 on
2017.11.05 12:21:08 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.05 12:23:42 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.05 12:28:42 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.05 12:33:42 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
-Brotverteiler
Sagmal, editierst du direkt in der cfg?
Deinem fbdect fehlt das event-on- change Attribut .*
Mit dem Handy online, daher kurz gefasst...
Zitat von: Frank_Huber am 05 November 2017, 12:55:33
Sagmal, editierst du direkt in der cfg?
Nö. Ich meine wo gelesen zu haben, dass man das am besten lassen soll. Solange ich im web interface (über das Kommandofeld) alles definieren und wieder rückgängig machen kann, sehe ich dafür auch keine Bewandtnis... ;)
Zitat von: Frank_Huber am 05 November 2017, 12:55:33
Deinem fbdect fehlt das event-on- change Attribut .*
Das Attribut würde ja folgendermaßen in die Syntax passen:
attr <device> event-on-change-reading .*
Aber hier stehe ich auf dem Schlauch... Hinter den geschweiften Klammern kann das ja nicht kommen!? :-\
-Brotzeit
Gut, cfg editieren ist nie gut.
Klang nur dannach weil du auch für den notify selbst defmod genommen hast.
Öffne das fbdect device und füge unten das Attribut hinzu mit .* als Wert.
Du kannst übrigens unten über raw config alles vom jeweiligen device sehen. Auch ändern geht da.
Mit dem Handy online, daher kurz gefasst...
Ich denke Du musst immer noch Dein notify selektiver gestalten (event-on-change ist ja eher der Holzhammer).
Du willst das notify doch nur durchführen, wenn es angeschaltet wurde --> also im Eventmonitor genau das Event heraussuchen und dieses im notify einfügen (das kann der Eventmonitor sogar selbst)
Ausserdem ist nicht klar, ob Du immer noch mit "%" vergleichst was wie oben schon angemerkt wurde keine Sinn macht
Zitat von: Frank_Huber am 05 November 2017, 14:46:08
Öffne das fbdect device und füge unten das Attribut hinzu mit .* als Wert.
Au man. Ja, natürlich. ;)
Das scheint das Problem gelöst zu haben! Danke! :D
Zitat von: Frank_Huber am 05 November 2017, 14:46:08
Du kannst übrigens unten über raw config alles vom jeweiligen device sehen. Auch ändern geht da.
Cool. Das ist ja mal nützlich! 8)
Zitat von: viegener am 05 November 2017, 16:19:58
Ich denke Du musst immer noch Dein notify selektiver gestalten (event-on-change ist ja eher der Holzhammer).
Du willst das notify doch nur durchführen, wenn es angeschaltet wurde --> also im Eventmonitor genau das Event heraussuchen und dieses im notify einfügen (das kann der Eventmonitor sogar selbst)
Ausserdem ist nicht klar, ob Du immer noch mit "%" vergleichst was wie oben schon angemerkt wurde keine Sinn macht
Doch, das ist derzeit noch der Vergleich (mangels einer besseren Idee). Wie könnte ich denn das Konstrukt...
defmod Licht_an notify FBDECT_fritzbox_12345_6789012 { if ("%" ne "off") { fhem("defmod Licht_aus at +00:00:10 set FBDECT_fritzbox_12345_6789012 off") } }
...eleganter gestalten? :)
-Bauernbrot
Was soll denn der Vergleich erreichen? er wird immer wahr sein also sinnlos.
Wenn Du ihn eleganter gestalten willst las ihn einfach weg ;)
Ich vermute Du möchtest einen Teil des Events mit off vergleichen?
Das geht nicht über "%", sondern z.B. über den Vergleich mit $EVTPART2 o.ä. aber nur wenn es auch im Event einen EVTPART2 gibt
Howdy...
Zu früh gefreut. Das Ding will immer noch nach einer gewissen Zeitspanne versuchen das Teil auszuschalten... nur ist die Zeitspanne länger geworden:
2017.11.05 22:35:21 3: FBDECT set FBDECT_fritzbox_12345_6789012 on
2017.11.05 23:47:55 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.06 01:18:49 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.06 02:18:49 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.06 06:53:50 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.06 09:33:50 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.06 15:03:51 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.06 16:18:51 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.06 18:03:51 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.06 19:28:51 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
2017.11.06 20:28:53 3: FBDECT set FBDECT_fritzbox_12345_6789012 off
Ich lese mir mal das mit dem Vergleich durch. Im Grunde möchte ich ja "nur", dass wenn die Fritz-Steckdose geschalten wird, dass diese nach 30 Minuten freiwillig wieder aus geht. Habe ich mir jetzt nicht so "stur" vorgestellt... :'(
-Voll(korn)brot
FBDECT unterstützt aber auch die set extensions... (on-for-timer 1800)
Und wie es sich anhört, willst du diesen Automatismus eigentlich nur ausgelöst haben, wenn die FBDECT eingeschaltet wird. Das kannst du m.E. besser über eine engere Regex für das notify erreichen.
Aber perl lernen, um die weite Regex wieder auszugleichen kann auch nicht schaden ;) .
Gruß, Beta-User
Zitat von: Brot am 06 November 2017, 21:06:07
Ich lese mir mal das mit dem Vergleich durch. Im Grunde möchte ich ja "nur", dass wenn die Fritz-Steckdose geschalten wird, dass diese nach 30 Minuten freiwillig wieder aus geht. Habe ich mir jetzt nicht so "stur" vorgestellt... :'(
-Voll(korn)brot
Wenn Du etwas nicht verstehst frag ruhig hier, ddafür ist das Forum da. Dann bekommt man auch gar nicht erst das Gefühl, dass Tipps ignoriert werden. Es ist ein häufiges Phänomen, dass notify-Ausdrücke sehr allgemein sind (wie bei Dir), dann löst es ständig aus. Dein Problem ist deshalb nicht der Vergleich im if (der ist einfach sinnlos), sondern, dass jedes event den notify triggert. Also vergiss if und geh in den eventmonitor...
Witzig, wie etwas das eigentlich funktioniert, aber mir nebenbei das log zugeknallt hat, so nervtötend sein kann.
Wie dem auch sei, habe ich nun eine akzeptable Lösung gefunden. Inspiriert durch diesen freundlichen Beitrag..:
Zitat von: Beta-User am 06 November 2017, 21:16:37
FBDECT unterstützt aber auch die set extensions... (on-for-timer 1800)
Es ist nach wie vor ein notify, aber schlanker und deutlich selektiver:
define Licht_an notify FBDECT_fritzbox_12345_6789012:on {fhem "set FBDECT_fritzbox_12345_6789012 on-for-timer 1800";;}
Damit funktioniert die Sache mit dem automatischen Ausschalten weiterhin
und mein log wird nicht mehr zugemüllt.
Danke an alle Beteiligten!
-Brottrunk