I have an alarm pipeline with a loop that was designed to send out text notifications every 5 minutes when the alarm is active. On multiple occasions I noticed that the text messages would stop even though the alarm status should have still been active. I discovered that there is a limit on the number of transitions between blocks in the pipeline, and once that limit is reached, the alarm is dropped.
Any ideas on what I need to do get around this issue?
Seems you have a loop somewhere or are your alarms active for a very long time?
If you're using an expression, do you have a direct loopback from output to input?
In the case above, the expression would spin into a infinite cycle whenever the alarm would be shelved.
Could add a 1 minute delay on the true output and it should at least delay this significantly from happening
Having a look at your pipeline give a better idea what could be causing this.
We do have an intentional loop in the alarm system, and we use a delay. We want a text message to be generated every 5 minutes whenever the system is in the alarm state.
The problem is that the alarm pipeline drops out after a certain number of attempts even if the alarm should still be active. Is there any way to remove the infinite cycle protection?
I should mention that I initially set the delay to 30 seconds and then evaluated how many loops had been executed based on the property "counter". But that would only allow the alarm to be active for a total of 170 minutes. I switched the delay to 5 minutes (since that matches the frequency with which we want to send texts), but I can still only keep the alarm pipeline active for about 28 hours. It's possible this particular alarm could be active longer than that, so I am really trying to remove the restriction entirely.
You can manually set the property
pipelineTransitionCount back to 0 to prevent the infinite loop protection from kicking off. Either with a set property block or via scripting:
from com.inductiveautomation.ignition.common.alarming.config import CommonAlarmProperties
event[CommonAlarmProperties.PipelineTransitionCount] = 0
Thanks so much for this tip. I edited a pipeline a few days ago. Had an alarm that was stuck in there; and could not get the pipeline to stop (I edited out the bug but the old alarm was circulating till eternity well at least for 1024 transitions which would have taken about 10 days) So I set the transaction count to 1; the pipeline was retired then I set it back to 1024. regards!