Wecker über Touchscreen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich habe vor unter anderem einen Wecker über mein Touchscreen Panel zu steuern!

    Dieser sollte auch eine Verbleibende Zeit anzeigen!
    Ich habe schon an einem Python Programm gebastelt:

    allerdings stimmt die Berechnung der Uhrzeit nicht und ich denke es gibt bestimmt noch eine bessere Lösung, auch da es mit dem Übergang von Monat zu Monat und Jahr zu Jahr Probleme geben wird!

    Bitte und eure mithilfe würde gerne mehr mit Python lernen!


    Danke im Vorraus!

  • Ich habe mein Problem noch immer nicht im griff =(

    Der Wecker an sich wäre eigentlich nicht das Problem das würde ich per:

    Code
    timenow = time.localtime()
    ajahr = timenow.tm_year
    amonat = timenow.tm_mon
    atag = timenow.tm_mday
    astunde = 5
    aminute = 10
    timealarm = time.struct_time((ajahr, amonat, atag, astunde, aminute, 0, 0, 0, 0))
    if timenow == timealarm:
        ALARMSCRIPT

    Das Problem liegt beim Contdown:

    Es muss doch eine Einfache Vergleichsoperation in Python geben :huh:

  • Hallöchen,

    hmm ... Du hast doch die Sekunden seit 1.1.1970 ... damit kannst Du doch prima rechnen.
    Einfach z.B. 3600 dazu addieren und schon hast Du den Zeitwert für die aktuelle Uhrzeit plus eine Stunde.
    Du kannst ein Zieldatum (z.B. 31.12.2013 23:59.59) in den Timestamp umwandeln und dann von jetzt bis dahin durch einfaches subtrahieren die Sekunden, Stunden, Tage .. ausrechnen.
    Mit integer zu rechnen ist doch das komfortabelste überhaupt. Du brauchst keine Schaltjahre berücksichtigen, keine Sommer-/Winterzeit ... das nimmt Dir alles die Timelib ab.

    Oder hab ich bei Deinem Anliegen irgendwas nicht kapiert?

    cheers,
    -ds-

  • Hi,

    vielen Dank für deine Tipps habs jetz mal überarbeitet!

    ich verstehe nur nicht warum die verbleibende Zeit um 01:01 Std. falsch ausgegeben wird :wallbash:

    Und wie kann ich das Problem mit dem Monats/Jahresübergang lösen. Es sollte ja wenn ich zum Beispiel am 31.12.2013 um 22:00 Uhr auf die verbleibende Zeit schau noch 07:00 Std. anzeigen.

    Hoffe ihr versteht mein anliegen :)

    Einmal editiert, zuletzt von maximilian.ebel (21. Dezember 2013 um 17:09)

  • Hi maximilian,

    hmm - ich kenne jetzt python nicht. Aber ich habe das "Problem" mal in "C" dagestellt. Funktioniert einwandfrei.

    Spoiler anzeigen


    #define _XOPEN_SOURCE
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>

    main()
    {

    struct tm alarm_time;
    struct tm query_time;

    time_t sec_alarmtime;
    time_t sec_querytime;
    time_t sec_difftime;

    memset(&query_time, 0, sizeof(struct tm));
    memset(&alarm_time, 0, sizeof(struct tm));

    strptime("2013-12-31 22:00:00", "%Y-%m-%d %H:%M:%S", &query_time);
    strptime("2014-1-1 5:00:00", "%Y-%m-%d %H:%M:%S", &alarm_time);

    sec_alarmtime = mktime( &alarm_time );
    sec_querytime = mktime( &query_time );

    sec_difftime = sec_alarmtime - sec_querytime;

    printf("Seconds: %ld, hours: %ld\n", sec_difftime, (sec_difftime/3600) );

    exit(0);
    }


    Bei Dir könnte ich mir vorstellen, dass eine der Funktionen localtime() verwendet, eine andere gmtime(). Darauf deutet zumindest die eine Minute beim Differenzbetrag hin. Also rechnet er schon mal ;)

    cheers,
    -ds-

  • Hö, ich verwende doch kein gmtime()... :s

    Meine größtes Problem ist das ich die Weckzeit nicht manuell eingebe!
    Das Programm muss sich die nächste Weckzeit selbst berechnen ich aktiviere sie ja lediglich mit einem Button deshalb das Problem mit dem Monatsübergang..

    Um es euch vil. besser vorstellen zu können...

    Im Anhang ein Screenshot!


  • Hö, ich verwende doch kein gmtime()... :s

    Meine größtes Problem ist das ich die Weckzeit nicht manuell eingebe!
    Das Programm muss sich die nächste Weckzeit selbst berechnen ich aktiviere sie ja lediglich mit einem Button deshalb das Problem mit dem Monatsübergang...

    Hi,

    Du nicht, aber evtl. eine Deiner Python-Funktionen?
    Also ich bin mir ziemlich sicher, dass das ein Problem mit einer Einstellung der Timezone ist.

    Und das mit den weckzeiten ist doch auch kein Problem - immer 8 * 3600 (=8 Std) dazu addieren.

    Und mit dem Monatsübergang sehe ich auch kein Problem. Welches siehst Du da?
    In diesem C-Beispiel ist auch mal ein Übergang in ein Schaltjahr drin (2014 ist übrigens kein Schaltjahr, erst 2016 wieder):

    Spoiler anzeigen

    #define _XOPEN_SOURCE
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>

    main()
    {

    struct tm alarm_time;
    struct tm query_time;

    time_t sec_alarmtime;
    time_t sec_querytime;
    time_t sec_difftime;

    memset(&query_time, 0, sizeof(struct tm));
    memset(&alarm_time, 0, sizeof(struct tm));

    strptime("2013-12-31 22:00:00", "%Y-%m-%d %H:%M:%S", &query_time);
    strptime("2014-1-1 5:00:00", "%Y-%m-%d %H:%M:%S", &alarm_time);

    sec_alarmtime = mktime( &alarm_time );
    sec_querytime = mktime( &query_time );

    sec_difftime = sec_alarmtime - sec_querytime;

    printf("Seconds: %ld, hours: %ld\n", sec_difftime, (sec_difftime/3600) );


    sec_alarmtime += 58*(24*3600);
    printf("58 Tage später: %s\n", ctime(&sec_alarmtime) );

    sec_alarmtime += 24*3600;
    printf("1 Tag später: %s\n", ctime(&sec_alarmtime) );

    sec_alarmtime += 24*3600;
    printf("2 Tage später: %s\n", ctime(&sec_alarmtime) );

    sec_alarmtime += 365*(24*3600);
    sec_alarmtime += 364*(24*3600);
    printf("1 Jahr 364 Tage später: %s\n", ctime(&sec_alarmtime) );


    exit(0);
    }

    Das C-Programm kannst Du übrigens mit copy/paste auf Deinen RPi übertragen und dort mit

    Zitat


    cc -o versuch versuch.c -lrt

    übersetzen.

    cu,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!