ZVO - Gelber Sack / Blaue Tonne auslesen

@UweR: Nicht verzagen, Google fragen, denn Google hat für alle indizierten PDFs eine HTML-Ansicht parat ;).
Samtgemeinde Bruchhausen-Vilsen ist zwar unansehnlich, aber man sollte es parsen können.

Grumpf, schaut euch mal diesen „Müll“ an … da ist ja nix rauszuholen :mad:
Entsorgungskalender fr den Landkreis Gifhorn
Toll das ganze einzustellen, aber Daten sind nich rauszulesen

Hallo Horst,

wo komme ich über Google da denn hin? Bräuchte so etwas für Nienburg(Stadt).

edit
Vergiß es … habe bei Adobe auch so etwas gefunden. Was da allerdings herauskommt ist nicht unbendingt verwertbar. :frowning:

Gruß
Jens

Hallo Horst,
danke für den Tipp, nach etwas Schlaf hatte ich da auch schon drüber nachgedacht :wink:
Das ist dann halt schon „parsen für Fortgeschrittene“. Ich denke ich werde mir diesen Status in einigen ‚stillen Stunden‘ mal erarbeiten.
Das Stückchen Papier mit dem Nagel macht es ja nicht lebensnotwendig und eilig …

@Tetrapack: Einfach die Adresse der PDF bei Google als Suchbegriff eingeben. Dann zeigt Google beim Ergebnis noch als HTML anzeigen an.

@All: Da die Termine eigentlich alle bis zum Jahresende feststehen bietet sich meiner Meinung nach auch das Abschreiben der Termine in ein Array an und dann danach das Setzen der Statusvariable. Sollte in den meisten Fällen doch wesentlich schneller gehen als das Schreiben eines Parsers ;).
Habe da mal kurz was zurechtgeschrieben:

<?
$TermineGelberSack = array("26.02.09", "05.03.09", "12.03.09", "16.03.09");
$TermineBlaueTonne = array("05.03.09", "16.03.09");

foreach($TermineGelberSack as $date)
{
    if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) >= time())
    {
        SetValueString(CreateVariableByName($IPS_SELF, "Datum gelber Sack", 3), $date);
        break;
    }
}
    
foreach($TermineBlaueTonne as $date)
{
    if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) >= time())
    {
        SetValueString(CreateVariableByName($IPS_SELF, "Datum blaue Tonne", 3), $date);
        break;
    }
}

function CreateVariableByName($id, $name, $type)
{
   global $IPS_SELF;
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
   }
   return $vid;
}
?>

Hallo Horst,

da kann ich Dir nur Recht geben. Die Version ist mir wesentlich lieber, da kann ich gleich noch die Restmülltonne mit einbauen.

Jetzt brauchen wir noch noch das automatisch Popup für diese Termine in Webfront, oder vielleicht als Statuszeile im Webfront eingebaut.

Hallo Horst,

danke für das Script! Ich denke die Lösung ist tatsächlich die einfachere Variante, so lange keine andere Datei zu bekommen ist.

Gruß
Jens

Hallo,

bei mir werden die Tonnen alle 2 oder alle 4 Wochen abgeholt (natürlich noch an unterschiedlichen Tagen), deswegen hatte ich mir ein script geschrieben das anhand der Anfangszeit die Differenz zum nächsten Termin ausrechnet (klappt natürlich nicht bei Feiertagen)


$time = time();
$start_time = gregoriantojd(date('m', $time), date('d', $time), date('Y', $time));

$schwarzetonne = gregoriantojd(3, 14, 2006);      /* Anfangszeit */
$difftage_ST =  ($start_time - $schwarzetonne) ;  /* Differenz */
$tag_ST = my_bcmod( "$difftage_ST", 14 );      /* Zyklus 2wochen */

SetValueBoolean("tonneblack", FALSE);
SetValueString("abfuhr_tage", "$tag_ST");

