Hue Lampe An/Aus über extcommands mit curl Befehl

edited December 2020 in General
Moinsen und frohe Weihnachten,

ich habe mich gerade mal daran versucht in der extcommands 2 Befehle einzufügen.
Diese werden mir auch in der Liste angezeigt, zeigen aber keine Wirkung.
Setze ich den Befehl im Terminal Fenster ab, kann ich darüber das einzelne Licht wunderbar an- und ausschalten.

Diesen Code habe ich eingefügt in der extcommands.xml (hue-user ist natürlich mein ausgeblendeter User, genauso wie bei der IP)

        <command>
                <name>Licht An</name>
                <execute>sudo curl -X PUT --data '{"on":true}' --url http://192.168.x.x/api/hue-user/lights/42/state</execute>;
        </command>
        <command>
                <name>Licht Aus</name>
                <execute>sudo curl -X PUT --data '{"on":false}' --url http://192.168.x.x/api/hue-user/lights/42/state</execute>;
        </command>

Ist dies ein Problem mit den Berechtigungen?! Wo genau müßte ich ansetzen?

Vielen Dank für die Hilfe!

Comments

  • edited December 2020
    Ich hatte mal mit und mal ohne Sudo getestet.  Beides ohne Erfolg.

    Ein anderer Weg wäre per WebAction. Aber hier kann man ja nur Methode "Get" oder "Post" wählen.
    Die Hue API erwartet hier aber wohl die Methode "Put" damit es damit funktionieren würde.
  • Ja put hab ich bei den webactions nicht dran gedacht. Versuch gerade rauszubekommen wie ich den link für mich basteln muss. Hab auch eine hue und so könnte ich testen ob put klappt. Ist ja nicht weiter schwierig da eine methode mehr rein zu nehmen.

    Ich seh noch ein ;  nach </execute> was da nicht reingehört. Sollte aber nicht wirklich stören. Als curl Befehl sollte root oder nicht keine Rolle spielen. Eher ein Problem sein wenn curl nicht in sudoers for repetierserver user ist. Würde daher eher ohne sudo versuchen aber für curl den absoluten Pfad angeben.

    Eventuell noch " durch &quot; ersetzen da du den Inhalt nicht über cdata geschützt hast.
  • Ok, ich update jetzt erstmal auf die 1.0 und werd das mal probieren.
    Muss ich noch für curl den Pfad mit angeben eventuell?
  • Ich würde es sicherheitshalber machen, einfach um die Fehlerquelle auszuschließen.
  • edited December 2020
    Ok, hier übrigens der Weg um die API für die Hue Lampen anzusprechen:

    /usr/bin/curl &quot;-X PUT --data '{"on":true}' --url http://192.168.x.x/api/hue_user/lights/42/state

    Hab es jetzt mal so entsprechend geändert aber leider immer noch ohne Erfolg. :)




  • edited December 2020
    Ok, ich hab es jetzt hin bekommen. :) Hab den Befehl noch etwas variiert.

    <command>
                    <name>Licht An </name>
                    <execute>curl -X PUT -d "{\"on\":true}" "http://192.168.x.x/api/hue user/lights/1/state"</execute>
            </command>
            <command>
                    <name>Licht Aus</name>
                    <execute>curl -X PUT -d "{\"on\":false}" "http://192.168.x.x/api/hue user/lights/1/state"</execute>
            </command>


    Wie kann ich das, von dir oben beschrieben, besser schützen mit cdata?


  • Das hatte offenbar nichts mit cdata zu tun. Problem wie du erkannt hast war der -d parameter Du fängst mit " and und " beendet ihn aber da sind noch welche im Parameter die für die Shell escaped werden mussten.

    Für cdata siehe hier:
    https://www.tutorialspoint.com/de/xml/xml_cdata_sections.htm

    Ist aber hier nicht nötig.
  • Ab 1.0.1 wird put auch in WebActions funktionieren. Habs grad mit meiner Hue getestet und es funktioniert:-)
  • Hallo
    Ich greife dieses Thema nochmals auf, da ich es gemäss den vorherigen Posts umsetzen wollte und es nicht funktioniert.
    Ich habe in der extcommands.xml folgende Befehle eingegeben:

    <command>
        <name>Licht An</name>
        <execute>sudo curl -X PUT --data '{"on":true}' --url https://192.168.x.xxx/api/[Mein API-Key]lights/11/state </execute>;
    </command>
    <command>
        <name>Licht Aus</name>
        <execute>sudo curl -X PUT --data '{"on":false}' --url https://192.168.x.xxx/api/[Mein API-Key]/lights/11/state </execute>;
    </command>

    Die Befehle erscheinen im Menu, aber beim Anklicken passiert nichts.
    Wenn ich diese Befehle über das API Debug Tool von Hue absetze funktioniert alles.

    Muss ich da noch irgendwo Berechtigungen setzen? Die extcommands-Datei war bereits vorhanden mit den beiden Befehlen  "Shut down Server" und "Reboot Server". Die funktionieren einwandfrei.




  • Nimm das sudo raus. Es gibt keinen Grund das als root auszuführen. Mit sudo müsste curl in sudoers für repetieruser stehen.
    Mit der aktuellen Server Version kannst du das aber auch direkt in den Web Aktionen einrichten. PUT wird ja jetzt auch unterstützt. Bei meiner Hue klappt das wunderbar.
  • Also nur: <execute>curl -X PUT --data...... ?
  • Es geht immer noch nicht.
    Kann es sein, dass da mit den ' und " etwas nicht stimmt?
    Im Beitrag von Hunter steht auch -d statt --data
    Hunter: <execute>curl -X PUT -d "{\"on\":true}"http://.......
    Ich:      <execute>curl -X PUT --data '{"on":true}' --url"http://.......

    Was ist richtig?


            <command>
                    <name>Licht An</name>
                    <execute>curl -X PUT --data '{"on":true}' --url"https://[IP-Adresse]/api/[HUE-API]/lights/11/state" </execute>;
            </command>
            <command>
                    <name>Licht Aus</name>
                    <execute>curl -X PUT --data '{"on":false}' --url"https://[IP-Adresse]/api/[HUE-API]/l/lights/11/state" </execute>;
            </command>




  • </execute>; das semikolon ist zu viel, aber vermutlich nicht das Problem wenn du es im server siehst.

    Das https muss möglicherweise http sein weil es kein gültiges Zertifikat gibt.
    Ansonsten gehe ich davon aus das der curl Befehl in der Komandozeile getestet wurde uns so funktioniert?

    Die einfache Lösung mit den Web Aktionen hast du verworfen?


  • Repetier said:
    </execute>; das semikolon ist zu viel, aber vermutlich nicht das Problem wenn du es im server siehst.
    Das https muss möglicherweise http sein weil es kein gültiges Zertifikat gibt.
    Ansonsten gehe ich davon aus das der curl Befehl in der Komandozeile getestet wurde uns so funktioniert?

    Die einfache Lösung mit den Web Aktionen hast du verworfen?


    =>> In de Kommandozeile getestet? Nein. Ich hab es im API Debug Tool von Hue gestestet. Dort funktioniert es.
    =>> Wie wäre denn die "einfache Lösung mit der Web Aktion"? Hab ich da was überlesen?



  • So funktioniert es im Terminal (MAC)
    curl -X PUT -d "{\"on\":true}" "http://192.168.x.x/api/[Hue User]/lights/11/state"
    da hat wohl das --url gestört.
    Werde es so noch in Repetier-Server testen. Ist gerade am druckern 48h-Job!! :-)
    Danke für die Hilfe

  • =>> Wie wäre denn die "einfache Lösung mit der Web Aktion"? Hab ich da was überlesen?
    Ja. In globalen Einstellungen->Web Aktionen kannst du curl ähnliche requests direkt eintragen.
    Content type: application/json
    Methode put,
    data: {"on":true}
    url: http://192.168.x.x/api/[Hue User]/lights/11/state

    Dann noch sagen ob du es global ode reinem Drucker zugeordnet sehen willst und fertig. Kein extcommands.xml notwendig. Klappt bei mir so prima und einen eigenen server befehl zum setzen gibts noch obendrauf:-)
  • Super, danke. Habe es in der Zwischenzeit auch herausgefunden und funktioniert als Web Applikation einwandfrei. Danke für die Hilfe, ist genau das was ich wollte.
Sign In or Register to comment.