Posts: 12
Threads: 6
Joined: Feb 2021
Reputation:
0
Hello,
how can i set the option export for a groupaddress with a script?
Background:
I have to set export for many addresses on many different spacelynks for bacnet access.
I want to create a script who makes this automatic. The scheme is on every spacelynk the same, so i can catch the right addresses with a script.
Many Thanks
Posts: 1769
Threads: 6
Joined: Jul 2015
Reputation:
118
Can be done with script, but fastest way is to set a filter and do a mass edit to enable the export flag..
Posts: 12
Threads: 6
Joined: Feb 2021
Reputation:
0
Hello Erwin,
no, for me is the fastest way with a script. I have to set to many different filters for this on 50 different Spacelynks.
What is the command for setting the option? I don't see it in the documentation.
Thanks
Posts: 7807
Threads: 42
Joined: Jun 2015
Reputation:
449
You can set the export field via a DB query:
Code: db:update('objects', { export = 1 }, { id = 1 })
db:update('objects', { export = 1 }, { id = 2 })
db:update('objects', { export = 0 }, { id = 3 })
db:update('objects', { export = 1 }, { id = 4 })
script.reloadbacnet()
Check if you have the latest firmware because there was a bug when the BACnet service stopped working after a certain number of reload calls.
Posts: 17
Threads: 3
Joined: Apr 2018
Reputation:
0
30.05.2023, 09:35
(This post was last modified: 30.05.2023, 09:44 by christian.hegland@caverion.com.)
(21.06.2021, 06:42)admin Wrote: You can set the export field via a DB query:
Code: db:update('objects', { export = 1 }, { id = 1 })
db:update('objects', { export = 1 }, { id = 2 })
db:update('objects', { export = 0 }, { id = 3 })
db:update('objects', { export = 1 }, { id = 4 })
script.reloadbacnet()
Check if you have the latest firmware because there was a bug when the BACnet service stopped working after a certain number of reload calls.
Hi admin,
Would it be possible to "reverse" this function, and make a script that outputs all the objects that's already exported?
The usecase would be when I'll have to mass delete all knx objects and re-import them, I could run the script beforehand, to get all exported objects,
and then easily set them with the script you provided earlier in this thread.
Would be awesome if this functionallity were implemented in LM5. By using for instance the object filter, and filter by exported objects
Best regards
Christian
Posts: 7807
Threads: 42
Joined: Jun 2015
Reputation:
449
Save all objects IDs with export enabled to storage:
Code: ids = db:getlist('SELECT id FROM objects WHERE export=1')
storage.set('export_ids', table.concat(ids, ','))
Restore from storage:
Code: ids = storage.get('export_ids')
if type(ids) == 'string' and #ids > 0 then
db:query('UPDATE objects SET export=1 WHERE id IN (' .. ids .. ')')
end
script.reloadbacnet()
Posts: 17
Threads: 3
Joined: Apr 2018
Reputation:
0
31.05.2023, 09:26
(This post was last modified: 31.05.2023, 10:02 by christian.hegland@caverion.com.)
(31.05.2023, 06:44)admin Wrote: Save all objects IDs with export enabled to storage:
Code: ids = db:getlist('SELECT id FROM objects WHERE export=1')
storage.set('export_ids', table.concat(ids, ','))
Restore from storage:
Code: ids = storage.get('export_ids')
if type(ids) == 'string' and #ids > 0 then
db:query('UPDATE objects SET export=1 WHERE id IN (' .. ids .. ')')
end
script.reloadbacnet()
Fantastic! Thank you very much
Would it also be possible to use the script to add a tag called (export)?
Then i could filter objects by the tag name
(31.05.2023, 09:26)christian.hegland@caverion.com Wrote: (31.05.2023, 06:44)admin Wrote: Save all objects IDs with export enabled to storage:
Code: ids = db:getlist('SELECT id FROM objects WHERE export=1')
storage.set('export_ids', table.concat(ids, ','))
Restore from storage:
Code: ids = storage.get('export_ids')
if type(ids) == 'string' and #ids > 0 then
db:query('UPDATE objects SET export=1 WHERE id IN (' .. ids .. ')')
end
script.reloadbacnet()
Fantastic! Thank you very much
Would it also be possible to use the script to add a tag called (export)?
Then i could filter objects by the tag name
RE: I think i solved it:
ids = db:getlist('SELECT id FROM objects WHERE export=1')
storage.set('export_ids', table.concat(ids, ','))
-- loop over the ids and add the 'export' tag
for _, id in pairs(ids) do
grp.addtags(id, 'export')
end
Best regards
Christian
Posts: 7807
Threads: 42
Joined: Jun 2015
Reputation:
449
In this case you need to store ids as a table, not as a string:
Code: ids = db:getlist('SELECT id FROM objects WHERE export=1')
storage.set('export_ids', ids)
Tag script:
Code: ids = storage.get('export_ids')
for _, id in ipairs(ids) do
grp.addtags(id, 'export')
end
|