TCP-Client als FRITZ!Box Call Monitor: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Bei der verbreiteten FRITZ!Box lässt sich ein TCP-Server einschalten, der bei eingehenden oder ausgehenden Anrufen Messages mit einigen Daten zur Telefonverbindu…“) |
|||
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 verbindes sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer | + | 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 verbindes sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an. |
+ | |||
+ | 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; | ||
+ | |||
+ | debug_printf("fritz says: %s\n", ptr); | ||
+ | |||
+ | dnl parse the message | ||
+ | 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(10.0.0.2, 1012, callmonitor); | ||
+ | END | ||
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. |
Version vom 28. August 2011, 23:27 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. Dieses Programm verbindes sich mit der FRITZ!Box und zeigt die Rufnummer des Anrufers und die angerufene Nummer sowie nach Gesprächsende die Verbindungszeit an.
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;
debug_printf("fritz says: %s\n", ptr);
dnl parse the message 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(10.0.0.2, 1012, callmonitor); END
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.