sunset in Abhängigkeit von weiteren Bedingungen einschränken

Begonnen von Spartacus, 29 September 2014, 14:50:29

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
ich brauche mal einen leichten Schlag auf meinen Hinterkopf, da ich hier weiterkomme!

Es geht um eine Gartenbeleuchtung. Diese soll bei Sonnenuntergang (aber nicht vor 1700 und nicht nach 21:00) ein, und zu einer bestimmten Zeit ausgeschaltet werden soll. Das mache ich so:
define GartenLicht at *{sunset(0,"17:00","21:00")} { fhem("set lamp on-till 21:00")}

Nun soll die Beleuchtung freitags, samstags und wenn am nächsten Tag ein Feiertag ist, bis 2330 leuchten. Dabei muss der Bereich (nicht vor 1700 und nicht nach 2100) m.E. angepasst werden, sonst würde die Beleuchtung an diesen Tagen mit Sonnenuntergängen nach 2100 nicht einschalten. Außerdem soll am 01.01. erst um 0200 ausgeschaltet werden.
{
if (($wday == 5) || 
     ($wday == 6) || 
     (fhem("get Feiertag tomorrow") !~ m/none/))
{
   fhem ("set lamp on-till 23:30")
}
else
{
  fhem ("set lamp on-till 21:00")
}
}


Ich kriege die zwei Codefetzen irgendwie nicht zusammengebracht. Vielleicht geht es auch einfacher, komme aber nicht drauf!

Danke für die Unterstützung,
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

betateilchen

anderer Ansatz...


define bla at ... {sunset irgendwas} {
  my $offTime;
  if (($wday == 5) || 
     ($wday == 6) || 
     (fhem("get Feiertag tomorrow") !~ m/none/))
  {
    $offTime = "23:30";
  } else  {
    $offTime = "21:00"
}
  CommandSet(undef, "lamp on-till $offTime");
}


Wobei ich Dir empfehlen würde, den gesamten code-Teil in eine sub() in die 99_myUtils.pm zu packen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

Hallo,
hm! Das habe ich noch nicht gerafft, oder soll ich anstelle der fixen Zeiten in meinem sunset-Befehl Variablen verwenden, die ich in einer Sub-Routine auswerte?

define GartenLicht at *{sunset(0,$minEin,$maxEin)} { fhem("set lamp on-till $offtime")}

minEin und maxEin werden dann zusammen mit offime in der SUB ermittelt, oder?
Sparatcus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Pjg

nein.
Der sunset bestimmt nur die Zeit des at. Also sozusagen die Anfangszeit. Das von bis im sunset ist nur der mögliche Rahmen dieser Zeit.
BananaPI, CUL 433, Somfy RTS, Hue LWL001, Hue LWB004, HM-CFG-LAN, HM-LC-SW2-FM

Doggiebert

Im prinzip sind's doch drei Szenarien: Werktag, Feiertag/Wochenende, Neujahr. Spricht was dagegen, hierfür 3 verschiedene at-Befehle zu definieren, die abhängig von einer Szenarien-Variable was tun oder nicht?

Disclaimer: naive Newbie-Idee, nicht dass ich schon großartig was mit at gemacht hätte...
SW: FHEM 5.5, Raspian, XBMC, Testinstallation auf Win7
HW: Raspi B, 32GB SD, enocean Pi, RFXTRX433E, BSC - MwC-32, Onkyo TX-NR709, Samsung UE55F8090, Jung LS-Eno, permundo SmartPlug, KDG-FB 6490cable (ohne FHEM)

betateilchen

@Spartacus: vielleicht solltest Du Dich vor einer Änderung nochmal ausführlich mit der commandref zu sunrise/sunset befassen, damit Du verstehst, wie das eigentlich arbeitet.

Ich habe übrigens das Ein- und Ausschalten der Balkonbeleuchtung in zwei getrennten devices definiert. Also per sunset wird nur ein "set Licht on" gesteuert. Denn das Ausschalten hat ja von der Logik her betrachtet absolut nichts mit Sonnenauf- oder Untergang zu tun, sondern ist eine fixe Uhrzeit.

Bei mir wird beim Ausschalten nach Monat unterschieden: vom 01.04. bis 31.08 um 23 Uhr, in der restlichen Zeit um 22 Uhr. Gesteuert wird das per notify, das bei mir jede Stunde getriggert wird:


define lichtaus notify global:HOURLY {
my $off = 22;
$off++ if ($month ~~ [4..8]);
fhem( "set Licht_Balkon off" ) if ($hour == $off );
}


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

Hallo zusammen,

Zitat@Spartacus: vielleicht solltest Du Dich vor einer Änderung nochmal ausführlich mit der commandref zu sunrise/sunset befassen, damit Du verstehst, wie das eigentlich arbeitet.
Ich habe es so verstanden, dass die beiden Uhrzeiten in sunset festlegen, wann ein Device frühstens und wann es spätestens eingeschaltet wird, unabhängig davon, wann der Sonnenuntergang stattfindet. Soll heissen:
wenn der Sonnenuntergang um 16:39 ist, die erste Zeit auf 18:00 festgelegt ist, wird das Device um 18:00 und nicht um 16:39 eingeschaltet.
wenn der Sonnenuntergang um 18:40 ist, schaltet das Device auch erst um 18:40 ein (>18:00 und <21:00).


