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.

if condition not working
#1
Why is this if condition not working? That is, even if some address is at '1', it always enters 'else'


if (grp.read('2/0/6')==1 or grp.read('2/0/8')==1 or grp.read('2/0/10')==1) then

  grp.write('12/0/100', 1) -- Zonas Comunes VA P0
 
  else
    grp.write('2/0/100', 0)
 
end
Reply
#2
You need to use grp.getvalue() instead of grp.read(). Comparison with 1 won't work correctly because the value for 1-bit objects in true/false.

Assign a common tag to 2/0/6, 2/0/8 and 2/0/10 then map an event script to this tag:
Code:
value = grp.getvalue('2/0/6') or grp.getvalue('2/0/8') or grp.getvalue('2/0/10')
grp.write('2/0/100', value)

If you need multiple OR/AND gates then it's more convenient to use this solution:
https://kb.logicmachine.net/scripting/lo...-statuses/
Reply
#3
(02.07.2024, 07:30)admin Wrote: You need to use grp.getvalue() instead of grp.read(). Comparison with 1 won't work correctly because the value for 1-bit objects in true/false.

Assign a common tag to 2/0/6, 2/0/8 and 2/0/10 then map an event script to this tag:
Code:
value = grp.getvalue('2/0/6') or grp.getvalue('2/0/8') or grp.getvalue('2/0/10')
grp.write('2/0/100', value)

If you need multiple OR/AND gates then it's more convenient to use this solution:
https://kb.logicmachine.net/scripting/lo...-statuses/

I have changed it to this way. In the log I do see that the variable takes the correct value, but it does not do the grp.write(), that is, it does not refresh the new value.


AZonasComunesP0 = grp.getvalue('2/0/6') or grp.getvalue('2/0/8') or grp.getvalue('2/0/10')
grp.write('2/0/100', AZonasComunesP0)
log(AZonasComunesP0)
Reply
#4
Works for me. Make sure that 2/0/100 does not have the same tag as 2/0/6, 2/0/8 and 2/0/10. To lower the bus load use grp.checkwrite() instead of grp.write().
Reply
#5
(02.07.2024, 07:53)admin Wrote: Works for me. Make sure that 2/0/100 does not have the same tag as 2/0/6, 2/0/8 and 2/0/10. To lower the bus load use grp.checkwrite() instead of grp.write().

yes it's working, thanks
Reply
#6
(02.07.2024, 07:30)admin Wrote: You need to use grp.getvalue() instead of grp.read(). Comparison with 1 won't work correctly because the value for 1-bit objects in true/false.

Assign a common tag to 2/0/6, 2/0/8 and 2/0/10 then map an event script to this tag:
Code:
value = grp.getvalue('2/0/6') or grp.getvalue('2/0/8') or grp.getvalue('2/0/10')
grp.write('2/0/100', value)

If you need multiple OR/AND gates then it's more convenient to use this solution:
https://kb.logicmachine.net/scripting/lo...-statuses/

Quote:it's more convenient to use this solution

Why it is more convenient? It feels too overengineering.
Then, is it better to write ALL conversion logic of all features in project in such only one resident script?
Also about timers on that page, why not just use os.sleep with one of the new script execution policy?
Reply
#7
There's a high chance of copy/paste errors when you have multiple scripts with the same logic but different input group addresses.
Event scripts can be used but it's easier to manage a single resident than tens of events.
Reply


Forum Jump: