Websocket Node-Red error “Ignition disconnected”

Licensed Edge Gateway, latest node-red module installed.

I can use the tag-read node and tag-browse node just fine.

Would like to use the websocket subscription vs an inject interval or cronjob.

Tried using the same configuration node as tag-read, when that failed I made a new config object just for the ws node. Tried both secure and insecure ports. Tried with tls and no tls connections (tag-read, tag-browse both work with tls configured) made a second tls config for the second server config described above.

I’m not sure what else to try, but websocket tag node immediately shows “ignition disconnected” status no matter how I configure it, and the heartbeat value Im entering seems to fail to write into the config object or node context. Looking in the info tab i show the https:// and the port at 8088 or 8043. The HB value is “ “
I would assume the websocket connector is actually making a wss:// connection. But I just don’t know where to look to observe that

also having some issues here. I have node-red and ignition on the same pc and reading/writing without websockets is working fine. just would love to start using the websockets/websocket nodes. Is there any additional config that must be done? I'm not aiming to use SSL at all if possible. @Travis.Cox / @kcollins1

What version of the Ignition NodeRED module do y ou have? Version 1.5.8+ supports the websocket nodes.

1.5.12 in ignition - latest I see
1.5.10 in node-red-contrib-ignition-nodes - latest release that node-red pulls

I do see now that you mention it there seems to be a 1.5.11 release for the nodes, but my node-red doesn't grab it.

removed 1.5.10 nodes, installed 1.5.11 manually, ws nodes still only showing "ignition disconnected" status

Is there anything unique in between your Node-RED instance and the Ignition gateway or are they a direct connection?

They are direct connection, actually on the same hardware. using 127.0.0.1/localhost or the IP of it on the network works correctly with the non-websocket read node, just having issues with the ws. I did just check the diagnostic log on the ignition gateway and I'm getting get Map:Error creating servlet node-red-ws repeatedly.

I can provide the .idb log file if that helps, appreciate the help guys!

Okay.. you'll need the Ignition Node-RED module 1.5.12 for 8.1.25+ (since Jetty 10 changed how servlets in Ignition are created). You're correct that your Node-RED side will still be at 1.5.11 (no changes were required on that side).

If you're on 8.1.24 or older, use the 1.5.11 Ignition module.

I am on ignition 8.1.25, and ignition module version 1.5.12. only my nodes version was 1.5.10 (and is now 1.5.11)

1.5.12 (b2023021717) to be most precise for the gateway module
Ignition Version: 8.1.25 (b2023021409)

this is a fairly recent install so trying to stay with newest versions.

just an overview of what I have in the log - obviously not a full dump

[21:29:56]: Map: Error creating servlet node-red-ws 
INFO   | jvm 1    | 2023/02/27 21:29:56 | javax.servlet.ServletException: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.imdc.nodered.servlet.NodeREDWebSocketServlet$NodeREDWebSocketChannel.<init>()
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.websocket.server.JettyWebSocketServlet.init(JettyWebSocketServlet.java:172)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at javax.servlet.GenericServlet.init(GenericServlet.java:180)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at com.inductiveautomation.ignition.gateway.bootstrap.MapServlet.service(MapServlet.java:75)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1410)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1665)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1570)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1383)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1543)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1305)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at com.inductiveautomation.catapult.handlers.RemoteHostNameLookupHandler.handle(RemoteHostNameLookupHandler.java:121)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:301)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:51)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:141)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.Server.handle(Server.java:563)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:505)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:762)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:497)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:416)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:385)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:272)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.lambda$new$0(AdaptiveExecutionStrategy.java:140)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:411)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:934)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1078)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at java.base/java.lang.Thread.run(Unknown Source)
INFO   | jvm 1    | 2023/02/27 21:29:56 | Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.imdc.nodered.servlet.NodeREDWebSocketServlet$NodeREDWebSocketChannel.<init>()
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.websocket.server.JettyWebSocketServlet$CustomizedWebSocketServletFactory.register(JettyWebSocketServlet.java:218)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.imdc.nodered.servlet.NodeREDWebSocketServlet.configure(NodeREDWebSocketServlet.java:37)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.websocket.server.JettyWebSocketServlet.init(JettyWebSocketServlet.java:168)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	... 42 common frames omitted
INFO   | jvm 1    | 2023/02/27 21:29:56 | Caused by: java.lang.NoSuchMethodException: org.imdc.nodered.servlet.NodeREDWebSocketServlet$NodeREDWebSocketChannel.<init>()
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at java.base/java.lang.Class.getConstructor0(Unknown Source)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at java.base/java.lang.Class.getDeclaredConstructor(Unknown Source)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	at org.eclipse.jetty.websocket.server.JettyWebSocketServlet$CustomizedWebSocketServletFactory.register(JettyWebSocketServlet.java:214)
INFO   | jvm 1    | 2023/02/27 21:29:56 | 	... 44 common frames omitted

Does this error still happen after restarting the gateway?

I think you will need to remove the current module, restart Ignition, and install the new version again. Can you try that?

ignition module removed, gateway restarted, module re-installed and gateway restarted again, error returns

will do the same with the node-red-contrib-ignition nodes in node red and report back. error does not occur on gateway when node-red does not have a ws node present / active.

no dice guys, removed node-red-contrib-ignition-nodes from node-red, rebooted whole machine, reinstalled node-re-contrib-ignition-nodes, restarted node-red, added "read ws" node and the error is back in the gateway log.

okay, I'll try to dive a little deeper into the error soon and see what I can find.

Looks like there was one other issue that required attention for the migration from Jetty 9 to Jetty 10.

EDIT: fix pending here: Fix websockets functionality for Ignition 8.1.25+ by thirdgen88 · Pull Request #35 · IgnitionModuleDevelopmentCommunity/IgnitionNode-RED · GitHub

1 Like

The PR was merged. You can find the release here:

1 Like

Thanks guys, working great so far!

Hello Everyone...Hope you are doing great

In reference to this this thread, I am still facing the issue of 'ignition disconnected' error occurs at every 15-20 sec in the "Tag Read ws" node on NodeRed.

image

The, connected again

image

My Ignition is: 8.1.27
NodeRed Ignition Module: 1.5.13

What's in between your NodeRed and your Ignition gateway? That looks like a deep packet inspection firewall disrupting the websocket.