1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

TUTORIAL [RECALBOX] HDR und Hyperion nicht perfekt aber ein Anfang

Discussion in 'German Talk' started by Mambojambo, 24 September 2019.

  1. Mambojambo

    Mambojambo Member

    Messages:
    40
    Hardware:
    RPi3
    Ich habe mich die letzte Woche massiv mit dem Thema beschäftigt und habe für mich erstmal eine brauchbare Lösung gefunden Hyperion mit HDR zu nutzen. Ganz unter dem Motto "sharing is caring" teile ich meine Erkenntnis mit euch. Das Tut ist für die Recalbox und setzt ein bereits funktionierendes Hyperion / Ambilight voraus. Bei Bedarf mache ich dazu ein separates Tutorial. Die Lösung sollte sich auch mit etwas Modifikation auch auf andere OS wie LibreElec anwenden lassen. Wenn Zeit ist mache ich dazu auch nochmal ein Test / Tutorial.

    Was ihr braucht:
    • Ein IR-Modul z.B. TSOP4838 (ab ~ 0,80 Euro)
    • Jumper Kabel um den Empfänger anzuschließen, Alternativ geht auch Löten
    • Einen Raspberry PI mit Recalbox und konfiguriertem Hyperion
    • Eine Fernbedienung, wenn möglich eine die Ihr nicht mehr braucht

    Idee hier ist die Verwendung von zwei verschiedenen Konfigurationsdateien, welche per Fernbedienung aktiviert werden.


    1. IR Modul

    [​IMG]

    Empfänger Modul wie den TSOP4838 wird benötigt. Angeschlossen wird das ganze so:

    [​IMG]
    Solltet ihr wie ich die PINs 1 und 6 bereits belegt haben. Zum Beispiel für eine aktiven Kühler, dann müsst ihr für die Stromzufuhr (3,3V und GND) alternative PINs belegen. Hilfe dazu bietet dieses Schema:

    [​IMG]

    2. config.txt

    Als nächstes muss die config.txt angepasst werden. Der Eintrag dtoverlay=lirc-rpi muss ggf nur auskommentiert werden. Damit aktivieren wir das IR-Modul und der PI ist in der Lage Infrarotsignale zu empfangen. Mit der Ergänzung gpio_in_pin=17 wird der GPIO festgelegt an dem das Signal eingeht. Man könnte hier auch einen anderen GPIO festlegen.
    Code:
    #ggf  mount -o remount rw, /
    nano config.txt
    dtoverlay=lirc-rpi,gpio_in_pin=17
    reboot

    3. Signaltest

    Mit einer beliebigen Fernbedienung welche auf 38 kHz sendet, kann man prüfen ob am PI etwas ankommt. Dazu folgenden Befehl ausführen und beliebige Tasten auf eurer Fernbedienung drücken. Info: Die meisten gebräuchlichen Fernbedienungen für Fernseher DVD-Player usw. senden auf 38 kHz.
    Code:
    mode2 -d /dev/lirc0
    Sollte euer PI was aufschnappen sieht das ganze etwa so aus:
    Code:
    space 2207679
    pulse 8992
    space 4523
    pulse 519
    ...
    Mit STRG + C könnt ihr den Test beenden.


    4. Tasten anlernen

    Wenn wir wissen, dass der PI Signale bekommt, müssen wir Ihm noch beibringen diese Tasten zu erlernen. Damit wir mit diesem Input auch etwas anfangen können. Mit dem Befehl # irrecord --list-namespace könnt ihr die möglichen Tastenbezeichnungen anzeigen lassen, welche erlernt werden sollen. Für das Aktivieren der HDR-Konfig habe ich KEY_1 und für die SDR-Konfig KEY_2 verwendet. Ihr könnt aber auch andere Tastenbezeichnungen aus der Liste verwenden.
    Code:
    irrecord --list-namespace
    Mit nachstehenden Befehlen können wir die Codes der Fernbedienung aufzeichnen. Erst den Dienst lirc beenden, dann die Codes aufzeichnen. Dazu den Anweisungen in der Konsole folgen.
    Code:
    /etc/init.d/S25lircd stop
    irrecord -d /dev/lirc0 -f /HDR.lircd.conf
    
    Euer aufgezeichneter Remote Code könnte dann so aussehen:
    Code:
    # Please take the time to finish this file as described in
    
    # https://sourceforge.net/p/lirc-remotes/wiki/Checklist/
    # and make it available to others by sending it to
    # <[email protected]>
    #
    # This config file was automatically generated
    # using lirc-0.10.1(default) on Sun Sep 22 21:42:32 2019
    # Command line used: -d /dev/lirc0 -f /recalbox/share/system/HDR.lircd.conf
    # Kernel version (uname -r): 4.14.62-v7
    #
    # Remote name (as of config file): HDR
    # Brand of remote device, the thing you hold in your hand:
    # Remote device model nr:
    # Remote device info url:
    # Does remote device has a bundled capture device e. g., a
    #     usb dongle? :
    # For bundled USB devices: usb vendor id, product id
    #     and device string (use dmesg or lsusb):
    # Type of device controlled
    #     (TV, VCR, Audio, DVD, Satellite, Cable, HTPC, ...) :
    # Device(s) controlled by this remote:
    
    begin remote
    
      name  HDR
      flags RAW_CODES|CONST_LENGTH
      eps            30
      aeps          100
    
      gap          108125
    
          begin raw_codes
    
              name KEY_1
                 8929    4582     478     644     477     643
                  478    1764     478    1764     478     652
                  469    1764     478    1764     478     643
                  478     643     478     643     478     643
                  480    1761     479     642     479    1763
                  491    1751     479     642     479     655
                  466    1763     479    1763     508     613
                  479    1763     479     683     437    1764
                  479     642     479    1766     476     643
                  478     642     479    1763     479     642
                  479    1763     479     642     479    1764
                  478
    
               name KEY_2
                 8927    4585     478     644     476     642
                  479    1763     480    1762     479     642
                  480    1783     459    1762     479     642
                  487     634     528     593     479     642
                  480    1799     442     643     478    1763
                  479    1763     479     642     479     642
                  479     642     479    1763     479     642
                  479    1763     479     642     479    1763
                  479     642     479    1762     480    1763
                  503     617     480    1763     479     645
                  477    1762     479     642     479    1763
                  479
    
          end raw_codes
    
    end remote
    Nun verschieben (oder kopieren) wir noch die Datei, damit lirc diese findet und etwas damit anfangen kann und starten den Dienst neu.
    Code:
    #ggf  mount -o remount rw, /recalbox/share/system/.config/lirc
    mv /HDR.lircd.conf /recalbox/share/system/.config/lirc/lircd.conf
    /etc/init.d/S25lircd restart
    Mit dem Befehl irw können wir testen ob die gelernten Tasten funktionieren.
    Code:
    irw
    Der erfolgreiche Test könnte dann so aussehen:
    Code:
    0000000000ff30cf 00 KEY_1 /recalbox/share/system/.config/lirc/lircd.conf
    0000000000ff18e7 00 KEY_2 /recalbox/share/system/.config/lirc/lircd.conf

    5. Befehle an die Tasten binden

    Wenn ihr irexec ohne Optionen oder Parameter ausführt, wird es nach einer Konfiguration suchen und diesen Pfad ausgeben. Bei Recalbox ist das /recalbox/share/system/.lircrc. Also lege ich diese Datei an und lege fest was beim Druck der Tasten KEY_1 und KEY_2 passieren soll.
    Code:
    nano /recalbox/share/system/.lircrc
    Im Vorfeld habe ich bereits zwei Konfigurationen für Hyperion angelegt (HDR_hyperion.config.json / SDR_hyperion.config.json). Eine für HDR und eine für SDR. Beide Dateien liegen mit der aktiven Konfiguration im selben Verzeichnis. Wenn ich KEY_1 auf meiner Fernbedienung drücke soll die HDR Konfig und bei KEY_2 die SDR Konfig aktiviert werden. Dazu kopiere ich beim Tastendruck die jeweilige Datei auf den Namen hyperion.config.json und starte den Dienst neu. Mir ist bewusst, dass ich den Neustart mit restart auch umsetzen kann. So war es aber zuverlässiger.
    Code:
    begin
        button = KEY_1
        prog = irexec
        config = cp /recalbox/share/system/configs/hyperion/HDR_hyperion.config.json /recalbox/share/system/configs/hyperion/hyperion.config.json;/etc/init.d/S25hyperion stop;/etc/init.d/S25hyperion start
    end
    
    begin
        button = KEY_2
        prog = irexec
        config = cp /recalbox/share/system/configs/hyperion/SDR_hyperion.config.json /recalbox/share/system/configs/hyperion/hyperion.config.json;/etc/init.d/S25hyperion stop;/etc/init.d/S25hyperion start
    end

    6. irexec als Daemon

    Damit die Befehle bei Tastendruck ausgeführt werden, muss das Programm irexec laufen. Man kann es in der Konsole starten und schonmal testen ob alles funktioniert. Aber es soll ja immer im Hintergrund ausgeführt werden. Also brauchen wir noch einen Daemon bzw Service.

    Auf der Recalbox liegen diese unter /etc/init.d. Diese werden in alphanumerischer Reihenfolge abgearbeitet. Für lirc und hyperion gibt es bereits einen Daemon. irexec soll nach den beiden gestartet werden. Ich habe mich für den Namen S85irexec enschieden.
    Code:
    cd /etc
    mount -o remount rw, /
    
    cd /init.d
    nano S85irexec
    Inhalt der S85irexec:
    Code:
    #!/bin/sh
    #
    # Start irexec
    #
    # Support for irexec, config file in /recalbox/share/system/.lircrc
    #
    
    
    test -f /usr/bin/irexec || exit 0
    
    case "$1" in
      start)
        echo -n "Starting lircexec daemon: irexec"
        start-stop-daemon --start --quiet --exec /usr/bin/irexec -- -d /recalbox/share/system/.lircrc
        echo "."
        ;;
      stop)
        echo -n "Stopping lircexec daemon: irexec"
        start-stop-daemon --stop --quiet --exec /usr/bin/irexec
        echo "."
        ;;
      restart|force-restart)
        echo -n "Stopping lircexec daemon: irexec"
        start-stop-daemon --stop --quiet --exec /usr/bin/irexec
        sleep 1
        echo -n "Starting lircexec daemon: irexec"
        start-stop-daemon --start --quiet --exec /usr/bin/irexec -- -d /recalbox/share/system/.lircrc
        echo "."
        ;;
      *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
    esac
    
    exit 0
    Zum Schluss noch die Dateirechte anpassen.
    Code:
    chmod 755 S85irexec
    Beim nächsten Neustart sollte eure Recalbox die Hyperion Konfig per Fernbedienung umschalten können.


    TIPPS / TRICKS:

    Eine Konfiguration für HDR zu bauen ist eigentlich das Selbe wie für SDR. Man muss nur in der Lage sein die Testbilder in HDR auszugeben und auf dieser Basis dann die Konfiguration von Hyperion vornehmen, genau wie die meisten es bereits für SDR gemacht haben.
    Ich habe dazu den Amazon 4K FireTV Stick benutzt. Dieser lässt sich auf HDR einstellen, sodass sämtliche Inhalte darüber in HDR ausgegeben werden. Dann habe ich 4K-Testbilder in meine Cloud geladen und diese dann per Web im Silk-Browser des Fire-TV aufgerufen. Mit Hypercon hab ich dann die Konfiguration erstellt und als HDR_hyperion.config.json gespeichert.


    Anmerkung:

    Wenn es meine Zeit erlaubt und es gewünscht ist, werde ich noch ein Tutorial für LibreElec machen. Aber vielleicht hilft ja diese Anleitung schon dem Ein oder Anderen. Eventuell gibt es ja noch einen schöneren Weg die Konfiguration zu wechseln. Vielleicht auch komplett automatisch. Freue mich auf euer Feedback und Anregungen!


    Meine SDR_hyperion.config.json (Auszug)
    Code:
    // Automatically generated configuration file for Hyperion ambilight daemon
    // Notice: All values are explained with comments at our wiki: wiki.hyperion-project.org (config area)
    // Generated by: HyperCon (The Hyperion deamon configuration file builder)
    // Created with HyperCon V1.03.3 (22.10.2017)
    
    {
        // DEVICE CONFIGURATION
        "device" :
        {
            "name"       : "MyHyperionConfig",
            "type"       : "apa102",
            "output"     : "/dev/spidev0.0",
            "rate"     : 1000000,
            "colorOrder" : "bgr"
        },
    
        // COLOR CALIBRATION CONFIG
        "color" :
        {
            "channelAdjustment" :
            [
                {
                    "id"   : "default",
                    "leds" : "*",
                    "pureRed" :
                    {
                        "redChannel"        : 230,
                        "greenChannel"        : 0,
                        "blueChannel"        : 0
                    },
                    "pureGreen" :
                    {
                        "redChannel"        : 120,
                        "greenChannel"        : 180,
                        "blueChannel"        : 0
                    },
                    "pureBlue" :
                    {
                        "redChannel"        : 40,
                        "greenChannel"        : 0,
                        "blueChannel"        : 180
                    }
                }
            ],
            "temperature" :
            [
                {
                    "id"   : "default",
                    "leds" : "*",
                    "correctionValues" :
                    {
                        "red"     : 255,
                        "green"    : 255,
                        "blue"     : 255
                    }
                }
            ],
            "transform" :
            [
                {
                    "id"   : "default",
                    "leds" : "*",
                    "hsl" :
                    {
                        "saturationGain"    : 0.8500,
                        "luminanceGain"        : 1.0000,
                        "luminanceMinimum"        : 0.0000
                    },
                    "red" :
                    {
                        "threshold"     : 0.0000,
                        "gamma"         : 2.4000
                    },
                    "green" :
                    {
                        "threshold"     : 0.1000,
                        "gamma"         : 2.6000
                    },
                    "blue" :
                    {
                        "threshold"     : 0.1000,
                        "gamma"         : 2.6000
                    }
                }
            ],
        // SMOOTHING CONFIG
            "smoothing" :
            {
                "type"            : "linear",
                "time_ms"         : 250,
                "updateFrequency" : 100.0000,
                "updateDelay"     : 1
            }
        },
    Meine HDR_hyperion.config.json (Auszug)
    Code:
    // Automatically generated configuration file for Hyperion ambilight daemon
    
    // Notice: All values are explained with comments at our wiki: wiki.hyperion-project.org (config area)
    // Generated by: HyperCon (The Hyperion deamon configuration file builder)
    // Created with HyperCon V1.03.3 (22.10.2017)
    
    {
        // DEVICE CONFIGURATION
        "device" :
        {
            "name"       : "MyHyperionConfig",
            "type"       : "apa102",
            "output"     : "/dev/spidev0.0",
            "rate"     : 1000000,
            "colorOrder" : "bgr"
        },
    
        // COLOR CALIBRATION CONFIG
        "color" :
        {
            "channelAdjustment" :
            [
                {
                    "id"   : "default",
                    "leds" : "*",
                    "pureRed" :
                    {
                        "redChannel"        : 180,
                        "greenChannel"        : 0,
                        "blueChannel"        : 0
                    },
                    "pureGreen" :
                    {
                        "redChannel"        : 0,
                        "greenChannel"        : 180,
                        "blueChannel"        : 0
                    },
                    "pureBlue" :
                    {
                        "redChannel"        : 30,
                        "greenChannel"        : 0,
                        "blueChannel"        : 180
                    }
                }
            ],
            "temperature" :
            [
                {
                    "id"   : "default",
                    "leds" : "*",
                    "correctionValues" :
                    {
                        "red"     : 255,
                        "green"    : 255,
                        "blue"     : 255
                    }
                }
            ],
            "transform" :
            [
                {
                    "id"   : "default",
                    "leds" : "*",
                    "hsl" :
                    {
                        "saturationGain"    : 1.8000,
                        "luminanceGain"        : 1.0000,
                        "luminanceMinimum"        : 0.0000
                    },
                    "red" :
                    {
                        "threshold"     : 0.2000,
                        "gamma"         : 2.5000
                    },
                    "green" :
                    {
                        "threshold"     : 0.2000,
                        "gamma"         : 3.0000
                    },
                    "blue" :
                    {
                        "threshold"     : 0.2000,
                        "gamma"         : 3.0000
                    }
                }
            ],
        // SMOOTHING CONFIG
            "smoothing" :
            {
                "type"            : "linear",
                "time_ms"         : 250,
                "updateFrequency" : 100.0000,
                "updateDelay"     : 1
            }
        },
    Quellen:
    https://www.recalbox.com/de/diyrecalbox/
    https://tutorials-raspberrypi.de/raspberry-pi-ir-remote-control/
    http://www.vishay.com/docs/82459/tsop48.pdf
    https://tutorials-raspberrypi.de/wp-content/uploads/TSOP4838-180x135.png
    https://tutorials-raspberrypi.de/wp...pi-ir-remote-control-Steckplatine-440x500.png
    https://indibit.de/wp-content/uploads/2015/08/Raspberry-Pi-2-Model-B-GPIO-Belegung-616x800.png
    http://git.openembedded.org/openembedded/plain/recipes/lirc/files/lircexec.init
    http://lirc.org/html/
     

    Attached Files:

    • 4K.zip
      File size:
      10.8 KB
      Views:
      5
    Last edited: 24 September 2019
    • Like Like x 2
  2. Mambojambo

    Mambojambo Member

    Messages:
    40
    Hardware:
    RPi3
    Eine kleine Ergänzung. Das IR-Modul kann laut technischen Spezifikationen auch bis zu 5,5V vertragen. Hab es daher mal ein den Pin2 angeschlossen mit 5V und somit die Empfangsreichweite deutlich erhöht.

    Die nächste Evolutionsstufe wäre natürlich Sprachsteuerung durch Alexa via HA-Bridge. Danke an jochenf für den Tipp.
     
  3. soliver84

    soliver84 New Member

    Messages:
    11
    Hardware:
    RPi3, 32/64bit, +PhilipsHue
    HI du hast dir da echt viel mühe gemacht :), werde das mir mal anschauen und testen!

    Wie wäre es einen SSH Button der das ausführt auf dem Android Handy zu machen ist das nicht besser?

    Grüße
    Soliver84