FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: Michi240281 am 04 Januar 2014, 20:37:41

Titel: Frage zu Random Timer
Beitrag von: Michi240281 am 04 Januar 2014, 20:37:41
Hallo,

habe mir mit folgendem Code einen Random Timer generiert:

#Wohnzimmerbeleuchtung zufällig ein/aus bei Abwesenheit (aktivieren über dummy Schalter "Verreist")
define Verreist dummy
attr Verreist webCmd ja:nein
define ZufallsTimerWohnzimmer RandomTimer *18:00:00 Alle 20:30:00 180
attr ZufallsTimerWohnzimmer disableCond (!isVerreist())


2 Sachen sind dabei auffällig:

1. Erst hat der RT garnicht reagiert und plötzlich ging er dann (Verreist=ja). Jetzt habe ich den Dummy-Schalter auf "nein" gesetzt aber der RT macht munter weiter! Hat jmd ne Idee wieso das so ist?

2. Ich wollte die Einstellung für die "Wahrscheinlichkeiten" von 800/200 auf 500/500 umstellen und habe das einfach in die define-Zeile hinten drangehängt, jedoch macht der RT weiterhin 800/200! Warum ist das so?

Danke und viele Grüße
Michi240281
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 04 Januar 2014, 23:38:54
Zitat1. Erst hat der RT garnicht reagiert und plötzlich ging er dann (Verreist=ja). Jetzt habe ich den Dummy-Schalter auf "nein" gesetzt aber der RT macht munter weiter! Hat jmd ne Idee wieso das so ist?

wie sieht isVerreist() aus ?

Zitat2. Ich wollte die Einstellung für die "Wahrscheinlichkeiten" von 800/200 auf 500/500 umstellen und habe das einfach in die define-Zeile hinten drangehängt, jedoch macht der RT weiterhin 800/200! Warum ist das so?

500/500 muss als attribut definiert werden. Siehe FHEM Reference. Vielleicht mal verbose 5 einschalten - dann kommen debug Informationen.
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 05 Januar 2014, 01:18:43
"Verreist" zeigt den Wert "nein", oder meinst du was anderes?

Wie müsste der Code dann dafür aussehen? Ich habe in anderen Beiträgen gelesen, dass man einfach das 800/200 in der Define Zeile hinten dranhängt. Ist das nicht mehr so?

Das hier hast du sogar geschrieben:

define ZufallsTimerTisch      RandomTimer  *{sunset_abs("REAL")} LampeTisch Verreist 22:00 480 800/100
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 05 Januar 2014, 01:37:29
nur so:
define ZufallsTimerTisch      RandomTimer  *{sunset_abs())} StehlampeTisch +03:30:00 480

Die musst doch irgendwie/-wo die Funktion isVerreist() hinterlegt haben.
so vielleicht:

sub isVerreist       () { return(YesNo("Verreist"));}
#
#
#
sub YesNo ($) {

  my ($dummy) = @_;
  my $state = ReadingsVal($dummy, "state", "nein");
  return (   ($state eq "nein") ? 0:1    );
}


ZitatWie müsste der Code dann dafür aussehen? Ich habe in anderen Beiträgen gelesen, dass man einfach das 800/200 in der Define Zeile hinten dranhängt. Ist das nicht mehr so?

Das hier hast du sogar geschrieben:

define ZufallsTimerTisch      RandomTimer  *{sunset_abs("REAL")} LampeTisch Verreist 22:00 480 800/100
das ist alt - sieh dir die reference an. Dort gibt s die Variante nicht mehr.
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 05 Januar 2014, 01:57:38
Zitat von: Dietmar63 am 05 Januar 2014, 01:37:29
nur so:
define ZufallsTimerTisch      RandomTimer  *{sunset_abs())} StehlampeTisch +03:30:00 480

Die musst doch irgendwie/-wo die Funktion isVerreist() hinterlegt haben.
so vielleicht:

sub isVerreist       () { return(YesNo("Verreist"));}
#
#
#
sub YesNo ($) {

  my ($dummy) = @_;
  my $state = ReadingsVal($dummy, "state", "nein");
  return (   ($state eq "nein") ? 0:1    );
}

das ist alt - sieh dir die reference an. Dort gibt s die Variante nicht mehr.

Ach das meinst du!

Ich habe garnichts gemacht. Sind diese Sachen nicht in den Modulen hinterlegt? Ich habe die aktuellste Version von FHEM drauf. Steht das nicht in dem 99_Utils.pm? Oder im 98_Random Timer?
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 05 Januar 2014, 08:56:30
Kann es ja nicht weil es deine eigene Erweiterung / Anpassung ist.
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 05 Januar 2014, 16:29:47
Also ich habe jetzt folgendes getan:

Folgenden Code habe ich in die fhem.cfg geschrieben:


#Wohnzimmerbeleuchtung zufällig ein/aus bei Abwesenheit (aktivieren über dummy Schalter "Verreist")
define Verreist dummy
attr Verreist webCmd ja:nein
define ZufallsTimerWohnzimmer RandomTimer *11:00:00 Alle 20:30:00 180
attr ZufallsTimerWohnzimmer disableCond (!isVerreist())


In die 99_Utils-pm Datei habe ich dann folgendes eingefügt:

sub isVerreist       () { return(YesNo("Verreist"));}
#
#
#
sub YesNo ($) {

  my ($dummy) = @_;
  my $state = ReadingsVal($dummy, "state", "nein");
  return (   ($state eq "nein") ? 0:1    );
}


Soweit funktioniert das ganze auch, allerdings gibt es folgendes Problem:

Die Änderung der Schalterstellung "Verreist" (ja oder nein) bekommt FHEM nur mit, wenn ich die fhem.cfg speichere. Kann mir bitte jmd sagen, wo das Problem liegen könnte?

Zur Verdeutlichung: ZufallsTimerWohnzimmer zeigt im FHEMWEB "11:00", also die nächste Startzeit an. Schalte ich nun über den Dummyschalter "Verreist" auf "ja", steht der ZufallstimerWohnzimmer weiterhin auf "11:00". Erst wenn ich nun auf Edit files gehe und die fhem.cfg (ohne sie zu ändern) abspeicher, geht der ZufallsTimerWohnzimmer auf die leuchtende Lampe und die entsprechenden Geräte gehen an. Genauso beim Schalten auf "nein", dann bleibt der Timer weiterhin aktiv, erst wenn ich die fhem.cfg speicher (wie gesagt, ich ändere in dem Moment nix), geht der Timer wieder zurück auf "11:00" und die Geräte schalten sich ab.

Jmd ne Idee und wäre so freundlich mir zu helfen?

Vielen Dank!!
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 05 Januar 2014, 19:28:41
ZitatDie Änderung der Schalterstellung "Verreist" (ja oder nein) bekommt FHEM nur mit, wenn ich die fhem.cfg speichere. Kann mir bitte jmd sagen, wo das Problem liegen könnte?

Das ist im Moment so beabsichtigt, bzw. ich habe mir bisher darüber noch keine genauen Gedanken gemacht. Ein RT startet nicht automatisch wenn man das dummy ändert. Es gibt keine Verbindung zwischen dummy und RT - müßte man durch ein notify nachrüsten, man kann im Moment aber noch keinen RT explizit wecken, wäre aber machbar. Wenn du die fhem.cfg  speichst, werden die RT gelöscht und neu angelegt, dann merken sie, dass sie laufen müßten und beginnen zu arbeiten.

ZitatZur Verdeutlichung: ZufallsTimerWohnzimmer zeigt im FHEMWEB "11:00", also die nächste Startzeit an. Schalte ich nun über den Dummyschalter "Verreist" auf "ja", steht der ZufallstimerWohnzimmer weiterhin auf "11:00". Erst wenn ich nun auf Edit files gehe und die fhem.cfg (ohne sie zu ändern) abspeicher, geht der ZufallsTimerWohnzimmer auf die leuchtende Lampe und die entsprechenden Geräte gehen an.

wie oben

ZitatGenauso beim Schalten auf "nein", dann bleibt der Timer weiterhin aktiv, erst wenn ich die fhem.cfg speicher (wie gesagt, ich ändere in dem Moment nix), geht der Timer wieder zurück auf "11:00" und die Geräte schalten sich ab.

Er bleibt aktiv, das ist richtig. Wenn du lange genug wartest, erkennt der RT beim nächsten Schaltvorgang, dass das dummy auf nein steht und der RT wird geschlossen.

Ich empfehle dir verbose 5 für deine RT! Hast du verbose schon einmal eingeschaltet und dir die debuging Informationen angesehen?
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 05 Januar 2014, 20:15:37
Zitat von: Dietmar63 am 05 Januar 2014, 19:28:41
Das ist im Moment so beabsichtigt, bzw. ich habe mir bisher darüber noch keine genauen Gedanken gemacht. Ein RT startet nicht automatisch wenn man das dummy ändert. Es gibt keine Verbindung zwischen dummy und RT - müßte man durch ein notify nachrüsten, man kann im Moment aber noch keinen RT explizit wecken, wäre aber machbar. Wenn du die fhem.cfg  speichst, werden die RT gelöscht und neu angelegt, dann merken sie, dass sie laufen müßten und beginnen zu arbeiten.

wie oben

Er bleibt aktiv, das ist richtig. Wenn du lange genug wartest, erkennt der RT beim nächsten Schaltvorgang, dass das dummy auf nein steht und der RT wird geschlossen.

Ich empfehle dir verbose 5 für deine RT! Hast du verbose schon einmal eingeschaltet und dir die debuging Informationen angesehen?

ACHSOOOOOO! Dann habe ich das wohl falsch verstanden! Ich dachte der Dummy-Schalter und der RT sind miteinander verknüpft! Ich hätte nämlich das "Verreist" in "Abwesend" umbenannt und dann könnte ich jederzeit, auch von unterwegs per App den Schalter auf ja setzen und der RT würde dann beginnen eine Anwesenheit zu simulieren!

Wie müsste man das denn mit notify erweitern? Bin wie gesagt noch ganz am Anfang.  :'(

Hatte ich zwischendurch mal auf 5 stehen, ja, aber zum einen hat der mir in kurzer Zeit das logfile zugemüllt und zum anderen versteh ich da ja eh nur Bahnhof!

Da fällt mir noch was anderes ein: muss/sollte bzw. wie kann man denn das logfile "leeren", FHEM läuft bei mir jetzt knapp 2 Wochen und ich muss jetzt schon ewig runterscrollen, um die aktuellsten logfile Einträge anzuschauen!
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 05 Januar 2014, 20:54:51
ZitatACHSOOOOOO! Dann habe ich das wohl falsch verstanden! Ich dachte der Dummy-Schalter und der RT sind miteinander verknüpft! Ich hätte nämlich das "Verreist" in "Abwesend" umbenannt und dann könnte ich jederzeit, auch von unterwegs per App den Schalter auf ja setzen und der RT würde dann beginnen eine Anwesenheit zu simulieren!
Das funktioniert schon. Du mußt nur vor dem Einschaltzeitpunkt des RT das dummy eingestellt haben.

ZitatWie müsste man das denn mit notify erweitern? Bin wie gesagt noch ganz am Anfang. 
Ich müßte zunächst etwas am Modul RT ändern.

ZitatHatte ich zwischendurch mal auf 5 stehen, ja, aber zum einen hat der mir in kurzer Zeit das logfile zugemüllt und zum anderen versteh ich da ja eh nur Bahnhof!
Das log läuft nur dann voll wenn du timeToSwitch kurz wählst. Ein guter Wert ist 500. Zum Test ist natürlich ein kleinerer Wert besser.

ZitatDa fällt mir noch was anderes ein: muss/sollte bzw. wie kann man denn das logfile "leeren", FHEM läuft bei mir jetzt knapp 2 Wochen und ich muss jetzt schon ewig runterscrollen, um die aktuellsten logfile Einträge anzuschauen!
Würde ich machen - bei mir passiert das jeden Abend automatisch.
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 05 Januar 2014, 21:32:49
Zitat von: Dietmar63 am 05 Januar 2014, 20:54:51
Das funktioniert schon. Du mußt nur vor dem Einschaltzeitpunkt des RT das dummy eingestellt haben.
Ich müßte zunächst etwas am Modul RT ändern.
Das log läuft nur dann voll wenn du timeToSwitch kurz wählst. Ein guter Wert ist 500. Zum Test ist natürlich ein kleinerer Wert besser.
Würde ich machen - bei mir passiert das jeden Abend automatisch.

Ahso, alles klar, hab's jetzt gecheckt! ;)

Zum Startzeitpunkt des RT wird auf die Schalterstellung geguckt und entsprechend wird der RT dann aktiviert oder eben nicht! Korrekt?

Würdest du mir verraten, wie man

a.) das logfile manuell leert und
b.) das von dir erwähnte automatische Leeren 1x tägl. programmiert?

Besten Dank!
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 05 Januar 2014, 23:12:21
ZitatZum Startzeitpunkt des RT wird auf die Schalterstellung geguckt und entsprechend wird der RT dann aktiviert oder eben nicht! Korrekt?
ja

Würdest du mir verraten, wie man

