Unable to determine item type based on metadata.type: BUFFER

OpenHAB 5.0.1 openHABian.

I’ve just moved from the ZWave binding to Z-Wave JS. Everything works fine except for a warning on Things of type Spirit Eurotronics / Thermostatic Valve at startup, and when disable/re-enable the Thing.

Node 10. Unable to determine item type based on metadata.type: BUFFER, fallback to 'String' please file a bug report

Here is a trace log of disable then re-enable:

2025-09-19 11:31:19.106 [DEBUG] [nternal.handler.ZwaveJSBridgeHandler] - Node 10. Unregistering listener
2025-09-19 11:31:43.349 [DEBUG] [nternal.handler.ZwaveJSBridgeHandler] - Node 10. Details requested, provided: true
2025-09-19 11:31:43.349 [DEBUG] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Building channels and configuration, containing 32 values
2025-09-19 11:31:43.350 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: multilevel-switch-value
2025-09-19 11:31:43.356 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=multilevel-switch-value, label=Current Value, description=null, unitSymbol=null, value=99, itemType=Number, writable=false, readProperty=currentValue, writeProperty=null, state=99, statePattern=StateDescription [minimum=0, maximum=99, step=null, pattern=%d, readOnly=true, channelStateOptions=[]], commandClassName=Multilevel Switch, commandClassId=38, endpoint=0]
2025-09-19 11:31:43.357 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: multilevel-switch-up
2025-09-19 11:31:43.357 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=multilevel-switch-up, label=Perform A Level Change (Up), description=null, unitSymbol=null, value=null, itemType=Switch, writable=true, readProperty=null, writeProperty=Up, state=NULL, statePattern=null, commandClassName=Multilevel Switch, commandClassId=38, endpoint=0]
2025-09-19 11:31:43.358 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: multilevel-switch-down
2025-09-19 11:31:43.358 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=multilevel-switch-down, label=Perform A Level Change (Down), description=null, unitSymbol=null, value=null, itemType=Switch, writable=true, readProperty=null, writeProperty=Down, state=NULL, statePattern=null, commandClassName=Multilevel Switch, commandClassId=38, endpoint=0]
2025-09-19 11:31:43.359 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: multilevel-switch-duration
2025-09-19 11:31:43.359 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=multilevel-switch-duration, label=Remaining Duration, description=null, unitSymbol=null, value=null, itemType=Number, writable=false, readProperty=duration, writeProperty=null, state=NULL, statePattern=StateDescription [minimum=null, maximum=null, step=null, pattern=%d, readOnly=true, channelStateOptions=[]], commandClassName=Multilevel Switch, commandClassId=38, endpoint=0]
2025-09-19 11:31:43.359 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: multilevel-switch-value
2025-09-19 11:31:43.360 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=multilevel-switch-value, label=Target Value, description=null, unitSymbol=null, value=null, itemType=Dimmer, writable=true, readProperty=null, writeProperty=targetValue, state=NULL, statePattern=StateDescription [minimum=0, maximum=100, step=null, pattern=%1d %%, readOnly=false, channelStateOptions=[]], commandClassName=Multilevel Switch, commandClassId=38, endpoint=0]
2025-09-19 11:31:43.360 [DEBUG] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. Channel multilevel-switch-value: existing channel updated
2025-09-19 11:31:43.360 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: multilevel-switch-restore-previous
2025-09-19 11:31:43.360 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=multilevel-switch-restore-previous, label=Restore Previous Value, description=null, unitSymbol=null, value=null, itemType=Switch, writable=true, readProperty=null, writeProperty=restorePrevious, state=NULL, statePattern=null, commandClassName=Multilevel Switch, commandClassId=38, endpoint=0]
2025-09-19 11:31:43.361 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: multilevel-sensor-air-temperature
2025-09-19 11:31:43.361 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=multilevel-sensor-air-temperature, label=Air Temperature, description=null, unitSymbol=°C, value=22.11, itemType=Number:Temperature, writable=false, readProperty=Air temperature, writeProperty=null, state=22.11 °C, statePattern=StateDescription [minimum=null, maximum=null, step=null, pattern=%.2f %unit%, readOnly=true, channelStateOptions=[]], commandClassName=Multilevel Sensor, commandClassId=49, endpoint=0]
2025-09-19 11:31:43.362 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: thermostat-mode-mode
2025-09-19 11:31:43.362 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=thermostat-mode-mode, label=Thermostat Mode, description=null, unitSymbol=null, value=1, itemType=Number, writable=true, readProperty=null, writeProperty=mode, state=1, statePattern=StateDescription [minimum=0, maximum=255, step=null, pattern=%d, readOnly=false, channelStateOptions=[StateOption [value=0, label=Off], StateOption [value=1, label=Heat], StateOption [value=11, label=Energy heat], StateOption [value=15, label=Full power], StateOption [value=31, label=Manufacturer specific]]], commandClassName=Thermostat Mode, commandClassId=64, endpoint=0]
2025-09-19 11:31:43.362 [WARN ] [ejs.internal.conversion.BaseMetadata] - Node 10. Unable to determine item type based on metadata.type: BUFFER, fallback to 'String' please file a bug report
2025-09-19 11:31:43.363 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: thermostat-mode-manufacturer-data
2025-09-19 11:31:43.363 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=thermostat-mode-manufacturer-data, label=Manufacturer Data, description=null, unitSymbol=null, value=null, itemType=String, writable=false, readProperty=manufacturerData, writeProperty=null, state=NULL, statePattern=null, commandClassName=Thermostat Mode, commandClassId=64, endpoint=0]
2025-09-19 11:31:43.363 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: thermostat-setpoint-setpoint-1
2025-09-19 11:31:43.364 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=thermostat-setpoint-setpoint-1, label=Setpoint (Heating), description=null, unitSymbol=°C, value=21, itemType=Number:Temperature, writable=true, readProperty=null, writeProperty=setpoint, state=21 °C, statePattern=StateDescription [minimum=8, maximum=28, step=null, pattern=%d %unit%, readOnly=false, channelStateOptions=[]], commandClassName=Thermostat Setpoint, commandClassId=67, endpoint=0]
2025-09-19 11:31:43.364 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: thermostat-setpoint-setpoint-11
2025-09-19 11:31:43.364 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=thermostat-setpoint-setpoint-11, label=Setpoint (Energy Save Heating), description=null, unitSymbol=°C, value=18, itemType=Number:Temperature, writable=true, readProperty=null, writeProperty=setpoint, state=18 °C, statePattern=StateDescription [minimum=8, maximum=28, step=null, pattern=%d %unit%, readOnly=false, channelStateOptions=[]], commandClassName=Thermostat Setpoint, commandClassId=67, endpoint=0]
2025-09-19 11:31:43.365 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. createConfigDescriptions with Id: configuration-invert-lcd
2025-09-19 11:31:43.370 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. createConfigDescriptions with Id: configuration-lcd-timeout
2025-09-19 11:31:43.373 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. createConfigDescriptions with Id: configuration-backlight
2025-09-19 11:31:43.373 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. createConfigDescriptions with Id: configuration-battery-report
2025-09-19 11:31:43.374 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. createConfigDescriptions with Id: configuration-temperature-report-threshold
2025-09-19 11:31:43.375 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. createConfigDescriptions with Id: configuration-valve-opening-percentage-report
2025-09-19 11:31:43.376 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. createConfigDescriptions with Id: configuration-window-open-detection
2025-09-19 11:31:43.377 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. createConfigDescriptions with Id: configuration-temperature-offset
2025-09-19 11:31:43.377 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: notification-power-management-battery-maintenance-status
2025-09-19 11:31:43.377 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=notification-power-management-battery-maintenance-status, label=Battery Maintenance Status, description=null, unitSymbol=null, value=0, itemType=Number, writable=false, readProperty=Power Management, writeProperty=null, state=0, statePattern=StateDescription [minimum=0, maximum=255, step=null, pattern=%d, readOnly=true, channelStateOptions=[StateOption [value=0, label=idle], StateOption [value=10, label=Replace battery soon], StateOption [value=11, label=Replace battery now]]], commandClassName=Notification, commandClassId=113, endpoint=0]
2025-09-19 11:31:43.378 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: notification-system-hardware-status
2025-09-19 11:31:43.378 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=notification-system-hardware-status, label=Hardware Status, description=null, unitSymbol=null, value=0, itemType=Switch, writable=false, readProperty=System, writeProperty=null, state=OFF, statePattern=null, commandClassName=Notification, commandClassId=113, endpoint=0]
2025-09-19 11:31:43.378 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: notification-alarm-type
2025-09-19 11:31:43.379 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=notification-alarm-type, label=Alarm Type, description=null, unitSymbol=null, value=null, itemType=Number, writable=false, readProperty=alarmType, writeProperty=null, state=NULL, statePattern=StateDescription [minimum=0, maximum=255, step=null, pattern=%d, readOnly=true, channelStateOptions=[]], commandClassName=Notification, commandClassId=113, endpoint=0]
2025-09-19 11:31:43.379 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: notification-alarm-level
2025-09-19 11:31:43.379 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=notification-alarm-level, label=Alarm Level, description=null, unitSymbol=null, value=null, itemType=Number, writable=false, readProperty=alarmLevel, writeProperty=null, state=NULL, statePattern=StateDescription [minimum=0, maximum=255, step=null, pattern=%d, readOnly=true, channelStateOptions=[]], commandClassName=Notification, commandClassId=113, endpoint=0]
2025-09-19 11:31:43.380 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. Ignoring channel with Id: manufacturer-specific-product-id (ignored command class)
2025-09-19 11:31:43.380 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. Ignoring channel with Id: manufacturer-specific-product-type (ignored command class)
2025-09-19 11:31:43.380 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. Ignoring channel with Id: manufacturer-specific-manufacturer-id (ignored command class)
2025-09-19 11:31:43.380 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: protection-local
2025-09-19 11:31:43.380 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=protection-local, label=Local Protection State, description=null, unitSymbol=null, value=0, itemType=Number, writable=true, readProperty=null, writeProperty=local, state=0, statePattern=StateDescription [minimum=null, maximum=null, step=null, pattern=%d, readOnly=false, channelStateOptions=[StateOption [value=0, label=Unprotected], StateOption [value=1, label=ProtectedBySequence], StateOption [value=2, label=NoOperationPossible]]], commandClassName=Protection, commandClassId=117, endpoint=0]
2025-09-19 11:31:43.382 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: battery-level
2025-09-19 11:31:43.382 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=battery-level, label=Battery Level, description=null, unitSymbol=%, value=60, itemType=Number:Dimensionless, writable=false, readProperty=level, writeProperty=null, state=60 %, statePattern=StateDescription [minimum=0, maximum=100, step=null, pattern=%d %unit%, readOnly=true, channelStateOptions=[]], commandClassName=Battery, commandClassId=128, endpoint=0]
2025-09-19 11:31:43.382 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. Ignoring channel with Id: version-hardware-version (ignored command class)
2025-09-19 11:31:43.383 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. Ignoring channel with Id: version-firmware-versions (ignored command class)
2025-09-19 11:31:43.383 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. Ignoring channel with Id: version-protocol-version (ignored command class)
2025-09-19 11:31:43.383 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. Ignoring channel with Id: version-library-type (ignored command class)
2025-09-19 11:31:43.383 [DEBUG] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. Generated 16 channels and 8 configDescriptions with URI thing:zwavejs:node:483787089f:node10
2025-09-19 11:31:43.384 [DEBUG] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Setting semantic equipment tag org.openhab.core.semantics.SemanticTagImpl@656675df
2025-09-19 11:31:43.416 [TRACE] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Setting configuration item configuration-invert-lcd to 1
2025-09-19 11:31:43.416 [TRACE] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Setting configuration item configuration-lcd-timeout to 0
2025-09-19 11:31:43.416 [TRACE] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Setting configuration item configuration-window-open-detection to 0
2025-09-19 11:31:43.416 [TRACE] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Setting configuration item configuration-valve-opening-percentage-report to 0
2025-09-19 11:31:43.416 [TRACE] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Setting configuration item configuration-battery-report to 1
2025-09-19 11:31:43.417 [TRACE] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Setting configuration item configuration-temperature-report-threshold to 10
2025-09-19 11:31:43.417 [TRACE] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Setting configuration item configuration-temperature-offset to 0
2025-09-19 11:31:43.417 [TRACE] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Setting configuration item configuration-backlight to 1
2025-09-19 11:31:43.443 [DEBUG] [.internal.handler.ZwaveJSNodeHandler] - Node 10. Done values to configuration items

Are you missing any functionality?
Can you look into zwave ui and see what channel is missing / marked as BUFFER?

When developing I did not spend time on this as I was not missing anything at all. But maybe I now need to look at this.

No there doesn’t seem to be anything missing. I only raised this because the warning asked me to :slightly_smiling_face: I’m guessing it comes from the previous line

2025-09-19 11:31:43.362 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] - Node 10. building channel with Id: thermostat-mode-mode
2025-09-19 11:31:43.362 [TRACE] [ternal.type.ZwaveJSTypeGeneratorImpl] -  >> ChannelMetadata [nodeId=10, Id=thermostat-mode-mode, label=Thermostat Mode, description=null, unitSymbol=null, value=1, itemType=Number, writable=true, readProperty=null, writeProperty=mode, state=1, statePattern=StateDescription [minimum=0, maximum=255, step=null, pattern=%d, readOnly=false, channelStateOptions=[StateOption [value=0, label=Off], StateOption [value=1, label=Heat], StateOption [value=11, label=Energy heat], StateOption [value=15, label=Full power], StateOption [value=31, label=Manufacturer specific]]], commandClassName=Thermostat Mode, commandClassId=64, endpoint=0]
2

but looking in the Z-Wave JS UI, it just shows

In the DEBUG INFO from the UI Control Panel entry for the device there is

    {
      "id": "10-64-0-manufacturerData",
      "nodeId": 10,
      "toUpdate": false,
      "commandClass": 64,
      "commandClassName": "Thermostat Mode",
      "endpoint": 0,
      "property": "manufacturerData",
      "propertyName": "manufacturerData",
      "type": "buffer",
      "readable": true,
      "writeable": false,
      "label": "Manufacturer data",
      "stateless": false,
      "commandClassVersion": 3,
      "list": false,
      "lastUpdate": 1758128277726
    },

Why the Manufacturer data is under Thermostat Mode I don’t know - but it looks like that’s where the ‘type: buffer’ comes from.

As I say, everything seems to work ok, but if I can help further to investigate, let me know.

Actually when I say all’s ok, I’m getting rtt’s of well over 1200ms (one is 4317ms) on a small network of 14 devices - but that’s probably not related.

RTT?
Anyway it is a readable channel not writable and it does not seem to have a value or state. This is exactly why I asked for these reports. It seems useless. Maybe I should just ignore those channels.

Yes I agree it doesn’t seem useful.

Perhaps just set the Warning to Debug?

RTT?

Z-Wave RTT (Round-Trip Time) is a metric that measures the elapsed time between sending a packet and receiving an acknowledgment from a device.

It’s a statistic that wasn’t available from the ZWave binding, but is from Z-Wave JS UI.

Mine seem quite long, but that’s a rabbit hole I’m going to stop chasing.

Thanks for all the work on this binding.