Ich bräuchte mal eure Hilfe!!!
Für meine Garagentore habe ich mir ein VD angelegt.
Leider bekomme ich den Mainloop nicht zum laufen.
--[[
%% autostart
%% properties
197 value
198 value
%% events
%% globals
--]]
local Tormitte = tonumber (fibaro:getValue(197, 'value'));
local Torrechts = tonumber (fibaro:getValue(198, 'value'));
if (tonumber (Tormitte) > 0)
then fibaro:setGlobal("Garage_mitte", "auf")
fibaro:call(selfId, "setProperty", "ui.Label1.value", "offen")
fibaro:debug("Tor mitte ist offen")
elseif (tonumber (Tormitte) < 1)
then fibaro:setGlobal("Garage_mitte", "zu")
fibaro:call(selfId, "setProperty", "ui.Label1.value", "geschlossen")
fibaro:debug("Tor mitte ist geschlossen")
end
if (tonumber (Torrechts) > 0)
then fibaro:setGlobal('Garage_rechts', 'auf')
fibaro:call(selfId, "setProperty", "ui.Label2.value", "offen")
fibaro:debug("Tor rechts ist offen")
elseif (tonumber (Torrechts) < 1)
then (fibaro:setGlobal('Garage_rechts', 'zu'))
fibaro:call(selfId, "setProperty", "ui.Label2.value", "geschlossen")
fibaro:debug("Tor rechts ist geschlossen")
end
Die Fehlermeldung lautet:
[ERROR] 14:17:28: line 29: syntax error near ‘fibaro’
Main Loops in VDs kannst du nicht mit Device Value Changes triggern.
Der Teil bis Zeile 9 müsste entfernt werden.
Du kannst aber den Code in eine Szene packen und nur selfId durch die ID deines VDs ersetzen.
Die Szene ändert dann die Labels im VD.
Übrigens SelfId müsstest auch im VD erst einer Variablen zuweisen.: local selfId = fibaro:getSelfId();
Danke für den Tipp!
Habe das jetzt so abgeändert:
local Tormitte = tonumber (fibaro:getValue(197, 'value'));
local Torrechts = tonumber (fibaro:getValue(198, 'value'));
if tonumber (Tormitte == 1)
then fibaro:setGlobal("Garage_mitte", "auf")
fibaro:call(369, "setProperty", "ui.Label1.value", "offen")
fibaro:debug("Tor mitte ist offen")
elseif tonumber (Tormitte == 0)
then fibaro:setGlobal("Garage_mitte", "zu")
fibaro:call(369, "setProperty", "ui.Label1.value", "geschlossen")
fibaro:debug("Tor mitte ist geschlossen")
end
if tonumber (Torrechts == 1)
then fibaro:setGlobal("Garage_rechts", "auf")
fibaro:call(369, "setProperty", "ui.Label2.value", "offen")
fibaro:debug("Tor rechts ist offen")
elseif tonumber (Torrechts == 0)
then (fibaro:setGlobal("Garage_rechts", "zu"))
fibaro:call(369, "setProperty", "ui.Label2.value", "geschlossen")
fibaro:debug("Tor rechts ist geschlossen")
end
Ich bekomme aber immer noch folgenden Fehler:
[ERROR] 19:12:15 line 20: syntax error near ‘fibaro’
Hast auch noch einen Fehler bei der If then else Abftage.
If tonumber(Torrechts) == 1 Beispiel
Ist der richtige Syntax.
Nachdem es sowieso als Nummer zugewiesen wurde kannst Torrechts == 1 schreiben.
So funktioniert es! Danke!
local Tormitte = tonumber (fibaro:getValue(197, 'value'));
local Torrechts = tonumber (fibaro:getValue(198, 'value'));
local iconauf = 1081
local iconzu = 1080
local selfId = fibaro:getSelfId();
if Tormitte == 1 then fibaro:setGlobal("Garage_mitte", "auf");
fibaro:call(selfId, "setProperty", "ui.Label1.value", "offen")
fibaro:call(selfId, "setProperty", "currentIcon", "iconauf");
fibaro:debug("Tor mitte ist offen")
elseif Tormitte == 0 then fibaro:setGlobal("Garage_mitte", "zu");
fibaro:call(selfId, "setProperty", "ui.Label1.value", "geschlossen")
fibaro:call(selfId, "setProperty", "currentIcon", "iconzu");
fibaro:debug("Tor mitte ist geschlossen")
end
if Torrechts == 1 then fibaro:setGlobal("Garage_rechts", "auf");
fibaro:call(selfId, "setProperty", "ui.Label2.value", "offen")
fibaro:call(selfId, "setProperty", "currentIcon", "iconauf");
fibaro:debug("Tor rechts ist offen")
elseif Torrechts == 0 then fibaro:setGlobal("Garage_rechts", "zu");
fibaro:call(selfId, "setProperty", "ui.Label2.value", "geschlossen")
fibaro:call(selfId, "setProperty", "currentIcon", "iconzu");
fibaro:debug("Tor rechts ist geschlossen")
end