Script pour notification et customapp dynamique sur awtrix

:warning: MISE À JOUR (02/05/2026) : Passage en Version 2.0 :warning:

J’ai profité de la matinée pour faire une refonte complète de la logique. Le code ci-dessous est devenu obsolète. Je suis passé sur une architecture plus « moteur » qui gère la complexité à votre place.

:backhand_index_pointing_right: Les explications sur le fonctionnement de la V2 et les fichiers à jour sont disponibles dans ce message.

Contexte et problématique

Si vous utilisez un ou plusieurs appareils Awtrix dans votre installation Home Assistant, vous avez probablement rencontré les mêmes difficultés que moi. Avec la multiplication des automatisations, la gestion des notifications et des applications personnalisées devient rapidement complexe:

  • Il faut répéter les mêmes configurations dans chaque automatisation

  • On doit spécifier manuellement chaque appareil Awtrix à chaque fois

  • Quand on ajoute un nouvel appareil, il faut mettre à jour toutes les automatisations existantes

  • Les paramètres de configuration (couleur, durée, icône, etc.) sont dispersés partout

J’ai donc voulu essayer de simplifier, j’ai tenté l’approche d’un script unique qui centralise et simplifie la gestion des appareils Awtrix. Plus besoin de créer une automatisation par appareil ou par type de notification!

Fonctionnalités

  • Détection automatique de tous vos appareils Awtrix dans votre installation

  • Envoi simultané de messages à tous vos appareils Awtrix

  • Deux modes de fonctionnement:

  • Mode notification: pour afficher un message temporaire

  • Mode application personnalisée: pour créer ou mettre à jour une app personnalisée

  • Personnalisation complète de l’affichage (textes, icônes, couleurs, effets, etc.)

  • Possibilité de supprimer facilement une application personnalisée

Prérequis

  • Home Assistant avec l’intégration MQTT configurée

  • Un ou plusieurs appareils Awtrix flasher avec awtrix3

  • Les topics MQTT de vos appareils Awtrix, de ce que j’ai put constater, contiennent « device_topic » dans leur entity_id

Installation

Il suffit de créer un script dans Home Assistant à partir du YAML ci-dessous:

sequence:
  # Première étape: Définition des variables
  - variables:
      # Cette variable récupère tous les topics MQTT des appareils Awtrix disponibles
      awtrix_topic_states: |
        {% set awtrix_topic = namespace(states=[]) %} {% for state in states %}
          {% if 'device_topic' in state.entity_id %}
            {% set awtrix_topic.states = awtrix_topic.states + [state.state] %}
          {% endif %}
        {% endfor %} {{ awtrix_topic.states }}
      # Cette variable détermine si on envoie vers une customapp ou une notification
      # /custom/[nom_app] pour une customapp, /notify pour une notification standard
      end_topic: "{{ '/custom/' + customapp if customapp else '/notify' }}"
  
  # Deuxième étape: Boucle pour envoyer le message à tous les appareils Awtrix
  - repeat:
      sequence:
        # On stocke le topic courant dans une variable pour chaque itération
        - variables:
            current_topic: "{{ repeat.item }}"
        # Publication du message MQTT vers l'appareil courant
        - data:
            qos: 0
            retain: false
            topic: "{{current_topic}}{{ end_topic }}"
            payload: |
              {% if message %}
              {
                    "text": "{{ message }}",
                    "icon": "{{ icone }}",
                    "pushIcon": 0,
                    "scrollSpeed": "{{ scrollspeed }}",
                    "gradient": "{{ degrade }}",
                    "rainbow": {{ rainbow }},
                    "color": "{{ color }}",
                    "duration": "{{ duree }}"
              }
              {% else %}
              {}
              {% endif %}
          action: mqtt.publish
          enabled: true
      # Boucle pour chaque topic Awtrix trouvé dans les états
      for_each: "{{ awtrix_topic_states }}"

# Configuration générale de l'automatisation
alias: awtrix dynamique customapp notify

# Définition des champs pour l'interface utilisateur
fields:
  # Champ pour spécifier le nom de la customapp (optionnel)
  customapp:
    selector:
      text: null
    name: customapp
    description: nom de la customapp, laisser vide pour faire une notification
    required: false
  
  # Champ pour le message à afficher
  message:
    selector:
      text: null
    name: message
    description: message, laisser avec un "espace" pour effacer la customapp
    required: false
  
  # Champ pour l'icône
  icone:
    selector:
      text: null
    name: icone
    description: icone, le nom ou son numero dans l'awtrix
    required: false
    default: warning
  
  # Activation du mode arc-en-ciel
  rainbow:
    selector:
      text: null
    name: rainbow
    description: rainbow true/false
    default: "false"
    required: true
  
  # Vitesse de défilement du texte
  scrollspeed:
    selector:
      text: null
    name: scrollSpeed
    description: vitesse de defillement
    default: "50"
    required: true
  
  # Configuration du dégradé de couleurs
  degrade:
    selector:
      text: null
    name: degradé
    description: "degradé (2 couleurs #hexa ou rgb)"
  
  # Couleur du texte
  color:
    selector:
      text: null
    name: color
    description: >-
      couleur du texte string ou array "#FFFFFF" or [255,255,0], seagreen par
      defaut
    default: "#2e8b57"
  
  # Durée d'affichage de l'application ou de la notification
  duree:
    selector:
      text: null
    name: duree
    description: durée d'affichage de l'app ou de la notif
    default: "25"
    required: true

