NCID Anrufmonitor

  • Mit meinem ersten Beitrag war wohl etwas schief gelaufen. Bis auf die Bilddatei ist nichts im Forum zu finden. Hier noch einmal.
    Ich bin vor 4 Tagen bei der Lösung meiner Probleme (EasyBox) auf dieses Forum gestoßen und war von dem Code von JaneDoe begeistert. Bislang hatte ich noch nichts von Autoit gehört, habe aber ein wenig Erfahrung mit VBA Excel. Autoit habe ich mir runtergeladen und dazu den Code von JaneDoe (Danke! :) ). Diesen habe ich umgeschrieben, so dass die Daten jetzt in eine Exceltabelle geschrieben werden. Excel erledigt dann die weiteren Aufgaben (entfernen doppelter Sätze, formatieren, zuordnen des Namens etc. Bei Bedarf bin ich gerne Bereit, das Workbook zur Verfügung zu stellen.
    Hier der geänderte Code:

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_SaveSource=y
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include "Inet.au3"
    #include "Array.au3"
    #include "Excel.au3"

    [/autoit][autoit][/autoit][autoit]

    ;####################################################################
    ; 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 | Georg Häusler
    ;####################################################################

    [/autoit][autoit][/autoit][autoit]

    Global $EB_IP ="192.168.2.1" ; router ip
    Global $EB_Username ="root" ; standart ist: root
    Global $EB_Passwort ="123456" ; standart ist: 123456
    Global $ArrayIncoming,$ArrayOutgoing,$EB_Anrufliste,$EB_Start,$Error_Check

    [/autoit][autoit][/autoit][autoit]

    DIM $sFilePath_01 ; Excelpfadvariable
    Dim $Reihe, $SpalteDatum, $SpaltePhone, $SpalteDauer ; Excelvariablen

    [/autoit][autoit][/autoit][autoit]

    $sFilePath_01 = "Pfad und Dateiname eintragen" ; Excelpfad und Dateiname eintragen
    $oExcel_01 = _ExcelBookOpen($sFilePath_01)
    If @error = 1 Then
    MsgBox(0, "Fehler!", "Das Excel-Objekt konnte nicht erstellt werden")
    Exit
    ElseIf @error = 2 Then
    MsgBox(0, "Fehler!", "Die Datei existiert nicht!")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    _ExcelSheetActivate($oExcel_01, 2)

    [/autoit][autoit][/autoit][autoit]

    $Error_Check = _EB_GetAnrufliste()

    [/autoit][autoit][/autoit][autoit]

    _ExcelBookClose($oExcel_01,1,0)

    [/autoit][autoit][/autoit][autoit]

    ;If ubound($ArrayIncoming)<>0 then _ArrayDisplay($ArrayIncoming,"Eingehende Anrufe")

    [/autoit][autoit][/autoit][autoit]

    ;If ubound($ArrayOutgoing)<>0 then _ArrayDisplay($ArrayOutgoing,"Ausgehende Anrufe")

    [/autoit][autoit][/autoit][autoit]

    exit

    [/autoit][autoit][/autoit][autoit]

    ;###############################################
    ; 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 = 1
    $SpalteDatum = 1 ; Exceleinträge eingehende Anrufe
    $SpaltePhone = 3 ; Exceleinträge eingehende Anrufe
    $SpalteDauer = 4 ; 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 = 1
    $SpalteDatum = 7 ; Exceleinträge ausgehende Anrufe
    $SpaltePhone = 9 ; Exceleinträge ausgehende Anrufe
    $SpalteDauer = 10 ; Exceleinträge ausgehende Anrufe

    [/autoit][autoit][/autoit][autoit]

    $ArrayOutgoing=_SortAnrufer("o")
    endif
    endif
    endif
    endif

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

    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]

    [/autoit][autoit][/autoit][autoit]

    ; 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]

    [/autoit][autoit][/autoit][autoit]

    ; 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]

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

    _ExcelWriteCell($oExcel_01, $EB_Lenght, $Reihe , $SpalteDauer)
    _ExcelWriteCell($oExcel_01, $EB_Date, $Reihe , $SpalteDatum)
    _ExcelWriteCell($oExcel_01, $EB_Anrufer, $Reihe , $SpaltePhone)
    $Reihe = $Reihe + 1

    [/autoit][autoit][/autoit][autoit]

    endif
    next
    Return $EB_ResultArray
    EndFunc

    [/autoit]

    Das das so gut geklappt hat, war eine schöne Erfahrung. Demnächst möchte ich mich mit dem GUI beschäftigen.
    Im Moment habe ich aber ein anderes Problem und bitte da um Hilfe.
    Wie stelle ich im Programm fest, ob eine EXCEL-Datei geöffnet ist, und wie spreche ich dann diese Datei an, so dass ich meine Daten dort abladen kann.
    Vielen Dank im Voraus
    Fernando

    Ich habe eiserne Prinzipien.
    Wenn sie Dir nicht gefallen, habe ich auch noch andere.

    • Offizieller Beitrag

    Wie stelle ich im Programm fest, ob eine EXCEL-Datei geöffnet ist, und wie spreche ich dann diese Datei an, so dass ich meine Daten dort abladen kann.


    Bitte dazu nicht diesen Thread hijacken - ist ein anderes Thema. Eröffne dazu einen eigenen Thread in "Hilfe und Unterstützung".

  • Hi Bugfix, kein Problem, ich bewege mich zum ersten mal registriert in einem Forum und bin noch nicht so ganz mit der Materie vertraut. Werde mich bessern. ;) Habe nach langem Suchen auch schon die Antwort für mein Problem gefunden. :)

    Ich habe eiserne Prinzipien.
    Wenn sie Dir nicht gefallen, habe ich auch noch andere.