Abfallkalender - Restzeit Anzeige

Begonnen von Tweak, 22 Oktober 2014, 19:54:01

Vorheriges Thema - Nächstes Thema

Tweak

Hallo,
nachdem hier ja schon einiges zum Thema Abfallkalender geschrieben wurde und das eigentlich ja ne ausgezeichnete Sache ist (Frau hat nun auch endlich freude an FHEM) wollte ich Fragen wie ihr das mit der Restlaufzeit in den Griff bekommen habt?

Das Problem ist bei mir z.b. das ical File hat ganztägige Termine, beim Forum durchstöbern bin ich schon darauf gestoßen das FHEM und ganztägige Termine keine Freunde sind. Und nun ist es so, das am selben Tag z.b. heute ist Abholung bekomme ich als Ergebnis nicht 0 Tage sondern bereits die Tage bis zum nächsten Ereignis ausgewertet.

Gibt es hierfür irgendwie eine Lösung? Ich wollte das mit Icons machen die die Tage herunter zählen und bei 0 steht dann eben heute.

Danke für eure Hilfe!

Hier meine util.pm

use Time::Local;

# Mülltermine auswerten
sub Muelltermine ($)
{
  my ($Ereignis) = @_;
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my $t  = time;
  my $dtBio = '';
  my $dtYellow = '';
  my $dtRest = '';
  my $dtPapier = '';
  my $dtAltholz = '';
  my $dtSchadstoff = '';
  my $dtGruen = '';
  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get Abfall summary $uid");
    if ($Kalendertext =~ /Bioabfall/) {
        my $dt = fhem("get Abfall start $uid");
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        if ($dtBio eq '' || ($eventDate < $dtBio && $eventDate > $t))
        {
          $dtBio = $eventDate;
          Log(3, $dtBio);
        }
    };
    if ($Kalendertext =~ /Gelbe Tonne/) {
        my $dt = fhem("get Abfall start $uid");
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        if ($dtYellow eq '' || ($eventDate < $dtYellow && $eventDate > $t))
        {
          $dtYellow  = $eventDate;
        }
    };
    if ($Kalendertext =~ /Restmülltonne/) {
        my $dt = fhem("get Abfall start $uid");
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        if ($dtRest eq '' || ($eventDate < $dtRest && $eventDate > $t))
        {
          $dtRest = $eventDate;
        }
    };
if ($Kalendertext =~ /Papiertonne/) {
        my $dt = fhem("get Abfall start $uid");
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        if ($dtPapier eq '' || ($eventDate < $dtPapier && $eventDate > $t))
        {
          $dtPapier = $eventDate;
        }
    };
if ($Kalendertext =~ /Metall/) {
        my $dt = fhem("get Abfall start $uid");
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        if ($dtAltholz eq '' || ($eventDate < $dtAltholz && $eventDate > $t))
        {
          $dtAltholz = $eventDate;
        }
    };
if ($Kalendertext =~ /Glas/) {
        my $dt = fhem("get Abfall start $uid");
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        if ($dtSchadstoff eq '' || ($eventDate < $dtSchadstoff && $eventDate > $t))
        {
          $dtSchadstoff = $eventDate;
        }
    };
if ($Kalendertext =~ /Grünabfall/) {
        my $dt = fhem("get Abfall start $uid");
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        if ($dtGruen eq '' || ($eventDate < $dtGruen && $eventDate > $t))
        {
          $dtdtGruen = $eventDate;
        }
    };
  };
  my $dayDiffB = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffB >= 0) {
    fhem("set BioabfallIn $dayDiffB");
  }
  my $dayDiffG = floor(($dtYellow - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffG >= 0) {
    fhem("set GelbeTonneIn $dayDiffG");
  }
  my $dayDiffR = floor(($dtRest - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffR >= 0) {
    fhem("set RestmuellIn $dayDiffR");
  }
  my $dayDiffP = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffP >= 0) {
    fhem("set PapiertonneIn $dayDiffP");
  }
  my $dayDiffH = floor(($dtAltholz - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffH >= 0) {
    fhem("set MetallIn $dayDiffH");
  }
  my $dayDiffS = floor(($dtSchadstoff - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffS >= 0) {
    fhem("set GlasIn $dayDiffS");
  }
  my $dayDiff = floor(($dtGruen - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set GruenIn $dayDiff");
  }
}


und das notify

define Abfall_Update notify Abfall:modeUpcoming.* {Muelltermine("$EVENT")}

mfg
Manuel

Tweak

Niemand eine Idee? Kann es womöglich daran liegen das ich die Termine mittels Outlook erstellt habe und anschließend als ical-File exportiert habe und das File nun einlese?

Danke

Tweak

So kann das Thema mittlerweile als erledigt markieren.
Der Abfallkalender funktioniert nun Perfekt! Frau/Freundin ist überglücklich.

Die Lösung für das Problem ist, das die Termine nicht ganztägig sein dürfen ( hab ich auch im Forum gefunden das der Kalender damit Probleme hat) also hab ich den Termin aktuell am notwendigen Tag von 23:55 - 23:59 eingetragen. Somit wird dann am ganzen Tag eine Restzeit von 0 angezeigt und durch die Icons entsprechend Entleerung.

Sg
Manuel

raspklaus

Wo setzt Du die Zeit ? Direkt in der ical ?
Da steht ja zB.

DTSTART:20140113T050000Z
DTEND:20140113T150000Z

Was muss da geändert werden ?

Tweak

Zitat von: raspklaus am 11 November 2014, 12:02:58
Wo setzt Du die Zeit ? Direkt in der ical ?
Da steht ja zB.

DTSTART:20140113T050000Z
DTEND:20140113T150000Z

Was muss da geändert werden ?

Hallo Klaus,
ich erstelle meinen Abfallkalender ja mittels Outlook. (Leider gibts den von unserer Gemeinde nur im PDF-Format)
Bei den entsprechenden Terminen reicht es das Ereignisdatum an das ende des Tages zu schieben. Also wenn du nen Termin anlegst einfach um 23:50-23:59

Sg
Manuel

bobby1000

Hallo Manuel,
mit Interesse habe ich mir deine Utils angeschaut. Jetzt muss ich dazu sagen, dass ich nicht wirklich Ahnung von dem ganzen FHEM- und Pearl- Thema habe. Aus diesem Grund bin ich aktuell noch sehr auf die Hilfe im Forum angewiesen.
Ich bin nun schon einige Wochen auf der Suche nach einem Müllkalender der mir zusagt.
Bei deinem blicke ich im Augenblick nicht wirklich durch.
Mir fehlt die Defination der Datei und der Anzeige in FHEM

Kannst du mir bitte einen Tipp geben wie du den Kalender bei dir verwirklicht hast so das er im Anschluß zuverlässig läuft.

Ich hoffe meine Bitte ist nicht zu dreist.

Vielen Dank schon mal im voraus.
Rüdiger