Mehr Tasten für Remote Plugin ?

  • Habe an meiner Nexus-S eine UniversalFB mit dem Remote Plugin am laufen.
    Aufgrund des Spitzentips in der Howto Sektion konnte ich alle Tasten dazu bewegen einen (unterschiedlichen) RC5 Code zu liefern.


    Die FB bietet unterhalb der normalen Tasten noch 8 sogenannte SAT Tasten. Ein paar davon habe ich mit Extras wie Schedule, während der Einrichung, belegt. Nach allen Tasten im VDR Setup sind aber noch ein paar von denen übrig geblieben.


    Kann ich diese unter irgendwelchen frei erfunden Namen jetzt einbinden, um darauf eigene Makros zu legen?

  • Hi


    bei LIRC geht das mit irexec, aber ob das mit dem Remote-Plugin geht, weis ich nicht!

    Dirk

  • So, das von oben war nicht so der Bringer, bei langen Befehls Ketten ging es in die Hose ......... somit noch mal ausführlich:


    run programs with one button press (remote-plugin)
    =================================


    enable
    -------------
    - debug mode

    Code
    ~ perl -pi -e "s/^\/\/#define DEBUG/#define DEBUG/" /usr/local/src/VDR/PLUGINS/src/remote/remote.c
    ~ cd /usr/local/src/VDR
    ~ make all plugins

    press
    -------------
    - a key on your remote control, and read the number from your syslog:

    Code
    ~ tail -1 /var/log/messages | awk -F "/dev/input/event0: press " '{ print $2 }'
    000000010001000b
    ^^^^^^^^^^^
    Key

    now
    -------------
    - write this in the macro.conf, e.g:

    Code
    Key-000000010001000b-cmd () {/usr/local/src/VDR/svdrpsend.pl MESG bla bla bla; }
           ^^^^^^^^^^^               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
           Key                                   Command

    last
    -------------
    - but not least, start the macro.sh, e.g:

    samples
    -------------

    Code
    /video/macro.conf
    
    
    Key-0000000100010324-cmd () { vmstat 1 10 | awk '{a+=$14;b+=$15;c+=$16} END {a=a/10;b=b/10;c=c/10;printf "CPU stats:\nus\tsy\tid\n"a"\t"b"\t"c"\n"}' | xargs /usr/local/src/VDR/svdrpsend.pl MESG; }
    Key-000000010001032d-cmd () { echo "1"; echo "2"; echo "3"; }
    Key-000000010001052e-cmd () { killall -9 vdr; }
    Key-000000010001032d-cmd () { poweroff; }´

    script
    -------------


    Das Board hats nicht so mit dem Format, deshab das das stettige formatieren (edit) .......

  • Vielen Dank für Deine Mühen. Hab gestern auch mal an den Plugin Autor gemailt und da hat sich heute Morgen schon gezeigt, daß man einfach manchmal den Wald für lauter Bäumen nicht sieht.
    Ich war so davon überzeugt, daß USER1-USER9 die Tastenbelegen für verschiedene Benutzer ermöglicht, daß ich diese einfach weggelassen habe.


    Stehen natürlich für user-defined und sind genau das, was ich eigentlich haben wollte ;)

  • Zitat

    Original von Ramirez
    Vielen Dank für Deine Mühen. Hab gestern auch mal an den Plugin Autor gemailt und da hat sich heute Morgen schon gezeigt, daß man einfach manchmal den Wald für lauter Bäumen nicht sieht.
    Ich war so davon überzeugt, daß USER1-USER9 die Tastenbelegen für verschiedene Benutzer ermöglicht, daß ich diese einfach weggelassen habe.


    Stehen natürlich für user-defined und sind genau das, was ich eigentlich haben wollte ;)


    Kann man mit den USER Keys denn externe Programme aufrufen?


    Wäre mir neu, das konnte bis dato nur irexec (lirc), die USER Keys sind doch nur für den internen Pfeffer, oder habe ich einen Denkfehler?

  • Hallo


    Dennoch: Sind alle Keys aufgebraucht, (auch die User-Keys) was machst Du dann? Doppelt belegen ist nicht.


    Du kannst mit den Keys einfach mal nicht so Sachen anstellen die User mit lirc können.


    Gieb einfach mal "irexec" in die Suche oben ein, dann wirst Du verstehen was gemeint ist.


    Hier mal ein Beispiel (ist vielleicht nicht das beste):


    Du möchtest VDR neu Starten?


    -> MENU -> Einstellungen -> Neustart -> OK


    oder


    -> MENU -> Befehle -> Command -> Befehl


    oder in der keymacros.conf mit einem User-Key Definiert:


    macrokey -> key1 -> key2 -> key3 -> bis Du letztendlich da ankommst wo dieser Befehl ausgeführt wird?


    Kommt ein Plugin dazu, ändert sich die Reihenfolge (im Menu) oder in der commands.conf, hast Du schlechte Karten denn Du darfst schon wieder die keymacros.conf editieren.


    Anders mit dem Script von oben, Key bleibt immer der selbe, unabhängig von irgend etwas.


    Kommt "Key" so und so in dem Syslog an dann führe dieses oder jenes definierte Kommando aus:


    Key-000000010001000b-cmd () {killall -9 vdr ; }


    Es giebt sicher noch mehr Beispiele, Dirk hat es ja oben auch schon angedeutet, das Remote Plugin ist in dieser Hinsicht, etwas "beschränkt" zumindest im vergleich zu irexec, man kann mit dem kleinen Script Sachen anstellen, die vorher nicht möglich waren, oder nur mit irexec.


    MFG Ronny

  • Hallo


    Ich habe den Debug Modus im remote.c aktiviert, indem ich wie in der Anleitung von anonymous die Zeile //#define DEBUG in #define DEBUG geändert habe.
    Nur sehe ich nun in /var/log/message absolut keinen Output.
    Natürlich habe ich das Remote Plugin neu kompiliert.


    Der einzige Unterschied zu der Anleitung von anonymous ist, dass ich die Version 0.2.0 des Remote Plugins verwendet.
    Da ich den Code nicht lesen (verstehen) kann, kann ich mir auch nicht helfen.


    Könnt Ihr mit helfen ?


    Danke
    Silent

  • Hast Du manchmal den log abgeschaltet?


    --log=1 durf somit nicht in der runvdr stehen, sonnst kommt nix in den messages an.


    Im log sollte es so kommen:


    vdr[1377]: /dev/input/event0: press 0000000100010021


    Plugin ist die Version egal 0.2.0 passt.


    Das hier ist jedenfalls nicht Bringer:


    while :
    do
    key="Key-`tail -1 $syslog | awk -F "$events: press " '{ print $2 }' | sed -e "s/ //g"`-cmd"
    if (grep -q "^$key" $config); then
    logger -i "$0 run function $key"
    $key
    fi
    usleep 100000
    done


    Alle Nase lang wird somit die letzte Zeile des syslogs gelesen, dazu kommt noch awk/sed/grep (Last).


    Bin mir sicher das es da eine bessere Lösung geben sollte, der Schnippsel kann auf keinen fall eine Lösung sein.


    Vielleicht hat ja wer eine Idee?


    Habe Oliver mal gemailt und gefragt wie es ausschaut einen Daemon ähnlich wie irexec für das Plugin zu bauen, um unbegrenzt Sachen zu zu ordnen, nun er hat keine Zeit, das wäre halb so wild.


    Er sieht auch keinen Bedarf für sowas.


    Achso ist der Syslog überhaupt activ? (syslogd)


    MFG Ronny

  • hi


    Log verwende ich in der runvdr nicht. Dadurch sollte ja level 3 defaultmäßig gesetzt sein.
    Ich sehe auch bei starten vom VDR Meldungen in /var/log/messages. (Plugins laden)


    Silent

  • Zitat

    Original von silent
    hi


    Log verwende ich in der runvdr nicht. Dadurch sollte ja level 3 defaultmäßig gesetzt sein.
    Ich sehe auch bei starten vom VDR Meldungen in /var/log/messages. (Plugins laden)


    Silent


    Wenn VDR schreibt in /var/log/messages muß es doch passen mach doch mal clean.


    rm -f /usr/local/src/VDR/PLUGINS/lib/libvdr-remote.so.1.2.6


    cd /usr/local/src/VDR/PLUGINS/src/remote


    make clean


    cd ../../..


    make all plugins


    MFG Ronny

  • Ich habe es nun nochmals so gemacht wie du gesagt hast. Leider Ohne Erfolg.


    Hier nochmals ein Auszug aus remote.c


    Code
    #define DEBUG
    
    
    #ifdef DEBUG
    #define DSYSLOG(x...)    dsyslog(x)
    #else
    #define DSYSLOG(x...)
    #endif


    Aufruf in runvdr

    Code
    VDRCMD="$VDRPRG -w 60 -t /dev/tty8 -c /etc/vdr \
            -L /usr/local/src/VDR/PLUGINS/lib \
            -s /usr/local/bin/vdrshutdown \
            -Premote \
    ..........
            -Pstreamdev \
            $*"


    und aus /var/log/messages


    Code
    Nov 21 23:02:38 vdr vdr[12204]: starting plugin: streamdev
    Nov 21 23:02:38 vdr vdr[12240]: Streamdev: Server thread started
    Nov 21 23:02:38 vdr vdr[12240]: Streamdev: Listening (HTTP) on port 3000
    Nov 21 23:02:38 vdr vdr[12204]: switching to channel 4
    Nov 21 23:02:38 vdr vdr[12229]: timer 1 exist
    Nov 21 23:02:49 vdr sshd(pam_unix)[12699]: session opened for user root by (uid=0)
    Nov 21 23:03:17 vdr vdr[12204]: switching to channel 1
    Nov 21 23:03:30 vdr vdr[12204]: switching to channel 4
    Nov 21 23:08:08 vdr vdr[12204]: connect from 127.0.0.1, port 32792 - accepted
    Nov 21 23:08:10 vdr vdr[12204]: closing SVDRP connection


    Beim Kanalwechsel sollte ich ja eine Message vom Remote Plugin sehen?


    Silent

  • Beim Kanalwechsel sollte ich ja eine Message vom Remote Plugin sehen?
    ------------------------
    Ja genauso sollte es dann kommen:
    Nov 21 23:17:04 linux vdr[1926]: /dev/input/event0: press 0000000100010021
    Nov 21 23:17:04 linux vdr[1918]: switching to channel 4
    Nov 21 23:17:06 linux vdr[1926]: /dev/input/event0: press 0000000100010021
    Nov 21 23:17:06 linux vdr[1918]: switching to channel 5
    Nov 21 23:17:10 linux vdr[1926]: /dev/input/event0: press 0000000100010021
    Nov 21 23:17:10 linux vdr[1918]: switching to channel 6


    Sorry mir fählt auch nichts mehr ein ....


    MFG Ronny

  • Hallo,


    habe den Thread jetzt erst gesehen.


    Zitat

    Original von silent
    Ich habe es nun nochmals so gemacht wie du gesagt hast. Leider Ohne Erfolg.
    ...
    Beim Kanalwechsel sollte ich ja eine Message vom Remote Plugin sehen?


    Poste mal den Inhalt von /etc/syslogd.conf.
    Vermutlich werden die Debug-Ausgaben einfach nur unterdrückt.


    Allgemein:
    Der Hauptgrund, wieso ich so etwas nicht im Remote-Plugin drin haben möchte, ist folgender:
    Im Plugin habe ich keine Information darüber, welche Tasten vdr zugeordnet sind und welche nicht. Damit würde ich mir nur Ärger mit Leuten einhandeln, die nicht wissen, was sie tun.


    Was ihr hier machen wollt, kann man aber leicht realisieren:
    Da gleichzeitig mehrere Prozesse von /dev/input/eventX lesen können, braucht man nur ein kleines Programm zu schreiben, was so etwas Ähnliches wie irexec macht. Den Code kann man z.B. aus evtest.c oder dem entsprechenden Teil des remote-Plugins nehmen. Eine solche Lösung ist viel sauberer, da der vdr-Teil und "irexec"-Teil getrennt sind. Außerdem braucht das Plugin überhaupt nicht angefaßt zu werden.


    edit:
    Habe hierzu ein kleines Programm hochgeladen: evexec.c.



    CU
    Oliver

  • Morgen


    Eine solche Lösung ist viel sauberer, da der vdr-Teil und "irexec"-Teil getrennt sind.
    ------------
    Ja und macht Definitiv einen besseren wie der Pfeffer von oben ^^^^^^^^^^^.


    Funktioniert auch einwandfrei, Last = 0.


    Mal eine Frage, macht das so Sinn?


    -------------------</usr/bin/evexec.sh>--------------------
    #!/bin/sh


    evexec /dev/input/event0 1 "svdrpsend.pl MESG test_key_1" &
    evexec /dev/input/event0 2 "svdrpsend.pl MESG test_key_2" &
    evexec /dev/input/event0 3 "svdrpsend.pl MESG test_key_3" &
    ...
    -----------------------------------------------------------


    Wenn ich nur die evexec.sh mit "&" ausführe (und die anderen "&" im Script weglasse) führt es nur die erste Zeile aus, weiß nun auch nicht so recht. (wenns ein ganzes packen an "commands" definiert wurde)


    Was meinst Du?


    Sollte doch keine Rolle spielen, oder?


    Krönung wäre natürlich programm/config getrennt wie bei irexec (lirc), gleich einen ganzen Block einlesen (mit allen commands).


    Aber es funktioniert ja auch so, kurz und knapp ist das Ok mit den unmengen an "&" s.


    MFG Ronny

  • Hi,


    Zitat

    Original von anonymous
    Mal eine Frage, macht das so Sinn?
    ...


    Sieht gut aus.


    Zitat

    Wenn ich nur die evexec.sh mit "&" ausführe (und die anderen "&" im Script weglasse) führt es nur die erste Zeile aus, weiß nun auch nicht so recht. (wenns ein ganzes packen an "commands" definiert wurde)


    Was meinst Du?


    Sollte doch keine Rolle spielen, oder?


    Irrtum. Ohne '&' wartet die Shell mit der Ausführung des nächsten Kommandos, bis das vorige abgeschlossen ist. Da evexec jedoch nicht von allein stoppt, wird nur das erste Kommando ausgeführt...


    Zitat

    Krönung wäre natürlich programm/config getrennt wie bei irexec (lirc), gleich einen ganzen Block einlesen (mit allen commands).


    Klar, kann man machen. Bringt aber eigentlich nichts. Es macht ja keinen großen Unterschied, ob ich eine conf-Datei oder ein Shell-Script erstelle. Wer das unbedingt haben will, kann es mal als kleine C-Übung programmieren. :)


    Übrigens, die Methode mit mehreren evexec's hat auch einen kleinen Vorteil:
    Wenn eines der per evexec gestarteten Programme hängenbleibt, funktionieren alle anderen Kommandos immer noch.


    Zitat

    Aber es funktioniert ja auch so, kurz und knapp ist das Ok mit den unmengen an "&" s.


    Ja, ist korrekt. Die '&' sind eigentlich auch nichts Besonderes: So startet man in der Shell halt Programme im Hintergrund.


    Gruß,
    Oliver

  • Hi


    Wer das unbedingt haben will, kann es mal als kleine C-Übung programmieren.
    -----
    Genau :)


    Peinlich unser eins hatte mal einen Kurs auf der Penne (was sind ein paar wochen, alles queer beet c, delphi, basic), seit dem nicht mehr mit befasst (und irgend wie auch nie wirklich gebraucht), auch schon 2 Jahre her, wenn man nicht am Ball bleibt schauts mau aus.


    "Hello World" bekomme ich wohl noch hin :-)), C ist auch nicht jedermanns Sache.


    Ansonnsten Danke für das kleine Dingens.


    MFG Ronny

  • Hallo


    Sorry das ich mich erst so spät melde.
    Du hast natürlich recht UFO die debug meldungen werden unterdrückt DANKE


    Und das kleine C Programm kann ich leider frühestens heute Abend probieren,
    aber da es ja bei anonymous funktionierte wird es das wohl bei mir auch tun ;)


    Danke nochmals
    Silent

Jetzt mitmachen!

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