Müll-Reminder: Bring den Müll raus!

Hi,

sofern ich dich richtig verstanden habe, möchtest du eine Status-Variable mit true/false für den Zustand „Leerung“ fand „heute?“ dann „true“ sonst „false“ statt?

Wenn ja, dann sollte es funktionieren in dem du eine solche Variable anlegst und nach Zeile


echo "Was junk day today (this morning): " . ($wasJunkDayToday ? "yes
" : "no
");

das hier anfügst:


SetValue(42483 /*[System\Skripte\Abfallkalender\heute]*/, $wasJunkDayToday);

Hoffnungsvoll :-p hab das nicht ausgiebig getestet.

Hallo Mesa,

Danke für die schnelle Antwort, hat alles gelappt. Nochmals Danke für das Script.

Hallo zusammen,

der Abfallverband Hildesheim bietet die Möglichkeit eine ICal Datei herunterzuladen. Deshalb habe ich das Script genommen, vielen Dank noch einmal dafür, und das Auslesen der Kalender Datei eingebaut.
Auch nur sehr rudimentär…


<?
//******************************************************************
// Urheber dieser Version ist 'mesa' Stand 20.05.2016
// https://www.symcon.de/forum/threads/31601-M%C3%BCll-Reminder-Bring-den-M%C3%BCll-raus%21?highlight=m%FCllplan

// überarbeitet von mir D.Voss, da ich mehr als 3 Tonnen habe und die Beschreibungen der Behälter anders sind.
// Danke an 'mesa' ich hätte die Berechnungen in PHP so nicht hinbekommen, lesen, verstehen sowie copy & paste
// sind mir nicht fremd - also auf gehts...

// Meine Umgebung ein Rpi2, der seit Ende 2015 im Livebetrieb ist
// Fragen zu dem eigentlichen Script "Urheber" kann mesa bestimmt besser beantworten

// Danke mesa coole Sache

//******************************************************************

    setlocale(LC_ALL, "");

    // Einfache String-Variable, speichert Text wie diesen: "Nächste Leerung am Freitag morgen: Wertstoff - gelbe Tonne"
    // Die String Variable muss selbst angelegt werden, siehe Zeile "$nächste_termin" und "$webfront_id" anpassen
		// Eingabe nötig
    // Dieses Script muss mit einem Timer versehen werden, um es jeden Tag um z.B. 18:00 zu starten,
    // Ziel ist es dann eine Pushnachricht zu senden um am Abend noch den Müll raus zu bringen
    // mein Beispiel 4 Tonnen oder die 4. Tonne als Erinnerung zu nutzen 
    // z.B. am Jahresende oder Quartalsweise um neue Termine einzutragen
    // 1 Wertstoff Tonne
    // 2 Altpapier Tonne
    // 3 Restabfall Tonne
    // 4 Bioabfall > oder neue Termine eingeben erinnern

// Was habe ich geleistet - nicht viel
// anpassen der Variablen damit diese mit meinen Beschreibungen der Entsorgungstonnen zusammen passen
// und eine zusätzliche Tonne "4" 
// natürlich noch die "IF" abfragen bei denen ich erst ein wenig geschwitzt habe - in der Hoffnung das
// ein Fehler nicht dabei ist. 

// Link zu meinem Entsorger (also eurem Entsorger)
// Link - jedes Jahr vergessen also hier speichern - https://www.meinentsorger.de/info-service.htm

//******************************************************************
//
// Vielen Dank erstmal an den urspruenglichen Verfasser mesa...!
// 
// Aenderung fuer das Einlesen einer ICal Datei die von der Hildesheimer Abfallentsorgung (ZAH) angeboten wird.
// Dadurch entfällt die jaehrliche Eingabe der ca. 60 Termine im Jahr in dieses Script...
//
// - Dazu auf die Seite 'https://www.zah-hildesheim.de/Termine/abholtage' gehen
// - Den Ort, Ortsteil und die Strasse auswaehlen
// - Ueber das iCal Icon einen Download anstossen
// - Und die heruntergeladene Datei in das Verzeichnis ablegen das in $icsdatei angegeben ist
//
//******************************************************************

// Eingabe nötig
// Termin "Nächste Leerung" als Stringvariable anlegen
// kann dann im Webfront angezeigt werden
//******************************************************************
    $nächste_termin = 12345;        // Bitte eigene Werte eintragen*
//******************************************************************

// Eingabe nötig
// Webfront ID zur Pushnachrichten Übertagung
//******************************************************************
    $webfront_id = 54321;           // Bitte eigene Werte eintragen*
//******************************************************************

// In diesem Script sind folgende Namen hinterlegt
// Tonne 1  > Wertstoff
// Tonne 2  > Bioabfall
// Tonne 3  > Restabfall
// Tonne 4  > neue Werte eingeben

//
// Die folgende .ics Datei kann man unter ZAH Hildesheim herunterladen
//
$icsdatei = "C:\\IP-Symcon\\media\\Abfuhrkalender_Hildesheim.ics";

$zeilen = file( $icsdatei, FILE_IGNORE_NEW_LINES );

if( $zeilen === false ) 
{
	IPS_LogMessage( "Die Abfuhrkalender Datei wurde nicht gefunden!", $icsdatei );
	return false; 		
}
	
//
// Durchlaufen des Arrays und erzeugen der Datetime Objekte in den entsprechenden Arrays
//
$icssuchbegriff1 = "Gelber Sack";			// Suchbegriff fuer Tonne 1 -> Wertstoff
$icssuchbegriff2 = "Biomüll";					// Suchbegriff fuer Tonne 2 -> Bioabfall
$icssuchbegriff3 = "Restmüll";				// Suchbegriff fuer Tonne 3 -> Restabfall
$zeitpunkt = "";

$NameT1 = "Wertstoff - gelber Sack";
$tonne1 = array();
$NameT2 = "Bioabfall - grüne Tonne";
$tonne2 = array();
$NameT3 = "Restabfall - graue Tonne";
$tonne3 = array();

foreach ($zeilen as $zeile) {

	if( stristr( $zeile, "DTSTART" ) === False )
	{
	}
	else
	{
		//
		// Datum extrahieren aus...
		// Beispielzeile: DTSTART;TZID=Germany/Berlin:20171110T070000
		// das gesuchte Datum befindet sich direkt hinter dem Doppelpunkt
		// im Format JJJJMMTT
		//
		$zeitpunkt = substr( $zeile, strpos( $zeile, ":") + 1, 8 );
		$zeitpunkt = substr( $zeitpunkt, 0, 4 ) . "-" . substr( $zeitpunkt, 4, 2 ) . "-" . substr( $zeitpunkt, 6, 2 );
	}

	if( stristr( $zeile, "SUMMARY" ) === False )
	{
	}
	else
	{
		//
		// Abfall Art extrahieren aus...
		// Beispielzeile: SUMMARY:Abfuhr Biomüll
		//
		if( stristr( $zeile, $icssuchbegriff1 ) === False )
		{
		}
		else
		{
			//
			// Tonne 1
			//
			$tonne1[] = new DateTime( $zeitpunkt );
		}
		
		if( stristr( $zeile, $icssuchbegriff2 ) === False )
		{
		}
		else
		{
			//
			// Tonne 2
			//
			$tonne2[] = new DateTime( $zeitpunkt );
		}
				
		if( stristr( $zeile, $icssuchbegriff3 ) === False )
		{
		}
		else
		{
			//
			// Tonne 3
			//
			$tonne3[] = new DateTime( $zeitpunkt );
		}
			
	}
	
	
}


// wenn nur 3 Tonnen vorhanden sind kann dies genutzt werden um eine Meldung "neue Werte eintragen"
// per Pushnachricht zu melden, hier als Beispiel 31.12. und 1.1.
// Es müssen zwei Werte eingetragen sein.
// Eingabe nötig bzw. anpassen
$NameT4 = "Neue Müllkalender Datei herunterladen !"; // oder "neue Werte eintragen"
    $tonne4 =
    [
        new DateTime("2018-01-01"),
        new DateTime("2017-12-31")
    ];

    
    $today = new DateTime();

    $next_tonne1 = "";
    $next_tonne2 = "";
    $next_tonne3 = "";
    $next_tonne4 = "";

    $i=-1;
    foreach ($tonne1 as &$d) {
        $i++;
        $diff = $today->diff($d);
        if((int)$diff->format("%r%a") >= 0){
            $next_tonne1 = $tonne1[$i];
            break;
        }
    }

    $i=-1;
    foreach ($tonne2 as &$d) {
        $i++;
        $diff = $today->diff($d);
        if((int)$diff->format("%r%a") >= 0){
            $next_tonne2 = $tonne2[$i];
            break;
        }
    }

    $i=-1;
    foreach ($tonne3 as &$d) {
       $i++;
        $diff = $today->diff($d);
        if((int)$diff->format("%r%a") >= 0){
            $next_tonne3 = $tonne3[$i];
            break;
        }
    }

    $i=-1;
    foreach ($tonne4 as &$d) {
        $i++;
        $diff = $today->diff($d);
        if((int)$diff->format("%r%a") >= 0){
            $next_tonne4 = $tonne4[$i];
            break;
        }
    }

    $diff_tonne1 = $today->diff($next_tonne1, false);
    $diff_tonne2 = $today->diff($next_tonne2, false);
    $diff_tonne3 = $today->diff($next_tonne3, false);
    $diff_tonne4 = $today->diff($next_tonne4, false);

    $diff_tonne1_in_tagen = (int)$diff_tonne1->format("%r%a");
    $diff_tonne2_in_tagen = (int)$diff_tonne2->format("%r%a");
    $diff_tonne3_in_tagen = (int)$diff_tonne3->format("%r%a");
    $diff_tonne4_in_tagen = (int)$diff_tonne4->format("%r%a");

   $wasJunkDayToday = false;
   if($next_tonne1->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
   if($next_tonne2->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
   if($next_tonne3->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;
   if($next_tonne4->format('Y-m-d') == $today->format('Y-m-d')) $wasJunkDayToday = true;

//    echo "Today is " . $today->format("y-m-d") ."
";
//    echo "Next Tonne 1 in ". $diff_tonne1_in_tagen ."
";
//    echo "Next Tonne 2 in ". $diff_tonne2_in_tagen ."
";
//    echo "Next Tonne 3 in ". $diff_tonne3_in_tagen ."
";
//    echo "Next Tonne 4 in ". $diff_tonne4_in_tagen ."
";
//    echo "Was junk day today (this morning): " . ($wasJunkDayToday ? "yes
" : "no
");

    //kleinstes Datum ist nächste Leerung
    $next_leerung_in_tagen = min($diff_tonne1_in_tagen, $diff_tonne2_in_tagen, $diff_tonne3_in_tagen, $diff_tonne4_in_tagen);
    if($next_leerung_in_tagen == 0){
       $txt_leerung_tage = 7;
    }

//    echo "next = " .$next_leerung_in_tagen ."
";

    $result = '"Error..."';
    if($next_leerung_in_tagen == $diff_tonne1_in_tagen){
        $result = "Nächste Leerung am ". strftime("%A", $next_tonne1->getTimestamp()) . " morgen: " . $NameT1;
        if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
           $result .= " & " . $NameT2;
        }
        if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
           $result .= " & " . $NameT3;
        }
        if($next_leerung_in_tagen == $diff_tonne4_in_tagen){
           $result .= " & " . $NameT4;
        }

    }else    if($next_leerung_in_tagen == $diff_tonne4_in_tagen){
        $result = "Nächste Leerung am " . strftime("%A", $next_tonne4->getTimestamp()) . " morgen: " . $NameT4;

        if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
           $result .= " & " . $NameT3;
        }
        if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
           $result .= " & " . $NameT2;
        }

    }else    if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
        $result = "Nächste Leerung am ". strftime("%A", $next_tonne3->getTimestamp()) . " morgen: " . $NameT3;

        if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
           $result .= " & " . $NameT2;
        }
     }else    if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
        $result = "Nächste Leerung am ". strftime("%A", $next_tonne2->getTimestamp()) . " morgen: " . $NameT2;
    }

// echo $result. "
";
    
SetValue($nächste_termin, $result);

    //push notification
    if($next_leerung_in_tagen == 0){
       $notification = '"Müll Skript fehlerhaft"';
        if($next_leerung_in_tagen == $diff_tonne1_in_tagen){

            $notification = $NameT1;
            if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
               $notification .= " & " . $NameT2;
            }
            if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
               $notification .= " & " . $NameT3;
            }
            if($next_leerung_in_tagen == $diff_tonne4_in_tagen){
               $notification .= " & " . $NameT4;
            }

        }else    if($next_leerung_in_tagen == $diff_tonne4_in_tagen){

            $notification = $NameT4;
            if($next_leerung_in_tagen == $diff_tonne3_in_tagen){
               $notification .= " & " . $NameT3;
            }
            if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
               $notification .= " & " . $NameT2;
            }

        }else    if($next_leerung_in_tagen == $diff_tonne3_in_tagen){

            $notification = $NameT3;
            if($next_leerung_in_tagen == $diff_tonne2_in_tagen){
               $notification .= " & " . $NameT2;
            }
            }else    if($next_leerung_in_tagen == $diff_tonne2_in_tagen){

            $notification = $NameT2;
        }

//Meldung nur abschicken, wenn Leerung "morgen" stattfindet. "Heute um 19:00" ist zu spät, denn es wird immer morgens geleert.
        if($wasJunkDayToday == false){
            WFC_PushNotification($webfront_id, 'Müllabfuhr! - ', 'Morgen wird die '. $notification . ' geleert.', 'trickling', 0);
// echo 'Zum Müllen gehen! - ', 'Morgen wird die '. $notification . ' geleert.';
        }
    } 


