[gelöst] DEF / log: already defined, delete it first - Gerät nach 30 Minuten aus

Begonnen von Brot, 05 November 2017, 11:34:18

Vorheriges Thema - Nächstes Thema

Brot

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
diverse Raspberry Pis, Orange Pi 3, Odroid N2, Alexa, jede Menge ESP8266er
Raspbian, FHEM, NextCloud, Pi-Hole, OctoPrint, MagicMirror²
Tasmota, Eqiva Bluetooth Thermo, Senseo-ESP8266-Mod, Conbee-II HUE, Z-Wave, BTLE_FlowerSens...

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Frank_Huber

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.

Brot

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
diverse Raspberry Pis, Orange Pi 3, Odroid N2, Alexa, jede Menge ESP8266er
Raspbian, FHEM, NextCloud, Pi-Hole, OctoPrint, MagicMirror²
Tasmota, Eqiva Bluetooth Thermo, Senseo-ESP8266-Mod, Conbee-II HUE, Z-Wave, BTLE_FlowerSens...

Frank_Huber

#4
Sagmal, editierst du direkt in der cfg?

Deinem fbdect fehlt das event-on- change Attribut  .*

Mit dem Handy online, daher kurz gefasst...

Brot

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
diverse Raspberry Pis, Orange Pi 3, Odroid N2, Alexa, jede Menge ESP8266er
Raspbian, FHEM, NextCloud, Pi-Hole, OctoPrint, MagicMirror²
Tasmota, Eqiva Bluetooth Thermo, Senseo-ESP8266-Mod, Conbee-II HUE, Z-Wave, BTLE_FlowerSens...

Frank_Huber

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...


viegener

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
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Brot

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
diverse Raspberry Pis, Orange Pi 3, Odroid N2, Alexa, jede Menge ESP8266er
Raspbian, FHEM, NextCloud, Pi-Hole, OctoPrint, MagicMirror²
Tasmota, Eqiva Bluetooth Thermo, Senseo-ESP8266-Mod, Conbee-II HUE, Z-Wave, BTLE_FlowerSens...

viegener

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
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Brot

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
diverse Raspberry Pis, Orange Pi 3, Odroid N2, Alexa, jede Menge ESP8266er
Raspbian, FHEM, NextCloud, Pi-Hole, OctoPrint, MagicMirror²
Tasmota, Eqiva Bluetooth Thermo, Senseo-ESP8266-Mod, Conbee-II HUE, Z-Wave, BTLE_FlowerSens...

Beta-User

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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

viegener

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...
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Brot

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
diverse Raspberry Pis, Orange Pi 3, Odroid N2, Alexa, jede Menge ESP8266er
Raspbian, FHEM, NextCloud, Pi-Hole, OctoPrint, MagicMirror²
Tasmota, Eqiva Bluetooth Thermo, Senseo-ESP8266-Mod, Conbee-II HUE, Z-Wave, BTLE_FlowerSens...