I was doing a test of upgrading Ignition from 8.1 to 8.3 and was checking if alarms still work as expected and ran into an issue.
The alarms on the Alarm Status Table do not show even though they show up on the Alarm Status Journal.
Pasting the error as text as well: ComponentModel Alarm Status Table at [0:0] failed to query alarms java.util.concurrent.CompletionException: java.lang.NullPointerException at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(Unknown Source) at java.base/java.util.concurrent.CompletableFuture.completeThrowable(Unknown Source) at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source) at java.base/java.util.concurrent.CompletableFuture$Completion.run(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:58) at java.base/java.lang.Thread.run(Unknown Source) java.lang.NullPointerException: null
I even created a new Perspective Project and tried to put a new view with the Alarm Status Table and Alarm Journal and ran into the same problem.
I checked the know issue page for 8.3.0 (8.3.0 Known Issues | Ignition User Manual) and for Alarming section it says that “Active alarms will now display correctly in the Alarm Status Table component.”, so it may have been an issue for 8.3.0 which was fixed in 8.3.1
I upgraded to Ignition 8.3.1 (b2025102109).
The Perspective module version is 3.3.1 (b2025102109).
So these should be latest.
Any help to fix/troubleshoot this issue would be appreciated.
Update
Turns out the Alarm Status Table wasn’t showing anything because of some errors that were coming when alarms coming from MQTT were present.
If I open a Script console and try a system.cirruslink.engine.readAlarms() I get
Java Traceback:
Traceback (most recent call last):
File "", line 1, in
java.lang.NullPointerException:
java.lang.NullPointerException: java.lang.NullPointerException:
at org.python.core.Py.JavaError(Py.java:545)
at org.python.core.Py.JavaError(Py.java:536)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:192)
at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction.__call__(ScriptManager.java:563)
at org.python.core.PyObject.__call__(PyObject.java:446)
at org.python.core.PyObject.__call__(PyObject.java:450)
at org.python.pycode._pyx54.f$0(<input>:1)
at org.python.pycode._pyx54.call_function(<input>)
at org.python.core.PyTableCode.call(PyTableCode.java:173)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1703)
at org.python.core.Py.exec(Py.java:1747)
at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:277)
at org.python.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:130)
at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:628)
at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:616)
at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.desktop/javax.swing.SwingWorker.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException:
Traceback (most recent call last):
File "", line 1, in
java.lang.NullPointerException:
java.lang.NullPointerException: java.lang.NullPointerException
This is probably the MQTT Transmission module is 4.0.30 and the MQTT Engine is 5.0.0
If I clear all MQTT alarms via system.cirruslink.engine.clearAllAlarms() then the Alarm Status Table displays alarms correctly
I think CirrusLink called out that all module versions on an ignition gateway should match, maybe mixing 4.0.30 transmission and 5.0.0 engine is causing something unexpected to happen?
Yes, from what I can tell this is the main issue. Data continues to come even though there is a version mismatch between Transmission & Engine, but alarms even though they are sent from the Edge causes an error when displaying it in the Alarm Status table. I have opened a ticket for Cirrus Link to ask if maybe something can be done to ensure interoperability between Transmission 4.x and Engine 5.x.
That's the annoying part of cirrus link. They want everything to match, not realizing that's about impossible to achieve when you have a large number of edge devices. I tried using their alarm pass-thru stuff, and finally just rolled my own so I was just using simple MQTT/SpB.
So you just replicated the alarms on the tags on your Ignition Gateway? Or I am misunderstanding.
The advantage of using MQTT Alarms is that if you acknowledge them on the Gateway, they will be acknowledged on the Edge as well which is what I am most interested in.