Seite 1 von 1

#1 Lua Programmierung / Feinheiten und Verständnis

Verfasst: Di 1. Jan 2013, 14:20
von Beleuchtfix
Ich habe eine Verständnisfrage zu LUA,

Ich benutze häufig zum Setzen von Tabellen-Variablen die Syntax
set('Variable.Name',Wert) was oft geht, aber manchmal auch zu ungewünschten Ergebnissen führt.

Nachtrag:

Code: Alles auswählen

VAR.soll2_text:set 'Test'
set ('VAR.soll1_text','n/a')

Die erste Zeile geht nicht,[zitat]ERROR: [string "-- 01.01.2013 13:42:01..."]:46: attempt to index global 'VAR' (a nil value)[/zitat] aber die Zweite
Kann mir da jemand den Unterschied erklären?

Code: Alles auswählen

testwert = use 'LCN.output.0.120.1'
function test(x)
   print ('Eingang :'..testwert.value)   
   if testwert.value == 100 then
--      set ('testwert',0)
      testwert:set ('0')
   else
--      set ('testwert',100)
      testwert:set ('100')
   end
   print ('Ende: '..testwert.value)
end

Die auskommentierten Zeilen funktionieren z.B. nicht, obwol ich z.B. mit set ('VAR.soll1_text', display_regulator(t_eg_soll.value)) die variable im Display anzeigen lassen kann.

Zusätzlich verstehe ich nicht, wieso der 2. Print Wert (Ende) den gleichen Wert anzeigt wie der Eingangswert war. Meine Lampe wird geschaltet und beim nächsten Mal habe ich den richtigen Eingangswert.

Kann mir jemand diese Feinheiten erklären?
Gruß
Florian

#2 RE: Lua Programmierung / Feinheiten und Verständnis

Verfasst: Di 1. Jan 2013, 16:29
von twinkelm
Hallo Florian,

mit testwert = use 'LCN.output.0.120.1' erzeugst Du ein Table-Objekt in LUA. Dieses Objekt hat die Methode :set, die Du dann aufrufen kannst.

Code: Alles auswählen

function dump(o)
    if type(o) == 'table' then
        local s = '{ '
        for k,v in pairs(o) do
                if type(k) ~= 'number' then k = '"'..k..'"' end
                s = s .. '['..k..'] = ' .. dump(v) .. ','
        end
        return s .. '} '
    else
        return tostring(o)
    end
end

testwert = use 'LCN.relay.0.80.3'
print('testwert ist ein ' .. type(testwert))
print('und hat die funktionen '.. dump(testwert))


gibt Dir

Code: Alles auswählen

INFO: SCRIPT RELOADED AT 16:06
testwert ist ein table
und hat die funktionen { ["off"] = function: 0x33ad04,["age"] = function: 0x26c980,["set"] = function: 0x2d7cc4,["toggle"] = function: 0x2c0154,["channel"] = function: 0x39d29c,["on"] = function: 0x2d52c4,["get"] = function: 0x3a1430,}


Mein Verständnis ist, dass die "alleinstehenden, globalen" Funktionen wie set, use usw. von der Domiq-Lua-Implementierung bereitgestellt werden. (maybe Filip can confirm / explain this).

Daher - VAR.soll2_text:set 'Test' -> macht keinen Sinn, wenn Du Dir vorher kein Objekt geholt hast (mit use, siehe oben)
set ('VAR.soll1_text','n/a') -> geht, da die "globale" Set-Funktion eben genau die von Dir richtig angegeben Parameter erwartet.

Happy new year!

#3 RE: Lua Programmierung / Feinheiten und Verständnis

Verfasst: Di 1. Jan 2013, 16:48
von Beleuchtfix
Vielen Dank, dass muss ich mir gaanz laaaangsam durch den Kopf gehen lassen ;-)
Das mit dem erst Erstellen und dann Benutzen verstehe ich langsam.
Kannst du mir auch sagen, warum:

Code: Alles auswählen

soll1_text = use 'VAR.soll1_text'
set ('VAR.soll1_text','n/a')
soll1_text:set 'n/a'
bei beiden Zeilen richtig ist, aber

Code: Alles auswählen

soll1_text = use 'VAR.soll1_text'
set ('soll1_text','n/a')
VAR.soll1_text:set 'n/a'
bei beiden Zeilen falsch ist?
Gruß
Florian

#4 RE: Lua Programmierung / Feinheiten und Verständnis

Verfasst: Di 1. Jan 2013, 17:02
von twinkelm

Code: Alles auswählen

soll1_text = use 'VAR.soll1_text'
soll1_text:set 'n/a'

und

Code: Alles auswählen

set ('VAR.soll1_text','n/a')

machen letztendlich dasselbe - setzen im Domiq-Modul die Variable VAR.soll1_text auf den Wert 'n/a'.

Zum zweiten Teil -
soll1_text = use 'VAR.soll1_text' <--- ist in Ordnung, erzeugt das soll1_text Objekt mit den Methoden :set, :get usw.
set ('soll1_text','n/a') <--- macht m.E. keinen Sinn, da im Domiq die Variable 'soll1_text' nicht bekannt ist (sondern nur VAR.soll1_text, MEM.soll1_text usw)
VAR.soll1_text:set 'n/a' <-- macht auch keinen Sinn, da Du oben das erzeugte Objekt soll1_text genannt hast (und nicht 'VAR.soll1_text').

#5 RE: Lua Programmierung / Feinheiten und Verständnis

Verfasst: Di 1. Jan 2013, 17:30
von Beleuchtfix
Puh :confused: ich denke drüber nach.

Danke, Gruß
Florian

#6 RE: Lua Programmierung / Feinheiten und Verständnis

Verfasst: Di 8. Jan 2013, 14:54
von DOMIQ
Hi, set(name,value) is nicer if you programatically write or read (with get) large number of channels. With "use" approach it would take excessive amount of memory.