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

SOLVED API Ambilight Hyperion.ng

Discussion in 'German Talk' started by agreen, 27 September 2020.

  1. agreen

    agreen New Member

    Messages:
    16
    Hardware:
    RPi3
    ich möchte gerne über ein JavaScript das Ambilight steuern (z.b. im iobroker).
    gibt es eine Liste der Befehle des Hyperion.ng?
    In der Wiki finde ich leider nix.
     
  2. Esjay

    Esjay Member

    Messages:
    59
    Hardware:
    RPi3, +PhilipsHue
    • Like Like x 1
  3. agreen

    agreen New Member

    Messages:
    16
    Hardware:
    RPi3
    Danke, das habe ich bereits gefunden gehabt.
    Ich bin ein totaler Anfänger in Thema Json ...

    ich versuche über den iobroker Hyperion Adaptor mich zu verbinden, bekomme aber einen Fehler, dass er sich nicht verbinden kann.
    Alternative wäre es, wenn ich im iobroker mir eigene Skripte zum steuern schreiben könnte.
     
  4. Esjay

    Esjay Member

    Messages:
    59
    Hardware:
    RPi3, +PhilipsHue
    Hast du mal testweise sämtliche Security Funktionen abgeschaltet?
     
  5. agreen

    agreen New Member

    Messages:
    16
    Hardware:
    RPi3
    wenn du die Sicherheit unter Netzwerk meinst, ja habe ich schon probiert.
    mit meinem iPad kann ich ich mich ja verbinden ... nur mit dem iobroker Adaptor gehts wohl nicht.
     
  6. Esjay

    Esjay Member

    Messages:
    59
    Hardware:
    RPi3, +PhilipsHue
    Ich kenne mich mit IO-Broker leider nicht aus, daher weiß ich nicht wie genau dieser Adapter aufgebaut ist.
    Ist er speziell für Hyperion, vermute ich, dass er auf Hyperion Classic basiert. Dementsprechend wirst du die Verbindung mit Hyperion NG nicht hinbekommen.
    Ist es ein allgemeiner JavaScript Adapter, bin ich noch ahnungsloser.

    Wenn du deine eigenen Skripte schreibst, musst doch irgend etwas auf deinen Request zurückbekommen oder?
     
  7. agreen

    agreen New Member

    Messages:
    16
    Hardware:
    RPi3
    ja, es passiert wohl auf JavaScript

    Code:
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at Socket.Readable.push (_stream_readable.js:224:10)
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at readableAddChunk (_stream_readable.js:269:11)
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at addChunk (_stream_readable.js:288:12)
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at Socket.emit (events.js:198:13)
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at Hyperion.<anonymous> (/opt/iobroker/node_modules/hyperion-client/lib/Hyperion.js:29:8)
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at Hyperion.parseData (/opt/iobroker/node_modules/hyperion-client/lib/Hyperion.js:51:31)
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at Array.forEach (<anonymous>)
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at Hyperion.<anonymous> (/opt/iobroker/node_modules/hyperion-client/lib/Hyperion.js:64:16)
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: at /opt/iobroker/node_modules/iobroker.hyperion/hyperion.js:260:105
    host.iobroker    2020-10-03 14:07:18.113    error    Caught by controller[0]: TypeError: Cannot read property '0' of undefined
    hyperion.0    2020-10-03 14:07:17.647    info    (1580) terminating
    hyperion.0    2020-10-03 14:07:17.602    info    (1580) Terminated (NO_ERROR): Without reason
    hyperion.0    2020-10-03 14:07:17.602    info    (1580) terminating
    hyperion.0    2020-10-03 14:07:17.074    info    (1580) cleaned everything up...
    deswegen dachte ich, ich erstelle mir einfach selbst ein script ... aber ich weiss leider nicht wie das mit json funktioniert.
    ich möchte ja nur LED ausschalten, Quelle auswählen und LED einschalten.
     
  8. Paulchen-Panther

    Paulchen-Panther Moderator Staff Member Developer

    Messages:
    902
    Hardware:
    RPi1/Zero, RPi3, 32/64bit, +Arduino, +nodeMCU/ESP8266
  9. agreen

    agreen New Member

    Messages:
    16
    Hardware:
    RPi3
    • Like Like x 1
  10. Esjay

    Esjay Member

    Messages:
    59
    Hardware:
    RPi3, +PhilipsHue
    Du könntest noch mittels http-request arbeiten. Ich weiß aber nicht, wie genau das in IO-Broker funktioniert. Ich könnte dir höchstens zeigen, wie ich das aus FHEM heraus mache.

    Alternativ per cUrl: curl -X POST -i 'http://192.168.178.76:8090/json-rpc' --data '{"command":"componentstate","componentstate":{"component":"LEDDEVICE","state":true}}'
     
    Last edited: 5 October 2020
    • Like Like x 2
  11. agreen

    agreen New Member

    Messages:
    16
    Hardware:
    RPi3
    also das mit curl funktioniert schon mal ... super vielen dank.
    kannst du mir noch ein Auszug aus FHEM zusenden, dann bin ich glücklich :)
     
  12. Paulchen-Panther

    Paulchen-Panther Moderator Staff Member Developer

    Messages:
    902
    Hardware:
    RPi1/Zero, RPi3, 32/64bit, +Arduino, +nodeMCU/ESP8266
    • Like Like x 1
  13. agreen

    agreen New Member

    Messages:
    16
    Hardware:
    RPi3
    vielen Dank, ich komme jetzt klar
    somit kann ich über Skripte in iobroker steuern.
     
    • Like Like x 1
  14. bLIZZo

    bLIZZo New Member

    Messages:
    2
    Hardware:
    RPi3, +Arduino, +PhilipsHue
    Hallo zusammen, bin recht neu im umgang mit Hyperion. Das Forum hat mir schon ziemlich geholfen bisher. Ich arbeite viel mit beispielen und fuxe mich so in die Thematik rein, wie etwas effektiv funktioniert weiss ich meistens nicht aber Probiere mich dann meistens bis zum erwünschten ergebniss durch.

    Nun dank diesem Thread kann ich die Hauptinstanz von Hyperion.NG steuern und es funktioniert alles so wie ich dies brauche.

    Nun scheitere ich aber vollends an der Steuerung einer zweiten Instanz. Hab mich zwar durchs Wiki gekämpft aber ich verstehe es einfach nicht und komme auch nach Stunden rumprobieren nicht weiter.

    Könnte sich einer der das ganze versteht sich die Zeit nehmen mir ein Beispiel zu schreiben wie ich per HTTP Request z.B das LED Device einer zweiten Instanz ein und aus oder einschalte?

    Besten Dank für die Mühe,
    bLIZZo
     
  15. Esjay

    Esjay Member

    Messages:
    59
    Hardware:
    RPi3, +PhilipsHue
    Magst du mal zeigen, was du bisher versucht hast? Nach ein paar Stunden, sollte ja schon irgendetwas heraus gekommen sein an Code Schnipseln.
     
  16. bLIZZo

    bLIZZo New Member

    Messages:
    2
    Hardware:
    RPi3, +Arduino, +PhilipsHue
    Danke für deine Antwort,
    Naja nicht wirklich, da ich immer die gleiche HTTP Adresse bearbeitet habe. Aber ich kann dir wenn ich heut Abend von der Arbeit nachhause komme die letzte Adresse welche keinen erfolg brachte Posten.

    Aber ich scheitere da schon am Anfag. Laut Wiki muss man ja zuerst die Instanznummern ausfindig machen per "command":"instance-update" sonst bekommt man ja die Nummern nicht und dann müsste man das resultat in ein weiteres json packen um das Device zu steuern odere habe ich schon dass falsch verstanden?
     
  17. Paulchen-Panther

    Paulchen-Panther Moderator Staff Member Developer

    Messages:
    902
    Hardware:
    RPi1/Zero, RPi3, 32/64bit, +Arduino, +nodeMCU/ESP8266
  18. Paulchen-Panther

    Paulchen-Panther Moderator Staff Member Developer

    Messages:
    902
    Hardware:
    RPi1/Zero, RPi3, 32/64bit, +Arduino, +nodeMCU/ESP8266
    Ich bin ja nicht so.
    Hier der 'curl' Befehl um z.b. die Instanz 1 an bzw. aus zu schalten.
    Code:
    curl -X POST -i 'http://192.168.178.76:8090/json-rpc' --data '{"command":"instance","subcommand":"startInstance","instance":1}'
    curl -X POST -i 'http://192.168.178.76:8090/json-rpc' --data '{"command":"instance","subcommand":"stopInstance","instance":1}'
    Und hier ein kleines Script um Hyperion Server im lokalen Netzwerk an bzw. aus zu schalten. Die Eingabe einer IP Adresse ist nicht notwendig, da alle Server via SSDP gesucht werden.
    Code:
    #!/bin/bash
    
    if ! which gssdp-discover >/dev/null; then
        sudo apt install gupnp-tools
    fi
    
    # Display usage if parameters missing
    usage()
    {
        echo "Usage: $0 -i <instance_number> -s <state>";
        echo "eg:$0 -i 1 -s startInstance";
        echo "eg:$0 -i 2 -s stopInstance" 1>&2; exit 0;
    }
    
    # Read parameters (instance number/state)
    while getopts i:s: option
    do
    case "${option}"
    in
    i) INSTANCE=${OPTARG};;
    s) STATE=${OPTARG};;
    esac
    done
    
    # Check if parameters present
    if [ -z "${INSTANCE}" ] || [ -z "${STATE}" ]; then
        usage
    fi
    
    # Search for Hyperion servers
    INTERFACE=$(awk '/^d/ {print $5;exit}' < <(ip route show))
    SERVER=($(gssdp-discover -i "$INTERFACE" --timeout=3 --target=urn:hyperion-project.org:device:basic:1|grep Location|sed 's:/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\:[0-9]*\).*:\1:'))
    
    # Enable/Disable Instance
    for hyperion in "${SERVER[@]}"
    do
        # get authorization token
        return=$(curl -s -X POST -d \
        "
        {
         \"command\": \"instance\",
         \"subcommand\": \"${STATE}\",
         \"instance\": ${INSTANCE}
        }
        " -i $hyperion/json-rpc)
    done
    Gruß Paulchen
     
    • Thank you Thank you x 1