Mal wieder ACPI

  • Hi. Ich habe folgendes Problem.
    Mein Rechner geht zur angegebenen Zeit einfach nicht an.
    ACPI usw. ist alles in Ordnung.
    Bei date schreibt er mir

    Code
    Mon Aug 23 19:33:13 CEST 2004


    Bei hwclock schreibt er mir

    Code
    Mon Aug 23 19:33:32 2004  -0.641345 seconds


    wenn ich ein

    Code
    echo "2004-08-23 19:35:00" > /proc/acpi/alarm

    mache, geht er nicht an
    mache ich aber ein :

    Code
    echo "2004-08-23 17:35:00" > /proc/acpi/alarm

    , dann geht er um 19:35 an.



    Was muss ich denn an dem Skript ändern, damit er zur gewünschten zeit angeht (2Stunden zurückrechnen) ???

  • Du hast wahrscheinlich die BIOS-Uhr auf UTC statt lokale Zeit eingestellt (ist auf Linux-only Systemen auch besser, also lass es ruhig so. Erspart eventuelles Theater mit der Zeitumstellung :) ), denn das sind momentan (!) genau diese 2 Stunden Unterschied.


    Dementsprechend muss dann auch die UTC-Zeit nach /proc/acpi/alarm geschrieben werden, denn ACPI weiß (offenbar) nicht, dass das BIOS auf UTC läuft und das BIOS kennt die aktuelle Zeitzone nicht ...


    Ersetze in setAlarm in der system Zeile mal das localtime durch gmtime, dann sollte es eigentlich klappen. gmtime rechnet die übergebene Zeit anhand der eingestellen Zeitzone + Winter-/Sommerzeit in UTC um.

  • Mmm. Erst einmal danke für die Erklärung. Habe das gemacht, was Du meinst (hoffentloch) :]

    Code
    sub setAlarm {
      my $Next = shift;
      setTime();
      dprint("Next event at ", strftime("%d.%m.%Y %H:%M:%S", localtime($Next)));
      dprint("Programming wakeup at ", strftime("%d.%m.%Y %H:%M:%S", localtime($Next-$STARTUPMARGIN)));
      system(sprintf("echo \"%s\" > %s", strftime("%Y-%m-%d %H:%M:%S", gmtime($Next-$STARTUPMARGIN)), $PROC_ALARM));


    aber leider kein Erfolg.
    Ich habe extra CEST als Zeit eingestellt, da ansonsten die epg-Zeit verkehrt angezeigt worden ist, oder die Uhrzeit eben falsch geht. Evtl. ist ja mein System aus diesem Grunde komplett falsch mit der Uhrzeit eingestellt.
    Ein hwclock --debug schreibt :


    Ansonsten kannst Du mir evtl. mal anhand eines Beispiels schreiben, wie Du die Zeiten stehen hast, dann ändere ich das ab

  • Moin moin,


    in einem anderen Thread wurde mal erwähnt, dass je nach Mainboard(BIOS), /proc/acpi/alarm wohl etwas "schwerhörig" ist und eine doppelte Aufforderung braucht. Das könnte dann obiges Verhalten erklären.
    Ändere doch versuchsweise mal mehr als nur die Stunde.


    mfG
    Carsten

  • Zitat

    Original von grandmasterb10
    Mmm. Erst einmal danke für die Erklärung. Habe das gemacht, was Du meinst (hoffentloch) :]

    Code
    sub setAlarm {
      my $Next = shift;
      setTime();
      dprint("Next event at ", strftime("%d.%m.%Y %H:%M:%S", localtime($Next)));
      dprint("Programming wakeup at ", strftime("%d.%m.%Y %H:%M:%S", localtime($Next-$STARTUPMARGIN)));
      system(sprintf("echo \"%s\" > %s", strftime("%Y-%m-%d %H:%M:%S", gmtime($Next-$STARTUPMARGIN)), $PROC_ALARM));


    Jup, so war's gemeint. Die Zeile war oben nicht vollständig, drum hab ich's nicht direkt gezeigt.


    Zitat

    Ein hwclock --debug schreibt :


    Sieht doch in Ordnung aus, ist bei mir genauso. BIOS Uhr ist wirklich auf UTC gestellt und das System läuft mit +2 Stunden.


    Habe das mit /proc/acpi/alarm gerade mal auf meinem VDR-PC (Shuttle SB52G2) getestet und wenn ich die Uhrzeit in UTC schreibe, dann wacht er "richtig" auf ... sofern denn die Uhrzeit mit hwclock --systohc --directisa beim Herunterfahren gespeichert wird. Ohne das --directisa kann man in /proc/driver/rtc beobachten, dass alarm_IRQ wieder auf "no" zurückgesetzt wird, so dass zwar die Weckzeit gespeichert ist, aber kein IRQ zum Wecken ausgelöst wird. :( Es soll aber vom Board abhängen, ob der Parameter benötigt wird oder nicht ... wenn er bei Dir schon einmal so aufgewacht ist, dann wird er wohl nicht benötigt. Kannst aber ja trotzdem mal gegenprüfen, ob nach dem echo $datum >/proc/acpi/alarm das alarm_IRQ überhaupt auf "yes" gesetzt wurde.


    Zum Rest des Skript kann ich so erstmal nix sagen, aber wenn es manuell klappt und das Skript selber auch funktioniert, dann sollte er mit der gmtime-Änderung auch zur richtigen Zeit aufwachen.

  • Zitat

    Original von grandmasterb10
    Greywolf : wo trage ich denn das hwclock --systohc --directisa beim herunterfahren ein ?


    Hat nix mit Perl zu tun. hwclock --systohc wird bereits irgendwo in den init-Skripten beim reboot/poweroff aufgerufen, um die aktuelle Systemzeit in die BIOS Uhr zu übertragen. Einfach mal in /etc/rc.d/ oder /etc/init.d/ danach suchen lassen und die Zeile ergänzen ... (Nicht mit hwclock --hctosys verwechseln. Das wird beim Start ausgeführt, um die Systemzeit mit der BIOS Uhrzeit zu initialisieren)


    Bei mir passiert ohne --directisa folgendes:



    Das alarm_IRQ wurde also auf "no" zurückgesetzt, was zur Folge hat, dass das BIOS die (immer noch eingestellte) Weckzeit ignoriert. Erst mit --directisa bleibt es erhalten ... zumindest bei mir. Bei anderen Systemen soll das Wecken wohl auch so klappen.


    Aber bei Dir hat es doch schon einmal geklappt mit dem Wecken, oder?
    Na probier obiges auch einfach mal aus, einmal mit und einmal ohne --directisa.

  • Greywolf:
    erstmal danke, dass Du mir so hilfst, aber ich muss feststellen, dass ich doch noch ein grosser Laie bin.
    Also meine Ausgabe :


    ist genauso wie bei Dir.
    ich kann aber immer nochnichts mit dewm hwclock in der init.d anfangen.In der init.d habe ich eine Datei hwclock.sh


    Ich komme leider aus der Windows-Welt, und da kennt man nur eine uhr :D

  • Zitat

    Original von grandmasterb10
    Also meine Ausgabe :
    [... snip ...]
    ist genauso wie bei Dir.


    Da wird also auch alarm_IRQ zurückgesetzt ...


    Vor dem Aufruf mit --directisa hättest Du übrigens nochmal den echo-Befehl aufrufen sollen, damit man sieht, ob hwclock mit --directisa das alarm_IRQ in Ruhe (d.h. auf "yes") lässt.


    Zitat

    ich kann aber immer nochnichts mit dewm hwclock in der init.d anfangen.In der init.d habe ich eine Datei hwclock.sh


    Na das sieht doch passend aus. Füg' da mal den Parameter mit ein, also so:



    Dann mal eine Weckzeit (in UTC) nach /proc/acpi/alarm schreiben, poweroff und abwarten :)


    Zitat

    Ich komme leider aus der Windows-Welt, und da kennt man nur eine uhr :D


    Och, Windows wird im Betrieb sicher auch seine eigene Uhr verwenden, die beim Start anhand der BIOS Zeit gestellt und beim Shutdown wieder im BIOS gesichert wird. AFAIK kann man Windows nur nicht beibringen, dass die BIOS Uhr auf UTC läuft, so dass einem beim Windows-Linux-Dualbetrieb nur übrig bleibt, dort die lokale Zeit zu speichern ... "toll", wenn dann bei der Zeitumstellung die Uhr mal wieder zweimal vor bzw. zurückgestellt wird (einmal manuell bzw. automatisch durch Linux, wenn der Rechner währenddessen grad läuft, und dann nochmal beim nächsten Windows-Boot ...)

  • So. Habe das hwclock.sh geändert. Es war 18:08
    Habe dann ein : echo '2004-08-25 18:10:00' >/proc/acpi/alarm
    gemacht und dann halt


    er ging nicht an .
    Habe dann um 18.20 ein echo '2004-08-25 16:22:00' >/proc/acpi/alarm
    gemacht, dann halt und er ging um 16:22 an. Ist nicht so gut, oder ???


    Hier nochmal ein Auszug aus der HWCLOCK --debug

  • Zitat

    Original von Greywolf
    wo trage ich denn das hwclock --systohc --directisa beim herunterfahren ein ?


    Würde ich nicht so einfach eintragen, da sonst die Gangabweichung der hwclock nicht richtig (genau genug) berechnet werden kann. Ich stelle nur einmal im Montat meine hwclock, dann allerdings mit --ajust (die Systemzeit lasse ich online durch ntp anpassen).


    Wenn die Gangabweichung nicht zu stark wird (bei meinen PC's sind es nicht mal eine Sekunde am Tag (so auch mein VDR), bei meinem Laptop allerdings 2 Minuten!! am Tag) ist das auch nicht so schlimm, da du ja den Neustart immer mit einer Reserve machst.


    An deiner Stelle würde ich die Gangabweichung für den Reboot mit in die Start-Reserve reinnehmen und nur einmal im Montag die Uhrzeit mit --ajust stellen. Denn bei Rechnerstart korrigiert Linux automatisch die hwclock-Zeit um die Gangabweichung und du merkst die Gangabweichung in der Systemzeit nicht.


    Das --ajust kannst du dann beispielsweise im cron einmal im Monat aufrufen.

    VDR-Server: Gentoo (AMD64/Core-i7) / VDR-1.7.23 / Digital Devices Octopus CI & 2xDuoFlex S2 HDTV (Rev. V3)
    VDR-Client: Gentoo (AMD64/Atom-D525) / VDR-1.7.23 / Chieftech & iMON-Pad / ASUSTeK - AT5IONT-I / 4GB-RAM & 65GB-SSD
    Alt: 3xTT-1.5 / linuxtv-dvb-1.1.1 + test_av-1.28 + FW-2622 / vdr-1.3.37 / viele Plugins / LFS-4.1


  • Huh, Tippfehler? Meinst Du beim zweiten Versuch, dass er (wie auch eigentlich erwartet) um 18:22 an ging?


    Dann sieht's doch ok aus. UTC-Zeit reinschreiben und es passt, oder übersehe ich was?

  • Greywolf


    Ja. Verschrieben. Richtig wäre es : ...,dann halt und er ging um 18:22 an.


    Aber das ist ja genau mein Problem. Immer diese 2 Stunden.


    Zitat

    UTC-Zeit reinschreiben und es passt, oder übersehe ich was?


    Wenn ich doch jetzt wieder Programmieren, dann programmiere ich doch nicht die 16:22 Uhr sondern 18:22 und der geht um 20:22 an !!!


    Oder was meinst Du mit UTC Zeit reinschreiben

  • Zitat

    Original von tom66


    Falsch zitiert, die Frage kam von grandmasterb10.


    Zitat

    Original von tom66
    Würde ich nicht so einfach eintragen,


    Das steht so (ohne --directisa) üblicherweise bereits in den Start/Stop-Scripten. Ging nur drum, die eh schon vorhandene Zeile um den einen Parameter zu ergänzen.


    Zitat

    da sonst die Gangabweichung der hwclock nicht richtig (genau genug) berechnet werden kann. Ich stelle nur einmal im Montat meine hwclock, dann allerdings mit --ajust (die Systemzeit lasse ich online durch ntp anpassen).


    Hmm, also aus den man pages verstehe ich das anders:


    Code
    Every time you calibrate (set) the clock (using  --set  or
           --systohc  ),  hwclock  recalculates  the systematic drift
           rate based on how long it has been since the last calibra-
           tion, how long it has been since the last adjustment, what
           drift rate was assumed in any intervening adjustments, and
           the amount by which the clock is presently off.
    [...]
           It  is  good  to  do  a  hwclock  --adjust just before the
           hwclock --hctosys at system startup time, and maybe  peri-
           odically while the system is running via cron.


    Beim --systohc wird also die Abweichung automatisch neu berechnet und gespeichert und man braucht --adjust nur beim Booten, um vor dem --hctosys die Abweichung auszugleichen, bevor die Systemzeit damit gesetzt wird.


    Nur was ist der Vorteil des ebenfalls angesprochenen gelegentlichen --adjust via cron, wenn --systohc doch sowohl die Uhr stellt als auch die Abweichung neu berechnet?


    Bei Verwendung von NTP sollte man übrigens, auch laut man page, möglicherweise (je nach NTP daemon) auf --adjust verzichten:


  • Zitat

    Original von grandmasterb10
    Aber das ist ja genau mein Problem. Immer diese 2 Stunden.


    Das haben wir doch ganz am Anfang im Script angepasst, indem gmtime statt localtime verwendet wird. Das rechnet die übergebene Zeit unter Berücksichtigung der eingestellten Zeitzone in UTC um und schreibt diese nach /proc/acpi/alarm. (Demnächst also nur noch 1 Stunde :) )

  • Greywolf :
    DANKESCHÖN. Er geht an.
    Und das beste --> zur richtigen Zeit.


    Danke schön.


    Jetzt habe ich aber noch 2 Fragen an Dich.
    a) was kann ich unternehmen, da ACPI ja nicht mit dem Datum klarkommt, dass er 1xam Tag (nachts um 2 Uhr oder so) kurz an- und danach wieder aus-geht.Ich glaube gelesen zu haben, dass er dadurch dann richtig aufnimmt :D


    und b) ob es Deine Art Humor ist oder etwas waren dran ist am Zitat :

    Zitat

    (Demnächst also nur noch 1 Stunde )


    Ansonsten : vielen, vielen Dank für Deine Hilfe :cool1

  • Zitat

    Original von grandmasterb10
    Greywolf :
    DANKESCHÖN. Er geht an.
    Und das beste --> zur richtigen Zeit.


    Na siehste, geht doch ... :D


    Zitat

    Jetzt habe ich aber noch 2 Fragen an Dich.
    a) was kann ich unternehmen, da ACPI ja nicht mit dem Datum klarkommt, dass er 1xam Tag (nachts um 2 Uhr oder so) kurz an- und danach wieder aus-geht.Ich glaube gelesen zu haben, dass er dadurch dann richtig aufnimmt :D


    Das scheint doch schon in dem Script drinzustecken, was Du oben gepostet hast. Der Rechner wird zum nächsten Timer oder um 2 Uhr aufgeweckt. Je nachdem, was früher ist.


    Zitat

    und b) ob es Deine Art Humor ist oder etwas waren dran ist am Zitat :


    Hmmm? Die Winterzeit nunmal (dieses Jahr am 31.10.) ... denn UTC wird nicht umgestellt (darum ist's IMHO auch besser, die BIOS Uhr wenn möglich auf UTC einzustellen), folglich haben wir dann nur noch eine Stunde Unterschied.


    Ich wollte damit nur andeuten, dass man besser so eine Funktion zum Umrechnen nimmt und nicht etwas bastelt, was "einfach 2 Stunden abzieht", denn das geht eben bei der nächsten Zeitumstellung wieder schief.

  • SO. Nachdem ich nun erfolgreich mehrere Sendungen aufgezeichnet habe, habe ich aber noch eine Frage :D. Also. Er geht jede nach um 2 Uhr an für "EPG-Update", aber danach geht er nichtmehr aus !
    Die Zeilen aus dem Skript lauten wie folgt (ich hoffe, dass sind die richtigen:

    wobei dann Poweroff so definiert ist :

    Code
    sub PowerOff {
    #  system("/bin/busybox poweroff") if(!$DEBUG);
       system("/sbin/shutdown -h now") if(!$DEBUG);
    }

    sieht da evtl. jemand einen Fehler ?

  • Naja, irgendwie muss dem Rechner ja noch gesagt werden, dass er sich beim Start um 2 Uhr nach dem EPG Scan wieder schlafenlegen und das poweroff Skript aufrufen soll ...


    Vielleicht per cron um 3 Uhr mit svdrpsend ein HITK Power senden, oder wie macht man das am besten zeitnah zum Scan? Da kann jetzt sicher jemand anderes besser weiterhelfen, der das schon so laufen hat ... mein VDR läuft durch. ?(

  • Mmmm. Das mit dem cronjob hatte ich ja schonmal hier irgendwo gehört. Ist ja prinzipiell eine gute idee. Wenn ich aber jetzt einfach per cron sage : so jede Nacht um 3 Uhr ausschalten, dann schaltet er ja auch aus, wenn ich Fernsehe.
    Deswegen denke ich mal, hast Du das geschrieben :

    Zitat

    Vielleicht per cron um 3 Uhr mit svdrpsend ein HITK Power senden

    .


    Hört sich ja gut an, aber :
    WAS IST DAS ??? -ashame- :rolleyes:
    und noch besser :
    WIE GEHT DAS ???


    Ich bin doch leider nur ein dummer User, der gerne was dazulernen möchte

Jetzt mitmachen!

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