I connected NSPanel Pro with Home Assistant via Matter. In the Matter integration the panel appears as VIRTUAL_DEVICE_APP (117) by TEST_VENDOR. As a result, HA creates entities that do not correspond to the role and function of the panel - for example “battery” or “current_switch_position”. There are more such entities and they require manual removal/hiding.
It looks as if NSPanel Pro reports itself in Matter as a test device with generic attributes, rather than as a control panel. In practice the integration works, but the entities are useless and create clutter. Is this a known issue in the current NSPanel Pro firmware? Are fixes planned in Matter so that the panel will have a proper device profile and meaningful entities in HA?
In the firmware 4.x roadmap I did not find any information about Matter development. Does eWeLink plan further support for Matter in NSPanel Pro (e.g. an official device type instead of TEST_VENDOR), or is development focused solely on F‑Droid and apps?
I know that the current Matter specification does not include a dedicated device type for a control panel. This probably explains why NSPanel Pro has to report itself as a “test vendor device” or a generic switch/bridge, which results in irrelevant entities in Home Assistant.
Suggestions for solutions:
- Work with CSA to introduce a new Device Type in Matter for control panels.
- Until standardization happens, use an existing profile (e.g. Bridge + Generic Switch) in a more consistent way.
- Limit cluster declarations in firmware only to those that actually make sense (i.e. without “battery” or “switch position”).
- Add a mapping layer in firmware so that the panel reports itself as a Bridge and exports only connected devices.
- Cooperate with the Home Assistant team on a dedicated Matter integration for NSPanel Pro that translates unusual attributes into logical entities.
- Communicate clearly in the roadmap whether Matter remains a priority, or whether the panel should mainly be treated as an open “mini‑tablet” with apps.
Warm regards, as always ![]()



