Hallo,
ich widerspreche Paresy nur sehr ungern, aber ich denke es könnte schon gehen.
Ich versuche mal das zu erklären. Im ISDN Modul muss ein Ereignisscript hinterlegt sein.
In dem Script werte ich die erlaubten Nummern aus, und habe dann eine Menüführung mit Steuerung über DTMF Töne eingebaut.
Jetzt müsste man testen, ob es möglich ist mehrere Töne nacheinander einzugeben, für das Öffnen des Tors.
Oder man nimmt eben nur einen Ton, sichert das ganze aber über die Rufnummer ab.
Anbei mal mein Code zum Testen. Es gibt zwei Variablen „Anruferstatus“, und „ISDNMenü“ darüber merke ich mir, in welcher Menüebene der Anrufer ist.
Das kannst Du ja mal als Ausgangsbasis verwenden.
<?
$allowed_numbers = Array("0123456"); //leer = alle
$temperatur = "";
$DTMF = "";
$ok = "";
$delay = 100;
if($IPS_SENDER == "ISDN")
{
//Informationen ins Meldungsfenster ausgeben
echo "Event: ".$ISDN_EVENT."
";
if($ISDN_EVENT != "Disconnect")
{
$callinfo = ISDN_GetConnectionInfo(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION);
//Mehr Informationen ausgeben
print_r($callinfo);
}
//Je nach Ereigniss eine Aktion ausführen
switch($ISDN_EVENT)
{
case "Incoming":
//Anruf annehmen? (Entweder leeres Array oder Nummer ist enthalten)
if((sizeof($allowed_numbers) == 0)
or in_array($callinfo['CallingNumber'], $allowed_numbers))
{
SetValueBoolean(25556 /*[Scripts\ISDN\ISDN Module\Anruferstatus]*/,True);
ISDN_AcceptCall(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION); //Anruf annehmen
}
else
{
SetValueBoolean(25556 /*[Scripts\ISDN\ISDN Module\Anruferstatus]*/,False);
ISDN_AcceptCall(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION); //Anruf annehmen
}
break;
case "Connect":
$ok = GetValueBoolean(25556 /*[Scripts\ISDN\ISDN Module\Anruferstatus]*/);
if($ok == "True")
{
//Aktion nach dem Verbinden ausführen
IPS_Sleep(1000);
$file = "D:/ip-symcon/media/guten_tag.wav";
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = "D:/ip-symcon/media/hauptmenue.wav"; //Menü
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = "D:/ip-symcon/media/menueoptionen.wav"; //Menü
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
}
else
{
$file = "D:/ip-symcon/media/unbekannt.wav";
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
ISDN_Disconnect(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION);
}
break;
case "Disconnect":
//Aktion, wenn Anruf beendet wurde
//"ISDN_GetConnectionInfo" ist hier nicht mehr verfügbar!
break;
case "PlayFinish":
//Aktion, wenn Wav abgespielt wurde
break;
case "DTMF":
$DTMF = GetValueInteger(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/);
$DTMF .= $ISDN_DATA;
SetValue(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/, $DTMF);
$ISDNMenue = GetValueInteger(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/);
switch($ISDNMenue)
{
//Aktion wenn 0 gedrückt wird
case "00":
//Aktion nach dem Verbinden ausführen
$file = "D:/ip-symcon/media/guten_tag.wav";
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = "D:/ip-symcon/media/0.wav"; //Menü
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = "D:/ip-symcon/media/1.wav"; //Aussentemperatur
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = "D:/ip-symcon/media/2.wav"; //Temperatur Warmwasser
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = "D:/ip-symcon/media/3.wav"; //Status Aussenbeleuchtung
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = "D:/ip-symcon/media/4.wav"; //Uhrzeit
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = "D:/ip-symcon/media/5.wav"; //Uhrzeit
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = "D:/ip-symcon/media/9.wav";
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
SetValue(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/, 0);
break;
case "01":
$file ='D:/ip-symcon/media/moment.wav';
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$temperatur = GetValueFloat(46053 /*[Haus\EG\Aussen\Wettersensor-IST-Werte\TEMPERATURE]*/);
$temperatur = round($temperatur, 2);
$file ='D:/ip-symcon/media/temp.wav';
$text = "Die Aussentemperatur ist ".$temperatur." Grad ";
TTS_GenerateFile(27353 /*[Scripts\TTS\Text To Speech]*/, $text, $file, 6);
IPS_Sleep(1000);
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
SetValue(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/, 0);
break;
case "02":
$file ='D:/ip-symcon/media/moment.wav';
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$temperatur = GetValueFloat(13271 /*[Haus\Keller\Heizung\Warmwasser-DS18B20\OneWire_3]*/);
$temperatur = round($temperatur, 2);
$file = 'D:/ip-symcon/media/temp.wav';
$text = "Die Temperatur Warmwasser ist ".$temperatur." Grad ";
TTS_GenerateFile(27353 /*[Scripts\TTS\Text To Speech]*/, $text, $file, 6);
IPS_Sleep(1000);
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
SetValue(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/, 0);
break;
case "03":
$status = GetValue(14283 /*[Haus\EG\Wohnzimmer\Steckdose-Status\STATE]*/);
switch($status)
{
case "0":
$status = "Aus";
break;
Case "1":
$status = "An";
break;
}
$file = 'D:/ip-symcon/media/temp.wav';
$text = "Die Beleuchtung ist ".$status;
TTS_GenerateFile(27353 /*[Scripts\TTS\Text To Speech]*/, $text, $file, 6);
IPS_Sleep(1000);
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = 'D:/ip-symcon/media/schalten.wav';
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
break;
case "031":
$file = 'D:/ip-symcon/media/geschaltet.wav';
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
HM_WriteValueBoolean(41993 /*[Haus\EG\Wohnzimmer\Steckdose-Status]*/, "STATE" , !GetValue(14283 /*[Haus\EG\Wohnzimmer\Steckdose-Status\STATE]*/));
IPS_Sleep(500);
$status = GetValue(14283 /*[Haus\EG\Wohnzimmer\Steckdose-Status\STATE]*/);
switch($status)
{
case "0":
$status = "Aus";
break;
Case "1":
$status = "An";
break;
}
$file = 'D:/ip-symcon/media/temp.wav';
$text = " Die Beleuchtung ist nun ".$status;
TTS_GenerateFile(27353 /*[Scripts\TTS\Text To Speech]*/, $text, $file, 6);
IPS_Sleep(1000);
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
SetValue(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/, 0);
break;
case "04":
$file ='D:/ip-symcon/media/moment.wav';
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = 'D:/ip-symcon/media/temp.wav';
$text .= '"Die Uhrzeit ist '.date("H:i").'"';
$path = IPS_GetKernelDir()."/media/";
TTS_GenerateFile(27353 /*[Scripts\TTS\Text To Speech]*/, $text, $file, 6);
IPS_Sleep(1000);
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
SetValue(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/, 0);
break;
case "5":
$status = GetValue(49684 /*[Scripts\_Test\Benachrichtigungen\Test Telefon\Benachrichtigung Telefon]*/);
switch($status)
{
case "0":
$status = "Aus";
break;
Case "1":
$status = "An";
break;
}
$file = 'D:/ip-symcon/media/temp.wav';
$text = " Die Telefonische Benachrichtigung ist ".$status;
TTS_GenerateFile(27353 /*[Scripts\TTS\Text To Speech]*/, $text, $file, 6);
IPS_Sleep(1000);
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
$file = 'D:/ip-symcon/media/schalten.wav';
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
break;
case "051":
$file = 'D:/ip-symcon/media/benachrichtigung.wav';
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
SetValueBoolean(49684 /*[Scripts\_Test\Benachrichtigungen\Test Telefon\Benachrichtigung Telefon]*/,!GetValueBoolean(49684 /*[Scripts\_Test\Benachrichtigungen\Test Telefon\Benachrichtigung Telefon]*/));
IPS_Sleep(500);
$status = GetValue(49684 /*[Scripts\_Test\Benachrichtigungen\Test Telefon\Benachrichtigung Telefon]*/);
switch($status)
{
case "0":
$status = "Aus";
break;
Case "1":
$status = "An";
break;
}
$file = 'D:/ip-symcon/media/temp.wav';
$text = " Die Telefonische Benachrichtigung ist nun ".$status;
TTS_GenerateFile(27353 /*[Scripts\TTS\Text To Speech]*/, $text, $file, 6);
IPS_Sleep(1000);
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
SetValue(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/, 0);
break;
case "09":
$file = 'D:/ip-symcon/media/auf_wiedersehen.wav';
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
ISDN_Disconnect(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION);
SetValue(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/, 0);
break;
//Aktion wenn falsche Taste gedrückt wird
default:
$file = "D:/ip-symcon/media/nofunction.wav";
$len = ISDN_PlayWave(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION, $file);
IPS_Sleep($len + $delay);
//ISDN_Disconnect(15058 /*[Scripts\ISDN\ISDN Module]*/, $ISDN_CONNECTION);
SetValue(22600 /*[Scripts\ISDN\ISDN Module\ISDNMenue]*/,0);
break;
}
break;
}
}
?>
Gruß
Christian