Autor Thema: Abfallkalender auswerten  (Gelesen 97569 mal)

Offline Tweak

  • Full Member
  • ***
  • Beiträge: 156
Antw:Abfallkalender auswerten
« Antwort #45 am: 08 Oktober 2014, 06:21:03 »
@raspklaus
war bei mir auch so mit use Time, ergänzt und schon klappt es.

Gibt es schon eine Erweiterung um die Icons entsprechend dem Leerungstag anzuzeigen? Habe mir zwar jetzt eine Erweiterung für die Utils "gebastelt" aber hier muss sicher noch nachgebessert werden.
ein kurzer Auszug:
....
  my $dayDiff = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set Papiertonne $dayDiff");
    if ($dayDiff >= 28) {
      fhem("deleteattr Papiertonne icon");
      fhem("attr Papiertonne icon message_attention");
    }
    else {
      fhem("deleteattr Papiertonne icon");
      fhem("attr Papiertonne icon message_garbage");
    }
  }

....

Bei uns ist am 08.07. Leerung der Papiertonne; gestern wurden 2 Tage angezeigt, heute nach der Aktualisiesrung dann 29 Tage + deshalb z.Zt. die Abfrage >=28. Hier muss ich mir noch was überlegen oder hat jemand schon eine Lösung ?.

Salvadore

Hallo,
Bei mir leider exakt das selben Problem, 1 Tag vor dem eigentlichen Termin wird schon wieder die Restlaufzeit bis zum nächsten Termin addiert, am Termin Tag ist dann das selbe Problem.
Gibt es hierfür eine Lösung? Hab mir jetzt extra schon icons geschnitz  die auf die Zahlen matchen. Also, ,3,2,1,0 usw.

Danke!
MFG

Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1314
Antw:Abfallkalender auswerten
« Antwort #46 am: 20 Oktober 2014, 21:13:37 »
Hallo,
ich habe hier einen Auszug aus meiner Auswertung:
sub
Abfalltermine ($)
{
  my ($Ereignis) = @_;
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my $t  = time;
  my $dtPapier = '';

   foreach my $uid (@uids) {
    my $Kalendertext = fhem("get Abfall summary $uid");
    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;
        }
    };
  my $dayDiff = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set Papiertonne $dayDiff");
  }
  }
}

Das funktioniert auch ganz gut. Jetzt ist es aber so, dass ich nur jeweils ein Jahr des Abfallkalenders nach Google hochladen kann- Für 2015 gibt es noch keine Daten.

Wenn es für die Papiertonne keinen Termin mehr im Kalender gibt, so bleibt der Countdown auf 1 stehen. Wie kann man das abfangen? In dem Fall sollte ein "-" oder der Text "kein Termin" angezeigt werden. Ich kriege das irgendwie nicht hin...

Danke,
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 Spartacus

  • Hero Member
  • *****
  • Beiträge: 1314
Antw:Abfallkalender auswerten
« Antwort #47 am: 02 Dezember 2014, 18:37:22 »
Hallo,
Bei mir leider exakt das selben Problem, 1 Tag vor dem eigentlichen Termin wird schon wieder die Restlaufzeit bis zum nächsten Termin addiert, am Termin Tag ist dann das selbe Problem.
Gibt es hierfür eine Lösung? Hab mir jetzt extra schon icons geschnitz  die auf die Zahlen matchen. Also, ,3,2,1,0 usw.

Danke!
MFG

Hallo zusammen,
ich habe inzwischen auch das Problem, dass der AbfallCountdown niemals 0 wird. Es wird dann direkt schon der nächste Termin angezeigt. Hat jemand eine funktionierenden Lösung? Es liegt offenbar an der Auswertung der Ereignisse. Die Berechnung des Countdown funktioniert einwandfrei. Die angefügte TestRoutine kann mit {Test ('EreignisID')} auferufen werden. Dann wird der Dummy korrekt gesetzt.

