Autor Thema: Abfallkalender auswerten  (Gelesen 99507 mal)

Offline scooty

  • Sr. Member
  • ****
  • Beiträge: 554
Antw:Abfallkalender auswerten
« Antwort #105 am: 09 Januar 2015, 08:51:29 »
...nicht wirklich! Ich habe beispielsweise auch Altkleidersammlung mit drin und das trifft nur 3 x im Jahr zu. Da ist der Zeitraum schon größer! (ca. 100 Tage)

Ich habe keine gute Idee, wo man da anpacken könnte... Der Abfallkalender meiner Stadt ist immer ab Mitte Dezember verfügbar! Wäre halt schön, wenn man da einen Workaround schaffen könnte...
Christian

Ich erstelle einfach manuell Pseudo-Termine für den 01.01. des Folgejahres.
Bei Verfügbarkeit und nach Einlesen des neuen Jahreskalenders (Mitte Dezember) schiebe ich dann diese Pseudo-Termine einfach wieder manuell in das Folgejahr.

Ja, ist auch manuell, aber Einlesen des neuen Jahreskalenders muss ich ja auch manuell, von daher kann ich damit leben...  ;)

Andreas
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH10880 / IO Homecontrol

Offline stromer-12

  • Hero Member
  • *****
  • Beiträge: 1367
Antw:Abfallkalender auswerten
« Antwort #106 am: 09 Januar 2015, 13:06:28 »
Da habe ichs ja einfach mit meinen Abfallterminen für Papier, Gelben Sack und Restmüll, die werden stur im 2 bzw 4 Wochenrythmus abgeholt.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Offline Markus

  • Sr. Member
  • ****
  • Beiträge: 873
  • No support over PM! Please use the thread ...
Antw:Abfallkalender auswerten
« Antwort #107 am: 10 Januar 2015, 14:10:50 »
Bei uns kommen sie auch alle vier Wochen. Wie hast du das gelöst? Ich hab eine holiday daten die ich jedes Jahr umändern muss
Raspberry Pi2 als FHEM-Plattform
HM, FS20, 1-Wire, PanStamp,LW12,Intertechno,ESPEasy,Alexa

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2864
Antw:Abfallkalender auswerten
« Antwort #108 am: 10 Januar 2015, 21:27:42 »
Der Unterschied ist vermutlich, dass ich mit 0 initialisiere

  my $dtBio = 0;
  my $dtYellow = 0;
  my $dtRest = 0;

und dann statt

$dtBio eq ''
das nehme:

$dtBio == 0
Dann musst du auch am Ende bei den einzelnen dayDiff das

+1
wegnehmen. (Kann es sein, dass dein Müll gestern schon abgeholt wurde - das +1 sieht komisch aus)

Hi, habs jetzt mal so geändert wie du geschrieben hast:
sub myAbfallTermine_Initialize($$)
{
 my ($hash) = @_;
}

