Hello,
I have a Z-Wave Heatit ZM Relay Single Relay 16A that suddenly stops working correctly and this means no more hot water. ![]()
From /var/log/openhab/openhab.log:
2026-01-01 18:38:27.965 \[INFO \] \[org.openhab.core.Activator \] - Starting openHAB 4.0.2 (build Release Build)
2026-01-01 18:38:28.578 \[INFO \] \[.core.internal.i18n.I18nProviderImpl\] - Time zone set to âEurope/\*\*\*\*\*\*\*â.
2026-01-01 18:38:28.580 \[INFO \] \[.core.internal.i18n.I18nProviderImpl\] - Locale set to âen\_\*\*â.
2026-01-01 18:38:28.582 \[INFO \] \[.core.internal.i18n.I18nProviderImpl\] - Measurement system set to âSIâ.
2026-01-01 18:38:31.200 \[WARN \] \[.transport.servlet.ServletController\] - Canât find the request for http://192.168.111.177:8080/rest/eventsâs Observer
2026-01-01 18:38:31.200 \[WARN \] \[.transport.servlet.ServletController\] - Canât find the request for http://192.168.111.177:8080/rest/events/statesâs Observer
2026-01-01 18:38:47.399 \[WARN \] \[org.eclipse.jetty.server.HttpChannel\] - /rest/events
java.lang.NullPointerException: Cannot invoke âorg.apache.cxf.transport.MessageObserver.onMessage(org.apache.cxf.message.Message)â because âthis.incomingObserverâ is null
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:265) \~\[?:?\]
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) \~\[?:?\]
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) \~\[?:?\]
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) \~\[?:?\]
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:225) \~\[?:?\]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:298) \~\[?:?\]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:222) \~\[?:?\]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) \~\[bundleFile:4.0.4\]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:273) \~\[?:?\]
at org.ops4j.pax.web.service.spi.servlet.OsgiInitializedServlet.service(OsgiInitializedServlet.java:102) \~\[?:?\]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) \~\[?:?\]
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) \~\[?:?\]
at org.ops4j.pax.web.service.spi.servlet.OsgiFilterChain.doFilter(OsgiFilterChain.java:100) \~\[?:?\]
at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:310) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) \~\[?:?\]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) \~\[?:?\]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) \~\[?:?\]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) \~\[?:?\]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) \~\[?:?\]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) \~\[?:?\]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) \~\[?:?\]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) \~\[?:?\]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) \~\[?:?\]
at org.ops4j.pax.web.service.jetty.internal.PrioritizedHandlerCollection.handle(PrioritizedHandlerCollection.java:96) \~\[?:?\]
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772) \~\[?:?\]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) \~\[?:?\]
at org.eclipse.jetty.server.Server.handle(Server.java:516) \~\[?:?\]
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) \~\[?:?\]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) \~\[?:?\]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) \~\[?:?\]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) \~\[?:?\]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) \~\[?:?\]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) \~\[?:?\]
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) \~\[?:?\]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) \~\[bundleFile:9.4.50.v20221201\]
at java.lang.Thread.run(Thread.java:833) \~\[?:?\]
2026-01-01 18:38:47.399 \[WARN \] \[org.eclipse.jetty.server.HttpChannel\] - /rest/events/states
java.lang.NullPointerException: Cannot invoke âorg.apache.cxf.transport.MessageObserver.onMessage(org.apache.cxf.message.Message)â because âthis.incomingObserverâ is null
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:265) \~\[?:?\]
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) \~\[?:?\]
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) \~\[?:?\]
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) \~\[?:?\]
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:225) \~\[?:?\]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:298) \~\[?:?\]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:222) \~\[?:?\]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) \~\[bundleFile:4.0.4\]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:273) \~\[?:?\]
at org.ops4j.pax.web.service.spi.servlet.OsgiInitializedServlet.service(OsgiInitializedServlet.java:102) \~\[?:?\]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) \~\[?:?\]
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) \~\[?:?\]
at org.ops4j.pax.web.service.spi.servlet.OsgiFilterChain.doFilter(OsgiFilterChain.java:100) \~\[?:?\]
at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:310) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) \~\[?:?\]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) \~\[?:?\]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) \~\[?:?\]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) \~\[?:?\]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) \~\[?:?\]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) \~\[?:?\]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) \~\[?:?\]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) \~\[?:?\]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) \~\[?:?\]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) \~\[?:?\]
at org.ops4j.pax.web.service.jetty.internal.PrioritizedHandlerCollection.handle(PrioritizedHandlerCollection.java:96) \~\[?:?\]
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:772) \~\[?:?\]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) \~\[?:?\]
at org.eclipse.jetty.server.Server.handle(Server.java:516) \~\[?:?\]
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) \~\[?:?\]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) \~\[?:?\]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) \~\[?:?\]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) \~\[?:?\]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) \~\[?:?\]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) \~\[?:?\]
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) \~\[?:?\]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) \~\[bundleFile:9.4.50.v20221201\]
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) \~\[bundleFile:9.4.50.v20221201\]
at java.lang.Thread.run(Thread.java:833) \~\[?:?\]
2026-01-01 18:38:49.785 \[WARN \] \[e.internal.SseItemStatesEventBuilder\] - Attempting to send a state update of an item which doesnât exist: ZWave_Heatit_ZM_Relay_Single_Relay_16A_Hot_Water
2026-01-01 18:38:49.786 \[WARN \] \[e.internal.SseItemStatesEventBuilder\] - Attempting to send a state update of an item which doesnât exist: ZWave_Heatit_ZM_Relay_Single_Relay_16A_Hot_Water_Alarm_heat
2026-01-01 18:38:49.788 \[WARN \] \[e.internal.SseItemStatesEventBuilder\] - Attempting to send a state update of an item which doesnât exist: ZWave_Heatit_ZM_Relay_Single_Relay_16A_Hot_Water_Alarm_power
2026-01-01 18:38:49.789 \[WARN \] \[e.internal.SseItemStatesEventBuilder\] - Attempting to send a state update of an item which doesnât exist: ZWave_Heatit_ZM_Relay_Single_Relay_16A_Hot_Water_Electric_meter_kWh
2026-01-01 18:38:49.791 \[WARN \] \[e.internal.SseItemStatesEventBuilder\] - Attempting to send a state update of an item which doesnât exist: ZWave_Heatit_ZM_Relay_Single_Relay_16A_Hot_Water_Electric_meter_watts
2026-01-01 18:38:49.792 \[WARN \] \[e.internal.SseItemStatesEventBuilder\] - Attempting to send a state update of an item which doesnât exist: ZWave_Heatit_ZM_Relay_Single_Relay_16A_Hot_Water_Reset_the_total_power_consumption
2026-01-01 18:38:49.794 \[WARN \] \[e.internal.SseItemStatesEventBuilder\] - Attempting to send a state update of an item which doesnât exist: ZWave_Heatit_ZM_Relay_Single_Relay_16A_Hot_Water_Scene_Number
2026-01-01 18:38:49.795 \[WARN \] \[e.internal.SseItemStatesEventBuilder\] - Attempting to send a state update of an item which doesnât exist: ZWave_Heatit_ZM_Relay_Single_Relay_16A_Hot_Water_Switch
2026-01-01 18:38:57.359 \[INFO \] \[.core.model.lsp.internal.ModelServer\] - Started Language Server Protocol (LSP) service on port 5007
2026-01-01 18:39:04.024 \[INFO \] \[e.automation.internal.RuleEngineImpl\] - Rule engine started.
2026-01-01 18:39:07.339 \[INFO \] \[o.internal.handler.AstroThingHandler\] - Scheduled Positional job astro:sun:c604771739 every 300 seconds
2026-01-01 18:39:11.589 \[INFO \] \[zwave.handler.ZWaveControllerHandler\] - Attempting to add listener when controller is null
2026-01-01 18:39:16.728 \[INFO \] \[ve.internal.protocol.ZWaveController\] - Starting ZWave controller
2026-01-01 18:39:16.729 \[INFO \] \[ve.internal.protocol.ZWaveController\] - ZWave timeout is set to 5000ms. Soft reset is false.
2026-01-01 18:39:16.760 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:16.943 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:17.106 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:17.425 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:17.730 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:17.906 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:18.067 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:18.181 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:18.372 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:18.562 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:18.778 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:18.988 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:19.131 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:19.320 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:19.512 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:19.631 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:19.918 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:20.051 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
2026-01-01 18:39:20.310 \[WARN \] \[nal.protocol.ZWaveTransactionManager\] - NODE 7: Not initialized (ie node unknown), ignoring message.
I tried some interaction from the web GUI and I got some hits on node7 from /var/log/openhab/events.log.
2026-01-01 18:57:56.081 \[INFO \] \[ab.event.ThingStatusInfoChangedEvent\] - Thing âzwave:device:41cc7dcd2c:node7â changed from ONLINE: Node initialising: PING to OFFLINE (COMMUNICATION_ERROR): Node is not communicating with controller
2026-01-01 19:09:19.299 \[INFO \] \[ab.event.ThingStatusInfoChangedEvent\] - Thing âzwave:device:41cc7dcd2c:node7â changed from OFFLINE (COMMUNICATION_ERROR): Node is not communicating with controller to ONLINE
I can see that if I "switch onâ from the physical switch (quick on/off), I get see a red light when pitch black, for a few seconds.
- I tried to switch on/off also from the hardware, but I do not nee any improvement. Do you have any guidance on how to get this back on track?
- In worst case scenario, I would need to give up the schedule of for the hot water and let it always on. Could the relay be not working properly and not allow the electricity to go through even though there would be just physical switch involved?
Thanks.




