Shelly Plus Plug S - LED Farbe und Brightness wechslen über REST

Hi zusammen!

Bitte um Nachsicht, ich bin noch neu. Ich bin auf der Suche nach einer Lösung, wie ich in der Automation die URL eines Shelly Plus Plug S aufrufen kann, um die Farbe und Helligkeit der LED zu ändern. Nach einigem Suchen habe ich einen Artikel gefunden, wie man in der configuration.yaml mit “rest_command” einen Service (?) anlegt, der in der Automation genutzt werden kann.

rest_command:
  shelly_color_spuelen:
    url: "http://shellyplusplugs-80646fe68b98/rpc/PLUGS_UI.SetConfig?config={"leds":{"mode":"switch","colors":{"switch:0":{"on":{"rgb":[0,100,0],"brightness":100}}}}}"

Wenn ich statt der Shelly-URL mit dem ganzen Parametergedöns eine “normale” URL eingebe und HA neu starte, habe ich den Dienst zur Auswahl bei der Automation. Aber mit obiger URL Bekomme ich folgenden Fehler (vor dem Speichern der configuration.yaml) angezeigt:

bad indentation of a mapping entry (19:79)

16 | …
17 | …
18 | …
19 | … c/PLUGS_UI.SetConfig?config={“leds”:{“mode”:“switch”,“colors” …
-----------------------------------------^
20 | …
21 | …

Ich habe natürlich auch folgenden Beitrag gefunden:

Shelly API - Geräte über WebHook URL steuern (simon42.com)

der mich aber leider auch nicht weiterbringt.

Wozu das ganze überhaupt? Ich habe drei solche Shelly Plugs, an denen energieintensive Geräte wie Geschirrspüler, Wäschetrockner und Waschmaschine hängen. Um den Damen des Hauses eine Orientierung zu geben, ob jetzt ein guter Zeitpunkt ist, das Gerät in Betrieb zu nehmen, ändere ich (aktuell über einen Raspi per Python Skript und nein, das Skript ist nicht von mir, ich kann nicht programmieren) die Farben des LED Rings. Bei “grün” ist alles gut und das Gerät kann verwendet werden.

Vielleicht hat ja einer der erfahrenen User einen besseren Ansatz als meinen. Ich habe auch was gelesen, dass man Farbe und Brightness evtl. als “Variable” in der Automation übergeben könnte.

EDIT: Wenn ich die “” um die URL entferne, kann ich die configuration.yaml speichern und den Service in der Automatisierung nutzen. Allerdings erhalte ich beim Testen folgenden Fehler:

Fehler beim Ausführen einer Aktion

Client error occurred when calling resource ‘http://shellyplusplugs-80646fe68b98/rpc/PLUGS_UI.SetConfig?config={“leds”:{“mode”:“switch”,“colors”:{“switch:0”:{“on”:{“rgb”:[0,100,0],“brightness”:100}}}}}’

Vielleicht kann mir ja jemand weiterhelfen.

Danke im Voraus für hilfreiche Hinweise!

LG

Werner

Funktioniert denn der Link wenn du ihn über den Browser aufruft?

Hi,

ja klar.

Gruß

Werner

Moin,
probiere es mal so:

rest_command:
  shelly_color_spuelen:
    url: "http://shellyplusplugs-80646fe68b98/rpc/PLUGS_UI.SetConfig?config={"leds":{"mode":"switch","colors":{"switch:0":{"on":{"rgb":[0,100,0],"brightness":100}}}}}"
    method: POST

LG
Tobi

Hallo Tobi,

danke für den Tipp, funktioniert aber leider nicht. Mit “” in der configuration.yaml kann ich nicht speichern und beim Ausführen (Test) gleicher Fehler wie im initialen Beitrag. Ich habe jetzt auch noch rumprobiert mit doppelten “” und einfachen ‘’ Anführungszeichen, aber der Fehler beim Ausführen bleibt leider. :frowning:

Ich habe auch die URL noch um ein paar unnötige Parameter gekürzt

http://shellyplusplugs-80646fe68b98/rpc/PLUGS_UI.SetConfig?config={"leds":{"rgb":[0,100,0],"brightness":100}}

(funktioniert im Browser) doch der Fehler beim Ausführen hält sich hartnäckig.

Das muss doch irgendwie gehen?

Gruß

Werner

Vor und hinter der URL " zu benutzen wird nicht funktionieren wen es auch in der URL ist da musst du dann ehr zu ' greifen.

vielleicht geht es so:?

rest_command:
  shelly_color_spuelen:
    url: "http://shellyplusplugs-80646fe68b98/rpc/PLUGS_UI.SetConfig?config="
    method: POST
    payload: '{"leds":{"rgb":[0,100,0],"brightness":100}}'
    content_type: 'application/json; charset=utf-8'

Sonst mal die Dokumentation durchgehen und probieren.

LG

Vielleicht auch mal Node Red probieren, da sind http requests deutlich einfacher

Hi Tobi,

Danke für den Tipp, aber da wird die URL abgeschniten und ich erhalte folgendes Resultat:

Fehler beim Ausführen einer Aktion

Client error occurred when calling resource ‘http://shellyplusplugs-80646fe68b98/rpc/PLUGS_UI.SetConfig?config=

Weil’s mir keine Ruhe lässt und mir der “Client Error” unter jeder Konstellation seltsam erschien, habe ich anstatt der Geräte-ID in der URL die IP Adresse des Gerätes verwendet. Und siehe da, jetzt kann ich die URL fehlerfrei aufrufen!

rest_command:
  shelly_spuelen_color_green100:
    url: 'http://192.168.178.33/rpc/PLUGS_UI.SetConfig?config={"leds":{"rgb":[0,100,0],"brightness":100}}'

Da die URL im Browser aber mit der Geräte-ID funktioniert nehme ich an, dass HA den Namen nicht koirrekt auflöst. Der DNS Server ist allerdings korrekt eingetragen. Also ein Problem gelöst aber neues Problem erkannt. Oder arbeitet jemand zuverlässig mit Gerätenamen in solchen Dingen?

Danke für die Unterstützung aller Beteiligten!

Gruß

Werner

Nächster Rückschlag: Kein Fehler, die LED-Farbe am Shelly Plug ändert sich aber auch nicht.

Diese URL funktioniert:
rest_command:
shelly_spuelen_off2:
url: “http://192.168.178.33/relay/0?turn=off

Nja, möchte ich, wenn möglich, vermeiden. Ausser Node Red belastet das System nicht unnötig?

Gruß

Werner

Ich glaub wenn Node Red das System belasten würde, hätte es nicht fast jeder drauf… :person_shrugging: Wäre vielleicht schon mal einen Versuch wert

1 „Gefällt mir“

Ich lass das mal, weil das irgendwie doch etwas spezieller zu sein scheint und meinen derzeitigen Kenntnisstand überfordert.

Für die Damen das Hauses werde ich ein Panel /Tablet / ausgedientes Smartphone an geeigneter Stelle an die Wand tackern und mit einer Gauge Card den Status anzeigen. Das ist vermutlich sinnvoller und mindestens so leicht erfassbar.

Danke für euren Input!

Gruß

Werner

Ich greife das Thema hier mal auf.
Ich möchte bei einem Shelly Plus Plug S die LED’s mit 10% in grün leuchten lassen, wenn das Relais “ON” ist und 100% in rot, wenn es “AUS” ist.

Folgender Befehl funktioniert vom Browser aus:

http://<Shelly-IP>/rpc/PLUGS_UI.SetConfig?config={"leds":{"mode":"switch","colors":{"switch:0":{"on":{"brightness":10},"off":{"brightness":100}}}}}

“rot” & “grün” sind im Shelly selber fest eingestellt.

Für das Senden des HTTP-Befehls habe ich in NR diese Node gefunden:
image
die ich so konfiguriert habe:


und der o.g. Befehl würde ich als msg.payload zum Testen über eine Inject-Node einspeisen.

Irgendwie klappt das ganze aber nicht.
Eine Idee, wo der Fehler liegen könnte?

Probiere mal statt Post die Methode Get, da ein Browser glaub auch immer mit Get arbeitet

Danke, hab ich auch schon durch. :confused:

Ich muss mich morgen mal mitbder Inject-Node und dem payload beschäftigen.
Momentan ist der Payload ein „String“, ich denke aber ich muss da auf JOSN oder JSONata umstellen, oder?

Probiere mal folgendes:
nimm den http request node und trage die Methode Post ein.
Dann trägst du dort die url:

http://<Shelly-IP>/rpc/PLUGS_UI.SetConfig

ein
Davor machst du einen function node mit folgendem code:

msg.payload = "config={"leds":{"mode":"switch","colors":{"switch:0":{"on":{"brightness":10},"off":{"brightness":100}}}}}";
return msg;

Diesen function node übergibst du an den http request node.
Hoffentlich funktioniert es so

Das ist der Test-Flow:

Funktioniert noch nicht ganz, die “function”-Node meckert:


image

Wenn ich es ohne “config…” mache:


dann kommt diese Fehlermeldung von der http-request-node:
image

Also stimmt definitiv etwas an der syntax der function-node nicht (ist aber wirklich nicht mein Wissensgebiet :sleepy: )

am Ende von msg.payload auf dem Screenshot sieht es so aus, als hättest du "; am Ende der Zeile vergessen

Hatte ich tatsächlich vergessen, aber es ändert leider nichts:


es kommt die gleiche Fehlermeldung.

es fehlt immer noch das Semikolon dahinter :wink:

:joy:
aber leider…

mach hinter msg.payload noch ein =