noch ungenauer
![smile :)](./images/smilies/icon_smile.gif)
zap mal vor dem ausschalten auf einen sender, der mist sendet. besser wäre bei vorhandensein ein ntp abgleich.
Das ist die Standard-Vorgehensweise beim Einbinden der RTC, wie sie auch im aktuellen JtG-Snap bereits implementiert ist. Beim Herunterfahren wird die Zeit zwar nicht mehr explizit auselesen, aber die Systemzeit, die ja zyklisch aktualisiert wird (DVB bzw. NTP), wird in der RTC abgespeichert... beim runterfahren nocheinmal die Uhrzeit aus dem EPG ausliest und damit die RTC bei bedarf korrigiert?
Code: Alles auswählen
in /etc/init.d/halt folgendes einfügen:
if [ -e /var/etc/.rtc ]; then
/bin/hwrtc systohw
fi
Melde mich wieder wenns was neues gibt!"one tool for one job"
Code: Alles auswählen
[sectionsd] Started with correct system time
[sectionsd] Caching max 6000 events
[sectionsd] Caching 14 days
[sectionsd] Events are old 60min after their end time
[timeThread] Time is already set by system, trying to sync it via DVB
Code: Alles auswählen
[sectionsd] getUTC: read: Connection timed out
[sectionsd] getUTC: read: Connection timed out
Code: Alles auswählen
[timeThread] - 12.11.2006 19:31:19, tim: Sun Nov 12 19:31:19 2006
[timeThread] Time set via DVB, going to sleep for 60 seconds.
warum steht doch in den Beiträgen oben...mb405 hat geschrieben:noch nen komandozeilenparameter ??
Das Problem hierbei ist, dass man unterscheiden muss, ob der sectionsd die Zeit zum ersten mal holt oder sich bereits im zyklischen Zeitabgleich befindet. Denn ständig die Uhrzeit aus der RTC auszulesen macht ja keinen Sinn.rtc->ntp->epg
...
wenn eins nicht ist, dann nimmt er das nächste, bis er es hat.
Code: Alles auswählen
cvs: WARNING: Read-only repository access mode selected via `cvs -R'.
Using this option to access a repository which some users write to may
cause intermittent sandbox corruption.
Index: sectionsd.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/daemons/sectionsd/sectionsd.cpp,v
retrieving revision 1.230
diff -u -r1.230 sectionsd.cpp
--- a/sectionsd.cpp 14 Nov 2006 20:36:30 -0000 1.230
+++ b/sectionsd.cpp 16 Nov 2006 21:40:49 -0000
@@ -256,6 +256,7 @@
}
bool timeset = false;
+bool bTimeCorrect = false;
pthread_cond_t timeIsSetCond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t timeIsSetMutex = PTHREAD_MUTEX_INITIALIZER;
@@ -5563,8 +5564,21 @@
while(1)
{
+ if (bTimeCorrect == true){ // sectionsd started with parameter "-tc"
+ if (first_time == true) { // only do this once!
+ time_t actTime;
+ actTime=time(NULL);
+ pthread_mutex_lock(&timeIsSetMutex);
+ timeset = true;
+ pthread_cond_broadcast(&timeIsSetCond);
+ pthread_mutex_unlock(&timeIsSetMutex );
+ eventServer->sendEvent(CSectionsdClient::EVT_TIMESET, CEventServer::INITID_SECTIONSD, &actTime, sizeof(actTime) );
+ printf("[timeThread] Time is already set by system, no further timeThread work!\n");
+ break;
+ }
+ }
- if ( ntpenable && system( ntp_system_cmd.c_str() ) == 0)
+ else if ( ntpenable && system( ntp_system_cmd.c_str() ) == 0)
{
time_t actTime;
actTime=time(NULL);
@@ -5575,8 +5589,7 @@
pthread_cond_broadcast(&timeIsSetCond);
pthread_mutex_unlock(&timeIsSetMutex );
eventServer->sendEvent(CSectionsdClient::EVT_TIMESET, CEventServer::INITID_SECTIONSD, &actTime, sizeof(actTime) );
-
- }else{
+ } else {
if (scanning && (getUTC(&UTC, true))) // always use TDT, a lot of transponders don't provide a TOT
{
tim = changeUTCtoCtime((const unsigned char *) &UTC);
@@ -6634,7 +6647,7 @@
SIlanguage::loadLanguages();
try {
- if (argc < 1 || argc > 3) {
+ if (argc < 1 || argc > 4) {
printHelp();
return EXIT_FAILURE;
}
@@ -6649,6 +6662,10 @@
update_eit = false;
printf("[sectionsd] EIT update disabled\n");
}
+ else if (!strcmp(argv[i], "-tc")) {
+ bTimeCorrect = true;
+ printf("[sectionsd] Started with correct system time\n");
+ }
else {
printHelp();
return EXIT_FAILURE;
Code: Alles auswählen
[timeThread] Time is already set by system, no further timeThread work!
Aber gerade dann könnte die Zeit utopische Werte annehmen! Man müsste eher sagen, dass die Zeit max. z.B 10 Min. daneben liegen darf. Ist es im Rahmen, wird die rtc-Zeit aktualisiert. Aber was macht man, wenn die rtc TATSÄCHLICH mal davon gelaufen ist? Dann hätte man ewig ne falsche Zeit, bis man das von Hand korrigiert. Und es könnte auch Probleme bei der Zeitumstellung machen, wobei ich mir nicht sicher bin, wie das in Linux zeittechnisch verarbeitet wird.nur stellen, wenn mehr als 1minute abweichung ist(das wäre das nonplusultra). ansonsten stellt sich ja die boxzeit bei manchen sendern auf utopische werte
bevor missverständnisse auftretenGorcon hat geschrieben:Edit: Habe gerade gesehen das Du die Beschreibung im Wiki nachgetragen hast, so ist es dann wenigstens alles beisammen.