Hallo,
keine Ahnung ob und von wann das Script fehlerhaft sein soll.
Wenn ich es manuell starte kommt kein Fehler. Es sieht alles soweit gut aus.
Ich bleibe bei meinen 4 Fragen (noch einmal neu formuliert).
1.) Wie kann ich prüfen, was für ein Fehler überhaupt vorliegt (Timeout, Syntax-Fehler, Exception)?
2.) Wie erfahre ich den Fehlerort, der zu dieser Fehlermarkierung geführt hat? (Zeile, Datum/Zeit des registrierten Fehlers; dann könnte ich im Log mal schauen)
3.) Das Skript ist durch die Markierung nicht irgendwie gesperrt? D.h. ruft ein Trigger dieses Skript auf, läuft es trotzdem?
4.) Wie lösche ich diese Markierung?
Hier das Script (unten; sind noch einige Debug echo drinne), welches ich mit diesem Trigger-Aufruf starte:
IPS_RunScriptEx(15212 /*[Alarmanlage\Text To Speech\ISDN-Ansage]*/ ,Array("text"=>$text));
$text enthält den Ansagetext
<?
//läuft eventuell schon eine Ansage/TTS Umsetzung? Dann abbruch
echo "text to speech aufgerufen<br>";
if (GetValueBoolean(14535 /*[Alarmanlage\Text To Speech\Speaking]*/ )==1)
{
return;
}
$nummer=GetValueString(57217 /*[Vorgabewerte\Telefonnummer]*/ );
if (empty($text) or empty($nummer)) {
echo "keine textdaten oder Tel-Nr. übergeben";
return; //keine Daten dann nichts anrufen
}
// zu häufige Ansagen unterbinden;
$mintime=5*60; //5min.
$z2=time(); //jetzt
if (($z2-GetValueInteger(45251 /*[Alarmanlage\Text To Speech\Time_derletztenAnsage]*/ ))<=$mintime) //weniger als mintime. her
{
Echo "Speak zu oft";
return;
}
echo "jetzt ANSAGEN! ".$text."<br>";
SetValueInteger(45251 /*[Alarmanlage\Text To Speech\Time_derletztenAnsage]*/ ,$z2);
//variable $text muß den anzusagenden Text enthalten
//$text='Am Bahndamm 3, Dieses ist ein Testanruf der Gebäudesteuerung Am Bahndamm 3; Vielen Dank, Tschüß';
$dateiname='D:\speak'.time().'.wav';
TTS_GenerateFile(54855 /*[Alarmanlage\Text To Speech]*/,$text,$dateiname, 6);
//TTS_Speak(54981 /*[Objekt #54981 existiert nicht]*/, "Der Rauchmelder in der Werkstatt hat Alarm ausgelst",true);
// $len = ISDN_PlayWave(37323 /*[Objekt #37323 existiert nicht]*/, $ISDN_CONNECTION, $file);
// IPS_Sleep($len);
$isdn=14940 /*[Alarmanlage\ISDN Module]*/;
$id = ISDN_Connect($isdn ,$nummer);
do {
IPS_Sleep(500);
$callinfo = ISDN_GetConnectionInfo($isdn, $id);
} while ( $callinfo["State"] != "4") ; // warten, bis abgenommen wurde; nach 30 Sekunden Timeout des PHP Skriptes
IPS_Sleep(1000); //1 Sek. warten
$len=ISDN_PlayWave($isdn,$id, $dateiname);
IPS_Sleep($len+200);
ISDN_StopPlay($isdn , $id);
ISDN_Disconnect($isdn,$id);
unlink($dateiname);
?>
Es kann auch sein, das bei den Versuchen in der Vergangenheit die ISDN Befehle mal Fehler produziert haben (kein Amt, Benutzer legt vor Ende des kompletten Ansagetextes auf etc.). Nur ist das kein Fehler im Script selbst.