und noch ein CallMonitor ...aber meiner ist für Linux

dede67

Neuer User
Mitglied seit
7 Nov 2010
Beiträge
18
Punkte für Reaktionen
1
Punkte
3
Moin!
unter der URL http://dede67.bplaced.net/PhythonScripte/callmon/callmon.html ist mein CallMonitor zu finden.
Er besteht primär aus zwei Python-Scripten:

  • das Server-Script läuft 24x7 auf einem stromsparenden Kleinst-Rechner (im Textmodus) und sammelt die Daten der Telefonate in einer SQLite3-Datenbank,

  • das Client-Script läuft auf einem oder mehreren Linux-Systemen (mit GUI) und zeigt abgeschlossene und aktuell offene Telefonate in einem Fenster sowie Statusänderungen von offenen Telefonaten als Popup-Meldung an.

Ich habe es bisher nur auf einer Fritzbox 7390 mit FRITZ!OS 06.20 getestet - aber damit läuft es gut.
Vielleicht hat hier ja mal jemand Lust und Zeit, es ggf. auch auf einer anderen Fritzbox auszuprobieren..... es sollte nix kaputt gehen können, da in Richtung Fritzbox nur Lesezugriffe erfolgen.

Über Feedback würde ich mich freuen.

Dede
 
Ich suche dringend Ersatz für JFritz, das nun 3648 MB Speicher frisst!

Hier fehlt aber noch ein editierbares Anmerkungsfeld und abgepeichert wird auch nichts?
Beim Doppelklick gehen Historie-Fenster auf die man nicht mehr zubekommt...

Dann irgendwelche Fehler von wxpython ...

Kannst du das nicht bei github hochladen, würde vielleicht helfen ...

