Advent-Schnippsel für die Weihnachtsbeleuchtung

Begonnen von Icinger, 13 Oktober 2015, 19:21:55

Vorheriges Thema - Nächstes Thema

Icinger

Da ja die Adventzeit bald naht, hier mal ein kleines Schnippsel, welches ich mir voriges Jahr zusammengestellt habe:

sub Advent() {
my ($Sekunde, $Minute, $Stunde, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
    my $adv=0;
    $Jahr+=1900;
    if($Monat<1) {
     if ($Monatstag<7) {$adv=1;}
    }
else
{      my $time = str2time("$Jahr-12-25");
  my $wday = (localtime($time))[6];
  $wday = $wday ? $wday : 7;
  $time -= ($wday+22)*86400;
  $adv=1 if ($time<time)
}
    return $adv;
}


Gibt 1 oder 0 zurück, je nachdem ob schon Advent ist (1. Adventsamstag bis 6. Jänner).
Nutze ich, um die Weihnachtsbeleuchtung zur richtigen Zeit einzuschalten.

Wird bei mir zB so geschaltet:

define di_Weihnachtsbeleuchtung DOIF ([04:00-22:00] and [Umweltsensor_Aussen:luminosity] < AttrVal("Umweltsensor_Aussen","Dämmerung",undef) and Advent==1) (set Weihnachtsbeleuchtung on)
DOELSEIF ([04:00-22:00] and [Umweltsensor_Aussen:luminosity] > AttrVal("Umweltsensor_Aussen","Dämmerung",undef)+5 and Advent==1) (set Weihnachtsbeleuchtung off)
DOELSEIF ([22:00]) (set Weihnachtsbeleuchtung off)


lg, Ici

Edit: Neue Berechnung basierend auf betateilchens Code.
Bitte am Anfang den Moduls noch ein
use HTTP::Date;
hinzufügen.
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

P.A.Trick

Vielen Dank dafür, aber kann ich das mit dem Kalender Modul nicht einfacher machen?
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

kb958291


Ist in "my $t = timelocal(0, 0, 0, 25, 12, $Jahr-$Dez);" nicht ein Fehler drinn?
$mon geht doch von 0 - 11, d.h. Dezember = 11 oder????
FHEM@ASUS-PN40, HM-CFG-LAN, CUL868, CUL433, HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-LC-Bl1PBU-FM, IT1500, Elero, Tasmota

betateilchen

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

betateilchen

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

kb958291

Ich hatte versucht, den Advent wie oben beschrieben zu berechnen und bekomme immer folgende Meldung:
perl error in condition: DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and ReadingValDoIf('LichtWetter','twilight_weather','') < 70 and Advent==1: Undefined subroutine &main::timelocal called at ./FHEM/99_myUtils.pm line 65.

Zeile 65 ist bei mir:
my $t = timelocal(0, 0, 0, 25, 12, $Jahr-$Dez);

Deshalb vermutete ich den Fehler im Perlcode....  :-[

Bin noch am Anfang mit Fhem und komme in der Weihnachtsbeleuchtung bzw. Advent nicht weiter... :'(
FHEM@ASUS-PN40, HM-CFG-LAN, CUL868, CUL433, HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-LC-Bl1PBU-FM, IT1500, Elero, Tasmota

raspklaus

Ich versuche erstmal nur im Test das zu simulieren indem ich die Systemzeit auf dem Testsystem auf Dezember stelle und dann teste

define advent dummy
attr advent devStateIcon 0:FS20.off 1:FS20.on
define z_advent notify Advent==1 set advent on


bringt keine Veränderung

raspklaus

Der zweite Test bringt auch nicht viel

define advent dummy
attr advent devStateIcon 0:FS20.off 1:FS20.on
attr advent setList 0 1
define z_advent DOIF ([06:00-22:00] and ReadingsVal( "BM_Bewegungsmelder", "brightness", "") <= 100 and Advent==1) { fhem ("set advent on") }
DOELSEIF ([06:00-22:00] and ReadingsVal( "BM_Bewegungsmelder", "brightness", "") > 100 and Advent==1) { fhem ("set advent off") }
DOELSEIF ([22:00]) (set advent off)


Kann jemand helfen ?

kumue

Ich habe einen anderen Ansatz gewählt... holiday Datei http://fhem.de/commandref_DE.html#holiday


4 11-01 11-30 Nebenzeit
4 12-01 12-31 Hauptzeit
4 01-01 01-06 Hauptzeit
4 01-07 02-28 Nebenzeit


In einem DOIF werte ich dann aus, ob Haupt- oder Nebenzeit ist und schalte entsprechend.

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

raspklaus

moon,

das hatte ich später dort, da hier niemand geantwortet hat

raspklaus

#11
Ich verwende da folgende notify:

define z_advent DOIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] <= 100 and Advent==1) ("set advent on")
DOELSEIF ([06:00-22:00] and [BM_Bewegungsmelder:brightness] > 100 and Advent==1) ("set advent off")
DOELSEIF ([22:00]) (set advent off)


und erhalte folgenden Fehler:

perl error in condition: DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and ReadingValDoIf('BM_Bewegungsmelder','brightness','') > 100 and Advent==1: Month '12' out of range 0..11 at ./FHEM/99_myUtils.pm line 231.

und nun stecke ich fest

Die Zeile ist

my $t = timelocal(0, 0, 0, 25, 12, $Jahr-$Dez);


Icinger

Hi Leute,

habe grad den erste Post angepasst, sorry, da war ein Fehler drinnen.

Nu sollte es klappen (zumindest bei mir gehts)

lg, Ici
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

raspklaus

Was passiert bei Dir wenn Du {Advent} eingibst zur Ausgabe des Berechnungsergebnisses ?

Bei mir kommt:

Can't locate object method "new" via package "DateTime" (perhaps you forgot to load "DateTime"?) at ./FHEM/99_myUtils.pm line 235.


kb958291

Zitat von: kb958291 am 02 November 2015, 13:43:34
Ist in "my $t = timelocal(0, 0, 0, 25, 12, $Jahr-$Dez);" nicht ein Fehler drinn?
$mon geht doch von 0 - 11, d.h. Dezember = 11 oder????

hatte ich dann etwa doch Recht??? Als Anfänger ist man ja schnell verunsichert....
FHEM@ASUS-PN40, HM-CFG-LAN, CUL868, CUL433, HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-LC-Bl1PBU-FM, IT1500, Elero, Tasmota