# Mapping Zigbee2MQTT → Gladys pour la sirène extérieure NEO NAS-AB06B2

**URL:** <https://community.gladysassistant.com/t/mapping-zigbee2mqtt-gladys-pour-la-sirene-exterieure-neo-nas-ab06b2/10652>\
**Category:** Demandes livrées\
**Tags:** in-progress\
**Created:** [Août 17, 2026, 7:26 UTC](https://community.gladysassistant.com/t/mapping-zigbee2mqtt-gladys-pour-la-sirene-exterieure-neo-nas-ab06b2/10652 "2026-08-17T19:26:27Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![spenceur](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/spenceur/32/1961_2.png) [@spenceur](https://community.gladysassistant.com/u/spenceur)\
**Post date:** [Août 17, 2026, 7:26 UTC](https://community.gladysassistant.com/t/mapping-zigbee2mqtt-gladys-pour-la-sirene-exterieure-neo-nas-ab06b2/10652/1 "2026-08-17T19:26:28Z")

</div>

Bonjour,

Suite à la discussion sur le mapping Zigbee2MQTT → Gladys pour les alarmes, je crée un sujet spécifique pour la **sirène extérieure NEO NAS-AB06B2**.

J’utilise cette sirène avec **Zigbee2MQTT**. Elle est bien reconnue et remonte dans Gladys, mais certaines fonctionnalités exposées par Zigbee2MQTT ne semblent pas actuellement mappées vers des fonctionnalités Gladys.

L’objectif serait de pouvoir exploiter directement dans Gladys les différentes fonctions de la sirène, notamment depuis les scènes, sans devoir envoyer manuellement des commandes MQTT.

**Matériel :**

- Marque : NEO
- Modèle : NAS-AB06B2
- Type : sirène extérieure
- Intégration : Zigbee2MQTT

Documentation Zigbee2MQTT :

> **[NEO NAS-AB06B2 control via MQTT | Zigbee2MQTT](https://www.zigbee2mqtt.io/devices/NAS-AB06B2.html)**
>
> Integrate your NEO NAS-AB06B2 via Zigbee2MQTT with whatever smart home infrastructure you are using without the vendor's bridge or gateway.

Sujet d’origine :

> [@Mapping z2m gladys pour alarme](https://community.gladysassistant.com/t/mapping-z2m-gladys-pour-alarme/10542):
>
> Jai fais l’acquisition de ces deux appareils [Heiman HS2WD-E control via MQTT | Zigbee2MQTT](https://www.zigbee2mqtt.io/devices/HS2WD-E.html)[NEO NAS-AB06B2 control via MQTT | Zigbee2MQTT](https://www.zigbee2mqtt.io/devices/NAS-AB06B2.html) Mais il semblerait qu’il manque des fonctionnalités : Est il possibles de les ajouter svp ? Merci par avance

doc zigbee:

| Model | NAS-AB06B2 |
| --- | --- |
| Vendor | NEO |
| Description | Outdoor solar alarm |
| Exposes | alarm\_state, alarm\_switch, tamper\_alarm\_switch, tamper\_alarm, alarm\_melody, alarm\_mode, alarm\_time, charging, battery |
| Picture | NEO NAS-AB06B2 |

## **Exposes**

### **Alarm state (enum)**

Alarm status.

Value can be found in the published state on the `alarm_state` property.

It’s not possible to read (`/get`) or write (`/set`) this value.

The possible values are: `alarm_sound`, `alarm_light`, `alarm_sound_light`, `normal`.

### **Alarm switch (binary)**

Enable alarm.

Value can be found in the published state on the `alarm_switch` property.

It’s not possible to read (`/get`) this value.

To write (`/set`) a value publish a message to topic `zigbee2mqtt/FRIENDLY_NAME/set` with payload `{"alarm_switch": NEW_VALUE}`.

If value equals `ON` alarm switch is ON, if `OFF` OFF.

### **Tamper alarm switch (binary)**

Enable tamper alarm.

Value can be found in the published state on the `tamper_alarm_switch` property.

It’s not possible to read (`/get`) this value.

To write (`/set`) a value publish a message to topic `zigbee2mqtt/FRIENDLY_NAME/set` with payload `{"tamper_alarm_switch": NEW_VALUE}`.

If value equals `ON` tamper alarm switch is ON, if `OFF` OFF.

### **Tamper alarm (binary)**

Indicates whether the device is tampered.

Value can be found in the published state on the `tamper_alarm` property.

It’s not possible to read (`/get`) or write (`/set`) this value.

If value equals `ON` tamper alarm is ON, if `OFF` OFF.

### **Alarm melody (enum)**

Alarm sound effect.

Value can be found in the published state on the `alarm_melody` property.

It’s not possible to read (`/get`) this value.

To write (`/set`) a value publish a message to topic `zigbee2mqtt/FRIENDLY_NAME/set` with payload `{"alarm_melody": NEW_VALUE}`.

The possible values are: `melody_1`, `melody_2`, `melody_3`.

### **Alarm mode (enum)**

Alarm mode.

Value can be found in the published state on the `alarm_mode` property.

It’s not possible to read (`/get`) this value.

To write (`/set`) a value publish a message to topic `zigbee2mqtt/FRIENDLY_NAME/set` with payload `{"alarm_mode": NEW_VALUE}`.

The possible values are: `alarm_sound`, `alarm_light`, `alarm_sound_light`.

### **Alarm time (numeric)**

Alarm duration in minutes.

Value can be found in the published state on the `alarm_time` property.

It’s not possible to read (`/get`) this value.

To write (`/set`) a value publish a message to topic `zigbee2mqtt/FRIENDLY_NAME/set` with payload `{"alarm_time": NEW_VALUE}`.

The minimal value is `1` and the maximum value is `60`.

The unit of this value is `min`.

### **Charging (binary)**

Charging status.

Value can be found in the published state on the `charging` property.

It’s not possible to read (`/get`) or write (`/set`) this value.

If value equals `true` charging is ON, if `false` OFF.

### **Battery (numeric)**

Remaining battery in %, can take up to 24 hours before reported.

Value can be found in the published state on the `battery` property.

It’s not possible to read (`/get`) or write (`/set`) this value.

The minimal value is `0` and the maximum value is `100`.

The unit of this value is `%`.

Merci 🙂

---

<div class="post-metadata">

**Author:** ![cursor-bot](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/cursor-bot/32/22252_2.png) [@cursor-bot](https://community.gladysassistant.com/u/cursor-bot)\
**Post date:** [Août 19, 2026, 2:34 UTC](https://community.gladysassistant.com/t/mapping-zigbee2mqtt-gladys-pour-la-sirene-exterieure-neo-nas-ab06b2/10652/2 "2026-08-19T02:34:38Z")

</div>

Salut tout le monde !

Ce sujet est désormais **en cours de développement**.

Une PR a été ouverte pour mapper les exposes Zigbee2mqtt de la sirène extérieure solaire NEO NAS-AB06B2 :

> <https://github.com/GladysAssistant/Gladys/pull/2955>
>
> Implements feature request: https://community.gladysassistant.com/t/mapping-zigb…ee2mqtt-gladys-pour-la-sirene-exterieure-neo-nas-ab06b2/10652
> 
> \### Description
> 
> The NEO NAS-AB06B2 outdoor solar alarm is discovered by Gladys through Zigbee2mqtt, but most of the capabilities it exposes were not mapped to Gladys device features. Arming the siren, choosing its melody or its alarm duration could only be done by publishing raw MQTT payloads, so none of it was usable from a scene.
> 
> Every expose of the device is now mapped end to end (discovery, read, write):
> 
> | Zigbee2mqtt expose | Gladys category / type | Direction |
> | --- | --- | --- |
> | \`alarm\_switch\` | \`siren\` / \`binary\` | command |
> | \`alarm\_state\` | \`siren\` / \`alarm-state\` | read-only |
> | \`alarm\_mode\` | \`siren\` / \`alarm-mode\` | command |
> | \`alarm\_melody\` | \`siren\` / \`melody\` | command |
> | \`alarm\_time\` | \`duration\` / \`decimal\` (minutes) | command |
> | \`tamper\_alarm\` | \`tamper\` / \`binary\` | read-only |
> | \`tamper\_alarm\_switch\` | \`switch\` / \`binary\` | command |
> | \`charging\` | \`battery\` / \`charging\` | read-only |
> | \`battery\` | \`battery\` / \`integer\` | read-only (already mapped) |
> 
> \`alarm\_melody\` needed its own mapping because this siren names its melodies \`melody\_1\`…\`melody\_3\` instead of publishing plain numbers like the sirens already supported.
> 
> The zigbee2mqtt unit mapping also learns the \`min\` unit, so a duration published in minutes keeps its unit in Gladys instead of falling back to the feature default.
> 
> \### New device feature types
> 
> Three new types are added, all on \*\*existing\*\* categories (no new category):
> 
> \- \`SIREN.ALARM\_MODE\` (\`alarm-mode\`) — which effect the siren produces when it is triggered (command).
> \- \`SIREN.ALARM\_STATE\` (\`alarm-state\`) — which effect it is producing right now (read-only sensor).
> \- \`BATTERY.CHARGING\` (\`charging\`) — whether the device battery is currently being recharged (read-only binary).
> 
> The two siren types share a single new value set, \`SIREN\_MODE\` = \`IDLE\` / \`SOUND\` / \`LIGHT\` / \`SOUND\_AND\_LIGHT\`.
> 
> \#### Checked against \`docs/specs/device-feature-categories.md\`
> 
> \- \*\*No brand in the names or semantics.\*\* \`alarm-mode\`, \`alarm-state\` and \`charging\` describe capabilities: any siren that can ring, flash, or both, and any battery-powered device that reports whether it is charging, maps onto them naturally (Bosch BSIR-EZ, Heiman and Tuya sirens all expose an equivalent notion; robot vacuums, solar sensors and trackers all report a charging flag).
> \- \*\*Reuse before creating.\*\* Everything that could be mapped onto an existing category/type is: the siren on/off is \`SIREN.BINARY\`, the melody is \`SIREN.MELODY\`, the alarm duration is \`DURATION.DECIMAL\` with the existing \`minutes\` unit, the tamper detection is \`TAMPER\` + \`SENSOR.BINARY\`, and the "enable tamper detection" toggle is a plain \`SWITCH.BINARY\` like the other device configuration toggles the integration already maps (\`eco\_mode\`, \`interlock\`). Only the alarm mode/state and the charging flag had no existing home.
> \- \*\*Standards.\*\* Matter has no siren device type. Zigbee's IAS WD cluster splits the same information over two fields (warning mode + strobe), but sirens exposing it through Zigbee2mqtt publish one combined enum value; a single combined effect enum therefore keeps the mapping lossless instead of inventing a two-feature split no device reports that way. This divergence is documented in the inline comment on \`SIREN\_MODE\`. For \`BATTERY.CHARGING\`, Matter's Power Source cluster models \`BatChargeState\`; a binary "is charging" is the Gladys-level reduction of it, next to the charge level already carried by \`BATTERY.INTEGER\`.
> \- \*\*Full generic value set.\*\* \`SIREN\_MODE\` keeps \`IDLE\` even though this particular siren does not accept it as a mode: per-device subsets belong in \`supported\_options\`, not in a narrowed enum. Writing a value the siren does not expose is simply not sent.
> \- \*\*Plumbing.\*\* Inline scope comments on the new constants, translations in all three i18n files (including the enumerated \`deviceFeatureValue\` labels), icons, dashboard rendering, scene action/trigger value lists, and the MQTT catalog defaults (\`getFeatureDefaultValues\`, \`getFeaturePreviewValue\`, \`getCatalogPreviewLabelKey\`, and the no-unit list so a charging flag is not given a percent unit).
> 
> \### Front
> 
> \- Icons for the three new types.
> \- Dashboard: an alarm mode selector row (same adaptive buttons/dropdown control as the water heater mode), a colored badge for the alarm state (red while the siren rings or flashes), and a Yes/No badge for charging.
> \- Scenes: the alarm mode and alarm state values appear as translated lists in actions, triggers and conditions through the generic \`deviceFeatureValue\` catalog.
> \- \`en\` / \`fr\` / \`de\` translations.
> 
> \### Tests
> 
> \- New \`NAS-AB06B2.json\` payload in the "real devices" zigbee2mqtt suite: it checks the whole converted Gladys device (all nine features, their read/write flags, min/max, units, selectors) and the decoding of every value the siren publishes.
> \- New \`neoSirenEnumType.test.js\` covering the write path (Gladys value → Zigbee value) for the alarm mode and melody enums, including the unsupported-value case.
> \- \`mapUnit\` test extended with the \`min\` unit.
> 
> \### Results of the local checks
> 
> \- \`server\`: \`npm run prettier\` + \`npm run prettier-check\` OK, \`npm run eslint\` OK (0 errors), \`npm run coverage\` OK — all tests pass, and the changed zigbee2mqtt files report 100% line/function coverage.
> \- \`front\`: \`npm run prettier\` + \`npm run prettier-check\` OK, \`npm run eslint\` OK (0 errors), \`npm run compare-translations\` OK, \`npm run build\` OK.
> 
> This pull request was opened by an automated Claude Code run.
> 
> \## Forum
> 
> Forum: https://community.gladysassistant.com/t/mapping-zigbee2mqtt-gladys-pour-la-sirene-exterieure-neo-nas-ab06b2/10652
> 
> \### Checklist
> 
> \- \[x\] Tests pass: \`cd server && npm run coverage\` (Codecov requires 100% coverage on changed lines)
> \- \[x\] Linter and prettier pass on both front and server (\`npm run eslint\`, \`npm run prettier\`)
> \- \[x\] No undocumented breaking change
> 
> 
> \---
> \_Generated by \[Claude Code\](https://claude.ai/code/session\_01SfenWHvJmw3ffPA92yAend)\_

N’hésitez pas à suivre la PR, à tester (optionnel, surtout pour les petites demandes) et à faire vos retours ici si besoin.

---

<div class="post-metadata">

**Author:** ![cursor-bot](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/cursor-bot/32/22252_2.png) [@cursor-bot](https://community.gladysassistant.com/u/cursor-bot)\
**Post date:** [Août 28, 2026, 12:33 UTC](https://community.gladysassistant.com/t/mapping-zigbee2mqtt-gladys-pour-la-sirene-exterieure-neo-nas-ab06b2/10652/3 "2026-08-28T12:33:42Z")

</div>


