[CARTE] monitoring SMLIGHT SLZB

Bonjour à tous !

Je viens de faire évoluer mon Coordinateur Zigbee2MQTT d’une Conbee_II pour passer sur du dual protocole avec un SMLIGHT SLZB (un MR4U dans mon cas SMLIGHT SLZBMR4 — Smart Zigbee Gateway for Home Assistant | SMLIGHT).

J’avais besoin d’une carte me permettant de visualiser clairement et monitorer rapidement les entités liées à ce système dans mon Dashboard de Homelab. N’ayant rien trouvé sur les différents forum, j’ai créé la mienne :

Je l’ai dessinée et pensée pour qu’elle soit le plus dynamique possible :

1. En-tête et Statut Connectivité

  • Identité : Affiche le nom du modèle.
  • Mode de Connexion : Indique dynamiquement si le boîtier communique via Ethernet ou Wi-Fi.
  • État Internet : Une vérification binaire affiche « Internet OK » ou « Local ».
  • Indicateur Visuel : L’icône du routeur passe au Vert si le réseau fonctionne, sinon au Rouge.

2. Barre de Statut Rapide (Chips)

  • Modes Puces : Affiche en temps réel le protocole actif sur la puce 1 (EFR32) et la puce 2 (CC2652) (ex: Coordinator, Thread, Router).
  • Uptime : Calcule depuis combien de jours et d’heures le système tourne sans redémarrer.
  • Statut VPN : Affiche si le tunnel sécurisé est actif avec un code couleur (bleu/gris).

3. Monitoring Thermique (Triple Cœur)

  • Visualisation Temporelle : Un graphique (mini-graph-card) affiche l’historique des 24 dernières heures pour les trois composants.
  • Détail des Puces : Trois cartes individuelles affichent la température précise de l’ESP32 (Core), de la puce Zigbee 1 et de la puce Zigbee 2. Les noms de ces cartes changent dynamiquement selon le mode d’utilisation de la puce.

4. Gestion de la Mémoire et du Stockage

  • FileSystem Usage : Surveille l’occupation de la mémoire flash (stockage des fichiers système).
  • Utilisation Mémoire : Affiche l’utilisation de la mémoire vive en kilo-octets (kB).
  • Graphique de charge : Permet de détecter visuellement une éventuelle « fuite de mémoire » ou un stockage saturé.

5. Centre de Maintenance et Actions

  • Mises à jour intelligentes : Trois blocs conditionnels n’apparaissent que si un nouveau firmware est disponible pour le Core ou les puces radio. Ils proposent un bouton d’installation directe. (pas encore testé en conditions réelles - comportement à confirmer lors de la prochaine release de firmware cf. update 21/01/2026),
  • Contrôles Matériels :
    • Reset SLZB-MR4U : Redémarrage complet du boîtier (Hard Reset).
    • Reset Radio : Redémarrage logiciel des puces de communication sans couper le réseau.
    • Flash Mode : Bascule les puces en mode programmation (nécessite une confirmation).
  • Confort : Gestion du mode nuit des LEDs (pour ne pas être gêné dans l’obscurité), coupure totale des LEDs, et activation de la mise à jour automatique des firmwares Zigbee.

La carte doit pouvoir fonctionner, avec des petites modifications, que vous ayez un modèle simple ou multi protocole.

Je me suis dis que ça pouvait être utile à d’autre de la partager.

Les intégrations complémentaires nécessaires à cette carte :

  1. stack-in-card : Permet de regrouper toutes les cartes en un seul bloc visuel sans bordures entre elles.
  2. mushroom-cards : Fournit la base esthétique (Template card, Chips, Title card, Update card).
  3. mini-graph-card : Utilisée pour les graphiques de température et de mémoire.
  4. config-template-card : Crucial. C’est elle qui permet d’utiliser du JavaScript (${...}) pour rendre les noms de puces dynamiques dans les graphiques.
  5. card-mod (Optionnel mais recommandé) : Utile si vous souhaitez ajuster finement les marges ou les couleurs.

Une fois ces éléments installés, voici le .yaml :

type: custom:config-template-card
entities:
  - sensor.slzb_mr4u_zigbee_type
  - sensor.slzb_mr4u_zigbee_type_2
card:
  type: custom:stack-in-card
  cards:
    - type: custom:mushroom-template-card
      primary: SLZB-MR4U
      secondary: >
        mode: {{ states('sensor.slzb_mr4u_connection_mode') }} |  {{ 'Internet
        OK' if is_state('binary_sensor.slzb_mr4u_internet', 'on') else 'Local'
        }}
      icon: mdi:router-wireless
      icon_color: >
        {{ 'green' if is_state('binary_sensor.slzb_mr4u_ethernet', 'on') or
        is_state('binary_sensor.slzb_mr4u_wi_fi', 'on') else 'red' }}
      fill_container: true
    - type: custom:mushroom-chips-card
      chips:
        - type: template
          icon: mdi:antenna
          content: "EFR32: {{ states('sensor.slzb_mr4u_zigbee_type') }}"
          icon_color: "#0051FF"
        - type: template
          icon: mdi:antenna
          content: "CC26: {{ states('sensor.slzb_mr4u_zigbee_type_2') }}"
          icon_color: amber
        - type: template
          icon: mdi:clock-outline
          content: >
            {% set uptime = states('sensor.slzb_mr4u_core_uptime') %}  {% if
            uptime not in ['unknown', 'unavailable', 'none'] %}
              {% set delta = now() - as_datetime(uptime) %}
              {{ delta.days }}j {{ (delta.seconds // 3600) }}h
            {% else %} ??? {% endif %}
        - type: template
          icon: mdi:vpn
          content: "VPN: {{states('binary_sensor.slzb_mr4u_vpn')}}"
          icon_color: >-
            {{ 'blue' if is_state('binary_sensor.slzb_mr4u_vpn', 'on') else
            'grey' }}
      alignment: center
    - type: custom:mushroom-title-card
      subtitle: Temperature
    - type: horizontal-stack
      cards:
        - type: custom:mushroom-template-card
          entity: sensor.slzb_mr4u_temperature_de_la_puce_principale
          primary: Core SLZB-MR4U
          secondary: "{{ states(entity) }} °C"
          icon: mdi:thermometer
          icon_color: "#ECFA8E"
          tap_action:
            action: more-info
        - type: custom:mushroom-template-card
          entity: sensor.slzb_mr4u_temperature_de_la_puce_zigbee
          primary: Temp. {{ states('sensor.slzb_mr4u_zigbee_type') }}
          secondary: "{{ states(entity) }} °C"
          icon: mdi:thermometer
          icon_color: "#0051FF"
          tap_action:
            action: more-info
        - type: custom:mushroom-template-card
          entity: sensor.slzb_mr4u_temperature_de_la_puce_zigbee_2
          primary: Temp. {{ states('sensor.slzb_mr4u_zigbee_type_2') }}
          secondary: "{{ states(entity) }} °C"
          icon: mdi:thermometer
          icon_color: "#FFC107"
          tap_action:
            action: more-info
    - type: custom:mini-graph-card
      entities:
        - entity: sensor.slzb_mr4u_temperature_de_la_puce_principale
          name: Core
          color: "#ECFA8E"
        - entity: sensor.slzb_mr4u_temperature_de_la_puce_zigbee
          name: ${states['sensor.slzb_mr4u_zigbee_type'].state}
          color: "#0051FF"
        - entity: sensor.slzb_mr4u_temperature_de_la_puce_zigbee_2
          name: ${states['sensor.slzb_mr4u_zigbee_type_2'].state}
          color: "#FFC107"
      line_width: 2
      height: 60
      hours_to_show: 24
      align_state: left
      show:
        icon: false
        legend: true
        state: false
        name: false
    - type: custom:mushroom-title-card
      subtitle: Memory
    - type: horizontal-stack
      cards:
        - type: custom:mushroom-template-card
          entity: sensor.slzb_mr4u_filesystem_usage
          primary: FileSystem Usage
          secondary: "{{ states('sensor.slzb_mr4u_filesystem_usage') }} kB"
          icon: mdi:harddisk
          icon_color: "#3498db"
          tap_action:
            action: more-info
        - type: custom:mushroom-template-card
          entity: sensor.slzb_mr4u_utilisation_de_la_memoire
          primary: Utilisation Mémoire
          secondary: "{{ states('sensor.slzb_mr4u_utilisation_de_la_memoire') }} kB"
          icon: mdi:database
          icon_color: "#9b59b6"
          tap_action:
            action: more-info
    - type: custom:mini-graph-card
      entities:
        - entity: sensor.slzb_mr4u_filesystem_usage
          name: FileSystem Usage
          color: "#3498db"
        - entity: sensor.slzb_mr4u_utilisation_de_la_memoire
          name: Utilisation Mémoire
          color: "#9b59b6"
      line_width: 2
      height: 40
      hours_to_show: 24
      align_state: left
      show:
        icon: false
        legend: false
        state: false
        name: false
    - type: custom:mushroom-title-card
      subtitle: Action
    - type: conditional
      conditions:
        - entity: update.slzb_mr4u_core_firmware
          state: "on"
      card:
        type: custom:mushroom-update-card
        entity: update.slzb_mr4u_core_firmware
        name: MAJ Core
        show_buttons_control: true
    - type: conditional
      conditions:
        - entity: update.slzb_mr4u_zigbee_firmware
          state: "on"
      card:
        type: custom:mushroom-update-card
        entity: update.slzb_mr4u_zigbee_firmware
        name: MAJ {states['sensor.slzb_mr4u_zigbee_type'].state}
        show_buttons_control: true
    - type: conditional
      conditions:
        - entity: update.slzb_mr4u_zigbee_firmware_2
          state: "on"
      card:
        type: custom:mushroom-update-card
        entity: update.slzb_mr4u_zigbee_firmware_2
        name: MAJ {states['sensor.slzb_mr4u_zigbee_type_2'].state}
        show_buttons_control: true
    - type: horizontal-stack
      cards:
        - type: custom:mushroom-template-card
          primary: Reset SLZB-MR4U
          icon: mdi:cog-refresh
          icon_color: red
          layout: vertical
          tap_action:
            action: call-service
            service: button.press
            target:
              entity_id: button.slzb_mr4u_core_restart
        - type: custom:mushroom-template-card
          primary: Reset Radio
          icon: mdi:wifi-refresh
          icon_color: amber
          layout: vertical
          tap_action:
            action: call-service
            service: button.press
            target:
              entity_id: button.slzb_mr4u_zigbee_restart
        - type: custom:mushroom-template-card
          primary: Flash Mode
          icon: mdi:memory-arrow-down
          icon_color: blue
          layout: vertical
          tap_action:
            action: call-service
            service: button.press
            target:
              entity_id: button.slzb_mr4u_zigbee_flash_mode
    - type: horizontal-stack
      cards:
        - type: custom:mushroom-entity-card
          entity: switch.slzb_mr4u_led_night_mode
          name: Nuit
        - type: custom:mushroom-entity-card
          entity: switch.slzb_mr4u_disable_leds
          name: LEDs Off
        - type: custom:mushroom-entity-card
          entity: switch.slzb_mr4u_auto_zigbee_update
          name: Auto-Up
          icon: mdi:refresh-auto

C’est mon tout premier poste, je suis à l’écoute pour m’améliorer alors n’hésitez pas à faire vos retours, vos idées d’améliorations et d’évolutions et surtout à partager vos cartes.

SUIVI DU PROJET - Mise à jour du 21/01/2026
Grâce à une mise à jour firmware disponible, j’ai pu tester en conditions réelles l’affichage des notifications de mise à jour. Cela m’a permis d’affiner la section ACTION avec plusieurs améliorations :

  • Optimisation visuelle : Meilleure mise en page pour les notifications de mise à jour (Core et Radio).
  • Accès rapide : Ajout d’un lien direct vers l’interface Web locale du SLZB-xxxx pour faciliter la maintenance.
  • Internationalisation : Le dépôt GitHub a été structuré avec des README en plusieurs langues (FR :france: / EN :united_kingdom: / IT :italy:).

Le code corrigé et les instructions sont disponibles sur la page du projet : https://github.com/eTim/homeassistant-smlight-slzb-card?tab=readme-ov-file#readme

Superbe!!! Merci beaucoup pour tout ce travail :slight_smile:

Merci pour le soutien

Merci pour cet excellent travail. C’est exactement le type de carte que je recherchais

merci, cela semble une solution élégante et efficace
je vais tester cela pour mes deux instances SLZB-06M et SLZB-06MU, après avoir installé les pré requis

Merci beaucoup travail au top.

je viens justement de migrer d'une Conbee II à une SLZB-06 :grinning_face_with_smiling_eyes:

Exactement la même :slight_smile: !! Merci pour le partage :ok_hand:

bonsoir

je dois avoir raté quelque chose, car la carte ne s'affiche pas du tout, alors que j'ai le message "enregistré avec succès" :face_with_raised_eyebrow:

ce doit être énorme, mais je ne trouve pas
j'utilise un SLZB-06MU en POE, j'ai donc adapté le yaml en fonction du nom des entités :

type: custom:config-template-card
entities:
  - sensor.slzb_06mu_zigbee_type
  - sensor.slzb_06mu_zigbee_type_2
card:
  type: custom:stack-in-card
  cards:
    - type: custom:mushroom-template-card
      primary: SLZB-06mu
      secondary: >
        mode: {{ states('sensor.slzb_06mu_connection_mode') }} |  {{ 'Internet
        OK' if is_state('binary_sensor.slzb_06mu_internet', 'on') else 'Local'
        }}
      icon: mdi:router-wireless
      icon_color: >
        {{ 'green' if is_state('binary_sensor.slzb_06mu_ethernet', 'on') or
        is_state('binary_sensor.slzb_06mu_wi_fi', 'on') else 'red' }}
      fill_container: true
    - type: custom:mushroom-chips-card
      chips:
        - type: template
          icon: mdi:antenna
          content: "EFR32: {{ states('sensor.slzb_06mu_zigbee_type') }}"
          icon_color: "#0051FF"
        - type: template
          icon: mdi:antenna
          content: "CC26: {{ states('sensor.slzb_06mu_zigbee_type_2') }}"
          icon_color: amber
        - type: template
          icon: mdi:clock-outline
          content: >
            {% set uptime = states('sensor.slzb_06mu_core_uptime') %}  {% if
            uptime not in ['unknown', 'unavailable', 'none'] %}
              {% set delta = now() - as_datetime(uptime) %}
              {{ delta.days }}j {{ (delta.seconds // 3600) }}h
            {% else %} ??? {% endif %}
        - type: template
          icon: mdi:vpn
          content: "VPN: {{states('binary_sensor.slzb_06mu_vpn')}}"
          icon_color: >-
            {{ 'blue' if is_state('binary_sensor.slzb_06mu_vpn', 'on') else
            'grey' }}
      alignment: center
    - type: custom:mushroom-title-card
      subtitle: Temperature
    - type: horizontal-stack
      cards:
        - type: custom:mushroom-template-card
          entity: sensor.slzb_06mu_temperature_de_la_puce_principale
          primary: Core SLZB-06mu
          secondary: "{{ states(entity) }} °C"
          icon: mdi:thermometer
          icon_color: "#ECFA8E"
          tap_action:
            action: more-info
        - type: custom:mushroom-template-card
          entity: sensor.slzb_06mu_temperature_de_la_puce_zigbee
          primary: Temp. {{ states('sensor.slzb_06mu_zigbee_type') }}
          secondary: "{{ states(entity) }} °C"
          icon: mdi:thermometer
          icon_color: "#0051FF"
          tap_action:
            action: more-info
        - type: custom:mushroom-template-card
          entity: sensor.slzb_06mu_temperature_de_la_puce_zigbee_2
          primary: Temp. {{ states('sensor.slzb_06mu_zigbee_type_2') }}
          secondary: "{{ states(entity) }} °C"
          icon: mdi:thermometer
          icon_color: "#FFC107"
          tap_action:
            action: more-info
    - type: custom:mini-graph-card
      entities:
        - entity: sensor.slzb_06mu_temperature_de_la_puce_principale
          name: Core
          color: "#ECFA8E"
        - entity: sensor.slzb_06mu_temperature_de_la_puce_zigbee
          name: ${states['sensor.slzb_06mu_zigbee_type'].state}
          color: "#0051FF"
        - entity: sensor.slzb_06mu_temperature_de_la_puce_zigbee_2
          name: ${states['sensor.slzb_06mu_zigbee_type_2'].state}
          color: "#FFC107"
      line_width: 2
      height: 60
      hours_to_show: 24
      align_state: left
      show:
        icon: false
        legend: true
        state: false
        name: false
    - type: custom:mushroom-title-card
      subtitle: Memory
    - type: horizontal-stack
      cards:
        - type: custom:mushroom-template-card
          entity: sensor.slzb_06mu_filesystem_usage
          primary: FileSystem Usage
          secondary: "{{ states('sensor.slzb_06mu_filesystem_usage') }} kB"
          icon: mdi:harddisk
          icon_color: "#3498db"
          tap_action:
            action: more-info
        - type: custom:mushroom-template-card
          entity: sensor.slzb_06mu_utilisation_de_la_memoire
          primary: Utilisation Mémoire
          secondary: "{{ states('sensor.slzb_06mu_utilisation_de_la_memoire') }} kB"
          icon: mdi:database
          icon_color: "#9b59b6"
          tap_action:
            action: more-info
    - type: custom:mini-graph-card
      entities:
        - entity: sensor.slzb_06mu_filesystem_usage
          name: FileSystem Usage
          color: "#3498db"
        - entity: sensor.slzb_06mu_utilisation_de_la_memoire
          name: Utilisation Mémoire
          color: "#9b59b6"
      line_width: 2
      height: 40
      hours_to_show: 24
      align_state: left
      show:
        icon: false
        legend: false
        state: false
        name: false
    - type: custom:mushroom-title-card
      subtitle: Action
    - type: conditional
      conditions:
        - entity: update.slzb_06mu_core_firmware
          state: "on"
      card:
        type: custom:mushroom-update-card
        entity: update.slzb_06mu_core_firmware
        name: MAJ Système (Core)
        layout: horizontal
        show_buttons_control: true
    - type: conditional
      conditions:
        - entity: update.slzb_06mu_zigbee_firmware
          state: "on"
      card:
        type: custom:mushroom-update-card
        entity: update.slzb_06mu_zigbee_firmware
        name: ${'Chip EFR32 (' + states['sensor.slzb_06mu_zigbee_type'].state + ')'}
        show_buttons_control: true
        layout: horizontal
    - type: conditional
      conditions:
        - entity: update.slzb_06mu_zigbee_firmware_2
          state: "on"
      card:
        type: custom:mushroom-update-card
        entity: update.slzb_06mu_zigbee_firmware_2
        name: >-
          ${'MAJ Puce CC26 (' + states['sensor.slzb_06mu_zigbee_type_2'].state +
          ')'}
        show_buttons_control: true
        layout: horizontal
    - type: horizontal-stack
      cards:
        - type: custom:mushroom-template-card
          primary: SLZB-06mu
          secondary: Reset
          icon: mdi:cog-refresh
          icon_color: red
          layout: vertical
          tap_action:
            action: call-service
            service: button.press
            target:
              entity_id: button.slzb_06mu_core_restart
        - type: custom:mushroom-template-card
          primary: Radio
          secondary: Reset
          icon: mdi:wifi-refresh
          icon_color: amber
          layout: vertical
          tap_action:
            action: call-service
            service: button.press
            target:
              entity_id: button.slzb_06mu_zigbee_restart
        - type: custom:mushroom-template-card
          primary: Flash Mode
          icon: mdi:memory-arrow-down
          icon_color: blue
          layout: vertical
          tap_action:
            action: call-service
            service: button.press
            target:
              entity_id: button.slzb_06mu_zigbee_flash_mode
        - type: custom:mushroom-template-card
          icon: mdi:web
          primary: Control
          secondary: Panel
          icon_color: blue
          layout: vertical
          tap_action:
            action: url
            url_path: http://slzb-06mu.local
    - type: horizontal-stack
      cards:
        - type: custom:mushroom-entity-card
          entity: switch.slzb_06mu_led_night_mode
          name: Nuit
        - type: custom:mushroom-entity-card
          entity: switch.slzb_06mu_disable_leds
          name: LEDs Off
        - type: custom:mushroom-entity-card
          entity: switch.slzb_06mu_auto_zigbee_update
          name: Auto-Up
          icon: mdi:refresh-auto

et voici ma config globale, si cela inspire un commentaire :

## System Information

version | core-2026.6.1
-- | --
installation_type | Home Assistant OS
dev | false
hassio | true
docker | true
container_arch | amd64
user | root
virtualenv | false
python_version | 3.14.5
os_name | Linux
os_version | 6.12.85-haos
arch | x86_64
timezone | Europe/Paris
config_dir | /config

<details><summary>Home Assistant Community Store</summary>

GitHub API | ok
-- | --
GitHub Content | ok
GitHub Web | ok
HACS Data | ok
GitHub API Calls Remaining | 5000
Installed Version | 2.0.5
Stage | running
Available Repositories | 3121
Downloaded Repositories | 18

</details>

<details><summary>Home Assistant Cloud</summary>

logged_in | false
-- | --
can_reach_cert_server | ok
can_reach_cloud_auth | ok
can_reach_cloud | ok

</details>

<details><summary>Home Assistant Supervisor</summary>

host_os | Home Assistant OS 17.3
-- | --
update_channel | stable
supervisor_version | supervisor-2026.05.1
agent_version | 1.8.1
docker_version | 29.3.1
disk_total | 30.8 GB
disk_used | 8.4 GB
nameservers | 2a01:cb00:12b:5e00:2237:f0ff:fe37:9f30, 192.168.1.1, fe80::2237:f0ff:fe37:9f30
healthy | true
supported | true
host_connectivity | true
supervisor_connectivity | true
ntp_synchronized | true
virtualization | kvm
board | ova
supervisor_api | ok
version_api | ok
installed_addons | Matter Server (8.5.0)

</details>

<details><summary>Dashboards</summary>

dashboards | 6
-- | --
resources | 12
views | 4
mode | storage

</details>

<details><summary>Network Configuration</summary>

adapters | lo (disabled), enp0s3 (enabled, default, auto), hassio (disabled), docker0 (disabled), veth3fb80c9 (disabled), veth5152226 (disabled), veth1bcb54b (disabled), veth7992544 (disabled), vethe8cfd2b (disabled), veth6cf9f77 (disabled)
-- | --
ipv4_addresses | lo (127.0.0.1/8), enp0s3 (192.168.1.22/24), hassio (172.30.32.1/23), docker0 (172.30.232.1/23), veth3fb80c9 (), veth5152226 (), veth1bcb54b (), veth7992544 (), vethe8cfd2b (), veth6cf9f77 ()
ipv6_addresses | lo (::1/128), enp0s3 (2a01:cb00:12b:5e00:65e8:c546:466a:df3/64, fe80::dc89:c04d:c7ba:baea/64), hassio (fd0c:ac1e:2100::1/48, fe80::109a:cbff:fe4c:2704/64), docker0 (fe80::c476:98ff:fefb:230e/64), veth3fb80c9 (fe80::7440:cff:fe1e:20d2/64), veth5152226 (fe80::bc9b:51ff:fe02:a1d5/64), veth1bcb54b (fe80::a087:17ff:fec4:1f9b/64), veth7992544 (fe80::a815:77ff:fe3b:d6c0/64), vethe8cfd2b (fe80::4401:d4ff:fe50:53ef/64), veth6cf9f77 (fe80::b4ad:c4ff:fe57:55c5/64)
announce_addresses | 192.168.1.22, 2a01:cb00:12b:5e00:65e8:c546:466a:df3, fe80::dc89:c04d:c7ba:baea

</details>

<details><summary>Recorder</summary>

oldest_recorder_run | 20 mai 2026 à 06:09
-- | --
current_recorder_run | 6 juin 2026 à 22:07
estimated_db_size | 79.23 MiB
database_engine | sqlite
database_version | 3.49.2

</details>

merci