Variablennamen zusammensetzen und Wert der Variable ausgeben

Hallo an euch,

irgendwie stehe ich völlig auf der “Gedankenleitung”. Ich möchte eine Funktion aufrufen und in der Funktion den Variablennamen zusammenbauen und dann den Wert der Variable haben. Aber ich komme auf keinen richtigen Weg. Vielleicht hat ja jemand einen Tipp für mich.

Nachfolgend die Funktion: Es ändert sich “Art” als String? worauf sich dann zusammengesetzt ein anderer Variablenname ergibt. In diesem Fall muss “SunUpMinuten” herauskommen und aus dieser Variable der Wert gelesen werden.

local SunUpMinuten = 563
function Sun(Art,Delay,Wert)
  fibaro:debug("Variablenname: "..("Sun".. Art .."Minuten"))
  local WertVar= Sun .. Art .. Minuten -- << Um diese Zusammensetzung geht es mir.
  fibaro:debug("WertVar: "..WertVar)
end
Sun("Up",30,"30")

Danke.
Gruß Peter

Hallo Peter,

es ist immer hilfreich die Fehlermeldung mit zu posten.
In Deinem Fall verwendest Du in der Funktion Variablen die nicht gefüllt sind. Du übergibst die Werte Art, Delay und Wert an die Funktion, möchtest aber Sun, Art und Minuten in einer Variable zusammenfügen. Die Variablen Sun und Minuten sind allerdings leer.

Wenn ich Dich richtig verstanden habe, möchtest Du folgendes ausgeben:
fibaro:debug(“Sun”…Art…“Minuten”)

Grüße
Rene

Hallo Rene,

sorry wegen der Fehlermeldung… aber ich habe diverses ausprobiert und hatte die unterschiedlichsten Fehlermeldungen.
Aktuell bekomme ich keine Fehlermeldung, da ich als Ausgabe den String erhalte. Ich möchte jedoch nicht den String sondern den Inhalt, also den Wert, der Variable “SunUpMinuten”.

Aktueller Code:

local SunUpMinuten=469
function SunTime(Art,Delay,Wert)
  fibaro:debug("Variablenname: "..("Sun".. Art .."Minuten"))
  local WertVar= "Sun" .. Art .. "Minuten"
  fibaro:debug("WertVar: "..WertVar)
end
SunTime("Up",30,"30")

Mir geht es also um folgende Zeile:
local WertVar= "Sun" … Art … "Minuten"
hier möchte ich den Wert aus
local SunUpMinuten=469
erhalten.

Die Funktion soll in “Art” einen String übergeben mit dem ich die Variable aus “WertVar” unterschiedlich zusammensetzen kann. D.h. “Sun” und “Minuten” bleiben immer gleich nur der String aus “Art” ändert sich. Mir fehlt wahrscheinlich nur die richtige Syntax um das zu erreichen.

Ich glaube wir hatten uns etwas missverstanden. Schon einmal Danke für deinen Einsatz.

Gruß
Peter

sunminuten.png

Vielleicht hilft das?

Abfrage Globale:
value = fibaro:getGlobal('name')

Ich versteh nur nicht, warum man den Namen derartig zusammensetzen muss. Variablennamen sind in der Regel einmalig und nicht veränderbar. In Deiner Funktion wird außerdem der übergebene Werte “Delay” und “Wert” nicht verwendet.

Hallo Ändy,

ja meine Funktion ist noch nicht fertig, daher werden aktuell die Variablen “Delay” und “Wert” nicht genutzt.
Die Funktion getGlobal kenne ich, jedoch führt es nicht zu meinem gewünschten Ergebnis. Zum einen soll es nicht über eine globale Variable gehen und zum anderen hat es folgenden Hintergrund.
Die Idee dahinter ist eine allgemein gültige Funktion zu schaffen in der nur die notwendigsten Randparameter mitgeteilt werden. Und da die Variablen einer definierten Syntax folgen wollte ich hier nur den veränderlichen String, in diesem Fall “Up”, mitgeben. In der Funktion soll später durch mathematische Operation Grenzwerte berechnet werden und weiter dann geprüft werden ob der Wert innerhalb definierter Grenzwerte liegt. Meine Idee ist gut und sie funktioniert auch bereits in Ansätzen nur hadere ich eben mit dem Zusammensetzen des Strings so das er als Variablennamen genutzt werden kann und mir den Value der zusammengesetzten Variable ausgegeben wird.
Vielleicht hat ja doch noch jemand eine Idee.

Gruß
Peter

Hallo Peter,

wie rufst Du denn Deine Funktion auf und was übergibst Du in Art,Delay und Wert an die Funktion?

Grüß
Rene

Hallo Rene,

der Aufruf erfolgt wie oben:
Sun("Up",30,"30")
Hast du bestimmt übersehen.

Ich habe jetzt schon einmal probiert das “Up” durch den ganzen Variablennamen zu ersetzen, dies funktioniert und wäre eine optionale Lösung für mich.
Trotz alle dem interessiert es mich schon noch, ob es doch eine Lösung für meine Anfrage gibt. Für globale Variablen gibt es ja noch die Möglichkeit von _G doch in so einer Verkettung durch Funktionsaufruf habe ich noch nichts gefunden.
Die Lösung mit dem vollständigen Variablennamen sieht wie folgt aus:
Sun(SunUpMinuten,30,“30”)

Gruß
Peter

Hallo Peter,

Du hast recht, ich habe es übersehen.
Dann ist Dein Problem aber klar. Du übergibst die Variable SunUpMinuten nicht an die Funktion.

Mit Deinem Funktionsaufruf SunTime(“Up”,30,“30”) der Funktion function SunTime(Art,Delay,Wert) setzt Du Art auf “Up”, Delay auf 30 und Wert auf “30”. Vom Wert 469 in SunUpMinuten keine Spur. Es müsste, wie Du schon geschrieben hast SunTime(SunUpMinuten, 30, “30”) lauten. Wobei ich den Sinn der Deklaration von Wert als String nicht verstehe.

Grüße
Rene