TCP-Client als FRITZ!Box Call Monitor: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
K (Formatting tweeks)
K (Seite in Category:Control6 Examples eingefügt)
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindung sendet. Dieses Programm verbindet sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an.
+
Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindung sendet. Der Call Monitor wird bei der FRITZ!Box einmalig durch Anruf von '''#96*5*''' an einem Analogtelefon eingeschaltet und sendet dann auf Port 1012. Nähere Angaben zum Message-Format stehen z.B. im AVM Wiki [http://www.wehavemorefun.de/fritzbox/index.php/Callmonitor].
 +
 
 +
Das folgende Programm verbindet sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an:
 
  CONTROL_START
 
  CONTROL_START
 
   
 
   
Zeile 11: Zeile 13:
 
         char caller[15]="";
 
         char caller[15]="";
 
         char called[15]="";
 
         char called[15]="";
 
+
 
         char *ptr = (char *) uip_appdata;
 
         char *ptr = (char *) uip_appdata;
 
         ptr[uip_len] = 0;
 
         ptr[uip_len] = 0;
 
+
 
         dnl parse the message string in ptr
 
         dnl parse the message string in ptr
 
         for (uint8_t i=0; i<uip_len; i++) {
 
         for (uint8_t i=0; i<uip_len; i++) {
Zeile 38: Zeile 40:
 
           }
 
           }
 
         }
 
         }
 
+
 
         dnl print what we know to lcd
 
         dnl print what we know to lcd
 
         hd44780_goto(2, 0); dnl prepare lcd print location
 
         hd44780_goto(2, 0); dnl prepare lcd print location
Zeile 48: Zeile 50:
 
         if (call_type==2) {
 
         if (call_type==2) {
 
           char buffer[27];
 
           char buffer[27];
           sprintf(buffer, "Connection time: %d sec.",call_len);
+
           sprintf(buffer, "Connection time: %d sec.", call_len);
 
           fputs(buffer, lcd);
 
           fputs(buffer, lcd);
 
         }
 
         }
Zeile 56: Zeile 58:
 
     }
 
     }
 
   TCP_HANDLER_END();
 
   TCP_HANDLER_END();
 
+
 
   ON STARTUP DO
 
   ON STARTUP DO
     TCP_CONNECT(10.0.0.2, 1012, callmonitor);
+
     TCP_CONNECT(xxx.xxx.xxx.xxx, 1012, callmonitor);
 
   END
 
   END
 
   
 
   
 
  CONTROL_END
 
  CONTROL_END
 +
Statt xxx.xxx.xxx.xxx ist natürlich die IP-Adresse der FRITZ!Box anzugeben.
 
Die Daten lassen sich außer zur reinen Anzeige auch dazu nutzen, durch Telefonanrufe Steurvorgänge auszulösen.
 
Die Daten lassen sich außer zur reinen Anzeige auch dazu nutzen, durch Telefonanrufe Steurvorgänge auszulösen.
Der Call Monitor wird bei der FRITZ!Box einmalig durch Anruf von '''#96*5*''' an einem Analogtelefon eingeschaltet und sendet dann auf Port 1012.
+
 
 +
[[Category:Control6 Examples]]

Aktuelle Version vom 2. September 2011, 22:36 Uhr

Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindung sendet. Der Call Monitor wird bei der FRITZ!Box einmalig durch Anruf von #96*5* an einem Analogtelefon eingeschaltet und sendet dann auf Port 1012. Nähere Angaben zum Message-Format stehen z.B. im AVM Wiki [1].

Das folgende Programm verbindet sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an:

CONTROL_START

 TCP_HANDLER_PERSIST(callmonitor)
   for (;;) {
     if (uip_newdata ()) {
       uint8_t j;
       uint8_t part=0;
       uint8_t call_type=0;
       uint16_t call_len=0;
       char caller[15]="";
       char called[15]="";

       char *ptr = (char *) uip_appdata;
       ptr[uip_len] = 0;

       dnl parse the message string in ptr
       for (uint8_t i=0; i<uip_len; i++) {
         if (ptr[i]==';') {
           part++;
           j=0;
         } else {
           if (part==1 && ptr[i]=='R') call_type=1; dnl RING
           if (part==1 && ptr[i]=='D') call_type=2; dnl DISCONNECT
           if (part==3 && call_type==1) {
             caller[j]=ptr[i]; dnl copy to string
             j++;
             caller[j]='\0'; dnl prepare end of string
           }
           if (part==4 && call_type==1) {
             called[j]=ptr[i]; dnl copy to string
             j++;
             called[j]='\0'; dnl prepare end of string
           }
           if (part==3 && call_type==2) {
             call_len = call_len*10 + ptr[i] - '0'; dnl convert to int
           }
         }
       }

       dnl print what we know to lcd
       hd44780_goto(2, 0); dnl prepare lcd print location
       if (call_type==1) {
         fputs(caller, lcd);
         fputs(" calling ", lcd);
         fputs(called, lcd);
       }
       if (call_type==2) {
         char buffer[27];
         sprintf(buffer, "Connection time: %d sec.", call_len);
         fputs(buffer, lcd);
       }
       call_type=0; dnl only needed if you defined calltype globally
     }
     PT_YIELD(pt);
   }
 TCP_HANDLER_END();

 ON STARTUP DO
   TCP_CONNECT(xxx.xxx.xxx.xxx, 1012, callmonitor);
 END

CONTROL_END

Statt xxx.xxx.xxx.xxx ist natürlich die IP-Adresse der FRITZ!Box anzugeben. Die Daten lassen sich außer zur reinen Anzeige auch dazu nutzen, durch Telefonanrufe Steurvorgänge auszulösen.