RandomTimer - neues Modul

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

Vorheriges Thema - Nächstes Thema

eispeer

Hallo nochmal,

hat alles geklappt.

Vielen Dank,
Peer
Raspberry PI, CUL 433Mhz, CUL 868Mhz v3.4, HM-CC-RT-DN, HM-CFG-USB, ELRO IT

Dietmar63

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

habe  das Modul geändert und eingecheckt.
Jetzt sollte im Log eine Fehlermeldung erscheinen, wenn du so etwas codierst:

attr Timer_WZ_Lampe_Sofa1_Morgens disableCond (isAnybodyAtHome() || $we)
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Raven

Ich würde gerne verschiedene Lichtszenarien im Wohnzimmer (Deckenlicht, Wandleuchten, Stehlampen) i.V.m. dem RandomTimer schalten.
D.h. aktuell habe ich drei separate RandomTimer für Deckenlicht, Wandleuchten und Stehlampen und über eine Random-Funktion würde ich nun täglich
zufällig dann jeweils EINE DIESER DREI Lichtquelle schalten wollen. Durch das abwechselnde Einschalten von unterschiedlichen Lichtquellen während meiner Abwesenheit erhoffe ich mir noch ein höheres Abschreckungspotential....

Pseudo-Code:
my $Zufallszahl =int(rand(3));

IF $Zufallszahl= 1 then set RandomTimerDecke disable = 1 else disable = 0
IF $Zufallszahl= 2 then set RandomTimerWand disable = 1 else disable = 0
IF $Zufallszahl= 3 then set RandomTimerStehlampen disable = 1 else disable = 0


Soll ich statt disable eher das spezfische Attribut disableCond verwenden?
Stellt sich mir auch die Frage, wann der RandomTimer (und die disableCond) initialisiert werden.
D.h. muß ich die RandomTimer und die jeweilige disableCond vor Mitternacht setzen?

Oder gibt es evtl. einen anderen Lösungsansatz?

Danke vorab.
Proxmox-Prod/Dev: Homematic i.V.m. VCCU (HMLan, HM-MOD-RPI-PCB), Philips Hue, Viessmann (optolink)
Fritzbox 7590

Dietmar63

#153
Du könntest jeden Tag so gegen Mitternacht ein dummy mit der Zufallszahl füllen:
define xxx      at *00:01:00 {fhem ("set dummy " . int(rand(3)) )}
Erzeugt im dummy die Werte 0,1,2. Drei wird nicht gesetzt werden, weil int() abschneidet.
Dann würde ich 3 RT mit disableCond setzen:

define ZufallsTimer0      RandomTimer  *{sunset()} StehlampeTisch +02:30:00 480
attr   ZufallsTimer0      disableCond  (!(Value("dummy") == 0))

define ZufallsTimer1      RandomTimer  *{sunset()} StehlampeTisch +02:30:00 480
attr   ZufallsTimer1      disableCond  (!(Value("dummy") == 1))

define ZufallsTimer2      RandomTimer  *{sunset()} StehlampeTisch +02:30:00 480
attr   ZufallsTimer2      disableCond  (!(Value("dummy") == 2))


Beachte das ! vor der Valuefunktion.
Setze bei deinen Test bei allen RT das Attribut verbose auf 5. Dann bekommst du Infos angezeigt.
Die dummy-Abfragen werden zur Laufzeit/Schaltzeit berücksichtigt.

Der Code oben ist nicht getestet und muss auf deine Namen hin angepasst werden.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Raven

WUNDERBAR! Vielen Dank für den Denkanstoss bzgl. Dummy-Ansatz und disableCond.
Probiere ich aus!

Zitat von: Dietmar63 am 06 Oktober 2014, 20:46:14
Du könntest jeden Tag so gegen Mitternacht ein dummy mit der Zufallszahl füllen:
...
...
...
Proxmox-Prod/Dev: Homematic i.V.m. VCCU (HMLan, HM-MOD-RPI-PCB), Philips Hue, Viessmann (optolink)
Fritzbox 7590

fisch_fhem

Hallo,

der Zufallstimer sollte bei Anwesenheit deaktiviert sein. Geprüft wird das über Presence Funktion eines Mobiltelefons.
Nur leider sitze ich immer wieder im Dunkeln, selbst wenn ich zu Hause bin.

Erkennt jemand, was an der Abfrage zur disableCond falsch ist? Die Erkennung an sich klappt.

define Samsung_S3 PRESENCE fritzbox SGS3 60 180
attr Samsung_S3 devStateIcon present:status_available absent:status_away_2
attr Samsung_S3 event-on-change-reading state

define ZufallsTimerKugellampen RandomTimer *{sunset_abs()} Kugellampen 23:00:00 480
attr ZufallsTimerKugellampen disableCond (Value("Samsung_S3" eq "present"))


Besten Dank und viele Grüße

Norbert

Dietmar63

Rt schaltet automatisch an/aus wie die Zufallsfunktion einer Zeitschaltuhr.

Prüf bitte mal ob Presence bei dir die richtigen Anwesenheiten ermittelt. Richtig zuverlässig ist die Methode nicht bzw. P muss gut eingestellt 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

fisch_fhem

Hallo Dietmar,

eben getestet, die PRESENCE Funktion gibt den richtigen Wert aus. Muss ich den den Umweg über einen dummy Parameter gehen?

Dietmar63

was wird ausgegeben wenn du in der Oberfläche von fhem
{Value("Samsung_S3")}
eingibst?
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

fisch_fhem

der Wert wird mit "present" ausgegeben. Anwesenheit wird also richtig erkannt.

Dietmar63

setze mal bitte den verbose Wert auf 5. Vielleicht verstehen wir dann besser was passiert.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

fisch_fhem

das wird zum Thema Presence und RT gelogged:


2014.11.01 19:03:14 3: [ZufallsTimerKugellampen] starting RandomTimer on Kugellampen: 17:27:27(01) - 23:00:00(01)
2014.11.01 19:03:14 4: [ZufallsTimerKugellampen] Zustand:off sigma:800 random:821
2014.11.01 19:03:14 5: [ZufallsTimerKugellampen] removing Timer: ZufallsTimerKugellampen_Exec
2014.11.01 19:03:14 5: [ZufallsTimerKugellampen] setting  Timer: ZufallsTimerKugellampen_Exec 01.11.2014  19:11:07
2014.11.01 19:03:17 5: PRESENCE (Samsung_S3) - executing ctlmgr_ctl: /usr/bin/ctlmgr_ctl r landevice settings/landevice/count
2014.11.01 19:03:17 5: PRESENCE (Samsung_S3) - ctlmgr_ctl (getting device count) returned: 25
2014.11.01 19:03:17 5: PRESENCE (Samsung_S3) - executing ctlmgr_ctl: /usr/bin/ctlmgr_ctl r landevice settings/landevice0/name
2014.11.01 19:03:23 5: PRESENCE (Samsung_S3) - checking device number 11 (SGS3)
2014.11.01 19:03:23 5: PRESENCE (Samsung_S3) - executing ctlmgr_ctl: /usr/bin/ctlmgr_ctl r landevice settings/landevice11/active
2014.11.01 19:03:24 5: PRESENCE (Samsung_S3) - state for device number SGS3 is 1
2014.11.01 19:03:24 5: Cmd: >{PRESENCE_ProcessLocalScan('Samsung_S3|0|present|11')}<
2014.11.01 19:03:24 5: PRESENCE (Samsung_S3) - blocking scan result: Samsung_S3|0|present|11
2014.11.01 19:03:24 4: PRESENCE (Samsung_S3) - rescheduling next check in 180 seconds
2014.11.01 19:06:24 5: PRESENCE (Samsung_S3) - stopping timer
2014.11.01 19:06:24 5: PRESENCE (Samsung_S3) - starting blocking call for mode fritzbox
2014.11.01 19:06:24 5: PRESENCE_DoLocalFritzBoxScan: Samsung_S3|SGS3|0|0
2014.11.01 19:06:24 5: PRESENCE (Samsung_S3) - try checking Samsung_S3 as device SGS3 with cached number 11
2014.11.01 19:06:24 5: PRESENCE (Samsung_S3) - executing ctlmgr_ctl: /usr/bin/ctlmgr_ctl r landevice settings/landevice11/name
2014.11.01 19:06:24 5: PRESENCE (Samsung_S3) - checking state with cached number (11)
2014.11.01 19:06:24 5: PRESENCE (Samsung_S3) - executing ctlmgr_ctl: /usr/bin/ctlmgr_ctl r landevice settings/landevice11/active
2014.11.01 19:06:25 5: PRESENCE (Samsung_S3) - ctlmgr_ctl (cached: 11) returned: 1
2014.11.01 19:06:25 4: Connection accepted from telnet:127.0.0.1:46156
2014.11.01 19:06:25 5: Cmd: >{PRESENCE_ProcessLocalScan('Samsung_S3|0|present|11')}<
2014.11.01 19:06:25 5: PRESENCE (Samsung_S3) - blocking scan result: Samsung_S3|0|present|11
2014.11.01 19:06:25 4: PRESENCE (Samsung_S3) - rescheduling next check in 180 seconds
2014.11.01 19:11:07 4: [ZufallsTimerKugellampen] Zustand:off sigma:800 random:892
2014.11.01 19:11:07 5: [ZufallsTimerKugellampen] removing Timer: ZufallsTimerKugellampen_Exec
2014.11.01 19:11:07 5: [ZufallsTimerKugellampen] setting  Timer: ZufallsTimerKugellampen_Exec 01.11.2014  19:18:51


Müsste es für den disableCond eine Statusmeldung geben?

Dietmar63

#162
jetzt habe ich den Fehler gefunden. so ist es richtig:
attr ZufallsTimerKugellampen disableCond (Value("Samsung_S3") eq "present")

Bei deiner Version wird false an die Funktion Value() übergeben, und das ist kein Gerät.
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

Hast du die Woche neue Variante schon ausprobiert?
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

fisch_fhem

Perfekt, da war der Syntaxfehler! Bekomme jetzt im log:
2014.11.03 17:33:39 3: [ZufallsTimerKugellampen] RandomTimer for Kugellampen going down

Ich hatte die Klammern aus der commandref abgekupfert:
http://fritz.box:8083/fhem/docs/commandref.html#RandomTimer

attr   ZufallsTimerZ         disableCond      (Value("presenceDummy" eq "notPresent"))
Muss die Syntax da richtiggestellt werden?

Herzlichen Dank für die kompetente Unterstützung!