Hallo Thomas,
deinen Beitrag hatte ich schon gesehen, aber zu dem Zeitpunkt hatte ich bereits eine eigene Funktion und die wollte ich nicht unbedingt ersetzen :D.
function TM_Sprich($Raum,$Text,$Alarm)
{
/*
Folgende Räume sind möglich:
- Bad
- Wohnzimmer
- Schlafzimmer
- * (gibt den Text in allen Räumen wieder, die für Sprachausgabe aktiviert sind.
- Kommagetrennte Kombinationen sind möglich (Bad, Wohnzimmer)
Vor einer Ansage wird geprüft, ob der entsprechende Lautsprecher Strom hat und ggf. wird er eingeschaltet.
Sollte Musik laufen, so wird die Musik angehalten und nach der Ansage wieder fortgesetzt.
*/
$Lautstaerke = GetValue(22528 /*[Einstellungen\Sprachausgabe\Lautstärke für Sprachansagen]*/);
// Wenn Parameter "Alarm" nicht übergeben wird, dann wird von keinem Alarm ausgegangen.
if($Alarm == 1)
{
$Lautstaerke = 100;
} else {
$Alarm = 0;
}
$Raum_Orig = $Raum;
if($Raum == '*')
$Raum = "Wohnzimmer,Bad,Schlafzimmer";
$tmp1 = preg_split("/,/",$Raum);
foreach($tmp1 as $raum)
{
$tmp2 = 99;
$tmp3 = 99;
switch($raum)
{
case "Bad":
// Prüfen, ob im Schlafzimmer Sprachausgabe gewünscht ist
if((GetValue(20971 /*[Einstellungen\Sprachausgabe\Bad]*/) == true) or ($Alarm == 1))
{
//Entweder Sprachausgabe im Schlafzimmer ist aktiviert oder das "Alarm" Flag wurde gesetzt und somit auch Sprachausgabe wenn nicht gewünscht!
// Die Lautstärke des MediaPlayers ermitteln und speichern (falls Musik läuft soll die Lautstärke nach der Ansage wiederhergestellt werden)
$tmp3 = GetValue(54768 /*[Wohnung\Bad\Musik\Lautstärke]*/);
WAC_SetVolume(29857 /*[Wohnung\Bad\Musik]*/,0);
// Prüfen, ob der Lautsprecher Strom hat
if(GetValue(20356 /*[Wohnung\Bad\Strom für Lautsprecher\Status]*/) == FALSE)
{
$tmp2 = 0;
HM_WriteValueBoolean(25474 /*[Wohnung\Bad\Strom für Lautsprecher]*/,"STATE",TRUE);
}
WAC_SetVolume(31892 /*[Wohnung\Bad\MP Sprachausgabe]*/,$Lautstaerke);
$tmp_Datei = IPS_GetKernelDir() . "/Media/" . rand() . ".wav";
TTS_GenerateFile(36830 /*[Wohnung\Bad\Sprachausgabe]*/,$Text,$tmp_Datei,35);
WAC_PlayFile(31892 /*[Wohnung\Bad\MP Sprachausgabe]*/,$tmp_Datei);
IPS_Sleep(1000);
$tmp4 = GetValue(47391 /*[Wohnung\Bad\MP Sprachausgabe\Status]*/);
while($tmp4 == 1)
{
IPS_Sleep(1000);
$tmp4 = GetValue(47391 /*[Wohnung\Bad\MP Sprachausgabe\Status]*/);
}
if($tmp2 == 0)
{
// Der Lautsprecher war vor der Ansage aus. Also jetzt wieder abschalten.
HM_WriteValueBoolean(25474 /*[Wohnung\Bad\Strom für Lautsprecher]*/,"STATE",FALSE);
}
// Sicherheitshalber die Lautstärke des MediaPlayers wiederherstellen (falls Musik lief)
WAC_SetVolume(29857 /*[Wohnung\Bad\Musik]*/,$tmp3);
unlink($tmp_Datei);
}
break;
case "Wohnzimmer":
if((GetValue(53387 /*[Einstellungen\Sprachausgabe\Wohnzimmer]*/) == true) or ($Alarm == 1))
{
$tmp3 = GetValue(24711 /*[Wohnung\Wohnzimmer\Musik\Lautstärke]*/);
WAC_SetVolume(21238 /*[Wohnung\Wohnzimmer\Musik]*/,0);
if(GetValue(23439 /*[Wohnung\Wohnzimmer\Strom Lautsprecher\STATE]*/) == FALSE)
{
$tmp2 = 0;
HM_WriteValueBoolean(59524 /*[Wohnung\Wohnzimmer\Strom Lautsprecher]*/,"STATE",TRUE);
}
WAC_SetVolume(58689 /*[Wohnung\Wohnzimmer\MP Sprachausgabe]*/,$Lautstaerke);
$tmp_Datei = IPS_GetKernelDir() . "/Media/" . rand() . ".wav";
TTS_GenerateFile(52352 /*[Wohnung\Wohnzimmer\Sprachausgabe]*/,$Text,$tmp_Datei,35);
WAC_PlayFile(58689 /*[Wohnung\Wohnzimmer\MP Sprachausgabe]*/,$tmp_Datei);
IPS_Sleep(1000);
$tmp4 = GetValue(50132 /*[Wohnung\Wohnzimmer\MP Sprachausgabe\Status]*/);
while($tmp4 == 1)
{
IPS_Sleep(1000);
$tmp4 = GetValue(50132 /*[Wohnung\Wohnzimmer\MP Sprachausgabe\Status]*/);
}
if($tmp2 == 0)
{
HM_WriteValueBoolean(59524 /*[Wohnung\Wohnzimmer\Strom Lautsprecher]*/,"STATE",FALSE);
}
WAC_SetVolume(21238 /*[Wohnung\Wohnzimmer\Musik]*/,$tmp3);
unlink($tmp_Datei);
}
break;
case "Schlafzimmer":
if((GetValue(21287 /*[Einstellungen\Sprachausgabe\Schlafzimmer]*/) == true) or ($Alarm == 1))
{
// Dieser Teil muss noch auf die neue Logik umgestellt werden!
$tmp3 = GetValue(31030 /*[Wohnung\Schlafzimmer\Musik\Lautstärke]*/);
WAC_SetVolume(53025 /*[Wohnung\Schlafzimmer\Musik]*/,0);
TTS_Speak(47570 /*[Wohnung\Schlafzimmer\Sprachausgabe]*/,$Text,TRUE);
}
break;
}
}
}
Meine Funktion rufe ich beispielsweise so auf:
TM_Sprich('*','Das ist eine Ansage die kein Alarm ist und auf allen Räumen ausgegeben wird.',0);
Der Stern wird dann im Script durch „Wohnzimmer,Bad,Schlafzimmer“ ersetzt, dann läuft die Logik 3 Mal und führt die für jeden Raum passende Logik aus.
Aber sobald er an die Stelle „WAC_PlayFile“ kommt wartet das Script bis der Befehl beendet ist und geht dann erst weiter zum nächsten Raum.
Kann ich irgendwie bewirken, dass er WAC_PlayFile aufruft und dann mit der Scriptbearbeitung direkt weiter macht ohne auf Beendigung von WAC_PlayFile zu warten?
Gruß
Thorsten