NCID Anrufmonitor

  • Wer kennt es nicht...man programmiert zu später Stunde und auf ein mal "KLINGELT DAS TELEFON" *Herzinfarkt* :cursing:
    Daher habe ich mich mal umgesehen wie ich als arme Vodafone Easybox Besitzerin mein Telefon ausstellen kann und auf dem Computer über Anrufe benachrichtigt werde.

    Dabei bin ich auf die NCID Funktion gestoßen und habe mir die NCID-SDK durchgelesen.
    Es gibt sicherlich schon einige fertige Tools, aber so wie ich gesehen habe noch keins in Autoit.
    Zum anderen hat es mich doch sehr interessiert zu sehen wie das ganze funktioniert und was man so machen kann.

    Daher hier nun für Euch, ein kleines Beispielscript zu diesem Thema NCID.

    Die Funktionen im Überblick:
    1. Verbindung prüfen und NCID Version erhalten
    2.
    Einlesen des Anrufer Logs (Noch keine Darstellung in Form einer Listview oder ähnlichem)

    3. Auf einen Anruf warten und wenn dieser erfolgt, ein kleines Notify Fenster über der Taskbar anzeigen mit allen relevanten Informationen (Zeit/Datum,Anrufer Nummer, Nummer die angerufen wird)

    Benutzung:
    Script starten, IP eures Router eintippen und den NCID Port.
    Bei einer Easybox wäre das 192.168.2.1 und Port 3333.
    Vorausgesetzt es wurde im Routermenü die Funktion NCID gestartet.

    Hier das erweiterbare Script:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;##################################################
    ; NCID Anrufmonitor
    ; by JaneDoe...
    ; under Construction :)
    ;##################################################
    #Include <ButtonConstants.Au3>
    #Include <EditConstants.Au3>
    #Include <GUIConstantsEx.Au3>
    #Include <StaticConstants.Au3>
    #Include <WindowsConstants.Au3>
    #Include <GUIEdit.Au3>
    #Include <Misc.Au3>
    #include <Array.au3>

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

    Opt ('GUIOnEventMode', 1)
    TcpStartUp ()

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

    Global $Server = -1
    Global $TASKBAR_POS = WinGetPos("classname=Shell_TrayWnd")
    Global $TIMERINIT = 0
    Global $NotifyTime= 5000; 5 Sekunden
    Dim $NOTIFY
    Dim $TIME

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

    $Settings = GUICreate ('NCID Einstellungen:', 180, 100, -1, -1, -1, 128)
    GUISetOnEvent ($GUI_EVENT_CLOSE, '_Exit')
    GUICtrlCreateGroup ('', 5, 0, 170, 94)
    $IP = GUICtrlCreateInput (IniRead ('Settings.ini','Settings','IP', @IpAddress1), 12, 13, 100, 21, 1)
    $Port = GUICtrlCreateInput (IniRead ('Settings.ini','Settings','Port', 50), 117, 13, 50, 21, 1)
    $Connect = GUICtrlCreateButton ('Connect', 12, 66, 100, 20, $WS_GROUP)
    GUICtrlSetOnEvent ($Connect, '_Start')
    $Exit = GUICtrlCreateButton ('Exit', 117, 66, 50, 20, $WS_GROUP)
    GUICtrlSetOnEvent ($Exit, '_Exit')
    GUISetState (@SW_SHOW)
    WinSetOnTop ($Settings, '', 1)

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

    $GUI = GUICreate ('NCID Anrufmonitor by JaneDoe', 375, 275, -1, -1, -1, 128)
    GUISetOnEvent ($GUI_EVENT_CLOSE, '_Toggle')

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

    GUISetState (@SW_HIDE)

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

    While 1
    Sleep (15)

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

    ;notify window...
    If $TIMERINIT = 1 Then
    If TimerDiff($TIME) > $NotifyTime Then
    DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $NOTIFY, "int", 500, "long", 327684)
    While 1
    $CALLHANDLE = WinGetHandle("Notify")
    If $CALLHANDLE = "" And @error = 1 Then ExitLoop
    GUIDelete($CALLHANDLE)
    WEnd
    $TIME = 0
    $TIMERINIT = 0
    EndIf
    EndIf

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

    ;connection...
    If $Server <> -1 Then

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

    $Recv = TcpRecv ($Server, 1000000)
    If @Error Then
    GUISetState (@SW_HIDE, $GUI)
    WinSetOnTop ($GUI, '', 0)
    Sleep (100)
    MsgBox (48, 'Server Notice','You have been disconnected from the server.')
    _Disconnect ()
    EndIf

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

    If $Recv >""Then
    $ncid_input = StringSplit($Recv, @CRLF) ; split zeilen

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

    If $ncid_input[0] <> 0 Then
    for $i = 1 to $ncid_input[0]-1 ; loope die zeilen
    if $ncid_input[$i]<>"" then ; wenn nicht leer...

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

    $StrCount = StringInStr($ncid_input[$i], ":") ; split zeilen
    $command = StringLeft($ncid_input[$i], $StrCount) ; get command only

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

    if StringInStr($command, "200")=1 then ; ncid version info + connected to ncid server
    $NcidVersion = StringTrimLeft($ncid_input[$i], $StrCount); remove command
    $NcidVersion = StringStripWS($NcidVersion, 1)

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

    ; Connect Icon auf Grün stellen
    ;MsgBox(0, "Connected", $NcidVersion)

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

    elseif $command="CIDLOG:" then ; anrufer log
    $NcidValue = StringTrimLeft($ncid_input[$i], $StrCount) ; remove command
    $NcidSplit = StringSplit($NcidValue, '*') ; split zeilen
    ;_ArrayDisplay($NcidSplit, "test")

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

    ;Date Format...
    $command1 = StringLeft($NcidSplit[3], 2)
    $command2 = StringMid($NcidSplit[3], 3, 2)
    $command3 = StringRight($NcidSplit[3], 2)
    $Call_Date= $command1 & "." & $command2 & ".20" & $command3

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

    ;Time Format...
    $command1 = StringLeft($NcidSplit[5], 2)
    $command2 = StringRight($NcidSplit[5], 2)
    $Call_Time = $command1 & ":" & $command2

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

    ;Nummer die angerufen wurde...
    $CallingID = $NcidSplit[7]

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

    ;Nummer die angerufen hat...
    $CallerID = $NcidSplit[9]

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

    ;in Listview einfügen...
    ;eventuell mit Telefonbuch Einträgen vergleichen...Name, Bild usw.
    ;MsgBox(0, "Log", "Date:" & $Call_Date & " Time:" & $Call_Time & " Called:" & $CallingID & " Caller:" & $CallerID)

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

    elseif $command="CID:" then ; aktueller anruf
    $NcidValue = StringTrimLeft($ncid_input[$i], $StrCount) ; remove command
    $NcidSplit = StringSplit($NcidValue, '*') ; split zeilen
    ;_ArrayDisplay($NcidSplit, "test")

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

    ;Date Format...
    $command1 = StringLeft($NcidSplit[3], 2)
    $command2 = StringMid($NcidSplit[3], 3, 2)
    $command3 = StringRight($NcidSplit[3], 2)
    $Call_Date= $command1 & "." & $command2 & ".20" & $command3

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

    ;Time Format...
    $command1 = StringLeft($NcidSplit[5], 2)
    $command2 = StringRight($NcidSplit[5], 2)
    $Call_Time = $command1 & ":" & $command2

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

    ;Nummer die angerufen wurde...
    $CallingID = $NcidSplit[7]

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

    ;Nummer die angerufen hat...
    $CallerID = $NcidSplit[9]

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

    ;Anruf in Listview speichern...
    ;eventuell mit Telefonbuch Einträgen vergleichen...Name, Bild usw.

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

    ;Norify Window anzeigen
    Notify($Call_Time,$Call_Date,$CallingID,$CallerID)
    endif

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

    endif
    Next
    endif
    endif
    EndIf
    WEnd

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

    Func _Disconnect ()
    TcpCloseSocket ($Server)
    $Server = -1
    GUISetState (@SW_HIDE, $GUI)
    WinSetOnTop ($GUI, '', 0)
    GUISetState (@SW_SHOW, $Settings)
    WinSetOnTop ($Settings, '', 1)
    EndFunc

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

    Func _Toggle ()
    TcpCloseSocket ($Server)
    $Server = -1
    GUISetState (@SW_HIDE, $GUI)
    WinSetOnTop ($GUI, '', 0)
    GUISetState (@SW_SHOW, $Settings)
    WinSetOnTop ($Settings, '', 1)
    EndFunc

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

    Func _Start ()
    If GUICtrlRead ($IP) == '' Or GUICtrlRead ($Port) == '' Then Return @Error
    $Server = TcpConnect (GUICtrlRead ($IP), GUICtrlRead ($Port))
    If $Server = -1 Or @Error Then
    WinSetOnTop ($Settings, '', 0)
    Sleep (100)
    MsgBox (16, 'Fatal Error','Unable to connect to the server, change your settings and try again.')
    WinSetOnTop ($Settings, '', 1)
    Return @Error
    EndIf
    Sleep (150)
    TcpSend ($Server, ""); <.. start commando
    GUISetState (@SW_HIDE, $Settings)
    WinSetOnTop ($Settings, '', 0)
    GUISetState (@SW_SHOW, $GUI)
    WinSetOnTop ($GUI, '', 1)
    EndFunc

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

    Func _Exit ()
    IniWrite ('Settings.ini','Settings','IP', GUICtrlRead ($IP))
    IniWrite ('Settings.ini','Settings','Port', GUICtrlRead ($Port))
    Exit
    EndFunc

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

    Func Notify($CallTime,$CallDate,$CallNumber,$CallerNumber)
    $NOTIFY = GUICreate("Notify", 302, 149, @DesktopWidth - 302, @DesktopHeight - (190 + $TASKBAR_POS), $WS_POPUP)
    GUISetBkColor(0)
    WinSetOnTop($NOTIFY, "", 1)
    $LABEL1 = GUICtrlCreateLabel("Anrufer: " & $CallerNumber, 8, 32, 286, 17)
    GUICtrlSetFont(-1, 9, 400, 0, "Courier New")
    GUICtrlSetColor(-1, 32768)
    $LABEL2 = GUICtrlCreateLabel("Angerufene Nummer: " & $CallNumber, 8, 80, 278, 19)
    GUICtrlSetFont(-1, 9, 400, 0, "Courier New")
    GUICtrlSetColor(-1, 32768)
    $LABEL3 = GUICtrlCreateLabel("Uhrzeit: " & $CallTime, 8, 56, 284, 17)
    GUICtrlSetFont(-1, 9, 400, 0, "Courier New")
    GUICtrlSetColor(-1, 32768)
    $LABEL4 = GUICtrlCreateLabel("Datum: " & $CallDate, 8, 104, 284, 17)
    GUICtrlSetFont(-1, 9, 400, 0, "Courier New")
    GUICtrlSetColor(-1, 32768)
    DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $NOTIFY, "int", 500, "long", 262152)
    GUISetState(@SW_SHOW)
    $TIME = TimerInit()
    $TIMERINIT = 1
    EndFunc

    [/autoit]

    Ich denke ich werde das für mich persönlich die Tage erweitern, um ein Telefonbuch wo mir bei Anrufen dann ein vorhandener Name zur Rufnummer angezeigt wird, ein Anruferlog wenn man mal außer Haus ist usw.
    Möglichkeiten gibt es sehr viele, die Grundfunktionen sind ja in dem Script vorhanden.

    Viel Spaß bei der Nutzung und eventuellen Anpassung 8o

    • Offizieller Beitrag

    ein Anruferlog wenn man mal außer Haus ist usw.
    Möglichkeiten gibt es sehr viele, die Grundfunktionen sind ja in dem Script vorhanden.


    Für eine Fritzbox gibt es da "Fritz!AppTicker", da kann ich von überall sehen, wer angerufen hat - angerufen wurde, habe Zugriff auf das Telefonbuch der Box und kann dieses im Smartphone nutzen, kann auch die Box fernwarten.
    Ich denke, da gibt es kaum noch Erweiterungsmöglichkeiten /-Bedarf.

  • Hi,
    ich werde gerne den Anruf-Monitor testen..
    ..und mitTWNCID vergleichen ;)
    Ich hoffe natürlich, dass ein AutoIt-Programm schneller ist als ein java-Programm.
    (Endlich mal ein Programm für EB-Benutzer, denn da sind ja Erweiterungen möglich/zu erwarten..
    ..meine java-Kenntnisse sind nicht gerade umfangreich^^)
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..


  • Für eine Fritzbox gibt es da "Fritz!AppTicker", da kann ich von überall sehen, wer angerufen hat - angerufen wurde, habe Zugriff auf das Telefonbuch der Box und kann dieses im Smartphone nutzen, kann auch die Box fernwarten.
    Ich denke, da gibt es kaum noch Erweiterungsmöglichkeiten /-Bedarf.


    Darum schrieb ich ja auch "arme EasyBox Besitzerin", da geht das halt nicht.
    Von Fritzbox war hier nie die rede und denke ich werde nicht die einzige ohne so ein Wunderding sein ;)

    ytwinky:
    TWNCID das habe ich auch gesehen, aber wie du schon sagst: das benötigt Java
    Kommt mir aber nicht auf den Rechner :D
    Wünsche Dir viel Spaß beim anpassen und Willkommen im Club der EB Besitzer :love:

  • [OT]
    Warum nennst du dich "Unbekannte Tote" ? :rofl:
    [/OT]


    Langeweile oder gibt es einen Grund für deine Beiden sinnfreien Kommentare in diesem Beitrag ?
    Soll ich nun fragen wieso du dich "FehlerFixieren" nennst oder wird das Board hier nun Eingedeutscht und jeder User wird von dir entsprechend umbenannt ?

  • [OT]
    Bug Fix heißt Fehler beseitigen ;).
    Und ist ein Anspielung wahrscheinlich auf "Release Notes", dort wo Beseitigungen von Bugs beschrieben sind.
    Also es ist quasi Nerd-Sprache ... Leetspeak.

    Aber dein Nick würde mich auch interessieren, wie man auf sowas kommt.
    [/OT]

    • Offizieller Beitrag

    gibt es einen Grund für deine Beiden sinnfreien Kommentare in diesem Beitrag ?


    Den zweiten Beitrag habe ich deutlich als OT markiert, viele Nicks sind einfach bunt zusammengewürfelt. Jane Do hat aber in der Kriminalistik eine feste Bedeutung. Insofern war ich einfach nur neugierig, weshalb man sich damit identifiziert.
    Tut mir leid, wenn du Post 1 als sinnfrei betrachtest. Sehe ich anders. Solch Anrufmonitoring ist eine prima Sache. Und in diesem nicht bestreitbaren Sachzusammenhang wollte ich auf eine Möglichkeit bei vorhandener FritzBox hinweisen.

  • Dann muss ich mich bei dir Entschuldigen, ich hab das anders Verstanden.
    OT habe ich nun mal gegoogelt, bedeutet wohl Offtopic.
    Dachte du hast einen BBCode verwendet der nicht unterstützt wird oder dich dabei verschrieben :D

    [OT]
    Zu meinem Nicknamen, ich bin Fan von Navy Ncis.
    Die Folge 4 aus Staffel 2 hat im Originalen den Namen "Lt. JaneDoe" und da ich Janine heiße, fand ich das wäre ein passender anonymer Nick in einem Forum.
    [\OT]

    Zum Thema:
    Habe gestern mal nach deiner Fritzbox geschaut und da die ja doch sehr viele Funktionen hat, neidisch überlegt welche man da für die EasyBox übernehmen kann.
    z.B. das blocken von unerwünschten Anrufern wäre schön.
    Da ich noch ein FaxModem als PCI Karte im Rechner habe, könnte man damit den Anruf auflegen.
    Ohne geht das leider nicht, da der Router keine derartige Funktion hat.

    Das auslesen mit dem Smartphone wäre das einfachste.
    Ich würde da eine Webseite erstellen, von Autoit mittels mysql die Einträge aus dem Anruflog einfügen.
    Dann könnte man diese Webseite mit jedem Smartphone abrufen.

    Ansteuern, soweit man die EasyBox ansteuern kann...ginge ebenso.
    Mit dem Smartphone auf der Webseite Einstellungen vornehmen, die das AutoitTool dann abruft und umsetzt.
    Sehe da aber nur Verwendung für z.B. einfügen geblockter Nummern.

    Dann hab ich gelesen das man mit einem Modem im PC, wohl sogar den Anruf entgegen nehmen kann.
    Da würde es sich anbieten mit der Bass.dll einen Anrufbeantworter zu erstellen, der die Nachrichten auf dem Pc speichert.
    Vorher dann einen vorgefertigten Nachrichtentext abspielt.
    Witzig wäre hier noch, man könnte für bestimmte Nummern einen anderen vorgefertigten Nachrichtentext nehmen.

    z.B. Nummer von ExFreund: "Hallo du Stalker, ruf mich nie wieder an"...Tut,tut,tut...
    Nummer von Muttern: "Hallo Mutter, blablabla" :D
    usw.

    Also Möglichkeiten gibt es da echt jede Menge.
    Derzeit beschäftige ich mich halt mit der Rückwärtssuche mittels Klicktel, die es übrigens günstig auf Ebay gibt.
    Im Gegensatz zu denen in Internet, funktioniert diese bei allen Eingetragenen Nummern.
    Für die Arbeit wäre das schon praktisch, wenn bei uns neue Kunden anrufen.
    So kann man bei der Terminvergabe direkt die gefundenen Infos aus KlickTel in die Kundenkartei übernehmen.
    Mal sehen ob ich das fertig bekomme, bis jetzt noch alles Bömische Dörfer.

    So, nun seit ihr dran...für weitere Ideen :love:

  • Wenn die Easybox SIP unterstützt kannst du auch die API von 3CXPhone nehmen.
    Der PC wird dann als IP-Telefon eingetragen in der Box.
    Im Forum macht da jemand gerade aktuell was, musst mal suchen.

  • Unterstützen = Ja, von Vodafone erlaubt = anscheinend Nein.
    Der dafür zuständige Bereich in den Routereinstellungen "QoS-Einstellungen" ist nicht auswählbar.
    Die Daten kann man aber wohl mit einem Trick auslesen, soweit ich das gerade richtig verstanden habe.
    Werde ich mir aber für einen späteren Zeitpunkt aufheben, also da genauer nachzuforschen.

    Derzeit noch die RufId Sache am Wickel und möchte so schnell nicht aufgeben, zumal mir gerade funkey dabei hilft und ich seine Mühe nicht ohne ein belohnendes Ergebniss sehen möchte.

    Aber danke für den Tipp :)

    • Offizieller Beitrag

    Hallo Janine,

    habe mich gerade mal etwas mit dem Thema Easybox beschäftigt. Jetzt verstehe ich, was du mit "arme Easybox-Besitzerin" meinst. :S
    Ich habe einen Thread gefunden, indem beschrieben wird, wie man die Box im vollen Umfang konfigurieren kann. Vodafone Easybox 803 / 903/ 904 "jailbreaken"
    Vielleicht bringt dich das etwas weiter. Viel Glück dabei.

  • Danke

    [autoit]

    if $varPoster="BugFix" then $varAnrede="unbekannter Echter Vorname"

    [/autoit]


    :D


    Werde ich mir auch mal ansehen, aber zunächst geht es weiter mit der Anzeige der Telefonnummern aus KlickTel.
    Habe hierzu eine Lösung gefunden, nicht so schön wie ich dachte...scheint ein Zusatzprogramm in Delphi zu sein *hust*, aber besser als nix.

    Wer den Anrufmonitor um eine Telefonnummernsuche und den damit Verbundenen Daten in KlickTel erweitern möchte, möge HIER weiterlesen :)

  • hi Frau Leutnantin^^
    meine bisherigen Ermittlungen haben ergeben:
    -Benutzung (vodafone-)fremder VOIP-Anbieter ist mit der EB803 NICHT möglich..
    -Die EB803 KANN als Webserver eingesetzt werden, entsprechende Kenntnisse über Portweiterleitung
    und eine (relativ) feste IP vorausgesetzt(das berührt nicht die Server-Fähigkeiten per EB-USB-Anschluß)
    Ich brauche mich in dieser Richtung nicht schlauer zu machen, da ich beides nicht nutzen möchte..
    (Bei Bedarf kann ich gerne weitere Info liefern..)
    Falls du gerne deine WAN-IP(die ja in der EB gespeichert ist) auslesen möchtest:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    MsgBox(0, 'WAN-IP', _GetWANIP())

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

    Func _GetWANIP()
    Local $dl=BinaryToString(InetRead('http://easy.box/login.stm'))
    $dl=StringMid($dl, StringInstr($dl, 'wan_ip=')+8, 29); ip vorbereiten
    Return StringLeft($dl, StringInstr($dl, ';')-2); wan-ip zurückgeben
    EndFunc ;==>_GetIP

    [/autoit]

    Mein neues Smartphone verhindert z.Z. eine Fortführung der NCID-Geschichte..
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • Hi ytwinky,
    danke dir für die Infos und das kleine Script.
    Habe mir daraufhin mal die Webseiten angesehen, die mir der Router anzeigt und dabei auf eine schöne Sache gestoßen.
    Der NCID Server gibt mir ja leider nur die Anrufer zurück, aber nicht die von mir getätigten Anrufe.
    Auch sind keine Infos dabei, wie lange ein Anruf ging oder ob ich diesen verpasst habe.

    In der Routersteuerung werden diese aber angezeigt.

    Habe daher kurzerhand ein Script geschrieben, womit man diese Infos auslesen kann.
    Man bekommt dann ein Array für die Ein und Ausgehenden Anrufe, mit Zeit.
    Wenn die Zeit 00:00:00 ist, hat man den Anruf verpasst.

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include "Inet.au3"
    #include "Array.au3"
    ;###############################################
    ; Anruflisten auslesen für Router Model:
    ; EasyBox 803 A (und vermutlich andere...)
    ;
    ; By JaneDoe
    ;###############################################

    [/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][/autoit][autoit][/autoit][autoit]

    $Error_Check = _EB_GetAnrufliste()
    If $Error_Check <> "None" then Msgbox(0,"Hinweis",$Error_Check,0)

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

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

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

    exit

    [/autoit][autoit][/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...
    $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...
    $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
    endif
    next
    Return $EB_ResultArray
    EndFunc

    [/autoit]

    Der Regex zum Auslesen der Infos ist noch nicht so sauber, sondern aufgeteilt in 2 Abfragen.
    Hab leider noch nicht raus gefunden wie ich die 2 Abfragen zu einer kombinieren kann.
    Aber geht ja auch so und ich hoffe das geht so bei allen EasyBox Modellen und nicht nur der 803A.

    Viel Spaß mit deinem neuen Smartphone :)

  • Cooles Script..
    bin mal gespannt, wie es läuft ;)
    t4s
    Gruß
    ytwinky

    P.S.:t4s=thanks for sharing, wenn es das nicht schon gibt, habe ich es grade erfunden :rofl:

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • Nichts zu danken, freut mich wenn ich auch mal etwas an die Gemeinde zurück geben kann :)
    Man sollte den Beitrag langsam umbenennen oder ich mache mal einen neuen Beitrag nur für die EasyBox.

    Man kann ja doch eine ganze Menge über die Router Webseiten machen/erfahren.
    SIP Daten stehen da zum Teil auch alle drinnen.

    Hier kann man den NCID Daemon Ein/Ausschalten:

    Code
    einschalten:
    http://192.168.2.1/cgi-bin/setup_ncidd.exe?enable_check=1&snd_list_check=1&ncidd_port=3333
    
    
    ausschalten:
    http://192.168.2.1/cgi-bin/setup_ncidd.exe?enable_check=0&snd_list_check=1&ncidd_port=3333

    Hier prüfen ob der aktiviert/deaktiviert ist und die Settings auslesen:

    Code
    var ncidd_enable=1;          <--- an, sonst 0
    var ncidd_snd_list=1;        <--- history an, sonst 0
    var ncidd_port=3333; <--- port

    Ebenso kann man sich ganz schnell ein Router Reset Tool schreiben, einfach dazu mal in den Quelltext der Seite schauen auf der man eine Neue Verbindung herstellen kann.
    Ein Blick in den FORM Bereich hilft dann weiter :)

    Finde ich alles in allem sehr Spannend, muss man so nicht immer in das Router Webinterface.
    Auch hat man so viel mehr Infos als die NCID Tools die ich bisher gesehen habe, da die nur von den NCID Daten leben und keinen wirklichen Überblick über die Anrufe und deren Dauer haben.

  • Da kann man ja super mit der WinHTTP.au3 zugreifen. Muss mir auch mal ne EasyBox besorgen.
    GetAnrufliste :rofl:
    Immer dieses Denglisch.

    Achja. Schau dir mal SetError an wegen deinem ErrorCheck.

  • Man sollte den Beitrag langsam umbenennen oder ich mache mal einen neuen Beitrag nur für die EasyBox.

    Wenn du(als TO) den Beitrag in ersten Post nicht umbenennen kannst, solltest du einen Mod/Admin bitten, dies zu tun. Mein Vorschlag ist: EasyBox-Daten auslesen und ändern
    Natürlich könnte da NCID oder VOIP noch hinein, da aber die EasyBox eben nur auf vodafone abgestimmt ist, sollte nicht der Eindruck entstehen, es gelte grundsätzlich..
    Fürs Auslesen der Anrufgeschichte ist Skripting wirklich die bessere(weil flexiblere) Lösung.
    Die Router-Verwaltung sollte imho jedoch nur über das Web-Interface der EB erfolgen -- rein aus Sicherheitsgründen!
    (Durch diesen Thread habe ich sogar meine EB endlich mal auf den neuesten Stand gebracht, schönen Dank für den Anstoß..^^)
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • Ich finde es eher bedenklich wie leicht man die Einstellungen im Router verändern kann.
    Es ist so z.B. kein Problem die Firewall anders zu konfigurieren oder auszustellen.

    Die Funktionen sollten nicht nur bei einer Vodafone EasyBox so gehen, da diese ja nicht von Vodafone produziert werden sondern lediglich deren "Branding" haben.
    Hersteller ist die Firma Arcadyan, von dieser bekommt man ebenfalls Firmware Updates und kann aus diesen sich die fehlenden Settingseiten wie VoiceOverIp rausziehen und bearbeiten.

    Was so etwas betrifft bin ich eine kleine MissesHolmes, interessiert mich etwas verfolge ich das bis ich nicht mehr weiter komme.

    Da der Anrufmonitor ja nur für mich privat ist, sehe ich auch keine Probleme darin die Einstellungen des Routers direkt über den Anrufmonitor zu machen.
    Ich bin, was das veröffentlichen meiner Programme betrifft, eh vorsichtig.
    Zum einen sehe ich viel zu oft wie manche Kids in solchen Tools einfach ihren Namen reinschreiben und das als ihr Werk ausgeben, zum anderen möchte ich weder Support machen, noch für falsche Anwendung getadelt werden.

    Ist halt wie Kuchen backen, den isst man am liebsten auch selber :)