FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: SkodaSascha am 23 April 2014, 12:24:39

Titel: RandomTimer nur ausschalten
Beitrag von: SkodaSascha am 23 April 2014, 12:24:39
Hallo, leider bin ich über die Suche nur teilweise fündig geworden. Mein Ziel ist es,
eine Lampe die über das Twilight Modul eingeschaltet wird, z.B. zwischen 23.00
und 0.00 auszuschalten.

Das hier habe ich gefunden http://forum.fhem.de/index.php/topic,10173.msg57205/topicseen.html#msg57205 (http://forum.fhem.de/index.php/topic,10173.msg57205/topicseen.html#msg57205)

Zitatdefine timer     RandomTimer  +*{sunset_rel("REAL",-30*60)}    StehlampeTisch   21:30   4800


Nur möchte ich nicht an/aus schalten sondern nur aus. Kann das jemand umstricken?
Titel: Antw:RandomTimer nur ausschalten
Beitrag von: marvin78 am 23 April 2014, 12:27:01
Dafür sind die Attribute onCmd, offCmd zuständig.

Commandref beachten!
Titel: Antw:RandomTimer nur ausschalten
Beitrag von: SkodaSascha am 23 April 2014, 17:47:26
Komme damit absolut nicht klar. Auch eine Suche mit "offCmd" bringt micht nicht dahin, dass
ich weiterkomme (Kopieren und leicht ändern).
Am liebsten wäre mir eine Zeile in der .cfg um das ganze zu blicken.

Titel: Antw:RandomTimer nur ausschalten
Beitrag von: marvin78 am 23 April 2014, 17:54:00
Die Frage ist, on das RandomTimer Modul hier überhaupt das richtige Modul ist. Will du nur einmal ausschalten oder in der angegebenen Zeit mehrfach ein und wieder ausschalten? Was genau willst du machen?
Titel: Antw:RandomTimer nur ausschalten
Beitrag von: mi.ke am 23 April 2014, 18:39:26
Was er machen will, steht da.
Die Lampe wird über sunset eingeschaltet und später willer sie ausschalten lassen. Zufällig innerhalb eines Stundenfensters.

Ob das das richtige Modul ist, möchte ich nicht entscheiden,.....
...aber wie kommt man zu einer Lösung, auch mit diesem Modul, das find ich spannend.

so wie ich die commandref verstanden habe, schaltet der Timer um (toggle)


wir gehen also davon aus, das die Lampe an ist z.B. über "sunset"!
was haben wir an Werten?

define <name> RandomTimer  <timespec_start> <device> <timespec_stop> [<timeToSwitch>]

define  RandomTimerName RandomTimer  22:00:00 Stehlampe 23:00:00 2000

Ich gehe davon aus, dass innerhalb der einen Std. zwischen 22:00 und 23:00 alle 2000 Sekunden ein toggle gesendet wird. Das heisst , einmal.


Also, versuch macht klug.

PS.
nein, ich habs nicht getestet  8)
Titel: Antw:RandomTimer nur ausschalten
Beitrag von: justme1968 am 23 April 2014, 19:07:08
es wird normalerweise jeweils on oder off gesendete.

mit onCmd und offCmd kann man angeben was statt on bzw. off verwendet werden soll. wenn man her bei on etwas verwendet das nichts tut wird zwischen nichts und off gewechselt. also nur zufällig irgendwann ein mal ausgeschaltet. alle folgenden nichts und weiteren off ändern dann nichts mehr.

das geht z. b. auch um einem rollladen morgens zufällig irgendwann zwischen zwei grenzen hoch zu fahren.

gruss
  andre
Titel: Antw:RandomTimer nur ausschalten
Beitrag von: Dietmar63 am 23 April 2014, 20:21:01
Zum Anschalten der Lampe hast du  ja wahrscheinlich schon TW verwendet.
Zum Abschalten bietet sich ein  at an, bei dem die Schaltzeit über eine Perlfunktion beigesteuert wird.

RT ist nicht so gut geeignet, weil es gedacht ist über einen bestimmten Zeitraum hinweg ein Gerät(Lampe) zufällig ein- und auszuschalten.

Das normale at sieht so aus:
define atOff               at  *23:22:00     set lampe off
deins muss dann so aussehen:
define atOff               at  *{schalteZufaelligNach("23:00:00", 3600) }     set lampe off

Die Funktion schalteZufaelligNach(...) musst du dir dann noch in Perl bauen.
Im Forum gibt es dafür 1000 Beispiele, insbesondere im Zusammenhang mit Rolladenschaltungen ...
Titel: Antw:RandomTimer nur ausschalten
Beitrag von: homeum am 19 November 2017, 10:18:49
Das Thema ist zwar alt, aber trotzdem möchte ich meine simple Lösung zum täglich einmaligen zufälligen Ausschalten in einem bestimmten Zeitraum zeigen.

Aufgabe war, ohne viel Aufwand ein Device, das über Twilight aktiviert wurde, täglich zwischen 21:00 und 22:00 zu einer
zufälligen Zeit auszuschalten, wenn nicht Wochenende ist.


define RandomOff at *{"21:".int(rand(5)).int(rand(9)).":00"} {fhem "set Lampe off" if(!$we)}


Die Wochenende-Abfrage kann natürlich leicht umgekehrt oder auch weggelassen werden.
Damit bekommt man einfach ohne weiteren eigenen Code oder zusätzliche RandomTimer-Devices eine sich täglich
wiederholende zufällige Aktion zwischen 21:00 und 21:59 Uhr.





Titel: Antw:RandomTimer nur ausschalten
Beitrag von: Damian am 19 November 2017, 10:23:54
Zitat von: homeum am 19 November 2017, 10:18:49
... zum täglich einmaligen zufälligen Ausschalten in einem bestimmten Zeitraum zeigen.

Wenn der "Zufall" in der Zukunft liegt, wird mehrfach ausgeschaltet.

z. B. 21:02 21:15 21:30 usw.
Titel: Antw:RandomTimer nur ausschalten
Beitrag von: homeum am 26 November 2017, 18:54:45


Zitat von: Damian am 19 November 2017, 10:23:54
Wenn der "Zufall" in der Zukunft liegt, wird mehrfach ausgeschaltet.

z. B. 21:02 21:15 21:30 usw.

Hmm, ist mir noch nicht aufgefallen, aber du hast recht, sehen kann man das ja nicht.
Ich werde mal ein Log mitschreiben lassen, in wie weit das auftritt.

Ich denke aber, dass es beim Ausschalten unwichtig wäre, wenn nochmal off gesendet wird. Es bringt den gewünschten Effekt nicht zum stolpern.
Ist nicht sauber umgesetzt, aber Probleme sind wohl nicht zu erwarten.


Titel: Antw:RandomTimer nur ausschalten
Beitrag von: homeum am 30 November 2017, 15:02:25
Habe nun im extra angelegten Log nachgesehen, und @Damian hat recht.
Es kommt häufiger vor, daß am Abend nach dem eigentlichen ersten Ausschalt-Timer noch 1-2 weitere Ausschalt-Signale gesendet werden, bis das nächste at dann auf den kommenden Abend rutscht.

Ich denke, für mich ist das trotzdem akzeptabel.


Titel: Antw:RandomTimer nur ausschalten
Beitrag von: Damian am 30 November 2017, 15:09:52
Wenn die Funktion nur einmal am Tag schalten soll, dann kann man das relativ einfach mit DOIF lösen:

DOIF ([{"21:".int(rand(5)).int(rand(9)).":00"}]) (set bla ...) DOELSEIF [00:00]