Jump to content

Commandline-Interface (Windows,Linux/Wine) für den RS


HacMat

Recommended Posts

das mit dem <deu> passiert wohl wenn der RS für einige Zeit kein EPG up-date "on-Air" hatte. Vielleicht kommt das dann aus einer online EPG Quelle?

 

Leider habe ich im anderen Thread keine Rückmeldung erhalten, scheint also exotisch zu sein.

 

Ich kann nur sgaen Du ahst nen echt tollen Job gemacht, vorallem das Gegenchecken mit der Aufnahmendatenbank ist spitze.

 

Danke und Grüße Klaus

Link to comment
  • 2 weeks later...

Hallo HacMat,

 

hatte bis jetzt keine weiteren Probleme.

 

Das mit dem Titel übergben funktioniert jetzt soweit, so wie du gesagt hast....

 

Ich kapier nur noch nicht, wie das mit der Namensvergabe im TVBrowser zustande kommt. Gibt es dazu irgendwo eine Seite mit Bespielen?

 

Ich würde Gerne in den Übergeben Titel einen Teil von der Beschreibung drinnen haben und den "Orignal" Titel drausen, es wird ja ein doppelter übergeben.

 

Gruß

Link to comment

Hallo Shaupti,

 

Wenn ich Dich richtig verstehe, bezieht sich Deine Frage auf folgenden Teil des von Dir reposteten Parameter-String:

 

… {maxlength(concat(title,cleanLess(testparam(episode," - ",testparam(original_title," - "))),cleanLess(testparam(episode,testparam(episode_number,concat(leadingZero(episode_number,"3")," - ",episode),episode),original_title)),cleanLess(testparam(original_episode," - ")),cleanLess(original_episode)),"75")} ...

 

Dieser Code zur Bildung des Dateinamens ist nicht von mir, sondern von fschmitt. fschmitt war es außerordentlich wichtig, einen möglichst aussagekräftigen Dateinamen zu haben.

Informationen zu den Funktionen concat, cleanless, testparam, …usw findest Du, wenn Du unter 'Aufnahmesteuerung-Einstellungen' im Reiter 'Geräte' auf 'Gerät konfigurieren' klickst. In dem sich daraufhin öffnendem Fenster mit den Geräte-Einstellungen wählst Du den Reiter 'Parameter' aus. Dort befinden sich zwei Hilfe-Button. Klicke auf irgendeinen und ein Fenster mit Erläuterungen zu den Funktionen wird angezeigt. Beispiele sind leider keine dabei.

Ich hoffe die Informationen im Hilfe-Fenster sind ausreichend für Dich. Wenn nicht, frag nochmal nach.

 

VG,

 

HacMat

Edited by HacMat
Link to comment

Die "Hilfe" hatte ich schon gefunden.... bei maxlength steht zb, wenn es nicht funktioniert, das 2 Parameter benötigt werden, aber wie und wo????? steht nirgends...

 

 

So hab mal ein wenig getestet, ist aber verdammt schwierig, da die Doku überhaupt nicht vorhanden ist und nirgends erklärt wird was für was zuständig ist.... und wie es zusammenspielt, habe zumindenst nichts gefunden.

 

Der String sieht so aus

 

-request record -readfile C:\\Program Files (x86)\\RS Requester\\Requester.cfg -title " - "{maxlength(concat(title,cleanLess(testparam(episode," - ",testparam(original_title," - "))),cleanLess(testparam(episode,testparam(episode_number,concat(leadingZero(episode_number,"3")," - ",episode),episode),original_title)),cleanLess(testparam(original_episode," - ")),cleanLess(original_episode)),"75")}" "{maxlength(cleanless(description),"20")}" -channel "{channel_name_external}" -date {start_day}.{start_month}.{start_year} -start {start_hour}:{start_minute} -stop {end_hour}:{end_minute} -endaction none

 

 

 

Das wird an den RecService übergeben:

- "Law & Order_Schmerzensgeld_Misconception" "2_Staffel_Folge_6_Ei

 

So sieht die Aufnahme aus:

- Law & Order_Schmerzensgeld_Misconception 2_Staffel_Folge_6_Ei_ - - 2015-09-02 - 16-20-01_13th Street HD (deu)

Link to comment

@shaupti

Diese „Hilfe“ ist tatsächlich sehr knapp gehalten.

'maxlength' erwartet als erstes Argument einen String und als zweites Argument
eine ganze Zahl in Form eines Strings, die die maximale Länge des Strings angibt.

Zurückgeben wird der übergebene String, falls die Länge des Strings die angegebene maximale Länge nicht überschreitet. Im anderen Fall wird nur der Anfang des übergebene String zurückgeben, die überzähligen Zeichen werden weg gelassen.

Beispiel:

{maxlength("abcdef","3")} <= gibt den String „abc“ zurück.
{maxlength("abcdef","10")} <= gibt „abcdef“ zurück.

Du verwendest natürlich nur zum Testen der Funktionen konstante Strings. Die konstanten String ersetzt Du später wieder durch Variablen.
Beispiel: {maxlength(original_title,"30")}

Alle Funktionen der Aufnahmesteuerung geben Strings zurück, die wiederum als Argumente anderer Funktionen verwendet werden können. Die Argumente der Funktionen sind grundsätzlich Strings. D.h. auch eigentlich numerische Werte werden als Strings übergeben.

Du kannst die Funktionen der Aufnahmesteuerung ganz einfach ausprobieren. Verwenden dazu eine beliebige Funktion im Fenster 'Parameter für Aufnahme' zusammen mit konstanten Strings deiner Wahl. Klicke anschließend auf 'Testen' und schau Dir das Ergebnis an. Ich denke dann wird Dir so einiges klar werden.

Die Ergänzungen des Dateinamens werden vom Recording Service vorgenommen, weil Du im Dateinamensschema %date, %time, usw. verwendest. Willst Du das nicht, darfst Du nur %name verwenden.

Ich hoffe das hilft Dir weiter.

Viel Erfolg!

HacMat

Edited by HacMat
Link to comment

Danke, das hilft mir weiter.

 

Bis auf die sache mit dem testen Button, bei mir ist es so, das wenn etwas nicht stimmt dann kommt eine Anzeige, wenn alles korrekt eingegeben ist kommt kein fenster.

 

Naja irgendwie wird das schon werden.

Link to comment

