Logic Machine Forum
False alarm - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: False alarm (/showthread.php?tid=6060)



False alarm - CristianAgata - 26.07.2025

Good day,
I have a problem with false data, some time the inverter answer 768 in a modbus TCP register (inverter in foult) although it is not in this condiction then in the next reading after about one minute it answer again 20 (system ok). This register generates an event script to test the value and as you can see in the script it generates an alarm. My question: is it possible wait for example wait 2 minutes and check it again before generate the alarm?

Code:
evento = event.getvalue()
-- scansione se in un inverter c'è l'allarme (check what kind of event value)
data = grp.tag('Allarme')

for i = 1, 18, 1 do
    --log(data[i].value)
  if data[i].value == 768 then
    status = 'error'
    log('Inverter in errore : ',data[i]) --who is
    break
    else
    status = 'ok'
  end
end

-- invio comando di chiamata (there is an error 768 so make a call with dealers)
if status == 'error' then
  grp.checkwrite('Uscite Combinatore - Relay 1',1,1,'Uscite Combinatore - Relay status 1')
   log('un inverter è in blocco')
  else
  grp.checkwrite('Uscite Combinatore - Relay 1',0,1,'Uscite Combinatore - Relay status 1')
    --log('tutto ok')
end
I thougt to insert a delay and use first istance then check again the value. but I don't know if it is a good idea.
Thanks for any other suggest.
BR Cristian


RE: False alarm - admin - 28.07.2025

Use a scheduled script instead of event. Set it to run every one or two minutes. Error state will be set only if object has a fault value two times in a row:
Code:
objs = grp.tag('Allarme')

key = 'errors'
errors = storage.get(key, {})

err = false

for i, obj in ipairs(objs) do
  iserr = obj.value == 768

  if iserr and errors[i] then
    err = true
    log('Inverter in errore : ', obj) --who is
  end

  errors[i] = iserr
end

storage.set(key, errors)

grp.checkwrite('Uscite Combinatore - Relay 1', err, 1, 'Uscite Combinatore - Relay status 1')



RE: False alarm - CristianAgata - 28.07.2025

(28.07.2025, 07:40)admin Wrote: Use a scheduled script instead of event. Set it to run every one or two minutes. Error state will be set only if object has a fault value two times in a row:
Code:
objs = grp.tag('Allarme')

key = 'errors'
errors = storage.get(key, {})

err = false

for i, obj in ipairs(objs) do
  iserr = obj.value == 768

  if iserr and errors[i] then
    err = true
    log('Inverter in errore : ', obj) --who is
  end

  errors[i] = iserr
end

storage.set(key, errors)

grp.checkwrite('Uscite Combinatore - Relay 1', err, 1, 'Uscite Combinatore - Relay status 1')
Thanks admin
 I will load as fast as possible.