ich bin seit gestern stolzer Besitzer eines Fibaro HomeCenter2 und wollte mich natürlich gleich mal auf die Programmierung stürzen.
Grundsätzlich kann ich ein wenig HTML, PHP und MySQL … verstehe also auch (ab und zu ) was in den LUA Skripten abläuft.
Habe jetzt erstmal eine funktionierende Szene die mir das Licht bei Bewegung anschaltet.
Folgendes will/wollte ich jetzt umsetzen:
Aktuell schaltet die erstellte Szene direkt, beim erkennen von Bewegung das Licht an. Ich würde jetzt aber gerne nicht mit dieser Szene
das Licht anschalten, sondern nur in eine Globale Variable schreiben das quasi Bewegung erkannt wurde.
Ich nutze als Grundlage das LUA Script aus einem Tutorial von dieser Seite und habe dann dort in der Funktion die die Bewegung meldet, eine kleine Erweiterung eingebaut.
Betreffende Funktion und der Kopf des Scripts sieht jetzt so aus:
--[[
%% properties
37 value
%% globals
AZ_MoveState
--]]
local sensors = {37}
local delay = 0
local debug = false
AZ_MoveState = "AZ_MoveState";
function actionsMotion()
fibaro:debug('Führe Aktionen bei Bewegungserkennung aus')
fibaro:call(28, "turnOn")
fibaro:setGlobal("AZ_MoveState", "yes")
print (AZ_MoveState)
end
fibaro:call(28, “turnOn”) schaltet zuverlässig das Licht an
fibaro:setGlobal(“AZ_MoveState”, “yes”) soll die vorhandene Globale Variable mit “yes” füllen. Die Variable habe ich bei:
Steuerungen -> Variablen Steuerung -> Vordefinierte Variablen angelegt und mit den Werten “yes” und “no” belegt. Voreingestellt ist “no”.
print (AZ_MoveState) gibt mir aber dummerweise nur “AZ_MoveState” aus.
Ich habe mir jetzt eine zweite Szene erstellt in der ich jetzt verzweifelt versuche den aktuellen Wert von AZ_MoveState auszulesen.
--[[
%% properties
%% globals
AZ_MoveState
--]]
---- Hier die ID der zu schaltenden Lampe eintragen ----
local idLampe = "28"
if (fibaro:getGlobal("AZ_MoveState") == "no" )
then print (fibaro:getGlobal("AZ_MoveState"))
fibaro:call(idLampe, "turnOff")
end;
if (fibaro:getGlobalValue("AZ_MoveState") == "yes" )
then print ("yes")
fibaro:call(idLampe, "turnOn")
end;
ABER … Das print aus der ersten if gibt mir jetzt: “no 1484078857” zurück.
Das die hintere Zahl der Timestamp ist habe ich jetzt auch gelesen. Aber wie kann ich mir nur das no anzeigen lassen?
Die if funktioniert ja scheinbar auch mit dem Timestamp in der Variablen.
P.S. Werden hier im Forum nur neue Themen erst nach Moderation freigegeben, oder auch antworten?
Ahhhhhh … Alles klar. Den Wert kann ich mir dann auch direkt anzeigen lassen.
Ich kann also mit fibaro:getGlobal("NameDerGlobalenVariable") if then else Abfragen machen, aber wenn ich den
eigentlichen Wert benötige, dann muss ich fibaro:getGlobalValue("NameDerGlobalenVariable") verwenden?
meine Funktion war leider nicht richtig. Hatte da den falschen markiert. Der Unterschied wird bei der Durchsicht meines geposteten Links klar.
fibaro:getGlobal: Retrieves the ‘value’ and ‘time last modified’ of a global variable registered in the Variables Panel.
fibaro:getGlobalValue :Retrieves the ‘value’ of a global variable registered in the Variables Panel.