RandomTimer - neues Modul

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

Vorheriges Thema - Nächstes Thema

Harald

#30
Hallo zusammen,

da muss ich Schnupp beipflichten. Über eine genauere Erläuterung würde ich mich auch freuen. Ich habe das so verstanden, dass 800/400 bedeutet, dass der Einschaltbefehl zu 80% und der Ausschaltbefehl zu 40% befolgt wird, weil die Lampe hin und wieder eben nicht geschaltet werden soll, um noch mehr Unregelmäßigkeit hinein zu bringen, oder?

Ist es möglich, das Modul so zu ändern, dass nicht nur ein sondern 2 oder 3 Schaltbefehle nacheinander gesendet werden? Meine Steckdosen folgen nämlich nicht immer dem Befehl, sondern bleiben nach der Abarbeitung manchmal ein- oder ausgeschaltet. Deshalb würde ich gerne zur Sicherheit die Schaltbefehle 2- oder 3-fach senden.

@Dietmar63: Wenn Du mir sagst, was ich wo ändern muss, würde ich das gerne probieren.

Viele Grüße und alles Gute für 2014

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Dietmar63

Zitatda muss ich Schnupp beipflichten. Über eine genauere Erläuterung würde ich mich auch freuen. Ich habe das so verstanden, dass 800/400 bedeutet, dass der Einschaltbefehl zu 80% und der Ausschaltbefehl zu 40% befolgt wird, weil die Lampe hin und wieder eben nicht geschaltet werden soll, um noch mehr Unregelmäßigkeit hinein zu bringen, oder?

stimmt.

ZitatIst es möglich, das Modul so zu ändern, dass nicht nur ein sondern 2 oder 3 Schaltbefehle nacheinander gesendet werden? Meine Steckdosen folgen nämlich nicht immer dem Befehl, sondern bleiben nach der Abarbeitung manchmal ein- oder ausgeschaltet. Deshalb würde ich gerne zur Sicherheit die Schaltbefehle 2- oder 3-fach senden.

Wenn du Empfangsprobleme hast, ist es bestimmt nicht sinnvoll allen Modulen beizubringen öfters zu schalten. Das senkt den credit und führt zu noch mehr Problemen.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Harald

Hallo Dietmar,

Danke für die Antwort. Hat aber nichts mit der Reichweite, sondern mit den Steckdosen zu tun. Dann werde ich mal sehen, wie ich das löse.

Viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Harald

#34
Hallo Dietmar,

kann es sein, dass die variable Zeitverzögerung nicht beim Einschalten wirksam ist? Ich habe das mehrfach versucht und nur Verzögerungen von bis zu 5 sek, die vermutlich durch FHEM selbst verursacht werden, beobachtet. Außerdem werden die Dosen bereits nach 20min (timeToSwitch=1200) abgeschaltet und nicht bei timespec_stop +- RandomTime (=timeToSwitch?). Oder habe ich noch etwas falsch gemacht? Ich würde gerne die Ein- sowie Ausschaltzeit um ca. +- 0 bis 20 Minuten automatisch ändern lassen.

Hier meine fhem.cfg:##############################################################################
#
#                 ELRO-Steckdosen schalten
# funktionieren mit diesen Adressen auch mit der Fernbedienung
#
define Verreist dummy
attr Verreist room ELRO
attr Verreist webCmd ja:nein
#
define Urlaub dummy
attr Urlaub room ELRO
attr Urlaub webCmd ja:nein
#
define myTwilight Twilight 51.518056 6.342778 1 652005
attr myTwilight room ELRO
#
define Dose1 IT 0FF000FFFF FF F0
attr Dose1 IODev CUL_0
attr Dose1 model itswitch
attr Dose1 room ELRO
attr Dose1 verbose 5
define Dose1Wohn RandomTimer *{sunset("HORIZON=-3")} Dose1 23:45:00 1200
attr Dose1Wohn disableCond (!isVerreist())
attr Dose1Wohn room ELRO
attr Dose1Wohn switchmode 999/999
attr Dose1Wohn verbose 5
#
define Dose2 IT 0FF00F0FFF FF F0
attr Dose2 IODev CUL_0
attr Dose2 model itswitch
attr Dose2 room ELRO
attr Dose2 verbose 5
define Dose2Kue RandomTimer *{sunset("HORIZON=-2")} Dose2 23:10:00 1200
attr Dose2Kue disableCond (!isVerreist())
attr Dose2Kue room ELRO
attr Dose2Kue switchmode 999/999
attr Dose2Kue verbose 5
#
define Dose3 IT 0FF00FF0FF FF F0
attr Dose3 IODev CUL_0
attr Dose3 model itswitch
attr Dose3 room ELRO
attr Dose3 verbose 5
define Dose3PC RandomTimer *{sunset("HORIZON=-4")} Dose3 18:00:00 1200
attr Dose3PC disableCond (!isVerreist())
attr Dose3PC room ELRO
attr Dose3PC switchmode 999/999
attr Dose3PC verbose 5
#

und hier das Logfile:
2014.01.06 16:52:45 4: [Dose2Kue] Next timer 06.01.2014  16:52:46
2014.01.06 16:52:46 4: [Dose2Kue] Zustand:off sigma:999 random:33
2014.01.06 16:52:46 4: [Dose2Kue] command: set Dose2 on
2014.01.06 16:52:46 2: IT set Dose2 on
2014.01.06 17:00:29 4: [Dose1Wohn] Next timer 06.01.2014  17:00:30
2014.01.06 17:00:30 4: [Dose1Wohn] Zustand:off sigma:999 random:239
2014.01.06 17:00:30 4: [Dose1Wohn] command: set Dose1 on
2014.01.06 17:00:30 2: IT set Dose1 on
2014.01.06 17:08:06 4: [Dose3PC] Next timer 06.01.2014  17:08:07
2014.01.06 17:08:07 4: [Dose3PC] Zustand:off sigma:999 random:218
2014.01.06 17:08:07 4: [Dose3PC] command: set Dose3 on
2014.01.06 17:08:07 2: IT set Dose3 on
2014.01.06 17:12:52 4: [Dose2Kue] Zustand:on sigma:999 random:804
2014.01.06 17:12:52 4: [Dose2Kue] command: set Dose2 off
2014.01.06 17:12:52 2: IT set Dose2 off


Wäre schön, wenn Du mir ein wenig auf die Sprünge helfen würdest.

Viele Grüße

Harald
PS: Verreist steht übrigens auf "ja"
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Dietmar63

#35
Zitatkann es sein, dass die variable Zeitverzögerung nicht beim Einschalten wirksam ist?

ja, das stimmt.

ZitatIch habe das mehrfach versucht und nur Verzögerungen von bis zu 5 sek, die vermutlich durch FHEM selbst verursacht werden, beobachtet.
nein, dieses Verhalten beruht auf Programmlogik.

ZitatAußerdem werden die Dosen bereits nach 20min (timeToSwitch=1200) abgeschaltet und nicht bei timespec_stop +- RandomTime (=timeToSwitch?). Oder habe ich noch etwas falsch gemacht? Ich würde gerne die Ein- sowie Ausschaltzeit um ca. +- 0 bis 20 Minuten automatisch ändern lassen

Du hast nichts falsch gemacht, aber immer noch nicht ganz verstanden wie ein RT funktioniert. Du hast switchmode mit 999/999 definiert. Das bedeutet, dass alle 1200 Sekunden immer angeschaltet und nach weiteren 1200 Sekunden immer ausgeschaltet wird.

Folgende Zeile
2014.01.06 17:00:30 4: [Dose1Wohn] Zustand:off sigma:999 random:239 
bedeutet:

Der Zustand des zu schaltenden Geräts ist off, das heisst es wird mit 99,9%tiger(Wert 1 von switchmode) Wahrscheinlichkeit eingeschaltet werden. Der Zufallswert random(immer zwischen 0 und 999) ist mit 239 kleiner als 999, somit wird eingeschaltet.

Wenn du Wert1 von switchmode mit 200 angegeben hättest, hätte RT das Gerät zum Zeitpunkt 17:00:30 nicht eingeschaltet. Dieses Spiel wiederholt sich alle 1200 Sekunden(+-10%) bis dass RT feststellt, dass  timespec_stop erreicht bzw. überschritten ist. Dann endet der Zyklus. Das Ende ist also immer nach timespec_stop. Genau kann man den Endezeitpunkt nicht vorhersagen. Er hängt von mehrmaligen timetoswitch(+-10%) ab.

