Erkennen von Wakeup durch die RTC

  • Hallo,


    ich hatte bisher zum Unterscheiden, ob der VDR durch die RTC oder Powerswitch gestartet wurde, für das CEC Plugin folgenden Code im Einsatz:

    Code
    if (Setup.NextWakeupTime > 0) {
            // 600 comes from vdr's MANUALSTART constant in vdr.c
            if (abs(Setup.NextWakeupTime - time(NULL)) < 600) {
                mStartManually = false;
            }
        }


    D.h, wenn man den VDR 5 Minuten vor einem Timer manuell startet, so kann die Software den Start nicht unterscheiden, was dann etwas doof ist, wenn man nicht mehr an den Aufnahmetimer gedacht hat und sich dann wundert warum der VDR den Verstärker nicht einschaltet ?(


    Ich habe jetzt mal etwas gegraben und ein cat /proc/driver/rtc bringt da folgenden Output:
    root@vdr:~> cat /proc/driver/rtc
    rtc_time : 12:17:16
    rtc_date : 2016-04-24
    alrm_time : 11:05:00
    alrm_date : 2016-04-25
    alarm_IRQ : no
    alrm_pending : no
    update IRQ enabled : no
    periodic IRQ enabled : no
    periodic IRQ frequency : 1024
    max user IRQ frequency : 64
    24hr : yes
    periodic_IRQ : no
    update_IRQ : no
    HPET_emulated : no
    BCD : yes
    DST_enable : no
    periodic_freq : 1024
    batt_status : okay


    Wenn mein VDR per Timer gestartet wurde steht alarm_IRQ auf yes, solange bis der Alarm mittels echo "0" > /sys/class/rtc/rtc0/wakealarm zurückgesetzt wurde.


    Ich habe mal ein Testprogramm angehängt, mit dem man das Verhalten testen kann (Compilieren mittels gcc -O2 -Wall rtcwakeup.c -o rtcwakeup). Ich würde den Ansatz gerne in meinem CEC-Plugin verwenden. Gibt es da Meinungen zu dem Ansatz?

    Dateien

    VDR 2.6.5 Kodi 18.6-Leia
    Debian GNU/Linux 12, Thermaltake DH102, ASUS PRIME N100I-D, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.3, cecremote 1.5.0, osd2web 0.3.2, softhddevice v2.0.6-GIT97e825d

  • Ich mache das seit Jahren mit einem simplem Bash Script


    Mir geht es da in erster Linie erst mal um den Ansatz. Und da der Code halt in meinem Plugin Verwendung finden soll, habe ich ein Testprogramm in C geschrieben. Wenn der Ansatz bei dir so schon seit Jahren mit Bash funktioniert könnte das Konzept dann wohl auch in meinem Plugin funktionieren ;D


    Interessant wären da aber auch noch Meinungen/Erfahrungsberichte von nicht-PC Hardware (RPI/Odroid/Banana Pi etc).

    VDR 2.6.5 Kodi 18.6-Leia
    Debian GNU/Linux 12, Thermaltake DH102, ASUS PRIME N100I-D, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.3, cecremote 1.5.0, osd2web 0.3.2, softhddevice v2.0.6-GIT97e825d

  • Sofern der cec-client installiert ist, funktioniert mein Konzept auf jeder Plattform.


    Ich habe das bei mir so:


    - Wenn der VDR PC heruntergefahren wird, geht auch der TV aus.
    - Wenn der VDR PC neu gestartet wird, bleibt der TV an.
    - Wenn der VDR PC via Timer gestartet wird, bleibt der TV aus.
    - Wenn der VDR PC via Power Button, oder Fernbedienung, gestartet wird und der VDR und X gestartet ist, geht auch der TV an.

  • Viele ARM-Geräte haben keine integrierte RTC (z.B. die Raspberry Pi, auch wenn man die prinzipiell nachrüsten kann) und nicht alle können über ihre RTC aufwachen - bei meinem Cubietruck wird z.B. /sys/class/rtc/rtc0/wakeup nicht angelegt.


    Sofern der cec-client installiert ist, funktioniert mein Konzept auf jeder Plattform.

    Wie löst du das? Schreibst du den Aufwachzeitpunkt in eine Datei und vergleichst dann beim Start die Zeiten oder hast du da eine elegantere Möglichkeit gefunden?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Zitat

    Wie löst du das? Schreibst du den Aufwachzeitpunkt in eine Datei und vergleichst dann beim Start die Zeiten oder hast du da eine elegantere Möglichkeit gefunden?


    Ich mache das hier so. (Beim raspberry)
    Die Datei mit der Unixtime habe ich im Video Verzeichnis abgelegt. Bei einem WakeUp schaue ich mir diese Datei an und vergleiche diese mit der aktuellen Zeit. Geht aber sicherlich auch schicker. ;)

  • gibt dafür schon entsprechende Scripte,


    Und wie funktionieren diese Scripte bei Gen2VDR im Prinzip? Gehen die auch über das /proc filesystem?

    VDR 2.6.5 Kodi 18.6-Leia
    Debian GNU/Linux 12, Thermaltake DH102, ASUS PRIME N100I-D, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.3, cecremote 1.5.0, osd2web 0.3.2, softhddevice v2.0.6-GIT97e825d

  • Viele ARM-Geräte haben keine integrierte RTC (z.B. die Raspberry Pi, auch wenn man die prinzipiell nachrüsten kann) und nicht alle können über ihre RTC aufwachen


    Das habe ich mir fast schon so gedacht. Deswegen habe ich auch per Config-Option eine Auswahl zwischen der alte 5-Minuten Heuristik und RTC Erkennung eingebaut.

    VDR 2.6.5 Kodi 18.6-Leia
    Debian GNU/Linux 12, Thermaltake DH102, ASUS PRIME N100I-D, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.3, cecremote 1.5.0, osd2web 0.3.2, softhddevice v2.0.6-GIT97e825d

  • Es sind mehrere Scripte, aber die eigentlich Abfrage, erfolgt in der checkstart.sh.



    Ich habe das Script um diese Zeilen erweitert, die ich dann an anderer Stelle für den cec-client verwende:


  • Es sind mehrere Scripte, aber die eigentlich Abfrage, erfolgt in der checkstart.sh.


    Das Script macht das ähnlich, wie meine alte Lösung und hat damit das selbe Problem. Wenn der VDR weniger als 500 Sekunden vor dem Timerstart per Powerswitch eingeschaltet wird, bleibt der TV aus weil die Heuristik jetzt auf Timerstart steht :unsch

    VDR 2.6.5 Kodi 18.6-Leia
    Debian GNU/Linux 12, Thermaltake DH102, ASUS PRIME N100I-D, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.3, cecremote 1.5.0, osd2web 0.3.2, softhddevice v2.0.6-GIT97e825d

  • Nun, wen es rein nur ums Einschalten geht, kannst Du das ja mit einem Einzeiler lösen:


    Code
    [ "$(grep alarm_IRQ /proc/driver/rtc |awk '{print $3}')" == no ] && echo "on 0"  | cec-client -t p -p 1 -d 1 -s

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!