Gelber Sack / Blaue Tonne aus iCal (ics) auslesen

Hallo,
ich bin grad dabei mich in IPS einzufuchsen.
Leider steh ich hier echt auf dem Schlauch.
Wie mache ich das mit den Scripten?
muss ich das im Objectbaum erstellen oder in dem scripts Ordner ablegen?
Warum sind da zwei(Funktion und Einbindung?
Wie muss ich da vorgehen?
gruss

Warum willst Du das in den Scripts Ordner legen ? Was hast Du denn bisher in/mit IPS gemacht? Registriert bereits 2014 und jetzt erst einarbeiten? :eek:
Was für ein System ? Windows, Raspi ? Wo liegt deine .ics Datei ?
Es sind etwas wenig Infos die Du bereit stellst. Doku zu IPS hast Du gefunden und gelesen ?

Gruß
Jens

Ich bin seid 2014 registriert weil ich damals überlegt habe mir gleich IPS zukaufen.
Dann habe ich mich aber für Homematic pur entschieden.
Das habe ich jetzt gut am laufen und hab mir jetzt IPS zugelegt.
Bin gerade dabei einige nützliche Sachen (wie diese hier) zu integrieren.
Laufen habe ich das auf einen Raspberry.
Die meisten Dinge habe ich über Module in eingefügt(Hue und Sonos zB).

Die ics liegt unter symcon. Habe da einen Ordner erstellt der ics heisst.

Hää, das Script ist ja von mir!?
Was verstehst Du da jetzt nicht?

Hat sich schon erledigt, ich habe das Anzeigen der Termine hinbekommen.

Nur leider bin ich mit der Ansicht nicht zufrieden.
Mir werden alle Daten angezeigt.
Wie mache ich das mir nur die ab Heute bis 14 Tage im voraus angezeigt werden?

Hallo Jens,

das Script von mir ist ja nur zum einmaligen übersetzen der Termine vom iCalender in eine Variable.
Wenn Du das machen willst müsstest Du ja im Prinzip Täglich oder ein mal pro Wochen Jedes Datum
in einer Zeile mit dem aktuellem vergleichen und dementsprechend handeln.

Das Script von mir macht nur eine Umwandlung!

Hallo Schablone,

danke für dein Script. Leider komme ich nicht weiter. Ich habe nun dank deines Sciptes, alle Termine von unserem Müllentsorger über die ICS Datei in eine String-Var. geschrieben. Das sieht dann so aus:

07.03.2017,Restabfalltonne (60-240l)(14tgl.)
21.03.2017,Restabfalltonne (60-240l)(14tgl.)
04.04.2017,Restabfalltonne (60-240l)(14tgl.)
19.04.2017,Restabfalltonne (60-240l)(14tgl.)

Ich schaffe es leider nicht mit einer Funktion die Abholtermine in eine Variable zu schreiben.
Wollte eine Variable für „Heute“ und „Morgen“ füllen und das für jede Müllart.

<?
$iCal_String = GetValueString(46242 /*[Müll\Termine]*/);
$today = date("d.m.Y, ");                         
$tomorrow = date("d.m.Y, ", strtotime("+1 days"));

echo($tomorrow);

echo(substr($iCal_String, $tomorrow, 30)); // Soll

//substr(string: String, start: Integer, length: Integer): String
?>

Leider kommt nur das dabei herraus:

07.03.2017,
Notice: A non well formed numeric value encountered in /var/lib/symcon/scripts/31518.ips.php on line 8
017,Restabfalltonne (60-240l)(

Kann mir jemand bitte helfen…

LG Izack

Versuch doch meine Methode aus Beitrag #46 (ZVO - Gelber Sack / Blaue Tonne auslesen - Seite 5).
Damit hast du dann keinen String als Rückgabe, sondern Arrays und die kannst Du dann nach dem gewünschten Datum durchsuchen.

Gruß
Jens

Hallo Jens,

danke für deine Hilfe. Ich finde die Idee super, leider bin ich nicht fit genug das umzusetzen.

Ich habe $term_inhalt aus dem Skript von Schablone genommen, leider führt das zu nichts…

„Warning: Invalid argument supplied for foreach() in /var/lib/symcon/scripts/41224.ips.php on line 130“

<?
//Ort der iCalender-Datei
$filename       =  IPS_GetKernelDir()."Abfuhrtermine.ics";
//Aufruf der Funktion

//echo($filename);
$iCal_String   =  iCal_to_String($filename);
//ausgeben der Termine
//echo $iCal_String;  

function iCal_to_String($filename)
{
/*=============================================================
iCal_to_String - Martin Heinzel - 16.12.2011
Version: 0.1

Beschreibung:
Mit dieser Funktion wird eine iCalender Datei in eine String-
variable gewandelt.


Änderungen
----------

tt.mm.jjjj von Version x.x -> y.y

Beschreibung:

================================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$iCal_DS_komplett                     =    "";    //Komplette iCalender Datensatz
$iCal_String                        =  "";    //gewandelter iCalender Datensatz
$term_jahr                              =     "";   //Termin Jahr
$term_monat                             =     "";   //Termin Monat
$term_tag                                =    "";   //Termin Tag
$term_inhalt                             =    "";   //Termin Text

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Daten holen
if(file_exists($filename))
{

    //Termine in Variable einlesen
    $iCal_DS_komplett                    = file_get_contents($filename);
    //Den kompletten Datensatz zerlegen
    $iCal_DS_komplett_arr             = explode("BEGIN:", $iCal_DS_komplett);

    //alle Datensätze durchlaufen
    foreach($iCal_DS_komplett_arr as $key => $value)
    {
        //Der erste Datensatz ist "2"
       if($key > 1)
        {
            //einzelnen Datensatz in Daten zerlegen
           $iCal_arr = explode("
", $value);

            //Nur Datensätze vom Typ "VEVENT" durchlaufen
            if($iCal_arr[0] == "VEVENT")
            {
                //alle Daten durchlaufen
                foreach($iCal_arr as $ikey => $ivalue)
                {
                    //Daten zerlegen in Parameter und Wert
                $Data_arr = explode(":", $ivalue);

                    //Kontrolle der Parameter
                    Switch($Data_arr[0])
                    {

                        //Zeitstempel Datum
                        case "DTSTART;VALUE=DATE":
                           $term_jahr      = substr($Data_arr[1], 0, 4);
                           $term_monat     = substr($Data_arr[1], 4, 2);
                           $term_tag        = substr($Data_arr[1], 6, 2);
                            break;

                        case "SUMMARY":
                          $term_inhalt     = $Data_arr[1];
//Echo($Data_arr);
Switch($term_inhalt)
                             {
                               case "Restabfalltonne":
                                $restmuell[] = $term_tag.".".$term_monat.".".$term_jahr;
                             break;
                          case "Biotonne":
                                    $biomuell[] = $term_tag.".".$term_monat.".".$term_jahr;
                               break;
                          case "Gelber Sack":
                                    $wertstoff[] = $term_tag.".".$term_monat.".".$term_jahr;
                               break;
                          case "Papiertonne":
                                     $papier[] = $term_tag.".".$term_monat.".".$term_jahr;
                             break;
                          case "Gelber Sack":
                                     $baum[] = $term_tag.".".$term_monat.".".$term_jahr;
                            }
							
                    }
                }
                
                $iCal_String            .= $term_tag.".".$term_monat.".".$term_jahr.",".$term_inhalt."
";
                  
            }
        }
    }
}
else
{
    //Wenn die Datei nicht existiert dann wird ERROR_FILENAME ausgegeben
    $iCal_String             = "ERROR_FILENAME";
}

return $iCal_String;
//------------------------- Main ENDE --------------------------

}

//Aufruf der Funktion
$iCal_String   =  iCal_to_String($filename);

//ausgeben der Termine
//print_r($iCal_String);
foreach($iCal_String[0] as $datum)
    {echo $datum."
";}   
//SetValue(46242 /*[Müll\Termine]*/,$restmuell);
  

?>

Wäre cool wenn mir jemand helfen könnte…

LG Izack

Bin noch im Büro.

Es kommt nur diese eine Fehlermeldung ?
Was kommt denn in der Variable an, hast Du geprüft ob etwas zurück kommt ?

Beim Anzeigen der Variable z.B. $restmuell* gibt es eine Fehlermeldung.:
Fatal error: Cannot use for reading in /var/lib/symcon/scripts/41224.ips.php on line 127

Kann die Klammern nicht verwerten…

LG Izack

Du hast den Teil an der falschen Stelle eingebaut :wink: bzw. nicht auf die Klammern geachtet.

function iCal_to_String($filename)
{
/*=============================================================
iCal_to_String - Martin Heinzel - 16.12.2011
Version: 0.1

Beschreibung:
Mit dieser Funktion wird eine iCalender Datei in eine String-
variable gewandelt.


Änderungen
----------

tt.mm.jjjj von Version x.x -> y.y

Beschreibung:

================================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$iCal_DS_komplett                     		=  "";    //Komplette iCalender Datensatz
$restmuell                        			=  "";    //gewandelter iCalender Datensatz
$biomuell                        			=  "";    //gewandelter iCalender Datensatz
$wertstoff                        			=  "";    //gewandelter iCalender Datensatz
$papier                        				=  "";    //gewandelter iCalender Datensatz
$baum                        					=  "";    //gewandelter iCalender Datensatz
$term_jahr                              	=  "";    //Termin Jahr
$term_monat                             	=  "";    //Termin Monat
$term_tag                               	=  "";    //Termin Tag
$term_inhalt                            	=  "";    //Termin Text

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Daten holen
if(file_exists($filename))
	{

	    //Termine in Variable einlesen
	    $iCal_DS_komplett                    = file_get_contents($filename);
	    //Den kompletten Datensatz zerlegen
	    $iCal_DS_komplett_arr             = explode("BEGIN:", $iCal_DS_komplett);

	    //alle Datensätze durchlaufen
	    foreach($iCal_DS_komplett_arr as $key => $value)
	    	{
	        //Der erste Datensatz ist "2"
	       if($key > 1)
	        	{
	            //einzelnen Datensatz in Daten zerlegen
	           $iCal_arr = explode("
", $value);

	            //Nur Datensätze vom Typ "VEVENT" durchlaufen
	            if($iCal_arr[0] == "VEVENT")
	            	{
	                //alle Daten durchlaufen
	                foreach($iCal_arr as $ikey => $ivalue)
	                	{
			               //Daten zerlegen in Parameter und Wert
			                $Data_arr = explode(":", $ivalue);

			                    //Kontrolle der Parameter
			                    Switch($Data_arr[0])
			                    {

			                        //Zeitstempel Datum
			                        case "DTSTART;VALUE=DATE":
			                           $term_jahr      = substr($Data_arr[1], 0, 4);
			                           $term_monat     = substr($Data_arr[1], 4, 2);
			                           $term_tag        = substr($Data_arr[1], 6, 2);
			                            break;

			                        case "SUMMARY;LANGUAGE=de":
			                          $term_inhalt     = $Data_arr[1];

			                    }
		                }
						 Switch($term_inhalt)
							 {
							   case "Restmuell":
		                		$restmuell[] = $term_tag.".".$term_monat.".".$term_jahr;
		                     break;
		                  case "Biomuell":
									$biomuell[] = $term_tag.".".$term_monat.".".$term_jahr;
				               break;
		                  case "Wertstofftonne":
									$wertstoff[] = $term_tag.".".$term_monat.".".$term_jahr;
				               break;
		                  case "Papiertonne":
							 		$papier[] = $term_tag.".".$term_monat.".".$term_jahr;
		                     break;
		                  case "Weihnachtsbaeume":
							 		$baum[] = $term_tag.".".$term_monat.".".$term_jahr;
							}
					}
	        }
	    }
	}
else
	{
	    //Wenn die Datei nicht existiert dann wird ERROR_FILENAME ausgegeben
	    $iCal_String             = "ERROR_FILENAME";
	}
$ergebnis = array($restmuell,$biomuell,$wertstoff,$papier,$baum);
return $ergebnis;
//------------------------- Main ENDE --------------------------

}

Musst dann nur noch wieder die CASE Möglichkeiten an Deine anpassen.

super, danke für deine Hilfe. Ich muß noch so viel lernen… Ich bastle noch ein wenig an dem Ding rum und werde das fertige Projekt dann hier posten.

LG Izack

Hallo,

Ich habe noch eine kleine Frage, ich möchte in meiner If Bedingung nach dem Datum suchen, das in einer Variablen gespeichert ist.

Leider löst es einen Fehler aus.

so funktioniert es:

if (array_search('21.03.2017', $restmuell, true ) ) {
   echo "Heute ist Restmüll dran";
}	

aber wenn ich die Variabel einsetzte nicht.

if (array_search($today, $restmuell, true ) ) {
   echo "Heute ist Restmüll dran";
}	

Was muß ich ändern?

LG Izack

Naja, wie wird denn $today gefüllt ?
Hast du mal ein echo $today gemacht ?:rolleyes:

Hi,

also:

$today = date(„d.m.Y“);
echo($today);

Ergebnis: 08.03.2017

wenn ich es mit der Hand eingebe funktioniert es… :confused:

mit $today = Notice: Undefined variable: today in /var/lib/symcon/scripts/47470.ips.php on line 129

Der Fehler sagt doch aus das die Variable unbekannt ist !?
Du musst die natürlich vorher auch definieren bzw. füllen. Wie sieht der Aufruf denn aus? Nur mit Einzelheiten lässt sich schwer etwas dazu sagen

Hab es gefunden, danke… also das $today stand ganz oben am Anfang des scriptes und wurde wohl zwischen durch gelöscht… :banghead:

$today = date("d.m.Y");
//echo($today);                         
$tomorrow = date("d.m.Y", strtotime("+1 days"));

	
if (array_search($tomorrow, $restmuell, true ) ) {
   echo "Heute ist Restmüll dran";
}	

so funktioniert es…tausend dank Jens…

LG Izack

Gerne doch :loveips:

Das $today was Du meinst ist nur innerhalb der Funktion gültig , da wurde nix gelöscht :wink: