Langes Tastendrücken mit irexec

  • Hallo,


    ich möchte gern mit irexec ein Kommando an den langen Tastendruck binden. Ich habe das ganze mit einem normalen Tastendruck hinbekommen. Die lircrc sieht so aus:


    Code
    1. begin
    2. button = KEY_RED
    3. prog = irexec
    4. config = sh /home/mrbrooks/script
    5. flags = quit
    6. end

    Wie müsste ich das abändern, so dass das Script nur ausgeführt wird, wenn man den Button länger (sagen wir 2 Sekunden) drückt? Ich habe hier eine Taste des TV-Fernbedienung gemappt die in einigen Situationen am TV doch Funktionen hat die ich brauche.


    Weiß jemand wie das geht?


    Mr. Brooks

  • Könnte sein was ich suche. Auf der Seite sieht es so aus, als ob man danach och etwas eintragen muss. Eine Art Zeitverzögerung? Ich hab mal testweise 2 (für 2 Sekunden) und 2000 (für 2000ms) eingetragen, ändert aber nichts. Die Reaktion erfolgt immer auch mit normalen Drücken der Taste.


    Hab auch Lirc neu gestartet nach jeder Änderung der lircrc.

  • Vorab - du must irexec bzw irxevent neu starten, nicht lirc.

    Dann verstehe ich das so:

    Wenn du 'delay' angibst, wird die Aktion sofort ausgelöst und dann X gewartet, bis von einer Wiederholung ausgegangen wird.

    Wenn du 'ignore_first_events' angibst, wird erstmal X gewartet bevor die erste Aktion folgt, dann weiter wie bei delay.

    X ist dabei 'number of key repeats' und nicht 'time', also wie Friedl schon geschrieben hat, abhängig von deiner Fernbedienung bzw. lircd.conf.

  • Verstehe jetzt nicht genau was du meinst aber ich habe es zwischenzeitlich selber probiert und es funktioniert wie beschrieben.


    Zum Testen kannst du dir ja mal sowas in die lircrc schreiben:

    Dann beendest du den irexec daemon und startest irexec im Terminal.

    Bei Rot kommt dann sofort KEY_RED, dann Pause und nochmal KEY_RED.

    Bei Grün kommt erstmal nix und dann KEY_GREEN.

  • Hi,


    so eine Lösung suche ich auch schon lange um Tasten doppelt zu belegen. Was muss ich machen damit ich, in meinem Fall mit einer Usertaste, ein Skript durch normales drücken einer Taste und ein anderes durch langes drücken der selben Taste aufrufen kann.


    Nach obigem Beispiel müsste ich ja noch folgendes eintragen um dies mit der grünen Taste zu realisieren

    Code
    1. begin
    2. prog = irexec
    3. button = KEY_GREEN
    4. config = echo KEY_GREEN_EINFACH
    5. end

    Wenn ich das nach diesem Schema bei mir mache, wird aber bei langem Druck der Fernbedienung auch das Script ausgeführt welches für den normalen Tastendruck definiert ist, also beide Skripte nacheinander.


    Gruss


    Stefan

    Server: VDR 2.4.0 mit Ubuntu 18.04 x64 mit vaapidevice, Kernel 4.19.0 rc2, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x Technotrend S2-1600, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.0 mit Ubuntu 18.04 x64 mit KODI+vnsiserver, Kernel 4.18.12, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D

  • Die lircrc wird bei jedem Tastendruck von oben nach unten ausgewertet. Dabei führt das unter proc angegeben Tool die unter config angegeben Aktion aus, wenn der unter button angegeben KEY zur gedrückten Taste passt.


    Ich bin mir nicht sicher ob das funktioniert, aber du kannst mal versuchen, die Konfiguration für den kurzen Druck an das Ende der lircrc zusetzen und der langen das 'quit' flag mitzugeben.


    Allerdings würde ich das generell anders angehen und mit 'mode' arbeiten.

  • Hi,


    mit dem quit-flag und ans Ende stellen funktioniert leider nicht, es werden beim langen Tastendruck weiterhin beide Skipte ausgeführt.


    Mode habe ich mir mal angeguckt, verstehe aber nicht wie ich das für mein Vorhaben verwenden könnte. Konkret möchte ich eine Möglichkeit haben die Bilder meiner IP-Cams auf den Bildschirm zu holen, und habe dafür nur eine freie Taste auf der Fernbedienung zur Verfügung.


    So hätte ich das gerne:


    Taste einmal: mplayer IPCam_1 ein

    Taste einmal erneut: mplayer IPCam_1 beenden


    Taste lang: ffplay IPCam_2 ein

    Taste lang erneut: ffplay beenden



    Und als Luxusvariante noch:


    Taste doppelt: mplayer IPCam_3 ein

    Taste doppelt erneut: mplayer IPCam_3 beenden



    Ich hatte das vor längerem auch mal mit einem doppelten Druck auf die Taste realisiert indem ich Button = KeyXXX enstsprechend 2 mal in der Konfiguration angegeben hatte. Das funktioniert aber nicht mehr seitdem im Kernel, ich glaube es war ab Version 4.10, umfangreichere Änderungen vorgenommen wurden.

    Server: VDR 2.4.0 mit Ubuntu 18.04 x64 mit vaapidevice, Kernel 4.19.0 rc2, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x Technotrend S2-1600, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.0 mit Ubuntu 18.04 x64 mit KODI+vnsiserver, Kernel 4.18.12, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D

  • Mit mode kannst du dir verschiedene Layouts für deine FB anlegen, die dann über eine Taste aktiviert werden.

    Dann hast du in jedem mode alle Tasten zu Verfügung und könntest zb CAM1 auf die 1 legen, CAM2 auf die 2 usw

    Es kommt natürlich darauf an, wie dein IR-Setup generell aufgebaut ist (vdr mit --lirc oder über irxevent usw.).


    Ansonsten würde ich versuchen, das wechseln der Aktionen in das jeweilige Skript zu verlagern.

    zB mit pidof prüfen ob der player läuft oder in /var/run was hinterlegen, oder, oder ... da gibt es viele Möglichkeiten.

  • Den Wechsel An/Aus einer Cam mache ich ja wie von dir beschrieben über ein Skript. Ich wollte hier nur nicht jede Kamera nacheinander durchschalten sondern explizit wählen welche angezeigt wird.


    Aber deine Erläuterung zu Mode war genau der Wink mit dem Zaunpfahl der mir gefehlt hatte. Wenn ich das nun richtig verstanden habe drücke ich dann meine freie Taste auf der Fernbedienung wie gehabt einmalig, bin dann in dem sogenannten Modus und kann hier dann, wie schon von dir beschrieben, die Tasten 1 -> Cam1, 2 -> Cam2, 3 -> Kodi usw. belegen.


    Danke, das probiere ich so erstmal aus.

    Server: VDR 2.4.0 mit Ubuntu 18.04 x64 mit vaapidevice, Kernel 4.19.0 rc2, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x Technotrend S2-1600, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.0 mit Ubuntu 18.04 x64 mit KODI+vnsiserver, Kernel 4.18.12, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D

  • So, ich habe das jetzt mal so implementiert

    Das funktioniert auch wie beschrieben jedoch noch mit dem Nachteil, dass die Tasten Key_1 und Key_2 auch noch an den VDR weiter gegeben werden. Dieser schaltet also jedesmal jeweils auf Kanal 1 oder 2 um.


    Wie kann ich denn das verhindern ? Achja, den VDR starte ich mit --lirc

    Server: VDR 2.4.0 mit Ubuntu 18.04 x64 mit vaapidevice, Kernel 4.19.0 rc2, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x Technotrend S2-1600, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.0 mit Ubuntu 18.04 x64 mit KODI+vnsiserver, Kernel 4.18.12, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D

  • Zum Beispiel mit dbus2vdr und

    Zitat
    Code
    1. Interface "remote"
    2. ------------------
    3. - enable/disable the remote
    4. vdr-dbus-send /Remote remote.Enable
    5. vdr-dbus-send /Remote remote.Disable
    6. vdr-dbus-send /Remote remote.Status

  • ok das mache ich beim Aufruf von Kodi ja auch mit svdrpsend. Ich dachte da gäbe es noch einen Parameter innerhalb Lirc den ich nicht kenne und setzen könnte.


    Ich probiere das über svdrpsend nachher mal aus.

    Server: VDR 2.4.0 mit Ubuntu 18.04 x64 mit vaapidevice, Kernel 4.19.0 rc2, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x Technotrend S2-1600, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.0 mit Ubuntu 18.04 x64 mit KODI+vnsiserver, Kernel 4.18.12, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D

  • Ich habe das jetzt mal probiert. Das funktioniert auch einigermaßen aber nicht ganz so wie ich mir das vorstelle.


    Mir fehlt die Möglichkeit den Mode-Modus auch wieder mit der Taste zu verlassen mit der ich ihn aktiviere. Ich drücke jetzt alse meine freie User-Taste und starte den Mode-Modus, kann dann mit 1 oder 2 meine beiden Kameras jeweils über ein Skript Ein/Aus schalten und verlasse bei jedem Druck der Tasten 1 oder 2 den Mode-Modus wieder durch setzen des Flags mode.


    Der Ablauf ist derzeit so

    Code
    1. User-Taste -> Remo Off & Mode-Modus ein
    2. Taste 1 -> Kamera 1 ein & Mode-Modus aus
    3. User-Taste -> Mode-Modus ein
    4. Taste 1 -> Kamera 1 aus & Mode-Modus aus & Remo On
    5. User-Taste -> Remo Off & Mode-Modus ein
    6. Taste 2 -> Kamera 2 ein & Mode-Modus aus
    7. User-Taste -> Mode-Modus ein
    8. Taste 2 -> Kamera 2 aus & Mode-Modus aus & Remo On


    Mein Wunsch wäre, Mode-Modus mit User-Taste Ein/Aus und mit 1 und 2 nach belieben die Cams Ein/Ausschalten. Dies ist wesentlich logischer in der Bedienung und so wahrscheinlich auch der Frau erklärbar ^^

    Code
    1. User-Taste -> Remo Off & Mode-Modus ein
    2. Taste 1 -> Kamera 1 ein
    3. Taste 1 -> Kamera 1 aus
    4. Taste 2 -> Kamera 2 ein
    5. Taste 2 -> Kamera 2 aus
    6. User-Taste -> Remo On & Mode-Modus aus


    Wenn ich das so mache und die auskommentierte config-zeile aktiviere kann ich zwar im Wechsel Remo off/on setzen oder könnte entsprechende Skripte aufrufen, aber ich komme nicht aus dem Mode-Modus.

    Code
    1. begin
    2. prog = irexec
    3. remote = URC_7960
    4. button = KEY_FN
    5. config = svdrpsend remo off && echo "Starte Modus Order, deaktiviere Remote"
    6. # config = svdrpsend remo on && echo "Aktiviere Remote, kann aber den Mode-Modus nicht verlassen !"
    7. mode = order
    8. flags = quit
    9. end


    Mir fehlt also in dieser Sequenz die Möglichkeit beim zweiten Aufruf den Mode-Modus zu verlassen oder dies extern durch ein Skript anzustossen.


    Gibts da irgendeine Möglichkeit die ich noch nicht gefunden habe ?

    Server: VDR 2.4.0 mit Ubuntu 18.04 x64 mit vaapidevice, Kernel 4.19.0 rc2, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x Technotrend S2-1600, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.0 mit Ubuntu 18.04 x64 mit KODI+vnsiserver, Kernel 4.18.12, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D

  • Kopier dir deine User-Taste in den mode Block. Innerhalb des Blocks kannst du für die Taste dann flags = mode|quit benutzen (und mode aus-kommentieren). Bei dem Konstrukt sollte der mode Block oberhalb der User-Taste stehen.


    Wenn du dann die Taste drückst, ist der mode nicht gesetzt, also wird die Taste innerhalb des Blocks ignoriert. Beim zweiten drücken befindest du dich im mode.

    Der Block wird also durchlaufen und die Taste ausgewertet. Die Flags sorgen dann dafür, das du den mode verlässt und der Durchlauf abgebrochen wird.

  • Tja, da warer wieder, der Wink mit dem Zaunpfahl. :wow:thumbup::thumbup:


    DANKE, so klappt es wie gewünscht !


    Und wenn mir jemand verrät warum hier beim einfügen von Text jedesmal meine Formatierung flöten geht, stelle ich den entsprechenden Bereich aus meiner lircrc.conf hier auch noch gerne rein. Ich verliere beim einfügen sämtliche Einrückungen und zwischen jede Zeile wird eine zusätzliche Leerzeile eingefügt.:/ Ich nutze Firefox mit NoScript , lasse hier im Forum aber alle Scripte zu.

    Server: VDR 2.4.0 mit Ubuntu 18.04 x64 mit vaapidevice, Kernel 4.19.0 rc2, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x Technotrend S2-1600, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.0 mit Ubuntu 18.04 x64 mit KODI+vnsiserver, Kernel 4.18.12, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D