Pingen und Logfile bei Statusänderung schreiben

  • Hallo zusammen,

    hab vor einer Stunde mit AutoIt angefangen weil ich folgendes verwirkliche möchte.

    Eine Anwendung die eine IP-Adresse anpingt (im Intervall von 10 Sekunden) und nur loggt, wenn sich die Erreichbarkeit ändert.
    Sprich, wenn der PC von erreichbar auf unerreichbar wechselt oder andersrum (sonst wird das Logfile zu dick)..


    Folgende Probleme hab ich..

    - wenn sich der Status ändert, erscheinen immernoch die selben MsgBoxen (mit dem alten Status)
    - nur beim ersten Durchlauf wird geloggt, danach nicht mehr (obwohl die MsgBox angezeigt wird 8| )


    [autoit]


    $ip = "192.168.2.1"
    $var = Ping("192.168.2.1",800)
    $intervall = 10000
    $file1 = FileOpen("test.txt", 1)
    $date = @YEAR & @MON & @MDAY
    $time = @HOUR & ":" & @MIN & ":" & @SEC

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

    Do
    If $var Then
    Msgbox(0,"Status","Online, roundtrip was:" & $var)
    FileWriteLine($file1, $date & " " & $time & " - " & $ip & " - " & $var)
    FileClose($file1)
    Else
    Msgbox(0,"Status","An error occured with number: " & @error)
    FileWriteLine($file1, $date & " " & $time & " - " & $ip & " - " & $var)
    FileClose($file1)
    EndIf

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

    Sleep($intervall)
    Until $ip = ""

    [/autoit]


    Schonmal vielen Dank für jede Hilfe :)


    Grüße, Alex

  • Herzlich willkommen.

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    Local $ip = '10.0.0.138'
    Local $test, $testCopy

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

    While 1
    $test = Ping($ip)
    If $test <> $testCopy Then _FileWriteLog('log.txt', 'Neuer Status: '&$test)
    $testCopy = $test
    Sleep(10000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Leider klappt das mit der GUI nich ganz wie ich mir das vorgestellt hab... bzw. garnich *g*

    Die GUI reagiert fast garnich und geloggt wird wohl auch nichts mehr..

    Button1 soll die Schleife starten und laufen lassen solange $stop ungleich 1 ist.
    Button2 soll die Schleife stoppen indem $stop auf 1 gesetzet wird..
    Ich weiß, nich sonderlich schön, aber das war so meine erste Idee *g*

    P.S.: wie kann ich denn meinen Code so verkürzen (Spoiler), wie Du das gemacht hast Funkey?


    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

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

    Local $ip = '192.168.2.1'
    Local $logfile = "log.txt"
    Local $test, $testCopy, $msg, $stop
    Local $intervall = "10000"

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=form1.kxf
    $Form1_1 = GUICreate("Form1", 415, 186, 239, 155)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1_1Minimize")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1_1Maximize")
    GUISetOnEvent($GUI_EVENT_RESTORE, "Form1_1Restore")
    $Label1 = GUICtrlCreateLabel("Host", 8, 8, 26, 17)
    GUICtrlSetOnEvent(-1, "Label1Click")
    $Input1 = GUICtrlCreateInput($ip, 8, 24, 121, 21)
    GUICtrlSetOnEvent(-1, "Input1Change")
    GUICtrlSetOnEvent(-1, "Updown1Change")
    $Input2 = GUICtrlCreateInput($intervall, 168, 24, 33, 21)
    GUICtrlSetOnEvent(-1, "Input2Change")
    $Button1 = GUICtrlCreateButton("Button1", 32, 96, 105, 49, 0)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button2 = GUICtrlCreateButton("Button2", 184, 96, 97, 49, 0)
    GUICtrlSetOnEvent(-1, "Button2Click")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

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

    Func Button1Click()

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

    While $stop <> "1"
    $test = Ping($Input1)
    If $test <> $testCopy Then _FileWriteLog($logfile,$test)
    $testCopy = $test
    Sleep($Input2)
    WEnd

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

    EndFunc

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

    Func Button2Click()
    $stop = "1"
    EndFunc

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

    Func Form1_1Close()
    EXIT
    EndFunc

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

    Func Form1_1Maximize()

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

    EndFunc
    Func Form1_1Minimize()

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

    EndFunc
    Func Form1_1Restore()

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

    EndFunc

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

    Func Input1Change()

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

    EndFunc

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

    Func Input2Change()

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

    EndFunc

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

    Func Label1Click()

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

    EndFunc

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

    Func Updown1Change()

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

    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von wwasow (23. April 2009 um 12:49)

  • So:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <File.au3>

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

    $ip = '192.168.2.1'
    Local $logfile = "log.txt"
    Global $test, $testCopy
    Local $intervall = "10000"

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=d:\documents and settings\li04391\desktop\form1.kxf
    $Form1_1 = GUICreate("Form1", 415, 186, 239, 155)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")

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

    $Label1 = GUICtrlCreateLabel("Host", 8, 8, 26, 17)
    Global $Input1 = GUICtrlCreateInput($ip, 8, 24, 121, 21)
    Global $Input2 = GUICtrlCreateInput($intervall, 168, 24, 50, 21)
    Global $Button1 = GUICtrlCreateButton("Start", 32, 96, 105, 49, 0)
    GUICtrlSetOnEvent(-1, "Button1Click")
    Global $Button2 = GUICtrlCreateButton("Stopp", 184, 96, 97, 49, 0)
    GUICtrlSetOnEvent(-1, "Button2Click")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(5000)
    WEnd

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

    Func Button1Click()
    AdlibEnable('_Zyklus', GUICtrlRead($Input2))
    GUICtrlSetState($Button1, $GUI_DISABLE)
    GUICtrlSetState($Button2, $GUI_ENABLE)
    EndFunc ;==>Button1Click

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

    Func Button2Click()
    AdlibDisable()
    GUICtrlSetState($Button1, $GUI_ENABLE)
    GUICtrlSetState($Button2, $GUI_DISABLE)
    EndFunc ;==>Button2Click

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

    Func _Zyklus()
    $test = Ping(GUICtrlRead($Input1))
    If $test <> $testCopy Then _FileWriteLog($logfile, $test)
    $testCopy = $test
    EndFunc ;==>_Zyklus

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

    Func Form1_1Close()
    Exit
    EndFunc ;==>Form1_1Close

    [/autoit]

    Spoiler mit Code erstellst du wenn du zuerst auf das Spoilerzeichen klickst [Blockierte Grafik: http://www.autoit.de/wcf/icon/wysiwyg/insertSpoilerM.png] und dann auf den Autoit-Code-Tag [Blockierte Grafik: http://www.autoit.de/wcf/icon/wysiwyg/insertAutoItM.png].
    Das sieht dann so aus: [ spoiler][ autoit]Hier kommt der Code rein[ /autoit][ /spoiler]

  • Nichts zu danken. Du kannst auch richtige IP-Controls verwenden

    Spoiler anzeigen
    [autoit]

    #include <GuiIPAddress.au3>
    #include <GUIConstantsEx.au3>
    #include <File.au3>

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

    $ip = '192.168.2.1'
    Local $logfile = "log.txt"
    Global $test, $testCopy
    Local $intervall = "10000"

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=d:\documents and settings\li04391\desktop\form1.kxf
    $Form1_1 = GUICreate("Form1", 415, 186, 239, 155)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")

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

    $Label1 = GUICtrlCreateLabel("Host", 8, 8, 26, 17)
    ;~ Global $Input1 = GUICtrlCreateInput($ip, 8, 24, 121, 21)
    Global $Input1 = _GUICtrlIpAddress_Create($Form1_1, 8, 24)
    _GUICtrlIpAddress_Set($Input1, $ip)
    Global $Input2 = GUICtrlCreateInput($intervall, 168, 24, 50, 21)
    Global $Button1 = GUICtrlCreateButton("Start", 32, 96, 105, 49, 0)
    GUICtrlSetOnEvent(-1, "Button1Click")
    Global $Button2 = GUICtrlCreateButton("Stopp", 184, 96, 97, 49, 0)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetOnEvent(-1, "Button2Click")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(5000)
    WEnd

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

    Func Button1Click()
    AdlibEnable('_Zyklus', GUICtrlRead($Input2))
    GUICtrlSetState($Button1, $GUI_DISABLE)
    GUICtrlSetState($Button2, $GUI_ENABLE)
    EndFunc ;==>Button1Click

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

    Func Button2Click()
    AdlibDisable()
    GUICtrlSetState($Button1, $GUI_ENABLE)
    GUICtrlSetState($Button2, $GUI_DISABLE)
    EndFunc ;==>Button2Click

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

    Func _Zyklus()
    $test = Ping(_GUICtrlIpAddress_Get($Input1))
    If $test <> $testCopy Then _FileWriteLog($logfile, $test)
    $testCopy = $test
    EndFunc ;==>_Zyklus

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

    Func Form1_1Close()
    Exit
    EndFunc ;==>Form1_1Close

    [/autoit]
  • Sooo ich dachte ich geb der Community mal bissl was zurück ;)
    Hier die aktuelle Version..
    Der Code is sicherlich noch verbesserungsfähig (gell funkey :rolleyes: ) aber es läuft 8)


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #cs-----------------------------------------------------------------------------------------------------------
    | Author: Raylow (Special thx to "funkey" --> http://www.autoit.de)
    | Date: 23.04.2009
    | Script Version: 2.1.0.1
    |
    |
    #ce-----------------------------------------------------------------------------------------------------------

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

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=Netzwerkverbindung.ico
    #AutoIt3Wrapper_Res_Description=Application to ping a host periodically
    #AutoIt3Wrapper_Res_Fileversion=2.1.0.1
    #AutoIt3Wrapper_Res_Icon_Add=paste.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include <File.au3>
    #include <windowsconstants.au3>

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

    Global $ping = -1, $pingCopy = -2
    Global $intervall = "10"
    Global $date= @YEAR & "-" & @MON & "-" & @MDAY
    Global $stopped = 0 ;wird das Pingen nicht gestoppt bevor die Anwendung beendet wird, ist $stopped = 0. Wenn $stopped = 0 ist, wird der Stopvorgang beim beenden der Anwendung geloggt
    Global $path = ""
    $StartFolder = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"

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

    Opt("GUIOnEventMode", 1)

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

    $Form1_1 = GUICreate("Ping-Assi", 247, 145, 240, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")
    GUISetState(@SW_SHOW)

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

    $Label1 = GUICtrlCreateLabel("Host to ping", 8, 8, 80, 17)
    $Label2 = GUICtrlCreateLabel("Intervall", 160, 8, 38, 17)
    $Label3 = GUICtrlCreateLabel("Logfile Path", 8, 58, 98, 17)

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

    Global $Input1 = GUICtrlCreateInput($Input1, 8, 24, 105, 21)
    ControlFocus($Form1_1, "",$Input1)
    Global $Input2 = GUICtrlCreateInput($intervall, 160, 24, 32, 21)
    Global $Input3 = GUICtrlCreateInput("", 8, 74, 194, 21)

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

    Global $Button1 = GUICtrlCreateButton("Start", 8, 104, 114, 30, $BS_DEFPUSHBUTTON)
    GUICtrlSetOnEvent(-1, "Button1Click")
    Global $Button2 = GUICtrlCreateButton("Stop", 126, 104, 114, 30)
    GUICtrlSetOnEvent(-1, "Button2Click")
    GUICtrlSetState($Button2, $GUI_DISABLE)
    Global $Button3 = GUICtrlCreateButton("...", 205, 74, 35, 21)
    GUICtrlSetOnEvent(-1, "Button3Click")
    Global $Button4 = GUICtrlCreateButton("", 115, 24, 35, 21, $BS_ICON)
    GUICtrlSetImage($Button4, @ScriptFullPath, -5, 0)
    GUICtrlSetOnEvent(-1, "Button4Click")
    Global $Button5 = GUICtrlCreateButton("?", 225, 8, 15, 17)
    GUICtrlSetOnEvent(-1, "Button5Click")

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

    While 1
    Sleep(5000)
    WEnd

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

    Func Button5Click()
    MsgBox(64, "About Ping-Assi", "This programm was written by Raylow ([email='raylow.com@gmail.com'][/email]). Special thx to "funkey" --> http://www.autoit.de")
    ControlFocus($Form1_1, "",$Input1)
    EndFunc

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

    Func Button4Click()
    GUICtrlSetData($Input1, ClipGet())
    EndFunc

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

    Func Button3Click()
    Dim $fileName

    If GUICtrlRead($Input1) = "" Then
    $var = FileSaveDialog("Save logfile..", $StartFolder, "Logfile (*.*)", 16, "log.txt")
    Else
    $var = FileSaveDialog("Save logfile..", $StartFolder, "Logfile (*.*)", 16, StringReplace(GUICtrlRead($Input1), ".", "_") & ".txt")
    EndIf


    If @error Then

    Else
    GUICtrlSetData($Input3, $var)
    EndIf
    EndFunc

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

    Func Button1Click()
    If GUICtrlRead($Input1) <> "" Then
    Global $IP = StringReplace(GUICtrlRead($Input1), ".", "_")
    If GUICtrlRead($Input3) = "" Then
    Global $logfile = $IP & ".txt"
    Else
    Global $logfile = GUICtrlRead($Input3)
    EndIf

    Local $IPAdresse = GUICTrlRead($Input1)
    $ping = Ping($IPAdresse, 1800)
    _FileWriteLog($logfile, '----- ' & 'STARTED' & ' -----')
    _FileWriteLog($logfile, $IPAdresse & ' | ' & $ping)
    $pingCopy = $ping

    AdlibEnable('_Zyklus', GUICtrlRead($Input2 *1000))
    GUICtrlSetState($Button1, $GUI_DISABLE)
    GUICtrlSetState($Button2, $GUI_ENABLE)
    GUICtrlSetState($Button3, $GUI_DISABLE)
    GUICtrlSetState($Button4, $GUI_DISABLE)
    GUICtrlSetState($Input1, $GUI_DISABLE)
    GUICtrlSetState($Input2, $GUI_DISABLE)
    GUICtrlSetState($Input3, $GUI_DISABLE)
    Else
    MsgBox(16,"Missing Input","Be sure to set the host to ping and an intervall!")
    EndIf
    EndFunc

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

    Func Button2Click()
    _FileWriteLog($logfile, '----- ' & 'STOPPED' & ' -----')
    $stopped = 2
    AdlibDisable()
    GUICtrlSetState($Button1, $GUI_ENABLE)
    GUICtrlSetState($Button2, $GUI_DISABLE)
    GUICtrlSetState($Button3, $GUI_ENABLE)
    GUICtrlSetState($Button4, $GUI_ENABLE)
    GUICtrlSetState($Input1, $GUI_ENABLE)
    GUICtrlSetState($Input2, $GUI_ENABLE)
    GUICtrlSetState($Input3, $GUI_ENABLE)
    EndFunc

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

    Func _Zyklus()
    Local $IPAdresse = GUICTrlRead($Input1)
    $ping = Ping($IPAdresse)
    $stopped = 1
    If $ping <> $pingCopy Then _FileWriteLog($logfile, $IPAdresse & ' | ' & $ping)
    $pingCopy = $ping
    EndFunc

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

    Func Form1_1Close()
    If $stopped = 1 Then
    _FileWriteLog($logfile, '----- ' & 'STOPPED' & ' -----')
    Else

    EndIf

    Exit
    EndFunc

    [/autoit]