Ausführen zwischen zwei Zeiten

  • Hey!

    Ich möchte ein Autoit script ausführen, welches eine XML mit an und ausschaltzeit für ein Monitor ausliest.
    in der XML habe ich z.B. on=06:00 und off 22:00, somit soll mein Monitor um 06:00Uhr eingeschaltet werden und um 22:00 Uhr dementsprechend ausgeschaltet. Dies soll unter der Aufgabenplanung eingerichtet sein und sich alle 30min starten. Nun wird die XML eingelesen und die zeiten Geprüft, ob es grade die Uhrzeit ist. Leider weiß ich nicht so recht wie ich das machen soll.. Zurzeit hatte ich das Skript durchgehend im hintergrund laufen mit einer While schleife und dann eben "If $OnTime == @HOUR & ":" & @MIN Then _MonitorOn()" "If $OffTime == @HOUR & ":" & @MIN Then _MonitorOff()" und danach immer noch ein Sleep(1000), jedoch möchte ich das Programm nicht durchgehend laufen haben sondern wie gesagt nur jede Std als Aufgabe und es soll prüfen ob die Zeit wo es Startet eine Zeit zwischen der An- und ausschaltzeit ist.

    Danke für die Hilfe
    Toto2468

  • Naja, damit es prüfen kann welche zeit gerade ist muss es doch laufen oder?also muss es die ganze zeit im hintergrund laufen, damit es das prüfen kann. du könntest natürlich die Sleep () - Zeit höher setzen, aber ich weiß nicht ob das so viel bringen würde...
    Oder habe ich etwas bei deiner frage falsch verstanden? Es prüft die zeiten und geht an und aus oder? Und du möchtest nur wissen wie es geht das es nicht die ganze zeit im hintergrund läuft?

    Zitat

    "Some people feel the rain, others just get wet." - Bob Marley

  • Naja ich möchte das Script in einer Geplanten Aufgabe von Windows laufen lassen, somit wird das Script alle 30min ausgeführt.

    Meine erste überlegung war :

    [autoit]


    $OnTime="15:00"
    $OffTime="22:00"

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

    $sysTime=@HOUR & ":" & @MIN

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

    MsgBox(4096, "", $sysTime)

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

    If $sysTime>$OnTime & $sysTime<$OffTime Then
    MsgBox(4096, "", "Display an! " & $sysTime)

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

    else
    MsgBox(4096, "", "Display aus! " & $sysTime)
    EndIf

    [/autoit]

    leider stimmt was an der If Bedingung noch nicht. Aber vom Prinzip würde er dieses Programm durch die Aufgabenplanung alle 30min starten, nachschauen wie spät es ist und dann ggf. Monitor an oder ausschalten

  • AdlibRegister hiesst der Befehl der du eventuell brauchen könntest um das script permanent laufen zu lassen aber mit der Aufgabenplanung geht dass natürlich auch

    Was ich mich jedoch frage ist wie du den Monitor per Script ausschalten willst?

    Bezüglich der Bedingung der was willst du mit dem ":" dass braucht doch nur der Mensch zum besser lesen

    If $sysTime>$OnTime & $sysTime<$OffTime Then

    Rein mathematisch ist 12:30 grösser als 12:50 ? wobei gesagt werden muss das beide werte als String behandelt werden.
    Ich denke da liegt der Fehler.


    /edit

    [autoit]

    $OnHour = 14
    $OffHour = 22

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

    Select
    Case @HOUR >= $OnHour And @HOUR < $OffHour
    MsgBox(4096, "", "Display an! ")
    Case Else
    MsgBox(4096, "", "Display aus! ")
    EndSelect

    [/autoit]

    Einmal editiert, zuletzt von BiNu (22. Januar 2014 um 14:49)

  • Also der Fehler war das ist ein "AND" statt "&" brauchte. den Doppelpunkt brauch ich eig nicht, jedoch werden die Zahlen aus einer Generierten XML gelesen und für den Kunden ist es mit dem Doppelpunkt einfacher zu lesen.

    [autoit]


    If $sysTime>=$OnTime AND $sysTime<=$OffTime Then
    MsgBox(4096, "", "Display an! " & $sysTime)

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

    else
    MsgBox(4096, "", "Display aus! " & $sysTime)
    EndIf

    [/autoit]

    So sieht es zur zeit aus, scheint auch zu funktionieren, jedoch bin ich mir nicht sicher wie Autoit wie du schon sagtest den Doppelpunkt interpretiert da es so ja zb "If 14:50>=14:00" heißt wäre es gut zu wissen ob er erkennt das es eine Zeitangabe ist oder ob er den Doppelpunkt ignoriert und 1450 draus macht oder wie auch immer.

    Desweiteren möchte ich dort auch Wochentage einbeziehen:

    [autoit]


    $OnTime="14:35"
    $OffTime="14:38"
    $offDay="4"

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

    $sysTime=@HOUR & ":" & @MIN

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

    MsgBox(4096, "", $sysTime & _WeekDay())

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

    If $sysTime>=$OnTime AND $sysTime<=$OffTime AND Not @WDAY=$offDay Then
    MsgBox(4096, "", "Display an! " & $sysTime)

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

    else
    MsgBox(4096, "", "Display aus! " & $sysTime)
    EndIf

    [/autoit]

    dies funktioniert auch noch nicht so richtig

  • Wieso nur willst du Strings vergleichen wenn es doch int werte sind?

    Der User kann trotzdem ein ":" eintippen du kannst das ja intern weg schnipseln

    und bei meinem Beispiel kannst du ja problemlos weitere Bedingungen hinzufügen z.b. Minuten oder Wochentage.

  • also so funkitoniert es ja anscheinend:

    [autoit]


    $OnTime="14:35"
    $OffTime="22:38"
    $offDay="DO"

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

    $sysTime=@HOUR & ":" & @MIN

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

    MsgBox(4096, "", $sysTime & _WeekDay())

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

    If $sysTime>=$OnTime AND $sysTime<=$OffTime AND _WeekDay()<>$offDay Then
    MsgBox(4096, "", "Display an! Heute ist " & _WeekDay & )

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

    else
    MsgBox(4096, "", "Display aus! " & $sysTime)
    EndIf

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

    Func _WeekDay()
    Switch @WDAY
    Case 1
    Return "SO"
    Case 2
    Return "MO"
    Case 3
    Return "DI"
    Case 4
    Return "MI"
    Case 5
    Return "DO"
    Case 6
    Return "FR"
    Case 7
    Return "SA"
    Case Else
    MsgBox(4096, "", "- Wochentag konnte nicht ermittelt werden. - Exit")
    Exit
    EndSwitch
    EndFunc ;==>_WeekDay

    [/autoit]

    nur wie vergleicht er die Werte? Als Strings? warum funktioniert es dann?


    EDIT:

    Nun sehe ich schon ein Problem: Wenn ich mein Monitor um 22 Uhr Anschalten will und es um 16 Uhr ausgehen soll funktioniert dies nicht, da die OnTime größer als die Systemzeit ist.

    Einmal editiert, zuletzt von toto2468 (22. Januar 2014 um 15:10)

  • Strings vergleichen mit = oder <> macht Sinn weil man damit herausfindet ob der String identisch ist oder nicht aber "ab" > "aa" macht nicht viel Sinn.

    apfel < birne ?

    /edit

    [autoit]

    #include <Array.au3>

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

    $UserInputON = "22:00"
    $UserInputOFF = "16:00"

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

    $aUserInputOn = StringSplit($UserInputON, ":", 1)
    $aUserInputOFF = StringSplit($UserInputOFF, ":", 1)

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

    ;_ArrayDisplay($aUserInputOn)
    ;_ArrayDisplay($aUserInputOff)

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

    $OnHour = $aUserInputOn[1]
    $OffHour = $aUserInputOFF[1]

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

    Select
    Case @HOUR >= $OnHour or @HOUR < $OffHour
    MsgBox(4096, "", "Display an! ")
    Case Else
    MsgBox(4096, "", "Display aus! ")
    EndSelect

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

    Exit

    [/autoit]

    so?

    2 Mal editiert, zuletzt von BiNu (22. Januar 2014 um 15:37)

  • Okay aber selbst wenn ich die 1400 und 2200 nehme, bleibt das Problem damit wenn ich mein Display Nachts von 22:00 bis 14:00 Uhr laufen haben möchte

    Edit:

    Durch das OR werden nun aber auch zeiten wie 16:00 Uhr an und 18:00 Uhr aus wieder als Korrekt dargestellt

  • Gibt es denn die Möglichkeit zwischen zwei zahlen zu schauen ob die jetzige Uhrzeit wahr ist?

    Denn wenn es 1500 UHr ist dann liegt dies Zwischen 1400 (An) und 2200(Aus) und wenn man definieren kann das er ab 2400 wieder bei 0 beginnen soll wäre zb 1000 auch zwischen 2200 und 1400.. gibt es da denn eine Möglichkeit?

  • Jede Zeit liegt zwischen 2 andern Zeiten dass ist ja irgendwie logisch ne.

    [autoit]

    $OnHour = 1 ;moegen um 1:00
    $OffHour = 2 ;bis morgen um 2:00

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

    ;$OnHour = 2 ;morgen um 2:00
    ;$OffHour = 1 ;bis nächsten moregn um 1:00

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

    If $OnHour < $OffHour Then
    Select
    Case @HOUR >= $OnHour And @HOUR < $OffHour
    MsgBox(4096, "", "Display an! ")
    Case Else
    MsgBox(4096, "", "Display aus! ")
    EndSelect
    EndIf

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

    If $OnHour > $OffHour Then
    Select
    Case @HOUR >= $OnHour Or @HOUR < $OffHour
    MsgBox(4096, "", "Display an! ")
    Case Else
    MsgBox(4096, "", "Display aus! ")
    EndSelect
    EndIf

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

    Exit

    [/autoit]
  • ;)

    [autoit]


    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    ;~ Das Beispiel aus der Hilfe !
    Global $msg
    Switch @HOUR
    Case 6 To 11
    $msg = "Guten Morgen"
    Case 12 To 17
    $msg = "Guten Tag"
    Case 18 To 21
    $msg = "Guten Abend"
    Case Else
    $msg = "Warum bist du noch wach?"
    EndSwitch

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

    MsgBox(0, Default, $msg)

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

    ;~ Den Wochentag als Zweizeiler !
    ;~ Array neue Schreibweise !

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

    ;~ Global $aWeekDay[] = ['', 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa']
    ;~ MsgBox(0, Default, $msg & @CRLF & 'Heute ist ' & $aWeekDay[@WDAY])

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

    ;~ oder

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

    Global $aWeekDay[] = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa']
    MsgBox(0, Default, 'Heute ist ' & $aWeekDay[@WDAY - 1])

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

    ;~ Weitere Zeitrechnungen mit _NowCalc und #include <Date.au3> !

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

    #include <Date.au3>
    MsgBox(0, '', 'Es ist jetzt ' & _NowTime() & ' Uhr.')

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

    MsgBox(0, Default, $msg & @CRLF & 'Heute ist ' & $aWeekDay[@WDAY - 1] _
    & @CRLF & 'Es ist jetzt ' & _NowTime() & ' Uhr.')
    ; Ende

    [/autoit]