RandomTimer - neues Modul

Begonnen von Dietmar63, 28 Juli 2013, 15:52:40

Vorheriges Thema - Nächstes Thema

MarcoK

So, nun nochmal ein genauerer Auszug aus dem Logfile:

2018.07.19 00:47:01 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:01 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:01 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:01 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:20 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:20 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:20 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:20 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:20 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:45 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:47:45 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:55:18 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:55:18 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:55:18 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 00:55:18 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:04:10 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:04:10 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:04:10 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:04:10 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:10:06 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:10:06 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:10:06 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:10:06 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:10:06 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:16:37 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:16:37 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:28:38 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:28:38 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:28:38 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:28:38 1: isAbsent - disableCondition for RandomTimer: 0
2018.07.19 01:28:38 1: isAbsent - disableCondition for RandomTimer: 0


Ich habe insgesamt 4 RandomTimer (für 4 Räume) analog wie z.B. hier
*{h2hms_fmt(hms2h(sunset_abs())-(rand()*2/3)-1/3)} Livingroom_Lights *{h2hms_fmt(hms2h(sunset_abs(4*3600))-(rand()*2/3)-1/3)} 1500
definiert. Die TimetoSwitch ist jeweils auf eine unterschiedliche Länge gesetzt. Mittlerweile ist über das Attribut verbose 1 die Menge an Logmeldungen etwas reduziert. Die Meldungen wie im obigen Abschnitt zu sehen treten nun "nur noch" im Zeitraum zwischen "Beginn" und "Ende" der RandomTimer auf, jeweils in dem ungefähren Zeitintervall von einigen Minuten. Zuvor wurden die Meldungen alle 20 Sekunden generiert und ins Logfile geschrieben.

Besten Dank für die Unterstützung,
Marco

igami

Hi Marco,

ich habe das Modul ja nur geerbt, deswegen brauchte ich die ganze Zeile.
Im Code von Randomtimer kann ich keine Zeile ausfindig machen die so einen Logeintrag erzeugt.

Ist die Version aktuell? Nutzt du noch andere Module die sowas erzeugen könnten (z.B. Module die den Status von Devices überwachen)?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

MarcoK

Ah ja, okay, danke für den Hinweis! Schande über mich, aber die Meldungen stammen aus einer Funktion in meiner myUtils, oh man.

Danke für Deinen Support und insgesamt auch für Deine ganze Arbeit mit den Modulen :)


Grüße
Marco

igami

Zitat von: MarcoK am 19 Juli 2018, 20:10:45
Ah ja, okay, danke für den Hinweis! Schande über mich, aber die Meldungen stammen aus einer Funktion in meiner myUtils, oh man.
Dann haben wir die Fehlerquelle ja schnell gefunden ;)

Zitat von: MarcoK am 19 Juli 2018, 20:10:45
Danke für Deinen Support und insgesamt auch für Deine ganze Arbeit mit den Modulen :)
Vielen Dank :)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

willib

Ich habe etwas den Faden verloren. Ich nutze das Modul zur Anwesenheitssimulation, wie viele Andere auch. Wenn ich zuhause bin wird die disableCond true. Das Funktioniert auch soweit. Wenn ich aber nach Hause komme und RandomTimer schon läuft schaltet er mir irgendwann das Licht aus. keepDeviceAlive wäre hier richtig. Wenn ich aber abwesend bin sollen die Lichter natürlich am Ende ausgehen.
Gibt es ein Attribut mit dem ich das Verhalten bei Abbruch vor timespec_stop steuern kann?
FHEM in Debian 10 LXC unter Proxmox auf NUC, Homematic, Hue, Intertechno, Jeelink, RFXTRX, Harmony Hub, VU+ Uno 4K, Sonos, AMAD

Bartimaus

Zitat von: willib am 23 November 2018, 11:28:36
Ich habe etwas den Faden verloren. Ich nutze das Modul zur Anwesenheitssimulation, wie viele Andere auch. Wenn ich zuhause bin wird die disableCond true. Das Funktioniert auch soweit. Wenn ich aber nach Hause komme und RandomTimer schon läuft schaltet er mir irgendwann das Licht aus. keepDeviceAlive wäre hier richtig. Wenn ich aber abwesend bin sollen die Lichter natürlich am Ende ausgehen.
Gibt es ein Attribut mit dem ich das Verhalten bei Abbruch vor timespec_stop steuern kann?

Moin,

das kann ich bestätigen, und wollte deswegen auch schon fragen.
Es dauert gewühlt "Stunden" bis der RandonTimer erkennt, das die "disableCond = true" ist. Reagiert der RT nicht auf "Events" ?
Weil ich sehe, das der RT immer noch aktiv ist.
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

FunkOdyssey

#501
Soweit ich das in Erinnerung habe und das war auch der Grund wieso ich mich nach einer anderen Lösung (DOIFs) umgesehen habe, läuft der Timer im Hintergrund (einmalig) weiter. Betritt man also das Haus, so weiß es das Modul auch. Aber der bereits gestartete Timer wird zu Ende gelaufen. So kann es sein, dass erst nach 15-30min eine Ein-oder Ausschaltung durchgeführt wird. Und das obwohl man die Leuchte gerade wieder so eingestellt hat, wie man es denn gerne hätte.

AFAIK konnte man das ziemlich leicht fixen - hatte aber auch irgendwelche Nachteile: siehe https://forum.fhem.de/index.php/topic,14010.msg522558.html#msg522558




Nachtrag: "disableCond" und mein Vorgehen mit "disable" verhalten sich hier identisch.
https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/98_RandomTimer.pm#L308

willib

Danke für den Hinweis auf deine Alternative per DOIF. Gibt es da eventuell einen aktuellen codeschnipsel?
Wird denn das RT Modul noch weiter entwickelt?
Wenn ja, darf ich dann als Feature request vorschlagen, dass eine Unterscheidung zwischen Ende des RT Zeitintervalls und Abbruch des RT eingeführt wird? Sodass man per Attribut einstellen kann was bei Abbruch des Timers passiert. Oder zumindest dass ein Abbruch keine weiteren Schaltvorgänge auslöst.

FHEM in Debian 10 LXC unter Proxmox auf NUC, Homematic, Hue, Intertechno, Jeelink, RFXTRX, Harmony Hub, VU+ Uno 4K, Sonos, AMAD

FunkOdyssey

Der ursprüngliche Entwickler ist verstorben.
igami betreut das Modul nun als Maintainer.
Mal schauen, was er sagt. Mir wäre eine ordentliche Lösung im RT-Modul auch lieber.

swenp

#504
Zitat von: willib am 26 November 2018, 13:39:48
Danke für den Hinweis auf deine Alternative per DOIF. Gibt es da eventuell einen aktuellen codeschnipsel?
Wird denn das RT Modul noch weiter entwickelt?
Wenn ja, darf ich dann als Feature request vorschlagen, dass eine Unterscheidung zwischen Ende des RT Zeitintervalls und Abbruch des RT eingeführt wird? Sodass man per Attribut einstellen kann was bei Abbruch des Timers passiert. Oder zumindest dass ein Abbruch keine weiteren Schaltvorgänge auslöst.

Hätte gerne auch eine Fallunterscheidung zwischen Timer-Ablauf und Heimkehr bei aktivem Timer, habe daher mal selbst Hand angelegt. Sind meine ersten Schritte in Perl und fhem, bitte nicht schlagen wenn ich gegen irgendeine Etikette verstoße...

Im aktuellen Modul wird in beiden Fällen die gleiche Funktion durchlaufen, die abhängig vom Attribut "keepDeviceAlive" den Endzustand schaltet:
sub RandomTimer_down($) {
   my ($hash) = @_;

   $hash->{COMMAND} = AttrVal($hash->{NAME}, "keepDeviceAlive", 0) ? "on" : "off";
   RandomTimer_device_switch($hash);
}


