In openHAB 5.2.1 I create a Solarman binding, For the channel
battery-battery-status:
type: deye-hybrid-battery-battery-status
config:
uom: ""
scale: 1
rule: 5
offset: 0
registers: "[0x00BD]"
readOnly: true
in MainUI I click “Add Link to Item…” → “Create new item”, accept all defaults → “Link”.
The newly created item shows under GET /settings/items/Solarman_Logger_Battery_Status value “Charge”.
When I obtain the item over GET /rest/items/Solarman_Logger_Battery_Status:
{"link":"https://192.168.0.10:8443/rest/items/Solarman_Logger_Battery_Status",
"state":"Charge",
"stateDescription":{"pattern":"%d","readOnly":true,"options":[]},
"lastState":"NULL","lastStateUpdate":1786786749539,
"lastStateChange":1786785463141,
"metadata":{"semantics":{"value":"Point","editable":false}},
"editable":true,
"type":"String",
"name":"Solarman_Logger_Battery_Status",
"label":"Solarman Logger Battery Status","tags":["Point"],"groupNames":[]}
When I put the item in a sitemap,
Default item=Solarman_Logger_Battery_Status
openhab logs the text below.
I guess the problem is the "state":"Charge" with pattern:"%d" in the /rest output. The work around is to use in sitemaps label="Description [%s]. This work-around should not be necessary.
2026-08-15 12:38:17.821 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading DSL model 'gg.sitemap'
2026-08-15 12:38:18.072 [WARN ] [org.eclipse.jetty.server.HttpChannel] - /basicui/app
java.lang.NullPointerException: Cannot invoke "Object.toString()" because "state" is null
at org.openhab.core.transform.util.ItemDisplayStateUtil.formatState(ItemDisplayStateUtil.java:146)
at org.openhab.core.ui.internal.items.ItemUIRegistryImpl.getDisplayValue(ItemUIRegistryImpl.java:428)
at org.openhab.core.ui.internal.items.ItemUIRegistryImpl.getLabel(ItemUIRegistryImpl.java:393)
at org.openhab.ui.basic.internal.render.AbstractWidgetRenderer.preprocessSnippet(AbstractWidgetRenderer.
java:138)
at org.openhab.ui.basic.internal.render.AbstractWidgetRenderer.preprocessSnippet(AbstractWidgetRenderer.
java:117)
at org.openhab.ui.basic.internal.render.TextRenderer.renderWidget(TextRenderer.java:58)
at org.openhab.ui.basic.internal.render.PageRenderer.renderWidget(PageRenderer.java:189)
at org.openhab.ui.basic.internal.render.PageRenderer.processChildren(PageRenderer.java:156)
at org.openhab.ui.basic.internal.render.PageRenderer.processPage(PageRenderer.java:121)
at org.openhab.ui.basic.internal.servlet.WebAppServlet.service(WebAppServlet.java:158)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:584)
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:113)
at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:334)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
In openHAB 5.2.1 I create a Solarman binding, For the channel
in MainUI I click “Add Link to Item…” → “Create new item”, accept all defaults → “Link”.
The newly created item shows under
GET /settings/items/Solarman_Logger_Battery_Statusvalue “Charge”.When I obtain the item over
GET /rest/items/Solarman_Logger_Battery_Status:{"link":"https://192.168.0.10:8443/rest/items/Solarman_Logger_Battery_Status", "state":"Charge", "stateDescription":{"pattern":"%d","readOnly":true,"options":[]}, "lastState":"NULL","lastStateUpdate":1786786749539, "lastStateChange":1786785463141, "metadata":{"semantics":{"value":"Point","editable":false}}, "editable":true, "type":"String", "name":"Solarman_Logger_Battery_Status", "label":"Solarman Logger Battery Status","tags":["Point"],"groupNames":[]}When I put the item in a sitemap,
openhab logs the text below.
I guess the problem is the
"state":"Charge"withpattern:"%d"in the/restoutput. The work around is to use in sitemapslabel="Description [%s]. This work-around should not be necessary.