Steckdose zufällig in einem Zeitfenster schalten, wenn Alarmanlage an ist

Begonnen von dero, 27 Januar 2014, 21:18:41

Vorheriges Thema - Nächstes Thema

dero

Hi,

ich habe ja eine komplette Alarmanlage in FHEM implementiert. Momentan schalte ich auch einen TV-Simulator an (Fake TV), wenn der Alarm an ist.

Ich würde gerne, dass der TV aber nur zwischen 18 Uhr und 22 Uhr angeht und dabei alle X min neu entscheidet.

Mein Dummy AlarmMode steht auf "all", wenn der Alarm an ist. Der Schalter für den Fake TV nennt sich SD_FAKETV.

Auszug aus der aktuelle Steuerung:

define AlarmMode_all notify AlarmMode:all { fhem("... ;; set SD_FAKETV on ;; ...") }
define AlarmMode_off notify AlarmMode:off { fhem("... ;; set SD_FAKETV off ;; ...") }


Über ein Codeschnippsel wäre ich sehr dankbar!

dero



justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

dero

So, habe etwas mit RandomTimer gebaut. SD_FAKETV ist bei mir ein Fernsehsimulator (Fake TV).

Das folgende Script hört auf den "Away"-Dummy und schaltet den Fernseher.

Das Hauptproblem mit RandomTimer per se war, dass der Fernseher ja nicht ständig ein und ausgeschaltet werden soll, sondern es gibt eine Kernzeit zwischen 20 Uhr und 22 Uhr, wo er wahrscheinlich an ist. Ich habe mit der Manipulation von "switchmode" versucht zu simulieren, dass der Fernseher "immer wahrscheinlicher" angeht, je später der Abend wird...

Passt das so, geht es eleganter?


define SD_FAKETV_Rnd RandomTimer *18:00:00 SD_FAKETV 23:00:00 471
attr SD_FAKETV_Rnd switchmode 800/200
attr SD_FAKETV_Rnd disable 1

define SD_FAKETV_Rnd_1 at *18:00:00 attr SD_FAKETV_Rnd switchmode 020/000
define SD_FAKETV_Rnd_2 at *19:00:00 attr SD_FAKETV_Rnd switchmode 100/000
define SD_FAKETV_Rnd_3 at *20:00:00 attr SD_FAKETV_Rnd switchmode 400/000
define SD_FAKETV_Rnd_4 at *21:00:00 attr SD_FAKETV_Rnd switchmode 900/000
define SD_FAKETV_Rnd_5 at *22:00:00 attr SD_FAKETV_Rnd switchmode 000/200

define Away_on notify Away:on { fhem( "attr SD_FAKETV_Rnd disable 0" ) }
define Away_off notify Away:off { fhem( "attr SD_FAKETV_Rnd disable 1 ;; set SD_FAKETV off" ) }

dero

Hat jemand eine elegantere Variante, um ansteigende und abfallende Schalt-Wahrscheinlichkeit zu erzeugen?

Also: FakeTV soll irgendwann zwischen 18 und 21 Uhr angehen und irgendwann zwischen 22 und 24 Uhr ausgehen... Wobei die Wk nach hinten steigen soll...

dero

Dietmar63

Eine einfachere Möglichkeit ist mir nicht bekannt, aber du kannst

define SD_FAKETV_Rnd_1 at *18:00:00 attr SD_FAKETV_Rnd switchmode 020/000
define SD_FAKETV_Rnd_2 at *19:00:00 attr SD_FAKETV_Rnd switchmode 100/000
define SD_FAKETV_Rnd_3 at *20:00:00 attr SD_FAKETV_Rnd switchmode 400/000
define SD_FAKETV_Rnd_4 at *21:00:00 attr SD_FAKETV_Rnd switchmode 900/000
define SD_FAKETV_Rnd_5 at *22:00:00 attr SD_FAKETV_Rnd switchmode 000/200


durch

define fakteRND       WeekdayTimer  SD_FAKETV_Rnd   18:00|020/000 19:00|100/000 20:00|400/000 21:00|900/000 22:00|000/200  {fhem ("attr @ switchmode %") }

@ ist immer das device
% ist der Parameter hinter der jeweiligen Schaltzeit.

Zum Testen solltest du faktRND auf verbose 5 setzen(obige Zeile nicht getestet), dann bekommst du debug-Infos angezeigt, die dir weiterhelfen, wenn es noch nicht funktioniert.

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

dero

Okay, trotzdem Danke ;)

Wen's interessiert, hier ist mein voller Away-Code, Kommentare willkommen!

define SD_FAKETV_Rnd RandomTimer *18:00:00 SD_FAKETV 22:37:00 471
attr SD_FAKETV_Rnd switchmode 800/200
attr SD_FAKETV_Rnd disable 1

define LT_Diele_Rnd RandomTimer *{sunset_abs(-1800)} LT_Diele 22:13:00 421
attr LT_Diele_Rnd switchmode 300/700
attr LT_Diele_Rnd disable 1

define LT_Diele_Rnd_2 RandomTimer *07:15:00 LT_Diele 08:27:00 201
attr LT_Diele_Rnd_2 switchmode 500/500
attr LT_Diele_Rnd_2 disable 1

define LT_Treppe_Rnd RandomTimer *{sunset_abs(-1600)} LT_Treppe 22:54:00 399
attr LT_Treppe_Rnd switchmode 600/200
attr LT_Treppe_Rnd disable 1

define LT_Treppe_Rnd_2 RandomTimer *06:54:00 LT_Treppe 08:15:00 399
attr LT_Treppe_Rnd_2 switchmode 700/200
attr LT_Treppe_Rnd_2 disable 1

define SD_FAKETV_Rnd_1 at *18:00:00 attr SD_FAKETV_Rnd switchmode 020/000
define SD_FAKETV_Rnd_2 at *19:00:00 attr SD_FAKETV_Rnd switchmode 100/000
define SD_FAKETV_Rnd_3 at *20:00:00 attr SD_FAKETV_Rnd switchmode 400/000
define SD_FAKETV_Rnd_4 at *21:00:00 attr SD_FAKETV_Rnd switchmode 900/000
define SD_FAKETV_Rnd_5 at *22:00:00 attr SD_FAKETV_Rnd switchmode 000/200

define Away_on notify Away:on { fhem( "attr SD_FAKETV_Rnd disable 0 ;; attr LT_Diele_Rnd disable 0 ;; attr LT_Treppe_Rnd disable 0 ;; attr LT_Diele_Rnd_2 disable 0 ;; attr LT_Treppe_Rnd_2 disable 0" ) }
define Away_off notify Away:off { fhem( "attr SD_FAKETV_Rnd disable 1 ;; attr LT_Diele_Rnd disable 1 ;; attr LT_Treppe_Rnd disable 1 ;; attr LT_Diele_Rnd_2 disable 1 ;; attr LT_Treppe_Rnd_2 disable 1 ;; set SD_FAKETV off ;; set LT_Diele off ;; set LT_Treppe off" ) }

Groby

Hallo,

Du könntest 2 RandomTimer (1 x an / 1 x aus) verwenden und jeweils beide mit dem 1. an/aus Schalten über das Attribut "disable" deaktivieren. Dann musst Du beide "morgens" wieder enablen.

Oder Du verwendest 1 RandomTimer mit "disable" zum Einschalten und berechnest Dir einen "on-for-timer" zum Abschalten. Du könntest die Minuten der Einschaltzeit von Deinem Maximalwert für "on-for-timer" abziehen und hättest so eine Variation sowohl beim Einschalten, als auch beim Ausschalten.

MfGroby