Außerdem ist hier die falsche Rubrik, hier ist doch der "FBF-Anrufmonitor"?
Code:
File "CallMonClient.py", line 149, in OnFocused
    if self.list_ctrl.IsSelected(idx)==True and self.list_ctrl.GetSelectedItemCount()==1:
  File "/usr/local/lib/python2.7/site-packages/wx-3.0-gtk2/wx/_controls.py", line 4787, in IsSelected
    return (self.GetItemState(idx, wx.LIST_STATE_SELECTED) & wx.LIST_STATE_SELECTED) != 0
  File "/usr/local/lib/python2.7/site-packages/wx-3.0-gtk2/wx/_controls.py", line 4525, in GetItemState
    return _controls_.ListCtrl_GetItemState(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion "item >= 0 && (size_t)item < GetItemCount()" failed at ./src/generic/listctrl.cpp(3474) in GetItemState(): invalid list ctrl item index in GetItemState()
 
Moin ladesdo,
ich hatte bisher keinen Bedarf für ein "editierbares Anmerkungsfeld". Könnte man aber sicher relativ einfach einbauen.

Was meinst du mit "abgepeichert wird auch nichts" ?
Die Telefonate werden in einer SQLite-Datenbank abgelegt. Mehr nicht.

Das nicht-funktionieren des Close- bzw. Ok-Buttons liegt daran, dass du offensichtlich WXwidgets in Version 3 einsetzt.
Da gabs einige Änderungen zur Version 2.8, welche ich nutze (und das auch unter "Voraussetzungen" genannt ist).
Eine der Änderungen war bei Window.Close().
Für v3 nimmt man jetzt wohl besser Window.Destroy()...(also in HistoryDialog.py in Zeile 77 das self.Close() durch self.Destroy() ersetzen).

Was sollte es bringen, die Scripte bei github hochzuladen?
Da müsste ich erstmal alle Kommentare und die Doku ins Englische übersetzen - und das für ein Programm, das ein Stück Hardware (die FritzBox) voraussetzt, das m.W. primär in Deutschland verbreitet ist.

Bezüglich der Rubrik könntest du durchaus Recht haben.... Ich habe nur nach AVM und Anrufmonitor geguckt, das Forum gefunden und mich nicht an dem FBF-Prefix gestört.
Wo würde es denn besser passen?

Bei welcher Aktion ist es zu der Fehlermeldung gekommen?
Ich habe mal in einer VM mit OpenSUSE 13.2 das 2.8 ersetzt durch "python-wxWidgets-3_0-3.0.1.1-1.2.x86_64".
Den "Bug" bei Window.Close() konnte ich nachvollziehen - den bei OnFocused aber nicht.
 
- die fehlermeldung kommt sofort beim starten des client.

- das fenster des client taucht nicht in der fensterliste auf (alt-tab), wieso nicht? ich hab übrigens keinen tray ...

- vielleicht könnte man allgemein auf wx-3.0 umstellen, unter freebsd ist das standard, oder halt das erkennen und entsprechend behandeln

- github hätte den vorteil, dass mal jemand einen patch schicken kann, ich wüsste nicht, dass englisch pflicht ist, es gibt auch einige projekte zur fritzbox

- die sqlite-datenbank habe ich nun auch gefunden. wäre vielleicht schön, wenn man die alten jfritzdaten importieren könnte, ein adressverzeichnis wäre auch nett.

- die passende allgemeine rubrik ist wahrscheinlich "andere software"?
 
Du könntest bei Bedarf die Zeilen 101 und 102 auskommentieren. Dann kann man, wenn erstmal eine Zeile selektiert wurde, zwar nicht wieder den Zustand mit keiner selektieren Zeile erreichen - aber macht ja nicht wirklich was aus.
Also so:
Code:
#    self.list_ctrl.Bind(wx.EVT_LIST_ITEM_FOCUSED, self.OnFocused)         # links-Klick ("key-down")
#    self.list_ctrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSelected)       # links-Klick (quasi "key-up")

taucht nicht in der fensterliste auf
siehe Doku (Keyword=FRAME_NO_TASKBAR)

Weil ich nicht 2.8 und 3.0 gleichzeitig installiert haben kann, müsste ich für einen Umsteig auf 3.0 zig Python-Scripte mit sicher über 10.000 Zeilen Code ändern. Das mache ich erst dann, wenn die 2.8 ihr Ende erreicht hat.

wenn ich mal Zeit und Lust habe, werde ich mir das ansehen.

jfritzdaten und adressverzeichnis
mein Programm ist ein Call-Monitor - keine Call-Verwaltung.
 
Du könntest bei Bedarf die Zeilen 101 und 102 auskommentieren. Dann kann man, wenn erstmal eine Zeile selektiert wurde, zwar nicht wieder den Zustand mit keiner selektieren Zeile erreichen - aber macht ja nicht wirklich was aus.
Also so:
Code:
#    self.list_ctrl.Bind(wx.EVT_LIST_ITEM_FOCUSED, self.OnFocused)         # links-Klick ("key-down")
#    self.list_ctrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSelected)       # links-Klick (quasi "key-up")
ja die fehlermeldung ist dann weg - danke

siehe Doku (Keyword=FRAME_NO_TASKBAR)
sorry das habe ich irgendwie mit einer dock verwechselt


Weil ich nicht 2.8 und 3.0 gleichzeitig installiert haben kann, müsste ich für einen Umsteig auf 3.0 zig Python-Scripte mit sicher über 10.000 Zeilen Code ändern. Das mache ich erst dann, wenn die 2.8 ihr Ende erreicht hat.
ja gut man müsste halt ein paar checks einfügen ...


mein Programm ist ein Call-Monitor - keine Call-Verwaltung.
die grenzen sind fließend ... ;) ich such' einen ersatz für jfritz ...
 
Abend

Die Fritz!Box PHP API kann die Anrufsliste aus der Box im CSV "abholen".

Anwendungsbeispiel:

Webserververzeichnis, hier direkt auf der Fitz!Box, muss aber nicht sein.
Code:
/var/tmp # cd /var/media/ftp/SanDisk-Cruzer-01/7360SL/                                                                                                                                      
/var/media/ftp/SanDisk-Cruzer-01/7360SL # l                                                                                                                                                 
total 104                                                                                                                                                                                   
drwxrwxrwx    2 root     root          4096 Jan 20 18:23 ./                                                                                                                                 
drwxrwxrwx   60 root     root          4096 Apr 17 17:18 ../                                                                                                                                
-rw-rw-r--    1 root     root          1767 Dec 18 21:11 CHANGELOG.txt                                                                                                                      
-rw-rw-r--    1 root     root          3311 Dec 18 21:11 README.txt                                                                                                                         
-rw-r--r--    1 root     root           240 Apr 17 19:58 anrufsliste.csv                                                                                                                    
-rw-r--r--    1 root     root          1344 Jan  9 19:32 fritzbox.conf.php                                                                                                                  
-rw-rw-r--    1 root     root         13506 Jan  9 19:21 fritzbox_api.class.php                                                                                                             
-rw-rw-r--    1 root     root           859 Dec 18 21:11 fritzbox_diversity0on.php                                                                                                          
-rw-rw-r--    1 root     root          2429 Dec 18 21:11 fritzbox_get_foncallslist.php                                                                                                      
-rw-rw-r--    1 root     root          2314 Dec 18 21:11 fritzbox_get_foncallslist_xml.php                                                                                                  
-rw-rw-r--    1 root     root          3429 Dec 18 21:11 fritzbox_guestlan_on_off.php                                                                                                       
-rw-rw-r--    1 root     root          4499 Dec 18 21:11 fritzbox_guestwlan_on_off.php                                                                                                      
-rw-r--r--    1 root     root           573 Jan  9 19:27 fritzbox_phonebook_export.php                                                                                                      
-rw-rw-r--    1 root     root           733 Dec 18 21:46 fritzbox_ring_phone.php                                                                                                            
-rw-r--r--    1 root     root          4036 Jan 20 22:58 fritzbox_tam_on_off.php                                                                                                            
-rw-r--r--    1 root     root          3746 Jan 20 09:45 fritzbox_tam_on_off.php.last                                                                                                       
-rw-rw-r--    1 root     root          3252 Jan 19 16:07 fritzbox_tam_on_off.php.old                                                                                                        
-rw-rw-r--    1 root     root          1670 Jan 19 12:34 fritzbox_tam_swap.php                                                                                                              
-rw-rw-r--    1 root     root          1907 Dec 19 20:01 fritzbox_user.conf.php                                                                                                             
-rw-rw-r--    1 root     root          5892 Sep 29  2014 fritzbox_wol.php                                                                                                                   
-rw-r--r--    1 root     root           109 Jan 20 11:46 index.cgi                                                                                                                          
/var/media/ftp/SanDisk-Cruzer-01/7360SL # cat index.cgi                                                                                                                                     
#!/bin/sh                                                                                                                                                                                   
echo 'content-type: text/plain;charset="utf-8"                                                                                                                                              
refresh: 0;URL=fritzbox_get_foncallslist.php                                                                                                                                                
'                                                                                                                                                                                           
#EOF

Jetzt im Webbrowser...
fb_api_foncalls_01.jpg
fb_api_foncalls_02.jpg
...der Webserver sollte als Startdatei index.cgi und CSV ausliefern können (MIME-TYPE=text/plain),
sonst gibt es die als Download.
 
Zuletzt bearbeitet:
ja gut man müsste halt ein paar checks einfügen ...
Mit Chance gehts sogar ohne "checks" bzgl. 2.8 und 3.0.
Der Destroy() statt Close() würde auch bei 2.8 klappen.

Und der OnFocused-Fehler liegt eher daran, dass dein WindowManager (oder was auch immer) die Events bei Window-Create offenbar in einer sonderbaren Reihenfolge schickt. Ich habe vor dem Hochladen auf meine Webseite neben XFCE durchaus noch Gnome, KDE und ein paar weitere WM getestet und den Fehler dabei nicht bekommen. Allerdings war mir speziell bei dieser Funktion schon klar, dass sie nicht ganz koscher implementiert ist.
Im Kommentar steht ja auch drin, dass das gewünschte Verhalten "durch die Brust ins Auge" erreicht wird ;-)

Sofern du mein Programm auch dann benutzen willst, wenn es nie JFritz (das ich nicht kenne) nachbilden wird, kannst du mir gerne die Auffälligkeiten via eMail schicken und ich werde sie dann (soweit mir möglich) fixen. Und zwar vorzugsweise so, dass es nur eine Version für 2.8 und 3.0 gibt.
 
Hallo koyaanisqatsi,
ähh...ja...schön...aber was wolltest in diesem Zusammenhang damit jetzt sagen?
Wolltest du deinen Text vielleicht eigentlich in einem anderen Thread posten?
Oder wolltest du damit sagen, dass ich mein Programm auch anders hätte implementieren können?
Ich bin verwirrt.
 
Nee, sorry dede67.

Beim Lesen des Threads kam mir nur so die Idee mit der API.
...mal eben schnell die Anrufsliste holen, bei Bedarf, eben kein Anrufsmonitor.

