Morgens sanft wecken

Hallo ich habe mir am WE ein Script geschrieben mit dem ich mich in Zukunft morgens wecken lassen möchte. Möchte das ganze irgendwann mal in Ferengi-Masters Dashboard-Wecker integrieren, aber vorher sollte dieses Script noch einwandfrei so laufen. Denn das tut es leider nicht.

Ziel ist eigentlich nur, das innerhalb von 15 Minuten das Licht langsam hochgedimmt wird und mein Radiosender in ca. 1 Minute auf Lautstärke 40 hoch regelt. Später wird ein anderes Script ausgeführt das mir das Wetter vorliest. Das klappt soweit einwandfrei

Probleme die Aufreten sind das manchmal das Webradio nicht startet, oder es startet doppelt oder die Lautstärke wird nicht langsam hoch gedimmt. (Und ich bekomme morgens fast einen Herzinfakt).

Für Vorschläge was ich vom coden alles verbessern kann freue mich.

<?
set_time_limit(0);

//Licht
   //Licht innerhalb von 15 Minuten hoch dimmen
FS20_SetIntensity(58169 /*[Wohnzimmer\Alle Wohnzimmer Dimmer]*/, 16,600);

//Radiosender 1Live starten
$id_sound = 24077 /*[XXX-Instanzen-XXX\Media Player]*/;
WAC_SetVolume($id_sound, 0);
WAC_PlayFile($id_sound, 'http://gffstream.ic.llnwd.net/stream/gffstream_stream_wdr_einslive_a');
SetValueBoolean(15050 /*[Infrarot\Musik Server]*/, true);

//Lautstärke langsam hochregeln
for ($Vol=0; $Vol<40; $Vol++)
	{
   WAC_SetVolume($id_sound, $Vol);
	IPS_Sleep (5000); 
	}
IPS_Sleep (480000);  //8 Minuten Radio hören

//Lautstärke langsam runterregeln
for ($Vol=40; $Vol>10; $Vol--)
	{
   WAC_SetVolume($id_sound, $Vol);
	IPS_Sleep (180);
	}

// Begrüßung + Wetteransage via Linguatec
IPS_RunScript(50274 /*[XXX-Instanzen-XXX\WWW Reader\Begrüßung (morgens) und Wettervorhersage]*/);
IPS_Sleep (30000 /*[Objekt #30000 existiert nicht]*/);

//Lautstärke langsam wieder hochregeln
for ($Vol=10; $Vol<40; $Vol++)
	{
   WAC_SetVolume($id_sound, $Vol);
	IPS_Sleep (500);
	}

?>

also, ohne es weiter zu lesen, würde ich mal sagen, die langen sleeps sollten raus, und das ganze in timer umbauen … glaueb es ist keine gute idee, bzw sogar schlecht, wenn ein script so lange läuft …

Morgen

Warum er sich manchmal so anstellt kann ich dir leider auch nicht sagen, aber wie sn00py schon geschrieben hat würde ich auf jedenfall die sleeps weglassen.
Versuchs doch mal mit Timern und einer Variable die immer eins weiterzählt und jedesmal wenn das Programm aufgerufen wird was anderes ausführt.
zum Beispiel


$position = getvalue(12345);

switch ($position)
{
case "0": //erster aufruf
     FS20_SetIntensity(58169 /*[Wohnzimmer\Alle Wohnzimmer Dimmer]*/, 16,600);
   //Radiosender 1Live starten 
   $id_sound = 24077 /*[XXX-Instanzen-XXX\Media Player]*/;
   WAC_SetVolume($id_sound, 0); 
   WAC_PlayFile($id_sound, 'http://gffstream.ic.llnwd.net/stream/gffstream_stream_wdr_einslive_a');
 SetValueBoolean(15050 /*[Infrarot\Musik Server]*/, true);
//Lautstärke langsam hochregeln
setvalue(12345,1); //eine position weiter schalten
IPS_SetScriptTimer($IPS_SELF,10
break;
case "1"
   $vol = getvalue(23456)+10; // lautstärke der Sounkarte
   WAC_SetVolume($id_sound, $Vol);
IPS_SetScriptTimer($IPS_SELF,20); // alle 20 sekunden lauter
   if ($vol >30) //wenn lautstärke erreicht dann nächste position ausführen
   {
       setvalue(12345,2);//eine position weiter schalten
       IPS_SetScriptTimer($IPS_SELF,480); 8 Minuten Radio hören
   }
break;

case "2":
   $vol = getvalue(23456)-10; // lautstärke der Sounkarte
   WAC_SetVolume($id_sound, $Vol);
    IPS_SetScriptTimer($IPS_SELF,5); // alle 5 sekunden leiser
   if ($vol < 20) // wenn unter 20 dann weiter
   {
       setvalue(12345,3);//eine position weiter schalten
       }

break;
case "3":
// Begrüßung + Wetteransage via Linguatec
IPS_RunScript(50274 /*[XXX-Instanzen-XXX\WWW Reader\Begrüßung (morgens) und Wettervorhersage]*/);
setvalue(12345,4);//eine position weiter schalten
       IPS_SetScriptTimer($IPS_SELF,3000); 5 Minuten Wetter hören
break;
//usw....
// beim letzten Case dann 
setvalue(12345,0);//position zurücksetzen
       IPS_SetScriptTimer($IPS_SELF,0); //Timer aus
}

So ich hoffe das hilft Dir ein wenig weiter.

Gruß Jannis

P.S.: Programm nicht getestet soll auch nur veranschaulichen wies gehen könnte.

Ok irgendwie blicke ich jetzt mit dem Timer und der Variablen die eins weiter zählt noch nicht so ganz durch

$position = getvalue(12345);

Verweist die auf eine Variable bei mir in der Stammbaumansicht oder ist das einfach eine Variable im Script?

Ich bekomme bei deinem Script folgenden Fehler:

Parse error: parse error, unexpected T_CASE, expecting ‚:‘ or ‚{‘ in [Sonstiges\Wecker2\wecker1] on line 5

Hallo,

dies Case Anweisungen müssen in {} eingefasst werden.

switch ($position) {
case "0": //erster aufruf
.
.
.
//und ganz unten
}

Hallo

Die Variable Position 12345 musst Du anlegen. Da das Script ja immer wieder neu aufgerufen wird weiß das Script ohne „exterene“ Variable ja nicht was es machen soll.

Das mit dem Fehler ist wie von Attain schon erklärt die fehlenden Klammern.

Gruß Jannis

So lange ist es her das ich mich meiner Hausautomation gewidmet habe. Die Arbeit und der Sommer hatten mich voll im Griff.
Ich hoffe jemand hat noch die Muße mir zu helfen. :loveips:

Ich habe jetzt eine Variable vom Typ Integer mit der ID 26313 angelegt. Und die Klammern um Case gesetzt.

Wenn das Script startet hängt es an Stelle 1. Dort wird die Lautstärke nicht hochgeregelt. 56416 ist die ID der Variabel „Volume“ vom „Media Player“.

<?
$position = getvalue(26313 /*[Objekt #12345 existiert nicht]*/);

switch ($position)
{
	case "0": //erster aufruf

	   FS20_SetIntensity(58169 /*[Wohnzimmer\Alle Wohnzimmer Dimmer]*/, 16,5); //Licht innerhalb von 2 Minuten hochdimmen

	 //Radiosender 1Live starten
	   $id_sound = 24077 /*[XXX-Instanzen-XXX\Media Player]*/;
	   WAC_SetVolume($id_sound, 0);
	   WAC_PlayFile($id_sound, 'http://gffstream.ic.llnwd.net/stream/gffstream_stream_wdr_einslive_a');
	   SetValueBoolean(15050 /*[Infrarot\Musik Server]*/, true);
	//Lautstärke langsam hochregeln
		setvalue(26313 /*[Objekt #12345 existiert nicht]*/,1); //eine position weiter schalten
		IPS_SetScriptTimer($IPS_SELF,10);
	break;

	case "1":
	   $vol = getvalue(56416)+10; // lautstärke der Sounkarte
	   WAC_SetVolume($id_sound, $Vol);
		IPS_SetScriptTimer($IPS_SELF,20); // alle 20 sekunden lauter
	   if ($vol >30) //wenn lautstärke erreicht dann nächste position ausführen
      {
	       setvalue(26313 /*[Objekt #12345 existiert nicht]*/,2);//eine position weiter schalten
	       IPS_SetScriptTimer($IPS_SELF,48); //8 Minuten Radio hören
	   }
	break;

	case "2":
	   $vol = getvalue(56416 /*[Objekt #23456 existiert nicht]*/)-10; // lautstärke der Sounkarte
	   WAC_SetVolume($id_sound, $Vol);
	   IPS_SetScriptTimer($IPS_SELF,5); // alle 5 sekunden leiser
	   if ($vol < 20) // wenn unter 20 dann weiter
	   {
	       setvalue(26313 /*[Objekt #12345 existiert nicht]*/,3);//eine position weiter schalten
	   }
	break;

	case "3": // Begrüßung + Wetteransage via Linguatec
		IPS_RunScript(50274 /*[XXX-Instanzen-XXX\WWW Reader\Begrüßung (morgens) und Wettervorhersage]*/);
		setvalue(26313 /*[Objekt #12345 existiert nicht]*/,4);//eine position weiter schalten
	   IPS_SetScriptTimer($IPS_SELF,3000); //5 Minuten Wetter hören
	break;

//usw....
// beim letzten Case dann
setvalue(26313,0);//position zurücksetzen
IPS_SetScriptTimer($IPS_SELF,0); //Timer aus
}
?>

Danke.

Guten Morgen

Du hast einmal $vol und dann $Vol da würd ich mal sagen das da der Fehler liegt Gross-/Kleinschreibung beachten.

 $vol = getvalue(56416)+10; // lautstärke der Sounkarte
       WAC_SetVolume($id_sound, $Vol); 

Gruß Jannis

Danke alles auf klein geändert. Leider keine Änderung

	case "1":
	   $vol = getvalue(56416)+10; // lautstärke der Sounkarte
	   WAC_SetVolume($id_sound, $vol);
		IPS_SetScriptTimer($IPS_SELF,20); // alle 20 sekunden lauter
	   if ($vol >30) //wenn lautstärke erreicht dann nächste position ausführen
      {
	       setvalue(26313,2);//eine position weiter schalten
	       IPS_SetScriptTimer($IPS_SELF,48); //8 Minuten Radio hören
	   }
	break;

Grad nochmal drübergeschaut und dann hoffentlich den letzten Fehler gefunden.
IPS weiss bei der Case"1" anweisung garnicht was $id_sound ist, da die nur in der ersten Case Anweisung deklariert ist, die er ja beim zweiten aufruf nicht mehr durchläuft.

Also die $id_sound = 24077 aus der ersten case anweisung raus ganz nach oben zur $position.

Gruß Jannis

Bitte keine getvalue Anweisungen benutzen, sondern die des entsprechenden Variablentyps. Das macht vieles einfacher. Desweiteren würde ich für die Lautstärkeregeling eine for Schleife benutzen. Außerdem fällt mir auf, dass die Case Variable in den allseits beliebten " eingebunden ist, das setzt voraus, das $position vom Typ String ist.
Sonst sollte es so aussehen:


case 1:

Danke Jannis für deine Mühe jetzt funktioniert alles wunderbar.:smiley:

Habe die Anregungen aufgenommen. Danke. für die Tips.