![]() |
|
widget template - Printable Version +- LogicMachine Forum (https://forum.logicmachine.net) +-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1) +--- Forum: OLD visualization (https://forum.logicmachine.net/forumdisplay.php?fid=9) +--- Thread: widget template (/showthread.php?tid=2717) |
widget template - Frank68 - 10.07.2020 Hi I'm trying to use widgets, and I find it particularly reductive to have to create a widget for each shutter, since the connection to the object is given in the widget, there is a way to pass the parameters not inside the widget but to its use. I attach an example image Tank's RE: widget template - admin - 10.07.2020 Does your shutter actuator support 4-bit objects? If so you can just use 4-bit control which has +/- buttons for control via press and hold. RE: widget template - Frank68 - 10.07.2020 (10.07.2020, 06:44)admin Wrote: Does your shutter actuator support 4-bit objects? If so you can just use 4-bit control which has +/- buttons for control via press and hold.My problem I have 3 different bit up/down/stop and 1 bit for status open/close some idea ? RE: widget template - admin - 10.07.2020 You can create a script to convert 4-bit to 1-bit. In visualization object select 4-bit as Main object and 1-bit as Status object. This way the icon will show the status. Script to determine 4-bit action (stop/up/down). Change 1-bit addresses and values as needed. Code: value = tonumber(event.datahex, 16)
up = bit.band(value, 8) == 8
stop = bit.band(value, 7) == 0
if stop then
grp.write('32/1/3', true)
elseif up then
grp.write('32/1/4', true)
else
grp.write('32/1/5', true)
endRE: widget template - Frank68 - 10.07.2020 (10.07.2020, 08:35)admin Wrote: You can create a script to convert 4-bit to 1-bit. In visualization object select 4-bit as Main object and 1-bit as Status object. This way the icon will show the status.Hi but in this way need to create more script , i have more shutter and more windows , best solution is a tempplate widget , where is possible to connecto directly at the right address . If it's possible I prefer not write more script. Thank's RE: widget template - Daniel - 10.07.2020 Hi There is no such thing what you are looking for. Some users created a scripts with direct database write where they shifted groups of a template page. This will work only if you have certain pattern of object creation. Here is an example https://forum.logicmachine.net/showthread.php?tid=1249&pid=7450#pid7450 Not sure what for but I wrote some script to shift visu objects based on selected shift. It may be useful to you. Code: planID = 8 --plan number shown after # in quisk visu preview http://URL/scada-vis/#6
visObjectType = 1 --all binary objects are type 0 and all numeric objects are type 1
--All Manin objects will be shifted by selected addres.
controlObjectMain = 0
controlObjectSub = 0
controlObjectAddress = 0
--Select shift for status object. If status object is not used in object visu it will be ignored.
statusObjectMain = 0
statusObjectSub = 0
statusObjectAddress = 0
------------------------------------------ End Parameters ------------------------------------------
------------------------------ DON'T CHANGE ANYTHING UNDER THIS LINE -------------------------------
dbobjects = db:getall('SELECT id, object, statusobject FROM visobjects WHERE floor = ' .. planID .. ' AND type = ' .. visObjectType .. '')
--log(dbobjects)
for _, tableData in ipairs(dbobjects) do
oldControlAddress = tableData.object
oldStatusAddress = tableData.statusobject
currentRow = tableData.id
newControlAddress = oldControlAddress + ((controlObjectMain * 2048) + (controlObjectSub * 256) + controlObjectAddress)
newStatusAddress = oldStatusAddress + ((statusObjectMain * 2048) + (statusObjectSub * 256) + statusObjectAddress)
log('oldControlAddress= '..tostring(oldControlAddress)..', currentRow= '..tostring(currentRow)..', newControlAddress= ' ..tostring(newControlAddress)..', newStatusAddress= ' ..tostring(newStatusAddress) )
db:update('visobjects', { object = newControlAddress }, { id = currentRow })
if (oldControlAddress == oldStatusAddress) then --if no status object selected main object must be used
db:update('visobjects', { statusobject = newControlAddress }, { id = currentRow })
else
db:update('visobjects', { statusobject = newStatusAddress }, { id = currentRow })
end
end
log('update finished')
script.disable(_SCRIPTNAME)Always make a backup before using any of this scripts. BR |