ZitatIch würde gerne die Ein- sowie Ausschaltzeit um ca. +- 0 bis 20 Minuten automatisch ändern lassen
geht so:

fhem.cfg
define ZufallsTimerTisch      RandomTimer  *{sunrise_abs_rand(40)} StehlampeTisch *{sunset_abs_rand(40)} 480

99_myUtils

sub sunset_abs_rand ($)
{
   my ($zufall) = @_;

   my $secs = 60*$zufall;

   my $zuf = int(rand($secs));
   my $mod = -$secs/2 + $zuf;
   my $tim = sunset_abs("REAL",$mod);
   return($tim);
}


sunrise_abs_rand ($) und sunset_abs_rand ($) ist Wrapperfunktionen, die ausgehend vom Sonnenaufgang/Sonnenuntergang n Minuten zufällige Verschiebung in den Start bzw. Endezeitpunkt einrechen.

ZitatPS: Verreist steht übrigens auf "ja"
So ist es auch gedacht. Wenn ich verreist bin, möchte ich dass per zufälligem Schalten von Licht Anwesenheit simuliert wird.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Harald

Hallo Dietmar,

herzlichen Dank für die ausführliche Erklärung. Jetzt verstehe ich die Funktion des Moduls etwas besser. Aber eine Frage habe ich noch:

Habe ich das richtig verstanden, dass nach timespec_start die Lampe (evtl. mit Einschaltverzögerung) im Takt von timeToSwitch immer ein- und ausgeschaltet wird, bis timespec_stop (etvl. wieder mit Verzögerung) erreicht ist? Danach passiert nichts mehr, bis das neue timespec_start erreicht ist?

Wenn das so ist, ist es nicht das, was ich möchte. Bei mir soll die Lampe bei sunset "Horizon=x" +- variabler Verzögerung (timeToSwitch) eingeschaltet werden und so bleiben, bis timespec_stop (vorgegebene Zeit z.B. 19:00:00, 23:30:00 o.ä.) +- variable Verzögerung (timeToSwitch) erreicht ist und abgeschaltet wird.

Kann Dein Modul das leisten und wie kann ich das ggf. realisieren?

Nochmals besten Dank und viele Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Dietmar63

ZitatHabe ich das richtig verstanden, dass nach timespec_start die Lampe (evtl. mit Einschaltverzögerung) im Takt von timeToSwitch immer ein- und ausgeschaltet wird, bis timespec_stop (etvl. wieder mit Verzögerung) erreicht ist? Danach passiert nichts mehr, bis das neue timespec_start erreicht ist?
jetzt hast du es verstanden - bildet die RandomTimerfunktion einer ZSU(Zeitschaltuhr) ab.

ZitatWenn das so ist, ist es nicht das, was ich möchte. Bei mir soll die Lampe bei sunset "Horizon=x" +- variabler Verzögerung (timeToSwitch) eingeschaltet werden und so bleiben, bis timespec_stop (vorgegebene Zeit z.B. 19:00:00, 23:30:00 o.ä.) +- variable Verzögerung (timeToSwitch) erreicht ist und abgeschaltet wird.
zwei at oder probier mal WeekdayTimer. Als Zeiten kann man auch Perlausdrücke verwenden.

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Harald

Dake Dietmar für die Hilfe. Dann habe ich ja endlich die Funktion Deines Moduls verstanden. Es ist somit nicht ohne weiteres für meine Anwendung geeignet.
Mal sehen, ob  mit WeekdayTimer oder TwiLight meine Anforderungen zu erfüllen sind.

Viele Grüße und nochmals besten Dank

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Harald

Hallo Dietmar,

darf ich Dich nochmal um einen Tipp bitten? Mir gefällt Dein Modul mittlerweile recht gut. Es macht eigentlich fast alles, was ich brauche.
Ich habe mir gedacht, wenn man z.B. in der sub toggleDevice ($) eine Abfrage wie  if (($zufall <= $sima) && ($jetzt < $StopZeit)) an passender Stelle einfügt, könnte man das Abschalten der Lampe bei jedem Zyklus überspringen, bis die Endzeit erreicht ist und danach abschalten. Die grundsätzliche Funktion bliebe erhalten und ich hätte die Funktion, die ich möchte.
Leider sind meine Perlkenntnisse nicht so gut, dass ich selbst die richtige Stelle finden könnte. Ich würde mich sehr freuen, wenn Du mir ein bisschen helfen könntest.