sub Test ($)
{
my ($uid) = @_;
my $t  = time;
my $dtDummy = '';
my $dayDiff = '';
my $dt = fhem("get cal.01.AF 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 ($dtDummy eq '' || ($eventDate < $dtDummy && $eventDate > $t))
{
 $dtDummy = $eventDate;
}
 $dayDiff = floor(($dtDummy - $t) / 60 / 60 / 24 + 1);
 if ($dayDiff >= 0)
 {
  fhem("set NN.xx.AF.Dummy.dum $dayDiff");
 }
}

Ich denke das Problem liegt in diesem Teil des Codes...

sub
Abfalltermine ($)
{
  my ($Ereignis) = @_;
  my @Ereignisarray = split(/.*:\s/,$Ereignis);
  my $Ereignisteil1 = $Ereignisarray[1];
  my @uids=split(/;/,$Ereignisteil1);
  my $t  = time;
  my $dtPapier = '';
  my $dtWertstoff = '';
  my $dtRest = '';
  my $dtPfadfinder = '';
  my $dtBeda = '';
  my $dtDummy = '';
   foreach my $uid (@uids) {
    my $Kalendertext = fhem("get cal.01.AF summary $uid");
    if ($Kalendertext =~ /Papiertonne/) {
......

Ein weiteres Problem mit dieser Abfallkalenderauswertung ist auch, wenn keine Termine mehr gefunden werden, dann bleibt der letzte Wert im Dummy stehen.

Beispiel:
letzte Leerung Papier im Kalenderjahr 2014, 01.12.14
Daten für 2015 sind vom Entsorger noch nicht bereitgestellt.


Wenn das jemand inzwischen gelöst hat, wäre ich für einen Tipp dankbar,
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 rufus999

  • Jr. Member
  • **
  • Beiträge: 71
Antw:Abfallkalender auswerten
« Antwort #48 am: 26 Dezember 2014, 11:05:55 »
Hallo liebe fhem-Gemeinde,

ich wünsche allen ein frohes Fest.

Ich verfolge schon seit Tagen diesen Thread. Ich habe mich dran gesetzt und versucht eure Beispiele auf meinen Abfallkalender zu übertragen. Aber irgendwie klappt dies nicht. Im Anhang sind meine Defines, die 99_myFhemUtils.pm,ics Datei, und meine verwendete FHEM-Version.

Altglas, Gelber Sack und Restmuell werden bei mir "befüllt". Aber erst mit den Daten ab Februar 2015, der komplette Januar fehlt (und auch der Rest von Dezember 2014).

Bei einem get Abfallkalender full all erhalte ich dieses:

040000008200E00074C5B7101A82E00800000000F0948E98AF13D00100000000000000   known upcoming                     02.02.2015 15:00:00-02.02.2015 16:00:00 Altglas
040000008200E00074C5B7101A82E00800000000B0EFDF95AF13D00100000000000000   known upcoming                     03.02.2015 15:00:00-03.02.2015 16:00:00 Restabfall und Gelber Sack
AAAAAGZiIi2teNIRh3cACMceNHwHAFVRQY8vEH1Et4vVHgRF5RMAAAFTn0EAAFVRQY8vEH updated upcoming                     29.12.2015 15:00:00-29.12.2015 16:00:00 Bioabfall

Im Prinzip spiegelt dies die Daten wieder welche in meinen Dummys landen.

Ich verstehe nur nicht wieso der komplette Januar fehlt ??? Im Forum habe ich auch Beiträge gefunden in denen beschrieben wird dass das Calender-Modul probleme mit ganztägigen Terminen haben soll. Daraufhin habe ich die ics Datei in mein Thunderbird-Lightning importiert und alle Termine von Hand umgewandelt und wieder exportiert. Leider ohne Erfolg. Wieder fehlt Januar komplett (Januar ist aber in der ics vorhanden).

Es wäre super wenn jemand eine Tipp hätte.

Vielen Dank im Voraus,

rufus999

Offline Bennemannc

  • Hero Member
  • *****
  • Beiträge: 2728
Antw:Abfallkalender auswerten
« Antwort #49 am: 26 Dezember 2014, 11:14:20 »
Hallo rufus999,

mach mal ein Update und teste dann noch einmal.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Offline fh168

  • Sr. Member
  • ****
  • Beiträge: 790
Antw:Abfallkalender auswerten
« Antwort #50 am: 28 Dezember 2014, 00:53:55 »
Hallo,

Abfall Countdown
Biomuell
9
gelber_Sack
11
Papiertonne
24
Restmuell
7
Calendar
Abfall
Active
notify
Abfall_Update
2014-12-28 00:00:00

wie oder wann wird hier heruntergezählt? Geht das automatisch? Nach Mitternacht stehen hier immer noch die gleiche Anzahl der Tage.

Ich wollte den Abfallkalender für mein neues Bilderrahmen-LED-Stripe-Projekt verwenden:
http://blog.moneybag.de/fhem-mit-led-statusanzeige-led-stripe-wd2812b-433-mhz-drahtlos-uebertragung/#more-11377

LG
/robin

// Update :  Jetzt wurde aktualisiert, automatisch hm... mal beobachten.
« Letzte Änderung: 28 Dezember 2014, 12:49:35 von fh168 »
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Offline rufus999

  • Jr. Member
  • **
  • Beiträge: 71
Antw:Abfallkalender auswerten
« Antwort #51 am: 28 Dezember 2014, 12:57:05 »
Hallo Bennemannc,

danke für deinen Tipp! Ich bin nun erheblich weiter als vorher. Aber leider nicht am Ziel  :-[

Also volgendes, nach dem Update wurden alle dummys befüllt. Diesmal auch mit Daten aus dem Monat Januar  :D
Doch leider fehlt jetzt bei allen genau die aktuelle Woche, sprich der jetzt fällige Termin.
Ich habe versucht den notify wie folgt ab zu ändern:

define Abfall_Update notify Abfallkalender:modeAlarmOrStart.* {Abfalltermine("$EVENT")}
Doch das brachte keine Änderung. Wenn ich get Abfallkalender full all
mache, bekomme ich exakt die Daten welche in meinen Dummys landen. Ich denke nicht dass dies ein Fehler in der Funktion von 99_myFhemUtils.pm ist sondern schon in dem Calender_Modul. Sonst müsste doch der Wert mit dem get Abfallkalender full all den richtigen Wert liefern oder?

Hast du noch eine Idee?

Gruß rufus999

Germanboy4u

  • Gast
Antw:Abfallkalender auswerten
« Antwort #52 am: 30 Dezember 2014, 10:08:07 »
Hier mal meine komplette utils:

Code nicht mitkopiert.

Das gleiche Prinzip funktioniert bei mir auch mit dem Ferienkalender. Den lasse ich als Countdown in fhem anzeigen...
Spartacus
Hallo Spartacus,
ich hab die gleiche Fehlermeldung wie beschrieben.
Hab dann den Inhalt von deinem Code nochmals in 99_myUtils.pm kopiert und reloaded.

also get Kalender full all bringt alle termine. Nur stehen bei Papiermüll etc nur ???

Hast du sonst noch eine Idee?

Gb4u

edit 1: Aus aller Verzweifelung hab ich nun mal 99_myFhemUtils.pm von Rufus genommen und nur Papier. Aber irgendwie steht immer noch nur "? ? ?" da.

Ergebniss von get Abfallkalender full all
llk4ea52qdkhm7shlm0l5dgq54googlecom     new upcoming                     02.01.2015 00:00:00-03.01.2015 00:00:00 Gelber Sack
7s2iq749fj13nnljvd58i4s1pcgooglecom     new upcoming                     03.01.2015 00:00:00-04.01.2015 00:00:00 Papiertonne
uhb699via0venl4vk2tqk4h5vsgooglecom     new upcoming                     08.01.2015 00:00:00-09.01.2015 00:00:00 Restmüll

define Abfallkalender Calendar ical url https://www.google.com/calendar/ical/...group.calendar.google.com/private-Zahlen/basic.ics 600
attr Abfallkalender room Kalender
define Papiertonne dummy
attr Papiertonne group Abfall Countdown
attr Papiertonne room Kalender

define Abfall_Update notify Abfallkalender:modeAlarmOrStart.* {Abfalltermine("$EVENT")}
attr Abfall_Update room Kalender
« Letzte Änderung: 30 Dezember 2014, 10:33:42 von Germanboy4u »

Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1314
Antw:Abfallkalender auswerten
« Antwort #53 am: 30 Dezember 2014, 14:39:00 »
Hallo zusammen,
tja, so richtig läuft das bei mir auch nicht. Heute war Papier und Restmüll. Dann steht der Termin unter "modeStart".
Da ich aber "modeUpcoming" auswerte, zeigt mir mein Restmüll-und Papier-Dummy schon den nächsten Termin in 14 bzw. 28 Tagen an. Ich habe keine Ahnung, wie ich das abfangen soll. Denn eigentlich müsste das Restmüll-und Papier-Dummy auf "0" stehen und erst ab morgen den Countdown starten. Mann muss irgenwie zwischen "modeStart" und "modeUpcoming" bei der Berechnung unterscheiden.

@Germanboy4u
kannst Du die Rroutine in der myUtils zu Fuß aufrufen? Kontrolliere noch mal die Schreibweise der Dummy-Devices. Ggf. musst Du auch den Suchstring anpassen. Das hängt von Deinem Kalender ab. Bei mir steht Papiertonne, Restmuell,etc. direkt in der Kalenderbeschreibung

ein "get Kalender full all" sieht bei mir so aus:
gwa_364PTF_20141230   known    start                     30.12.2014 00:00:00-31.12.2014 00:00:00 Papiertonne
gwa_364RM22_20141230   known    start                     30.12.2014 00:00:00-31.12.2014 00:00:00 Restmüll
gwa_6SM2_20150106   known upcoming                     06.01.2015 00:00:00-07.01.2015 00:00:00 Wertstofftonne
gwa_8WB12_20150108   known upcoming                     08.01.2015 00:00:00-09.01.2015 00:00:00 Weihnachtsbaum
gwa_13RM22_20150113   known upcoming                     13.01.2015 00:00:00-14.01.2015 00:00:00 Restmüll
gwa_20SM2_20150120   known upcoming                     20.01.2015 00:00:00-21.01.2015 00:00:00 Wertstofftonne .
Spartacus.
« Letzte Änderung: 30 Dezember 2014, 14:44:29 von 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

Germanboy4u

  • Gast
Antw:Abfallkalender auswerten
« Antwort #54 am: 30 Dezember 2014, 15:04:25 »
Ich frage momentan nur Papiertonne ab. Und das ist genauso wie bei dir.

Wie führe ich die Routine per Hand aus?

Sollte erwähnen, dass bei mir irgendwie kein Script vernünftig läuft :( Kalender, TV Programm, Wetter...

Enigma2 und Onkyo AV laufen. Mehr hab ich noch nicht zum Steuern ;)

Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1314
Antw:Abfallkalender auswerten
« Antwort #55 am: 30 Dezember 2014, 15:28:21 »
Hi,
z.b. so:
{Abfalltermine("modeStart: gwa_364RM22_20141230")}"gwa_364RM22_20141230" steht bei mir für Restmüll-Eintrag und steht heute unter modeStart.
"Abfalltermine" ist die Sub-Routine in der myUtils.
"gwa_364RM22_20141230" ist der Kalendereintrag

"modeStart" kannst Du natürlich auch durch "modeUpcoming" ersetzten und dann einen gültigen Eintrag aus dem Kalender nutzen. Guck mal in Deinen Kalender, welche Einträge da unter modeStart und modeUpcoming stehen...

Der o.a. Aufruf setzt mein Restmüll Dummy auf "0". So sollte es auch eigentlich sein! Ich denke man muss das Ganze so anpassen, dass man immer modeStart abfragt und nur wenn da nichts drin steht, die Werte aus modeUpcoming verarbeitet und in die Dummy-Devices schreibt. Aber so gut bin ich in Perl einfach nicht, dass ich das hinkriegen würde...
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

Germanboy4u

  • Gast
Antw:Abfallkalender auswerten
« Antwort #56 am: 30 Dezember 2014, 19:05:37 »
Irgendwie mag er nicht :(

Wenn ich {Abfalltermine("modeStart: gwa_364RM22_20141230")} oben in das Feld eingebe passiert entweder gar nix oder der Bildschirm wird weiß.

Habe für Heute einen Restmüll Termin gemacht. Hat er auch im Kalender (laut get full all), aber dann passier nix :(


Offline Spartacus

  • Hero Member
  • *****
  • Beiträge: 1314
Antw:Abfallkalender auswerten
« Antwort #57 am: 30 Dezember 2014, 20:32:23 »
Hi,
poste mal Deine Sub-Routine. Und die/das Dummy-Devices. Und wichtig ist, dass der Anfang der myUtils so aussieht:
package main;
use strict;
use warnings;
use POSIX;
use Time::Local;
sub myAbfallTermine_Initialize($$)
{
 my ($hash) = @_;
}
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 Franz Tenbrock

  • Hero Member
  • *****
  • Beiträge: 1353
  • trotz 1000 Beiträgen immer noch Anfänger :-(
Antw:Abfallkalender auswerten
« Antwort #58 am: 01 Januar 2015, 17:39:15 »
Hallo
leider komme ich als Anfänger mit all dem was ich hier gelesen habe nicht weiter
alles hin und her probiert
Hab den ical Datei geladen und auf den cubie kopiert. dort wird er ja auch wohl gefunden

wenn ich nun
get Abfall full all
eingebe kommt das hier, damit sollte der Abfallkalender ja gefunden werden
AAAAAPfEYbUEorlLn3Vz8M6v5QwkACAA     new upcoming                     02.01.2015 06:00:00-02.01.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QxEACAA     new upcoming                     08.01.2015 06:00:00-08.01.2015 06:00:00 Abfuhr Weihnachtsbäume - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QxkACAA     new upcoming                     09.01.2015 06:00:00-09.01.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QyEACAA     new upcoming                     15.01.2015 06:00:00-15.01.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QykACAA     new upcoming                     21.01.2015 06:00:00-21.01.2015 06:00:00 Abfuhr Altpapier - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QzEACAA     new upcoming                     23.01.2015 06:00:00-23.01.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QzkACAA     new upcoming                     29.01.2015 06:00:00-29.01.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QwEASAA     new upcoming                     06.02.2015 06:00:00-06.02.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QwkASAA     new upcoming                     12.02.2015 06:00:00-12.02.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QxEASAA     new upcoming                     18.02.2015 06:00:00-18.02.2015 06:00:00 Abfuhr Altpapier - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QxkASAA     new upcoming                     20.02.2015 06:00:00-20.02.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QyEASAA     new upcoming                     26.02.2015 06:00:00-26.02.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QykASAA     new upcoming                     06.03.2015 06:00:00-06.03.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QzkASAA     new upcoming                     12.03.2015 06:00:00-12.03.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QzEASAA     new upcoming                     12.03.2015 06:00:00-12.03.2015 06:00:00 Abfuhr Gartenabfälle Frühjahr - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QwEAiAA     new upcoming                     18.03.2015 06:00:00-18.03.2015 06:00:00 Abfuhr Altpapier - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QwkAiAA     new upcoming                     20.03.2015 06:00:00-20.03.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QxEAiAA     new upcoming                     26.03.2015 06:00:00-26.03.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QxkAiAA     new upcoming                     02.04.2015 06:00:00-02.04.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QyEAiAA     new upcoming                     10.04.2015 06:00:00-10.04.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QykAiAA     new upcoming                     15.04.2015 06:00:00-15.04.2015 06:00:00 Abfuhr Altpapier - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QzEAiAA     new upcoming                     17.04.2015 06:00:00-17.04.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QzkAiAA     new upcoming                     23.04.2015 06:00:00-23.04.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QwEAyAA     new upcoming                     02.05.2015 06:00:00-02.05.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QwkAyAA     new upcoming                     07.05.2015 06:00:00-07.05.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QxEAyAA     new upcoming                     13.05.2015 06:00:00-13.05.2015 06:00:00 Abfuhr Altpapier - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QxkAyAA     new upcoming                     16.05.2015 06:00:00-16.05.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QyEAyAA     new upcoming                     21.05.2015 06:00:00-21.05.2015 06:00:00 Abfuhr Restmüll u. Bioabfall - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QykAyAA     new upcoming                     30.05.2015 06:00:00-30.05.2015 06:00:00 Abfuhr LVP (Gelbe Tonne/gelber Sack) - Bezirk 1
AAAAAPfEYbUEorlLn3Vz8M6v5QzEAyAA     new upcoming                     05.06.2015 06:00:00-05
und so weiter...

meine cfg hab ich mir hier zusammengeklaut
###############################################################################
###########                 Abfallkalender                           ##########
###############################################################################
#define Abfall Calendar ical file ./Daten/Glattbach-2015-1420048010.ics 600

define Abfall Calendar ical file ./Daten/Abfallkalender2015_iCal-Import_Bezirk1.ics
attr Abfall alias Abfallkalender
attr Abfall room Kalender


define BiomuellIn dummy
attr BiomuellIn room Kalender

define GelbeTonneIn dummy
attr GelbeTonneIn room Kalender

define RestmuellIn dummy
attr RestmuellIn room Kalender

define PapierIn dummy
attr PapierIn room Kalender

define AltholzIn dummy
attr AltholzIn room Kalender

define SchadstoffIn dummy
attr SchadstoffIn room Kalender

define GruenIn dummy
attr GruenIn room Kalender

#define Abfall_Update notify Abfall:modeAlarmOrStart.* {Abfalltermine("$EVENT")}
define Abfall_Update notify Abfall:modeUpcoming.* {Muelltermine("$EVENT")}
attr Abfall_Update room Kalender
#define Abfall_Update notify Abfall:modeUpcoming.* {Abfalltermine("$EVENT")}
wie man am Ende sieht alle möglichen Varianten probiert

meine 99_myUtils.pm  sieht im Moment so aus
package main;
use strict;
use warnings;
use POSIX;
use Time::Local;
sub myAbfallTermine_Initialize($$)
{
 my ($hash) = @_;
}

# 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;
        }
    };

  };
  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");
  }
}

das kommt davon wenn man zu wenig Plan von der Programmiersprache hat
trotz allem fände ich es klasse wenn meine Frau sehen würde wann die Tonne raus muss
bin mittlerweile confused
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Offline Franz Tenbrock

  • Hero Member
  • *****
  • Beiträge: 1353
  • trotz 1000 Beiträgen immer noch Anfänger :-(
Antw:Abfallkalender auswerten
« Antwort #59 am: 01 Januar 2015, 19:06:04 »
so etwas weiter und scheinbar hab ich einiges von dem code auch verstanden

Restmüll, Altpapier und Gelbe Tonne wird durch Nachbearbeitung der 99_utils nun richtig angezeigt
und noch mehr !
Ich muss auch an meinem Arbeitspatz die Tonnen rausstellen
leider ein anderer bezirk
da ich das hier nun aber verstanden habe, habe ich etwas experimentiert und recht schnell auch den 2. Kalender integriert.
Es werden nun also 2 Bezirke gleichzeitig angezeit
das ist obercool

(http://abfallkalender.PNG)
was noch fehlt wäre eine farbige Darstellung, grün alles über 3 Tage
gelb noch 2 Tage. rot es wird Zeit
bei meiner Energieampel konnte ich das über valuestyle ganz einfach realisieren,
hat da jemand einen Tip ?

###############################################################################
###                      Abfallkalender                                    ####
###
###############################################################################

define AbfallA Calendar ical file ./Daten/Abfallkalender2015_iCal-Import_Bezirk1.ics
attr AbfallA alias Abfallkalender In der Baut
attr AbfallA room Kalender


define AbfallB Calendar ical file ./Daten/Abfallkalender2015_iCal-Import_Bezirk4.ics
attr AbfallB alias Abfallkalender Hochstrasse
attr AbfallB room Kalender

define GelbeTonneA dummy
attr GelbeTonneA alias In der Baut - Gelbe Säcke
attr GelbeTonneA group Info
attr GelbeTonneA room Kalender

define GelbeTonneB dummy
attr GelbeTonneB alias Hochstrasse - Gelbe Säcke
attr GelbeTonneB group Info
attr GelbeTonneB room Kalender

define RestmuellA dummy
attr RestmuellA alias In der Baut - Restmüll
attr RestmuellA group Info
attr RestmuellA room Kalender

define RestmuellB dummy
attr RestmuellB alias Hochstrasse - Restmüll
attr RestmuellB group Info
attr RestmuellB room Kalender

define AltpapierA dummy
attr AltpapierA alias In der Baut - Altpapier
attr AltpapierA group Info
attr AltpapierA room Kalender

define AltpapierB dummy
attr AltpapierB alias Hochstrasse - Altpapier
attr AltpapierB group Info
attr AltpapierB room Kalender

define AbfallA_Update notify AbfallA:modeUpcoming.* {MuelltermineA("$EVENT")}
attr AbfallA_Update room Kalender


define AbfallB_Update notify AbfallB:modeUpcoming.* {MuelltermineB("$EVENT")}
attr AbfallB_Update room Kalender

und hier die utils
package main;
use strict;
use warnings;
use POSIX;
use Time::Local;
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 $t  = time;
  my $dtBio = '';
  my $dtYellow = '';
  my $dtRest = '';
  my $dtPapier = '';
  my $dtAltholz = '';
  my $dtSchadstoff = '';
  my $dtGruen = '';
  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 =~ /Gelbe Tonne/) {
        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 =~ /Restmüll/) {
        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;
        }
    };
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 ($dtAltholz eq '' || ($eventDate < $dtAltholz && $eventDate > $t))
        {
          $dtAltholz = $eventDate;
        }
    };
if ($Kalendertext =~ /Glas/) {
        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 ($dtSchadstoff eq '' || ($eventDate < $dtSchadstoff && $eventDate > $t))
        {
          $dtSchadstoff = $eventDate;
        }
    };

  };
  my $dayDiffB = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffB >= 0) {
    fhem("set BioabfallA $dayDiffB");
  }
  my $dayDiffG = floor(($dtYellow - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffG >= 0) {
    fhem("set GelbeTonneA $dayDiffG");
  }
  my $dayDiffR = floor(($dtRest - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffR >= 0) {
    fhem("set RestmuellA $dayDiffR");
  }
  my $dayDiffP = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffP >= 0) {
    fhem("set AltpapierA $dayDiffP");
  }
  my $dayDiffH = floor(($dtAltholz - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffH >= 0) {
    fhem("set MetallA $dayDiffH");
  }
  my $dayDiffS = floor(($dtSchadstoff - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffS >= 0) {
    fhem("set GlasA $dayDiffS");
  }
  my $dayDiff = floor(($dtGruen - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set GruenA $dayDiff");
  }
}
sub MuelltermineB ($)
{
  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 AbfallB summary $uid");
    if ($Kalendertext =~ /Bioabfall/) {
        my $dt = fhem("get AbfallB 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 AbfallB 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 AbfallB 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 AbfallB 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 =~ /Bioabfall/) {
        my $dt = fhem("get AbfallB 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 AbfallB 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;
        }
    };

  };
  my $dayDiffB = floor(($dtBio - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffB >= 0) {
    fhem("set BioabfallB $dayDiffB");
  }
  my $dayDiffG = floor(($dtYellow - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffG >= 0) {
    fhem("set GelbeTonneB $dayDiffG");
  }
  my $dayDiffR = floor(($dtRest - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffR >= 0) {
    fhem("set RestmuellB $dayDiffR");
  }
  my $dayDiffP = floor(($dtPapier - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffP >= 0) {
    fhem("set AltpapierB $dayDiffP");
  }
  my $dayDiffH = floor(($dtAltholz - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffH >= 0) {
    fhem("set MetallB $dayDiffH");
  }
  my $dayDiffS = floor(($dtSchadstoff - $t) / 60 / 60 / 24 + 1);
  if ($dayDiffS >= 0) {
    fhem("set GlasB $dayDiffS");
  }
  my $dayDiff = floor(($dtGruen - $t) / 60 / 60 / 24 + 1);
  if ($dayDiff >= 0) {
    fhem("set GruenB $dayDiff");
  }
}

in der utils ist zwar noch überflüssiger code den hab ich aber mal dringelassen ev kann ihn ja jemand brauchen

 8)    ;D

ich hoffe das hilft auch anderen
und danke für die Hilfe
« Letzte Änderung: 01 Januar 2015, 21:51:58 von Franz Tenbrock »
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

 

decade-submarginal