Hallo,
erstmal vielen Dank für die ganze Mühe, die in den Callmonitor gesteckt wurde. Er ist der Hauptgrund weshalb ich meine FB mit einer anderen Firmware laufen lasse, zusammen mit dnsmasq.
Seit über einem Jahr meldet der Callmonitor meinem Server wer anruft/angerufen wird und was mit diesen Anrufen geschieht, dieser meldet dann die Ereignisse in Echtzeit via Websocket an jeden angemeldeten Browser/Tablet/Smartphone, und gibt es auch über die Stereoanlage/Tablet/Smartphone via TTS aus.
Nun möchte ich da aber was optimieren, und habe folgende 3 Probleme:
1) Die Variable TIMESTAMP hat eine Auflösung bis in die Sekunden hinein. Dies ist für bestimmte Anwendungszwecke zu grob. Gibt es die Möglichkeit, die Auflösung auf den Millisekundenbereich zu verfeinern? Das Problem ist, dass die Timestamp die einzige zuverlässige Variable ist, um die Sequenz der Ereignisse festzulegen. Denn auf dem Server, der die Daten via getmsg bekommt, diese in eine Datenbank geschrieben werden, dann kann es vorkommen, das mehrere Ereignisse die gleiche Timestamp bekommen, und die Sortierung bei einer Datenbankabfrage über die Timestamp nicht mehr zuverlässig ist und Probleme in der Sequenz bringt. Es ist auch nicht sinnvoll, Serverseitig einen Timestamp zu erzeugen, da die Latenz zwischen dem Telefonereignis und dem ausführen des Server-Codes im Sekundenbereich variiert, so dass ein CANCEL gelegentlich vor einem REQUEST kommt. Versuchen, die Reihenfolge per Postprocessing der Anrufereignisse mit Hilfe der ID-Variable wiederherzustellen scheint eine recht Komplizierte Aufgabe zu sein, insbesondere dann, wenn es durch viele Testanrufe, sowie abgebrochenen Testanrufen, zu vielen Ereignissen pro Sekunde kommt. Hab's mehrere Stunden lang erfolglos versucht.
2) Das Problem bei 1) hat den Ursprung darin, dass ich jedem Telefonat eine eindeutige UUID zuweisen möchte. Also jede zusammengehörende Sequenz von REQUEST, CONNECT, CANCEL bzw. DISCONNECT muss eine eindeutige UUID bekommen. Ruft man also von einer eigenen Nummer eine andere eigene Nummer an, so entstehen 2 UUID's. Eine für alle 2 (request+cancel) bis 3 (request+connect+disconnect) IN-Ereignisse, und eine für alle 2 bis 3 OUT-Ereignisse. Diese UUID sollte für jedes Ereigniss als Variable zu Verfügung stehen, in etwa wie die ID, TIMESTAMP oder SRC variable. Diese eindeutige UUID soll dazu dienen, dass ein DISCONNECT den zugehörigen CONNECT und REQUEST in der Datenbank finden kann, bzw. dass die empfangenden Geräte (Browser,...) entscheiden können, ob ein vorhandenes Ereignis mit einer bestimmten UUID durch das neue Ereignis ersetzt werden soll. Z.B. sollte im Browser ein CONNECT immer ein REQUEST ersetzen, um weniger Daten anzeigen zu müssen. Der einzige saubere Weg, dies zu erreichen, ist durch solch eine UUID, welche direkt in der Fritzbox generiert werden sollte. Die ID, die derzeit mitgeschickt wird, ist leider nicht gut genug.
3) Mein Server besteht aus dem Python Web-Framework CherryPy. Leider kann ich den Server nicht Upgraden, da CherryPy 3.2 die HTTP GET aufrufe in UTF-8 kodierung erwartet, und der Callmonitor diese anscheinend in Latin-1 ausführt. Das ist nicht wirklich schlimm, da ich problemlos eine ältere version laufen lassen kann, aber vielleicht lässt sich da was machen.
Ich wäre für jeden Kommentar dankbar.
Mfg,
Daniel