gelöst [yavdr ansible focal] vdr-plugin-delsys dual Tuner Konfig

  • Moin,


    meine Empfangssituation soll ein Tuner Mischbetrieb (DVB-T2 / DVB-C) werden. Nach Verständnisfrage letztes Jahr, ist mir klar, es geht aktuell nur per vdr-plugin-delsys.

    Die eingesetzten USB Tuner haben jeweils zwei Tuner. Bedeutet, das Plugin braucht eine angepasste Konfiguration -> 2x DVB-T2 und 2x DVB-C


    Wie kann ich in meiner yavdr ansible Installation das Plugin richtig übersetzen? Oder macht es eventl. auch Sinn ein vorkonfiguriertes vdr-plugin-delsys-dualTuner bereitzustellen?


    Danke

  • es geht aktuell nur per vdr-plugin-delsys.

    Alternativ müsste auch das vdr-plugin-dynamite funktionieren, falls sich das mit den anderen Plugins nicht beißt (in den PPAs für focal ist das verfügbar).

    Wie kann ich in meiner yavdr ansible Installation das Plugin richtig übersetzen?

    Für das reguläre VDR-PPA könnte man das z.B. so machen:

    Code: ~/.quiltrc
    # see https://wiki.debian.org/UsingQuilt#Encapsulated
    d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done
    if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then
            # if in Debian packaging tree with unset $QUILT_PATCHES
            QUILT_PATCHES="debian/patches"
    
            if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
    fi

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Super, danke für die Hilfe!


    Ist umgesetzt. Man wächst mit seinen Aufgaben.

  • Zu dem Zeitpunkt hatte ich noch kein DVB-C Signal, also in der Theorie so konfiguriert:

    Code
    // TODO: configuration
      dvb_c_action[0] = action_deny; // device 0: no DVB-C
      dvb_c_action[1] = action_deny; // device 1: no DVB-C
      dvb_t_action[2] = action_deny; // device 2: no DVB-T
      dvb_t_action[3] = action_deny; // device 3: no DVB-T

    der zweite WinTV dualHD (für DVB-C) war dann aber abgesteckt.


    Jetzt habe ich DVB-C Signal und den zweiten USB dual Tuner dauerhaft angesteckt. Leider startet vdr so nicht.


    Ich glaube die Krux ist die Adapter Reihenfolge?

    Code
    root@vdr2:/home/rossi# dmesg | grep adapter
    [   11.287754] dvbdev: DVB: registering new adapter (1-6:1.0)
    [   11.287757] em28xx 1-6:1.0: DVB: registering adapter 0 frontend 0 (Silicon Labs Si2168)...
    [   11.308159] dvbdev: DVB: registering new adapter (1-6:1.0)
    [   11.308161] em28xx 1-6:1.0: DVB: registering adapter 1 frontend 0 (Silicon Labs Si2168)...
    [ 1118.929999] dvbdev: DVB: registering new adapter (1-1:1.0)
    [ 1118.930000] em28xx 1-1:1.0: DVB: registering adapter 2 frontend 0 (Silicon Labs Si2168)...
    [ 1118.945457] dvbdev: DVB: registering new adapter (1-1:1.0)
    [ 1118.945458] em28xx 1-1:1.0: DVB: registering adapter 3 frontend 0 (Silicon Labs Si2168)...

    Wenn ich das System nur mit dem DVB-T2 Stick starte, läuft vdr.


    Dann stoppe ich ihn, stecke den zweiten dual Tuner an und vdr startet ohne Probleme.


    Weiter habe ich mit --adapter=0,2,1,3 usw. probiert... ohne Erfolg.


    Wie löse ich dieses Problem?

  • Ja, das könnte ein ziemliches Glückspiel werden, welche der beiden Karten da zuerst initialisiert wird - aber wenn da einer der beiden die Initialisierung beim Neustart zuverlässig gewinnt, kannst du ja die Kabel umstecken oder das Plugin mit umgedrehter Konfiguration neu kompilieren.


    Mit dem dynamite-Plugin könnte man auf einzigartige Attribute wie die Seriennummer oder den USB-Port Matchen - der Ansatz dürfte die robustere Lösung sein.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Die dritte Alternative ist das Plugin 'easyvdr'. *anmerk*

  • Die Idee mit Antennenleitung (DVB-T2/DVB-C) bzw. Stick umstecken hatte ich auch schon - brachte kein Erfolg.


    Ich vermute eher das beim Adapter anlegen gemischt wird. Deswegen der Ansatz über vdr DVB Adapterreihenfolge.

    Beide Adapter, je USB Device, haben ja das gleiche Eingangssignal. Also Adapter 0 u. 1 DVB-T2 und Adapter 2 u. 3. DVB-C.


    Ich editiere /etc/vdr/conf.d/00-vdr.confund ergänze --device=2,3,0,1?

    Oben habe ich --adapter geschrieben - das ist falsch.


    Ändere ich so die DVB Adapterreihenfolge?

    Code
    ...
    vdr: invalid DVB device number: 2,3,0,1
    ...

    Stehe irgendwie auf dem Schlauch.

  • Per udev müsste man Seriennummer vom Tuner an Adapter 0 und 1 bzw. 2 und 3 binden können?

  • Die dritte Alternative ist das Plugin 'easyvdr'. *anmerk*

    Wo gibt es da die Möglichkeit einen Tuner auf bestimmte Empfangswege zu beschränken? In README und DeviceManager.cpp habe ich auf die Schnelle nichts gefunden, das das erlaubt...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Per udev müsste man Seriennummer vom Tuner an Adapter 0 und 1 bzw. 2 und 3 binden können?

    Man kann den Device-Name nicht mehr per udev ändern, das Höchste der Gefühle wäre ein Symlink. Ich weiß aber nicht, ob der VDR das akzeptiert, wenn du ihm Device-Nummern für Symlinks übergibst - Versuch macht klug...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Und wie ändere ich die DVB Adapter Reihenfolge? per --device=2,3,0,1 geht es nicht...

  • seahawk1986 ab Zeile 200, void cDeviceManager::AddHook(int index)

  • Das kann ich in der Version 2021.01.24 von https://www.gen2vdr.de/wirbel/easyvdr/index2.html nicht finden - gibt es da eine aktuellere Quelle?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Tatsächlich, meine Version ist neuer als die auf der Webseite. Schau ich gelegentlich mal, warum.

  • Ich hätte hier einen sehr experimentellen Patch, der versucht die Zuordnung von Device und verfügbarem Signal automatisch herauszufinden.

    Dazu werden nach dem Start von VDR bei jedem Programmwechsel zuerst die noch nicht verwendeten Devices auf eine Signal geprüft. Wenn es zu keinem Lock kommt, wird ein Retune ausgelöst und das Gleiche mit dem nächsten ungetesteten Device durchgeführt.


    vdr_rossi : In deinem Fall sollte der VDR damit spätestens nach dem 2. Retune ein passendes Frontend gefunden haben, dass dauert ungefähr 25 Sekunden. Nach einem weiteren Programmwechsel sollte klar sein welche der 2 Devices/4 Frontends DVB-T/C empfangen können - oder im Umkehrschluss eben nicht empfangen können.


    Diese Zuordnung ist unter idealen Bedingungen relativ einfach herauszufinden, schwieriger wird es bei schwankendes oder keinem Signal oder durch fehlerhafte Tuningparameter - daran kann dieser Patch dann möglicherweise scheitern.

    Du kannst ja einmal Testen, ob er für dich brauchbar ist.

    LG Helmut

  • Danke für den Patch.


    Möchte als erstes den delsys.c Ansatz verfolgen. Vermute das bei dual Tunern nicht zwangsläufig die Adapterreihenfolge passt bzw. gemixt wird.


    Ist es möglich von /dev/dvb/adapter0... Rückschlüsse auf Tuner Seriennummer zu schließen?


    Und wo wir gerade bei Workarounds sind, man könnte auch den Treiber modifizieren :) So hätte kls das gerne, dass der Treiber nur die (eine) Empfangsart durchgibt.


    Achja und vdr Device bzw. Adapter Reihenfolge per Config - hab ich auch noch nicht geklickt!?

  • Treiber modifizieren ist Problemlösung an der falschen Stelle.

    Die Hardware kann ja nichts dafür, was du gerade für Kabel dran anschließt und meldet was sie kann.



    Die Reihenfolge /dev/dvb/adapter0... wird von udev bestimmt.


    In der Reihenfolge wie der Kernel erfolgreich die Initialiserung von dvb hardware durch den Treiber gemeldet bekommt, ruft der kernel udev auf : 'neue HW gefunden'.

    Wer zuerst kommt, bekommt die kleinste Nummer.


    udev legt dann nach den vom Anwender festgelegten Regeln /etc/udev/rules.d/.. dafür device nodes und evtl zusätzlich symlinks in /dev an.


    Normal ist die aufsteigend nummerierte Reihenfolge, aber du kannst z.B. deine eigene udev Regel schreiben,

    welche auf die Seriennr deiner Hardware schaut und dazu einen festen Dateinamen anlegt.

  • Normal ist die aufsteigend nummerierte Reihenfolge, aber du kannst z.B. deine eigene udev Regel schreiben,

    welche auf die Seriennr deiner Hardware schaut und dazu einen festen Dateinamen anlegt.

    Das hat früher mal funktioniert, aber mittlerweile darf man den Kernel-Namen nicht mehr ändern - damit bleibt nur noch das Anlegen von Symlinks: https://www.freedesktop.org/so…stemd/man/udev.html#NAME1 bzw. https://git.kernel.org/pub/scm…it/tree/src/udev.xml#n316

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Konnte das Problem lösen.


    Seriennummer der USB Tuner lässt sich so herausfinden:

    Code
    root@vdr2:/home/rossi# find /sys/devices -name 'dvb*frontend*'
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/dvb/dvb0.frontend0
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/dvb/dvb1.frontend0
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/dvb/dvb2.frontend0
    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/dvb/dvb3.frontend0
    root@vdr2:/home/rossi# dmesg | grep 'usb 1-1' | grep -i serialnumber | tail -1
    [    1.510328] usb 1-1: SerialNumber: 0815471111
    root@vdr2:/home/rossi# dmesg | grep 'usb 1-6' | grep -i serialnumber | tail -1
    [    2.390355] usb 1-6: SerialNumber: 0815471122

    Ok, damit wusste ich dann welcher USB Tuner an welchem Empfangskabel hängt.


    Einfaches tauschen der USB Tuner führte zu keinem Erfog.


    Erst als ich hier drehte:

    Code
    // TODO: configuration
      dvb_t_action[0] = action_deny; // device 0: no DVB-T
      dvb_t_action[1] = action_deny; // device 1: no DVB-T
      dvb_c_action[2] = action_deny; // device 2: no DVB-C
      dvb_c_action[3] = action_deny; // device 3: no DVB-C

    lief es.


    Danke an alle!

  • Hast du mal mit udevadm nachgesehen, ob die udev-Regel greift bzw. die Attribute für die Frontend-Geräte auch tatsächlich gesetzt werden? Also z.B.:

    Code
    udevadm info --query=all --attribute-walk --name /dev/dvb/adapter0/frontend0

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

Jetzt mitmachen!

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