Ich habe daher ein neues Attribut und eine neue Funktion hinzugefügt:
sub RandomTimer_disableDown($) {
   my ($hash) = @_;
   my $disableState = AttrVal($hash->{NAME}, "disableState", 0);
   
   if ($disableState != -1) {
Log3 $hash, 4, "[".$hash->{NAME}."]"." setting requested disableState on $hash->{DEVICE}: ";
    $hash->{COMMAND} = AttrVal($hash->{NAME}, "disableState", 0) ? "on" : "off";
RandomTimer_device_switch($hash);
   } else {
Log3 $hash, 4, "[".$hash->{NAME}."]"." no action requested on $hash->{DEVICE}: ";
   }
}

Das Attribut heißt "disableState". Die Funktion wird nur in dem Fall durchlaufen, wenn bei aktivem Timer die DisableCondition eintritt. Ansonsten wird wie gehabt die alte Funktion ausgeführt, die das "keepDeviceActive" Attribut auswertet. So können beide Fälle unabhängig konfiguriert werden.

Logik ist wie derzeit bei "keepDeviceActive": 0 setzt das Device auf "off", 1 setzt das Device auf "on". Neu ist "-1", damit wird am Ende keine Aktion durchgeführt und das Device bleibt wie es gerade ist.

Funktioniert bei mir wie beschrieben und erfüllt meine Anforderung, vielleicht mag es ja noch jemand testen.


igami

Huch, hier habe ich wohl ein paar Beiträge nicht mitbekommene, schaue ich mir nachher an.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

willib

Super! Das hat mir immer gefehlt. Wenn es keine Probleme damit gibt würde ich mich sehr freuen wenn das so eingecheckt wird. Ich habe es noch nicht getestet.
FHEM in Debian 10 LXC unter Proxmox auf NUC, Homematic, Hue, Intertechno, Jeelink, RFXTRX, Harmony Hub, VU+ Uno 4K, Sonos, AMAD

swenp

Mir ist bei der Gelegenheit noch aufgefallen, dass die Doku vom "keepDeviceAlive" Attribut nicht ganz passt.

ZitatThe keepDeviceAlive attribute changes the behavior. If set, the device status is not changed when the stoptime is reached.

Tatsächlich wird aber das Device immer aktiv auf den Zustand gesetzt, der per "keepDeviceAlive" vorgegeben ist wenn Stop-Time erreicht wird.

213 sub RandomTimer_down($) {
214    my ($hash) = @_;
215
216    $hash->{COMMAND} = AttrVal($hash->{NAME}, "keepDeviceAlive", 0) ? "on" : "off";
217    RandomTimer_device_switch($hash);
218 }


Könnte man in der Dokumentation anpassen oder wie bei meinem Vorschlag oben die "-1" neu einführen und entsprechend dokumentieren.

Otto

Timer schaltet nicht aus, versteht nicht warum

List:
Internals:
   COMMAND    on
   DEF        *{sunset_abs()} Shelly2_OG_FL 22:30:00 300
   DEVICE     Shelly2_OG_FL
   NAME       ZufallsTimerFlur_OG
   NR         1630
   STATE      on
   TYPE       RandomTimer
   READINGS:
     2018-12-14 00:05:30   Startzeit       2018-12-14 16:49:53
     2018-12-14 00:05:30   Stoppzeit       2018-12-14 22:30:00
     2018-12-11 06:41:30   TimeToSwitch    300
     2018-12-14 19:05:35   active          1
     2018-12-14 19:05:35   state           on
   TIMER:
     ZufallsTimerFlur_OG_Exec:
       HASH       ZufallsTimerFlur_OG
       MODIFIER   Exec
       NAME       ZufallsTimerFlur_OG_Exec
     ZufallsTimerFlur_OG_SetTimer:
       HASH       ZufallsTimerFlur_OG
       MODIFIER   SetTimer
       NAME       ZufallsTimerFlur_OG_SetTimer
   helper:
     REL       
     REP        *
     SIGMAWHENOFF 800
     SIGMAWHENON 200
     STARTTIME  14.12.2018  16:49:53
     STOPTIME   14.12.2018  22:30:00
     SWITCHMODE 800/200
     S_REL     
     S_REP     
     TIMESPEC_START *{sunset_abs()}
     TIMESPEC_STOP 22:30:00
     TIMETOSWITCH 300
     active     1
     startTime  1544802593
     stopTime   1544823000
