ShellSkript für SVDRP-Kommandos

  • Hi
    Ich würde gerne auf dem VDR per OSD eine Meldung anzeigen lassen wenn mein Telefon klingelt.
    In meinem Netzwerk steht ein Eisfair-Server mit ner ISDN-Karte und da läuft capi2text was es erlaubt bei eingehenden Anrufen ein Skript auszuführen. Das funktioniert alles soweit, jedoch brauch ich Hilfe bei dem Skript:
    Es soll ein Shellskript sein, also kein Perl.
    Auf dem VDR-Rechner kann man per SVDRP-Kommando ein Text anzeigen lassen. Ich müsste also per Socket den MESG-Befehl versenden. Dazu könnte man ja das auf dem Eisfair vorhandene Telnet benutzen.
    Weiss einer wie das Skript aussehen muss um eine Telnet-Verbindung aufzubauen, den Befehl MESG abzusenden und danach die Telnet-Verbindung wieder schliesst?
    Oder hat jemand noch ne andere Idee ohne Telnet wie man Daten an den VDR über Socket schicken könnte. Am besten mit Boardmitteln, wobei das natürlich ein weitläufiger Begriff ist ;)


    Danke im Vorraus
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Hallo Jarny,


    Vorweg: kein Perl weil keine Laufzeit dafuer da ist oder wegen des Programmierens?
    Falls Perl-Runtime installiert ist, kannst Du ganz einfach ueber ein Shellscript svdrpsend.pl aufrufen:


    Code
    svdrpsend.pl mesg "Konvertierung von $name beendet"


    Dieses Perl-Script macht genau das und Du musst das Rad nicht neu erfinden. Das Skript liegt zum. den VDR-Sourcen bei, sollte aber auch bei Dir irgendwo installiert sein, einfach mal danach suchen.
    Also, einfach den Aufruf in Dein Shellscript einbinden (ggf. mit "screen"-Kommando).



    hth, Gruss,
    Timo

    yaVDR 0.4-pre1 on ASUS 1015PN -> Big Screen and XBMC remote on Android.


  • Auf meinem Eisfair läuft Perl. Ich hatte auch versucht das genannte Skript dort auszuführen aber es kam zu ner Fehlermeldung: ' .... bad Interpreter' oder so.
    Ich dachte, dass die Perl-Version falsch ist. Eben gerade hab ich dann aber den Fehler gefunden: Die Rechte des Skripts haben nicht gestimmt (!) Naja, bin ja noch Anfänger
    Ich werd dann wohl das Perlskript benutzen, aber interessieren würds mich trotzdem, ob man das mit Boardmitteln ohne Perl lösen könnte.


    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Bei mir läuft ein Script das die Meldungen mit mit netcat (nc) absetzt


    svdrp-displaymsg

    Code
    netcat -w 10 $VDRIP 2001 <<eof
    mesg $1
    quit
    eof

    <edit>
    Aufruf z.B.: svdrp-displaymsg "eine OSD-Nachricht..."


    <edit2>
    Habe gerade gesehen, dass du linvdr verwendest, dort muss das Script wie folgt aussehen:

    Code
    nc $VDRIP 2001 <<eof
    mesg $1
    quit
    eof

    $VDRIP musst du durch IP oder Hostname deines VDR ersetzen oder am Beginn des Script die Variable initialisieren.

    VDR1: AMD Duron-1300, 512mb RAM, Nexus-S rev2.1, Airstar 2, Debian Lenny, kernel: 2.6.28-etobi.3, VDR 1.6.0-17 experimental/extensions von Tobi
    VDR2: Athlon XP-M-2600+, 512mb RAM, TT Prem 1.3 DVB-S, Skystar2, Airstar 2, Debian Lenny, kernel: 2.6.28-etobi.3, VDR 1.6.0-17 experimental/extensions von Tobi
    Extern: Activy300, Gen2VDR V2

    2 Mal editiert, zuletzt von geeg07 ()

  • Klappt auch nur mit der bash:

    Code
    ( echo -e "mesg Hallo :-)\\nquit" ; sleep 1 ) >/dev/tcp/localhost/2001


    :D


    Ohne das "sleep 1" bekomme ich im Syslog ein "ERROR (svdrp.c,405): Broken pipe" ... da scheint die bash wohl zu schnell wieder zu trennen?


    ("/dev/tcp/..." ist übrigens kein echtes Device sondern wird von der bash gesondert behandelt)

  • Zitat

    Original von Greywolf("/dev/tcp/..." ist übrigens kein echtes Device sondern wird von der bash gesondert behandelt)


    Schick ! Man lernt nie aus.

    Powered by Point of View ION330 und Mystique SaTiX-S2 Dual
    Geguckt wird auf einem 52PFL5605H/12 per HDMI mit Atmolight Quattro
    Audio optisch per Yamaha RX-V459 auf einem Teufel Concept P
    Non-TV content über XBMC und boblight
    Remote Harmony 525 durch Atric-IR
    Remote und Streaming mit Motorola XOOM und AndroVDR sowie Daroon Player
    Streaming auf ZBOX ID-81 und Desktop per streamdev
    All based on selfbuild OpenenELEC master


    Nebenbei noch ein par andere VDRs

  • Ok, Danke an alle!
    Der Vierzeiler von geeg07 funktioniert. Genau sowas hatte ich gesucht.


    amair u. free-x. Ich hatte den Fehler gefunden warum das PerlSkript nicht richtig lief. Es war nur ein simples Rechteproblem gewesen. Steht schon weiter oben.


    Danke und Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher


  • Hi


    muß mal in dieser Sache nachhaken ...


    ich spiele auch grade mit dem svdrpsend.pl rum. Wenn ich " svdrpsend.pl lste 1 ; sleep 1" in der Konsole eingebe, rauschen die EPG-daten auf den Bildschirm, aber das Log erzählt mir dann was von broken pipe, und die letzte ausgegebene Zeile der EPG-daten ist "timeout". kann ich den Wert hinter sleep erhöhen? wenn ja, bis auf was? 10? 100? ... oder gibts nen anderen Trick, um die broken pipe zu verhindern ?

  • Die Angabe sind Sekunden.


    sleep 1 wartet 1 Sekunde

    VDR1: AMD Duron-1300, 512mb RAM, Nexus-S rev2.1, Airstar 2, Debian Lenny, kernel: 2.6.28-etobi.3, VDR 1.6.0-17 experimental/extensions von Tobi
    VDR2: Athlon XP-M-2600+, 512mb RAM, TT Prem 1.3 DVB-S, Skystar2, Airstar 2, Debian Lenny, kernel: 2.6.28-etobi.3, VDR 1.6.0-17 experimental/extensions von Tobi
    Extern: Activy300, Gen2VDR V2

  • Zitat

    Original von sigiberlin
    Problem ist: auch wenn ich 100 angebe, kommts zu dem Timeout ...


    Das "sleep" hinter dem svdrpsend.pl ist nutzlos, da es erst ausgeführt wird, wenn svdrpsend bereits fertig ist und die Verbindung getrennt hat. Der Trick klappt so nur mit der bash Lösung.


    Das dürfte aber eigentlich eh nicht das Problem sein, da svdrpsend (im Unterschied zu meiner bash Variante) die Antwort auf jeden Befehl brav auslesen sollte und nicht nach dem Senden der Befehle sofort trennt. Mehr kann ich momentan nicht weiterhelfen, da mein VDR "außer Reichweite" ist...

  • sigiberlin
    Versuch mal den svdrp-Timeout zu erhöhen (Menü -> Sonstiges -> SVDRP trennen bei Inaktivität (s)). Obwohl der Standardwert von 300s eigentlich reichlich ist.

    Gruss
    SHF


  • Poste einmal den Inhalt deiner svdrpsend.pl.

    VDR1: AMD Duron-1300, 512mb RAM, Nexus-S rev2.1, Airstar 2, Debian Lenny, kernel: 2.6.28-etobi.3, VDR 1.6.0-17 experimental/extensions von Tobi
    VDR2: Athlon XP-M-2600+, 512mb RAM, TT Prem 1.3 DVB-S, Skystar2, Airstar 2, Debian Lenny, kernel: 2.6.28-etobi.3, VDR 1.6.0-17 experimental/extensions von Tobi
    Extern: Activy300, Gen2VDR V2


  • danke :) werds dann mal mit nem höheren $Timeout an dieser telle probieren :-))

  • Das hätte ich dir jetzt auch vorgeschlagen :mua
    Allerdings sind 10 Sekunden auch schon relativ lang für die Ausgabe der EPG-Daten für nur einen Sender...

    VDR1: AMD Duron-1300, 512mb RAM, Nexus-S rev2.1, Airstar 2, Debian Lenny, kernel: 2.6.28-etobi.3, VDR 1.6.0-17 experimental/extensions von Tobi
    VDR2: Athlon XP-M-2600+, 512mb RAM, TT Prem 1.3 DVB-S, Skystar2, Airstar 2, Debian Lenny, kernel: 2.6.28-etobi.3, VDR 1.6.0-17 experimental/extensions von Tobi
    Extern: Activy300, Gen2VDR V2

Jetzt mitmachen!

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