Globale Variablen

Hallo,

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 :wink: ) 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.

Könnt ihr mir irgendwie auf die Sprünge helfen?

Hi,

du musst den Wert erst aus der globalen Variablen auslesen. Dies kannst du mit fibaro:getGlobal(varName). Dies kannst du dann auch direkt debuggen.

Am Besten schaust du dir die Befehle mal unter https://developer.fibaro.com/docs/fghc-luaapi an. Gibt dort noch ein paar mehr :slight_smile:

Gruß

Soweit hatte ich es mittlerweile auch geschafft :slight_smile:

--[[
%% 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?

Hi,

nimm mal:
fibaro:getGlobalValue("AZ_MoveState")

Sofern Dein erster Beitrag freigegeben wurde, brauchen weitere Antworten oder neue Themen nicht freigegeben werden.

VG Hoggle

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?

Was ist für abfragen zu bevorzugen?

Ich nutze nur die 2. Variante, auch bei den if-Abfragen.

Hi,

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.

Gruß

Na jetzt ist ja alles geklärt und ich kann weiter an meinen Szenen basteln die ich irgendwann mal gebrauchen könnte.