Mit Uhrzeiten arbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dnwalker
User
Beiträge: 3
Registriert: Donnerstag 1. Januar 2015, 17:27

Hallo,

ich bin leider ein totaler Anfänger im Bereich Python - versuche mich aber da seit 2 Tagen einzuarbeiten.

Soweit funktioniert ja schon so das ein oder andere aber jetzt möchte ich abhängig von der Uhrzeit Befehle ausführen.

Ich Grunde kommt es in den Bereich einer Zeitschaltuhr. Da gibt es eine Menge Beiträge im Netz aber für mich keine verständliche Lösung.

Man will den Code ja auch verstehen und nicht nur abschreiben.

Mit den Modulen "time" und "datetime" habe ich so einige Versuche unternommen aber so richtig komme ich da nicht mir klar.

Eine Systemzeit als String bekomme ich hin - aber das war es dann auch schon fast.

Bei jeder 2. Anfrage im Netz wird man auf die Beschreibung der Module verwiesen - fragt man aber dann genauer nach kommt es oft vor das die Verweise selber nicht so den richtigen Durchblick haben.

Somit hoffe ich hier auf verständliche Hilfe.

Meine Frage wäre also wie kann man z.B. eine Schleife möglichst einfach erstellen deren Befehle täglich nur zwischen 14:00 und 15:30 abgearbeitet werden.

Problematisch wird die Sache ja auch wenn die Schaltzeit über 00:00 Uhr reicht also bei Datumswechsel.

Also wenn Ihr mir da etwas mehr an Infos geben könntet wäre das klasse.

Gruß
dnwalker
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Hallo dnwalker,

Und willkommen im Python Forum! datetime und time sind schon Mal die richtigen Module um eine kleine Lösung zusammen zu basteln.

Code: Alles auswählen

 from datetime import datetime, timedelta
import time

def execute_task():
    '''Befehle zum abarbeiten.'''
    print "Time to work!"

while True:
    now =  datetime.now()
    later_than_14_00 = now.hour >= 14
    not_yet_15_30 = now.hour < 15  or (now.hour == 15 and now.minute < 30)
    if later_than_14_00 and not_yet_15_30:
        execute_task()
    # Eine Minute warten.
    time.sleep(60)





Oder du nimmst gleich einen ordentlichen Scheduler:
https://github.com/dbader/schedule
BlackJack

@dnwalker: Nur neu bei Python oder Programmieren allgemein? Dann wären zwei Tage nämlich relativ wenig. Wo liegen denn die konkreten Probleme?

@Boa: Kein gutes Beispiel das alles von Hand zu machen wo man doch die Exemplare von Datentypen aus dem `datetime`-Modul vergleichen kann. Das importierte `timedelta` wird nirgends verwendet.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Boa
Weshalb vergleichst Du händisch? Ich würde das eher so machen:

Code: Alles auswählen

current = datetime.dateime.now().time()
if datetime.time(14, 0) <= current <= datetime.time(15, 30):
    print 'match'
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
dnwalker
User
Beiträge: 3
Registriert: Donnerstag 1. Januar 2015, 17:27

Hallo,

danke Euch schon mal für die Zeilen - werde ich gleich testen.

Ich bin schon etwas älter und habe vor x-Jahren genauer in den 80er mal mit Basic begonnen und dann auch mal Visual Basic.

Aber da hatte ich weniger Anwendungen. Da ich hauptsächlich Elektroniker bin liegt mein Beschäftigungsbereich mehr bei den Bausteinen von Atmel und deren Programmierung.

Da ich hier die meisten Probleme mit Bascom löse reichen da meine Fähigkeiten.

Jetzt habe ich aber das Problem meine Werkstatt abzusichern. In den Räumen hängt noch ein AVR-Net IO an der Wand den ich vor einiger Zeit dort schon für diesen Zweck montiert habe.

An dem Teil habe ich Kontakte die wiederum an den Eingangstoren montiert sind und somit kann ich per Telnet sehen ob die Tore offen oder geschlossen sind.

Die Werkstatt ist Luftlinie etwa 200m von meinem Haus entfernt und per WLAN mit meinem Server im Keller verbunden.

Dieser Server fragt ständig per Telnet bei dem AVR-Net IO die Zustände der Kontakte ab. Das habe ich per Python schon hin bekommen.

Jetzt soll der Server abhängig von Uhrzeit und einigen anderen Bedingungen entscheiden ob bei offenen Toren nur ein Hinweis ausgegeben wird oder per SMS ein wirklicher Alarm ausgegeben wird.

Das ganze soll dann später mit mehreren AVR-Net Modulen erweitert werden da mein Haus auch abgesichert werden soll.

Also im Prinzip eine dezentrale Alarmanlage.

Aktuell läuft das ganze mit auf meinem Windows-Server. Da diese Funktion aber eventuell auf einen Raspberry Pi verlagert werden soll wollte ich das Script gleich in Python erstellen. Das läuft ja eben auf fast allen Betriebssystemen.

Ich hoffe ich habe das jetzt einigermaßen nachvollziehbar erklären können.

Gruß
dnwalker
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

mutetella hat geschrieben:@Boa
Weshalb vergleichst Du händisch? Ich würde das eher so machen:

Code: Alles auswählen

current = datetime.dateime.now().time()
if datetime.time(14, 0) <= current <= datetime.time(15, 30):
    print 'match'
mutetella
Ich hatte nicht vor einen Schönheitspreis für den Code abzuräumen, denn wenn es um eine elegante Lösung geht ist die Nutzung des Schedulers auf den ich verwiesen habe so oder so überlegen. Die Lösung mit datetime.time gefällt mir aber, werde ich mir merken. Ich hatte zuerst überlegt einfach datetime zu nehmen und die Stunden/Minuten/Sekunden/... manuell zu setzen. datetime.time hat ja praktischer Weise gar kein Jahr/Monat/Tag etc.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@dnwalker
Zur Inspiration für Dein Vorhaben kannst Du Dir ja mal die Vorgehensweise von Kentix ansehen...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten