Hauptmenü

$we - tomorrow

Begonnen von snoopy_andi, 23 Mai 2015, 11:23:43

Vorheriges Thema - Nächstes Thema

snoopy_andi

Gibt es eine Möglichkeit das $we für morgen aufzurufen (inklusive den feiertagen - ich weiss feiertage gehen für morgen)

ich möchte eben gerne eine neue variable die ich auch rücksetzen kann und mir den status für morgen anzeigt. Dann soll ich sie noch ändern können - falls eben für meine weitere Berechnung der morgige tag nicht als Feiertag / freien tag berücksichtig werden soll.

hexenmeister

Eine 'fertige' Möglichkeit ist mir nicht bekannt. Aber Perl macht ja vieles möglich ;)

Hier eine kleine Fingerübung:
# Prueft, ob der angegebener Tag Wochenende oder Feiertag ist (optional)
# Params:
#   day: 0-heute, 1-morgen etc. Wenn nichts angegeben, wird heute angenommen.
#   Holiday-Device: (s. commandref) wird für die Feiertagspruefung verwendet.
#                   falls nicht angegeben, wird im Attribut holiday2we in global
#                   nachgesehen. Falls auch nicht angegeben, wird ignoriert.
#
sub isWeOrHoliday(;$$) {
  my ($day, $hdev) = @_;
  $day = 0 unless $day;
  $hdev = $attr{global}{holiday2we} unless $hdev;
 
  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
 
  my $twday = $wday+$day;
  $twday = $twday % 7;
 
  my $we = (($twday==0 || $twday==6) ? 1 : 0);
 
  if(!$we && $hdev && $defs{$hdev}) {
    my $v = fhem("get $hdev days $day");
    $we = 1 if($v ne "none");
  }
 
  return $we;
}
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

fhem> {isWeOrHoliday()}
1
fhem>  {isWeOrHoliday(1)}
1
fhem>  {isWeOrHoliday(2)}
1
fhem>  {isWeOrHoliday(3)}
0
fhem> {isWeOrHoliday(2,"none")}
0
fhem> {isWeOrHoliday(2,"ns")}
1


'ns' heißt bei mir holiday-Device mit Feiertagen für Niedesachsen. Dies ist auch als Attribut in 'global' hinterlegt.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Puschel74

Danke für den Code  ;D
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.

hexenmeister

Immer gerne ;)

Habe nur das Prinzip aus fhem.pl (da wird $we gesetzt) genommen und entsprechend für andere Tage als 'heute' erweitert.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

arallon

Ich weiss der Post ist schon älter, aber ich hatte noch das Bedürfnis einen Ferienkalender mit dem Modul Calendar zu berücksichtigen. Aktuell ist das hardcodiert aber ggf. hilft es jemand weiter.

sub isWeOrHoliday(;$$) {
  my ($day, $hdev) = @_;
  $day = 0 unless $day;
  $hdev = $attr{global}{holiday2we} unless $hdev;

  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;

  my $twday = $wday+$day;
  $twday = $twday % 7;

  my $we = (($twday==0 || $twday==6) ? 1 : 0);

  if(!$we && $hdev && $defs{$hdev}) {
    my $v = fhem("get $hdev days $day");
    $we = 1 if($v ne "none");
  }
  return $we || isFerienTag($day) ;
}

sub isFerienTag(;$)
{
  my ($day) = @_;
   $day = 0 unless $day;
  my @nextEvents = split("\n", fhem ("get calender.holiday text next"));
  my $d = strftime("%d.%m.%y", localtime(time + 24 *60 *60 * $day));
  foreach (@nextEvents) {
      my $ev =$_;
      my $evDate = substr $ev, 0, 8;
      my $ferien = ($ev =~ "Ferien" ? 1: 0);
      if ($d eq $evDate && $ferien)
      {
        return 1;
      }
    }
  return 0;
}


Wie weit in die Zukunft die "next" Einträge gehen habe ich nicht geprüft. Ich brauche es hauptsächlich für einen Kalender der Ganztägige Ferien Einträge hat die immer als "Ferien" in der Summary sind. Frage in der Regel immer den nächsten Tag ab. Wie gesagt das Calender device ist noch hardoced drin. Sollte man versch. Kalender nutzen wollen einfach noch der push die nächsten "get" dem Array hinzufügen.

grüsse