Zitata.) das logfile manuell leert und
ich habe einen Zugang per laptop und kann die Datei fhem**********.log, wie auch immer sie bei dir heißt, einlesen, Zeilen löschen und wieder speichern. Viele hier im Forum haben die Definition so eingerichtet, dass jeden Monat ein neues Logfile angelegt wird. Ich mache das nicht so. Ich habe das file einfach fhem.log genannt. Alles was älter als zwei Wochen ist, ist nicht mehr interessant. Wenn du einen Zugang einrichten willst, kommt es ganz darauf an, ob die mit linux oder window darauf zugreifen willst - google hilft dir je nach Vorliebe weiter. Die fhem.cfg editiere ich auf dem gleichen Wege. Das hat für mich den Vorteil, dass die Definitionen nicht zufällig im fhem.cfg file gespeichert werden.

fhem.cfg:
attr   global logfile         ./log/fhem.log

b.) das von dir erwähnte automatische Leeren 1x tägl. programmiert?
in 99_Utils:

#
sub stripLogs() {

    opendir (DIR, "./log") or die "Can't open dir: './log'.\nReason: $!";
    my @ls = readdir(DIR);
    closedir (DIR);

    my $files = "strip";

    FILE: foreach my $File (@ls) {
#      Abbruch wenn Pseudodirectorys enthalten sind
       next FILE if $File eq '.' || $File eq '..';

       if ($File =~ /.log/) {
          $files = $files . " " . $File;
          stripFile( "./log/" . $File);
       }
    }
    Log 2, "$files";
}
#
#
#
sub stripFile($)
{
    my ($datei) = @_;

    my $res = `tail -n1000 $datei >/tmp/tmp.log`;
    $res = `cat /tmp/tmp.log >$datei`;

}


in fhem.cfg:

define StripLogs               at  *03:15:00 { stripLogs();;        "" }

Achtung, es werden alle Log-Files im log-Verzeichnis auf 1000 Zeilen eingekürzt. Wenn du in Perl fit bist, kannst du die obigen Funktionen deinen Bedürfnissen anpassen. Perl solltest du dir allerdings aneignen - dann mach fhem bald sehr viel Spass.

Ach übrigens, es ist besser ein weiteres 99_myUtils anzulegen, und die eigenen Funktionen dort abzulegen. 99_Utils geht zwar auch, hat aber den Nachteil, dass das file bei einem update ggf. überschrieben wird.
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 08 Januar 2014, 22:49:20
@ Dietmar: Vielen Dank für deine Hilfe! Ich werd mir mal überlegen, wie ich das mit den logs machen soll! Scheinbar ist das bei mir so voreingestellt, dass die logs monatlich angelegt werden! Werd mal schauen, ob mir das so gefällt oder ob ich eher deine Lösung verwende!

Habe noch eine andere Frage:

Habe jetzt die "isVereist" Funktion (Modul?) (umbenannt in "Abwesend") in eine 99_myUtils.pm Datei gepackt und diese gespeichert. Bei "Edit files" taucht diese nun auf. Heute hat der RT dann aber garnicht funktioniert. Muss ich noch an irgendeiner Stelle auf die 99_myUtils.pm verweisen oder macht FHEM das automatisch? Kann mir nicht erklären, warum der RT heute nicht geschaltet hat. Mein Code für den RT sieht jetzt so aus:

fhem.cfg:

#Wohnzimmerbeleuchtung zufällig ein/aus bei Abwesenheit (aktivieren über dummy Schalter "Abwesend")
define Abwesend dummy
attr Abwesend webCmd ja:nein
define ZufallsTimerWohnzimmer RandomTimer *{sunset("REAL",0,"15:00","18:10")}  Vase 18:30:00 500
attr ZufallsTimerWohnzimmer disableCond (!isAbwesend())
#attr ZufallsTimerWohnzimmer switchmode 500/500


Und in der 99_myUtils.pm:

#####Abwesenheit#####

sub isAbwesend       () { return(YesNo("Abwesend"));}
#
#
#
sub YesNo ($) {

  my ($dummy) = @_;
  my $state = ReadingsVal($dummy, "state", "nein");
  return (   ($state eq "nein") ? 0:1    );
}

=end html
=cut


Ist da irgendwo was falsch?
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 09 Januar 2014, 01:37:36
das kann man dem Code oft nicht ansehen.
versuch es mal mit logging:


sub YesNo ($) {

  my ($dummy) = @_;
  my $state = ReadingsVal($dummy, "state", "nein");
  Log 3, "dummy------------>$dummy";
  Log 3, "state------------>$state";
  return (   ($state eq "nein") ? 0:1    );
}


Zu Testzwecken pflege ich dann immer in der Oberfläche Test-RT ein, die sofort starten und kurze Schaltzyklen haben:
define timer      RandomTimer  +00:00:03 Zirkulation 23:00:00  30

Anstelle von 23:00:00 kann man sogar definieren, dass der RT sofort startet und 15 Minuten laufen soll:
define timer      RandomTimer  +00:00:03 Zirkulation {strftime("%H:%M:%S",localtime(time()+15*60))}  30
mit delete timer wirst du ihn schnell wieder los.

Ich habe den Code von fhem.pl so geändert, dass ich zu jedem Gerät eine Delete-button habe:

Aenderungen an FHEM
----------;
--------------;del-Icon basteln
sub
FW_showRoom()
...
...
...
#      FW_pO "</td>";
       $icon = FW_makeImage('del') . "&nbsp;";
       FW_pO "<td><a href='/fhem?cmd=delete%20$devName'><div class='Del'>$icon</div></a></td>";
    }
    FW_pO "</table>";
    FW_pO "</td></tr>";
  }
  FW_pO "</table><br>";



Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 09 Januar 2014, 10:54:18
Vielen Dank!

Ok, werde ich mal probieren!

Kannst du noch was zu meiner Frage sagen?:

Muss die 99_myUtils.pm noch irgendwie eingebunden werden oder sucht sich FHEM das entsprechend alles zusammen? Also der findet die Module, die in der 99_myUtils.pm stehen, auch, ohne dass man darauf irgendwie/-wo verweisen muss?

Danke!!!
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 09 Januar 2014, 11:39:28
ja, alle Module, die mit 99 beginnen werden automatisch beim Start geladen.
Wenn du Änderungen vornimmst, egal an welchem Modul musst du neu starten(umständlich) oder mit reload <modulname_ohne_.pm> nachladen.
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 09 Januar 2014, 13:18:47
Ah ok!

Update: Der RT wurde erneut nicht gestartet! Ein "reload 99_myUtils" brachte im log die Rückmeldung: Error: reload 99_myUtils; module deactivated!!!!!!!

Woran könnte das denn schon wieder liegen?
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 09 Januar 2014, 21:27:36
Habs jetzt hinbekommen, dass die 99_myUtils eingeladen wird! Da fehlte wohl noch was an Inhalt!

Der RT funktioniert nun auch, allerdings nur mit folgendem Code:

define Zufall_Vase RandomTimer *{sunset_abs(-4000)} Vase 18:30 500
attr Zufall_Vase disableCond (!isAbwesend())


Mit folgendem Code funktioniert er nicht! Ich verstehe nicht warum! Unter "Everything" wird er genauso so mit Startzeit angezeigt wie bei der ersten Variante, allerdings startet er nicht, er macht also die Vase nicht an! Hat jmd ne Idee, woran das liegen könnte?

define Zufall_Vase RandomTimer *{sunset("CIVIL",0,"15:00","18:00")} Vase 18:30 500
attr Zufall_Vase disableCond (!isAbwesend())


Also mit der sunset_abs Funktion funzt der RT, aber mit sunset(CIVIL....) nicht!
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 11 Januar 2014, 11:33:42
Zitat von: Michi240281 am 09 Januar 2014, 21:27:36
Habs jetzt hinbekommen, dass die 99_myUtils eingeladen wird! Da fehlte wohl noch was an Inhalt!

Der RT funktioniert nun auch, allerdings nur mit folgendem Code:

define Zufall_Vase RandomTimer *{sunset_abs(-4000)} Vase 18:30 500
attr Zufall_Vase disableCond (!isAbwesend())


Mit folgendem Code funktioniert er nicht! Ich verstehe nicht warum! Unter "Everything" wird er genauso so mit Startzeit angezeigt wie bei der ersten Variante, allerdings startet er nicht, er macht also die Vase nicht an! Hat jmd ne Idee, woran das liegen könnte?

define Zufall_Vase RandomTimer *{sunset("CIVIL",0,"15:00","18:00")} Vase 18:30 500
attr Zufall_Vase disableCond (!isAbwesend())


Also mit der sunset_abs Funktion funzt der RT, aber mit sunset(CIVIL....) nicht!

Jemand ne Idee? Würde den RT nämlich lieber mit der 2. Variante verwenden!
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 11 Januar 2014, 11:44:49
http://forum.fhem.de/index.php?topic=14010.msg124382#msg124382 (http://forum.fhem.de/index.php?topic=14010.msg124382#msg124382)
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 11 Januar 2014, 16:36:43
Zitat von: Dietmar63 am 11 Januar 2014, 11:44:49
http://forum.fhem.de/index.php?topic=14010.msg124382#msg124382 (http://forum.fhem.de/index.php?topic=14010.msg124382#msg124382)

Bei mir geht der RT mit sunset(CIVIL...) auch am nächsten Tag nicht! Die Startzeit steht zwar da, genau wie bei sunset_abs, aber der RT wird nicht aktiv, sprich er schaltet die Geräte nicht ein.
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 11 Januar 2014, 17:27:23
Wenn du {sunset("CIVIL",0,"15:00","18:00")} auf der Oberfläche von fhem eingibst kommt zur Zeit 41:12:38 dabei heraus. RT interpretiert die Ergebnisse als abolute Zeiten.

Nachts so gegen 0:30 Uhr werden die ss/sr  des aktuellen Tages ermittelt.

verbose 5 - dann bekommst du logging.
Titel: Antw:Frage zu Random Timer
Beitrag von: Harald am 11 Januar 2014, 18:08:28
Hallo Michi240281,

wie Du in dem von Dietmar angegebenen Link siehst, habe ich damit auch Probleme gehabt.

Ich verwende *{sunset_abs("HORIZON=3",0,"15:00","21:00")}, so wie Dietmar es mir empfohlen hat und es klappt prima.

Wenn Du sunset(.... schreibst und FHEM wird durch irgend etwas neu gestartet (z.B. Abspeichern der fhem.cfg, reload .... o.ä.), wird timespec_start + 24 Std. berechnet und RT nimmt dann dies als Startzeit. Schreibst Du sunset_abs(.... werden die 24 Std. nicht hinzugezählt und die vorher definierte Startzeit bleibt. Bei der Verwendung von sunset(... scheint es nur so, als ob RT nicht funktionierte. Der Startpunkt wird nur ggf. verschoben. Sieh Dir mal in der commandref die Beschreibung zu SUNRISE_EL an (auch wenn's in englisch ist). Dort habe ich auch nach dem Hinweis von Dietmar die Erklärung gefunden.
Seit dem klappt's prima mit dem RT  ;)

Viele Grüße und viel Erfolg

Harald
Titel: Antw:Frage zu Random Timer
Beitrag von: Harald am 11 Januar 2014, 18:37:56
Hallo Michi240281,

in meiner fhem.cfg steht##############################################################################
#
#                 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 Normal dummy
attr Normal room ELRO
attr Normal 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_abs("HORIZON=+2",0,"15:00","22:00")} Dose1 23:10:00 900
attr Dose1Wohn disableCond (!isVerreist())
attr Dose1Wohn room ELRO
attr Dose1Wohn switchmode 999/000
attr Dose1Wohn verbose 5

und in der 99_myUtils.pm
sub isUrlaub         () { return(YesNo("Urlaub"));}
sub isVerreist       () { return(YesNo("Verreist"));}
sub isNormal         () { return(YesNo("Normal"));}

sub YesNo ($) {

  my ($dummy) = @_;
  my $state = ReadingsVal($dummy, "state", "nein");
  if ($state eq "nein") {
    return 0;
  }
  return 1;
}


Und hier ein Versuch, Deine Frage aus #14 zu beantworten:
Die Anweisung in der fhem.cfg "isVerreist()" ruft das in der 99_myUtils.pm definierte Unterprogramm "sub isVerreist()" auf. Solche Anweisungen rufen immer irgend welche Unterprogramme in irgendwelchen Modulen oder in der fhem.pl auf. Diese Unterprogramme ermitteln bestimmte Werte, die bei der Rückkehr ins Hauptprogramm (in diesem Falle fhem.cfg) zur Verfügung stehen und ausgewertet werden können, hier 0 (return 0) bzw. 1 (return 1).
Diese Unterprogramme erkennt FHEM beim Start (99er Module) oder beim Aufruf der entsprechenden Funktion. Du brauchst also in Deiner fhem.cfg nichts zusätzliches veranlassen.

Das ist nur eine sehr vereinfachte Beschreibung und ich hoffe, dass ich Dir nicht falsches geschrieben habe. Falls doch, möge bitte ein Wissender das richtig stellen.

Viele Grüße

Harald
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 12 Januar 2014, 15:14:14
Zitat von: Harald am 11 Januar 2014, 18:08:28
Hallo Michi240281,

wie Du in dem von Dietmar angegebenen Link siehst, habe ich damit auch Probleme gehabt.

Ich verwende *{sunset_abs("HORIZON=3",0,"15:00","21:00")}, so wie Dietmar es mir empfohlen hat und es klappt prima.

Wenn Du sunset(.... schreibst und FHEM wird durch irgend etwas neu gestartet (z.B. Abspeichern der fhem.cfg, reload .... o.ä.), wird timespec_start + 24 Std. berechnet und RT nimmt dann dies als Startzeit. Schreibst Du sunset_abs(.... werden die 24 Std. nicht hinzugezählt und die vorher definierte Startzeit bleibt. Bei der Verwendung von sunset(... scheint es nur so, als ob RT nicht funktionierte. Der Startpunkt wird nur ggf. verschoben. Sieh Dir mal in der commandref die Beschreibung zu SUNRISE_EL an (auch wenn's in englisch ist). Dort habe ich auch nach dem Hinweis von Dietmar die Erklärung gefunden.
Seit dem klappt's prima mit dem RT  ;)

Viele Grüße und viel Erfolg

Harald

Hallo Harald,

vielen Dank für deine Hinweise.

Bei mir ist es nur leider so, dass der RT mit der sunrise(CIVIL.....) Funktion die Startzeit zwar berechnet hat (wenn das auch um +24Std verschoben ist), jedoch hat der RT auch am darauffolgenden Tag einfach nicht die Geräte eingeschaltet.

Ob ich also sunrise_abs oder sunrise(CIVIL....) verwende, die Startzeit wird in beiden Fällen angezeigt, nur gehen die verlinkten Geräte nur mit sunrise_abs auch an.

Hast du eine Idee, woran das liegen könnte?
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 12 Januar 2014, 15:15:52
Zitat von: Harald am 11 Januar 2014, 18:37:56
Hallo Michi240281,

in meiner fhem.cfg steht##############################################################################
#
#                 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 Normal dummy
attr Normal room ELRO
attr Normal 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_abs("HORIZON=+2",0,"15:00","22:00")} Dose1 23:10:00 900
attr Dose1Wohn disableCond (!isVerreist())
attr Dose1Wohn room ELRO
attr Dose1Wohn switchmode 999/000
attr Dose1Wohn verbose 5

und in der 99_myUtils.pm
sub isUrlaub         () { return(YesNo("Urlaub"));}
sub isVerreist       () { return(YesNo("Verreist"));}
sub isNormal         () { return(YesNo("Normal"));}

sub YesNo ($) {

  my ($dummy) = @_;
  my $state = ReadingsVal($dummy, "state", "nein");
  if ($state eq "nein") {
    return 0;
  }
  return 1;
}


Und hier ein Versuch, Deine Frage aus #14 zu beantworten:
Die Anweisung in der fhem.cfg "isVerreist()" ruft das in der 99_myUtils.pm definierte Unterprogramm "sub isVerreist()" auf. Solche Anweisungen rufen immer irgend welche Unterprogramme in irgendwelchen Modulen oder in der fhem.pl auf. Diese Unterprogramme ermitteln bestimmte Werte, die bei der Rückkehr ins Hauptprogramm (in diesem Falle fhem.cfg) zur Verfügung stehen und ausgewertet werden können, hier 0 (return 0) bzw. 1 (return 1).
Diese Unterprogramme erkennt FHEM beim Start (99er Module) oder beim Aufruf der entsprechenden Funktion. Du brauchst also in Deiner fhem.cfg nichts zusätzliches veranlassen.

Das ist nur eine sehr vereinfachte Beschreibung und ich hoffe, dass ich Dir nicht falsches geschrieben habe. Falls doch, möge bitte ein Wissender das richtig stellen.

Viele Grüße

Harald

Vielen Dank auch für diese Infos! Gut zu wissen!  :)
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 12 Januar 2014, 16:58:42
@ Harald:

Ich habe es mal mit "Horizon" probiert, scheint gut zu funktionieren! Danke dafür!  :)

Eine Frage hätte ich da noch (hab auch noch garnicht ausprobiert was passieren würde): Wenn der RT abgelaufen ist, sind die entsprechenden Geräte dann "on" oder off"? Falls die auf "Off" stehen, kann man das irgendwie ändern, sodass die Geräte "on" bleiben?
Titel: Antw:Frage zu Random Timer
Beitrag von: Harald am 12 Januar 2014, 18:29:52
Hmm, da bin ich mir nicht ganz sicher. Das habe ich noch nicht versucht. Bei mir sind die Geräte nach Ablauf der Zeit aus und das möchte ich auch so. Probiere es doch einfach aus.

Tut mir leid, das ich Dir da nicht viel weiter helfen kann.

Viele Grüße

Harald
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 12 Januar 2014, 19:12:44
Hast Recht, gerade getestet! Nach Ablauf sind die Geräte aus!

Ich meine ich hätte irgendwo gelesen, dass man das auch ändern kann! Kann da vllt jmd weiterhelfen?
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 12 Januar 2014, 19:38:49
ZitatFalls die auf "Off" stehen, kann man das irgendwie ändern
nein - kann man im Moment nicht. Aber du kannst ein notify auf den RT definierten:

define AfterRTtimeOn            notify randonTimer:off                          {fhem("set Geraet on")}
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 12 Januar 2014, 20:14:24
ich bastele ein neues Attibut keepDeviceAlive.
ich teste noch ein wenig  - dann checke ich es ein.
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 12 Januar 2014, 20:17:17
Zitat von: Dietmar63 am 12 Januar 2014, 20:14:24
ich bastele ein neues Attibut keepDeviceAlive.
ich teste noch ein wenig  - dann checke ich es ein.

Wie cool ist das denn!!!! Vielen Dank!!!!! :)
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 18 Januar 2014, 19:34:12
Zitat von: Dietmar63 am 12 Januar 2014, 20:14:24
ich bastele ein neues Attibut keepDeviceAlive.
ich teste noch ein wenig  - dann checke ich es ein.

Hi Dietmar,

gibt's News zu dem neuen Attribut?
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 18 Januar 2014, 19:51:30
Schon eingeckeckt
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 18 Januar 2014, 22:58:40
Zitat von: Dietmar63 am 18 Januar 2014, 19:51:30
Schon eingeckeckt

Ahso ok!
D.h. Update durchführen und dann ist es verfügbar?

Wie muss man das Attribut dann einbinden?

attr <device> keepalive 1

???
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 19 Januar 2014, 08:20:08
Ja, korrekt
Titel: Antw:Frage zu Random Timer
Beitrag von: Harald am 19 Januar 2014, 10:41:57
Und was macht keepalive genau? Ich habe gerade ein Update gemacht und in die Commandref gesehen. Dort ich dieses Attribut noch nicht beschrieben. 98_RandomTimer.pm sollte doch heute schon per Update herunter zu laden sein, oder?

Noch eine andere Frage: Kann man für den Start des Timers auch andere Events benutzen, wie z.B. Klingel:on, isday o.ä und diese verknüpfen? z.B.:

define Aussenlicht RandomTimer *{ (Klingel:on && !isday)} Lampe +00:05:00 300

Ich möchte nämlich eine Außenlampe Abends und Nachts nach betätigen der Klingel für eine bestimme Zeit einschalten.

Viele Grüße

Harald
Titel: Antw:Frage zu Random Timer
Beitrag von: Dietmar63 am 19 Januar 2014, 18:17:08
Die Dokumentsation von RT hatte an der Stelle noch eine kleine Ungenauigkeit: siehe Bild
keepDeviceAlive beläßt das zu schaltende Gerät nach der eingestellten Zeit an.

so wird es nicht gehen:
define Aussenlicht RandomTimer *{ (Klingel:on && !isday)} Lampe +00:05:00 300
aber so:
define AussenlichtAn notify      Klingel:on                { if(!isday()) {fhem ("set Lampe on-for-timer 300")}}
RT soll ja zufällig an-/abschalten.
Titel: Antw:Frage zu Random Timer
Beitrag von: Michi240281 am 21 Januar 2014, 21:58:43
Ich habe noch eine generelle Frage zum RT:

Ich habe jetzt 2 RT erstellt, die beide gleichzeitig einschalten (über sunset), jedoch 2 unterschiedliche Geräte schalten, und zwar so:

define Zufall_Abwesend_1 RandomTimer *{sunset_abs("HORIZON=0",0,"16:00","17:30")} Vase 18:30 500
attr Zufall_Abwesend_1 disableCond (!isAbwesend())
attr Zufall_Abwesend_1 room Wohnzimmer
attr Zufall_Abwesend_1 keepDeviceAlive

define Zufall_Abwesend_2 RandomTimer *{sunset_abs("HORIZON=0",0,"16:00","17:30")} Sideboard 18:30 500
attr Zufall_Abwesend_2 disableCond (!isAbwesend())
attr Zufall_Abwesend_2 room Wohnzimmer
attr Zufall_Abwesend_2 keepDeviceAlive


Jetzt ist es ja so, dass die Ein- und Ausschaltzeitpunkte ja mit 10% variieren. Bekomme ich dann also das gewünschte Verhalten, dass "Vase" und "Sideboard" unterschiedlich geschaltet werden?