?>

Und natürlich keine Gewähr, dass dieser Service auf Dauer besteht…

Grüße

Ralf

Hallo zusammen,

jemand fragte mich ob das Script, dass ich zunächst nur um die Verarbeitung einer .ics Datei erweitert hatte, einwandfrei bei mir läuft. Die Antwort, nein das tat es nicht. Ich habe es komplett überarbeitet, teils entschlackt und als neue Funktion, die Anzeige für den aktuellen Tag hinzugefügt. Nun läuft es bei mir fehlerfrei!

Beispiel für das Webfront (Voransage die auch einen Tag vor dem Ereignis gepusht wird)

Und an dem entsprechende Tag heißt es dann im Webfront:

Leerung heute:…

Script:

<?
//******************************************************************
// Urheber der Ursprungsversion ist 'mesa' Stand 20.05.2016
// https://www.symcon.de/forum/threads/31601-M%C3%BCll-Reminder-Bring-den-M%C3%BCll-raus%21?highlight=m%FCllplan
//
// überarbeitet von D.Voss
//
//
// Vielen Dank erstmal an den urspruenglichen Verfasser mesa...!
// 
// Aenderung fuer das Einlesen einer ICal Datei die von der Hildesheimer Abfallentsorgung (ZAH) angeboten wird.
// Dadurch entfällt die jaehrliche Eingabe der ca. 60 Termine im Jahr in dieses Script...
//
// - Dazu auf die Seite 'https://www.zah-hildesheim.de/Termine/abholtage' gehen
// - Den Ort, Ortsteil und die Strasse auswaehlen
// - Ueber das iCal Icon einen Download anstossen
// - Und die heruntergeladene Datei in das Verzeichnis ablegen das in $icsdatei angegeben ist
//
//******************************************************************

