At jeden morgen ab fünf aber nur wenns dunkel ist

Begonnen von TomLee, 14 September 2022, 16:33:33

Vorheriges Thema - Nächstes Thema

TomLee

Hi,

zusätzlich zu meinem sunset-at, stell ich mir vor in Zukunft die Leuchten auch morgens für bestimmte Zeit einzuschalten.

Mein jetzige Umsetzung sieht so:

defmod at_Deko_sunrise at *{sunrise('HORIZON=-20')} {\
my $x = sunrise();;\
my @dev = ('MQTT2_WLED_G1','MQTT2_WLED_G2','MQTT2_WLED_FR','MQTT2_WLED_TV','MQTT2_zigbee_rgbw_bulb_flur_privat','MQTT2_Mi_Wecklicht','MQTT2_Tasmota_Bulb1' );;\
my $pc = substr(Color::pahColor(0,15,30,ReadingsVal('HF_Aussensensor_Vorderhaus','temperature','0'),2,0),0,6);;\
return fhem("set $dev[0]|$dev[2]|$dev[3]|$dev[4]|$dev[5]|$dev[6]:FILTER=state!=on on-till $x;;set $dev[0]|$dev[2]|$dev[3]|$dev[4]|$dev[5]|$dev[6] rgb $pc;;");;\
}
attr at_Deko_sunrise room Deko

setstate at_Deko_sunrise Next: 04:56:34
setstate at_Deko_sunrise 2022-09-14 14:16:52 state Next: 04:56:34


Zurzeit passt  das eigentlich ganz gut, was mir dabei jetzt weniger gefällt ist das Verhalten dann über das Jahr gesehen und ich komme nach zwei Tagen so nebenbei grübeln auf keine wirklich nennenswerte Lösung.

Zur Erklärung was ich eigentlich gerne hätte:

MQTT2_WLED_G1 und MQTT2_WLED_G2 (je zwei 5 m WS2812B-Stripes, MQTT2_WLED_G2 ist noch aufm Schiff, die anderen Devices fliegen wohl aus der Definition raus, weiß ich noch nicht) sind Aussenleuchten.
Jeden morgen sollen so ab +/-  paar Minuten 5 Uhr oder genau 5 Uhr die Leuchten eingeschaltet sein, wenns dunkel ist, auch wenn sunrise() erst nach acht Uhr sein sollte.
Das würde mit einem at jeden Tag um fünf Uhr eigentlich passen, einschalten bis sunrise(), aber nicht zur Jahresmitte.

Versteht mich wer und hat einen Hieb für mich ?

EDIT

Mein Problem zu beschreiben hat mir es vlt. schon etwas klarer gemacht, einfach mit at jeden Tag 5 Uhr, aber in den Monaten Mai, Juni,Juli den Code nicht ausführen, wegen der paar Minuten ?

Beta-User

Na ja, auch im Sommer kann es bedeckte Tage geben. Vielleicht ist Twilight was für dich?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

Ich hab mir die Readings kurz angeschaut und verstehe erstmal nicht auf was du hinaus willst.

TomLee

Vlt. war Aussenleuchte der falsche Begriff, Dekoaussenleuchte triffts wohl eher, die machen nicht hell die sollen nur gut aussehen, die Temperatur anzeigen.

Und das sieht bisher sehr geil aus mit dem ersten Streifen den ich vorgestern in einem alten verrosteten 5 Meter langen Doppel-T-Träger montiert habe.


Beta-User

Nun ja, Twilight liefert halt auch sowas wie einen "Helligkeits-Sonnenaufgang" unter Berücksichtigung der zum eigentlichen sunrise-Zeitpunkt ermittelten Wetterverhältnisse. Ist es im Juli stark bewölkt, sind es uU. halt nicht nur ein paar Minuten seit 5:00 Uhr, bis es (gefühlt) so hell ist, dass die Deko keinen Sinn mehr macht...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rabehd

Welchen Sinn dieser Anwendungsfall
Zitatsollen nur gut aussehen
hat, dass ist Deine Entscheidung.
Ich habe das verstanden: Du möchtest etwas zu einer festen Zeit schalten, aber nur, wenn die Sonne noch tiefer als x steht.
Ich würde das mit einem DOIF machen Trigger wäre die Zeit, verknüpft (and) mit Sonnenstand als Bedingung.
Auch funktionierende Lösungen kann man hinterfragen.

TomLee


Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

frank

wenn schon lichtabhängig, dann am besten mit einem lichtsensor vor ort.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

TomLee

#9
Zitat von: rabehd am 14 September 2022, 17:01:32
Welchen Sinn dieser Anwendungsfall  hat, dass ist Deine Entscheidung.

Ich arbeite seit über vier Monaten fast jeden Tag, ausser wenige Tage an denen die Hitze nicht mehr auszuhalten war,  an einem nennen wir es mal Aufenthaltsplatz (Grillecke) für Gäste, für mich sind die Streifen der Höhepunkt des ganzen, ob das für dich Sinn macht ist mir völlig Wurscht.

TomLee

Zitat von: Beta-User am 14 September 2022, 17:06:16
sr_weather

06:59:23 ist aber schon lange hell ? Zumindest meiner Empfindung nach. Wie man oben sieht würde bei mir morgen 06:29:39 ausgeschaltet werden

wenn schon lichtabhängig, dann am besten mit einem lichtsensor vor ort.

