mktime und V2.1

Hallo zusammen,

ich habe mittlerweile auf die 2.1 upgedatet und bekomme nun in einem alten Script eine Fehlermeldung:

Notice:  A non well formed numeric value encountered in C:\Programme\IP-Symcon2\scripts\53219.ips.php on line 91

Notice:  A non well formed numeric value encountered in C:\Programme\IP-Symcon2\scripts\53219.ips.php on line 93

Folgendes Script wird verwendet:


...
case "Absenk":
	//Nur Absenkbetrieb
	$Bad_Zeit = array("07:30", "22:30","" ,"");
	$Schlafzimmer_Zeit = array("07:30", "22:30","" ,"");
	$Kueche_Zeit = array("07:30", "22:30","" ,"");
	$Katzen_Zeit = array("07:30", "22:30","" ,"");
	$Ankleide_Zeit = array("07:30", "22:30","" ,"");
	$Diele_Zeit = array("07:30", "22:30","" ,"");
	$WC_Zeit = array("07:30", "22:30","" ,"");
	$Wohnzimmer_Zeit = array("07:30", "22:30","" ,"");
	break;
}

		$liste = IPS_GetChildrenIDs(48294 /*[1Wire\Temperatursensoren\Regelbar]*/);
		foreach($liste as $temp)
			{
	   		$name = IPS_GetName($temp);
	   		$sollID = IPS_GetVariableIDByName("SOLL_".$name,$temp);
	   		$AbsenkID = IPS_GetVariableIDByName("Absenk_".$name,$temp);
	   		$ZeitenID = IPS_GetVariableIDByName("Zeiten_".$name,$temp);
	   		SetValueFloat($sollID, ${$name."_max"});
	   		SetValueFloat($AbsenkID, ${$name."_min"});


				$Zeiten = ${$name."_Zeit"};
				$Zeit1_a = explode(":",$Zeiten[0]);
				$Zeit1_a = mktime($Zeit1_a[0],$Zeit1_a[1],0,$Zeitstempel);
				$Zeit1_e = explode(":",$Zeiten[1]);
				$Zeit1_e = mktime($Zeit1_e[0],$Zeit1_e[1],0,$Zeitstempel);
				if($Zeiten[2] != "")
				   {
						$Zeit2_a = explode(":",$Zeiten[2]);
						$Zeit2_a = mktime($Zeit2_a[0],$Zeit2_a[1],0,$Zeitstempel);
						$Zeit2_e = explode(":",$Zeiten[3]);
						$Zeit2_e = mktime($Zeit2_e[0],$Zeit2_e[1],0,$Zeitstempel);
				   }
				elseif($Zeiten[2] == "")
				   {
				      $Zeit2_a = 0;
				      $Zeit2_e = 0;
				   }
				$ZeitenString = $Zeit1_a.",".$Zeit1_e.",".$Zeit2_a.",".$Zeit2_e;
				SetValueString($ZeitenID, $ZeitenString);

			}


Die Zeilen die den Fehler verursachen sind diese hier (die beiden mit dem mktime() ) :


				$Zeit1_a = mktime($Zeit1_a[0],$Zeit1_a[1],0,$Zeitstempel);
				$Zeit1_e = explode(":",$Zeiten[1]);
				$Zeit1_e = mktime($Zeit1_e[0],$Zeit1_e[1],0,$Zeitstempel);

Trotz Fehler läuft das Script, aber die Fehlerausgabe nervt mich nun mal … was muss ich also tun ??

Gruß
Jens

Du übergibts Strings, die Funktion erwartet aber Integer-Werte. Probier mal folgendes:

                $Zeit1_a = mktime((int)$Zeit1_a[0],(int)$Zeit1_a[1],0,$Zeitstempel);
                $Zeit1_e = explode(":",$Zeiten[1]);
                $Zeit1_e = mktime((int)$Zeit1_e[0],(int)$Zeit1_e[1],0,$Zeitstempel);

Gegebenenfalls musst Du auch noch $Zeitstempel auf int casten, das ist aus Deinem Skript ja so nicht ersichtlich.

Hallo Horst,

danke für den Hinweis… werde das gleich mal testen. Ich hatte das zwar vorhin schon mal versucht, aber ein 2. Versuch kann nicht schaden.
Liegt das jetzt daran, das die 2.1 genauer ist bei der Abarbeitung der Funktionen??

Gruß
Jens

edit
Der Hinweis mit dem Zeitstempel war der springende Punkt, den hatte ich vorhin vergessen. Danke !!

Die 2.1 hat das PHP-Error-Reporting jetzt standardmäßig auf E_ALL. Damit findet man viele kleinere Fehler. Oft fallen die nicht auf, da PHP die standardmäßig korrigiert. Die Korrektur kann allerdings auch gerne mal daneben liegen, daher haben wir uns für E_ALL entschieden.