Déclencher des scènes d’ambiance Gladys avec des cartes NFC

Bonjour,

Je réfléchis à un petit projet interactif utilisant des cartes physiques équipées de tags NFC pour déclencher différentes ambiances dans Gladys.

L’idée serait de placer un tag NFC très fin dans la pochette de chaque carte. Lorsque la carte est scannée avec un téléphone, celui-ci envoie un identifiant à Gladys par HTTP ou MQTT.

Gladys pourrait ensuite :

  • modifier la couleur et la luminosité des lampes

  • lancer une musique ou une ambiance sonore locale

  • activer une scène pendant une durée déterminée

  • enregistrer la dernière carte scannée

  • afficher son nom sur le tableau de bord

  • revenir automatiquement à l’ambiance normale après quelques minutes

Le projet contiendrait 78 cartes différentes. Voici la liste que j’utiliserais pour associer chaque identifiant NFC à un nom et à une ambiance :

Je précise que je participe à la maintenance du site lié. Je partage cette page uniquement pour montrer le jeu de données et les 78 entrées que l’automatisation devrait gérer.

Je cherche maintenant la meilleure architecture dans Gladys.

1. HTTP ou MQTT pour transmettre l’identifiant ?

Pour un usage principalement local, est-il préférable que le téléphone publie directement l’identifiant de la carte sur un topic MQTT ?

Par exemple :

gladys/nfc/card

Avec une valeur comme :

the-world

Ou serait-il plus simple d’utiliser NFC Tools ou Tasker pour envoyer une requête HTTP à l’API Gladys ?

2. Un appareil virtuel pour stocker la carte

Je pensais créer un appareil MQTT virtuel avec une fonctionnalité texte ou numérique représentant la dernière carte scannée.

Est-ce une bonne méthode pour permettre aux scènes de réagir à la valeur, ou faudrait-il déclencher directement une scène différente depuis le téléphone ?

3. Éviter de créer 78 scènes

Je préférerais ne pas créer une scène séparée pour chaque carte.

Existe-t-il une manière propre de créer une seule scène qui :

  1. récupère l’identifiant reçu

  2. recherche cet identifiant dans une table de correspondance

  3. récupère la couleur, la luminosité, le son et la durée associés

  4. exécute les actions correspondantes

La table pourrait ressembler à ceci :

{
  "the-world": {
    "color": "#D4AF37",
    "brightness": 45,
    "duration": 900
  },
  "the-hermit": {
    "color": "#6B7280",
    "brightness": 20,
    "duration": 1200
  }
}

Est-ce que ce type de logique peut être géré directement dans Gladys, ou serait-il préférable de passer par Node-RED ou une petite intégration externe ?

4. Détecter la carte à l’endroit ou à l’envers

Une carte peut être posée normalement ou tournée à 180 degrés.

Je pourrais enregistrer deux actions NFC différentes sur le téléphone, par exemple :

the-world:upright
the-world:reversed

Mais cela demanderait probablement deux tags par carte.

Voyez-vous une méthode plus simple pour transmettre également l’orientation de la carte ?

5. Temporisation et restauration de l’état précédent

Après 10 ou 15 minutes, je voudrais restaurer les lampes et les appareils dans leur état précédent.

Gladys permet-il de mémoriser les états avant le lancement de la scène, puis de les restaurer automatiquement à la fin ?

Sinon, je pourrais simplement lancer une scène d’ambiance normale après un délai fixe.

6. Affichage sur le tableau de bord

Enfin, serait-il possible d’afficher dans le dashboard :

  • le nom de la dernière carte

  • l’heure du scan

  • son orientation

  • l’ambiance actuellement active

Je souhaite commencer par un prototype avec seulement trois cartes avant de préparer les 78.

Pour ce type de projet, utiliseriez-vous plutôt MQTT, l’Open API, Node-RED ou le futur système d’intégrations externes de Gladys ?

Salut @selamibaba, et bienvenue sur Gladys :slight_smile:

Super projet, j’adore l’idée :slightly_smiling_face:

Bonne nouvelle : la quasi-totalité de ce que tu décris est faisable avec Gladys aujourd’hui, sans code. Je reprends tes questions dans l’ordre :

1. MQTT ou HTTP ? Je te conseille MQTT. Gladys peut installer son propre broker (intégration MQTT, en 1 clic), et surtout les scènes ont un déclencheur « Message MQTT reçu » : tu choisis un topic (par ex. tarot/scan), et le contenu du message est ensuite accessible dans les actions de la scène via la variable {{triggerEvent.message}}. En HTTP, tu peux uniquement démarrer une scène via l’API (POST /api/v1/scene/:selector/start), mais sans lui passer de paramètres — donc moins souple pour ton cas.

2. Mémoriser la dernière carte scannée. Crée un appareil virtuel dans l’intégration MQTT avec une feature de type texte. Ton lecteur (ou ta scène) publie sur gladys/master/device/[id_device]/feature/[id_feature]/text et Gladys enregistre la valeur, avec historique. Tu peux ensuite l’afficher sur le dashboard avec le widget « Appareils ».

3. Éviter 78 scènes. Là, honnêtement, je ne mettrais pas la table de correspondance dans Gladys : il n’y a pas (encore) de notion de table de lookup dans les scènes, et 78 branches « si/alors » seraient ingérables. Le plus propre est de mettre la correspondance carte → paramètres (couleur, luminosité, durée) au plus près du lecteur : soit dans le firmware de l’ESP qui lit les tags, soit dans Node-RED (il y a une intégration officielle Node-RED dans Gladys qui l’installe en un clic). Le lecteur/Node-RED publie alors un message déjà « résolu » (par ex. la couleur sur un topic, la luminosité sur un autre, le nom de la carte sur un troisième), et côté Gladys une seule scène générique applique ces valeurs avec {{triggerEvent.message}}. Une entrée à modifier = une ligne dans ta table, pas une scène à retoucher.

4. Carte à l’endroit / à l’envers. Ce n’est pas quelque chose qu’un tag NFC sait indiquer : le tag renvoie le même identifiant quelle que soit son orientation. La solution classique est matérielle : deux tags par carte (un en haut, un en bas) avec un lecteur à antenne courte qui ne lit que le tag le plus proche. Tu obtiens alors deux identifiants par carte, et c’est ta table de correspondance qui traduit « ID n°2 de la Lune = Lune inversée ». Côté Gladys, c’est transparent.

5. Restaurer l’état des lampes après 15 min. Plutôt que de mettre un délai dans la scène de scan, utilise le déclencheur « Changement d’état de l’appareil » avec l’option « Exécuter la scène après que la condition ait été valide pendant X minutes » : crée une feature virtuelle « ambiance active », que ta scène de scan passe à 0 puis à 1 à chaque carte (le 0→1 réarme le compteur, comme ça un nouveau scan repousse bien la restauration de 15 min). Une seconde scène, déclenchée sur « ambiance active = 1 pendant 15 minutes », remet l’éclairage dans son état normal et repasse la feature à 0. Si tu veux restaurer l’état exact d’avant le scan (et pas un état par défaut), fais copier l’état des lampes par la scène de scan dans des features virtuelles de sauvegarde, que la scène de restauration réappliquera.

6. Dashboard. Le widget « Appareils » affichera tes features texte (nom de la carte, ambiance active), et il existe un widget horloge pour l’heure.

N’hésite pas à partager des photos du montage quand ça tourne, ça ferait un super sujet à partager à la communauté ! :crystal_ball: