Telefonieren übers Webfront mit Phoner und der Fritzbox

Hallo,
in einem anderen Forumsbeitrag habe ich aufgerufen die Möglichkeit zu erstellen, über das Webfront telefonieren zu können.
Dann hat mich aber selbst die Lust gepackt und ich habe mich trotz des unglaublichen Fernsehprogramms und meinem unglaublichen Programmierkenntnissen rangesetzt.

Das Ergebnis möchte ich euch hier präsentieren:

In zehn einfachen Schritten:

  1. Phoner Installieren Phoner
  2. An der Fritzbox ein neues Telefoniegerät anlegen.
  3. Phoner mit der Fritzbox verbinden, sprich Benutzername und Passwort eingeben.
  4. Probieren ob das Telefonieren über Phoner funktioniert.
  5. Ordner anlegen unter dem IP_Symcon Ordner mit dem Namen automatic, also X:\IP-Symcon\automatic.
  6. Batchdatei in dem Ordner mit dem Namen telout.bat anlegen.
  7. Dummy Modul erstellen.
  8. Installiationsskript unter das Dummy Modul legen und ausführen. Danach kann es gelöscht werden.
  9. Das Automatisch erstellte Phoner_Aktionskript als Aktionskript bei den Variablenprofilen .numpad und .Bedientasten angeben. (Wollte es Automatisiert machen hat aber nicht geklappt.)
  10. Fertig

Installiationsskript


<?

 $ParentID = IPS_GetObject($IPS_SELF);
 $ParentID = $ParentID['ParentID'];

$numpadprofile = '.numpad';
$bedienprofile = '.bedientasten';
 if (IPS_VariableProfileExists($numpadprofile)==False){

 IPS_CreateVariableProfile($numpadprofile, 1);
        IPS_SetVariableProfileAssociation($numpadprofile, 0,  "0","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 1,  "1","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 2,  "2","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 3,  "3","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 4,  "4","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 5,  "5","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 6,  "6","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 7,  "7","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 8,  "8","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 9,  "9","",0x00FF00);
   }
   else
    {
    IPS_DeleteVariableProfile($numpadprofile);
    IPS_CreateVariableProfile($numpadprofile, 1);
        IPS_SetVariableProfileAssociation($numpadprofile, 0,  "0","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 1,  "1","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 2,  "2","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 3,  "3","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 4,  "4","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 5,  "5","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 6,  "6","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 7,  "7","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 8,  "8","",0x00FF00);
        IPS_SetVariableProfileAssociation($numpadprofile, 9,  "9","",0x00FF00);
      }

 if (IPS_VariableProfileExists($bedienprofile)==False){

 IPS_CreateVariableProfile($bedienprofile, 1);
      IPS_SetVariableProfileAssociation($bedienprofile, 101,  "Wählen","",0x00FF00);
      IPS_SetVariableProfileAssociation($bedienprofile, 102,  "Auflegen","",0xFF0000);
      IPS_SetVariableProfileAssociation($bedienprofile, 103,  "Löschen","",0xFFFF00);
      IPS_SetVariableProfileAssociation($bedienprofile, 104,  "Annehmen","",0x0000CD);

      }

   else
    {
    IPS_DeleteVariableProfile($bedienprofile);
    IPS_CreateVariableProfile($bedienprofile, 1);
      IPS_SetVariableProfileAssociation($bedienprofile, 101,  "Wählen","",0x00FF00);
      IPS_SetVariableProfileAssociation($bedienprofile, 102,  "Auflegen","",0xFF0000);
      IPS_SetVariableProfileAssociation($bedienprofile, 103,  "Löschen","",0xFFFF00);
      IPS_SetVariableProfileAssociation($bedienprofile, 104,  "Annehmen","",0x0000CD);
 }
  /// Hier werden die Variabeln Angelegt///

	$nummer = IPS_CreateVariable(3); // Variable erstellen
  IPS_SetParent($nummer, $ParentID); // Einordnen in Objektbaum
  IPS_SetVariableCustomProfile($nummer, "~TextBox"); // Profil setzen
  IPS_SetName($nummer, "Nummer"); // Name setzen


  $numpad = IPS_CreateVariable(1); // Variable erstellen
  IPS_SetParent($numpad, $ParentID); // Einordnen in Objektbaum
  IPS_SetVariableCustomProfile($numpad, $numpadprofile); // Profil setzen
  IPS_SetName($numpad, "Numpad"); // Name setzen


  $bedientasten = IPS_CreateVariable(1); // Variable erstellen
  IPS_SetParent($bedientasten, $ParentID); // Einordnen in Objektbaum
  IPS_SetVariableCustomProfile($bedientasten, $bedienprofile); // Profil setzen
  IPS_SetName($bedientasten, "Bedientasten"); // Name setzen


IPS_SetPosition($nummer, 1);
IPS_SetPosition($numpad, 2);
IPS_SetPosition($bedientasten, 3);




////// Skript Anlegen////


// Funktion zur Script Erstellung

function CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)
{
   global $IPS_SELF;
    $ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);
    if ($ScriptID == 0){

       $ScriptID = IPS_CreateScript(0);
       IPS_SetName($ScriptID, $ScriptNAME);
       IPS_SetParent($ScriptID, $ParentID);
       IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#");
        $fh = fopen(IPS_GetKernelDir()."scripts\\".$ScriptID.".ips.php", 'w') or die("can't open file");
        fwrite($fh, $ScriptTEXT);
        fclose($fh);
        $ScriptPath = $ScriptID.".ips.php";     //Skriptdatei
        IPS_SetScriptFile($ScriptID, $ScriptPath);
        IPS_SetHidden($ScriptID, true);
        //echo "Die Skript-ID lautet: ". $ScriptID;
        return $ScriptID;
    }
}
$ScriptNAME = 'Phoner_Aktionskript';

$PhonerSkript = CreateScriptByName($ScriptNAME,$ParentID,
'
<?
define("Nummer",  '.$nummer.' /**/, true);

if($IPS_SENDER == "WebFront")
{
   SetValue($IPS_VARIABLE, $IPS_VALUE);

	Switch($IPS_VALUE)
	{
	case "101" :

	$Nummer = $nummer = GetValue(Nummer);;

   $string = "C:\Programme\Phoner\phoner.exe CONNECT $Nummer"; // Inhalt der bat-Datei


   $batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

   $handler = fOpen($batch, "w+"); // Datei öffnen

    fWrite($handler , $string); // Datei füllen
   fClose($handler); // Datei schließen

    IPS_ExecuteEx("C:/IP-Symcon/automatic/telout.bat", "", true, false,1);

   SetValue (Nummer, "");
   break;
    case "102":
    $string = "C:\Programme\Phoner\phoner.exe DISCONNECT"; // Inhalt der bat-Datei
    $batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

    $handler = fOpen($batch, "w+"); // Datei öffnen

    fWrite($handler , $string); // Datei füllen
    fClose($handler); // Datei schließen

    IPS_ExecuteEx("C:/IP-Symcon/automatic/telout.bat", "", true, false,1);
    break;
    case "103" :

    $nummer = GetValue(Nummer);
	 SetValue(Nummer,"");
	 break;


	case "104" :
 	$string = "C:\Programme\Phoner\phoner.exe ANSWER"; // Inhalt der bat-Datei
    $batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

    $handler = fOpen($batch, "w+"); // Datei öffnen

    fWrite($handler , $string); // Datei füllen
    fClose($handler); // Datei schließen

    IPS_ExecuteEx("C:/IP-Symcon/automatic/telout.bat", "", true, false,1);
    break;

	 default:


    $nummer = GetValue(Nummer);
    $num = $IPS_VALUE;

    $nummer .= $num;

    SetValue(Nummer,$nummer);
    break;
    }






}

?>
'
);





?>

Ist noch nicht wirklich schön, aber es klappt.
Erklärung:
Um anzurufen einfach die Nummer eintippen und „Wählen“ drücken.
„Löschen“ drücken, wenn man sich vertippt hat.
„Auflegen“ wenn man fertig ist.
Und „Annehmen“ wenn jemand anruft und man das Gespräch annehmen möchte.

<-------------GANZ EINFACH ODER ----------------->

Sollte sich mal was ändern, werde ich den ersten Post immer aktuell halten.

Viel Spaß damit. Und bitte seid gnädig mit mir, das war mein erster Versuch.

MFG Mastershort

Schön, wäre es, wenn Du es gleich für V2.6 erstellen würdest. Der erste der es installiert, wird gleich wieder fragen, warum es nicht läuft.

Vielleicht versteh ich was falsch, aber solche Sachen sind glaub ich nicht ganz korrekt

}

?>
'
);





?> 

vorhin stand im Posting noch sowas wie „…vorsicht: Fehler eingebaut…“, jetzt nicht mehr :smiley:

Doch das ist richtig. Da wird das Aktionskript erstellt durch eine function ! Einmal ist es das Endtag vom zu erstellen Aktionskript und einmal von dem Installationsskript!

Da hatte ich ausversehen meine Variabeln in das Automatische erstellte Aktionskript reingeschrieben. Somit hätte das nur nach Anpassung funktioniert.

Du hast du natürlich vollkommen recht. Ich habe hier mal das abgeänderte Aktion Skript für 2.6.

Allerdings habe ich zwischen durch sehr lange Wartezeiten beim Eingeben der Ziffern .
Kann mit nicht erklären warum . Bei der 2.5 ist das nicht so.

Vielleicht kannst du ja mal ein Blick drauf werfen.



<?


if($_IPS['SENDER'] == "WebFront")
{

define("Nummer",  22228 /**/, true);
   SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

	Switch($_IPS['VALUE'])
	{
	case "101":

	$Nummer = $nummer = GetValue(Nummer);;

   $string = "C:\Programme\Phoner\phoner.exe CONNECT $Nummer"; // Inhalt der bat-Datei


   $batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

   $handler = fOpen($batch, "w+"); // Datei öffnen

    fWrite($handler , $string); // Datei füllen
   fClose($handler); // Datei schließen

    IPS_ExecuteEx("C:/IP-Symcon/automatic/telout.bat", "", true, false,1);

   SetValue (Nummer, "");
   break;
    case "102":
    $string = "C:\Programme\Phoner\phoner.exe DISCONNECT"; // Inhalt der bat-Datei
    $batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

    $handler = fOpen($batch, "w+"); // Datei öffnen

    fWrite($handler , $string); // Datei füllen
    fClose($handler); // Datei schließen

    IPS_ExecuteEx("C:/IP-Symcon/automatic/telout.bat", "", true, false,1);
    break;
    case "103" :

    $nummer = GetValue(Nummer);
	 SetValue(Nummer,"");
	 break;


	case "104" :
 	$string = "C:\Programme\Phoner\phoner.exe ANSWER"; // Inhalt der bat-Datei
    $batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

    $handler = fOpen($batch, "w+"); // Datei öffnen

    fWrite($handler , $string); // Datei füllen
    fClose($handler); // Datei schließen

    IPS_ExecuteEx("C:/IP-Symcon/automatic/telout.bat", "", true, false,1);
    break;

	 default:


    $nummer = GetValue(Nummer);
    $num = $_IPS['VALUE'];

    $nummer .= $num;

    SetValue(Nummer,$nummer);
    break;
    }






}

?>



Ist jemand interessiert an dem Projekt? Wenn nicht lass ich es bleiben!
Mir habe ich schon einiges mehr eingepflegt.

  • Telefonnummer des Ankommenden Anrufers wird im Webfront angezeigt. Wenn im Telefonbuch vorhanden auch der Name.
  • Beliebiges Skript kann beim Ankommenden Anruf ausgeführt werden. Z.B Monitor einschalten per IPS TOOLS.
  • Fritzbox Anrufe in Abwesenheit mit einem klick zurück rufen.
  • Favoriten Kurzwahl.
  • usw.

Das ich mir die Arbeit mache , da Installer Skripte für zu schreiben brauche ich aber Feedback…

da Phoner ja eh über die Fritzbox läuft, ist es meines Erachtens nicht relevant, diese Software auszumerzen bis zum „geht nicht mehr“, zudem ich die Erfahrung gemacht habe, dass diese nicht allzu stabil läuft. Die beste „Laufzeit“ erreiche ich durchfolgendes Script:

<?

SetValue($IPS_VARIABLE, $IPS_VALUE);

$Nummer = GetValue(24633 /*[Fritzbox\Phoner\Variablen\Nummer wählen]*/);

$string = "C:\IP-Symcon\Phoner\phoner.exe CONNECT $Nummer"; // Inhalt der bat-Datei

$batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

$handler = fOpen($batch, "w+"); // Datei öffnen

fWrite($handler , $string); // Datei füllen
fClose($handler); // Datei schließen

IPS_ExecuteEx('C:/IP-Symcon/automatic/telout.bat', "", true, false,1);

SetValue (24633 /*[Fritzbox\Phoner\Variablen\Nummer wählen]*/, "");
?>

Unbenannt.png

  • Telefonnummer des Ankommenden Anrufers wird im Webfront angezeigt. Wenn im Telefonbuch vorhanden auch der Name.

macht die Fritzbox

  • Beliebiges Skript kann beim Ankommenden Anruf ausgeführt werden. Z.B Monitor einschalten per IPS TOOLS.

macht auch die Fritzbox

  • Fritzbox Anrufe in Abwesenheit mit einem klick zurück rufen.

wäre vielleicht noch komfortabel

  • Favoriten Kurzwahl.

braucht ja nur eine Integer-Variable

Hallo,

ich habe das Skript auch mal eingebaut. Es funzt eigentlich. Nur habe ich bei der Eingabe der Nummer eine teilweise doch recht lange Wartezeit.

Das hier ist mein AktionsSkript



<?
define("Nummer",  49755 /**/, true);

if($IPS_SENDER == "WebFront")
{
   SetValue($IPS_VARIABLE, $IPS_VALUE);

    Switch($IPS_VALUE)
    {
    case "101" :

    $Nummer = $nummer = GetValue(Nummer);;

   $string = "C:\Programme\Phoner\phoner.exe CONNECT $Nummer"; // Inhalt der bat-Datei


   $batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

   $handler = fOpen($batch, "w+"); // Datei öffnen

    fWrite($handler , $string); // Datei füllen
   fClose($handler); // Datei schließen

    IPS_ExecuteEx("C:/IP-Symcon/automatic/telout.bat", "", true, false,1);

   SetValue (Nummer, "");
   break;
    case "102":
    $string = "C:\Programme\Phoner\phoner.exe DISCONNECT"; // Inhalt der bat-Datei
    $batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

    $handler = fOpen($batch, "w+"); // Datei öffnen

    fWrite($handler , $string); // Datei füllen
    fClose($handler); // Datei schließen

    IPS_ExecuteEx("C:/IP-Symcon/automatic/telout.bat", "", true, false,1);
    break;
    case "103" :

    $nummer = GetValue(Nummer);
     SetValue(Nummer,"");
     break;


    case "104" :
     $string = "C:\Programme\Phoner\phoner.exe ANSWER"; // Inhalt der bat-Datei
    $batch ="C:/IP-Symcon/automatic/telout.bat"; // die Datei selbst

    $handler = fOpen($batch, "w+"); // Datei öffnen

    fWrite($handler , $string); // Datei füllen
    fClose($handler); // Datei schließen

    IPS_ExecuteEx("C:/IP-Symcon/automatic/telout.bat", "", true, false,1);
    break;

     default:


    $nummer = GetValue(Nummer);
    $num = $IPS_VALUE;

    $nummer .= $num;

    SetValue(Nummer,$nummer);
    break;
    }






}

?>

Habt ihr eine Idee, wie ich die Wartezeit reduzieren kann?

Er wird wohl das Problem sein. http://www.ip-symcon.de/forum/threads/19633-Ursache-für-extrem-lange-Ausführungszeiten-Webfront-blockiert
Sollte sich lösen lassen

Wie ist das bei dir mit dem Ton Micro und Lautsprecher ? Was nutzt da da?

ich habs im IPS-Verzeichnis installiert. Hatte unter Programme glaub auch Probleme

C:\IP-Symcon\Phoner\phoner.exe 

OK…das werde ich mal ausprobieren…

Ansonsten nutze ich als Lautsprecher die Ausgabe über einen AVM Repeater und Mikrofon habe ich ein ganz normales per Klinke angeschlossen…Das passt alles…