Hi,
Ich habe mir überlegt eine zentrale Szene zu erstellen, die ein Device elegant EIN oder AUS schaltet.
Ziel der Aktion ist es einzelne Rollos (Fibaro Rollershutter) mit dieser Szene variabel abzufragen und entsprechend deren Zustand dann Aktionen zu setzen…
Inklusive Überprüfung und einer optionalen Verständigung per Push, Pushover oder Email.
Danach würde ich diese Szene gerne über andere Szenen aufrufen und ihr die ID des zu behandelnden Devices übergeben!
Da angeblich alle Szenen in einer eigenen Sandbox laufen ist das leider nicht so einfach zu realisieren.
Hat irgendjemand von euch eine Idee dazu?
Oder macht es Sinn das anders zu lösen?
Habe jetzt mal eine Szene entworfen die eine Zahl (ID-des Gerätes) aus einer globalen Variable ausliest.
Damit will ich ein einheitliches Skript zum Schliessen aller Rollos realisieren, das durch eine globale Variable getriggert wird
Das setzen der globalen Variable funktioniert schon, dort steht ein Wert wie z.B. “354” drinnen.
Wo ich noch Probleme hab, ist die Auswertung der Variable in der ausführenden Szene.
Ich bekomme inner die Meldung[DEBUG] 16:57:37: line 14: Assertion failed: Expected number
Vermutlich muss ich nur eine String Variable mit “tonumber” irgendwei richtig umwandeln, das hab ich aber leider noch nicht richtig geschafft ;-(
Habt ihr einen Tipp ich vermute es ist nur eine Kleinigkeit?
Hier die Szene die den Fehler produziert:
--[[
%% autostart
%% properties
%% events
%% globals
RolControl
--]]
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
fibaro:getGlobalValue('RolControl')
local JalID = fibaro:getGlobalValue("RolControl")
local DeviceValue = tonumber(fibaro:getValue(JalID,"value"))
local DeviceName = tonumber (fibaro:getName(JalID,"value"))
local DeviceRoom = fibaro:getRoomNameByDeviceID(JalID)
if (DeviceValue > 0) then
fibaro:call(JalID, "close")
Debug("green",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde geschlossen")))
else
Debug("blue",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." ist schon geschlossen")))
end
Ein getValue sollte eigentlich eine Number returnen. Ein getName natürlich nicht und es sollte auch zu keiner Number gemacht werden Wahrscheinlich wäre es da dann zu einer Fehlermeldung gekommen.
So nun hab ich es tum größten Teil geschafft, danke Boomx!
Schicke ich eine ID von einem gültigen Device, dann funktioniert mein Skript!!
Derzeit bekomme ich den Fehler [DEBUG] 22:21:12: line 17: attempt to compare number with nil
wenn eine ID von einem Gerät daher kommt, dass es nicht gibt?
Was ja grundsätzlich stimmt, denn eine ungültige ID, liefert keinen Wert bei DeviceValue.
Gibt es irgendeine Möglichkeit abzufragen ob das Device existiert?
Hier ist noch der fast funktioniuerende Code
--[[
%% properties
%% events
%% globals
RolControl
--]]
if (fibaro:countScenes()>1) then fibaro:abort() end -- lösche doppelte Szenen
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
fibaro:getGlobalValue('RolControl')
local JalID = tonumber(fibaro:getGlobalValue("RolControl"))
local DeviceValue = tonumber(fibaro:getValue(JalID,"value"))
local DeviceName = fibaro:getName(JalID)
local DeviceRoom = fibaro:getRoomNameByDeviceID(JalID)
if (DeviceValue > 0) then
fibaro:call(JalID, "close")
Debug("green",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde geschlossen")))
else
Debug("blue",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." ist schon geschlossen")))
end
if DeviceValue ~= NIL then
print('ID existiert')
else
print('ID existiert nicht')
end
Gruß
PS: Das sind alles LUA-Funktionen unabhängig von Fibaro. Es hilft oft sich LUA-Dokumentationen anzuschauen & löse dich von dem Gedanken über Fibaro-Funktionen etwas regeln zu wollen
Hat geklappt, Danke nochmal!
Du selbst hast mir schon mal einen Link zu einer deutschen LUA Doku geschickt. siehe hier
Der Link zu http://lua.coders-online.net/ hat allerdings leider nicht funktioniert ;-(
Daher versuche ich die Befehle zuerst hier über die Suchfunktion in Beispiel Skripten zu finden und selbst ausuprobieren.
Klappt mit den Funktionen, die ich schon halbwegs verstanden hab eh gut, bei den Anderen noch nicht so ganz
Werd mich mal auf die Suche machen, vieleicht find ich noch was…
Wenn du was weißt, bitte um einen Link, danke und gute Nacht
PS: Das war keine Kritik. Wollte nur darauf hinweisen. Wenn man LUA versteht, dann geht das relativ schnell von der Hand, du siehst ja, dass nur wenige Zeilen dein “Problem” lösen.
Ich verstehe dich sehr gut, denn ich habe früher selbst ein Forum betreut
Der Kompromiss zwischen zu viel Arbeit weil man den Usern alles lösen möchte und sinnvolle “Hilfe zur Selbsthilfe” ist mir durchaus ein Begriff
Es ist für mich derzeit noch etwas schwierig den Kompromiss zu finden zwischen stundenlang eine Sache zu testen, oder kurz mal hier eine Frage reinzustellen.
Speziell wenn die Euphorie eine Idee umzusetzen durch kleine Fehler ausgebremst wird
Hab mir die Doku schon runtergeladen und werde mir die reinziehen bevor ich weiterprogrammiere.
Danke dass ihr mir immer wieder auf die Sprünge helft, denn dadurch komme ich schneller voran …
Mein Skript läuft übrigens schon und ich kann den fertigen COde gerne hier mal posten und etwas beschreiben…
Hallo @boomx,
Habe mir, wie versprochen die LUA Doku reingezogen.
Leider komm ich damit so gar nicht zurecht ;-(
Der dort beschriebene Code korrespondiert so gar nicht mit den tollen Codebeispielen, die ich hier in eurem Forum finden.
Habe auf einem anderen Forum eine gute Einsteigerdoku gefunden, die etwas hilft. Wolle den Link hier posten, klappt aber nicht.
Sieht so aus als wäre da eine Sperre drin, denke das hat “politische” Gründe
Wie auch immer, ich werde mich weiterhin bemühen so viel wie möglich selbst rauszufinden, oder hier im Forum zu suchen…