TCP-Client als FRITZ!Box Call Monitor: Unterschied zwischen den Versionen
K (Formatting tweeks) |
|||
| 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. | + | 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. unter [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 56: | Zeile 58: | ||
} | } | ||
TCP_HANDLER_END(); | TCP_HANDLER_END(); | ||
| − | + | ||
ON STARTUP DO | ON STARTUP DO | ||
| − | TCP_CONNECT( | + | 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. | ||
| − | |||
Version vom 2. September 2011, 22:06 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. unter [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.