Dein Perl Python SQLite Server/Klient Skript interessiert mich aber.
Auf dem Raspberry Pi (openelec/XBMC) hab ich ein Addon,
welches auf Perl Pythonbasis läuft: XBMC FritzBox Callmonitor

Hab aber noch parallel Raspbian drauf, da werd ich dass mal installieren.
...und berichten, versprochen. ;)
 
Zuletzt bearbeitet:
Auf einem RasPi läuft das Server-Script ganz wunderbar.
Das Client-Script läuft da sicher auch, sofern der RasPi mit GUI installiert ist.

Um weitere Verwirrung zu vermeiden...hier mal meine Motivation für das Programm:
Mein Haus hat vier Etagen und ich habe drei externe Telefonnummern, die jeweils auf unterschiedlichen Telefon-Gruppen klingeln.
Mein Büro ist im Keller und wenn die Tür zu ist, höre ich klingelnde Telefone nur dann, wenn die maximal "ein Deck höher" klingeln und dort die Türen offen sind.
Wenn ich alleine zuhause bin, bekomme ich Anrufe also nicht immer akustisch gemeldet - und kann sie mir folglich auch nicht mit *09 an mein Büro-Telefon heranholen.
Die v0.1 meines Programms hat dieses Problem gelöst. Dabei hat mich dann aber recht bald genervt, dass ich auf unterschiedlichen Rechnern unterschiedliche Anzeigen bzgl. der Historie der Telefonate hatte - abhängig vom Zeitpunkt des Programm-Starts.
Also habe ich diesen Historien-Teil an eine zentrale Stelle ausgelagert: in den Callmon-Server (der eigentlich eher ein Callmon-Proxy ist).

Abgesehen davon wollte ich auch einfach mal eine Client/Server-Anwendung in Python programmieren. Analog siehts für die Private/Public-Key-Crypto aus - die hier (für das Fritzbox-Passwort) sicherlich völliger overkill ist - aber ich wollte es einfach mal machen ;-)
Und sowohl Client wie auch Server laufen gut und stabil. Die 100 Tage Dauerbetrieb habe ich zwar noch nicht erreicht. Das liegt aber nur dran, dass zwischendurch immer wieder mal ein Kernel-Update kam, der einen Reboot haben wollte.
 
Das mit der wxpython-version funktioniert so:

vor "import wx" einfügen:
Code:
import wxversion
wxversion.select("2.8")
 
Moins

Bei mir (Raspbian) will der Server nicht starten...
Code:
pi@openelec ~/callmon $ ./CallMonServer.py
Traceback (most recent call last):
  File "./CallMonServer.py", line 18, in <module>
    from MessageToDatabase  import MessageToDatabase    # import: CallMonitorMessage.py, Database.py
  File "/home/pi/callmon/MessageToDatabase.py", line 7, in <module>
    import lxml.html
ImportError: No module named lxml.html
...bin nach Anleitung auf deiner Webseite vorgegangen.
 
Zuletzt bearbeitet:
Danke, das wars.
Als normaler User will es nicht, wegen Socket....
Code:
openelec:~# su - pi
pi@openelec ~ $ cd callmon/
pi@openelec ~/callmon $ ./CallMonServer.py
2015.04.18-15:46:37 Kann Socket 1020 nicht öffnen: [Errno 13] Permission denied
Exception in thread runFritzboxCallMonitor (most likely raised during interprete
r shutdown):
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
  File "/usr/lib/python2.7/threading.py", line 505, in run
  File "./CallMonServer.py", line 170, in runFritzboxCallMonitor
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'strftime
'
pi@openelec ~/callmon $ su -c ./CallMonServer.py
Passwort:
2015.04.18-15:47:33 Anweisungs-Sockets=0  Meldungs-Sockets=0  Clients=[]
2015.04.18-15:47:33 Die Verbindung zum CallMonitor der Fritzbox wurde hergestellt!
...jetzt ist der Klient dran.
 
Achso.
...dann eben nicht.
 
Hallo ladesdo!
Als ich die 3.0 zur 2.8 dazu-installieren wollte, hat yast mir einen Konflikt gemeldet und die 2.8 musste erstmal weg, um die 3.0 installieren zu können.
Oder hat die 3.0 einen 2.8-Kompatibilitätsmodus?
 
keine ahnung, bei mir unter freebsd koexistieren die einfach so
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.