//
// Aufruf Parameter 
//
$mode	= $_IPS['MODE'];							// Modus "Abends" und "Morgens"

//
// Wichtig fuer die korrekte Timestamp Bestimmung
//
setlocale(LC_ALL, "");

// Eingabe nötig
// Termin "Nächste Leerung" als Stringvariable anlegen
// kann dann im Webfront angezeigt werden
//******************************************************************
    $nächster_termin = 38940;        // Bitte eigene Werte eintragen*
//******************************************************************

// Eingabe nötig
// Webfront ID zur Pushnachrichten Übertagung
//******************************************************************
    $webfront_id = 29137;           // Bitte eigene Werte eintragen*
//******************************************************************

// In diesem Script sind folgende Namen hinterlegt
// Tonne 1  > Wertstoff
// Tonne 2  > Bioabfall
// Tonne 3  > Restabfall
// Tonne 4  > neue Werte eingeben

//
// Die folgende .ics Datei kann man unter ZAH Hildesheim herunterladen
//
$icsdatei = "C:\\IP-Symcon\\media\\Abfuhrkalender_Hildesheim.ics";

$zeilen = file( $icsdatei, FILE_IGNORE_NEW_LINES );

if( $zeilen === false ) 
{
	IPS_LogMessage( "Die Abfuhrkalender Datei wurde nicht gefunden!", $icsdatei );
	return false; 		
}
	