Ja, Ich suche schon lange (Jahre) den richtigen Ort für Bewegungsmelder, weil ich auf dem Dach keine montieren möchte, jetzt mit dem Abriss der Hälfte einer alten "Garage" hab ich auch dafür die Grundlage an der mMn. richtigen Position geschaffen, ist aber noch genug andere Arbeit bis ich mich an die Montage mache.

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

Damian

So etwas habe ich bereits abstrakt programmiert. Man muss nur noch Dämmerung definieren, entweder als Sensor, berechnet oder sonst wie. Auch die Eingrenzung auf bestimmte Jahreszeiten lässt sich leicht integrieren. Jede Szene (Lampe) lässt sich über GUI ein- bzw. ausschalten oder auf Automatik stellen.

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Helligkeitsabh.C3.A4ngige_Zeitsteuerung_f.C3.BCr_mehrere_Szenarien_mit_tabellarischer_.C3.9Cbersicht
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Reinhard.M

Ich habe das gleiche Thema mit dem Timer Modul und einer Perl Zeile gelöst. Bei Interesse bitte melden.

Gruß Reinhard

DetlefR


my $x = sunrise();
my @sonnenaufgang=split /:/ ,$x;
return if( $sonnenaufgang[0]>23);
..
..

Wie du schon geschrieben hast. Ein einfaches at um 5Uhr und dann die Funktion gleich wieder verlassen, wenn der nächste Sonnenaufgang erst morgen ist.

TomLee

Sry, also ich bin aufgehalten worden.

@Damian

Schau ich mir auf jedenfall mal an, heute Abend am PC, weil das was du da alles in einem Wikiartikel zusammengefasst hast mein altes Tablet nicht mitmacht und der Browser abstürzt.

@Reinhard.M

Wäre es nicht im Interesse aller wenn du das Beispiel einfach hier zeigen würdest.

@DetlefR

Ich meine das hat was, ich muss aber noch weiter darüber grübeln, erst brauch ich was im Bauch.


TomLee

Ich werd das so umsetzen wie es mir schon beim schreiben des ersten Beitrags im Kopf rumgängelte.

Beta-Users Vorschlag ist mir too much, Wolken mit einbeziehen, für was ? Da müssten ja Sonnenfinsternis-Verhältnise vorkommen, so ein Unwetter um die Zeit kommt, sagen wir mal in 10 Jahren, genau wie oft vor ?
Grundsätzlich aber auch eine Variante es anzugehen.

DOIF hab ich immer noch nicht angesehen, mach ich aber rein aus Interesse noch.

Cool find ich die Variante von DetlefR, aber irgendwie kann ich mich nicht damit anfreunden das in der "Übergangszeit" (Mai/Juli) die Leuchten für nur wenige Minuten (bis halbe Stunde, OK) an sind.

So hör ich einfach mit etwa einer 1/2 Stunde Ende April auf und mit einer 1/2 Stunde im August wieder an:

defmod at_Deko_sunrise at *05:00:00 {\
my $x = sunrise();;\
my @dev = ('MQTT2_WLED_G1','MQTT2_WLED_G2','MQTT2_WLED_FR','MQTT2_WLED_TV','MQTT2_zigbee_rgbw_bulb_flur_privat','MQTT2_Mi_Wecklicht','MQTT2_Tasmota_Bulb1' );;\
my $pc = substr(Color::pahColor(0,15,30,ReadingsVal('HF_Aussensensor_Vorderhaus','temperature','0'),2,0),0,6);;\
return fhem("set $dev[0]|$dev[2]|$dev[3]|$dev[4]|$dev[5]|$dev[6]:FILTER=state!=on on-till $x;;set $dev[0]|$dev[2]|$dev[3]|$dev[4]|$dev[5]|$dev[6] rgb $pc;;") if $month < 5 || $month >7;;\
}
attr at_Deko_sunrise room Deko

setstate at_Deko_sunrise Next: 05:00:00
setstate at_Deko_sunrise 2022-09-15 15:33:06 state Next: 05:00:00



DetlefR

Ich habe die Hardcore Variante wiedergefunden. Das Thema hatte ich schon mal. Wurde dann aber verworfen.


Die Definition des at ändern
*{ReadingsVal('at_Deko_sunrise ','nextstart','05:00:00')}
Am Ende dann das einfügen
my @sra=split /:/ ,sunrise();
my $shr=$sra[0]>23?$sra[0]-24:$sra[0];
my $nextrun='05:00:00'; # Default Startwert
if ($shr<6){ #Mindestbrenndauer eine Stunde
my $nextstart=$shr*60+$sra[1];
$nextstart-=60; #Die Zeit des Sonnenaufgang in Minute-60 Mindestbrenndauer
my $nexthour=floor($nextstart / 60);
my $nextmin =$nextstart % 60;
$nextrun=sprintf('%02u:%02u:00',$nexthour,$nextmin) #Die naechste Startzeit zusammenbasteln
}
readingsSingleUpdate($defs{$SELF},'nextstart',$nextrun,0); #und in das Reading schreiben.
}


Das ganze sorgt dann dafür, dass im Sommer das Licht früher angeht als 5:00 Uhr.
Es war mal als "Sonnenaufgang" für eine Bettumrandung gedacht. Aber so früh wollte dann doch niemand Licht haben. ;)