Viele  Grüße

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Dietmar63

Das ist sicherlich möglich, aber wenn du jedes Modul selbst ein wenig verändern willst, weil es deinen zu Anforderungen nicht ganz passt, dann hast du bei updates viele Nachbesserungen einzupflegen. 

Mit 999/000 als switchmode wird mit fast an Sicherheit grenzender Wahrscheinlichkeit auch nie abgeschaltet. Ich könnte das Modul sogar noch so ändern, dass die Schaltung nur dann durchgeführt wird, wenn sigma echt größer 999 ist. Das passiert dann nie und dein gewünschtes Verhalten wäre realisiert.

WeekdayTimer passt aber ehrlich gesagt besser. WD realisiert mehrere at in einer Definition. time_specs drüfen Perlfunktionen sein.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Harald

#41
Hallo Dietmar,

das war ein toller Tipp, switchmode auf 999/000 zu setzen. Die ersten Tests (mit kurzen Zeiten) sind positiv verlaufen. Falls tatsächlich mal zwischendurch auf Aus geschaltet wird, habe ich keine Probleme damit.  In aller Regel bin ih ja nicht zu Hause, wenn wir verreist sind  8)  ;) Aber ständiges Aus- und Einschalten hätte mir nicht gefallen.
Jetzt werde ich die real gewünschten Einstellungen vornehmen. Wenn das auch klappt, schlage ich Dich für einen Orden vor.

Du hast natürlich recht, wenn man Module für den eigenen Bedarf abändert, hat man das Problem bez. des Updates. Entweder sind die eigenen Änderungen weg und man muss nacharbeiten, oder man benennt das Modul um, dann bekommt man keine Verbesserungen mit.

Nochmals Dankeschön für den Tipp und schönen Abend noch

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Harald

Hallo Dietmar,

ich habe mit Deinem Modul ein wenig getestet. Ich muss sagen, den Orden hast Du Dir redlich verdient! Wenn man weiß, was man tun muss, klappt (fast) alles prima.

Hier noch eine Beobachtung:

Wählt man für timespec_start eine feste Zeit (z.B. 09:45:00) klappt alles einwandfrei. Auch ein Neustart von FHEM während der Laufzeit des RT bringt kein unerwünschtes Verhalten, d.h. es wirde zur vorgesehenen Zeit (timespec_stop) abgeschaltet.
Setzt man allerdings z.B. *{sunset("HORIZON=3",0,"17:00","21:00")} und nach dem Start des Timers wird FHEM neu gestartet (nach Spannungsausfall), wird beim Hochfahren timespec_start auf die Zeit des nächsten Tages gesetzt (weil das ehemalige Startereignis ja schon vorbei ist)  und RT arbeitet bis dahin nicht mehr. Die Lampen werden erst am nächsten Tag wieder geschaltet.

Kann es sein, dass ich noch etwas falsch gemacht habe, dass das bei mir so abläuft?

Viele Grüße und besten Dank für das Modul

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus

Dietmar63

Zitat
sunrise()/sunset() returns the absolute time of the next sunrise/sunset, adding 24 hours if the next event is tomorrow, to use it in the timespec of an at device or for the on-till command for FS20 devices.

sunset_abs() sollte besser funktionieren.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Harald

Hallo. Dietmar,

das war's! Danke für Deine Hilfe. So lernt man Stück für Stück immer wieder dazu. Jetzt läuft RT weiter, auch wenn FHEM z.B. durch Abspeichern der .cfg o.ä. neu gestartet wird.

Viele Grüße und schönen Abend noch

Harald
Router:AVM7590 1&1 FW:FRITZ!OS 07.56 Anbindung:1&1 50/10 Mb/s, WLAN-Repeater 300E
ELV MAX!Cube, 7xThermostat, ECO, RasPi 4B mit bullseye auf Festplatte,
CUL V 1.67, JeeLink v3_10.1c, nanoCUL, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA, 2xMAX_FK
ELV MAX!1.4.5, FHEM 5.7 auf RasPi, Kostal PIKO plus