EPG aktualisiert nicht

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
ByteRider
Einsteiger
Einsteiger
Beiträge: 108
Registriert: Mittwoch 30. Juni 2004, 06:57

EPG aktualisiert nicht

Beitrag von ByteRider »

Hi,

ich habe dass Problem eigentlich, seit ich Neutrino auf der Box habe.
Manchmal werden die EPG-Daten beim Zappen oder Einschalten nicht angezeigt ( stattdessen EPG wird geladen .... ).
Drückt man dann nochmal "?", erscheint es dann ( manchmal auch fehlerhaft ).
Irgendwie scheint NEutrino nur 1x abzufragen, ob EPG-Daten angeboten werden?!
Wie wäre es denn, wenn Neutrino beim Zappen 3-5 mal in kurzen Abständen nachfragt ( als ob man die "?"-Taste drückt ) um damit aktuelle EPG-Daten zu bekommen ?

Bei Enigma wird das EPG entweder sofort, oder 2-4 Sekunden später angezeigt...

Ansonsten bin ich TOP zufrieden mit Neutrino.
Der EPG-Fehler hat natürlich auch beim erstmaligen Einschalten aus dem DEEP-Standby (AUS) die Folge, dass die Uhr nicht stimmt, bis irgendwann beim Zappen oder durch Druck auf die "?"-Taste gültige EPG-Daten gefunden werden ?!!..


Gruß

Byte
KeXXeN
Tuxboxer
Tuxboxer
Beiträge: 2634
Registriert: Samstag 15. November 2003, 09:00

Beitrag von KeXXeN »

Das ist so nicht normal.

Der EPG wird eigentlich wenn er nicht über HW-Sections läuft ohne Probleme ausgelesen.
Kann allerdings sein das man erst einmal umschalten muss bis er auch angezeigt wird.
Zu Fragen oder Nebenwirkungen der hier genannten Begriffe benutzen sie bitte die Suchfunktion oder konsultieren sie die [url=https://tuxbox.org/forum/viewforum.php?f=26&] Frequentliy Asked Questions[/quote].
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

das ist schon ne ganze weile so. ich drück immer kurz "nachrechts" dann aktualisiert der das.
Das könnte man doch in die zapit mit einbauen ????
1.)zap auf kanal + einmal "nachrechts"
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

Also, so einfach ist es leider nicht (ich mal im Source nachgesehen).

Der berüchtigte sectionsd versucht bei Start der Box das Zeit-Signal ueber den Transponder zu bekommen (TDT Section). Diese wird ca. alle 10-15 Sekunden ausgestrahlt.

Danach verwirft der Sectionsd alle bislnag gelesenen EPG-Informationen (EIT-Tables). Warum? Die waeren wahrscheinlich eh nicht gechacht worden oder falsch interpretiert, da die Box ja noch keine aktuelle bzw. eine falsche "Zeit" hatte und somit z.B. die Events sowieso zuweit in der Zukunft liegen koennten.

Wann die ersten Events gespeichert werden, haengt also davon ab, wann ein Zeit-Signal empfangen wurde. Dummerweise ist es halt so, dass man wenn kein EPG angezeigt wird, erstmal zappt und dann ein z.B. Prev/Next angezeigt wird, weil halt dann auch die Wahrscheinlichkeit gross ist, dass die Box inzwischen ein Zeitsignal empfangen hat.

Dass der Sectionsd die Prev/Next Infos auch verwirft, obwohl die eigentlich immer aktuell sein sollten, liegt leider am Design des sectionsd.


... hatte ich schon gesagt, dass der sectionsd eigentlich genial ist, aber trotzdem suckt?
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

Achja, was wollte ich eigentlich damit sagen...

"Links-Rechts-Zap" automatisch einbauen bringt also nicht wirklich was...
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Wie wird das denn bei Enigma gemacht, dort gibt es das Problem anscheinend nicht?
Regloh
Semiprofi
Semiprofi
Beiträge: 1470
Registriert: Donnerstag 14. März 2002, 07:14

Beitrag von Regloh »

da gibts den sectionsd nicht. ;)
Regloh
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Regloh hat geschrieben:da gibts den sectionsd nicht. ;)
Regloh
Das ist schon klar. ;)

Nur wie wird da die Zeit und das Epg aktuallisiert?
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

... da muesste ich nachschauen.

Ich spekulier mal.
Enigma ist es egal, ob die Zeit stimmt oder nicht. die speichern einfach die Events. Solange ein Event nicht in der Vergangenheit liegt ist es eh egal.


Wenn man darueber nachdenkt, koennte man das EPG-Verwerfen beim sectionsd einfach mal rausmachen, weil durch die Cache-Time-to-Live (oder wie das heisst) fliegen Events sowieso raus, wenn diese nicht im Zeitfenster des Sectionsd liegen (also -1h ... 3d, je nachdem wie er eingestellt ist).


Ich guck es mir mal an...
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Oh ja, bitte! :)
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

... dauert allerdings a bisserl.
ByteRider
Einsteiger
Einsteiger
Beiträge: 108
Registriert: Mittwoch 30. Juni 2004, 06:57

Beitrag von ByteRider »

wenn man das Problem ( was mich wirklich schon lange nervt ) beheben könnte, wäre das echt cool !

Dann würde mein Neutrino soweit ohne Probleme laufen ...


Gruß

Byte
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

Und wie ist das wenn die Zeit schon aktuell ist aber sectionsd trotzdem nanach sucht?
Im Moment liegt bei mir eine größere Kabelstörung vor so das ich nur 3 Transonder empfangen kann. Wenn ich dann die Box auf zB. ZDF eingstellt habe (Kanal zur Zeit nicht verfügbar) und die Box neustarte, dann sucht die Box nach der Zeit obwohl sie längst per Internet vorhanden ist. Könnte man die Abfrage nicht abschalten? Dann würde der EPG auch schneller geladen werden (natürlich wenn der Empfang vorhanden ist. :wink: )
Gruß Gorcon
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

Naja, der sectionsd sucht beim Start immer die Zeit.
Laut Standard muss diese ja auch gesendet werden.


Auch ein Abschalten der Suche waere denkbar...
(oder gucken, ob man in 30 Sekunden eine Zeit findet und nutzt die dann)
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Wie wäre es wenn man nach dem holen der Uhrzeit diese neu zu syncronisieren abschalten kann.

Geht die Uhr dann nach kurzer Zeit falsch? :gruebel:
Metallica
Einsteiger
Einsteiger
Beiträge: 191
Registriert: Dienstag 30. Dezember 2003, 01:49

Beitrag von Metallica »

Man könnte nur bei bestimmten transponder zeit update machen (so eine option hat zB vdr), aber dann müsste man auch bei den transponder starten , sonnst mach es kein sinn.
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

export TZ=CET-1CEST,M3.5.0/2,M10.5.0/3

Gibts denn jemand der das mal genau aufschlüsseln kann?
DrStoned
Tuxboxer
Tuxboxer
Beiträge: 2614
Registriert: Montag 20. Mai 2002, 10:49
Image: JTG-Image [IDE] Version 2.4.4
Image: (7025SS) Merlin

Beitrag von DrStoned »

Nico 77 hat geschrieben:export TZ=CET-1CEST,M3.5.0/2,M10.5.0/3

Gibts denn jemand der das mal genau aufschlüsseln kann?
Ich interpretiere das so, Central European Time -1 Stunde, Sommerzeit vom 05.03 bis 05.10.

Greetz von DrStoned :lol: :lol: :lol:
Greetz von DrStoned :lol: :lol: :lol:
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

DrStoned hat geschrieben:
Nico 77 hat geschrieben:export TZ=CET-1CEST,M3.5.0/2,M10.5.0/3

Gibts denn jemand der das mal genau aufschlüsseln kann?
Ich interpretiere das so, Central European Time -1 Stunde, Sommerzeit vom 05.03 bis 05.10.

Greetz von DrStoned :lol: :lol: :lol:
Wow, /2 und /3 weißt das zufällig auch? :)

