RandomTimer - neues Modul

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

Vorheriges Thema - Nächstes Thema

ErdBaer

Danke dir!

Ich hab auch noch etwas getestet - bei normalen Aktoren (bei mir HM) funktioniert stateFormat ohne Probleme, bei Dummys dagegen bleibt das Ganze ohne Wirkung.
FritzBox 7390 mit FHEM-Community Image, HMLan-Adapter
AVM: Dect200, 546E
HM: Funk-Zwischenstecker, Funk-Bewegungsmelder, Funk-Tür-/Fensterkontakte

Dietmar63

bei meinem RT klappt es auf Anhieb:

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

ErdBaer

Gibt's doch nicht ... dann muss ich nachher noch mal ran ... testen   :-[

Was ist eigentlich der Hintergrund der Änderung? Ich fand die Anzeige von "Startzeit - an/aus - down" eigentlich ganz gut, da hatte man von "unterwegs" immer sofort die komplette Info, was daheim Licht-technisch passiert?!
FritzBox 7390 mit FHEM-Community Image, HMLan-Adapter
AVM: Dect200, 546E
HM: Funk-Zwischenstecker, Funk-Bewegungsmelder, Funk-Tür-/Fensterkontakte

Dietmar63

so wie es jetzt ist, ist der timer on, wenn er aktiv ist. In der alten Version war der Zustand immer so wie das zu schaltende Gerät. Das fand ich nicht mehr richtig.

Mit stateFormat läßt sich dieses Verhalten verändern.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

ErdBaer

Sooo ... ich bin ein Stück weitergekommen:

Wenn ich stateFormat über Web-UI definiere, funktioniert die Anzeige von Datum und Zeit. Sobald ich aber die fhem.cfg editiere (egal an welcher Stelle) und sichere, springt die Anzeige wieder auf default zurück, obwohl der stateFormat-Eintrag noch vorhanden ist ... komisch.

FritzBox 7390 mit FHEM-Community Image, HMLan-Adapter
AVM: Dect200, 546E
HM: Funk-Zwischenstecker, Funk-Bewegungsmelder, Funk-Tür-/Fensterkontakte

basi

Hallo Dietmar,

Vielen Dank erstmal für dieses sehr nützliche Tool.
Mir ist allerdings aufgefallen, dass die Attribute "onCmd" und "offCmd" nur während der Laufzeit des Timers ausgewertet werden, leider jedoch nicht wenn dieser sich abschaltet :(. Hier wird m.E. nach stets das Standardkommando "off" verwendet.

Ein Beispiel:
Ich habe folgende RandomTimer Definition

define og_RTimerLichtDiele RandomTimer 19:04:00 og_LichtDiele +00:01:00 010
attr   og_RTimerLichtDiele         switchmode  500/100
attr   og_RTimerLichtDiele         disableCond (Value("wz_LichtAutoDecke" eq "0"))       
attr   og_RTimerLichtDiele onCmd   {fhem("set @ on g2")}
attr   og_RTimerLichtDiele offCmd  {fhem("set @ off g2")}

Während der Laufzeit werdeb die in den Attributen hinterlegten Kommandos verwendet, wie man aus dem Logfile entnehmen kann:

2014.08.27 19:04:18 4: [og_RTimerLichtDiele] command: {fhem("set og_LichtDiele on g2")}
2014.08.27 19:04:18 5: Cmd: >{fhem("set og_LichtDiele on g2")}<
2014.08.27 19:04:18 5: Cmd: >set og_LichtDiele on g2<
2014.08.27 19:04:18 2: EIB set og_LichtDiele on g2

Beim Terminieren des Timers findet die Ersetzung jedoch nicht statt:

2014.08.27 19:05:03 3: [og_RTimerLichtDiele] RandomTimer for og_LichtDiele going down
2014.08.27 19:05:03 5: Cmd: >set og_LichtDiele off<
2014.08.27 19:05:03 2: EIB set og_LichtDiele off


Ich meine dieses Verhalten auch in Deinem Code (Zeile 224-225) erkannt zu haben, bewege mich hier aber auf sehr dünnem Eis, da ich absoluter Perl Newbie bin:

sub RandomTimer_down($) {
   my ($hash) = @_;

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

M.E. ist hier "on" und "off" fest verdrahtet.

Meine Frage nun ist, ist dieses Verhalten so gewünscht? Falls nicht wäre es Klasse, wenn man die Down Subroutine in der Distribution auch dahingehend ändern könnte, dass die Attribut Kommandos verwendet werden.
Schon mal vielen Dank
basi

Dietmar63

da hast du verdammt recht.
werde ich ändern - werde aber noch  ein wenig über die Lösung nachdenken.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

basi

Hört sich super an ... dann freue ich mich schon auf das nächste Update, dass auch bei mir die Lichter ausgehen  ;).
basi

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

Dietmar63

@basi:

ich habe eine neue Version eingecheckt.
Kannst du bitte prüfen, ob dein Problem damit gelöst ist.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

basi

Hallo Dietmar,
funzt jetzt super. Auch an dieser Stelle nochmals vielen Dank fürs superschnelle debuggen.
Gruß
basi

eispeer

Hallo zusammen,

ich habe den Random Timer für das Schalten von 2 Zimmerlampen am Abend erfolgreich integriert. Vielen Dank für das Modul.
Dabei wird über das Attribut
attr Timer_WZ_Lampe_Sofa1_Abends disableCond (isAnybodyAtHome())
geprüft, ob jemand anwesend ist oder nicht.

Ich würde gerne morgens das gleiche tun, mit der Erweiterung, dass auf das Wochenende getestet wird.
Es soll der Timer also nicht starten, wenn jemand anwesend ist oder am Wochenende:
attr Timer_WZ_Lampe_Sofa1_Morgens disableCond (isAnybodyAtHome() || $we)
scheint bei mir allerdings ohne Wirkung.

Hat jemand eine Idee, wie ich beide kombinieren kann?
Besten Gruss,
Peer
Raspberry PI, CUL 433Mhz, CUL 868Mhz v3.4, HM-CC-RT-DN, HM-CFG-USB, ELRO IT

Dietmar63

Ich melde mich heute Abend dazu
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

#148
im Kontext der Abarbeitung des Funktionsaufrufs isAnybodyAtHome() steht die  Variable $we nicht zur Verfügung.
Perl erzeugt leider keine Fehlermeldung.

Du kannst $we  selbst in isAnybodyAtHome() ermitteln und auswerten:


   my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
   my $we = (($wday==0 || $wday==6) ? 1 : 0);
   if(!$we) {
     my $h2we = $attr{global}{holiday2we};
     $we = 1 if($h2we && $value{$h2we} && $value{$h2we} ne "none");
   }
...


ich kann das Modul wahrscheinlich noch verbessern, dann würdest du folgende Fehlermeldung bekommen:


Global symbol "$we" requires explicit package name at (eval 114) line 1.
2014.09.05 18:26:19 3: syntax error at (eval 114) line 1, near ") !"


Bevor ich das freischalte wird es aber noch etwas dauern.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

eispeer

Hallo Dietmar,

Vielen Dank für dein Support. Ich werde es morgen testen. 

Beste Grüße,
Peer
Raspberry PI, CUL 433Mhz, CUL 868Mhz v3.4, HM-CC-RT-DN, HM-CFG-USB, ELRO IT