Attributes:
   offCmd     set @ off 0
   onCmd      set @ on 0
   room       10_Licht,60_Timer
   switchmode 800/200
   verbose    5


LOG:
2018.12.14 18:45:25.304 3: [ZufallsTimerFlur_OG] result of function Value(Shelly2_OG_FL) must be 'on' or 'off'
2018.12.14 18:45:25.304 4: [ZufallsTimerFlur_OG] IstZustand:OK sigmaWhen-OK:800 random:872<800=>false
2018.12.14 18:45:25.304 5: [ZufallsTimerFlur_OG] removing Timer: ZufallsTimerFlur_OG_Exec
2018.12.14 18:45:25.305 5: [ZufallsTimerFlur_OG] setting  Timer: ZufallsTimerFlur_OG_Exec 2018-12-14 18:50:22
2018.12.14 18:50:22.310 3: [ZufallsTimerFlur_OG] result of function Value(Shelly2_OG_FL) must be 'on' or 'off'
2018.12.14 18:50:22.310 4: [ZufallsTimerFlur_OG] IstZustand:OK sigmaWhen-OK:800 random:469<800=>true
2018.12.14 18:50:22.310 4: [ZufallsTimerFlur_OG] command: set Shelly2_OG_FL on 0
2018.12.14 18:50:22.312 5: [ZufallsTimerFlur_OG] removing Timer: ZufallsTimerFlur_OG_Exec
2018.12.14 18:50:22.313 5: [ZufallsTimerFlur_OG] setting  Timer: ZufallsTimerFlur_OG_Exec 2018-12-14 18:55:20
2018.12.14 18:55:20.316 3: [ZufallsTimerFlur_OG] result of function Value(Shelly2_OG_FL) must be 'on' or 'off'
2018.12.14 18:55:20.316 4: [ZufallsTimerFlur_OG] IstZustand:OK sigmaWhen-OK:800 random:632<800=>true
2018.12.14 18:55:20.316 4: [ZufallsTimerFlur_OG] command: set Shelly2_OG_FL on 0
2018.12.14 18:55:20.319 5: [ZufallsTimerFlur_OG] removing Timer: ZufallsTimerFlur_OG_Exec
2018.12.14 18:55:20.319 5: [ZufallsTimerFlur_OG] setting  Timer: ZufallsTimerFlur_OG_Exec 2018-12-14 19:00:21
2018.12.14 19:00:21.322 3: [ZufallsTimerFlur_OG] result of function Value(Shelly2_OG_FL) must be 'on' or 'off'
2018.12.14 19:00:21.323 4: [ZufallsTimerFlur_OG] IstZustand:OK sigmaWhen-OK:800 random:367<800=>true
2018.12.14 19:00:21.323 4: [ZufallsTimerFlur_OG] command: set Shelly2_OG_FL on 0
2018.12.14 19:00:21.325 5: [ZufallsTimerFlur_OG] removing Timer: ZufallsTimerFlur_OG_Exec
2018.12.14 19:00:21.325 5: [ZufallsTimerFlur_OG] setting  Timer: ZufallsTimerFlur_OG_Exec 2018-12-14 19:05:10


Was mache ich falsch
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

swenp

#509
Schau mal in dein Log
2018.12.14 19:00:21.322 3: [ZufallsTimerFlur_OG] result of function Value(Shelly2_OG_FL) must be 'on' or 'off'

Dazu die commandref:
ZitatValue() must evaluate one of the values "on" or "off". The behavior of devices that do not evaluate one of those values can be corrected by defining a stateFormat:
attr stateFormat EDIPlug_01 {(ReadingsVal("EDIPlug_01","state","nF") =~ m/(ON|on)/i) ? "on" : "off" }
if a devices Value() funktion does not evalute to on or off(like WLAN-Steckdose von Edimax) you get the message:
[EDIPlug] result of function Value(EDIPlug_01) must be 'on' or 'off'

Poste doch mal ein
list Shelly2_OG_FL