Seit 4 Wochen bin ich nach Wechsel meines Internetanbieters Besitzer einer EasyBox 800 a.
Ich musste leider feststellen, dass Die Möglichkeiten der Datenübernahme sehr gering sind (cut and paste).
Ich fand dann hier im Forum einen Beitrag, der sich mit diesem Problem beschäftigt (NCID Anrufmonitor). Das hat mich dazu veranlasste mich mit Autoit zu beschäftigen. Meinen Dank an den Autor.
Daraus ist nun ein Programm geworden, dass die Telefondaten in eine Excel-Datei übernimmt. Die Daten werden getrennt nach eingehenden und ausgehenden Verbindungen aufgeführt. Neu hinzugekommene Telefonnummern werden in einem dritten Block aufgeführt. Wenn man hier den Teilnehmer hinzufügt, hat man bald ein gutes Telefonbuch. Hier als Beispiel:
]
Und hier dann der Autoit-Code
Spoiler anzeigen
#include "Inet.au3"
#include "Array.au3"
#include <file.au3>
#include "Excel.au3"
;####################################################################
; Anruflisten auslesen für Router Model:
; EasyBox 803 A (und vermutlich andere...) | By JaneDoe
;####################################################################
; 26.10.2012 | geändert um Excel-Datei zu füllen | By Fernando
; mit freundlicher Unterstützung von BugFix und water
;####################################################################
;Bitte die IP-Adresse, den Usernamen und das Passwort überprüfen. Hier sind die Standardeinstellungen eingetragen
Local $EB_IP ="192.168.2.1" ; router ip
Local $EB_Username ="root" ; standart ist: root
Local $EB_Passwort ="123456" ; standart ist: 123456
Local $ArrayIncoming,$ArrayOutgoing,$EB_Anrufliste,$EB_Start,$Error_Check,$iNumCells_i,$iNumCells_o,$flag
Local $myPath ; Excelpfadvariable
Local $Reihe, $SpalteDatum, $SpaltePhone, $SpalteDauer, $sFormat_01,$sFormat_02, $sFormat_03 ; Excelvariablen
$myPath = "C:\Hier Pfad der EXCEL-Datei eintragen\Gespräche.xlsm ; Dateiname eintragen
Local $fOpen = False, $oBook, $oExcel = ObjGet('', 'Excel.Application') ; Zugriff auf geöffnetes Excel
If @error Then
_OpenXLS(0) ; == Excel ist nicht geöffnet, neues Excel-Objekt erstellen
$fOpen = True
Else
; == in Excel geöffnete Workbooks auflisten
$oBook = $oExcel.WorkBooks ; == in Excel geöffnete Workbooks auflisten
For $book In $oBook
If $book.Path & '\' & $book.Name = $myPath Then
; ConsoleWrite($book.Path & '\' & $book.Name & @CRLF)
$oBook($book.Name).Activate
$fOpen = True
$oExcel.Visible = 1 ; nur wenn Tabelle sichtbar sein soll
$book.Sheets(1).Select()
ExitLoop
EndIf
Next
EndIf
If Not $fOpen Then _OpenXLS($oExcel)
$sFormat_01 = "[$-F400]h:mm:ss AM/PM"
$sFormat_02 = "TT.MM.JJJJ hh:mm:ss"
$sFormat_03 = "@"
$oExcel.Visible = 1
_ExcelSheetActivate($oExcel, 1)
$Error_Check = _EB_GetAnrufliste() ; Funktion Daten holen
$iReiheEnde_1 = _ExcelReadCell($oExcel, 3, 13)+4
$iReiheEnde_2 = _ExcelReadCell($oExcel, 3, 14)+4
_ExcelNumberFormat($oExcel, $sFormat_01, 4, 3, $iReiheEnde_1, 3)
_ExcelNumberFormat($oExcel, $sFormat_02, 4, 1, $iReiheEnde_1, 1)
_ExcelNumberFormat($oExcel, $sFormat_01, 4, 8, $iReiheEnde_2, 8)
_ExcelNumberFormat($oExcel, $sFormat_02, 4, 6, $iReiheEnde_2, 6)
$sHorizAlign = "right"
_ExcelHorizontalAlignSet($oExcel, 4, 2, $iReiheEnde_1, 2, $sHorizAlign)
_ExcelHorizontalAlignSet($oExcel, 4, 7, $iReiheEnde_1, 7, $sHorizAlign)
$oExcel.Application.Run("Finish")
$sFlag = MsgBox(4, "Excel Ende", "Soll Excel geschlossen werden?")
If $sFlag = 6 then
_ExcelBookClose($oExcel,1,1)
EndIf
exit
;###############################################
; Routerlogin und Anrufliste auslesen
;###############################################
Func _EB_GetAnrufliste()
$Error_Check = "None"
Local $EB_Strip,$EB_Eintraege
Local $EB_Login = _INetGetSource("http://" &$EB_IP& "/cgi-bin/login.exe?user=" &$EB_Username& "&pws=" &$EB_Passwort)
if Stringlen($EB_Login)=0 then
$Error_Check = "Fehler: Bitte Zugangsdaten überprüfen" ; falsche zugangsdaten
Else
$EB_Strip = StringInStr($EB_Login, 'Login gescheitert.')
if $EB_Strip < 0 then ; gefunden = nicht eingelogt
$Error_Check = "Fehler: Keine Einträge in der Anruferliste." ; fehler...
else ; eingelogt
$EB_Anrufliste = _INetGetSource("http://" &$EB_IP& "/voip_status.stm")
if Stringlen($EB_Anrufliste)=0 then
$Error_Check = "Fehler: Konnte Anruferliste nicht öffnen." ; fehler...
Else
$EB_Start = StringInStr($EB_Anrufliste, 'voip_i_Phone[0]') ; lade anrufer
if $EB_Start = 0 then ; nichts gefunden
$Error_Check = "Keine Einträge in der Anruferliste gefunden." ; fehler...
else ; sortiere anrufer...
$Reihe = _ExcelReadCell($oExcel, 3, 13)+4
$SpalteDatum = 1 ; Exceleinträge eingehende Anrufe
$SpaltePhone = 2 ; Exceleinträge eingehende Anrufe
$SpalteDauer = 3 ; Exceleinträge eingehende Anrufe
$ArrayIncoming=_SortAnrufer("i")
endif
;########
$EB_Start = StringInStr($EB_Anrufliste, 'voip_o_Phone[0]') ; lade anrufe
if $EB_Start = 0 then ; nichts gefunden
$Error_Check = "Keine Einträge in der Anrufliste gefunden." ; fehler...
else ; sortiere anrufe...
$Reihe = _ExcelReadCell($oExcel, 3, 14)+4
$SpalteDatum = 6 ; Exceleinträge ausgehende Anrufe
$SpaltePhone = 7 ; Exceleinträge ausgehende Anrufe
$SpalteDauer = 8 ; Exceleinträge ausgehende Anrufe
$ArrayOutgoing=_SortAnrufer("o")
endif
endif
endif
endif
Return $Error_Check
EndFunc
;###############################################
; Anruflisten sortieren in Nr.Datum.Dauer
;###############################################
Func _SortAnrufer($EB_Sort)
Dim $EB_Array
Local $EB_ResultArray[1][3], $EB_Lenght, $EB_End, $EB_GetStr
Local $ArSize=0, $ArRegEx, $EB_Anrufer, $EB_Date, $EB_Lenght
$EB_End = StringInStr($EB_Anrufliste, 'var '&$EB_Sort&'_count=') ; ende der einträge finden
$EB_GetStr = $EB_End-$EB_Start ; zeichen berechenen zum ausschneiden
$EB_Eintraege = StringMid($EB_Anrufliste, $EB_Start, $EB_GetStr) ; telefonliste ausschneiden
$EB_Array = StringSplit($EB_Eintraege, @CRLF) ; telefonliste in array splitten
For $i = 1 To UBound($EB_Array)-1 ; jeden eintrag abklappern...
; voip_i_Phone[x] = 'suchtext';
$ArRegEx = StringRegExp($EB_Array[$i], "(?i)voip_" & $EB_Sort & "_Phone([^;]*)", 1) ; 1 regex
if not @Error then $ArRegEx = StringRegExp($ArRegEx[0], "(?i)'([^']*)", 1) ; 2 regex...profi kann da sicher 1 regex machen :)
if not @Error then $EB_Anrufer = $ArRegEx[0]
; voip_i_Date[x] = 'suchtext';
$ArRegEx = StringRegExp($EB_Array[$i], "(?i)voip_" & $EB_Sort & "_Date([^;]*)", 1) ; 1 regex
if not @Error then $ArRegEx = StringRegExp($ArRegEx[0], "(?i)'([^']*)", 1) ; 2 regex...profi kann da sicher 1 regex machen :)
if not @Error then $EB_Date= $ArRegEx[0]
; voip_i_Keep[x] = 'suchtext';
$ArRegEx = StringRegExp($EB_Array[$i], "(?i)voip_"&$EB_Sort&"_Keep([^;]*)", 1) ; 1 regex
if not @Error then $ArRegEx = StringRegExp($ArRegEx[0], "(?i)'([^']*)", 1) ; 2 regex...profi kann da sicher 1 regex machen :)
if not @Error then
$EB_Lenght = $ArRegEx[0]
ReDim $EB_ResultArray[$ArSize+1][3] ; neuer eintrag mit gefundenen daten...
$EB_ResultArray[$ArSize][0]= $EB_Anrufer ; anrufer nummer
$EB_ResultArray[$ArSize][1]= $EB_Date ; anrufer datum und zeit
$EB_ResultArray[$ArSize][2]= $EB_Lenght ; anruf dauer oder 00:00:00 = anruf verpasst
$ArSize+=1
$EB_Date = StringReplace($EB_Date, "/", " ")
_ExcelWriteCell($oExcel, $EB_Lenght, $Reihe , $SpalteDauer)
_ExcelWriteCell($oExcel, $EB_Date, $Reihe , $SpalteDatum)
_ExcelWriteCell($oExcel, "'" & $EB_Anrufer, $Reihe , $SpaltePhone) ; "'" da NumberFormat nicht übernommen wird und die führende Null sonst wegfällt.
$Reihe+=1
endif
next
Return $EB_ResultArray
EndFunc
Func _OpenXLS($_oExcel)
If Not IsObj($_oExcel) Then $oExcel = ObjCreate("Excel.Application") ; Excel-Objekt erstellen
$oExcel.Visible = 1 ; 0=unsichtbar/ 1=sichtbar
$oBook = $oExcel.Workbooks.Open($myPath) ; Datei öffnen
$oBook.Sheets(1).Select()
EndFunc
Alles anzeigen
Im Anhang dann noch die EXCEL-Tabelle als Zip-Datei.
Was ist zu tun?
Die ZipDatei dekomprimieren, Die Datei abspeichern.
Den Autoit-code übernehmen, den Pfad der Exceldatei einsetzen, compilieren und hoffentlich Freude haben.