FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: spooki am 12 Dezember 2013, 16:14:34

Titel: wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: spooki am 12 Dezember 2013, 16:14:34
Hallo zusammen,

ich komme alleine nicht weiter und könnte etwas Hilfe gebrauchen.

Folgendes Szenario:
Ich möchte über FS20 einen Fernseher schalten.
Wenn der nächste Tag ein Wochentag ist von Zeit a bis Zeit b und
wenn  der nächste Tag aufs Wochenende fällt dann Zeit c bis Zeit d.

Soweit habe ich mir das schon zurechtgebastelt:

define Fernseherabschaltung FS20 0011 00
attr Fernseherabschaltung eventMap on:Fernseher_AN off:Fernseher_Aus
attr Fernseherabschaltung model fs20su
attr Fernseherabschaltung room Test


define FernseherAN at *17:30:00 {\
if ($wday == 0 || $wday == 1 || $wday == 2 || $wday == 3 || $wday == 4) {\
fhem("set Fernseherabschaltung on");; \
fhem("define FernseherAUS at +04:00:00 set Fernseherabschaltung off") \
                                                                          }\
                                 }


define FernseherAN_WE at *16:30:00 {\
if ($wday == 5 || $wday == 6)  {\
fhem("set Fernseherabschaltung on");; \
fhem("define FernseherAUS at +06:30:00 set Fernseherabschaltung off") \
                                 }\
                                    }

Soweit funktioniert das schon ganz gut, nur würde ich ganz gerne die Ferienzeiten mit
integrieren und da hört es schon bei mir auf.


mit hoffnungsvollem Gruß
spooki

Titel: Antw:wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: Puschel74 am 12 Dezember 2013, 16:30:40
Hallo,

# sind die Code-Tags.
dann wird der Text besser lesbar und man sieht auch was Code ist und was nicht.

Die Prüfung mit $wday ist ja in Ordnung geht aber einfacher mit $we = Wochenende und !($we) ist unter der Woche.

Wie und wo pflegst du deine Ferienzeiten?

In einer feiertag.holiday?
Die kann durch FHEM ausgewertet werden und je nach Eintrag wird $we = 1 gesetzt.

Grüße
Titel: Antw:wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: spooki am 12 Dezember 2013, 18:35:05
Danke erst mal für die schnelle Antwort.

Das mit den Code-Tags war mir so noch nicht bekannt, muss mich wohl erst in die Bedienung
des Forums hier einarbeiten.

Ferienzeiten sind noch nicht gepflegt, ist hier der erste Anwendungsfall wo ich sie brauchen
würde.

Den grundsätzlichen Gebrauch von $we und !($we) sowie holiday2we würde ich wohl hin bekommen. Nur mein Anwendungsfall ist ja anders. Ich will das noch mal verdeutlichen:

Das ganze Konstrukt soll den Fernseher meines Juniors steuern. Soll heißen, ist am nächsten Tag Schule (also Wochentag) soll der Fernseher früh ausgehen. Beginnt am nächsten Tag das Wochenende ( bis hier hin habe ich es ja alleine gelöst) bzw. es sind Ferien (das fehlt mir noch) kann der Fernseher später ausgehen.

Ich hoffe jetzt habe ich es verständlicher ausgedrückt.

Gruß
spooki
Titel: Antw:wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: Paul am 12 Dezember 2013, 21:11:34
hallo,

Also die $we Funktion kannst du nicht benutzen, da du ja Samstag und Sonntag unterschiedlich schalten möchtest. Da ist deine Lösung wohl so richtig.

Die Feiertag.holiday schaut auch immer um Mitternacht, steht etwas im Kalender dann setze $we.
Du musst dann im Kalender den letzen Ferientag-1 eingeben.

Dann müsstest du sowas einbauen, wie ist $we aber nicht $wday=0, nein geht nicht weil dann kann dein Sohn auch sonntags in den Ferien nicht länger fernsehen
Titel: Antw:wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: Puschel74 am 12 Dezember 2013, 21:20:37
Hallo,

ZitatDas ganze Konstrukt soll den Fernseher meines Juniors steuern. Soll heißen, ist am nächsten Tag Schule (also Wochentag) soll der Fernseher früh ausgehen.

