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 …
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.
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.
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.
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 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.
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: