Globale Variablen für Skriptverlauf verwenden

Hi Leute,
Ich hoffe ich nerve euch nicht mit meinen Fragen?

Ich würde gerne ein Skript bauen, das auf die Änderung von einer globalen Variable reagiert, die mehrere unterschiedliche Werte bekommen kann!
Ich will auf den Inhalt der globale Variable “TestStatus” reagieren.

Habe mir mal ein Testskript gebaut. Leider macht das Skript nicht was es soll ;-(
Bei Zeile 17 habe ich offensichtlich eine falsche “IF” Anweisung, habt ihr eventuell einen Tipp, oder vielleicht hat das ja schon jemand im Einsatz und kann mir einen Beispielcode zeigen, der funktioniert!?

--[[
%% properties
%% events
%% globals
TestStatus
--]]
-- farbige Debugg Meldungen
Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end

fibaro:setGlobal('TestStatus',"Wert1")
local TState = fibaro:getGlobal("TestStatus")
Debug("grey",(os.date("%d.%B %Y"..TState.. " ")))

function CheckStatus
  if TState == "Wert1" then
      Debug("green","Status ist ->"..TState.." ")
  else if TState == "Wert2" then
    Debug("green","Status ist ->"..TState.." ")
  else
    Debug('yellow','Status ist anders oder NICHT gesetzt -> '..TState.." ")
  end
end
end
CheckStatus()

Hi,

verusch mal mit tosting zu arbeiten.

also:


if tostring(TState) == tostring("Wert1") then

Danke Hoggle für den Tipp!

if tostring(TState) == tostring(“wert1”) then
bringt auch den selben Fehler
[DEBUG] 19:15:49: line 17: ‘(’ expected near ‘if’

Keine Ahnung warum?

Setzt mal die " neu.

Setzt mal die " neu.

Klappt nicht ;-(
Habe:
if(tostring(TState)) == tostring('Wert1') then
if tostring(TState) == tostring('Wert1') then
if tostring(TState) == tostring("Wert1") then
probiert, immer der selbe Fehler

Das heißt nicht “Else if”
Ohne das Freizeichen.

Was meinst du, steh ich auf der Leitung ???

Nicht
Else if
Sondern
Elseif

In Zeile 19

Ach so, sorry ich habe “Fragezeichen” statt “Freizeichen” gelesen. Brauch ne neue Brille :wink:

Danke, aber hat auch nix geholfen. Habe inzwischen auch ALLE ’ gegen " ersetzt und die " nochmal neu gemacht.
Immer noch die selbe Meldung .
[DEBUG] 07:08:24: line 17: ‘(’ expected near ‘if’
Hier nochmal der inzwischen geänderte Code:

--[[
%% properties
%% events
%% globals
TestStatus
--]]
-- farbige Debugg Meldungen
Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end

fibaro:setGlobal("TestStatus","Wert1")
local TState = fibaro:getGlobal("TestStatus")
Debug("grey",(os.date("%d.%B %Y"..TState.. " ")))

function CheckStatus
  if tostring(TState) == tostring("Wert1") then
      Debug("green","Status ist ->"..TState.." ")
  elseif tostring (TState) == tostring("Wert2") then
    Debug("green","Status ist ->"..TState.." ")
  else
    Debug("yellow","Status ist anders oder NICHT gesetzt -> "..TState.." ")
  end
end

end
CheckStatus()

sehr seltsam !?

Funktioniert Deine Debug-Funktion?

Zeile 13 - nimm mal GetglobalValue

Guten Morgen Hoggle, danke für deine Geduld!!

1.) Nein es kommt gar nicht zum Debug, sondern gleich die Fehlermeldung. Offensichtlich stoptt der Interpreter den Code bevor er anläuft!
2.) Auch mit “getglobalValue” das selbe Problem ;-(

Habe auch schon nach “tonumber” im Forum gesucht, aber nichts gefunden das irgenwie einen Hinweis auf den Fehler gibt…

Dann solltest Du zur Fehlersuche Dein Script zurück bauen bzw. sukzessive aufbauen.

Arbeite mal mit einfachen Fibaro:debug
Nimm die Funktionen da raus…

Mach ich, danke für die Hilfe!
Werde mich melden, wenn ich rausgefunden hab, was da los war…

--[[
%% properties
%% events
%% globals
TestStatus
--]]
-- farbige Debugg Meldungen
Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end

fibaro:setGlobal("TestStatus","Wert1")
local TState = fibaro:getGlobal("TestStatus")
Debug("grey",(os.date("%d.%B %Y"..TState.. " ")))

function CheckStatus()
  if tostring(TState) == tostring("Wert1") then
      Debug("green","Status ist ->"..TState.." ")
  elseif tostring (TState) == tostring("Wert2") then
    Debug("green","Status ist ->"..TState.." ")
  else
    Debug("yellow","Status ist anders oder NICHT gesetzt -> "..TState.." ")
  end
end

CheckStatus()

Danke.
Die fehlende Klammer Auf und Zu in Zeile 16 ?

Anscheinend… Hab es mit dem HC nicht getestet, so läuft der Code aber sauber durch den Interpreter.

Gruß

Hallo Ihr Beiden,
Habs gerade ausprobiert, funktioniert!
Mein Dank wird euch noch lange nachschleichen ;-))

Jetzt kann ich mit den Variablengesteuerten Skripten etwas rumspielen und meine Erfahrungen sammeln :wink:

Abschliessende Frage noch:
Was bewirkt es wenn ich in der Zeile 26 zum Beispiel:
CheckStatus(Wert1)
schreibe?
Kann ich damit den Status ändern?