//
// Durchlaufen des Arrays und erzeugen der Datetime Objekte in den entsprechenden Arrays
//
$icssuchbegriff1 = "Gelber Sack";			// Suchbegriff fuer Tonne 1 -> Wertstoff
$icssuchbegriff2 = "Biomüll";					// Suchbegriff fuer Tonne 2 -> Bioabfall
$icssuchbegriff3 = "Restmüll";				// Suchbegriff fuer Tonne 3 -> Restabfall
$zeitpunkt = "";

$NameT1 = "Wertstoff - gelber Sack";
$tonne1 = array();
$NameT2 = "Bioabfall - grüne Tonne";
$tonne2 = array();
$NameT3 = "Restabfall - graue Tonne";
$tonne3 = array();

foreach ($zeilen as $zeile) {

	if( stristr( $zeile, "DTSTART" ) === False )
	{
	}
	else
	{
		//
		// Datum extrahieren aus...
		// Beispielzeile: DTSTART;TZID=Germany/Berlin:20171110T070000
		// das gesuchte Datum befindet sich direkt hinter dem Doppelpunkt
		// im Format JJJJMMTT
		//
		$zeitpunkt = substr( $zeile, strpos( $zeile, ":") + 1, 8 );
		$zeitpunkt = substr( $zeitpunkt, 0, 4 ) . "-" . substr( $zeitpunkt, 4, 2 ) . "-" . substr( $zeitpunkt, 6, 2 );
	}

	if( stristr( $zeile, "SUMMARY" ) === False )
	{
	}
	else
	{
		//
		// Abfall Art extrahieren aus...
		// Beispielzeile: SUMMARY:Abfuhr Biomüll
		//
		if( stristr( $zeile, $icssuchbegriff1 ) === False )
		{
		}
		else
		{
			//
			// Tonne 1
			//
			$tonne1[] = new DateTime( $zeitpunkt );
		}
		
		if( stristr( $zeile, $icssuchbegriff2 ) === False )
		{
		}
		else
		{
			//
			// Tonne 2
			//
			$tonne2[] = new DateTime( $zeitpunkt );
		}
				
		if( stristr( $zeile, $icssuchbegriff3 ) === False )
		{
		}
		else
		{
			//
			// Tonne 3
			//
			$tonne3[] = new DateTime( $zeitpunkt );
		}
			
	}
	
}

//
// Den aktuellen Tag um 0 Uhr ermitteln
//
$today_tmp = new DateTime();
$today = new DateTime( date( 'Y-m-d', mktime( 0,0,0, (int)$today_tmp->format('m'), (int)$today_tmp->format('d'), (int)$today_tmp->format('Y') ) ) );

// wenn nur 3 Tonnen vorhanden sind kann dies genutzt werden um eine Meldung "neue Werte eintragen"
// per Pushnachricht zu melden, hier als Beispiel 31.12. und 1.1.
// Es müssen zwei Werte eingetragen sein.
// Eingabe nötig bzw. anpassen
$NameT4 = "Neue Müllkalender Datei herunterladen !"; // oder "neue Werte eintragen"
$tonne4 =
[
    new DateTime( date( 'Y-m-d', mktime( 0,0,0, 01, 01, (int)$today_tmp->format('Y') + 1 ) ) ),  // 01.01.20xx
    new DateTime( date( 'Y-m-d', mktime( 0,0,0, 12, 31, (int)$today_tmp->format('Y') ) ) )       // 31.12.20xx
];


//
// Auswertung der erzeugten Arrays
//
$next_tonne1 = new Datetime(  date( 'Y-m-d', mktime( 0,0,0, (int)$today_tmp->format('m'), (int)$today_tmp->format('d') - 1, (int)$today_tmp->format('Y') ) ) );
$next_tonne2 = new Datetime(  date( 'Y-m-d', mktime( 0,0,0, (int)$today_tmp->format('m'), (int)$today_tmp->format('d') - 1, (int)$today_tmp->format('Y') ) ) );
$next_tonne3 = new Datetime(  date( 'Y-m-d', mktime( 0,0,0, (int)$today_tmp->format('m'), (int)$today_tmp->format('d') - 1, (int)$today_tmp->format('Y') ) ) );
$next_tonne4 = new Datetime(  date( 'Y-m-d', mktime( 0,0,0, (int)$today_tmp->format('m'), (int)$today_tmp->format('d') - 1, (int)$today_tmp->format('Y') ) ) );

$i=-1;
foreach ($tonne1 as &$d)
{
  $i++;
  $diff = $today->diff($d);
  if( (int)$diff->format("%r%a") >= 0 )
	{
      $next_tonne1 = $tonne1[$i];
      break;
  }
}

$i=-1;
foreach ($tonne2 as &$d)
{
  $i++;
  $diff = $today->diff($d);
  if( (int)$diff->format("%r%a") >= 0 )
	{
      $next_tonne2 = $tonne2[$i];
      break;
  }
}

$i=-1;
foreach ($tonne3 as &$d)
{
 	$i++;
  $diff = $today->diff($d);
  if( (int)$diff->format("%r%a") >= 0 )
	{
      $next_tonne3 = $tonne3[$i];
      break;
  }
}

$i=-1;
foreach ($tonne4 as &$d)
{
  $i++;
  $diff = $today->diff($d);
  if( (int)$diff->format("%r%a") >= 0 )
	{
      $next_tonne4 = $tonne4[$i];
      break;
  }
}

$diff_tonne1 = $today->diff( $next_tonne1, false);
$diff_tonne2 = $today->diff( $next_tonne2, false);
$diff_tonne3 = $today->diff( $next_tonne3, false);
$diff_tonne4 = $today->diff( $next_tonne4, false);

$diff_tonne1_in_tagen = (int)$diff_tonne1->format("%r%a");
$diff_tonne2_in_tagen = (int)$diff_tonne2->format("%r%a");
$diff_tonne3_in_tagen = (int)$diff_tonne3->format("%r%a");
$diff_tonne4_in_tagen = (int)$diff_tonne4->format("%r%a");

//echo "Today is " . $today->format("y-m-d") ."
";
//echo "Next Tonne 1 in ". $diff_tonne1_in_tagen ."
";
//echo "Next Tonne 2 in ". $diff_tonne2_in_tagen ."
";
//echo "Next Tonne 3 in ". $diff_tonne3_in_tagen ."
";
//echo "Next Tonne 4 in ". $diff_tonne4_in_tagen ."
";

//
// Die 'naechsten Liefertage' sortieren und den kleinsten Wert groesser als 0 (Heute) heraussuchen,
// das ist naemlich der gesuchte naechste Termin!
//
$sortierung = array( $diff_tonne1_in_tagen, $diff_tonne2_in_tagen, $diff_tonne3_in_tagen, $diff_tonne4_in_tagen );
sort( $sortierung, SORT_NUMERIC );

//
// Script Ausfuehrung am Morgen (00:30)
// Fuer die Ueberpruefung der Abfuhr fuer den aktuellen Tag
//
if( $mode == "Morgens" )
{
	$leerung_heute = 0;
	foreach( $sortierung as $s )
	{
		if( $s == 0 )
		{
			$leerung_heute = $s;
			break;
		}
	}
	
	//
	// Heutige Leerung benennen und 
	// Kontrolle ob es noch weitere Leerungen gibt...
	//
	$result = GetValue( $nächster_termin );
	if( $leerung_heute == $diff_tonne1_in_tagen)
	{
		$result = "Leerung heute : " . $NameT1;
	  if( $leerung_heute == $diff_tonne2_in_tagen )
		{
	     $result .= " & " . $NameT2;
	  }
	  if( $leerung_heute == $diff_tonne3_in_tagen )
		{
	     $result .= " & " . $NameT3;
	  }
	}
	else if( $leerung_heute == $diff_tonne2_in_tagen )
	{
		$result = "Leerung heute : " . $NameT2;
	
	  if( $leerung_heute == $diff_tonne3_in_tagen )
		{
	     $result .= " & " . $NameT3;
	  }
	}
	else if( $leerung_heute == $diff_tonne3_in_tagen )
	{
	  $result = "Leerung heute : " . $NameT3;
	}
}