@shaupti

 

Ich habe in meinem letzten Posting in den Beispielen die falschen Anführungsstriche verwendet, so dass diese nicht funktionieren.

Den Fehler habe ich korregiert. Kopiere eins der Beispiele und probier den Testen-Button nochmals aus. Das muss gehen.

Link to comment

Das hier wird grad ein wenig zu TVBrowser lastig......

 

Gebe ich das hier ein und drücke auf Testen passiert bei mir nichts...

 

{maxlength(concat(title,cleanLess(testparam(episode," - ",testparam(original_title," - ")))))}

 

lasse ich das } am Ende weg kommt eine Fehlermeldung.

 

Wie willst denn da was richtig ausprobieren :(

 

Anderes Beispiel

 

das gibt nichts zurück

 

{original_title}{episode_number}{title}{original_episode}

 

das funktioniert

 

{original_title}{episode_number}{original_episode}

 

Einfach irgendwie komisch.

Link to comment

Dein erstes Beispiel ist falsch. Du hast das zweite Argument der Funktion maxlength weggelassen.

 

Richtig wäre z.B. so:

 

{maxlength(concat(title,cleanLess(testparam(episode," - ",testparam(original_title," - ")))),"50")}

 

Leider funktioniert das auch nicht. Sobald Du 'title' verwendest, passiert nichts mehr, wenn Du auf den Testen-Button klickst. Das ist vermutlich ein Fehler in der Aufnahmesteuerung. Zum Testen musst Du deshalb 'title' durch 'original_title' oder einen konstanten String ersetzen.

 

z. B. so:

 

{maxlength(concat(original_title,cleanLess(testparam(episode," - ",testparam(original_title," - ")))),"50")}

 

oder so:

 

{maxlength(concat("Provisorium für 'title'",cleanLess(testparam(episode," - ",testparam(original_title," - ")))),"50")}

 

 

Sobald Dein Code das tut, was Du willst, ersetzt Du das Provisorium wieder durch title.

Link to comment

Schlicht und einfach sollte doch gehen?

 

Also so

 

-request record -readfile C:\\Program Files (x86)\\RS Requester\\Requester.cfg -title "{title} _ {maxlength(cleanless(description),"20")} _ {episode}_{genre}_{production_year}" -channel "{channel_name_external}" -date "{start_day}.{start_month}.{start_year}" -start "{start_hour}:{start_minute}" -stop "{end_hour}:{end_minute}" -endaction none

 

Oder könen da Probleme entstehen?

Link to comment

Das sieht schon mal ganz gut aus.
Ich würde nur noch '{maxlength(cleanless(description),"20")} ' wieder rausnehmen.
'description' kann für einen mehrere 100 Zeichen langen Text stehen, den Du nach dem 20. Zeichen einfach abschneidest. Diese 20 Zeichen zerstören eher die Aussagekraft Deines Dateinamens, als dass sie diese erhöhen würden. Wenn Du 'title' durch 'original_title' ersetzt und den Testen-Button betätigst verstehst Du was ich ich meine.
Dann würde ich noch die Leerzeichen vor und hinter '_' entfernen und '_' durch '#' ersetzen. Ich finde das sieht besser aus.
Meine Version Deiner Version sähe dann so aus:

… {title}#{episode}#{genre}#{production_year} …

Jetzt hast Du noch das Problem, falls ein Parameter wie z.B. episode oder genre nicht gefüllt ist, zwei '#' hintereinander stehen. Das sieht sehr hässlich aus.
Unterbinden kanst Du das mit der Funktion 'testparam':

… {title}{testparam(episode,"#")}{episode}{testparam(genre,"#")}{genre}{testparam(production_year,"#")}{production_year} …

'title' sollte immer gefüllt sein, so dass Du nicht befürchten musst, dass der Dateiname mit '#' anfängt.
Was Du als Trennzeichen nimmst ist eigentlich egal. Leider ist '|' in Dateinamen nicht erlaubt.

Link to comment

Bei Filmen gebe ich dir Recht da ist das mit dem {maxlength(cleanless(description),"20")} blöd.

 

 

Aber bei Serien finde ich es sehr Hilfreich.

 

Gibt es die möglichkeit den Paramter auszuschließen, wenn etwas in der Beschreibung nicht vorhanden ist?

In dem Fall z.B. Staffel

Link to comment

Dazu bräuchtest Du einen Parameter wie z.B 'season'. Den gibt es leider nicht. Es gibt nur 'episode_number'. 'episode_number' enthält nur die Nummer der Folge, aber vermutlich nie die Staffel-Nummer.

Du könntest mit 'testparam' überprüfen, ob 'episode_number' gefüllt ist. Ist es gefüllt handelt es sich sehr wahrscheinlich um eine Folge einer Serie und Du könntest dann 'description' zurückgeben:

 

… {testparam(episode_number,"#")}{maxlength(testparam(episode_number,cleanless(description)),"20")} …

 

Eine Möglichkeit zu prüfen, ob ein String wie z.b den durch 'description' repräsentierten, eine bestimmte Folge von Zeichen enthält und in Abhängigkeit vom Ergebnis dieser Prüfung einen anderen String oder einen Leer-String zurückzugeben, habe ich leider nicht entdecken können.

 

Letztendlich hilft es nur zu experimentieren, bis Du die, für Deine Zwecke beste Lösung gefunden hast.

Edited by HacMat
Link to comment

Guten Morgen, hätte da noch einen Wunsch.

 

Könntest du bei der Überprüfung mit den Vorhanden aufnahmen auch die Funktion einbauen, das die Timer als deaktiviert gesetzt werden?

 

Gruß

Link to comment

Das lässt sich jetzt schon über eine Batch-Datei realisieren, in der Du den Fehlercode des RS Requesters abfragst, und in Abhängigkeit von diesem den RS Requesters nochmals aufrufst, um einen inaktiven Timer zu setzen.

Den Pfad zur Batch-Datei verwendest Du als Argument von 'execOnError'. Den Fehlercode kannst Du der Batch-Datei mittels {ErrorCode} als Parameter übergeben. Wenn Du den RS Requester rekursiv verwendest, musst Du unbedingt darauf achten, dass Du keine Endlos-Rekursion erzeugst. Das passiert schneller als man denkt.

Link to comment

So!!

 

Ich hab mich getraut und mir das Projekt mal zu Gemüte geführt.

Vielen Dank für Deine tolle Arbeit - soweit hab ich es schonmal am Laufen.

 

Was ich gerade nicht hinbekomme, ist ein Timer für "Die Pinguine aus Madagascar" am 27.9. auf Sky 3D bzw. Sky Cinema.

Ich erhalte in der Aufnahmesteuerung folgende Rückmeldung:

 

DVBViewer Recording Service 1.31.0.0 (beta) (...)

Version nicht unterstützt. Kompatibilität nicht gewährleistet!
Folgende Versionen werden unterstützt: 1.25.0.0 1.26.0.0 1.27.0.0 1.28.0.0 1.29.0.0 1.30.0.0 1.30.1.0
Identifizierter Sender: Sky Cinema HD
Keinen korrespondierenden EPG-Eintrag gefunden.

 

Es gibt ja bei Sky kein so weit vorgreifendes EPG, daher auch kein Eintrag im EPG.

 

Ich habe daraufhin in der Requester.cfg geschaut und zuerst useTitleEPG = disabled, und danach, als das nichts half, minTitleSim = 0 eingestellt.

 

Beides führt jedoch nicht dazu, dass sich der Timer anlegen lässt.

Wahrscheinlich mache ich einen Fehler und wer könnte mir das besser bestätigen als Du.

 

Vielen Dank nochmal für Dein Projekt und hoffentlich auch für Deine Hilfe.

Volker

Link to comment

Hallo Volker,

vielen Dank für Dein Vertrauen in mein Projekt.

Die Zuweisung 'minTitleSim = 0' solltest du wieder entfernen oder auf den ursprünglichen Wert setzen, es sei denn Du willst den übergebenen Titel, wie Shaupti es tut, stark abändern.

 

Bitte füge Deiner Konfigurationsdatei folgende Zeilen hinzu:

[sky]
monitor = nothing
monitorPDC = off
preroll = 2
postroll = 5
adjust = on
useTitleEPG = if available
useTimesEPG = if available

[2359886214439370762]
; Sky Cinema (deu)
section = Sky

[2359886231669768323]
; Sky Cinema HD (deu)
section = Sky

Für jeden weiteren Sky-Sender den Du nutzt, verfährst Du analog.
z.B. so:

[2359886261734539374]
; Sky Atlantic HD (deu)
section = Sky

; Überschreibt die Zuweisungen aus '[sky]' (Dient nur als Beispiel)
preroll = 5
preroll =10

… usw.

Unter anderem deaktivierst Du mit diesen Zeilen PDC für die Sky-Sender. Nach meinem Kenntnisstand unterstützen die Sky-Sender PDC nicht. PDC erfordert einen zur aufzunehmenden Sendung korrespondierenden EPG-Eintrag, der die für PDC notwendige PIL enthält. Deshalb die Fehlermeldung.
Mit 'preroll' und 'postroll' legst Du den Vor- und Nachlauf der Aufnahme fest. Ich weiß nicht wie 'pünktlich' die Sendungen auf den Sky-Sendern beginnen oder enden. Da hilft nur ausprobieren.
In der Sektion '[sky]' fast Du die Grund-Konfiguration für alle Sky-Sender zusammen. In den einzelnen Sender-Sektionen für die Sky-Sender verweist Du auf diese Grundkonfiguration und passt sie falls erforderlich nochmals an. So würde ich verfahren, Du musst das so nicht machen, ist nur ein Vorschlag.
Sollte wieder erwarten die Fehlermeldung immer noch auftreten, poste mal Deinen Parameter-String und lade Deine Konfigurationsdatei hoch.

Viele Grüße,

HacMat

Link to comment

Vielen, vielen Dank für Deine schnelle und ausführliche Hilfe. Ich finde das alles andere als selbstverständlich...Hut ab!

 

Da meine Frau mir gestern am Sonntag ein paar Stunden "freigegeben" hat, habe ich mich hingesetzt und die Änderungen eingepflegt.

Größter Aufwand dabei war, aus dem Output des Aufrufs 127.0.0.1:8089/api/getchannelsxml.html das richtige Format für die Datei requester.cfg zu bauen.

Aber so hatte ich zumindest einen guten Grund, mich mal eingehend mit Notepad++ und dem Thema Regular Expressions auseinanderzusetzen.

 

Wen es interessiert:

Mit Notepad++, angetickter Checkbox "Reguläre Ausdrücke" und

Suchen nach: <ch.*name\=\"([ A-Za-z0-9()!.+-]*)\" EPGID.*ID\=\"([0-9]*)"/>

Ersetzen durch: \[\2\]\r\n;\1\r\nsection = Sky\r\n

macht man aus dem Output des getchannelsxml.html:

...

<channel nr="38" name="Sky Cinema HD (deu)" EPGID="563521184465027" flags="25" ID="2359886231669768323"/>

<channel nr="39" name="Sky Cinema+1 HD" EPGID="563521184596102" flags="25" ID="2359886240192594054"/>
<channel nr="40" name="Sky Cinema+24 HD" EPGID="563521184596103" flags="25" ID="2359886240209371271"/>
<channel nr="41" name="Sky Hits HD (deu)" EPGID="563521184858219" flags="25" ID="2359886257406017643"/>
<channel nr="42" name="Sky Action HD (deu)" EPGID="563521184792692" flags="25" ID="2359886253127827572"/>
...
das gewünschte Ergebnis für die requester.cfg:
...
[2359886231669768323]
;Sky Cinema HD (deu)
section = Sky
[2359886240192594054]
;Sky Cinema+1 HD
section = Sky
[2359886240209371271]
;Sky Cinema+24 HD
section = Sky
[2359886257406017643]
;Sky Hits HD (deu)
section = Sky
[2359886253127827572]
;Sky Action HD (deu)
section = Sky
...
und kann es so einfach in der requester.cfg einfügen.
Und was soll ich sagen: Es funktioniert! Die Timer werden nun angelegt - aber das hast Du ja wahrscheinlich eh schon geahnt.
Ein tolles Tool, das Du da gebaut hast. Ich kann es jedem nur wärmstens ans Herz legen.
Eine kleine Frage hätte ich aber noch - das ist zwar nur ein kleiner Wermutstropfen - aber wenn ich versuche, z.B. auf WDR HD Düsseldorf einen Timer in 3 Wochen (18.10) anzulegen, dann scheitert das ja aus den gleichen Gründen wie es hier der Fall war (Sendung im EPG (noch) nicht auffindbar). Ist es richtig, dass man um dieses Problem nicht umhin kommt, wenn man PDC nutzen möchte?
Oder wäre Folgendes denkbar (keine Ahnung, ob sowas ginge und wie viel Aufwand das bedeuten würde):
Ein solcher PDC-Timer, der im EPG des PDC-unterstützenden Senders noch nicht aufzufinden ist, lässt sich trotzdem anlegen und der Abgleich mit den EPG Daten erfolgt, sobald die Sendung im EPG des Senders gelistet ist...
Ist nur ein Gedanke, aber dafür sind wir ja hier :original: .
Einen schönen Start in die Woche
Volker
Edited by 21stfox
Link to comment

Danke für Deinen Hinweis auf Notepadd++ und die regulären Ausdrücke. Ich habe die Sendersektionen für die gängigsten Sender nach und nach manuell in die Demo-Konfigurationsdatei eingepflegt, und weiß deshalb Deinen Tipp zu schätzen.
Vielleicht werde ich die Konfigurationsdatei noch mit Hilfe Deiner Methode entsprechend ergänzen.

 

Eine kleine Frage hätte ich aber noch - das ist zwar nur ein kleiner Wermutstropfen - aber wenn ich versuche, z.B. auf WDR HD Düsseldorf einen Timer in 3 Wochen (18.10) anzulegen, dann scheitert das ja aus den gleichen Gründen wie es hier der Fall war (Sendung im EPG (noch) nicht auffindbar). Ist es richtig, dass man um dieses Problem nicht umhin kommt, wenn man PDC nutzen möchte?

 

Ja, das ist leider so. Die öffentlich rechtlichen Sender liefern ein EPG für maximal 4 Wochen in voraus.
Dein Sendetermin (18.10) liegt fast 4 Wochen in der Zukunft. An diesem Tag endete das EPG für WDR HD Düsseldorf,
und ein Timer , der PDC nutzt, konnte deshalb noch nicht angelegt werden. Beim TV-Browser kannst Du den Zeitraum für die automatische
Aktualisierung der Programmdaten einschränken. Ich würde diesen auf maximal 3 Wochen festlegen.
Wie weit die EPGs der einzelnen Sender in die Zukunft reichen, kannst Du dem Web-Interface des RS entnehmen.

Es gibt noch die Möglichkeit den RS Requester eine PIL berechnen zulassen:

-PILsource {0|calculate|calculation} → Das PIL wird aus der Startzeit und dem Datum berechnet (nicht empfohlen. <= ein EPG-Eintrag zur Sendung ist nicht erforderlich.
{1|EPG|EPG only} → Das PIL wird aus dem EPG extrahiert. <= ein EPG-Eintrag ist Voraussetzung.
{2|EPG preferred} → Das PIL wird nur berechnet, wenn kein EPG-Eintrag zur Sendung gefunden wird. <= ein EPG-Eintrag zur Sendung ist nicht erforderlich.

Wenn Du das PIL vom RS Requester berechnen lässt, funktioniert das je nach Sender mehr oder weniger gut. Trotzdem ist das EPG als Quelle des PIL deutlich zuverlässiger.
Der im RS Requester implementierte Algorithmus zur Berechnung des PIL, wird zwar meistens von den öffentlich rechtlichen Sendern verwendet, Ausnahmen kommen aber immer wieder mal vor
und die Aufnahme schlägt in diesem Fall fehl.

Du kannst theoretisch auch das PIL explizit über die Kommandozeile mittels '-PIL ...' übergeben. Dann brauchst Du auch keinen EPG-Eintrag zur Sendung.
Leider habe ich bisher keine externe Quelle gefunden, aus der man das PIL auslesen kann. Soweit ich weiß unterstützt die Aufnahmesteuerung des TV-Browers auch nicht dessen Übergabe.

 

 

 

Oder wäre Folgendes denkbar (keine Ahnung, ob sowas ginge und wie viel Aufwand das bedeuten würde):

Ein solcher PDC-Timer, der im EPG des PDC-unterstützenden Senders noch nicht aufzufinden ist, lässt sich trotzdem anlegen und der Abgleich mit den EPG Daten erfolgt, sobald die Sendung im EPG des Senders gelistet ist...

 

Man könnte sich ein Batch-Script schreiben, dass in diesem Fehler-Fall eine Aufgabe im Aufgabenplaner von Windows anlegt, sodass zu einem späteren Zeitraum der RS Requester mit den gleichen Parametern nochmals aufgerufen wird.
Ich kann Dir dazu leider keine schnelle Lösung anbieten, ich müsste selbst experimentieren und mich auch erstmal wieder mit der Batch-Programmierung vertraut machen.

VG,

HacMat

Edited by HacMat
Link to comment
  • 4 weeks later...

Hi HacMat,

 

für Leute mit Alsheimer wäre es schön wenn der Vergleich ob Aufnahme vorhanden ist oder nicht auch auf die programmierten Timer (speziel die Autotimer) ausdehnen lassen würde.

 

Grüße Klaus

Link to comment

Ach noch was, kann man vielleicht auch prüfen ob eine Aufnahme erfolgreich war und bei Misserfolg nach weiteren Sendeterminen suchen und dann Programmieren.

Falls im EPG dann auch nichts gefunden wird dann einen DVBViewer Autotimer programmieren.

 

Ich weiß es ist komplex aber vielleicht ist es ja auch ganz einfach?

 

Auf jeden Fall benutzte ich das Programm jetzt seid über 3 Monaten mit TV Movie Clickfinder und bin einfach nur begeistert.

 

Grüße und vielen Dank Klaus

Link to comment

... für Leute mit Alsheimer wäre es schön wenn der Vergleich ob Aufnahme vorhanden ist oder nicht auch auf die programmierten Timer (speziel die Autotimer) ausdehnen lassen würde.

 

Daran habe ich auch schon gedacht. Ich werde mal sehen, was sich da machen lässt.

 

Ach noch was, kann man vielleicht auch prüfen ob eine Aufnahme erfolgreich war und bei Misserfolg nach weiteren Sendeterminen suchen und dann Programmieren.

 

Die Grundfunktion des RS Requester ist ja nur das Erstellen und das Löschen von Timern. Ich muss aufpassen, dass ich das Programm nicht mit Funktionen überfrachte und damit neue Benutzer abschrecke. Deshalb habe ich mir gedacht die Funktionalität des RS Requesters nur noch behutsam auszuweiten und solch spezielle Funktionen über Batch-Skripte zu realisieren, die vom RS Requester, beispielsweise beim Erstellen eines Timers, aufgerufen werden. Das Batch-Skript in deinem Anwendungsfall könnte zum Beispiel im Windows-Taskplaner eine Aufgabe anlegen, bei der nach dem Sendetermin ein zweites Script aufgerufen wird, welches den Erfolg der Aufnahme überprüft und im Fehlerfall veranlasst, dass die Sendung zu einem späteren Termin erneut aufgenommen wird. Ob sich das alles so einfach realisieren lässt, weiß ich noch nicht. Gegebenenfalls muss ich den Requester doch noch erweitern.

Nach dem Release der nächsten Versionen, werde ich mit der Entwicklung solcher Skripte beginnen und diese dann hier veröffentlichen.

 

 

Auf jeden Fall benutzte ich das Programm jetzt seid über 3 Monaten mit TV Movie Clickfinder und bin einfach nur begeistert.

 

Danke, das freut mich sehr. Dann hat es sich auch für mich gelohnt, noch ergänzend das Clickfinder-Addon zu entwickeln.

 

Viele Grüße,

 

HacMat

 

 

Link to comment

Hi HacMat,

 

ja, du hast recht das Program ist jetzt schon recht mächtig und die meisten, wie auch ich, werden nie alle Feinheiten nutzen.

Jedoch ist der Umweg über den Scheduler sicher für viele zu kompliziert da man sich dann auch viele Abhängigkeiten einhandelt (Windows Versionen).

 

Im Prinzip ist ja nichts weiter nötig als bei einer nicht erfolgreichen Aufnahme das EPG nochmals zu durchforsten ob es einen Eintrag in der Zukunft gibt und entsprechend einen Timer zusetzten wird kein passended EPG Eintrag gefunden dann muss ein Autotimer gesetzt werden (sollte abschaltbar sein).

 

Aber ich da offen für jeden zielführenden Weg.

 

Grüße

 

Klaus

Link to comment

Hallo Klaus,

 

Um den Scheduler führt leider kein Weg vorbei. Der Prozess zur Überprüfung des Aufnahmeerfolgs muss schließlich irgendwie gestartet werden. Die Frage ist nur, ob ich die Funktion der Aufnahmeüberprüfung noch in den Requester stopfe, der dann nach dem Aufnahmetermin vom Scheduler nochmals aufgerufen wird, um den Erfolg der Aufnahme zu überprüfen, oder ob ich diese Funktion über ein externes Script oder Programm realisiere, welches ebenfalls vom Scheduler gestartet werden müsste. Die externe Lösung hätte auch den Vorteil, dass das Manual zum Requester nicht weiter aufgebläht wird und somit die Konfiguration des Requesters nicht noch komplizierter erscheinen lässt. Ich bin mir noch nicht sicher, wie ich es machen werde, vielleicht kommt mir noch eine ganz andere Idee. Am besten wäre es natürlich, wenn man eine solche Funktion direkt im RS implementieren würde, der ist ja schließlich bei der Aufnahme immer live dabei und kriegt sofort mit, wenn etwas schief läuft.

VG,

HacMat

Link to comment
  • 1 month later...

Hi Klaus,

 

klar baue ich noch daran. Solange ich noch nicht alle Ideen verwirklicht habe und keine zeitlich unbegrenzt lauffähige Version veröffentlicht habe, mache ich weiter.

Es hat absolut nichts zu bedeuten, wenn ein paar Monate keine neue Version von mir kommt. Sollte ich das Projekt irgendwann einstellen, gebe ich das hier bekannt und veröffentliche noch eine unbefristet lauffähige Version.

Vor Weihnachten gibt es sehr wahrscheinlich noch eine neue Version.

Ich werde in dieser eine Prüfung auf mehrfach vorhandene Timer für identische Sendungen implementiert haben, ähnlich der Prüfung auf bereits vorhandene Aufnahmen.

Ganz sicher wird es auch einen Parameter 'timerName' geben, der sich zusätzlich zum Parameter 'title' verwenden lässt. Mit 'timerName' lässt sich dann der Name des Timers unabhängig vom übergebenen Titel festlegen. Der Name des Timers wird durch '%name' im Dateinamensschema repräsentiert. Das ist interessant, wenn man den Dateinamen völlig frei gestalten will, ohne mit 'minTitleSim' den Mindest-Übereinstimmungsgrad des übergebenen Titels mit dem Titel aus dem EPG absenken zu müssen. Das Skript zur Überprüfung des Aufnahmeerfolges werde ich aber vermutlich nachreichen müssen. Das schaffe ich vor Weihnachten nicht mehr.

 

Viele Grüße,

 

HacMat

 

Link to comment

Hallo HacMat,

 

vielen Dank, schön das es weiter geht!

Mach dir mal keinen Strass, zumindest ich bin mit der jetztigen Version schon hoch zufrieden, natürlich gibt es immer was zu verbessern und dass ich schön das Du daran immer weiter machst.

 

Nochmals vielen Dank für das super Programm.

 

Grüße

 

Klaus

Link to comment
  • 4 weeks later...

Neue Version: RS Requester 1.0.6.0

ich habe jetzt den RS Requesters, in der Version 1.0.6.0 fertiggestellt.
Diese Version stellt am 1. März 16 ihren Dienst ein. Bis dahin werde ich eine weitere Version herausgeben, die wieder mindestens 6 Monate lauffähig ist.

Folgende Ergänzungen, Änderungen und Fehlerbereinigungen habe ich vorgenommen:

Behobene Fehler:

Das Beenden des RS-Requester über das Schließen-Kreutz, Alt-F4 oder Schließen im System-Menü führte zum Absturz des Requesters, wenn das Senden von Requests an den RS noch nicht abgeschlossen war.

Änderungen:

Der Default-Wert von maxStartTimeDiff wurde von 60 auf 20 reduziert.

Die Muster-Konfigurationsdatei wurde um die neuen Schlüssel erweitert.

Neue Funktionen:

 

 

Paramter '-TimerName'

Mit 'TimerName' kann man jetzt den Namen des Timers frei zu wählen. Der Timer-Name wird im Datei-Namensschema durch '%name' repräsentiert. Dadurch ist es möglich den Datei-Namen der Aufnahme völlig frei zu gestalten. Das war vorher nur durch Herabsetzen der erforderlichen Mindest-Ähnlichkeit des übergebenen Titels mit dem EPG-Titel möglich, was dazu führt, dass Fehler in den Programmdaten von TV-Browser, TV-Genial und Clickfinder, weniger zuverlässig erkannt werden. Wer also bisher den Titel stark veränderte um den Dateinamen mit Meta-Daten zur Sendung zu ergänzen, kann jetzt den Wert von 'minTitleSim' (Vorgabe: 20) wieder hoch setzen, wenn er die Metadaten mit Hilfe des Parameters 'timerName' übergibt und den mit 'title' übergebenen Titel unverändert lässt.

 

Button 'ignorieren'

Der RS Requester lässt sich jetzt so Konfigurieren, dass er bei den „Ereignissen“ 'Eine Aufnahme der Sendung ist bereits vorhanden' und 'Ein Timer für die Sendung existiert bereits', einen Button mit der Beschriftung 'ignorieren' anzeigt, um das Setzen eines Timers zu erzwingen.

 

Konfigurationsdatei: neue Sektion [finalization]

Die Schlüssel in der Sektion '[finalization]' werden immer als letztes eingelesen.
Hier können Schlüssel-Wert-Zuweisungen stehen, bei denen man sicher gehen will, dass Sie endgültig sind und nicht mehr innerhalb einer anderen Sektion überschrieben werden.
Sie ist vor allem dafür gedacht, mit Schlüsseln experimentieren zu können, ohne dass dafür Änderungen in den anderen Sektionen vorgenommen werden müssen.

Suche nach bereits vorhandenen Timern, die als Aufnahmeziel die gleiche Sendung haben.

Die Suche funktioniert über Sendergrenzen hinweg und ist unabhängig vom Sendetermin.

Dazu ein Beispiel:

Die Sendung „Tatort: Fegefeuer“ hat folgende Sendetermine:

3. Januar 16 21:45 | Einsfestival
8. Januar 16 23:40 | Das Erste

Hat man bereits einen Timer für die Sendung „Tatort: Fegefeuer“ angelegt, und ist der RS Requester entsprechend konfiguriert, wird bei dem Versuch einen weiteren Timer für diese Sendung zu erstellen, die Fehlermeldung ausgegeben, dass die Aufnahme der Sendung bereits von einem anderen Timer abgedeckt wird. Wenn man möchte kann, man den Requester so einrichten, dass in diesem Fall ein Button mit der Beschriftung 'ignorieren' erscheint mit dem sich der Timer dennoch setzen lässt. Klickt man auf den Button 'abbrechen' wird kein Timer gesetzt.

Es gibt sehr viele neue Parameter mit der man diese Funktion an seine eignenen Bedürfnisse anpassen kann. Näheres zu den neuen Parameter findet man im Manual und in der Muster-Konfigurationsdatei.

Wer die suche nach vorhandenen Timern einfach nur mal ausprobieren möchte, kann sich die folgenden Zeilen in seine Konfigurationsdatei kopieren:

[finalization]

SearchTimerDB = 65
searchTimerDBmaxDev = 10
searchTimerDBmaxNumOfHits = 3
searchTimerDBcheckDeactivatedTimers = disabled
searchTimerDBcheckFolder = disabled
searchTimerDBcheckChannel = disabled
searchTimerDBcheckEvent = enabled
searchTimerDBButtonIgnore = enabled

setReturnCode = 48,1

Das sind sämtliche Parameter , die die Suche konfigurieren. Zum Teil werden den Parametern nur die Default-Werte nochmals zugewiesen, was eigentlich unnötig ist, es erleichtert aber das Experimentieren, wenn die Schlüssel bereits in der Konfigurationsdatei vorhanden sind.
Mit 'setReturnCode = 48,1' weist man den Requester an, einen Fehlercode zurückzugeben, wenn ein Timer gefunden wurde oder eine Aufnahme der Sendung bereits existiert. Standardmäßig tut er das nicht.

Wird durch das Betätigen des Ignorieren-Buttons das Setzen eines Timers (erfolgreich) erzwungen, wird trotzdem der Fehlercode 0 zurückgeben, sodass die Sendung korrekt im TV-Browser als zur Aufnahme vorgesehen markiert wird.

Ich empfehle sehr den Wert von SearchTimerDB einmal runterzusetzen, z.B. auf 30 oder 20 und dabei 'searchTimerDBButtonIgnore' auf 'enabled' zu belassen. Das führt zwar zu vielen „Fehl-Alarmen“ aber der Sinn dieser neuen Funktion wird einem dadurch schneller verständlich.
Und den Timer kann man ja durch den erscheinenden Ignorieren-Button dennoch setzen.

Wer die ähnlich funktionierende Suche nach bereits vorhandenen Aufnahmen noch nicht kennt, kann die Sektion '[finalization]' noch um diese Zeilen ergänzen:

SearchRecDB = 70
searchRecDBmaxDev = 10
searchRecDBmaxNumOfHits = 3
searchRecDBcheckFolder = disabled
searchRecDBcheckChannel = disabled
searchRecDBcheckEvent = enabled
searchRecDBButtonIgnore = enabled

Auch hier gilt analog zur Suche nach Timern: Den Wert von SearchRecDB für Testzwecke einmal auf einen ganz niedrigen Wert setzen.

Hat man die für sich geeigneste Konfiguration gefunden hat, empfehle ich die obigen Schlüssel in die Sektion '[Request Record]' zu verschieben. Die Sektion '[finalization]' wird Request-Typ unabhängig eingelesen. Die Parameter oben machen aber bei einem „Delete-Request“ keinen Sinn, was beim Löschen eines Timers für jeden der Parameter zu der Ausgabe des Hinweises führt, dass der Parameter ignoriert wurde. Das ist zwar nicht schlimm, da es keinen Einfluss auf die Funktion hat, Perfektionisten könnten sich aber daran stören.

 

Verbesserungen:

Ähnlichkeitsprüfung:

Überzählige Leerzeichen werden vor der Ähnlichkeitsprüfung aus den zu vergleichenden Strings vorher entfernt, d.h. es werden mehrfache direkt aufeinanderfolgende Leerzeichen, immer zu einem einzelnen Leerzeichen zusammen gefasst.
Das erhöht die Zuverlässigkeit, bei der Erkennung schon vorhandener Aufnahmen. Gleiches gilt für die neu hinzugekommene Suche nach bereits vorhandenen Timern, die die Aufnahme der Sendung des neuen Timers bereits abdecken.


Ich konnte die Zusammenarbeit dieser Requester-Version mit der neuen RS-Version (1.32) noch nicht testen. Es wird aber vermutlich alles normal funktionieren.
Für Verbesserungsvorschläge, posten von Fehlern, usw. bin ich wie immer sehr dankbar. Haltet euch also nicht zurück, wenn ihr etwas nicht versteht, euch etwas seltsam vorkommt oder euch etwas stört.
Am Add-on für den TV-Movie Clickfinder habe ich diesmal nichts verändert. Wurde von mir nur der Vollständigkeit halber nochmals verlinkt.

VG,

HacMat

 

Download RS Requester: RS Requester 1.0.6.0.zip

Download Clickfinder (unverändert): Clickfinder Add-on 1.0.0.2.zip

Link to comment

Lieber HacMat,

 

leider gibs es nun doch ein Problem.

 

seit Gestern bekomme ich immer eine Fehlermeldung wenn "searchTimerDB = " ungleich "0" und nicht auskommentiert ist.

Ist "searchTimerDB = " gleich "0" oder auskommentiert dann funktioniert die neue "rsreq.exe" einwandfrei.

 

Der Timer wird dann nicht programmiert auch wenn man abschließend nach bestätigung der Fehlermeldung nochmals im RSRequester Fenster OK klickt.

 

Mein Betriebssystem is WinXP und ich nutze den ClickFinder 5.22a sowie record service 1.32.0.0.

 

Grüße und einen guten Rutsch in neue Jahr

 

Klaus

post-101853-0-77401500-1451563604_thumb.jpg

post-101853-0-80875100-1451563610_thumb.jpg

Edited by Klaus Heynen
Link to comment

Hallo Klaus,

 

Vielen Dank für Deine Rückmeldung.

Das sieht sehr nach einem Bug im RS Requester aus.

Kann natürlich auch ein Defekt Deines Computer sein, z.B. defekter Arbeitsspeicher. Das ist aber eher unwahrscheinlich.

Seltsam ist nur, dass der Fehler erst seit gestern auftritt.

Hast Du gestern den RS auf Version 1.32 umgestellt ?

Aber auch bei einer Inkompatibilität mit einer neuen RS-Version darf der Requester nicht abstürzen.

Ich werde mich die nächsten Tage um das Problem kümmen und eine korregierte Version hochladen.

 

Bis dahin alles Gute und Dir auch einen guten Rutsch!

 

HacMat

Link to comment

Hallo Klaus,

mir ist es bisher nicht gelungen den Fehler zu reproduzieren. Die neue RS Version (1.32) habe ich mittlerweile installiert und der Requester funktioniert bei mir auch mit dieser Version absolut stabil.

Um den Fehler zu finden brauch ich deshalb Deine Hilfe:

Klicke doch bitte mal auf das „klicken Sie hier“, um weitere Informationen zu dem Fehler anzeigen zu lassen. Dort sollte der Ausnahmecode (vermutlich c0000005), der Ausnahmeoffset
und der Fehlermodulname (vermutlich rsreq.exe) angezeigt werden. Vielleicht musst Du auch den Debug-Button drücken um diese Informationen abzurufen. Für XP weiß ich das nicht mehr so genau.
Du solltest das möglichst bald machen, bevor die Fehlermeldung möglicherweise nicht mehr erscheint, weil die Auftrittsbedingung nicht mehr erfüllt ist.
Ich brauche dann noch die endgültig von Dir zugewiesenen Werte folgender Parameter:

SearchTimerDB
searchTimerDBmaxDev
searchTimerDBmaxNumOfHits
searchTimerDBcheckDeactivatedTimers
searchTimerDBcheckFolder
searchTimerDBcheckChannel
searchTimerDBcheckEvent
searchTimerDBButtonIgnore

Vielen Dank und ein frohes neues Jahr!

HacMat

Link to comment

Hi HacMat,

 

Bei mir ist der Fehler reproduzierbar.

Es spiel keine Roller ob der Timer oder die Aufnahme schon vorhanden war oder auch nicht RS requester stürzt immer ab wenn "searchTimerDB =" verwendet wird.

 

hier die infos:

 

searchTimerDB = 65
searchTimerDBmaxDev = 10
searchTimerDBmaxNumOfHits = 3
searchTimerDBcheckDeactivatedTimers = disabled
searchTimerDBcheckFolder = disabled
searchTimerDBcheckChannel = disabled
searchTimerDBcheckEvent = enabled
searchTimerDBButtonIgnore = enabled
Der Fehler ist noch da aben wenn ich auf Dbug klicke schließt sich nur das Fenster es kommt kein Debugfenster oder VC oä. hoch.
Allerdings bei weitere Informationen bekommt man was an Microsoft reportet wird, siehe Anhang.
Grüße
Klaus

post-101853-0-61996900-1451826276_thumb.jpg

post-101853-0-19416400-1451826277_thumb.jpg

55d4_appcompat.txt

Link to comment

Ich konnte jetzt mit Deinen Informationen die Programmzeile im Quellcode lokalisieren die den Fehler auslöst. Danke dafür.
Leider ist die Bedingung die zum Auslösen des Fehlers führt auf meinem System nie erfüllt.
Es handelt sich um einen Dereferenzierten Null-Pointer, also einem ungültigen Zeiger.
Warum dieser Zeiger bei Dir an dieser Stelle ungültig ist, kann ich mir nur dadurch erklären, dass das XML-Dokument mit den Timern, welches vom RS Requester beim Recording Service abgerufen wird, anders aufgebaut ist als bei mir.
Aus Deinen Screenshots schließe ich, dass Du mit dem RS von Astra und Hotbird aufnehmen kannst. Ich habe einen Fehler im Quellcode des Requesters entdeckt, der bei einem zusätzlichen Attribut vor dem Attribut 'ID' im Element 'Channel' dazu führt, dass dieser Zeiger ungültig wird. Ich könnte mir vorstellen, dass bei Dir mindestens ein weiteres Attribut vorhanden ist, welches den Fehler verursacht. Vielleicht ein Attribut, dass den Tuner oder den Satelliten noch genauer spezifiziert.
Es macht keinen Sinn, weiter zu suchen, solange ich das XML-Dokument mit den Timern nicht als Fehlerquelle ausschließen kann.
Könntest Du deshalb mit http://host:port/api/timerlist.html?utf8=2 das besagte XML Dokument abrufen und hochladen ? Screenshot geht auch. Auch ein Auschnitt mit 2 oder 3 Timern würde genügen. Nur der Anfang des Dokumentes sollte dabei sein.
2 gesetzte Timer reichen aus, einen für eine Hotbird- und einen für eine Astra-Aufnahme.

Viele Grüße,

HacMat

Link to comment

Hallo HacMat,

 

ich beobachte schon seit einigen Monaten diesen Thread und habe zwischen den Jahren aus Neugierde mal den TV Browser installiert und Dein Plugin konfiguriert.

Großes Lob für die Arbeit die Du Dir machst! Wegen Deinem Plugin bin ich jetzt auch zu einem Nutzer des TV Browsers geworden.

Vielen Dank dafür.

 

Anmerkung: Ich habs zwar hinbekommen TV Browser und Dein Plugin zu installieren, aber eine kleine Anleitung wie man das im installierten TV Browser einrichtet wär ganz hilfreich. Und wenn das vorhanden ist würde ich dem Maschinenraum hier vorschlagen, Dein Plugin doch in die Dowload Area zu übernehmen zu den anderen freien Downloads.

 

Edit: Und über die Laufzeitbeschränkung beim gegenwärtigen Zustand des Plugins müssen wir mal drüber reden ;-)

Edit 2: Hast Du mal drüber nachgedacht, wie man die anderweitig im RS angelegten Timer (Autotimer) in den TV Browser importieren kann?

Edited by Frank Sommer
Link to comment

@Frank Sommer

Hallo Frank,

es freut mich sehr, dass Dir der RS Requester gefällt und Du es trotz der knappen Dokumentation geschafft hast den Requester in den TV-Browser einzubinden. Du hast Recht, eine ausführlichere Installationsanleitung wäre sinnvoll, da das Manual zum RS Requester eher allgemein gehalten ist.
Ich würde sehr gerne eine Installationsanleitung für den TV-Browser anfertigen, und mit aussagekräftigen Screenshots ergänzen. Das müsste ich allerdings auch für den Clickfinder und Tvgenial machen. Die Einbindung des Requesters erfolgt dort wieder ganz anders.
Zur Zeit habe ich aber noch andere Prioritäten. Zum einen, weil man hier im Thread alle für eine erfolgreiche Installation erforderlichen Informationen findet, und zum anderen würde ich gerne selbst erst einmal die Laufzeitbeschränkung loswerden. Die kann ich aber erst abschalten, wenn ich mir sicher bin, dass auch die exotischeren Funktionen (also die, die keiner außer mir nutzt ;-)) stabil laufen. Viel wichtiger ist aber noch, dass ich noch Änderungen am Quelltext vornehme, die erst mal keine Auswirkungen auf die Funktionalität haben. Ich habe beispielsweise die vom RS angeforderten XML-Dokumente in früheren Versionen umständlich mit String-Funktionen geparsed . Das funktionierte zwar absolut stabil, eine geringfügige Veränderung im Aufbau der XML-Dokumente, wie z.B. zusätzliche Attribute oder sogar nur Änderungen bei der Attribut- oder Element-Reihenfolge, hätten aber zu Inkompatibilitäten mit zukünftigen RS-Versionen geführt. Jetzt habe ich mir extra für den Requester einen sehr schlanken SAX-Parser gebastelt. Die Element/Attribut-Reihenfolge und zusätzlich hinzukommende Elemente/Attribute sind nun egal. Inkompatibilitäten mit zukünftigen Versionen dadurch erheblich unwahrscheinlicher.
Wenn ich jetzt keine Laufzeitbeschränkung hätte, gäben sich wahrscheinlich viele Nutzer mit früheren Versionen des RSR zufrieden. Neue Versionen würden nicht angefordert werden, und würden somit auch nicht einen gründlichen Praxis-Test unterzogen. Viele Fehler würden so unendeckt bleiben.
Sich ca. alle 6 Monate eine neue RSR-Version herunterzuladen nervt zwar, ist aber gerade bei dieser geringen Anzahl an Nutzern noch erforderlich. Du kannst, gerne den zuständigen „Machinenraum“ vorschlagen, mein Plug-In in die Download Area zu übernehmen. Mich würde es jedenfalls nicht stören, wenn es dort angeboten würde. Ich glaube es würde vermutlich nur nicht viel nützen, d.h. die Nutzeranzahl würde sich allenfalls geringfügig erhöhen. Außerdem kann es dann passieren, dass die Entwickler des Recording Services mit Support-Anfragen betreffend des RS Requesters genervt werden. Könnte mir vorstellen, dass die das nicht so gut fänden.
Das beste wäre wahrscheinlich, wenn ich das Requester-Manual ins Englische übersetzte, und einen 2. englischsprachigen Thread starten würde. Das brächte wahrscheinlich die meisten neuen Nutzer, und somit auch neue Tester. Im Moment habe ich aber auch hier noch genug zu tun.

 

Edit 2: Hast Du mal drüber nachgedacht, wie man die anderweitig im RS angelegten Timer (Autotimer) in den TV Browser importieren kann?

 

Nein, das habe ich noch nicht. Es wäre aber komfortabel, wenn die Sendungen der über das Web-Interface angelegten Timer auch im TV-Browser markiert würden und auch im TV-Browser wieder löschbar wären. Ich werde darüber nachdenken.

Viele Grüße,

HacMat

Link to comment

@Klaus Heynen

Danke für die Timer-Liste.
Ist ja eine Menge los bei Dir. Ich hoffe Du musst das nicht alles angucken, sondern es gibt welche die Dich dabei unterstützen. ;-)
Eventuell brauche ich noch Deine Sender-Liste.
Ich melde mich dann wieder.

Gruß,

HacMat

 

p.s: Das manuelle Löschen von Auto-Timern sollte dem Requester egal sein.

Edited by HacMat
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...