Case in Schleife

Hallo php Profis,
leider finde ich einen Fehler in meinem Script nicht und brauche etwas Hilfe.
Folgendes Script soll abhängig von der Variabelen „vHeimurlaub“ meine Sonosplayer tagsüber ausschalten (Tagabsenkung im Else-Teil der Schleife oder tagsüber eingeschaltet lassen). Der Else-Teil wird nicht angesprungen, bzw. die darin enthaltenen Case-Anweisungen werden nicht ausgeführt, der If-Teil läuft richtig durch.
Gibt es eventuel in php ein debugtool, sowas wie step in Java, um die Schleifen zu testen?

Danke für Eure Hilfe,

Ralph


<?
/* schaltet Sonos Zeitgesteuert */

$home = getvalueboolean(58326 /*[Klima\Heizung\vHeimurlaub]*/);
$time = date("H:i");

if($home == true) // Keine Tagabsenkung sonos bleibt eingeschaltet
{
switch($time)
{
case "06:00" :
/*Bayern3*/
IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
break;


case"23:15":
/*Sonos aus*/
setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
setValue(17035 /*[Musik\v\Buero\Radio]*/,false);
break;
}
}

Else /* Tagabsenkung Sonos wird tagsüber ausgeschaltet*/
{
switch($time)
{
case "06:00" :
/*Bayern3*/
IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
break;

case "08:35" :
/*Sonos aus*/

setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
setValue(17035 /*[Musik\v\Buero\Radio]*/,false);
break;

case "17:20" :
/*Bayern3*/
IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
break;

case "23:20" :
/*Sonos aus*/
setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
setValue(17035 /*[Musik\v\Buero\Radio]*/,false);
break;
}
}
?> 

Mit Formattierung/EInrückung ist der Code leichter lesbar, aber selbst dann scheint er eigentlich zu funktionieren.

Welchen DatenType hat den die Variable vHeimurlaub?

Zum debuggen verwende ich immer meinen IPSLogger…


<?
	/* schaltet Sonos Zeitgesteuert */

	$home = false;
	$time = "06:00";

	if($home == true) // Keine Tagabsenkung sonos bleibt eingeschaltet
	{
		switch($time)
		{
			case "06:00" :
				/*Bayern3*/
				IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
				break;


			case"23:15":
				/*Sonos aus*/
				setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
				setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
				setValue(17035 /*[Musik\v\Buero\Radio]*/,false);
				break;
		}
	}
	Else /* Tagabsenkung Sonos wird tagsüber ausgeschaltet*/
	{
		switch($time)
		{
			case "06:00" :
				/*Bayern3*/
				IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
				break;

			case "08:35" :
				/*Sonos aus*/

				setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
				setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
				setValue(17035 /*[Musik\v\Buero\Radio]*/,false);
				break;

			case "17:20" :
				/*Bayern3*/
				IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
				break;

			case "23:20" :
				/*Sonos aus*/
				setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
				setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
				setValue(17035 /*[Musik\v\Buero\Radio]*/,false);
				break;
		}
	}
?>

Bau doch mal ein paar echos zum debugen ein. Z.B. so…

<? 
    /* schaltet Sonos Zeitgesteuert */ 

    $home = false; 
    $time = "06:00"; 

    if($home == true) // Keine Tagabsenkung sonos bleibt eingeschaltet 
    { 
        echo "time: ". $time;
        switch($time) 
        { 
            case "06:00" : 
                /*Bayern3*/ 
                IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/); 
                echo "Byern3 im Buero gestartet";
                break; 


            case"23:15": 
                echo "Es ist 23:15 Uhr Sonos wird ausgeschalten";
                /*Sonos aus*/ 
                setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false); 
                setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false); 
                setValue(17035 /*[Musik\v\Buero\Radio]*/,false); 
                break; 
        } 
    } 
    Else /* Tagabsenkung Sonos wird tagsüber ausgeschaltet*/ 
    { 
        echo "time: " .$time;
        switch($time) 
        { 
            case "06:00" : 
                /*Bayern3*/ 
                IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
                echo "Bayern3 im Buero gestartet";
                break; 

            case "08:35" : 
                /*Sonos aus*/ 
               echo "Es ist 08:35 Uhr Sonos aus";

                setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false); 
                setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false); 
                setValue(17035 /*[Musik\v\Buero\Radio]*/,false); 
                break; 

            case "17:20" : 
                /*Bayern3*/ 
               echo "Es ist 17:20 Uhr Bayer3 im Buero gestartet";
                IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/); 
                break; 

            case "23:20" : 
                /*Sonos aus*/
               echo "Es ist 23:20 Uhr Sonos aus"; 
                setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false); 
                setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false); 
                setValue(17035 /*[Musik\v\Buero\Radio]*/,false); 
                break; 
        } 
    } 
?> 

Was zeigt dir das Script dann?

Hi und danke für die schnelle Antwort.
Wenn ich case aus dem Else - Teil herrausnehmen und z.B. ein Echo eingebe, funktioniert der Ansprung, wenn vHeimurlaub == false ist.
Und case wird im If - Teil auch richtig ausgeführt, nur im Else Teil nicht.
Ich blicks nicht:confused:
Ralph

Gibts vielleicht im Else Teil einen Fehler, den du nicht abfängst, oder gar abfängst?

Folgenden Code habe ich eben getestet und er läuft.

<?
    /* schaltet Sonos Zeitgesteuert */

    $home = true;
    $time = "06:00";

    if($home == true) // Keine Tagabsenkung sonos bleibt eingeschaltet
    {
        echo "time: ". $time;
        switch($time)
        {
            case "06:00" :
                /*Bayern3*/
//                IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
                echo "\$home = true / Bayern3 im Buero gestartet";
                break;


            case"23:15":
                echo "Es ist 23:15 Uhr Sonos wird ausgeschalten";
                /*Sonos aus*/
                //setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
                //setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
                //setValue(17035 /*[Musik\v\Buero\Radio]*/,false);
                break;
        }
    }
    Else /* Tagabsenkung Sonos wird tagsüber ausgeschaltet*/
    {
        echo "time: " .$time;
        switch($time)
        {
            case "06:00" :
                /*Bayern3*/
//                IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
                echo "\$home = false / Bayern3 im Buero gestartet";
                break;

            case "08:35" :
                /*Sonos aus*/
               echo "Es ist 08:35 Uhr Sonos aus";

//                setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
//                setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
//                setValue(17035 /*[Musik\v\Buero\Radio]*/,false);
                break;

            case "17:20" :
                /*Bayern3*/
               echo "Es ist 17:20 Uhr Bayer3 im Buero gestartet";
//                IPS_Runscript(11955 /*[Musik\Sonos\sB3-Buero]*/);
                break;

            case "23:20" :
                /*Sonos aus*/
               echo "Es ist 23:20 Uhr Sonos aus";
//                setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
//                setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
//                setValue(17035 /*[Musik\v\Buero\Radio]*/,false);
                break;
        }
    }
?>

Werf doch mal alle SetValue und IPS_Runscript Befehle raus und schau ob das Gerüst tut was es soll.

Viele Grüße
Christian

Hi Christian,
bin erst heute abend wieder am Com, teste Deine Vorschlag dann sofort und melde mich,
Ralph

Nachdem ich gestern selbst zwei Stunden einen dummen Fehler von mir gesucht und gefunden habe:

Backslash in Pfadangabe nicht „escaped“ … hat zu wundersamen Ergebnissen geführt.

Das nur, weil ich bei Dir auch hier und da einen im Skript gesehen habe.

Gruß Tom

Die Backslashs escapen das $ Zeichen um den Variablennamen in der Ausgabe zu haben.

Hallo Leute,
ich habe den Fehler dank Eurer Tips gefunden.
Erstens war wirklich eine setvalue Variabele falsch gesetzt und
zweitens hatte ich in zwei Punkten die Zeit in der Case Anweisung als „15:00:00“ angegeben und nicht als „15:00“ und dann habe ich die Sekunde zum Ausführen verpasst.

Danke für die tolle Community Hilfe:loveips: