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.

Remove or Add the object from scene sequence via script
#1
Hi ,

I need to add to the scene sequence or to remove from the scene sequence via script like this.

value = event.getvalue()
if value == true then
  -- add object '1/1/1' to scene 'homeenter'
  else 
  -- remove object '1/1/1' to scene 'homeenter' 
  end

Thx,
Reply
#2
Might be simpler to create two scenes with and without the object and just enable/disable them based on the condition above.
------------------------------
Ctrl+F5
Reply
#3
Another solution is to use a virtual object with AND gate via an event script:
Code:
value = event.getvalue()

gate = '1/1/1'
output = '1/1/2'

if grp.getvalue(gate) then
  grp.write(output, value)
end
Reply
#4
Unfortunately, neither solution works for me. My goal is for the customer to change the scenarios 100% by himself, on a screen.
I have a design like the attached picture.
Theoretically, I can create a virtual output poinst and virtual selection points for all group addresses and gate them with the event script. However, we are doing this demo not for our own project, but for our dealers, and creating hundreds of additional points and creating hundreds of additional scripts is not a sustainable business and partners eventually mix up the scripts and the job becomes impossible.
For this reason, my only way is to add and remove objects with a simple script. I need your help on this matter.

Note : i can' upload picture to the post.

here is the link of screen.

https://ibb.co/qxStbzC
Reply
#5
Do you know this?
------------------------------
Ctrl+F5
Reply
#6
I need a solution for visualation page. Not for mosaic beta Sad

(08.03.2024, 09:29)savaskorkmaz Wrote: Unfortunately, neither solution works for me. My goal is for the customer to change the scenarios 100% by himself, on a screen.
I have a design like the attached picture.
Theoretically, I can create a virtual output poinst and virtual selection points for all group addresses and gate them with the event script. However, we are doing this demo not for our own project, but for our dealers, and creating hundreds of additional points and creating hundreds of additional scripts is not a sustainable business and partners eventually mix up the scripts and the job becomes impossible.
For this reason, my only way is to add and remove objects with a simple script. I need your help on this matter.

Note : i can' upload picture to the post.

here is the link of screen.

https://ibb.co/qxStbzC
Reply
#7
Add to Common functions:
Code:
function getscenebyname(name)
  local id = db:getone('SELECT id FROM scenes WHERE name=?', name)
  assert(id, 'scene not found: ' .. name)
  return id
end

function getsequenceid(sceneid, object)
  local query = 'SELECT id FROM scene_sequence WHERE scene=? AND object=?'
  return db:getone(query, sceneid, object)
end

function getdata(name, addr)
  local scene = getscenebyname(name)
  local object = buslib.encodega(addr)
  local sequenceid = getsequenceid(scene, object)

  return scene, object, sequenceid
end

function addtoscene(name, addr)
  local scene, object, sequenceid = getdata(name, addr)
  local res, err

  if sequenceid then
    err = 'object already added'
  else
    res, err = require('webrequest')('scenes', 'sequence-save', {
      data = {
        scene = scene,
        object = object,
        bus_write = true,
      }
    })
  end

  return res, err
end

function removefromscene(name, addr)
  local scene, object, sequenceid = getdata(name, addr)
  local res, err

  if sequenceid then
    res, err = require('webrequest')('scenes', 'sequence-delete', {
      data = {
        id = sequenceid
      }
    })

    if not err then
      res = true
    end
  else
    err = 'object not found in scene'
  end

  return res, err
end

Usage example:
Code:
scenename = 'test'
address = '0/0/1'

res, err = addtoscene(scenename, address)
log(res, err)

res, err = removefromscene(scenename, address)
log(res, err)

Scene name must be unique. Each object can be in the scene only once.
Reply
#8
Worked wery well. Thx a lot.
Reply


Forum Jump: