Skript & HowTo: "WerbeZapper" yaVDR mit 1-Click nach Werbung automatisch zurückschalten lassen. (Timer)

  • Hallo,
    Schon seit längerem Suche ich nach einem Plugin bzw. einem äquivalent für yaVDR.
    Die Funktion des Plugins soll ein einfacher timer sein der bei Druck auf eine definierte taste den aktuellen Sender und die Uhrzeit speichert, und dann nach x Minuten (sollte vielleicht irgendwo einstellbar sein) wieder zu diesem Sender zurück schaltet.


    Dies ist ein einfaches timer plugin für alle mit nur einem tuner (die keine PiP Funktion nutzen können) dass nachdem es einmal konfiguriert wurde wieder zurück auf den bei Aktivierung aktiven Channel schaltet.



    Das Skript ist noch in Bearbeitung, ich habe aber ein leicht zu verstehendes HowTo in Post Nr 8 erstellt.


    Wer dann noch mehr will passt das Skript einfach dem aktuellen Stand an (lediglich Copy & Paste).


    Vielen Dank an 3PO der hier das Skript bereitstellt und weiterentwickelt.

    Meine Hardware:

    2 Mal editiert, zuletzt von I<3HTPC ()

  • So als quick'n'dirty Lösung könntest Du ein kleines Bashscript schreiben, z.B. so:


    werbezapper.sh

    Bash
    #!/bin/bash
    
    
    DELAY="300" # <-- Time in Seconds
    
    
    CHANNEL="$(svdrpsend CHAN |grep 250 |awk '{print $2}')"
    sleep $DELAY
    svdrpsend CHAN $CHANNEL


    Bei "DELAY" trägst Du die gewünschte Zeit ein


    Dann noch einen Eintrag in der commands.conf


    Code
    Werbezapper         : screen -dm sh -c "der/Pfad/zum/werbezapper.sh"


    Jetzt brauchst Du nur noch das Script vor dem "Werbezappen" mit:


    Menü --> Befehle --> Werbezapper


    aufzurufen. ;)

  • Hi,
    vielen Dank für die Lösung.
    Leider habe ich keine Möglichkeit gefunden das Skript auszuführen.
    Ich weiß nicht ob ich zu dumm dafür bin, aber mit diesem Eintrag in der commands.conf erscheint bei mir nichts im entsprechenden Menüeintrag.


    Gibt es auch eine Möglichkeit das Skript über die Fernbedienung auszuführen?
    Ich kenne diese Möglichkeit nur für Plugins, über

    Code
    /etc/vdr/keymacros.conf

    Meine Hardware:

  • Da so etwas ein einfach zu realisierendes Erstlings-Plugin wäre, warum baust du dir nicht so etwas selbst?

  • Hi,
    :D Ja, da hast du natürlich recht, ich meinte mehr so eine 1-Klick Lösung.


    Wie auch immer, vdr hatte ich gestoppt, aber es geht irgendwie dennoch nicht.


    Ich habe etwas rumprobiert mit der 1-Klick Lösung und bin mittlerweile soweit gekommen:


    1. Skript erstellen wie du oben beschrieben hast.


    2. Knopf zum Starten auswählen (in meinem Fall die nicht belegte Teletext Taste, dazu den Systemcode der Fernbedienung raus bekommen):
    2.1 sudo stop eventlircd
    2.2 sudo service vdr stop
    2.3 sudo ir-keytable -t
    2.4 Jetzt den Knopf drücken und schauen was dabei raus kommt. In meinem Fall war alles richtig gemappt und daher wurde auch die "KEY_TEXT" Taste gedrückt.
    3. sudo nano /etc/lirc/lircrc und hier einen neuen Eintrag machen
    3.1 Die oben gewählte Taste hier einsetzen wo bei mir KEY_TEXT steht.

    Code
    begin    prog = irexec    button = KEY_TEXT    config = start werbezapperend


    3.2 Dieses Programm "werbezapper" muss jetzt wohl mit sudo nano werbezapper.conf /etc/init in /etc/init hinterlegt werden.


    Und soweit bin ich jetzt.
    Ich verstehe nicht ganz wie ich das Skript als Programm im init hinterlegen kann, dass ich es damit ausführen kann.


    Beste Grüße

    Meine Hardware:

  • LÄUFT!
    Dank dir vielmals!
    Skript läuft jetzt über 1 Klick auf der Fernbedienung.
    Ich musste den HTPC komplett neu starten, ein reboot des vdr Dienstes alleine hat seltsamerweise nicht funktioniert.


    Hier nochmal das komplette Howto (mit freundlicher Unterstützung von 3PO):



    1. Bash Skript erstellen
    sudo nano werbezapper.sh /home/yavdr
    mit dem Inhalt:


    Code
    ##!/bin/bash
    DELAY="5m" # <-- Time in Seconds
    CHANNEL="$(svdrpsend CHAN |grep 250 |awk '{print $2}')"
    svdrpsend MESG Sender wird nach $DELAY wiederhergestellt
    sleep $DELAY
    svdrpsend CHAN $CHANNEL



    2. Knopf zum Starten auswählen (in meinem Fall die nicht belegte Teletext Taste, dazu den Systemcode der Fernbedienung raus bekommen):
    2.1 sudo stop eventlircd
    2.2 sudo service vdr stop
    2.3 sudo ir-keytable -t
    2.4 Jetzt den Knopf drücken und schauen was dabei raus kommt. In meinem Fall war alles richtig gemappt und daher wurde auch die "KEY_TEXT" Taste gedrückt.
    3. sudo nano /etc/lirc/lircrc und hier einen neuen Eintrag machen
    3.1 Die oben gewählte Taste hier einsetzen wo bei mir KEY_TEXT steht.


    Code
    begin
    prog = irexec
    button = KEY_TEXT
    config = /home/yavdr/werbezapper.sh
    end


    3.2 sudo start eventlircd
    3.3 sudo service vdr start


    4. Reboot

    Taste drücken, umschalten und automatisch zurückgeschaltet werden :tup

    Meine Hardware:

    2 Mal editiert, zuletzt von I<3HTPC ()

  • Wenn es "verbose" sein soll, dann evtl. so:



  • Du kannst auch noch eine Abfrage einbauen, ob das Script schon läuft: ;)


  • Mittlerweile wird hier ja ein richtig nettes tool draus dass sicher seine Freunde hier im Forum finden wird.Hast du das Skript am Laufen?
    Bei mir möchte es irgendwie nicht funktionieren, bin schon die ganze Zeit am suchen.
    Habe meine Stärken nicht in der Programmierung, das einzige was mir jetzt auffällt ist CHANNEL_ACT=$"CHANNEL" (Anführungszeichen nach $).


    Wenn es dann mal läuft würde ich noch einen Vorlauf zum Delay einbauen.
    Ich plane jetzt mal grob so:


    DELAY0="300s"
    VORLAUF="60s"
    DELAY1=DELAY0-VORLAUF


    sleep $DELAY1
    "Werbezapper schaltet auf Kanal $CHANNEL_ACT in $VORLAUF zurück"
    sleep $VORLAUF
    ...zurückschalten


    Der Zweck ist dass man vom Umschalten nicht so überrascht wird. (Es soll ja Leute geben die nicht mehr wissen was sie vor 5 Minuten auf die Fernbedienung gehauen haben :P )
    Falls das irgendwie mit vertretbarem Aufwand möglich ist könnte man während dieser Vorlaufzeit beim Starten einer neuen Instanz die Abfrage von oben die PID killen lassen.
    Ich weiß nicht ob man das machen kann, da man ja einen Status dieses Skriptes damit abrufen muss, und nicht nur ob es in einer anderen Instanz schon mal läuft.
    Aber wäre sicher ne coole Option wenn man sich doch überlegt nicht umzuschalten.

    Meine Hardware:

  • So?



  • Ich erhalte den Fehler:



    /home/yavdr/werbezapper.sh: Zeile 8: Syntaxfehler beim unerwarteten Wort »then«


    /home/yavdr/werbezapper.sh: Zeile 8: `If [ "$PID" != "" ]; then'



    :wand

    Meine Hardware:

  • So passt es: ;)


  • Habe nochmal 2-3 Anpassungen vorgenommen, Position des svdrpsend nach dem Festlegen der Variablen gelegt (so dass man unbesorgt umschalten kann wenn man die Nachricht sieht), und die Ausgaben teilweise verändert um keine Verwechslungen zu bekommen.


    Einzigst die Abfrage ob der Prozess bereits läuft hat bei mir so nicht funktioniert, ich habe es mal so ausprobiert, läuft aber auch nicht :D
    Bei deiner Lösung startet er den Prozess zwar nicht während der andere läuft, aber dafür direkt nach beenden des ersten Prozesses.


    Und gibt es eine Möglichkeit bei erneuter Ausführung beide Prozesse zu beenden, also das Umschalten quasi abzubrechen?


    Habe es einfach mal bei der ersten Abfrage versucht über kill -9 (PID) zu machen, aber dafür brauche ich root was nicht über das Skript geht :evil:


    Meine Hardware:

  • Die Killerlösung wäre etwas in der Art:
    Werbung beginnt der VDR schaut im Hintergrund weiter den Sender
    und nutzt dann etwas in der art wie markadd im Hintergrund um zu erkennen wann es weitergeht und schaltet dann um ^^

  • Dazu braucht man 2 Tuner und damit wäre der Sinn dieses Skripts verfehlt.
    Ich habe aber gelesen dass es da im easyVDR wohl ein Plugin gibt das das kann, aber das nicht besonders zuverlässig funktioniert weil die Werbung mittlerweile nicht mehr zuverlässig genug erkannt wird.

    Meine Hardware:

  • Dazu braucht man 2 Tuner und damit wäre der Sinn dieses Skripts verfehlt


    also ich hol auf meiner 1 Tuner den PIP Tuner via Streamdevice auf ner zweiten vdr Instanz vom Server, nur mal als Gedankenspiel...


    Christian

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



Jetzt mitmachen!

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