description: >-
  Cette automatisation permet d'envoyer des messages et des notifications à tous les appareils
  Awtrix disponibles dans votre système Home Assistant. Elle offre deux modes de fonctionnement:
  
  1. Mode Notification: Envoi d'une notification temporaire (sans remplir le champ "customapp")
  
  2. Mode Application Personnalisée: Création ou mise à jour d'une application personnalisée sur
     vos appareils Awtrix (en spécifiant un nom dans le champ "customapp")
  
  Le script détecte automatiquement tous les topics MQTT des appareils Awtrix et envoie le message
  à chacun d'entre eux. Vous pouvez personnaliser entièrement l'apparence du message (texte, icône,
  couleur, effets, vitesse de défilement, etc.).
  
  Pour supprimer une application personnalisée, spécifiez son nom dans le champ "customapp" et
  mettez simplement un espace dans le champ "message".
  
  Détails des paramètres du payload MQTT:
  - text: Texte à afficher sur l'Awtrix
  - icon: Icône à afficher (nom ou numéro)
  - pushIcon: Position de l'icône (0 = gauche, 1 = droite)
  - scrollSpeed: Vitesse de défilement du texte
  - gradient: Dégradé de couleurs (format spécifique)
  - rainbow: Mode arc-en-ciel (true/false)
  - color: Couleur du texte (hex ou RGB)
  - duration: Durée d'affichage en secondes

Utilisation

Une fois le script installé, vous pouvez l’appeler depuis:

  • L’interface utilisateur de Home Assistant

  • D’autres automatisations

  • Des scripts

  • Des appels de service

Pour envoyer une notification simple

Remplissez les champs sans spécifier de « customapp ». Le message s’affichera sur tous vos appareils Awtrix pendant la durée spécifiée.

Pour créer ou mettre à jour une application personnalisée

Renseignez le champ « customapp » avec le nom de votre choix, puis configurez les autres paramètres. L’application sera créée ou mise à jour sur tous vos appareils Awtrix.

Pour supprimer une application personnalisée

Renseignez le champ « customapp » avec le nom de l’application à supprimer, et mettez simplement un espace dans le champ « message ».

Avantages de cette approche centralisée

Cette solution offre plusieurs avantages concrets:

  1. Maintenance simplifiée: Un seul script à mettre à jour au lieu de dizaines d’automatisations individuelles

  2. Découverte automatique: Quand vous ajoutez un nouvel appareil Awtrix, il est automatiquement détecté et intégré

  3. Configuration unifiée: Tous les paramètres sont centralisés dans un seul endroit

  4. Interface utilisateur intuitive: Les champs sont décrits et documentés dans l’interface

  5. Flexibilité maximale: Compatible avec les notifications simples et les applications personnalisées

Mes exemples d’utilisation

Voici quelques façons dont j’utilise personnellement ce script dans mon installation:

Exemple :

J’ai créé une automatisation qui surveille le capteur de température de ma chambre et met à jour une application personnalisée sur mes appareils Awtrix à chaque changement de valeur. La couleur du texte change automatiquement selon la température:

  • Bleu si moins de 19°C
  • Vert entre 19°C et 23°C
  • Rouge si plus de 23°C
alias: customapp temp_cham
description: ""
triggers:
  - entity_id:
      - sensor.temperature_chambre
    id: tempcham
    trigger: state
conditions: []
actions:
  - variables:
      temp_cham: |
        {{ "Chambre" + " " + states('sensor.temperature_chambre')  + "°C" }}
      color: |
        {% set state = states('sensor.temperature_chambre') %}  
          {% if state >= '23' %}
            #FF0000
          {% elif state >= '19' %}
            #2e8b57
          {% else %}
            #0000ff
          {% endif %}
  - action: script.awtrix_dynamique_customapp_dupliquer
    data:
      icone: temp_ch
      rainbow: "false"
      scrollspeed: "50"
      color: "{{ color }}"
      duree: "25"
      customapp: temp_cham
      message: "{{ temp_cham }}"
mode: single

Cette automatisation se déclenche à chaque changement de température et met à jour l’application « temp_cham » sur tous mes appareils Awtrix. Le message affiché inclut le mot « Chambre » suivi de la température actuelle. L’icône utilisée est « temp_ch » (que j’ai ajoutée dans ma bibliothèque d’icônes Awtrix).

Si vous avez des questions ou des suggestions d’amélioration, n’hésitez pas.

Super très joli travail :wink:

Bravo , j étais passé a coté , merci pour le travail !

J’ai mis le script et un exemple sur mon github, ainsi qu’un readme pour vous aider dans le deploiement.

Salut,

Petit déterrage de post. Ce matin, j’ai repris le script de zéro pour en faire une V2 (v2.1.18).

L’idée principale derrière cette refonte : que le script en fasse un maximum tout seul avec le moins d’efforts possible lors de l’appel, tout en gardant la liberté de modifier ce qu’on veut via des overrides.

:hammer_and_wrench: Ce qui change concrètement :

  • :brain: Moteur de Presets : J’ai intégré la logique métier directement dans le script. Pour l’instant, il y a 3 modes (Générique, Thermomètre, Multimédia). Le script formate le texte, choisit l’icône et gère les couleurs tout seul.
  • :satellite_antenna: Modularisation : La détection des matrices est déportée dans un Sensor Template. C’est plus propre et ça allège le script.
  • :vertical_traffic_light: Gestion intelligente de l’état : Le script vérifie l’état de vos matrices et n’envoie les données que si l’écran est allumé.
  • :shuffle_tracks_button: Mode Parallèle : Le script gère maintenant jusqu’à 10 instances simultanées (multi-écrans / multi-flux).
  • :shield: Anti-Collision : Chaque source peut avoir sa propre « App » personnalisée (via l’option suffixe_auto).

:warning: Work In Progress

C’est une base de travail. Pour l’instant, je n’ai intégré que les 3 presets de base, mais l’architecture permet d’en ajouter d’autres facilement.

:camera_with_flash: Aperçu de l’interface (UI-Ready)

Voici à quoi ressemble le moteur une fois installé dans Home Assistant. Tout est paramétrable via l’interface :



:thermometer: Preset : Thermomètre Intelligent

:brain: Logique de Traitement

  • Analyse d’Unité : Le moteur récupère automatiquement l’unité définie dans Home Assistant (°C ou °F).
  • Formatage : Arrondi automatique à 1 décimale pour une lisibilité optimale sur matrice LED.
  • Colorimétrie par défaut :
    • :blue_circle: Bleu (#0000FF) : Température ≤ 19°C.
    • :green_circle: Vert (#2E8B57) : Zone de confort (19°C - 23°C).
    • :red_circle: Rouge (#FF0000) : Température ≥ 23°C.

:artist_palette: Personnalisation des Seuils

Si vous souhaitez modifier les seuils (ex: Rose si < 17°C), utilisez un template dans le champ couleur_perso de votre automatisation :

couleur_perso: >
  {% set val = states(trigger.entity_id) | float %}
  {% if val < 17 %} #ff00ff
  {% elif val > 25 %} #ff0000
  {% else %} #2e8b57
  {% endif %}

:musical_note: Preset : Multimédia

:brain: Intelligence de Parsing & Formatage

Le moteur traite dynamiquement les attributs pour éviter les valeurs None et garantir un affichage propre :

  • Séries TV :
    • Format : Nom Série S01E08 - Titre Episode.
    • Zéro-Padding : Ajoute automatiquement le « 0 » devant les saisons/épisodes < 10.
    • Icône : Utilise l’icône animée tv_movie.
  • Musique :
    • Format : Artiste - Titre.
    • Icône : Utilise l’icône music.
  • Films :
    • Format : Titre du film.
    • Icône : Movie (ou plex via override).

:broom: Gestion Anti-Idle

L’application multimédia suit strictement l’état du lecteur :

  1. Lecture (playing) : L’app est diffusée normalement.
  2. Autre état (pause, idle, off) : Le script envoie un payload vide {} qui supprime instantanément l’application de la matrice, gardant votre boucle d’affichage propre.

:package: ACCÈS AUX CODES & DOCUMENTATION

Pour éviter de polluer le forum avec des blocs de code qui bougent souvent, j’ai tout centralisé sur GitHub. Vous y trouverez le sensor de discovery, le script moteur et des exemples d’automatisations.

:link: Awtrix Omni-Logique (v2.1.18)

Le README sur le dépôt explique en détail comment installer chaque composant.

N’hésitez pas si vous avez des bugs ou si vous voyez des types d’entités qu’il faudrait ajouter dans les presets !

Merci c'est top.

Je débute et après avoir testé différentes solutions pour remonter une température sur l'appareil j'ai réussi !

Par contre le readme mentionne un pack d'images que je ne retrouve pas sur le repo.

Je souhaite donc créer la remontée de plusieurs capteurs de température accompagnée d'un icone différents pour les differencier sur l'ecran

Merci de ton aide et bravo pour le travail accompli et la simplification que ça apporte.

Home Assistant

Méthode d'installation

Home Assistant OS

Core

2026.5.4

Supervisor

2026.05.1

Operating System

17.3

Interface utilisateur

20260429.4

Application Companion

2026.4.4-full (21576)

Salut,

il est pourtant bien la images, je modifierai le readme pour pointer direct dessus