//
// Script Ausfuehrung am Abend (18:30)
// Fuer die Ueberpruefung der Abfuhr fuer den naechsten Tag
// inkl. event. Notificatiion Sendung
//
if( $mode == "Abends" )
{
	$next_leerung_in_tagen = 0;
	foreach( $sortierung as $s )
	{
		if( $s > 0 )
		{
			$next_leerung_in_tagen = $s;
			break;
		}
	}
	
	//
	// Naechste Leerung benennen und 
	// Kontrolle ob es am naechsten Liefertermin noch weitere Leerungen gibt...
	//
	$result = '"Keine weitere Leerung in diesem Jahr..."';
	$notification = '"Keine weitere Leerung in diesem Jahr..."';
	if($next_leerung_in_tagen == $diff_tonne1_in_tagen)
	{
		$notification = $NameT1;
	  $result = "Nächste Leerung am ". strftime("%A", $next_tonne1->getTimestamp()) . ": " . $NameT1;
	  if( $next_leerung_in_tagen == $diff_tonne2_in_tagen )
		{
	     $result .= " & " . $NameT2;
			 $notification .= " & " . $NameT2;
	  }
	  if( $next_leerung_in_tagen == $diff_tonne3_in_tagen )
		{
	     $result .= " & " . $NameT3;
			 $notification .= " & " . $NameT3;
	  }
	}
	else if( $next_leerung_in_tagen == $diff_tonne2_in_tagen )
	{
		$notification = $NameT2;
	  $result = "Nächste Leerung am " . strftime("%A", $next_tonne2->getTimestamp()) . ": " . $NameT2;
	
	  if( $next_leerung_in_tagen == $diff_tonne3_in_tagen )
		{
	     $result .= " & " . $NameT3;
			 $notification .= " & " . $NameT3;
	  }
	}
	else if( $next_leerung_in_tagen == $diff_tonne3_in_tagen )
	{
		$notification = $NameT3;
	  $result = "Nächste Leerung am ". strftime("%A", $next_tonne3->getTimestamp()) . ": " . $NameT3;
	}
	else if( $next_leerung_in_tagen == $diff_tonne4_in_tagen )
	{
		$notification = $NameT4;
		$result = $NameT4;
	}
	
	//
	//push notification nur Abends und wenn am naechsten Tag eine Leerung erwartet wird!
	//
	if( $next_leerung_in_tagen == 1 )
	{
		WFC_PushNotification( $webfront_id, 'Müllabfuhr! - ', 'Morgen ist der '. $notification . ' dran.', 'trickling', 0 );
	} 
}
 
 //
 // Webfront String Variable aktualisieren
 //
SetValue( $nächster_termin, $result );


?>

Meine Struktur im Webfront:

Meine Lösung um das Script um 0:30 aufzurufen:

<?
//
// Parameter setzen
//
$mode	= "Morgens";					// "Abends" = Ueberpruefung Abends "Morgens" = Ueberpruefung Morgens durch ein Event das hier zuvor angelegt wurde!)

//
// Ab hier keine Anpassungen mehr...
//


//
// eigentliches Ausfuehrungsscript
//
$id_script_muell_reminder = IPS_GetScriptIDByName( "Müll_Reminder", IPS_GetObjectIDByName( "Scripte", 0 ) ); 
	  
IPS_RunScriptWaitEx( $id_script_muell_reminder, Array( "MODE" => $mode ) );


?>

Und um 18:30…