# Mülltermine auswerten
sub MuelltermineA ($)
{
  my ($Ereignis) = @_;
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my (undef,undef,undef,$mday,$mon,$year) = localtime;
  my $t  = timelocal(0,0,0,$mday,$mon,$year);
  my $dtBio = 0;
  my $dtYellow = 0;
  my $dtRest = 0;
  my $dtPapier = 0;

  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get AbfallA summary $uid");
    if ($Kalendertext =~ /Bioabfall/) {
        my $dt = fhem("get AbfallA 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 == 0 || ($eventDate < $dtBio && $eventDate >= $t))
        {
          $dtBio = $eventDate;
          Log(3, $dtBio);
        }
    };
    if ($Kalendertext =~ /Gelber Sack/) {
        my $dt = fhem("get AbfallA 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 == 0 || ($eventDate < $dtYellow && $eventDate >= $t))
        {
          $dtYellow  = $eventDate;
        }
    };
    if ($Kalendertext =~ /Restabfall/) {
        my $dt = fhem("get AbfallA 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 == 0 || ($eventDate < $dtRest && $eventDate >= $t))
        {
          $dtRest = $eventDate;
        }
    };
if ($Kalendertext =~ /Altpapier/) {
        my $dt = fhem("get AbfallA 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 == 0 || ($eventDate < $dtPapier && $eventDate >= $t))
        {
          $dtPapier = $eventDate;
        }
    };

    my $dayDiffB = floor(($dtBio - $t) / 60 / 60 / 24 );
  if ($dayDiffB >= 0) {
    fhem("set BiomuellIn $dayDiffB");
  }
  my $dayDiffG = floor(($dtYellow - $t) / 60 / 60 / 24 );
  if ($dayDiffG >= 0) {
    fhem("set GelbeTonneIn $dayDiffG");
  }
  my $dayDiffR = floor(($dtRest - $t) / 60 / 60 / 24 );
  if ($dayDiffR >= 0) {
    fhem("set RestmuellIn $dayDiffR");
  }
  my $dayDiffP = floor(($dtPapier - $t) / 60 / 60 / 24 );
  if ($dayDiffP >= 0) {
    fhem("set PapierIn $dayDiffP");
  }
}
}

Nein der Müll ist diese Woche am 07.01.15 gegangen....

Aber jetzt passt es irgendwie garnicht mehr, laut Kalender geht jetzt das nächste mal Müll
Zitat
98fd06c7788f852a0010f4d93f1efb3e     new upcoming                     14.01.2015 00:00:00-15.01.2015 00:00:00 Altpapier Limbach Hauptstraße

Allerdings stehen jetzt die Werte im Müllkalender bei Papier 7 Tage, das passt ja garnicht......


Was hab ich jetzt verschlimmbessert?

Dazu kommt das ich heute dann plötzlich noch diese Meldungen im Log habe
2015.01.10 09:30:01.465 3: AbfallA_Update return value: Too many arguments for main::MuelltermineA at (eval 353119) line 1, near ""$EVENT")"

2015.01.10 09:30:01.470 3: AbfallA_Update return value: Too many arguments for main::MuelltermineA at (eval 353120) line 1, near ""$EVENT")"

2015.01.10 09:30:01.512 3: AbfallA_Update return value: Too many arguments for main::MuelltermineA at (eval 353121) line 1, near ""$EVENT")"

2015.01.10 09:30:01.517 3: AbfallA_Update return value: Too many arguments for main::MuelltermineA at (eval 353122) line 1, near ""$EVENT")"

2015.01.10 09:30:01.555 3: AbfallA_Update return value: Too many arguments for main::MuelltermineA at (eval 353123) line 1, near ""$EVENT")"

2015.01.10 09:30:01.561 3: AbfallA_Update return value: Too many arguments for main::MuelltermineA at (eval 353124) line 1, near ""$EVENT")"

2015.01.10 09:30:01.598 3: AbfallA_Update return value: Too many arguments for main::MuelltermineA at (eval 353125) line 1, near ""$EVENT")"

2015.01.10 09:30:01.604 3: AbfallA_Update return value: Too many arguments for main::MuelltermineA at (eval 353126) line 1, near ""$EVENT")"
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Offline stromer-12

  • Hero Member
  • *****
  • Beiträge: 1367
Antw:Abfallkalender auswerten
« Antwort #109 am: 10 Januar 2015, 23:19:36 »
Bei uns kommen sie auch alle vier Wochen. Wie hast du das gelöst? Ich hab eine holiday daten die ich jedes Jahr umändern muss

Ich habe dafür im Google-Kalender eine Wiederholung alle 4 Wochen morgens um 6:00Uhr mit Errinnerung 12Stunden vorher eingestellt.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2864
Antw:Abfallkalender auswerten
« Antwort #110 am: 11 Januar 2015, 16:16:25 »
Hab mir jetzt nochmal meine readings angesehen, die sind seit dem 07.01.15 nicht mehr aktualisiert worden, da scheint das Prolem zu liegen. Das notify macht ancheint nichts mehr!?
Was kann das plötzlich sein, hab am notify nichts geändert..

state
7
2015-01-07 03:44:13

Also das notify scheint zu arbeiten, aber die dummys werden nicht aktualisiert......
« Letzte Änderung: 11 Januar 2015, 17:44:30 von Tommy82 »
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

bobby1000

  • Gast
Antw:Abfallkalender auswerten
« Antwort #111 am: 13 Januar 2015, 09:42:56 »
Hallo zusammen,
ich habe mir den Müllkalender nach dem Einträgen im Forum hier zusammen geklaut. :-[
Soweit klappt auch alles. Die Anzeigen im Menüpunkt Kalender weisen mich am Tag vor der Abholung und am Tag der Abholung auf den Termin hin.
Nur hätte ich gerne noch eine Mitteilung per Pushover aufs Handy das morgen bzw. heute der Müll abgeholt wird.
Die generelle Meldung klappt auch aber sie kommt bei jedem aktualisieren des Kalenders sprich so 24 mal pro Tag.
Einmal würde mir eigentlich reichen. :(

Kann mir bitte jemand einen Tipp geben wie ich die Pushmeldung nur einmal hin bekomme?
Habe bisher versucht das ganze mit diesem Ausschnitt aus der 99_myUtils zu lösen. Aber sobald ich fhem( "attr BiotonneA event-on-change-reading state");eingebe bekomme ich gar keine Meldungen mehr und wenn ich es weg lasse bekomme ich jede Menge Meldungen.

  };
  my $dayDiffB = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffB >= 0) {
    fhem("set BiotonneA $dayDiffB");
    Log(3, Tage bis Biotonne $dayDiffB);
    if ($dayDiffB <= 1) {
      fhem( "attr BiotonneA event-on-change-reading state");
      fhem( "set HandyMeldungPushover msg 'Biotonne rausstellen' 'Morgen wird die Biotonne geleert.'");
    }   
}

Ach ja und noch eine Bitte, kann mir jemand die Zahlen 60 / 60/ 24 +1 einmal erklären?
Es ist ja schön wenn man den Quellcode "klauen" kann, aber ich würde auch gerne verstehen was hier abgeht. Ich tippe mal das eine 60 die Minuten sind nach denen aktualisiert wird.

Danke im voraus

Offline RoBra81

  • Sr. Member
  • ****
  • Beiträge: 990
Antw:Abfallkalender auswerten
« Antwort #112 am: 13 Januar 2015, 20:33:04 »
Hallo,
hat irgendjemand eine Idee, wie man das abfangen könnte? Anstelle der "0" sollte hier "kein Termin" angezeigt werden.

Gruß,
Christian.

So, ich habe mich wie versprochen mal rangesetzt und es folgendermaßen gelöst:

Meine neue sub:

sub
Muelltermine ($)
{
  my ($Ereignis) = @_;
  my @uids=split(/;/,$Ereignis);
  my (undef,undef,undef,$mday,$mon,$year) = localtime;
  my $t  = timelocal(0,0,0,$mday,$mon,$year);
  my $dtBio = '';
  my $dtYellow = '';
  my $dtRest = '';
  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get Muellkalender summary $uid");
    if ($Kalendertext =~ /Biomüll/) {
        my $dt = fhem("get Muellkalender start $uid");
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        Log(1, "eventDate: ".$eventDate);
        Log(1, "t: ".$t);
        if (($dtBio eq '' || $eventDate < $dtBio) && $eventDate >= $t)
        {
          $dtBio = $eventDate;
        }
    };
    if ($Kalendertext =~ /Gelbe Tonne/) {
        my $dt = fhem("get Muellkalender 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üll/) {
        my $dt = fhem("get Muellkalender 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;
        }
    };
  };

  my $dayDiff = 0; 
 
  if ($dtBio eq '') {
    fhem("set BiomuellIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtBio - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set BiomuellIn $dayDiff");
    }
  }
  if ($dtYellow eq '') {
    fhem("set GelbeTonneIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtYellow - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set GelbeTonneIn $dayDiff");
    }
  }
  if ($dtRest eq '') {
    fhem("set RestmuellIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtRest - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set RestmuellIn $dayDiff");
    }
  }
}

Dieser wird nun von einem geänderten notify aufgerufen, da wir alle Termine auf einmal brauchen (man beachte 'all' statt 'mode'):

define Muellkalender.not.Update notify Muellkalender.all:.*abfallamtbautzende.* {Muelltermine("$EVTPART1")}
Ronny

Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1316
Antw:Abfallkalender auswerten
« Antwort #113 am: 13 Januar 2015, 21:18:55 »
Hallo Ronny,
vielen dank für Deine tolle Arbeit! Ich werde mir das einmal in Ruhe anschauen, so auf die Schnelle überblicke ich das noch nicht!

Schon mal ganz lieben Dank,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2864
Antw:Abfallkalender auswerten
« Antwort #114 am: 14 Januar 2015, 20:36:54 »
Hi, so es läuft wieder, aber trotzdem nicht richtig.
Heute ist Papier gegangen, steht auch so im Kalender.
98fd06c7788f852a0010f4d93f1efb3e   known    start                     14.01.2015 00:00:00-15.01.2015 00:00:00 Altpapier Limbach Hauptstraße Also müsste der Dummy ja heute den Status 0 haben oder? Allerdings steht der Status heute auf 29, was auch grundsätzlich richtig ist, da in 29 Tagen das nächste Mal Papier geht, am 11.02.15, also zumindest ist 29 richtig wenn ich heute mitzähle, allerdings wenn heute wie ich eigentlich erwarten würde auf 0 stehen würde, dann wären es ja nur noch 28 Tage oder!?

Wie kann ich das noch lösen, komme nicht dahinter, das notify sieht aktuell so aus:
AbfallA_Update notify AbfallA:modeUpcoming.* {MuelltermineA("$EVENT")}\und die Sub in der 99_myUtils:
sub myAbfallTermine_Initialize($$)
{
 my ($hash) = @_;
}

# Mülltermine auswerten
sub MuelltermineA ($)
{
  my ($Ereignis) = @_;
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my (undef,undef,undef,$mday,$mon,$year) = localtime;
  my $t  = timelocal(0,0,0,$mday,$mon,$year);
  my $dtBio = '';
  my $dtYellow = '';
  my $dtRest = '';
  my $dtPapier = '';

  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get AbfallA summary $uid");
    if ($Kalendertext =~ /Bioabfall/) {
        my $dt = fhem("get AbfallA 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 =~ /Gelber Sack/) {
        my $dt = fhem("get AbfallA 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 =~ /Restabfall/) {
        my $dt = fhem("get AbfallA 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 =~ /Altpapier/) {
        my $dt = fhem("get AbfallA 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;
        }
    };

  my $dayDiffB = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffB >= 0) {
    fhem("set BiomuellIn $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 PapierIn $dayDiffP");
  }
}
}

Was könnte ich noch falsch machen?

Danke für eure Hilfe
« Letzte Änderung: 14 Januar 2015, 20:42:56 von Tommy82 »
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1316
Antw:Abfallkalender auswerten
« Antwort #115 am: 15 Januar 2015, 21:13:35 »
So, ich habe mich wie versprochen mal rangesetzt und es folgendermaßen gelöst:

Meine neue sub:

sub
Muelltermine ($)
{
  my ($Ereignis) = @_;
  my @uids=split(/;/,$Ereignis);
  my (undef,undef,undef,$mday,$mon,$year) = localtime;
  my $t  = timelocal(0,0,0,$mday,$mon,$year);
  my $dtBio = '';
  my $dtYellow = '';
  my $dtRest = '';
  foreach my $uid (@uids) {
    my $Kalendertext = fhem("get Muellkalender summary $uid");
    if ($Kalendertext =~ /Biomüll/) {
        my $dt = fhem("get Muellkalender start $uid");
        my @SplitDt = split(/ /,$dt);
        my @SplitDate = split(/\./,$SplitDt[0]);
        my $eventDate = timelocal(0,0,0,$SplitDate[0],$SplitDate[1]-1,$SplitDate[2]);
        Log(1, "eventDate: ".$eventDate);
        Log(1, "t: ".$t);
        if (($dtBio eq '' || $eventDate < $dtBio) && $eventDate >= $t)
        {
          $dtBio = $eventDate;
        }
    };
    if ($Kalendertext =~ /Gelbe Tonne/) {
        my $dt = fhem("get Muellkalender 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üll/) {
        my $dt = fhem("get Muellkalender 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;
        }
    };
  };

  my $dayDiff = 0; 
 
  if ($dtBio eq '') {
    fhem("set BiomuellIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtBio - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set BiomuellIn $dayDiff");
    }
  }
  if ($dtYellow eq '') {
    fhem("set GelbeTonneIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtYellow - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set GelbeTonneIn $dayDiff");
    }
  }
  if ($dtRest eq '') {
    fhem("set RestmuellIn Keine weiteren Termine");
  }
  else {
    $dayDiff = floor(($dtRest - $t) / 60 / 60 / 24);
    if ($dayDiff >= 0) {
      fhem("set RestmuellIn $dayDiff");
    }
  }
}

Dieser wird nun von einem geänderten notify aufgerufen, da wir alle Termine auf einmal brauchen (man beachte 'all' statt 'mode'):

define Muellkalender.not.Update notify Muellkalender.all:.*abfallamtbautzende.* {Muelltermine("$EVTPART1")}
Ronny
Hallo Ronny,
ich habe mir Deine Lösung genauer angeschaut und ich glaube es verstanden zu haben. Der Trick ist hier, dass Du eben alle Termine auf einmal einlädst und bei der jeweiligen "Müllart" auf einen Leestring prüfst.
Wenn kein Eintrag gefunden wird, wird der Text ausgegeben...

Super gelöst und danke für die tolle Unterstützung!
Gruß,
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Offline RPi_Fhem_Fan

  • New Member
  • *
  • Beiträge: 12
Antw:Abfallkalender auswerten
« Antwort #116 am: 17 Januar 2015, 16:39:16 »
Das sind die normalen Meldungen vom Calendar-Modul. Die kannst du mir verbose = 2 verstecken...
Hallo Ronny,

seit ein paar Wochen läuft mein Abfallkalender auch, dank den vielen Infos hier aus dem Forum :D
Leider kämpfe ich aber noch mit dem "Datenmüll" im Logfile vom Calendar Modul.
Dein Tip mit verbose = 2 bezieht sich auf das globle Statement attr global verbose 2 statt dem urspünglich von mit benutztem Loglevel 3 ?
Das hätte dann aber zur Folge das ich alle anderen Module mit dem Attribute Loglevel 3 umstellen müßte ?

Das Calendar Modul versteht leider nicht das attr Abfall loglevel 2 !
Meinen Müllkalender habe ich mit define Abfall Calendar ical file ./Muelltermine.ics 43200
definiert, damit erhalte ich dann nur alle 12 Stunden das Logfile mit diesen Einträgen vollgeschrieben:

2015.01.17 09:38:44 3: get Abfall summary ff376730bbc0d9be5115d2ede5828f5f : Restmüll 14-tägig am 14.12.2015
2015.01.17 09:38:44 3: get Abfall start ff376730bbc0d9be5115d2ede5828f5f : 14.12.2015 06:00:00


Falls jemand noch weitere Ideen bezüglich den Calendar Logfile Einträgen hat, dann wäre ich für jede Info dankbar.

Gruß Martin


« Letzte Änderung: 17 Januar 2015, 16:52:26 von RPi_Fhem_Fan »

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2864
Antw:Abfallkalender auswerten
« Antwort #117 am: 17 Januar 2015, 18:08:23 »
Hi, du musst in deinem Kalender das verbose Attribute 2 setzen, standartmässig ist das nicht gesetzt, und es greift das globale verbose.

Seltsammwer weisse hab ich aktuell auch mit gesetztem verbose 2 recht viele Log einträge, das war aber ursprünglich nicht so
2015.01.17 08:14:22.600 3: get AbfallA start 30c380a9893d50320eb831ff95a1ae20 : 18.11.2015 00:00:00
2015.01.17 08:14:22.624 3: get AbfallA summary 323acfc40891e76af1d7e6e25569cbab : Bioabfall
2015.01.17 08:14:22.626 3: get AbfallA start 323acfc40891e76af1d7e6e25569cbab : 19.02.2015 00:00:00
2015.01.17 08:14:22.627 3: 1424300400
2015.01.17 08:14:22.651 3: get AbfallA summary 37fd3c926000dc158df86225e98a26a4 : Bioabfall
2015.01.17 08:14:22.653 3: get AbfallA start 37fd3c926000dc158df86225e98a26a4 : 22.07.2015 00:00:00
2015.01.17 08:14:22.677 3: get AbfallA summary 4018ecf2f803a1d15c04341e7636c7cd : Bioabfall
2015.01.17 08:14:22.679 3: get AbfallA start 4018ecf2f803a1d15c04341e7636c7cd : 30.09.2015 00:00:00
2015.01.17 08:14:22.702 3: get AbfallA summary 44793e4d1668322bb9196c17eb2c8210 : Gelber Sack
2015.01.17 08:14:22.705 3: get AbfallA start 44793e4d1668322bb9196c17eb2c8210 : 16.09.2015 00:00:00
2015.01.17 08:14:22.739 3: get AbfallA summary 4551e8f5ab8fe0cb8341e1ec70d823e5 : Altpapier
2015.01.17 08:14:22.741 3: get AbfallA start 4551e8f5ab8fe0cb8341e1ec70d823e5 : 16.12.2015 00:00:00

Zu meinem 0 Tage problem, kommenden Mittwoch geht das nächste mal Biomüll bei uns, der Bio dummy zeigt jetzt 4 Tage an
Internals:
   NAME       BiomuellIn
   NR         279
   STATE      4
   TYPE       dummy
   Readings:
     2015-01-17 08:14:25   state           4
Attributes:
   alias      Bio
   fp_Home    413,899,0,
   group      Info
   room       Kalender

Das sollte doch richtig sein oder? Dann wäre Dienstag die 1 und Mittwoch die 0!??
« Letzte Änderung: 17 Januar 2015, 18:16:38 von Tommy82 »
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1316
Antw:Abfallkalender auswerten
« Antwort #118 am: 17 Januar 2015, 18:38:36 »
Hi,
Ich kann das mit dem verbose bestätigen. Sogar verbose 0 schreibt unverändert viele Daten ins log.
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Offline Tommy82

  • Hero Member
  • *****
  • Beiträge: 2864
Antw:Abfallkalender auswerten
« Antwort #119 am: 18 Januar 2015, 10:40:10 »
Also da stimmt irgendwas mit dem verbose im Kalender nicht, dürfte ja eigentlich nichts mehr kommen.
Ich frag den MT mal.

Hab im Log morgens aber noch 4 Perl Warnungen die mit dem Abfallkalender zusammenhängen, was kann das noch sein?

2015.01.18 03:50:41.599 3: get AbfallA summary 06d8322db3bc2d314d1827aa2f72e7e2 : Weihnachtsbäume
2015.01.18 03:50:41.603 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/99_myUtils.pm line 286.
2015.01.18 03:50:41.603 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/99_myUtils.pm line 290.
2015.01.18 03:50:41.604 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/99_myUtils.pm line 294.
2015.01.18 03:50:41.605 1: PERL WARNING: Argument "" isn't numeric in subtraction (-) at ./FHEM/99_myUtils.pm line 298.
2015.01.18 03:50:41.607 3: get AbfallA summary 0f14492d8971e7b7e1c51882ad52aafa : Bioabfall
2015.01.18 03:50:41.609 3: get AbfallA start 0f14492d8971e7b7e1c51882ad52aafa : 13.05.2015 00:00:00

in 286 steht
Zitat
my $dayDiffB = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
In 290
Zitat
my $dayDiffG = floor(($dtYellow - $t) / 60 / 60 / 24 + 1);
294
Zitat
my $dayDiffR = floor(($dtRest - $t) / 60 / 60 / 24 + 1);
und 298
Zitat
my $dayDiffP = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);

Danke
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

 

decade-submarginal