Meine LUA Anfänge

Hallo zusammen,

ich stehe mit meinem Smart Home an sich schon nicht mehr ganz am Anfang aber mit der Programmiersprache LUA schon noch.
Nach dem ich alle meine aktiven Devices in die HC2 eingebunden habe und mit Blockszenen einfache Zeitschaltungen ans laufen gebracht habe, bin ich nun auch mit den LUA Szenen gestartet.

Ich habe hier eine einfache Szene die ich starte um TV zu schauen, sie schaltet meine Stereoanlage, eine HUE und zwei Stehlampen ein.

--[[
%% properties
%% events
%% globals
--]]

if (fibaro:countScenes()>1) then 
 fibaro:abort(); 
end
fibaro:call(31, "turnOn")
fibaro:call(33, "turnOn")
fibaro:call(85, "changeBrightness", 250)
fibaro:call(85, "turnOn")

Und eine weitere Szene die entsprechend alles wieder ausschaltet

--[[
%% properties
%% events
%% globals
--]]

if (fibaro:countScenes()>1) then 
 fibaro:abort(); 
end
fibaro:call(31, "turnOff")
fibaro:call(33, "turnOff")
fibaro:call(85, "turnOff")

Nun kann ich mit Hilfe des Lua Script Teil 9 über den Fibaro Button die Szenen entsprechend starten.

  1. Habt ihr Anmerkungen zu den beiden Szenen? Ist was falsch? fehlt was?
  2. Mit Sicherheit muss das jeder ein bisschen für sich selbst heraus finden, aber würdet ihr bei diesen drei Lampen extra Szenen nutzen (so wie ich es nun gemacht habe) oder sie direkt in der Szene für den “Button” ansprechen?

Beste Grüße,
MrT

Sind meine Fragen so ungewöhnlich, so lapidar oder einfach nicht angebracht hier? :slight_smile:

Hi,

Was geht denn nicht?
Man könnte statt zwei eigenständiger Szenen den Code direkt in der ButtonSzene integrieren. Ggf übersichtlicher.
Dann kann man aber nur noch über den Button steuern. So lässt sich die jeweilige Szene auch manuell starten. Oder als Widget nutzen.
Viele Wege führen nach Rom.

Viele Grüße Hoggle

Hi,

hab es so verstanden, dass du Feedback willst. Da du ja sicherlich weißt, was ich hier eigentlich programmiere, habe ich dazu kein Statement abgegeben. Find es aber cool, dass immer mehr Leute in die Programmiersprache LUA abtauchen. Nur so lernt man was :slight_smile: Mach auf jeden Fall weiter so…

Würde deine Aktionen über meine gepostete Szene für den Fibaro Button abfrühstücken. Dann hast du nur eine Szene und kannst zum Beispiel auch in den Gegenzustand schalten. So brauchst du nicht 1x Klick & 2x Klick belegen, sondern kannst alles auf 1x Klick legen, wobei die Szene dann abfragt, ob ein Modul bereits eingeschaltet ist und dann einfach den Gegenzustand schaltet. Solltest du dazu Fragen haben, dann kannst du dich gern hier an mich wenden. :slight_smile:

Gruß

Sorry für die späte Antwort.
Im Prinzip funktionieren die o.g. Szenen wie beschrieben, ich würde das ganze gerne nur von Anfang an richtig angehen.
Die hier geteilten Szenen* kopieren, einfügen und die ID’s ändern mag für viele ausreichend sein und ihnen helfen, nur wenn ich mein Haus mit Fibaro/Z-Wave und demnach auch zwingend mit LUA “smarter” mache, möchte ich auch verstehen was in den einzelnen Szenen passiert, um ggf. selbst das Know-How zu haben “saubere” Szenen zu erstellen.

@boomx schicke Idee mit dem schalten des Gegenzustands - magst du ein mal posten wie so etwas aussehen könnte?

Ansonsten werde ich die einfachen Sachen direkt in der Szene des Button einbauen und nur für Vorgänge die man mal von der App/Widget benötigt bzw. die etwas komplexer sind in eigenen Szenen belassen.

Beste Grüße,
MrT

*Vielen Dank dafür - vor allem an Daniel! für die vielen Vorlagen, Inspirationen und Hilfestellungen.

Hi,

das sieht bei mir für den Button so aus:

-[[
%% properties
%% events
349 CentralSceneEvent
%% globals
--]]

local button_source = fibaro:getSourceTrigger()["event"]["data"]
local hueID  = {379, 396} 
local Stripe = 379

if (tostring(button_source["keyAttribute"]) == "Pressed") then
  	fibaro:debug('Fibaro Button 1x gedrückt.')
  	
  	if tonumber(fibaro:getValue(Stripe, "ui.onOff.value")) == 0 then
	  	for i=1, #hueID do
      		fibaro:call(hueID[i], "changeSaturation", 254)
  			fibaro:call(hueID[i], "changeBrightness", 133)
			fibaro:call(hueID[i], "changeHue", 7907)
			fibaro:call(hueID[i], "turnOn")
    		print("an")
      	end
	elseif tonumber(fibaro:getValue(Stripe, "ui.onOff.value")) == 1 then
    	for i=1, #hueID do
      		fibaro:call(hueID[i], "turnOff")
    		print("Aus")
      	end
    else
    	print("Nichts")
  	end  
end

oder mit dem WallPLug:

-[[
%% properties
370 value
%% events
%% globals
--]]

--wenn der WallPLug neben der Wohnzimmertür geschaltet wird, 
--gehen auch die Hues im WoZi entsprechend An oder Aus

local hueID  = {379, 396} --Hues im Wozi
local Plug = 370 		  --WallPLug neben WoZi-Tür
--print("WallPlug: "..fibaro:getValue(Plug, "value"))

if tonumber(fibaro:getValue(Plug, "value")) == 1 then
	print("Hues an")
  	for i=1, #hueID do
    	fibaro:call(hueID[i], "changeSaturation", 254)
  		fibaro:call(hueID[i], "changeBrightness", 133)
		fibaro:call(hueID[i], "changeHue", 7907)
		fibaro:call(hueID[i], "turnOn")
     end
elseif tonumber(fibaro:getValue(Plug, "value")) == 0 then
  	print("Aus")
  	for i=1, #hueID do
   		fibaro:call(hueID[i], "turnOff")
  	end
else
	print("Nichts")
end

VG Hoggle