dynamic variable name - gjniewenhuijse - 15.03.2021
i like to get data from a table, but the variable name is dynamic. See my example:
Code: -- devices
devices = {
{'9d', 'SENSOR', '8/4/5', 'v.hum'},
{'9e', 'COMMON', '8/4/6', 'v.tst'}
}
-- data get from webservice
v = {hum=1, tst='abc'}
log(v.hum, v.tst)
-- print some data from v, based on data in devices
for k,k_items in pairs(devices) do
-- log variable name
log(k_items[4])
-- log the data in variable with name k_items[4], for example the data in v.hum or v.tst (1 or abc)
end
RE: dynamic variable name - admin - 15.03.2021
Like this, and make sure that v is defined before devices:
Code: -- data get from webservice
v = {hum=1, tst='abc'}
log(v.hum, v.tst)
-- devices
devices = {
{'9d', 'SENSOR', '8/4/5', v.hum},
{'9e', 'COMMON', '8/4/6', v.tst}
}
-- print some data from v, based on data in devices
for k,k_items in pairs(devices) do
-- log variable name
log(k_items[4])
-- log the data in variable with name k_items[4], for example the data in v.hum or v.tst (1 or abc)
end
RE: dynamic variable name - gjniewenhuijse - 15.03.2021
(15.03.2021, 13:02)admin Wrote: Like this, and make sure that v is defined before devices:
Code: -- data get from webservice
v = {hum=1, tst='abc'}
log(v.hum, v.tst)
-- devices
devices = {
{'9d', 'SENSOR', '8/4/5', v.hum},
{'9e', 'COMMON', '8/4/6', v.tst}
}
-- print some data from v, based on data in devices
for k,k_items in pairs(devices) do
-- log variable name
log(k_items[4])
-- log the data in variable with name k_items[4], for example the data in v.hum or v.tst (1 or abc)
end
No thats not possible, because my devices are defined before i get the data from the webservice.
Now i defined v hardcoded, but normally this thats comes from the web and is parsed.
RE: dynamic variable name - admin - 15.03.2021
Then do it like this:
Code: -- devices
devices = {
{'9d', 'SENSOR', '8/4/5', 'hum'},
{'9e', 'COMMON', '8/4/6', 'tst'}
}
-- data get from webservice
v = {hum=1, tst='abc'}
log(v.hum, v.tst)
-- print some data from v, based on data in devices
for k,k_items in pairs(devices) do
key = k_items[4]
val = v[ key ]
-- log variable name
log(val)
-- log the data in variable with name k_items[4], for example the data in v.hum or v.tst (1 or abc)
end
RE: dynamic variable name - gjniewenhuijse - 15.03.2021
yeah.. thanks
i need the value 'attributes.soilHumidity.value'
how to do this in a nested table?
Code: ["type"]
* string: SENSOR
["attributes"]
* table:
["soilTemperature"]
* table:
["timestamp"]
* string: 2020-10-31T14:49:03.034+0000
["value"]
* number: 13
["lightIntensity"]
* table:
["timestamp"]
* string: 2020-10-31T14:49:16.260+0000
["value"]
* number: 7
["soilHumidity"]
* table:
["timestamp"]
* string: 2020-10-31T14:49:03.004+0000
["value"]
* number: 100
["ambientTemperature"]
* table:
["timestamp"]
* string: 2020-10-31T14:49:17.023+0000
["value"]
* number: 16
["relationships"]
* table:
["device"]
* table:
["data"]
* table:
["type"]
* string: DEVICE
["id"]
* string: 40940964969046840
["id"]
* string: 5647657567567567567
here my new example code
Code: -- devices
devices = {
{'9d', 'SENSOR', '8/4/5', 'attributes.soilHumidity.value'},
{'9e', 'COMMON', '8/4/6', 'attributes.batteryLevel.value'}
}
-- data get from webservice
v = { attributes= { soilHumidity={value=1},batteryLevel={value=100} } }
log(v)
log(v.attributes.soilHumidity.value)
log(v.attributes.batteryLevel.value)
-- print some data from v, based on data in devices (dynamic)
for k,k_items in pairs(devices) do
key = k_items[4]
val = v[ key ]
log(key, val)
end
|