Die zweite Zeit begrenzt das Einschalten des Devices auf die angegebene Uhrzeit.

Ist der Sonnenuntergang um 21:39, die Zeit aber auf 21:00 begrenzt, schaltet das Device erst gar nicht ein.

Wenn jetzt die Ausschaltzeit dicht an der Einschaltzeit des Sonnenuntergangs liegt, schaltet das Device im ungünstigsten Fall für nur 1min ein.
Bsp:
SU um 20:59, feste Ausschaltzeit um 21:00.

Dieses Verhalten macht m.E. aber keinen Sinn und deshalb möchte ich den zweiten Zeitparameter im sunset-Befehl dynamisch zur fixen Ausschaltzeit berechnen.
Dann könnte das irgendwie so aussehen:
define GartenLicht at *{sunset(0,"17:00","FixAus-30min<=sunset")} { fhem("set lamp on-till FixAus")}

Bei FixAus =21:00 heisst das:
wenn der SU um 20:30 ist, schaltet das device ein und um 21:00 aus.
wenn der SU um 20:31 ist, schaltet das device erst gar nicht ein.

Das soll sicher stellen, dass die Beleuchtung mindestens 30min eingeschaltet wird und nicht kurz "aufflackert"

Und jetzt kommt noch hinzu, dass die fixe Ausschaltzeit am WE anders ist, als unter der Woche, bzw. am 01.01.

Ich hoffe, ich konnte meine Vorstellung etwas deutlicher darstellen. Aber vielleicht ist mein Ansatz auch viel zu kompliziert und es geht viel einfacher...
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

moonsorrox

Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Pjg

Ich übertrage meine Aussage noch auf Dein Beispiel.
"Von-Bis im sunset bestimmt den Rahmen der Anfangszeit."

ss 16:39 --> 18:00
ss 18:40 --> 18:40
ss 21:39 --> 21:00

Ich hoffe es ist nun klar. ;)
BananaPI, CUL 433, Somfy RTS, Hue LWL001, Hue LWB004, HM-CFG-LAN, HM-LC-SW2-FM

Spartacus

Hallo Pjg,
dann passt das ja! habe ich also richtig verstanden.... aber irgendwie bin ich doch total behämmert!

Wenn ich die Einschaltzeit von 1800 bis 2100 einschränken möchte, wochentags immer um 2100 abgeschaltet und die Brenndauer nicht zu kurz sein soll,
dann gibt es doch eine einfache Lösung:
define GartenLicht at *{sunset(0,"17:00","20:30")} { fhem("set lamp on-till 21:00")}

SU      MIN     MAX   FixAus
16:39  18:00  20:30   21:00 ---> 18:00 ein, 21:00 aus
18:40  18:00  20:30   21:00 ---> 18:40 ein, 21:00 aus
20:29  18:00  20:30   21:00 ---> 20:29 ein, 21:00 aus
20:59  18:00  20:30   21:00 ---> aus
21:39  21:00  20:30   21:00 ---> aus


Somit habe ich, wenn mich nicht alles täuscht, mein Ziel erreicht!
Junge, Junge! Manchmal ist es auch nicht leicht mit mir!

@moonsorrox
...das kannte ich noch nicht! Sieht vielversprechend aus und gucke ich mir mal genauer an.....

Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Paul

Zitat von: Spartacus am 30 September 2014, 22:26:29
Hallo Pjg,
dann passt das ja! habe ich also richtig verstanden....

Spartacus

Hast Du nicht!

SU      MIN     MAX   FixAus
16:39  18:00  20:30   21:00 ---> 18:00 ein, 21:00 aus
18:40  18:00  20:30   21:00 ---> 18:40 ein, 21:00 aus
20:29  18:00  20:30   21:00 ---> 20:29 ein, 21:00 aus
20:59  18:00  20:30   21:00 ---> 20:30 ein, 21:00 aus
21:39  21:00  20:30   21:00 ---> 20:30 ein, 21:00 aus



Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

Spartacus

ok!
...dann habe ich es wohl doch nicht verstanden.

In der commandref steht:

# Switch lamp1 on at real sunset, not before 18:00 and not after 21:00
    define a15 at *{sunset("REAL",0,"18:00","21:00")} set lamp1 on


schalte Lampe ein bei SU, aber nicht vor 18:00 und nicht nach 21:00
ich verstehe das so, dass er bei einem SU nach 21:00 die Funzel nicht mehr einschaltet!

Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Paul

Und genau das macht es.

Es schaltet nicht nach 21:00 sondern genau um 21:00 Uhr
Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

Spartacus

...das ist aber doof! Dann funktioniert das also nicht!

Nun gut! Jetzt bin ich erst einmal aufgeschmissen...
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Puschel74

Moin,

lest doch nochmal drüber:

define GartenLicht at *{sunset(0,"17:00","20:30")} { fhem("set lamp on-till 21:00")}
Es wird SPÄTESTENS um 20:30 ein geschaltet und um 21 Uhr wieder aus.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.