Advent-Schnippsel für die Weihnachtsbeleuchtung

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

Vorheriges Thema - Nächstes Thema

betateilchen

Um mal zurück zum eigentlichen Thema dieses Threads

Advent-Schnippsel für die Weihnachtsbeleuchtung

zu kommen: Man kann die Adventssonntage jetzt auch vom holiday Modul selbst berechnen lassen.

https://forum.fhem.de/index.php/topic,93277.0.html
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

moonsorrox

Zitat von: Cybers am 16 November 2018, 12:17:57
dann bekomme ich folgenden Fehler:
SocialSeason2 DOIF: no right bracket: { 
Unknown command set_State(myseason(split("-",$ymd,2)),1)}\, try help.

Was mache ich falsch?

Gruß, Sascha
hatte ich auch den Fehler da meckert er rum, da ich die Dateien alle einzeln habe und nicht alles in der fhem.cfg habe ich die Datei geöffnet und dort alles eingetragen, dann gespeichert und Fhem neu eingelesen dann nimmt er das.

Wie gesagt wenn du es in der fhem.cfg hast mußt du dir im klaren sein was du da machst.
oder eben betateilchen seine Variante
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

Damian

#62
ZitatWas mache ich falsch?

Es ist eine Raw-Definition.

Einfach in der Kommandozeile: defmod SocialSeason2 DOIF

Dann in das Device  SocialSeason2 gehen auf "Raw definition" unten klicken und den Code gegen das Codeschnipsel ersetzen und unten auf "Execute commands" bestätigen.

P. S. Für die holiday Erweiterung muss noch einer eine Funktion für Zeitintervalle abhängig vom 1. Adventsonntag bzw. Ostersonntag definieren, dann braucht man mein Codeschnipsel nicht mehr ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

misux

#63
Hi! Irgendwie klappt hier was nicht... Bei mir ist seit heute Advent!

Ich nutze ######## Adventberechnung ############

use strict;
use warnings;
use POSIX;
use HTTP::Date;

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+27)*86400;
  $adv=1 if ($time<time)
}
    return $adv;
}


Was muss ich einstellen damit Advent ist wenn Advent ist... Also ab dem 01.Advent... 😂

Oder hat das Update von gestern die Berechnung zerschossen?

Weiß jemand Rat?

Vielen Dank

EDIT

Habs gefunden!

es ist die 27 im $time -= ($wday+27)*86400;

Die errechnet den Start auf den Montag nach dem Totensonntag. Ändert man das auf 22 sollte es mit dem ersten Advent klappen.

Steht in den Posts drin ... Man muss sich sich nur alle durchlesen... ::)

misux

Zitat von: misux am 26 November 2018, 07:26:21
######## Adventberechnung ############

use strict;
use warnings;
use POSIX;
use HTTP::Date;

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+27)*86400;
  $adv=1 if ($time<time)
}
    return $adv;
}




HI Leute! Ist es irgendwie möglich ein zweites ansprechDatum einzubinden? Als ausgabe zb. ADV2= 1 oder 0 ab dem 3 Advent?

Also 2 Daten in diesem Adventgeschnipsel..

Vielen Dank!

odie13690

Zitat von: Der_müde_Joe am 30 Dezember 2017, 11:29:06
Moin,

so meine Weihnachtsbeleuchtung ist dieses Jahr nun erfolgreich gelaufen und da diese auch auf diesem Schnipsel basiert, möchte ich euch die ganzen Snipsel geben, damit jeder das nachbauen kann.

In die 99_myUtils.pm habe ich folgendes gepackt:
use strict;
use warnings;
use POSIX;
use DateTime;
use HTTP::Date;

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+27)*86400;
  $adv=1 if ($time<time)
}
    return $adv;
}


Wie ändere ich den Code ab, dass die Zeit schon am 31.12. endet?

odie13690

DetlefR

Ich bin zufällig auf diesen Thread gestoßen. Er ist zwar schon etwas älter, aber vielleicht liest es ja noch jemand.
Ich hatte das gleiche Problem. Weihnachtsbeleuchtung erst nach Totensonntag. Aber sie soll Abends für ein paar Stunden und morgens vor Sonnenaufgang auch noch mal für "kurze" Zeit leuchten.
sub isXmas(){
#Der Totensonntag fällt immer auf einen Tag zwischen dem 20. Und 26. November.
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday());
$month=10;
$mday=20;
($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(timelocal($sec,$min,$hour,$mday,$month,$year));
if ($wday>0){
$mday+=7-$wday;
}
#Montag nach Totensontag
$mday+=1;
my $totensonntag=timelocal(0,0,0,$mday,$month,$year);
#Weihnachtsbeleuchtungsende ist am 12.Januar
my $weihnachtsende=timelocal(59,59,23,12,1,$year);
#War wenn vor dem 12.01 oder nach Totensonntag
return gettimeofday()<$weihnachtsende ? 1 : gettimeofday() > $totensonntag ? 1 : 0;
}

Das ganze steht in 99_myUtils mit use POSIX;. Getriggert wird es mittels Sunrise und Sunset. Ab Montag bis zum festgesetzten Datum liefert die Funktion eine 1 zurück.

Gruß Detlef