Mit LUA Script anderes Script beeinflussen

Moin, Moin ist es möglich mittels Szene den Inhalt ( z. B. eines Arrays ) einer anderen Szene zu verändern? Sozusagen Werte von einer Szene zur anderen übergeben.

Hi,

nein. Alle Szenen laufen in einer Sandbox und können andere nicht beeinflussen. (starten/beenden geht natürlich, es können aber keine Werte übergeben werden) Hier bleibt nur der Weg über globale Variablen. Damit kann so etwas realisiert werden.

Gruß

Danke Daniel das hilft, denn ich müsste doch auch in einer Globalen Variablen mehrere Werte in einem Array hinterlegen können.

fibaro:setGlobal={123,234,345}

Richtig???

Nein, falsch :wink:

fibaro:setGlobal('VAR_NAME', '{123,234,345}')

o. K. Danke sieht gut aus :stuck_out_tongue_winking_eye:

Nochmals vielen Dank Daniel esFunktioniert!! Kann ich dann mit getGlobal auslesen und in neuer Szene verwenden.

Sorry, bin im falschen Tab gewesen :smiley: Lösch mal die Antworten. Sorry

^^Top, dass es klappt :slight_smile:

Ja, die globalen Variablen kannst du szenenübergreifend und in VDs nutzen.

Zu früh gefreut. :stuck_out_tongue_winking_eye:

Durch die " vor und nach der {} wird zwar das {123,234,345} in die Globale Variable geschrieben und kann auch ausgelesen werden, wird aber als String interpretiert und nicht als drei Zahlen, nämlich 123, 234, 345 !!!

Auslesen lassen sich somit nur die Einzelwerte { 1 2 3 usw.

Mit Stringmanipulationen kommt man dann über Umwege zum Ziel, aber es muss doch noch eine andere Möglichkeit geben.

In der globalen Variablen sollen am Ende z. B. drei Wete stehen 123. 234. und 345 die ich dann mit einer for do Schleife als drei Werte (ID’s von Geräten) auslesen möchte.

Noch eine Idee??!!:stuck_out_tongue_winking_eye::blush:

Klar, Ideen und Lösungen hab ich viele :wink:

Trag die Zahlen ohne die geschweiften Klammen ein und setz die dann im Skript erst in die geschweiften Klammern:

local array = {fibaro:getGlobal…}

Dann sollte es eigentlich ein Array sein.

Gruß

ggf. hilft das:
http://forum.fibaro.com/index.php?/topic/20695-show-me-yours-and-ill-show-you-mine-lua-feedback/?p=84566

So setze hiermit die Globale Variable:

fibaro:setGlobal("vPoppID" , "125,127,147,149")

Und habe es dann versucht entsprechend umzusetzen, das sieht dann so aus

local vPoppID = {fibaro:getGlobal("vPoppID")}

for i=1, #vPoppID do
  
  
  

   fibaro:call(vPoppID[i], "turnOn")
  
  
  i=i+1
  
  end

Die Variable wird wenn ich den Button im VD drücke richtig gesetzt, und liegt dann in der Varibable so vor 125,127,147,149

Der Zweite Teil wo ich das ganze in einem Array auslesen will geht nicht da sagt er dann ERROR line lua sript.

wenn ich mit #vPoppID auslesen möchte wie viele Einträge im Array sind, wirft er 2 aus.

Ich zitiere Dich mal " Klar, Ideen und Lösungen hab ich viele ;)"

Ok, dann funktioniert es mit dem Array nicht, da das Array nicht als Array erkannt wird. Dann muss als “Workaround” der String am Komma getrennt werden. Damit sollte es gehen:

fibaro:setGlobal("array_test" , "125,127,147,149")
local poppID = fibaro:getGlobal("array_test")
for ID in string.gmatch(poppID, '([^,]+)') do
    print(ID)
end

Gruß :slight_smile:

Daniel hier ist irgendwie der Wurm drin, habe jetzt mal wieder 2-3 Stunden herumgespielt. Aber so richtig will es noch nicht funktionieren.

Ich habe es so eingegeben wie von Dir empfohlen.
Die erste Zeile ist unproblematisch, Globale Variable wird gesetzt. Alles prima
Die zweite Zeile übernimmt dann die Werte von der Globalen Variablen in die locale Variable poppID, verstanden.
Das ergibt dann fibaro:debug(poppID) als Ergebnis 125,127,147,149 aus was aber immer noch kein Array ist weil fibaro:debug(#poppID) nicht 4 sondern 15 ausgibt, also jede Ziffer und jedes zeichen separat.

Nimmt man nun die 3 Zeile hinzu werden bei fibaro:debug(ID) insg. 4 Debugzeilen mit den Einzelwerten 125,127,147,149 untereinander ausgeworfen.
Bei fibaro:debug(#ID) wirft er mir dann 4 Debugzeilen mit dem Wert 3 untereinander aus.

Ich weis auch nicht wie ich diese Werte weiter verarbeiten soll???

Hoogle hatte oben noch einen Link empfohlen, den habe ich dann auch noch ausprobiert. Der erste Teil ist gleich, dass sieht dann so aus

local poppID = {}

for ID in string.gmatch(fibaro:getGlobal("vPoppID"), "([^,]+)") do

      table.insert(poppID, tonumber(ID))

  end

  
for k=1, #poppID do
  
  fibaro:debug(fibaro:getName(poppID[k]))
  
  end

Da bin ich etwas weiter, da er mir die Klarnamen der Device ID ausgibt, also für ID 125 den Namen Popp Wohnzimmer !!!

mache ich aus fibaro:debug dann fibaro:call gibt es eine Fehlermeldung line lua script, weil er eine Zahl z.B. 125 erwartet, die müsste ich doch jetzt irgendwie herausbekomen??? Statt getName getValue funktioniert nicht!!!

YEEEEEEEEEEEEEEEEEEEEEEHHHHHHHHHHHHHHH ich habs.

local poppID = {}

for ID in string.gmatch(fibaro:getGlobal("vPoppID"), "([^,]+)") do

      table.insert(poppID, tonumber(ID))

  end

for i=1, #poppID do
  
  
  

   fibaro:call(poppID[i], "turnOn")
  
  
  i=i+1
  
  end

so geht es. Danke für Deine Hilfe!!

Für meine Lua ausbildung wäre es noch schön, wenn Du mir kurz erklären könntest, was "([^,]+)" das hier bewirkt???

Danke im Voraus.

Alle Zeichen, außer das Komma. Das +, damit mehrere Zeichen erkannt werden.

Man nennt es Pattern.

Gruß