if ($tag_ST == 13) {$msg = "Schwarz, "; $wann = "Morgen
";SetValueBoolean("tonneblack", TRUE);}
elseif ($tag_ST == 0) {$msg = "Schwarz, "; $wann = "Heute
";SetValueBoolean("tonneblack", TRUE);}
elseif ($tag_ST >= 11) {$msg = "Schwarz, "; $wann = "Diese Woche
";SetValueBoolean("tonneblack", TRUE);}

$abfuhr_termin = "$msg$wann";

SetValueString("abfuhr_termin", $abfuhr_termin);

function my_bcmod( $x, $y )
{
   // how many numbers to take at once? carefull not to exceed (int)
   $take = 5;
   $mod = '';

   do
   {
       $a = (int)$mod.substr( $x, 0, $take );
       $x = substr( $x, $take );
       $mod = $a % $y;
   }
   while ( strlen($x) );

   return (int)$mod;
}



Ich lasse mir das im Designer für die schwarze Tonne, gelber Sack, grüne Tonne und das Altpapier anzeigen, klappt recht gut.

Hallo Zusammen,

ich möchte das Script von Horst nutzen. Was ich jetzt als PHP-Anfänger nicht schaffe ist, mir den morgigen Tag zu berechnen. Das will ich machen, so dass im Dashboard die Meldung, dass Müll abgeholt wird nur einen Tag angezeigt wird.
Mit mktime komme ich nicht weiter… ich verstehe nicht wie ich das umkonvertieren kann. Oder bin ich total auf dem falschen Weg?


/* Funktion die True/false setzt je nachdem ob am nächsten Tag der Müll abgeholt wird. */

$date_blau = GetValueString(28358  /*[Info\Muelltermine\Datum blaue Tonne]*/);
$date_gelb = GetValueString(29136  /*[Info\Muelltermine\Datum gelber Sack]*/);

//aus $date_gelb kommt z.B. heute folgendes raus "07.07.09", da morgen Müll abgeholt wird. (siehe Script von Horst drei Posts weiter oben)

//$morgen = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
//$morgen = date("d.m.y");

if ($morgen == $date_blau)
	{SetValueBoolean(57519, true); //blaue Tonne morgen
	}else{
	SetValueBoolean(57519, false);
	} 

if ($morgen == $date_gelb)
	{SetValueBoolean(30386, true); //gelbe Tonne morgen
	}else{
	SetValueBoolean(30386, false);
	}

Würde mich freuen, wenn mich jemand erlöst :slight_smile:

Grüße
Matthias

Hallo Papaschlumpf,

schon fast richtig. Du mußt nur bei der date() funktion den vorher ermittelten Timstamp einsetzen.

$timestamp        = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
$morgen = date("d.m.y",$timestamp);

Gruß
Attain

Vielen Dank Attain! Jetzt läufts :slight_smile:

Hat jemand eine Lösung für Hamburg ? Finde die Idee ja genial…

So, ich muss den alten Thread mal wieder ausbuddeln :wink:

Unser Abfallentsorger bietet jetzt neben einem .pdf auch eine .ics (iCal) Datei mit den Müllterminen an.
Wie kann ich jetzt die einzelnen Termine auslesen und in ein Array schreiben?

Ich möchte die Daten definitiv nicht in einen Kalender einlesen, sondern die Daten nur 1x auslesen und in eine Variable schreiben.
Alternativ geht auch das tägliche Auslesen der Datei, um dann darauf zu reagieren.

Mein bisheriges Script:

<?
$TermineGelberSack = array("15.06.11", "28.06.11", "12.07.11", "26.07.11", "09.08.11", "23.08.11", "06.09.11", "20.09.11", "05.10.11", "18.10.11", "01.11.11", "15.11.11", "29.11.11", "13.12.11", "28.12.11");
$TermineBlaueTonne = array("24.06.11", "22.07.11", "19.08.11", "16.09.11", "14.10.11", "11.11.11", "09.12.11");
$TermineSchwarzeTonne = array("04.06.11", "18.06.11", "01.07.11", "15.07.11", "29.07.11", "12.08.11", "26.08.11", "09.09.11", "23.09.11", "08.10.11", "21.10.11", "04.11.11", "18.11.11", "02.12.11", "16.12.11", "31.12.11");
$TermineGrueneTonne = array("06.06.11", "20.06.11", "04.07.11", "18.07.11", "01.08.11", "15.08.11", "29.08.11", "12.09.11", "26.09.11", "10.10.11", "24.10.11", "07.11.11", "21.11.11", "05.12.11", "19.12.11");
$Today = mktime(0,0,0);
$Tomorrow = mktime(0,0,0)+(24*60*60);

//******************************************************************************
foreach($TermineGelberSack as $date)
{
    if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) >= $Today)
	    {
	        SetValue(35234 /*[Tagesvariablen\Muellscript\Datum gelber Sack]*/, $date);

	        /*morgen??*/
	        if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) == $Tomorrow)
	         {
					SetValueBoolean(39333 /*[Tagesvariablen\Muellscript\Morgen\gelber_Sack_m]*/, TRUE);
	            IPS_SetEventActive(22792 /*[Tagesvariablen\Muellscript\Morgen\Erinnerung_Mail\]*/, true);
				}
			  else
			   {SetValueBoolean(39333 /*[Tagesvariablen\Muellscript\Morgen\gelber_Sack_m]*/, FALSE);}

	        /*heute??*/
	        if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) == $Today)
	         {
					SetValueBoolean(50679 /*[Tagesvariablen\Muellscript\Heute\gelber_Sack_h]*/, TRUE);
					IPS_SetEventActive(44359 /*[Tagesvariablen\Muellscript\Heute\Erinnerung_Handy\]*/, true);
				}
			  else
			   {
					SetValueBoolean(50679 /*[Tagesvariablen\Muellscript\Heute\gelber_Sack_h]*/, FALSE);
				}
	        break;
	    }
    else
			   {
					SetValueBoolean(50679 /*[Tagesvariablen\Muellscript\Heute\gelber_Sack_h]*/, FALSE);
				}
}
//******************************************************************************
foreach($TermineBlaueTonne as $date)
{
    if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) >= $Today)
	    {
	        SetValue(38641 /*[Tagesvariablen\Muellscript\Datum Altpapier]*/, $date);

	        /*morgen??*/
	        if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) == $Tomorrow)
	         {
					SetValueBoolean(48497 /*[Tagesvariablen\Muellscript\Morgen\Altpapier_m]*/, TRUE);
	            IPS_SetEventActive(22792 /*[Tagesvariablen\Muellscript\Morgen\Erinnerung_Mail\]*/, true);
				}
			  else
			   {SetValueBoolean(48497 /*[Tagesvariablen\Muellscript\Morgen\Altpapier_m]*/, FALSE);}

	        /*heute??*/
	        if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) == $Today)
	         {
	            SetValueBoolean(17121 /*[Tagesvariablen\Muellscript\Heute\Altpapier_h]*/, TRUE);
	            IPS_SetEventActive(44359 /*[Tagesvariablen\Muellscript\Heute\Erinnerung_Handy\]*/, true);
	         }
			  else
			   {
	            SetValueBoolean(17121 /*[Tagesvariablen\Muellscript\Heute\Altpapier_h]*/, FALSE);
			   }
	        break;
	    }
	else
			{
	         SetValueBoolean(17121 /*[Tagesvariablen\Muellscript\Heute\Altpapier_h]*/, FALSE);
			}
}
//******************************************************************************
foreach($TermineSchwarzeTonne as $date)
{
    if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) >= $Today)
	    {
	        SetValue(51757 /*[Tagesvariablen\Muellscript\Datum Restmüll]*/, $date);

	        /*morgen??*/
	        if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) == $Tomorrow)
	         {
					SetValueBoolean(14850 /*[Tagesvariablen\Muellscript\Morgen\Restmuell_m]*/, TRUE);
	            IPS_SetEventActive(22792 /*[Tagesvariablen\Muellscript\Morgen\Erinnerung_Mail\]*/, true);
				}
			  else
			   {SetValueBoolean(14850 /*[Tagesvariablen\Muellscript\Morgen\Restmuell_m]*/, FALSE);}

	        /*heute??*/
	        if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) == $Today)
	         {
	            SetValueBoolean(23419 /*[Tagesvariablen\Muellscript\Heute\Restmuell_h]*/, TRUE);
	            IPS_SetEventActive(44359 /*[Tagesvariablen\Muellscript\Heute\Erinnerung_Handy\]*/, true);
	         }
			  else
			   {
	            SetValueBoolean(23419 /*[Tagesvariablen\Muellscript\Heute\Restmuell_h]*/, FALSE);
			   }
	        break;
	    }
    else
			   {
	            SetValueBoolean(23419 /*[Tagesvariablen\Muellscript\Heute\Restmuell_h]*/, FALSE);
			   }
}
//******************************************************************************
foreach($TermineGrueneTonne as $date)
{
    if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) >= $Today)
	    {
	        SetValue(29731 /*[Tagesvariablen\Muellscript\Datum Biotonne]*/, $date);

	        /*morgen??*/
	        if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) == $Tomorrow)
	         {
					SetValueBoolean(41706 /*[Tagesvariablen\Muellscript\Morgen\Biotonne_m]*/, TRUE);
	            IPS_SetEventActive(22792 /*[Tagesvariablen\Muellscript\Morgen\Erinnerung_Mail\]*/, true);
				}
			  else
			   {SetValueBoolean(41706 /*[Tagesvariablen\Muellscript\Morgen\Biotonne_m]*/, FALSE);}

			  /*heute??*/
	        if(strtotime("20".substr($date, 6, 2)."-".substr($date, 3, 2)."-".substr($date, 0, 2)) == $Today)
	         {
	            SetValueBoolean(43220 /*[Tagesvariablen\Muellscript\Heute\Biotonne_h]*/, TRUE);
	            IPS_SetEventActive(44359 /*[Tagesvariablen\Muellscript\Heute\Erinnerung_Handy\]*/, true);
	         }
			  else
			   {
	            SetValueBoolean(43220 /*[Tagesvariablen\Muellscript\Heute\Biotonne_h]*/, FALSE);
			   }
        break;
    	}
    else
			   {
	            SetValueBoolean(43220 /*[Tagesvariablen\Muellscript\Heute\Biotonne_h]*/, FALSE);
			   }
}
//******************************************************************************


