Ankündigung

Einklappen
Keine Ankündigung bisher.

"Müllverwaltung"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] "Müllverwaltung"

    Hallo zusammen,

    ich habe (nachdem ich trotz eMail-Reminder kürzlich mal wieder vergessen hatte die Mülltonne rauszustellen), mich mal an einem Müll-Script versucht (Ich entschuldige mich jetzt schon für den gleich folgenden Spaghetti-Code ).

    Die Idee war folgende:
    Es gibt bei uns vier verschiedene Arten von Müll (Restmüll, Papier, Bio und gelber Sack (Wertstoff)). Die Termine habe ich in vier separate Dateien abgelegt (wäre wahrscheinlich auch eleganter in einer csv-Datei gegangen, aber mit den separaten Dateien war es für mich am einfachsten). Ich habe diese unter /etc/userfiles/abfall/*.csv abgelegt (aufgrund mangelnder Linux-Kenntnisse weiß ich nicht, ob das Verzeichnis optimal ist, aber kann ja nach Belieben geändert werden). In diesen vier Dateien sind die Termine für die Abholungen eingetragen (Wichtig: müssen im Format TT.MM.JJJJ sein).
    Am einfachsten (für nicht-Linuxianer) lassen sich die Dateien meiner Meinung nach mit WinSCP :: Download kopieren.
    Da das Script nicht überprüft, ob Termine in der Vergangenheit sind, sollten nur kommende Termine eingetragen werden.

    Da ich auf der Visu nicht allzuviel Platz für vier Abholtermine verschwenden wollte, und es bei uns auch recht selten vorkommt, dass verschiedene Tonnen am selben Tag geholt werden, habe ich den Zustand der einzelnen Tonnen addiert. Somit ergibt sich ein Gesamtwert, der auch an die Visu übergeben wird (z.B. hat Restmüll 1 und Biomüll 4, wenn also beide am nächsten Tag geholt werden, wird eine 5 übergeben).
    An der Visu kann der jeweils eingeblendete Abholtermin bestätigt werden. Je nachdem ob es noch weitere gibt, werden dann diese zum Bestätigen eingeblendet oder das Feld bleibt leer.

    Zu guter letzt habe ich noch zur visuellen Darstellung im Haus RGB-LED´s angesteuert, die, wenn Müll am nächsten Tag geholt wird, entsprechend die Farbe ändern (in dem Script werden sie von standard hellblau auf pink geändert).

    Hier mal der Code:

    Code:
    $plugin_info{$plugname.'_cycle'} = 900;
    $plugin_subscribe{"4/3/99"}{$plugname} = 1;
    $plugin_subscribe{"1/2/150"}{$plugname} = 1;
    
    use Date::Calc qw(:all);
    
    ### Formatieren des Datums
    
    my ($Jahr, $Monat, $Tag) = Today();
    my ($mJahr,$mMonat,$mTag) = Add_Delta_Days(Today(),1);
    $Tag = ($Tag < 10) ? "0".$Tag : $Tag;
    $Monat = ($Monat < 10) ? "0".$Monat : $Monat;
    $mTag = ($mTag < 10) ? "0".$mTag : $mTag;
    $mMonat = ($mMonat < 10) ? "0".$mMonat : $mMonat;
    
    my $heute = $Tag . "." . $Monat . "." . $Jahr;
    my $morgen = $mTag . "." . $mMonat . "." . $mJahr;
    my $muellwert = 0;
    my $multiplier = 1;
    
    ### Hier werden die vier Dateien ausgelesen und bei Bedarf die entsprechende Variable aktualisiert
    ### Die Dateien müssen genauso heißen (rest.csv, papier.csv etc.):
    my @muellarten = ("rest","papier","bio","wertstoff");
    foreach my $muell(@muellarten){
      if (($plugin_info{"next_".$muell} eq "") or ($plugin_info{"next_".$muell} eq $heute)) {
        $plugin_info{"confirm_".$muell} = 0;
        open(File,'</etc/userfiles/abfall/'.$muell.'.csv');
        my @muellfile = <File>;
        $plugin_info{"next_".$muell} = trim(shift(@muellfile));
        close(File);
        open(File,'>/etc/userfiles/abfall/'.$muell.'.csv');
        foreach my $line(@muellfile){
          print File $line;
        };
        close(File);
      }
      if (($plugin_info{"next_".$muell} eq $morgen) and ($plugin_info{"confirm_".$muell} != 1)){
        $muellwert+= $multiplier;
      }
      $multiplier*=2;
    }
    ### Hier wird die Bestätigung der Visu abgefangen und verarbeitet
    if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq "4/3/99") {
      SELECT:{
        if ($muellwert >= 8){&confirm_muell("wertstoff",8); last SELECT; }
        if ($muellwert >= 4){&confirm_muell("bio",4); last SELECT; }
        if ($muellwert >= 2){&confirm_muell("papier",2); last SELECT; }
        if ($muellwert == 1){&confirm_muell("rest",1); last SELECT; }
      }
      #Hier wird überprüft, ob das Licht eingeschaltet ist, und falls ja werden die Farben auf "Standard" geändert
      if (($muellwert == 0) and (knx_read("1/2/120",1) eq "100.0")){
        &set_farbe(80,100,100);
      }
    }
    
    knx_write("4/3/100",$muellwert,5.010);
    
    if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq "1/2/150" and $msg{'data'} eq "01") {
      if ($muellwert >0) {  # and ((Now())[0] >=18)) { Hier wäre es möglich, erst ab 18.00 Uhr die Farbe zu ändern.
        &set_farbe(100,0,80);
      } else {
        &set_farbe(80,100,100);
      }
    }
    
    sub confirm_muell {
      $plugin_info{"confirm_".$_[0]} = 1;
      $muellwert-=$_[1];
    }
    sub set_farbe {
      knx_write("1/2/120",$_[0]);
      knx_write("1/2/130",$_[1]);
      knx_write("1/2/140",$_[2]);
    }
    
    return $muellwert;
    Ich habe es so geschrieben, dass das Lesen und Schreiben der Dateien nur einmal je Abholzyklus stattfindet um die Ausführungszeit des Scriptes möglichst kurz zu halten.

    Es wird für die Berechnung des nächsten Tages noch das Paket libdate-calc-perl benötigt. Dies kann mittels apt-get install libdate-calc-perl an der Konsole installiert werden.

    Die GA 1/2/150 ist der Präsenzmelder, der die LED´s ein/ausschaltet.
    4/3/99 und 4/3/100 sind "unechte" GA´s die nur für die "Kommunikation" mit der Visu notwendig sind.
    1/2/120, 130 und 140 sind die einzelnen RGB-Farben der LED´s.

    Zu guter letzt wären noch die Einstellungen an der Visu (CometVisu). Diese habe ich in der visu_config.xml wie folgt gelöst:

    Unter <Mappings> habe ich folgendes hinzugefügt:

    Code:
          <mapping name="Muell">
            <entry value="0"> </entry>
            <entry value="1">Restmüll morgen</entry>
            <entry range_min="2" range_max="3">Papiermüll morgen</entry>
            <entry range_min="4" range_max="7">Biomüll morgen</entry>
            <entry range_min="8" range_max="15">Gelber Sack morgen</entry>
          </mapping>
          <mapping name="Muell_confirm">
            <entry value="99">Bestätigen</entry>
          </mapping>
    Und dann noch die eigentliche Darstellung im Page-Bereich:

    Code:
        <info mapping="Muell">
          <label>Müll:</label>
          <address transform="" readonly="false" variant="">4/3/100</address>
        </info>
        <trigger value="99" mapping="Muell_confirm" styling="RedGreen" align="left">
          <label> </label>
          <address transform="" readonly="false" variant="">4/3/99</address>
        </trigger>
    Im Anhang habe ich noch zwei Bilder der Visu.

    Ich denke, dass man die Lösung in den seltensten Fällen 1:1 übernehmen kann, aber ich dachte, ich stelle es mal zur Verfügung, evtl. dient es ja auch als kleine Inspiration für ähnliche Vorhaben.
    Über Verbesserungsvorschläge und Feedback würde ich mich natürlich auch freuen.

    Viele Grüße
    Christian
    Angehängte Dateien
    Viele Grüße
    Christian

    #2
    Hallo
    Hast Du schon mal bei deinem Entsorger nachgefragt ob sie einen Abfallkalender als Datei haben.
    Meiner hat ein iCal-Kalender-Datei, die kann man einfach mit einem Plugin auslesen.
    Man sucht in der Datei nach dem aktuellen Datum und 8Zeilen weiter steht die Art der Abfallentsorgung.
    Ich habe zur Zeit auch so ein Plugin in Arbeit.
    Gruß NetFritz
    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

    Kommentar


      #3
      Hi Netfritz,
      zum downloaden gibt es nur einen Abfallkalender als pdf-Datei. Deshalb muss ich da aktuell einmal pro Jahr die Termine abtippen. Da ich das aber zusätzlich noch für ein Excel-Makro nutze, welches aus den Terminen meine Kalendereinträge für Outlook erstellt, ist es halb so wild. Eine Datei wäre natürlich noch schöner, würde beides ersparen. Muss ich bei Gelegenheit mal nachfragen, ob die bei uns eine Datei zur Verfügung stellen.
      Danke für die Info.
      Viele Grüße
      Christian

      Kommentar


        #4
        Zitat von NetFritz Beitrag anzeigen
        Hallo
        Meiner hat ein iCal-Kalender-Datei, die kann man einfach mit einem Plugin auslesen.
        Art der Abfallentsorgung.
        Meiner liefert das hier:
        Code:
        BEGIN:VEVENT
        DTSTART;VALUE=DATE:20120102
        DTEND;VALUE=DATE:20120103
        DTSTAMP:20120209T010000Z
        CLASS:PUBLIC
        DESCRIPTION:www.entsorgungsdaten.de
        SEQUENCE:0
        STATUS:CONFIRMED
        SUMMARY:Restmüll in Markt Regenstauf: Regenstauf (gesamt)
        TRANSP:TRANSPARENT
        END:VEVENT
        BEGIN:VEVENT
        DTSTART;VALUE=DATE:20120109
        DTEND;VALUE=DATE:20120110
        DTSTAMP:20120209T010000Z
        CLASS:PUBLIC
        DESCRIPTION:www.entsorgungsdaten.de
        SEQUENCE:0
        STATUS:CONFIRMED
        SUMMARY:Papiertonne in Markt Regenstauf: Regenstauf westlich vom Regen (mit: am Spangl\, Bahnweg\, Gutenbergstraße)\, Diesenbach\, Steinsberg\, Eitlbrunn\, Ramspau\, Hirschling\, Hagenau\, Kleinramspau\, Wöhrhof\, Heilinghausen\, Karlstein\, Schneitweg
        TRANSP:TRANSPARENT
        END:VEVENT
        Baust du da Abfragen auf Schlüsselwörter in SUMMARY ein?

        Da melde ich mich auch schon mal an wenn das Plugin fertig ist.
        Wenn jemand zum Testen gebraucht wird, mache ich gerne....

        Gruß
        Sascha

        Kommentar


          #5
          Hallo

          Es wird nach dem Tag gesucht
          DTSTART;VALUE=DATE:20120305
          und dann 8 Zeilen weiter nach
          SUMMARY;LANGUAGE=de:Restmuell

          Bei Dir sind es nur 7Zeilen aber das ist kein Problem.

          Wenn ich meinen iCal-Kalender Downloaden will muss ich den Wohnort und Strasse mit Hausnummer eingeben,
          dann bekommen ich einen Kalender der genau zu meinen Haus passt.Dadurch habe ich da auch nur z.B. Restmüll
          stehen.

          Gruß NetFritz
          KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
          WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
          PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

          Kommentar


            #6
            Hallo
            Hier mal mein Abfall-Plugin.
            Code:
            # sucht aus den iCal Abfallkalender der BAWN Nienburg den Abfalltermin
            # liefert Tag und Abfallsorte
            # schreibt beide in GA 
            # 02.2012 by NetFritz
            #############################################################
            # file muss jedes Jahr angepasst werden
            my $file = '/var/www/myhouse/Leerungstermine0008207.ics';
            # http://www.lk-nienburg.de/bawn/page.php?site=1000021&typ=3
            my $abfall_termin_ga = "15/0/7";
            my $abfall_art_ga = "15/0/8";
            ##############################################################
            # Eigenen Aufruf-Zyklus auf 3600 Sekunden setzen
            # der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!
            $plugin_info{$plugname.'_cycle'} = 3600;
            # Datum muss so ausehen "20120206"
            # Morgen
            my @day = reverse((localtime(time + 86400))[3 .. 5]);
            $day[0] += 1900; $day[1]++;
            my $day_morgen = sprintf("%04d%02d%02d", @day); 
            my $art_morgen = &hole_termin($file,$day_morgen);
              if(!$art_morgen eq ""){
                 knx_write($abfall_termin_ga,"Morgen",16);
                 knx_write($abfall_art_ga,$art_morgen,16);
              }
            # Heute
            chomp(my $now = `date "+%Y%m%d"`); # hole Datum
            my $art_heute = &hole_termin($file,$now);
              if(!$art_heute eq ""){
                knx_write($abfall_termin_ga,"Heute",16);
                knx_write($abfall_art_ga,$art_heute,16);
              }
              if($art_heute eq "" and $art_morgen eq "" ){
                knx_write($abfall_termin_ga,"Heute",16);
                knx_write($abfall_art_ga,"keine Abfuhr",16);
              }
            #
            #-------------------- Sub -----------------------------#
            sub hole_termin {
               my $sub_file = shift;
               my $sub_now = shift;
               my $such = 'DTSTART;VALUE=DATE:'. $sub_now; # Tag der Sammlung danach wird gesucht
               my $i = 0;
               my $ifund = 9999; # muss hoeher als anzahl der linien sein
               my ($tag,$art); # abfuhr tag u. abfall art
               open(my $fh, '<', $sub_file) or die ("ERROR open: $sub_file ($!)\n");
                 while(my $line=<$fh>){
                     $i++;
                     # $line=~s/ //g; # entfernt nur die leerzeichen:
                     $line=~s/\s+//g; # entfernt auch die steuerzeichen
                     if ($line eq $such){
                         $ifund = $i; # gefundene Zeile merken
                     }
                     # sucht aus "SUMMARY;LANGUAGE=de:Restmuell" die Abfallart
                     # 8 Zeilen tiefer wie Datum
                     if($i eq $ifund + 8  ){
                        $art = substr($line,20);
                        return($art);
                     }         
               }
               return;
               close($fh);
            }
            return($art_heute.$art_morgen);
            Ewtl. muss das Plugin noch eigenen Bedürfnissen angepasst werden.

            Ich lese aus der iCal-Datei nur 2 Zeilen je Abfuhr aus.
            Den Abfuhrtermin um den Termin zu finden..
            "DTSTART;VALUE=DATE:20120123"

            Die Abfallart.
            "SUMMARY;LANGUAGE=de:Restmuell"

            Die iCal-Datei wird 2 mal ausgelesen.
            Das erste mal um einen Termin Morgen zu finden und
            das zweite mal um einen Termin Heute zu finden.

            Ich habe Termin und Abfallart in 2 GA gelegt weil eine GA nur 13 Byte fasst.
            Wenn die CV mal Icons anzeigen kann, das leicht auf Icon-Anzeige umstellen.

            Gruß NetFritz
            KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
            WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
            PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

            Kommentar


              #7
              hallo netfritz, hab dein plugin mit erfolg eingebunden und etwas angepasst. wenn ich das script aber richtig interpretiere, kommt es ins stolpern, wenn heute restmüll ist und morgen papier/blaue tonne . liege ich richtig, oder ? denn dann wäre auf der ga für art für heute restmüll und für morgen blaue tonne. da die funktion heute nach der funktion morgen aufgerufen wird, wird so der morgige wert mit dem von heute überschrieben. kommt bei uns auch wirklich vor, morgen ist zB restmüll und übermorgen papier. die richtige anzeige, wenn ich das morgen aufrufe, wäre: heute restmüll, morgen papier. er zeigt mit deinem script aber nur restmüll an.

              Kommentar


                #8
                Hallo
                Das mit heute und morgen ist schon so gewollt.
                Man kann es leicht ändern, es wird dann noch zwei GAs benötigt.
                Gruß NetFritz
                KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                Kommentar


                  #9
                  Hallo zusammen,

                  ich habe mich auch einmal an eine Auswertung eines Abfallkalenders gemacht.

                  Wichtig waren mir hierbei:
                  - Auswertung der durch den Entsorger bereitgestellten iCal Datei
                  - Auswertung mehrerer Müllsorten je Tag mit individuellen Abholzeiten
                  - Ausgabe über einen eindeutigen Status (auch mit mehreren Sorten je Tag über kumulierte Potenzwerte) > dieser Status kann in der Visu in einen vernünftigen Text gemappt werden
                  - Rücksetzen der Meldung über eine GA

                  Code:
                  # Plugin: Entsorgungsdaten
                  # Version 1.0
                  # License: GPL (v3)
                  #
                  # Plugin zum analysieren einer iCal Datei für Meldungen z. B. Abfallkalender
                  # - Die Meldungen werden als eindeutiger Code auf einer Gruppenadresse ausgegeben
                  # - Die Codes sind so gestaltet, daß mehrere Zustände ausgegeben werden
                  #   Die Klarschrift Ausgabe in der Visu kann dann in einem Mapping zu Texten oder Symbolen erfolgen.
                  # - Mit einer Gruppenadresse kann die Meldung bis zum nächsten Ereignis zurückgesetz werden.
                  
                  
                  ## Beginn Definitionen ##
                  
                  # Die iCal muss jedes Jahr angepasst werden
                  my $Datei		= '/myDATA/entsorgungsdaten_de_2012_markt_regenstauf.ics'; 
                  				# http://www.entsorgungsdaten.de/module.php5?fid=15&gem=31&mod=entsorgungsdaten
                  my $PrefixDate	= "DTSTART;VALUE=DATE:";
                  my $PrefixArt	= "SUMMARY:";
                  
                  my $GA_Sammelmeldung			= "0/2/220"; # DPT 5.010
                  #my $GA_SammelmeldungDatum		= "0/2/221"; # optional DPT 11.001
                  #my $GA_SammelmeldungZeit		= "0/2/222"; # optional DPT 10.001
                  my $GA_SammelmeldungReset		= "0/2/224"; # DPT 1	
                  
                  # Definition der Zustände
                  # Name					=> Klarnname für Log Meldungen
                  # SuchText				=> Text nach dem der Betreff durchsucht werden soll
                  # AbholungStd			=> Stunde zu der die Abholung erfolgt
                  # AbholungMin			=> Minuten zu der die Abholung erfolgt
                  # MeldungStdVorAbholung	=> Anzahl der Stunden vor der abholung zu der die Meldung erfolgt
                  # GA_Meldung			=> optionale Gruppenadresse für Einzelmeldung (DPT 1)
                  my @EntsorgungsArten =(
                  	{ Name => "Mülltonne",		SuchText => "Restm",	AbholungStd => 7,	AbholungMin => 0,	MeldungStdVorAbholung => 8+7,	GA_Meldung => "0/2/225"},
                  	{ Name => "Papiertonne",	SuchText => "Papier",	AbholungStd => 11,	AbholungMin => 0,	MeldungStdVorAbholung => 8+11,	GA_Meldung => "0/2/226"},
                  );
                  ## Ende Definitionen ##
                  
                  
                  use Time::Local;
                  use POSIX;
                  $plugin_info{$plugname.'_cycle'} = 60*60;		# Aufruf-Zyklus auf 1 Stunde setzen
                  
                  $plugin_subscribe{$GA_SammelmeldungReset}{$plugname} = 1;
                  if ($msg{'apci'} eq 'A_GroupValue_Write' and $msg{'dst'} eq $GA_SammelmeldungReset) {
                  	foreach my $element (@EntsorgungsArten) {
                  		if ($msg{'value'} eq 0) {
                  			$plugin_info{$plugname.'_'.$element->{Name}."_ResetUntil"} 	= 0;
                  		} else {
                  			$plugin_info{$plugname.'_'.$element->{Name}."_ResetUntil"} 	= $plugin_info{$plugname.'_'.$element->{Name}."_AbholungNext"};
                  			$plugin_info{$plugname.'_'.$element->{Name}."_AbholungNext"} 	= 0;
                  			knx_write($GA_Sammelmeldung,0,5.010);
                  			plugin_log($plugname,$element->{Name}." zurückgesetzt");
                  		}
                  	}
                  	if ($msg{'value'} eq 1) {
                  		return("Entsorgungsdaten zurückgesetzt");
                  	}	
                  }	
                  
                  #Zeitvariablen definieren
                  my ($Sekunde,$Minute,$Stunde,$TagMonat,$Monat,$Jahr,$Wochentag,$TagJahr) = localtime(time);
                  $Jahr += 1900;
                  
                  my $i=0;
                  my ($ZeitAbholung,$MaxMeldungStdVorAbholung,$MaxZeitAbholung,$VorschauTage,$BeginnVorschau);
                  plugin_log($plugname,"Code für Keine Daten = 1");
                  foreach my $element (@EntsorgungsArten) {
                  	$i++;
                  	$ZeitAbholung = timelocal(0,$element->{AbholungMin},$element->{AbholungStd},$TagMonat,$Monat,$Jahr-1900);
                  	if ($MaxZeitAbholung < $ZeitAbholung) {
                  		$MaxZeitAbholung = $ZeitAbholung;
                  	}
                  	if ($MaxMeldungStdVorAbholung < $element->{MeldungStdVorAbholung}) {
                  		$MaxMeldungStdVorAbholung = $element->{MeldungStdVorAbholung};	
                  	}
                  	plugin_log($plugname,"Code für ".$element->{Name}." = ".2 ** $i);
                  	$plugin_info{$plugname.'_'.$element->{Name}."_AbholungNext"} 	= 0;
                  	if (! $element->{GA_Meldung} eq undef) {
                  		knx_write($element->{GA_Meldung},0);
                  	}
                  }
                  $VorschauTage = ceil($MaxMeldungStdVorAbholung / 24);
                  $BeginnVorschau = timelocal(0,0,0,$TagMonat,$Monat,$Jahr-1900);
                  if ($MaxZeitAbholung < time) {
                  	$BeginnVorschau += 60*60*24;
                  }
                  $plugin_info{$plugname."_AbholungNext"} 	= 0;
                  
                  knx_write($GA_Sammelmeldung,0,5.010);
                  my ($TagAbholung,$MonatAbholung,$JahrAbholung,$ZeitAbholung,$NextAbholung);
                  my ($Sammelmeldung,$Daten);
                  local $/ = "\n";
                  open(my $file, '<', $Datei) or die ("ERROR open: $Datei ($!)\n");
                  while(my $line=<$file>){
                  	$line=~s/\s+//g;
                  	if(index($line,$PrefixDate) >= 0) {
                  		$TagAbholung = substr($line,length($PrefixDate)+4+2,2);
                  		$MonatAbholung = substr($line,length($PrefixDate)+4,2);
                  		$JahrAbholung = substr($line,length($PrefixDate),4);
                  		$ZeitAbholung = timelocal(0,0,0,$TagAbholung,$MonatAbholung-1,$JahrAbholung-1900); 
                  		if ($ZeitAbholung >= $BeginnVorschau) {
                  			$Daten = 1;
                  		}
                  		if ($ZeitAbholung > time+60*60*24*$VorschauTage) {
                  			return("Entsorgungsdaten aktualisiert");
                  		}
                  	}	
                  	if(index($line,$PrefixArt) >= 0 and $ZeitAbholung >= $BeginnVorschau) {
                  		my $i=0;
                  		foreach my $element (@EntsorgungsArten) {
                  			$i++;
                  			if (index($line,$element->{SuchText}) >= 0){
                  				$ZeitAbholung = timelocal(0,$element->{AbholungMin},$element->{AbholungStd},$TagAbholung,$MonatAbholung-1,$JahrAbholung-1900);
                  				if ($ZeitAbholung >= time and $ZeitAbholung-($element->{MeldungStdVorAbholung}*60*60) <= time and $ZeitAbholung > $plugin_info{$plugname.'_'.$element->{Name}."_ResetUntil"}) {
                  					$plugin_info{$plugname.'_'.$element->{Name}."_AbholungNext"} 	= $ZeitAbholung;
                  					$Sammelmeldung += 2 ** $i;
                  					knx_write($GA_Sammelmeldung,$Sammelmeldung,5.010);
                  					if (! $element->{GA_Meldung} eq undef) {
                  						knx_write($element->{GA_Meldung},1);
                  					}
                  					if ($NextAbholung == 0 or $ZeitAbholung < $NextAbholung) {
                  						$NextAbholung = $ZeitAbholung;
                  						$plugin_info{$plugname."_AbholungNext"} 	= $NextAbholung = $ZeitAbholung;
                  					#	if (! $GA_SammelmeldungDatum eq undef ) {
                  					#		knx_write($GA_SammelmeldungDatum,$JahrAbholung."-".$MonatAbholung."-".$TagAbholung);
                  					#	}
                  					#	if (! $GA_SammelmeldungZeit eq undef ) {
                  					#		knx_write($GA_SammelmeldungZeit,$element->{AbholungStd}.":".$element->{AbholungMin}.":00");
                  					#	}
                  					}
                  					plugin_log($plugname,"Sammelmeldung: ".$Sammelmeldung." - ".$element->{Name}." (".2 ** $i.") am ".$TagAbholung.".".$MonatAbholung.".".$JahrAbholung." ".$element->{AbholungStd}.":".$element->{AbholungMin}." Uhr");
                  				}
                  			}
                  		}
                  	}	
                  	if(index($line,"END:VEVENT") >= 0) {
                  		$ZeitAbholung = 0;
                  	}
                  }
                  
                  if (! $Daten ) {
                  	knx_write($GA_Sammelmeldung,1,5.010);
                  	return("Keine Daten");
                  }
                  Ich bin mir sicher, dass ich einige Dinge kompliziert gelöst habe. Dafür funktioniert die Auswertung bisher bestens.
                  Kritik und Verbesserungsvorschläge sind bei mir immer willkommen.

                  Viele Grüße
                  Sascha

                  Kommentar


                    #10
                    Sieht echt gut aus! Ich werde es heute gleich ausprobieren.

                    Würde es auch gehen, wenn man die .ics File auf einem FTP liegen hätte und entweder per FTP oder HTTP an diese herankommt?

                    Kommentar


                      #11
                      Zitat von xachsewag Beitrag anzeigen
                      Würde es auch gehen, wenn man die .ics File auf einem FTP liegen hätte und entweder per FTP oder HTTP an diese herankommt?
                      Ich habe dazu das gefunden.

                      Gruß
                      Sascha

                      Kommentar


                        #12
                        So ich habe mich mal veruscht,
                        in der Augsburger .ics sieht das so aus. Leider erkennt er hier wohl etwas nicht.

                        Habe bereits ohne Erfolg versucht das PrefixArt folgend zu ändern:
                        my $PrefixArt = "SUMMARY;LANGUAGE=de:";

                        Wo liegt hier das Problem?
                        Wenn ich das in den Infomedungen richtig deute bekommt er für die graue Tonne sogar eine Zeit?!


                        Code:
                        BEGIN:VCALENDAR
                        PRODID:http://www.athos.com/calendarwebapplication/
                        VERSION:2.0
                        METHOD:PUBLISH
                        CHARSET:UTF-8
                        BEGIN:VEVENT
                        ORGANIZER;CN=Stadt Augsburg :MAILTO:info@augsburg.de
                        DTSTART;VALUE=DATE:20121001
                        DTEND;VALUE=DATE:20121002
                        LOCATION;LANGUAGE=de:STRASSENNAME NUMMER, PLZ AUGSBURG
                        TRANSP:TRANSPARENT
                        SEQUENCE:0
                        UID:002572385
                        DTSTAMP:20120827T090034Z
                        DESCRIPTION;LANGUAGE=de:Bitte stellen Sie ihre Tonne bis 6 Uhr an die Straße
                        SUMMARY;LANGUAGE=de:Gelbe Behaelter
                        PRIORITY:9
                        CLASS:PUBLIC
                        URL:www.augsburg.de
                        STATUS:CONFIRMED
                        BEGIN:VALARM
                        ACTION:DISPLAY
                        TRIGGER:-PT1440M
                        DESCRIPTION:Abfallwirtschaft- und Stadtreinigungsbetrieb der Stadt Augsburg
                        SUMMARY:Abfallabholung!
                        DURATION:3
                        REPEAT:3
                        END:VALARM
                        END:VEVENT
                        Code:
                        8_Muelltonnen_AbholungNext   1346670000 
                        8_Muelltonnen_Braun_AbholungNext  0 
                        8_Muelltonnen_Braun_ResetUntil   0 
                        8_Muelltonnen_Gelb_AbholungNext  0 
                        8_Muelltonnen_Gelb_ResetUntil   0 
                        8_Muelltonnen_Grau_AbholungNext  1347879600 
                        8_Muelltonnen_Grau_ResetUntil   0  
                        8_Muelltonnen_Grün_AbholungNext  0 
                        8_Muelltonnen_Grün_ResetUntil   0 
                        8_Muelltonnen_cycle    86400 
                        8_Muelltonnen_last    1346090374.00596 
                        8_Muelltonnen_lastsaved   1346090373 
                        8_Muelltonnen_meminc   0.0999999999999996 
                        8_Muelltonnen_memstart   0 
                        8_Muelltonnen_result    Entsorgungsdaten aktualisiert 
                        8_Muelltonnen_runtime   0.3 
                        8_Muelltonnen_ticks   19 
                        8_Muelltonnen_timeout_alarm  0 
                        8_Muelltonnen_timeout_err  0

                        Kommentar


                          #13
                          Zitat von xachsewag Beitrag anzeigen
                          So ich habe mich mal veruscht,
                          in der Augsburger .ics sieht das so aus.
                          Leider erkennt er hier wohl etwas nicht.
                          Habe bereits ohne Erfolg versucht das PrefixArt folgend zu ändern: my $PrefixArt = "SUMMARY;LANGUAGE=de:";
                          Wo liegt hier das Problem?
                          Wenn ich das in den Infomedungen richtig deute bekommt er für die graue Tonne sogar eine Zeit?!
                          Das scheint zu passen. Es sieht so aus, als ob am 17.9.2012 13:0:0 Uhr. die graue Tonne abgeholt wird. Wie sieht denn die restliche Config aus?

                          Die Uhrzeit aus dem Text zu parsen wird nicht einfach. Reicht die Angabe in der Config nicht?

                          Gerne kann ich diese Woche mal deine komplette iCal mal bei mir durchjagen...

                          Gruß
                          Sascha

                          Kommentar


                            #14
                            Aber selbst wenn ich die MeldungStdVorAbholung auf 6 Tage setze und die Termine in der iCal anpasse zeigt er mir zwar bei der GA_Meldung etwas größer 0, aber die einzel GA Meldung für jede Tonne wird nicht gesendet.

                            Würde immer gerne für die Woche wissen welche Tonnen abgeholt werden. (Bei mir immer am Montag)

                            Mach ich da noch was falsch?
                            Gerne kann ich dir mal die ganze ics File zukommen lassen.

                            Danke und Gruß

                            Kommentar


                              #15
                              Zitat von xachsewag Beitrag anzeigen
                              Aber selbst wenn ich die MeldungStdVorAbholung auf 6 Tage setze und die Termine in der iCal anpasse zeigt er mir zwar bei der GA_Meldung etwas größer 0, aber die einzel GA Meldung für jede Tonne wird nicht gesendet.
                              Hast du die GA importiert?
                              Der hier braucht den DPT in der WG Config: knx_write($element->{GA_Meldung},1);

                              Kommentar

                              Lädt...
                              X