Dachte immer man könnte den Zeitupdateintervall auch darüber festlegen. :(
Innuendo
Einsteiger
Einsteiger
Beiträge: 281
Registriert: Mittwoch 8. Dezember 2004, 21:45

Beitrag von Innuendo »

ich bin mir nicht ganz sicher
central european time
die zahlen am end bedeuten die umstellung sommer/winterzeit
ich meine monat.tag.?/stunde
kommt das hin?
5.3. um 2 uhr umstellung auf sommer
5.10 um 3 uhr umstellung auf winterzeit

Innu
Innuendo
Einsteiger
Einsteiger
Beiträge: 281
Registriert: Mittwoch 8. Dezember 2004, 21:45

Beitrag von Innuendo »

ich hab hier mal was zum testen

Code: Alles auswählen

static void *timeThread(void *)
{
timeset = false;
if (access("/var/etc/.rdate", F_OK) == 0)
{
	unsigned int seconds = 60 * 30;
	char line[256] = "";
	
	FILE* fd = fopen("/var/etc/.rdate", "rt");
	char zeitserver[240] = "";
	if(fd)
	{
		
		char buffer[240];
		while(fgets(buffer, 240, fd)!=NULL)
		{
			sscanf(buffer, "%s %d", (char *) &zeitserver, &seconds);
		}
		fclose(fd);
	}
	
	if (strlen(zeitserver) > 2)
	{
		sprintf(line,"/sbin/rdate %s", zeitserver);
		if (seconds<60)
			seconds = 60 * 30;
	}
	else	
	{
		sprintf(line,"/sbin/rdate ptbtime1.ptb.de");
		seconds = 60 * 30;
	}
	system(line);
	time_t actTime;
	struct tm *tmTime;
	actTime=time(NULL);
	tmTime = localtime(&actTime);
		
	if ((tmTime->tm_year+1900) >= 2005)
	{
		timeset = true;
		printf("[%sThread rdate] Modus: ntpd\n", "time");
		printf("[%sThread rdate] Zeitserver: %s\n", "time", zeitserver);
		printf("[%sThread rdate] Intervall:  %d Sekunden\n", "time", seconds);
	}
	
	if (timeset==true)
	{
		while(1)
		{
			sleep(seconds);
			printf("[%sThread rdate] time set by ntpd\n", "time");
			system(line);
		}
	}
}

if (timeset==false)
{
	printf("[%sThread] Modus: EPG\n", "time");
	
	UTC_t UTC;
	time_t tim;
	unsigned int seconds;
	bool first_time = true; /* we don't sleep the first time (we try to get a TOT header) */
	
	try
	{
		dprintf("[%sThread] pid %d start\n", "time", getpid());
		
		time_t actTime;
		struct tm *tmTime;
		actTime=time(NULL);
		tmTime = localtime(&actTime);
		
		if ((tmTime->tm_year+1900) >= 2005){
			first_time = false;
			timeset = true;
			dprintf("[%sThread] time allready set by ntpd\n", "time");
		}
		
		while(1)
		{
			if (scanning && (getUTC(&UTC, true))) // always use TDT, a lot of transponders don't provide a TOT
			{
				tim = changeUTCtoCtime((const unsigned char *) &UTC);
				if (tim) {
					if ((!messaging_neutrino_sets_time) && (geteuid() == 0)) {
						struct timeval tv;
						tv.tv_sec = tim;
						tv.tv_usec = 0;
						if (settimeofday(&tv, NULL) < 0) {
							perror("[sectionsd] settimeofday");
							pthread_exit(NULL);
						}
					}

					//time_t actTime;
					//struct tm *tmTime;
					//actTime=time(NULL);
					//tmTime = localtime(&actTime);
					
					printf("[%sThread] time(): %02d.%02d.%04d %02d:%02d:%02d, tim: %s", "time", tmTime->tm_mday, tmTime->tm_mon+1, tmTime->tm_year+1900, tmTime->tm_hour, tmTime->tm_min, tmTime->tm_sec, ctime(&tim));

					timeset = true;
					eventServer->sendEvent(CSectionsdClient::EVT_TIMESET, CEventServer::INITID_SECTIONSD, &tim, sizeof(tim));
				}
			}
			
			if (timeset && first_time)
			{
				first_time = false;

				/*
				 * automatically restart scanning of events, because
				 * current events were most likely ignored as they seem 
				 * to be too far in the future (cf. secondsToCache)
				 */
				// -- do not trash read events, cleanup will be done hopefully
				// -- by housekeeping anyway  (rasc  (2005-05-02)
				//dmxEIT.change(0);
				//dmxSDT.change(0);
			}
			else {
				if (timeset) {
					seconds = 60 * 30;
					dprintf("[%sThread] - dmxTOT: going to sleep for %d seconds.\n", "time", seconds);
				}
				else if (!scanning){
					seconds = 60;
				}
				else {
					seconds = 1;
				}
				
				while (seconds)
					seconds = sleep(seconds);
			}
		}
	}
	catch (std::exception& e)
	{
		fprintf(stderr, "Caught std-exception in time-thread %s!\n", e.what());
	}
	catch (...)
	{
		fprintf(stderr, "Caught exception in time-thread!\n");
	}
	
} // if access änderung 020505

	dprintf("time-thread ended\n");

	pthread_exit(NULL);
}
das file /var/etc/.rdate sollte folgendes format haben: <zeitserver> <aktualisierung in sekunden>

atomuhr braunschweig

Code: Alles auswählen

ptbtime1.ptb.de 1800
wenn keine zeit über ntp ermittelt werden kann, wird die zeit wie bisher aus dem epg genommen (stand 1.183 rasc)

regards
Innu
DrStoned
Tuxboxer
Tuxboxer
Beiträge: 2614
Registriert: Montag 20. Mai 2002, 10:49
Image: JTG-Image [IDE] Version 2.4.4
Image: (7025SS) Merlin

Beitrag von DrStoned »

Man könnte sectionsd über das PS-Timer-Plugin zyklisch, killen und dann wieder neu starten, dafür wurde es eigentlich geschrieben, um bei einem Absturz von sectionsd diesen neu zu starten. Allerdings hätte das den Nachteil, daß wenn kein Zeitsignal oder ein falsches ausgestrahlt wird, die Uhrzeit erst recht nicht mehr stimmt. Kommt aber auf den Versuch an. Ich habs gerade mal ausprobiert, sectionsd auf ORF in Kabel-BW zu killen und neu zu starten, (Da wird kein Zeitsignal aufgestrahlt) und die Uhrzeit blieb erhalten.
Eine andere Möglichkeit wäre, über dieses Plugin das Zeitserver-Signal neu holen. Geht aber nur, wenn die Box Internetzugang hat.

Greetz von DrStoned :lol: :lol: :lol:
Greetz von DrStoned :lol: :lol: :lol:
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

Der sectionsd liest - wie der Name schon sagt - SI-Daten.
rdate sollte nicht in den sectionsd rein.

Das kann man einfacher und eleganter per 1-Zeilen-ShellScript im cronjob oder start-script machen.

Was man noch machen kann, ist die Abfrage der TDT bei Bedarf ganz ausschalten.
Innuendo
Einsteiger
Einsteiger
Beiträge: 281
Registriert: Mittwoch 8. Dezember 2004, 21:45

Beitrag von Innuendo »

du kennst dich in der sectionsd besser aus ... aber mit der änderung oben habe ich auch auf sendern wie giga.tv die korrekte uhrzeit (verglichen mit einer DCF77 gesteuerten Uhr)

regards
Innu
rasc
Senior Member
Beiträge: 5071
Registriert: Dienstag 18. September 2001, 00:00

Beitrag von rasc »

Klar geht das...
aber wie im Chat schon gesagt: warum kompliziert, wenn man es einfacher machen kann.

Es gibt gegen kaputte Informationen leider kein Patentrezept.

Beispiel:
- Sectionsd aktualisiert alle halbe Stunde die Zeit.
- Er könnte pruefen, ob die neue Zeit pi*daumen zur alten passt.

Was ist aber, wenn man auf dem falschen Transponder gestartet ist und dort die Zeit gaga war? Dann bliebe die Zeit immer falsch.