?>

Würde mir da evtl. jemand auf die Sprünge helfen?

Was mir auf die Schnelle einfallen würde, wäre die ics in csv zu wandeln.
z.B. hier: ics bzw. ical-Dateien in das csv-Format konvertieren!

csv Dateien lassen sich wesentlich besser mit PHP bearbeiten, dafür gibt es dann sogar eigene Befehle.

Hallo,

ich habe das hierschon mal für die Ferengie-Master Terminverwaltung gemacht.

Eventuell hilft Dir das ja. Sonst melde Dich noch mal. Ich kann Dir da eventuell helfen.

PS: Das ist der Post #196!

Hast Du eventuell den Link für den iCalender?
Dann schau ich mit das mal an.

Ich denke du meinst die downloadbare Datei, oder?

muell.zip (1.93 KB)

Bekomme ich hin.

Ich würde eine Funktion schreiben der Du den Ort der Kalenderdatei übergibst in:

C:\IP-Symcon\Kalender\muell\xyz.ics

Die Funktion gibt Dir einen String zurück wo alle Termine in:

Datum, Text, Zeilenumbruch

drin stehen.

Du könntest dann alle Termine am Zeilenumbruch ("
") in ein Array zerlegen
und jedes Array-Element am „,“ in Datum und Text.

Ist das OK für Dich?
Bis wann must Du das haben?

Das wäre ja echt klasse :slight_smile:

Das eilt nicht … bis zum Jahresende sollte ausreichen.

Wäre es evtl. möglich gleich 4 Strings zu erzeugen, also pro Art der Entsorgung einen? Ein kompletter String ist etwas groß, oder meinst du nicht?

Auf jeden Fall schon mal danke für deine Hilfsbereitschaft!!!

Gruß
Jens

So lange wird das nicht dauern. :wink:

Schau ich mir an. Melde mich dann.

Wir sollten ab deiner Anfrage alle in einen separaten Thread packen.
Das hat mit dem eigendlichen Thema nichts mehr zu tun.