Skript starten per Kurzwahl über ISDN ???

Ich möchte auf meinen Telefonen eine Kurzwahl einrichten um dann automatisch ein IPS Skript ausführen zu lassen (z.B. Garagentor öffnen).

Über die Telefonanlage (Fritzbox) kann ich das ISDN Modul in IPS über **52 anrufen.
Connect und DTMF funktionieren manuell einwandfrei. Ich möchte allerdings die DTMF Signale zur Erkennung des zu startenden Skriptes direkt in der Kurzwahl einbetten damit ich am Telefon wirklich nur eine Taste zum Starten des Skriptes drücken muß.

Ich habe dies am Telefon schon mit der abgespeicherten Kurzwahl „**52p123“ (p für Pause, 123 zur Erkennung des zu startenden IPS-Skriptes) versucht, leider ohne Erfolg. Auch mit * und # funktioniert nicht.
Wie kann ich in via Kurzwahl automatisch nach dem Connect auch DTMF Signale an IPS weitergeben???

Hat da jemand eine Idee?
Habe im Forum hierzu leider nichts finden können.

Danke

Ich wüsste nicht, das soetwas möglich ist.

paresy

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

Vielleicht solltet ihr oben in dem Skript die Telefonnummern rauslöschen, sonst gibts bald Telefonterror. :eek:

Hallo,
danke für den Tip, habs mal besser entfernt.

Gruß
Christian

Danke c.radi für den Tipp, aber DTMF Auswertung habe ich schon am Laufen.
Meine erste Idee war das jeweilige Skript per DTMF auszuwählen.
Wenn die Verbindung steht, dann funktioniert das auch.

Aber ich möchte es so einfach wie möglich haben und wirklich nur eine Taste (Kurzwahltaste am Telefon) betätigen.
Leider habe ich es nicht geschafft die zu sendenen DTMF Signale im Kurzwahlspeicher an die Rufnummer anzuhängen.
Konnte bislang keine Möglichkeit finden mit nur einer Kurzwahltaste zu starten.

Irgendwelche Ideen hierzu? Danke

Ist die Pause lang genug? Du kannst auch mehrere p nutzen. Steht die Verbindung, wenn die Töne nach der Pause gesendet werden?

Ich habe auf mein IP-Symcon in der Telefonanlage ca. 25 MSN registriert.
Innerhal von IP-Symconn prüfe ich dann ob die Rufende Nummer entweder intern oder eine unserer Handynummern ist.
Trifft dies zu, geht es weiter. Ist die Gerufene Nummer in einer Array mit bekannten Schaltnummern, geht es einen weiteren Schritt weiter, sonst kommt spätestens hier eine Ansage „Sie haben sich verwählt, es ist 10 Uhr 12“

Kommt man durch wird in einem Switch nach der Called Number unterschieden
die eine Nummer ändert die Variable für das Deckenlicht,
eine andere startet das Script für den Garagentoröffner,
mit einem anderen fährt der Rolladen auf,

ist die rufende Rufnummer nun tatsächlich intern wird das Gespräch angenommen und sofort wieder aufgelegt,
da das Telefon automatisch im Freisprechmodus auflegt, wenn die Gegenstelle auflegt,
muss ich nur einen Kopf am Telefon betätigen.
Bei einer Handynummer klingelt es weiter, sodass keine Gesprächskosten entstehen.

Wenn ich mal Zeit finde das Script zu personalisieren, setzte ich es hier mal rein.