Page 1 of 1

Global arrays

Posted: Sunday 30 June 2019 21:15
by Varazir
Hello,

I'm trying to setup a array in the global_data.lua file

Code: Select all

	data = {
		globHallway = { initial = 65 },
		globBedRoom = { initial = 13 },
		globLivingRoom = { initial = 36 },
		globComputerRoom = { initial = 73 },
		globTvBench = { initial = 42, 74, 45, 43 },
		globGroups = { initial = "globHallway", "globBedRoom", "globLivingRoom", "globTvBench" },
		globCurrentGroup = { initial = "globComputerRoom" },
	},
then call it like this

domoticz.globalData.globGroups[1]

But I get a nil value, so I'm doing something wrong.
So I need some help please.

Re: Global arrays

Posted: Sunday 30 June 2019 22:48
by waaren
Varazir wrote: Sunday 30 June 2019 21:15 I'm trying to setup a array in the global_data.lua file

Code: Select all

	data = {
		globGroups = { initial = "globHallway", "globBedRoom", "globLivingRoom", "globTvBench" },
	},
then call it like this
domoticz.globalData.globGroups[1]
But I get a nil value, so I'm doing something wrong.
You wil have to initialize it as a table. Try this

Code: Select all

   
data = 
{
        myGlobalVar = { initial = 12 },
        globHallway = { initial = 65 },
        globBedRoom = { initial = 13 },
	globLivingRoom = { initial = 36 },
	globComputerRoom = { initial = 73 },
	globTvBench = { initial = 42, 74, 45, 43 },
	globGroups = { initial = { "globHallway", "globBedRoom", "globLivingRoom", "globTvBench" } },
	globCurrentGroup = { initial = "globComputerRoom" },
},
[/quote]

Re: Global arrays

Posted: Sunday 30 June 2019 23:50
by Varazir
Still getting Nil

Code: Select all

return {
	-- global persistent data
	data = {
		globHallway = { initial = 65 },
		globBedRoom = { initial = 13 },
		globLivingRoom = { initial = 36 },
		globComputerRoom = { initial = 73 },
		globTvBench = { initial = 42, 74, 45, 43 },
		globGroups = { initial = { "globHallway", "globBedRoom", "globLivingRoom", "globTvBench" } },
		globCurrentGroup = { initial = "globComputerRoom" },
	},

Code: Select all

return {
	on = {
		devices =   {
		                'IKEA Switch Right Arrow'
		            },
    },
		        
	    data =      {
	                    loop  = { initial = 0 }
	                },
	    logger =    {   
	                    level            =  domoticz.LOG_DEBUG,   
                        marker           =  "ikeaSelect" 
                    },

                
	execute = function(domoticz, device)
    
        if (device.state == "Click" )
            then
                if domoticz.data.loop <= 4
                    then
                        domoticz.data.loop = domoticz.data.loop + 1
                    else
                        domoticz.data.loop = 1
                end
            currentGroup = domoticz.globalData.globGroups[domoticz.data.loop]
            domoticz.log(domoticz.data.loop, domoticz.LOG_INFO)
            domoticz.log(currentGroup, domoticz.LOG_INFO)
            domoticz.log(device.state, domoticz.LOG_INFO)
            domoticz.log(device.name, domoticz.LOG_INFO)
            domoticz.log(domoticz.globalData.globGroups[2], domoticz.LOG_INFO)
            device.switchOff().silent()
        end

	end
}

Re: Global arrays

Posted: Monday 01 July 2019 0:11
by Varazir
I added the array in the triggerd lua file

Code: Select all

return {
	on = {
		devices =   {
		                'IKEA Switch Right Arrow'
		            },
    },
		        
	    data =      {
	                    loop  = { initial = 0 },
	                    Groups = { initial = { "globHallway", "globBedRoom", "globLivingRoom", "globTvBench" } },
	                },
	    logger =    {   
	                    level            =  domoticz.LOG_DEBUG,   
                        marker           =  "ikeaSelect" 
                    },

                
	execute = function(domoticz, device)
    
        if (device.state == "Click" )
            then
                if domoticz.data.loop <= 4
                    then
                        domoticz.data.loop = domoticz.data.loop + 1
                    else
                        domoticz.data.loop = 1
                end
            -- currentGroup = domoticz.globalData.globGroups[domoticz.data.loop]
            domoticz.log(domoticz.data.loop, domoticz.LOG_INFO)
            -- domoticz.log(currentGroup, domoticz.LOG_INFO)
            domoticz.log(device.state, domoticz.LOG_INFO)
            domoticz.log(device.name, domoticz.LOG_INFO)
            -- domoticz.log(domoticz.globalData.globGroups[2], domoticz.LOG_INFO)
            domoticz.log(domoticz.data.Groups[2], domoticz.LOG_INFO)
            device.switchOff().silent()
        end

	end
}
The ones I have commented out failed but domoticz.data.Groups[2] works.

Re: Global arrays  [Solved]

Posted: Monday 01 July 2019 0:33
by waaren
Varazir wrote: Sunday 30 June 2019 23:50 Still getting Nil
When you modify something in the initial area of the data declaration. You need to remove the corresponding data file in <domoticz dir>/scripts/dzVents/data
So if your scriptname is "test.lua" then remove "__data_test.lua ". This persistent data file will be rebuild on the next execution of the script.
Same is true for global_data.lua (remove "__data_global_data.lua")