This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Set export option with script
#1
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
Reply
#2
Can be done with script, but fastest way is to set a filter and do a mass edit to enable the export flag..
Reply
#3
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
Reply
#4
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.
Reply
#5
(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
Reply
#6
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()
Reply
#7
(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 Big Grin
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 Big Grin
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
Reply
#8
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
Reply


Forum Jump: