VD um die Farben des Wallplugs zu ändern

Moin zusammen,

genau so hab ich es dann auch gemacht.
Muss es jetzt nur noch in das endgültige Script kopieren.

Danke
gringo

Hi Leute,
Ich habe gerade die Anforderung, dass ich über ein Skript den LED Ring eines Fibaro Plug ind 4 Farben einfärben muss.
Das Virtuelle Device von Boomx funktioniert grundsätzlich gut, nur dass die Farben im VD etwas vertauscht sind!
Der Kerncode des VD klappt IM VD hervorragend gut!

local selfId = fibaro:getSelfId();
local port = fibaro:get(selfId, 'TCPPort');

HC2 = Net.FHttp("127.0.0.1", 11111)
jtable = '{"properties":{"parameters":[{"id":41,"size":1,"value":4}]}}'
HC2:PUT("/api/devices/" ..port ,jtable)

Ich habe das nun mit einem Plug probiert, der mit Parameter: 41 und 42 funktioniert und habe folgende Farben am Farbring des Plug rausgefunden:
2 = Weiss, 3 = ???, 4 = Rot, 5 = Grün, 6 = Blau, 7 = Gelb, 8 = Cyan
In der Webansicht werden zwar andere Farben angezeigt, aber das tangiert mich derzeit nicht. Der RIng wird richtig gefärbt!

Nun hab ich versucht den Code soweit zu reduzieren, dass er sehr simpel in ein Script eingebaut werden kann:

local DeviceID = 519
HC2 = Net.FHttp("127.0.0.1", 11111)
jtable = '{"properties":{"parameters":[{"id":41,"size":1,"value":5}]}}'
HC2:PUT("/api/devices/" ..DeviceID ,jtable)

Leider kommt immer die Fehlermeldung: attempt to index global 'Net' (a nil value)
Der Selbe Code im VD funktioniert aber!?

Kann mir jemand helfen einen möglichst simplen Code rauszufinden um die Farbe des Ringes in einem Script einzustellen?

Habe auch den Code von @ändy im Post #89783 versucht, der läuft bei mir leider gar nicht !?
Vielleicht habe ich ja auch nur eine Kleinigkeit übersehen, freue mich über einen Tipp!

Hi pblacky,
als boomx den Code für die das VD gemacht hat gab es nur den GEN3 Wallplug und Fibaro hat beim GEN5 Plug was an den Parameter geändert so das die Farben dort vertauscht sind. HaSt Du ja richtig bemerkt.
Aber in LUA funktioniert das Kontrukt Net.FHttp nicht. Das kommt aus der REST API un ist nur in VDs möglich. Hat Fibaro halt so gemacht. Sehe keine Chance das in LUA zu machen.

Danke @jeep, für deine rasche Antwort!
Das ist sehr schade!!
Wenn das so ist muss ich halt versuchen das Drücken der Tasten des VDs über das Skript zu simmulieren.
Wird nicht sehr elegant, aber sollte funktionieren, oder?

@pblacky
Ja, dass sollte auf alle Fälle Funktionieren.

Hallo Ihr Lieben,
Ich bastel gerade an meinen VD für die WallPlug Farbsteuerung.
Das VD ist bereits fertig und funktioniert!

Nun bin ich gerade dabei das VD über eine Scene anzusteuern und scheitere noch am richtigen Code.
Hab ich das richtig verstasnden dass ich folgenden COde verwenden muss:
fibaro:call(543, “pressButton”, “Button31”)
Wobei:
“543” die ID des VD ist, die ich über die Adresszeile bei Aufruf des VD herausfinden kann
“Button31” die Bezeichnung des Buttosn ist (Label)
oder ???

Hi pblacky,
das ist richtig. Frage, was hast Du dennn im VD bei Port stehen? Dort sollte die ID des Wallplugs stehen.

Ja, @jeep dort steht die ID des Plug!
Muss ich DIESE ID im Code eingeben, wo jetzt 543 steht??
fibaro:call(543, "pressButton", "Button31")

Wo ich noch unsicher bin ist die Bezeichnung der Buttons im VD!
Dort steht unter ID: zum Beispiel “button31” oder manchmal button_2_1" drinnen.
Das ist abhängig davon ob ich es geändert habe oder nicht.
Muss ich in den Codezeilen da wo jetzt “Button31” steht diese ID: eingeben?

Hi @pblacky, mit den Button hab ich mich umfassend beschäftigt. Bin in 30min daheim dann kann ich dir was schicken.

@pblacky, so viel ich weiss geginnt die Zählung der Buttons ganz oben bei ersten Label. Das wäre Button 1, usw.
Versuch mal Button2 und Button3. Aber vielleicht hat Ändy eine bessere Lösung.
EDIT: gerade gesehen, die Richtige Syntax wäre: fibaro:call(543, “pressButton”, 3)