Äh - Sonntags ist selten Schule also bräuchte man nur für Samstag eine Ausnahmebehandlung da in D wohl Samstag keine Schule ist.
Sorry, ich komme aus Ö und wir hatten am Sa noch bis 13 Uhr Schule.

Grüße
Titel: Antw:wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: justme1968 am 12 Dezember 2013, 21:21:46
für holliday kannst du z.b. mit get <holiday device> tomorrow rausfinden ob für den nächsten tag ferien eingetragen sind.

gruss
  andre
Titel: Antw:wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: Paul am 12 Dezember 2013, 21:23:48
Warum nur Samstag eine Ausnahme?

Spooki hat doch gemäß seinen Angaben Freitag und Samstag die Ausnahme.
Titel: Antw:wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: spooki am 12 Dezember 2013, 22:17:06
Genau.

Freitag und Samstag, späte Abschaltzeit. Das habe ich auch schon im oben geposteten Code realisiert. Die frühen Abschaltzeiten laufen auch schon so. Der Rest wird sich jetzt am WE zeigen ;) .

Das einzige was mir noch fehlt ist das berücksichtigen der Ferien.

Mein Junior würde mir die Ohren volljaulen wenn er nicht schon Freitag Abend länger schauen könnte.

Gruß
spooki

Ah, eben habe ich NoScript abgeschaltet und schon sehe ich mehr Möglichkeiten im Editorfenster
Titel: Antw:wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: dieda am 22 Januar 2014, 20:52:10
Hast du es gelöst?

Es gilt ja

Fall 1: Wenn Wochentag 1 oder 2... und keine Ferien dann ...
Fall 2: Wenn Wochentag 1 oder 2... und Ferien dann ...
Fall 3: Wenn Freitag oder Samstag dann ...


Titel: Antw:wenn morgen Wochenende/Ferien ($We) dann...
Beitrag von: jenscz am 22 Januar 2014, 21:40:26
Ich habe das wie folgt gelöst:

Ich habe per holiday die Feiertage usw. definiert:

define holiday_nrw holiday

Datei mit den Feiertagen usw.:

holiday_nrw.holiday
# Siehe auch
# http://de.wikipedia.org/wiki/Feiertage_in_Deutschland

1 01-01 Neujahr
1 05-01 Tag der Arbeit
1 10-03 Tag der deutschen Einheit
1 11-01 Allerheiligen
1 12-24 Heiligabend
1 12-25 1. Weihnachtstag
1 12-26 2. Weihnachtstag
1 12-31 Sylvester

2 -2 Karfreitag
2  1 Ostermontag
2 39 Christi Himmelfahrt
2 50 Pfingsten
2 60 Fronleichnam

3 0 Sat 01 Samstag
3 0 Sun 01 Sonntag
3 0 Sat 02 Samstag
3 0 Sun 02 Sonntag
3 0 Sat 03 Samstag
3 0 Sun 03 Sonntag
3 0 Sat 04 Samstag
3 0 Sun 04 Sonntag
3 0 Sat 05 Samstag
3 0 Sun 05 Sonntag
3 0 Sat 06 Samstag
3 0 Sun 06 Sonntag
3 0 Sat 07 Samstag
3 0 Sun 07 Sonntag
3 0 Sat 08 Samstag
3 0 Sun 08 Sonntag
3 0 Sat 09 Samstag
3 0 Sun 09 Sonntag
3 0 Sat 10 Samstag
3 0 Sun 10 Sonntag
3 0 Sat 11 Samstag
3 0 Sun 11 Sonntag
3 0 Sat 12 Samstag
3 0 Sun 12 Sonntag


Dann ein at für in der Woche, also wenn der nächste Tag kein Feiertag/Wochenende ist (Rollo runter um 21:00):

define timer_Rollo_KZ_runter_MoFr at *21:00 {if (fhem("get holiday_nrw tomorrow") eq "none") {fhem("set Rollo_KZ off")}}

Und ein at für die Tage an denen der nächste Tag ein Feiertag oder Wochenende ist (Rollo runter um 22:00):

define timer_Rollo_KZ_runter_WE at *22:00 {if (fhem("get holiday_nrw tomorrow") ne "none") {fhem("set Rollo_KZ off")}}