Script pour notification et customapp dynamique sur awtrix

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.

5 « J'aime »

Super très joli travail :wink:

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

1 « J'aime »

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