Ich hab mir mal diese Funktion gebastelt da ich mit den Zahlen immer durcheinander gekommen bin. Diese kann man in Szenen verwenden und man übergibt die Farbe einfach als Textstring. Finde das wesentlich übersichtlicher als Zahlen. Zumindest sollten die Zahlen zu den Farben passen falls jemanden das Ganze zu aufwändig sein sollte.

--Färbt Wallplug ein. Übergabe Farbe als Text. In Var vDeviceID muss ID vom FarbwechselVD stehen
function FarbeWallPlug(Farbe)
	if Farbe == "weiss" then Button = "2" --Ordne Farbe Button zu
    elseif Farbe == "rot" then Button = "3"
    elseif Farbe == "grün" then Button = "4"
    elseif Farbe == "blau" then Button = "5"
    elseif Farbe == "gelb" then Button = "6"
    elseif Farbe == "cyan" then Button = "7"
    elseif Farbe == "magenta" then Button = "8"
    elseif Farbe == "aus" then Button = "9"
	else Button = "1" --Ansonsten Farbe nach Stromverbrauch
    end
	fibaro:call(vDeviceID, "pressButton", Button) -- Button im VD drücken
end

Danke @Ändy für das Skript!
Bin gerade dabei es in einem Demo umzusetzen!
Bei der Gelegenheit hab ich herausgefunden,dass bei mir Umlaute nicht funktionieren. Hab daher “grün” in “gruen” geändert.

Leider übergibt der Aufruf der Funktion die Farbvariable nicht.
Der Wert im Debug auf Zeile 5 ist immer “nil” und daher geht das Skript auf "else Button = “1”.
Das funktioniert allerdings, denn wenn ich dort “3” reinschreibe, dann wird es rot!

Da hab ich offensichtlich irgendwo noch einen Denkfehler…

Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
vDeviceID=543
--Färbt Wallplug ein. Übergabe Farbe als Text. In Var vDeviceID muss ID vom FarbwechselVD stehen
function FarbeWallPlug(Farbe)
    Debug("grey",Farbe)
    if Farbe == "weiss" then Button = "2" --Ordne Farbe Button zu
    elseif Farbe == "rot" then Button = "3"
    elseif Farbe == "gruen" then Button = "4"
    elseif Farbe == "blau" then Button = "5"
    elseif Farbe == "gelb" then Button = "6"
    elseif Farbe == "cyan" then Button = "7"
    elseif Farbe == "magenta" then Button = "8"
    elseif Farbe == "aus" then Button = "9"
    else Button = "1" --Ansonsten Farbe nach Stromverbrauch
    end
	fibaro:call(vDeviceID, "pressButton", Button) -- Button im VD drücken
end
FarbeWallPlug(rot)
Debug("red","rot")
fibaro:sleep(5000)
FarbeWallPlug(gruen)
Debug("green","grün")

@pblacky,
Ja, Du musst die Variable als string übergeben, also :FarbeWallPlug('rot')
Aber das script sollte funktionieren.

@jeep, DANKE!!
War ein dummer Fehler von mir!
Klappt jetzt mal in meinem Testskript…

Prima dass es jetzt geht. Hätte fast spontan gesagt, ja mein Fehler :slight_smile: Ich glaube bei Variablennamen muss man mit den äöüs aufpassen, bei Strings kein Problem.

So, nun hab ich meinen Steckdosenanzeige fertig :wink:
Bei komplexeren Skripten und mehr Farben setze ich die Funktion von Ändy ein, funktioniert hervorragend!

In kleinen schlanken Skripten verwende ich einfach Codezeilen, wie in dem Beispiel:


fibaro:call(566, "pressButton",3) -- VD 543-rot
fibaro:call(566, "pressButton",4) -- VD 543-grün

Wobei “566” die ID des Virtuellen Devices ist.
@Ändy , danke fürs Teilen, deines KnowHow !!

Habe heute versucht das Skript für die Fibaro Plugs GEN3 auch umzusetzen.
Dabei bin ich draufgekommen, dass bei einem alten Plug, bei mir der Parameter 61 und 62 unterschiedliche Werte in EIN und AUS Zustand haben. (siehe Screenshot)
Ist das ein Fehler im Device, oder kann man das irgendwie ändern??

PlugV3_Parameter.jpg

@pblacky

Auch auf die Gefahr das Du das inzwischen heraus gefunden hast…
Die Button ID wird immer auf "button_x_x“ umgestellt wenn man in
der Button ID Sonderzeichen wie .-_äöü etc. verwendet.

ich habe hier aus dem Forum ein VD , mit dem klappt das optimal,ich lasse mir damit
Bewegung in verschiedenen Räumen anzeigen mit zugehöriger Farbe


bekomme es hier aber nicht hin das VD hochzuladen ;-(