<?
//
// Parameter setzen
//
$mode = "Abends";					// "Abends" = Ueberpruefung Abends "Morgens" = Ueberpruefung Morgens durch ein Event das hier zuvor angelegt wurde!)

//
// Ab hier keine Anpassungen mehr...
//


//
// eigentliches Ausfuehrungsscript
//
$id_script_muell_reminder = IPS_GetScriptIDByName( "Müll_Reminder", IPS_GetObjectIDByName( "Scripte", 0 ) ); 
	  
IPS_RunScriptWaitEx( $id_script_muell_reminder, Array( "MODE" => $mode ) );


?>

Das ganze läuft bei mir unter Windows und enthält in den obersten Zeilen einige Einstellungen, genau wie im Ursprungscript…

Ich hoffe es kann jemandem von nutzen sein, wenn auch nur als Anregung…

Ein schönes We…

Gollum

Vielen Dank dafür, habe es etwas umgestaltet, aber funktioniert super mit der FES Kalenderdatei :slight_smile:

Hallo Gollum,

Danke für die Anpassung an das iCal Format, habe mich Heute erst damit beschäftigt da ich mit der Umsetzung der Pfadangaben von Windows c:\ zu einer (meiner) Linux Lösung auf Kriegsfuß stehe.
Mein Symcon läuft seit einiger Zeit auf einem Raspi, verstehe ich nicht, var/ etc/ bin usw. habe ich keinen bezug zu
das ist zu kryptisch (für mich) vieleicht kann mir jemad aufs Pferd helfen, was die Pfade angeht.

Ich habe gedacht ich könnte … huch sehe das die iCal Datei von meinem Entsorger direkt erzeugt und
direkt geladen werden kann, freu… Damit habe ich einen Müll Reminder der so hoffe ich für IMMER aktuell ist.
Ohne das ich Jahr für Jahr eine lange Reihe pflegen darf oder die Datei laden und hinterlegen muss.

https://www.edg.de/ical/kalender.ics?Strasse=Lindenstraße.&Hausnummer=1234&Erinnerung=6&Abfallart=1,2,3,4

Der Link funktioniert nicht jedenfalls nicht mit dieser Straße :wink:
Damit funktioniert mein Kalender mit meiner Straße jetzt wunderbar

Danke euch allen,
D.Voss

Hi Gollum,

hab es eingerichtet, funktioniert einwandfrei, vielen Dank dafür

Gruß

Oliver

Hat mir noch jemand einen Tip?
Ich habe immer Error bei der "Nächste Abholung " Variable (String). Die Referenz vom Script stimmt.

Danke vielmals.

seit einiger Zeit ist ja setlocale(LC_ALL, „“); disabled worden.
seitdem läuft das Skript nicht mehr korrekt, das hat zur Folge,dass die Ausgabe

Today is 18-12-20
Next Tonne 1 in 2
Next Tonne 2 in -1
Next Tonne 3 in 7
Next Tonne 4 in -1

Fehler aufwirft, da das Format nicht mehr angepassst wird. Das Datum verdreht ausgegeben (Y-m-d angepasst/reicht aber nicht) wie es auch aus der Datei.ics ausgeworfen wird. Wie kann man das wieder anpassen, hat jemand dafür eine Lösung ?

@Axel37

Ja ist schon komisch. Ich hatte damals auch etwas über die Geschichte mit dem setlocale gelesen. Aber ich konnte in der Folge keine Fehler des Scripts (Meine Version vom Beitrag #24) feststellen. Gerade eben hatte ich nochmal die Testausgabe aktiviert und das Script bei mir ausgeführt.

Müllreminder-Test-Ausgabe.PNG

Auch diesmal kann ich keine offensichtlichen Fehler feststellen. Die angegebenen Tage sind soweit korrekt. Und zwar sowohl mit als auch ohne setlocale.

Bei mir läuft es unter: IP-Symcon 5.0, Windows x64, 22.11.2018, 9c414bf914c

Tut mir leid…, dass ich nicht weiter helfen kann.

Gruß
Gollum

ist auch erst seit der letzten Ninja

	if($diff_tonne1_in_tagen >-1 AND $diff_tonne1_in_tagen < 6)

Fehler einfach abgefangen, jetzt läufts wieder