[erledigt] cStatus und TimerChange Probleme

  • Das machte mich etwas irre, bis ich das Problem eingrenzen konnte.

    Ich habe einen Status Handler im Plugin. Eigentlich ziemlich simpel:

    Code
    class StatusHandler : public cStatus {
        public:
            StatusHandler();
            ~StatusHandler() override;
    
        protected:
            void TimerChange(const cTimer *Timer, eTimerChange Change) override;
    };
    Code
    void StatusHandler::TimerChange(const cTimer* Timer, eTimerChange Change) {
        if (Change == eTimerChange::tcAdd) {
            fprintf(stderr, "Start Timer day, starttime = %ld, %ld\n", Timer->Day(), Timer->StartTime());
            fflush(stderr);
        } else if (Change == eTimerChange::tcDel) {
            fprintf(stderr, "Stop Timer day, starttime = %ld, %ld\n", Timer->Day(), Timer->StartTime());
            fflush(stderr);
        }
    }

    Mit einer leeren Timers.conf erstelle ich mit dem roten Button einen Timer. Wechsel in das Timer-Menu und lösche den Timer mit dem gelben Button.

    Die Ausgabe aus dem StatusHandler (die Timestamps habe ich schon konvertiert):

    Code
    Start Timer day, starttime = 1777932000, 1777993980
          2026-05-04 22:00:00.000000 +00:00, 2026-05-05 15:13:00.000000 +00:00
    
    Stop Timer day, starttime = 1778018400, 1778080380
          2026-05-05 22:00:00.000000 +00:00, 2026-05-06 15:13:00.000000 +00:00

    Es gibt nach dem Add nur einen einzigen Timer und genau den lösche ich dann auch. Aber warum unterscheiden sich beide Ausgaben genau um einen Tag? =O
    Probleme mit der Zeitzone hätte ich noch verstanden, aber 24 Stunden Differenz ist mir völlig unklar.

    Woher kann das kommen? Ich kann die timestamps im Falle tcDel manuell um 24 Stunden schieben, aber so richtig überzeugend ist das nicht.

    Edit:
    Ich habe die Ausgaben in das Status-Plugin gepackt und alle Plugins, die irgendwas mit Timern machen disabled.
    Und auch da ist das Delete um 24 Stunden verschoben. Ein Mysterium....

    Edited once, last by Zabrimus (May 5, 2026 at 2:20 PM).

  • Blöde Idee womöglich, aber Sommerzeitproblem? Sind genau zwei Stunden von 22 Uhr zum Tagesüberlauf.

    VDR zwei drei
    • VDR 01 (Server): VDR 2.8.1 - 4 x TT Budget S2-3200
      Plugins: [channellists - control - epgsearch - live - markad - streamdev-server - tvscraper]
    • VDR 02 (Client): VDR 2.8.1 - 1 x TT Premium S2-6400 (HDMI an TV), 1 x softhddevice (HDMI an TV); TV Grundig 40 VLE 8160 SL; TFT-Display Origen AE 16T
      Plugins: [channellists - control - dvbhddevice - epgsync - graphtftng - iptv - osdteletext - skinnopacity - softhddevice - svdrpservice - tvscraper]
  • Gib die Zeit doch mal mit der VDR Funktion TimeToString() aus, dann ist es auch gleich in der richtigen Zeitzone

    Gute Idee, aber....

    Code
    Start Timer day, starttime = 1778018400, 1778018580, 1:1:2026-05-06:0003:0050:50:99:Xatar - Ein Leben ist nicht genug (1/3):
    Stop Timer day, starttime = 1778104800, 1778104980, 1:1:2026-05-07:0003:0050:50:99:Xatar - Ein Leben ist nicht genug (1/3):

    Auch der ToText ändert sich.

    Ich denke, ich habe es gefunden. Der gelbe Löschbutton ruft auch cTimer::Skip() auf

    Code
    void cTimer::Skip(void)
    {
      cMutexLock MutexLock(&mutex);
      day = IncDay(SetTime(VpsTime(), 0), 1);
      startTime = 0;
      SetEvent(NULL);
    }

    Und genau hier wird tatsächlich 1 Tag addiert. Die Idee mit 24 Stunden abziehen ist gar nicht mehr so abwegig. Allerdings fühlt sich das immer noch falsch an. Ich muss da wohl etwas umbauen und nach einer besseren Lösung suchen.

  • Zabrimus May 5, 2026 at 7:20 PM

    Changed the title of the thread from “cStatus und TimerChange Probleme” to “[erledigt] cStatus und TimerChange Probleme”.
  • Vielleicht kann ja Klaus sagen, warum in der skip-Methode der Tag unbedingt um 1 weiter gedreht werden muss?
    Oder ist dir das eh klar (mir nämlich nicht)?

    MyVDR: yaVDR-Ansible (Ubuntu 20, VDR 2.4.8) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr (tvm) - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 21 - xstream
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

  • Kannst du bitte mal eine timers.conf-Zeile posten, die du verwendest? Nur damit ich genau die gleichen Voraussetzungen habe.

    Ich habe einfach einen beliebigen Timer gesetzt (aus dem Programm heraus) und den dann direkt im Timer Menu wieder gelöscht. Die Auswahl ist dabei eher rein zufällig.

    Code
    1:C-1-1051-10301:2026-05-07:0458:0540:50:99:Plusminus:

    Das ist DVB-C und der Kanal ist "Das Erste".

  • Ich hab mir das jetzt mal genauer angeschaut.
    Vor dem Löschen eines Timers wird Timer->Skip() aufgerufen, damit eine eventuell laufende Aufnahme mit diesem Timer beendet wird. Das ist vielleicht ein Relikt und sollte auch anders gehen, indem direkt cRecordControls::Stop(Timer) aufgerufen wird.

    Probier bitte mal folgendes:

    Damit sollte es für deinen Ablauf OK sein. Falls du das bestätigen kannst, werde ich auch alle anderen Stellen noch entsprechend ändern.

  • Inwiefern ist das Problem inzwischen erledigt?

    Erledigt ist wohl der falsche Begriff. Ich hatte nach der Ursache gesucht, weil mir völlig unklar war, was ich da eigentlich sehe und warum es passiert. Die Fehlersuche hatte auf meinem Code beschränkt. Erledigt ist das in dem Sinne, daß ich jetzt verstanden zu haben glaube, welche Ursache vorliegt und ich für mein Problem eine andere Lösung suchen muss.

    Bisher habe ich die Timervergleiche - wie im VDR - implementiert, das funktioniert aber hier bei dem Löschen eines Timers gar nicht. Glücklicherweise ist die Timer Id aber noch identisch und die kann ich für mein Problem verwenden, da ich beim Start des VDRs erstmal die Timerliste komplett lese.

    Dann kam noch der Gedanke, daß selbst ein Fix sich nur auf die aktuelle Version des VDR beziehen kann und damit alle älteren Versionen das Problem weiter vorhanden sein wird.

  • Es wäre nett, wenn einige drüberschauen und vielleicht sogar explizit testen würden.

    Es läuft alles wie erwartet. Aber natürlich bedeutet das nicht, das ich etwas nicht doch übersehen haben könnte. Aber auf jeden Fall gibt es keine neuen Probleme - zumindest bei mir ;)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!