Gladys Ambienten-Szenen mit NFC-Karten auslösen

Hallo,

Ich denke über ein kleines interaktives Projekt nach, das physische Karten mit NFC-Tags verwendet, um verschiedene Stimmungen in Gladys auszulösen.

Die Idee wäre, ein sehr dünnes NFC-Tag in die Hülle jeder Karte zu legen. Wenn die Karte mit einem Telefon gescannt wird, sendet dieses eine Kennung an Gladys per HTTP oder MQTT.

Gladys könnte dann:

  • die Farbe und Helligkeit der Lampen ändern

  • eine Musik oder lokale Klangkulisse abspielen

  • eine Szene für eine bestimmte Dauer aktivieren

  • die zuletzt gescannte Karte speichern

  • ihren Namen auf dem Dashboard anzeigen

  • nach einigen Minuten automatisch zur normalen Stimmung zurückkehren

Das Projekt würde 78 verschiedene Karten enthalten. Hier ist die Liste, die ich verwenden würde, um jede NFC-Kennung mit einem Namen und einer Stimmung zu verknüpfen:

Ich weise darauf hin, dass ich an der Wartung der verlinkten Website beteiligt bin. Ich teile diese Seite nur, um den Datensatz und die 78 Einträge zu zeigen, die die Automatisierung verarbeiten sollte.

Ich suche jetzt die beste Architektur in Gladys.

1. HTTP oder MQTT zum Übertragen der Kennung?

Ist es für eine hauptsächlich lokale Nutzung besser, wenn das Telefon die Kartenkennung direkt auf ein MQTT-Topic veröffentlicht?

Zum Beispiel:

gladys/nfc/card

Mit einem Wert wie:

the-world

Oder wäre es einfacher, NFC Tools oder Tasker zu verwenden, um eine HTTP-Anfrage an die Gladys-API zu senden?

2. Ein virtuelles Gerät zum Speichern der Karte

Ich dachte daran, ein virtuelles MQTT-Gerät mit einer Text- oder numerischen Funktion zu erstellen, die die zuletzt gescannte Karte darstellt.

Ist das eine gute Methode, um zu ermöglichen, dass Szenen auf den Wert reagieren, oder sollte man direkt eine andere Szene vom Telefon aus auslösen?

3. Vermeidung der Erstellung von 78 Szenen

Ich würde lieber keine separate Szene für jede Karte erstellen.

Gibt es eine saubere Möglichkeit, eine einzige Szene zu erstellen, die:

  1. die empfangene Kennung abruft

  2. diese Kennung in einer Zuordnungstabelle sucht

  3. die Farbe, Helligkeit, den Klang und die Dauer abruft, die damit verknüpft sind

  4. die entsprechenden Aktionen ausführt

Die Tabelle könnte so aussehen:

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

Kann diese Art von Logik direkt in Gladys verwaltet werden, oder wäre es besser, über Node-RED oder eine kleine externe Integration zu gehen?

4. Erkennung der Karte aufrecht oder umgekehrt

Eine Karte kann normal oder um 180 Grad gedreht platziert werden.

Ich könnte zwei verschiedene NFC-Aktionen auf dem Telefon speichern, zum Beispiel:

the-world:upright
the-world:reversed

Aber das würde wahrscheinlich zwei Tags pro Karte erfordern.

Sehen Sie eine einfachere Methode, um auch die Ausrichtung der Karte zu übertragen?

5. Zeitsteuerung und Wiederherstellung des vorherigen Zustands

Nach 10 oder 15 Minuten möchte ich die Lampen und Geräte in ihren vorherigen Zustand zurückversetzen.

Erlaubt Gladys, die Zustände vor dem Start der Szene zu speichern und sie dann automatisch am Ende wiederherzustellen?

Falls nicht, könnte ich einfach eine Szene für die normale Stimmung nach einer festen Verzögerung starten.

6. Anzeige auf dem Dashboard

Schließlich wäre es möglich, im Dashboard anzuzeigen:

  • der Name der letzten Karte

  • die Scan-Zeit

  • ihre Ausrichtung

  • die aktuell aktive Stimmung

Ich möchte mit einem Prototyp beginnen, der nur drei Karten verwendet, bevor ich die 78 vorbereite.

Für dieses Projekt würden Sie eher MQTT, die Open API, Node-RED oder das zukünftige externe Integrationssystem von Gladys verwenden?

Hallo @selamibaba, und willkommen bei Gladys :slight_smile:

Super Projekt, ich liebe die Idee :slightly_smiling_face:

Gute Nachricht: Fast alles, was du beschreibst, ist mit Gladys heute ohne Code möglich. Ich gehe auf deine Fragen der Reihe nach ein:

1. MQTT oder HTTP? Ich empfehle MQTT. Gladys kann seinen eigenen Broker installieren (MQTT-Integration, mit einem Klick), und vor allem haben Szenen einen Auslöser „MQTT-Nachricht empfangen“: Du wählst ein Topic (z. B. tarot/scan), und der Inhalt der Nachricht ist dann in den Aktionen der Szene über die Variable {{triggerEvent.message}} verfügbar. Bei HTTP kannst du nur eine Szene über die API (POST /api/v1/scene/:selector/start) starten, aber ohne Parameter zu übergeben — also weniger flexibel für deinen Fall.

2. Letzte gescannte Karte speichern. Erstelle ein virtuelles Gerät in der MQTT-Integration mit einem Feature vom Typ Text. Dein Leser (oder deine Szene) veröffentlicht auf gladys/master/device/[id_device]/feature/[id_feature]/text und Gladys speichert den Wert mit Historie. Du kannst ihn dann im Dashboard mit dem Widget „Geräte“ anzeigen.

3. 78 Szenen vermeiden. Hier, ehrlich gesagt, würde ich die Zuordnungstabelle nicht in Gladys machen: Es gibt (noch) keine Lookup-Tabellen-Funktion in den Szenen, und 78 „wenn/dann“-Verzweigungen wären unübersichtlich. Am saubersten ist es, die Karte-zu-Parametern-Zuordnung (Farbe, Helligkeit, Dauer) so nah wie möglich am Leser zu platzieren: entweder im Firmware des ESP, der die Tags liest, oder in Node-RED (es gibt eine offizielle Node-RED-Integration in Gladys, die in einem Klick installiert wird). Der Leser/Node-RED veröffentlicht dann eine bereits „aufgelöste“ Nachricht (z. B. die Farbe auf einem Topic, die Helligkeit auf einem anderen, der Name der Karte auf einem dritten), und bei Gladys wendet eine einzige generische Szene diese Werte mit {{triggerEvent.message}} an. Ein zu ändernder Eintrag = eine Zeile in deiner Tabelle, nicht eine Szene, die angepasst werden muss.

4. Karte richtig / verkehrt herum. Das ist etwas, das ein NFC-Tag nicht anzeigen kann: Der Tag gibt dieselbe Kennung unabhängig von seiner Ausrichtung zurück. Die klassische Lösung ist hardwarebasiert: zwei Tags pro Karte (eins oben, eins unten) mit einem Leser mit kurzer Antenne, der nur das nächstgelegene Tag liest. Du erhältst dann zwei Kennungen pro Karte, und deine Zuordnungstabelle übersetzt „ID Nr. 2 des Mondes = Mond umgedreht“. Bei Gladys ist das transparent.

5. Zustand der Lampen nach 15 Minuten wiederherstellen. Statt eine Verzögerung in der Scan-Szene zu setzen, verwende den Auslöser „Gerätezustand ändert sich“ mit der Option „Szene ausführen, nachdem die Bedingung X Minuten lang gültig war“: Erstelle ein virtuelles Feature „Ambiente aktiv“, das deine Scan-Szene bei jeder Karte von 0 auf 1 setzt (das 0→1 setzt den Zähler zurück, sodass ein neuer Scan die Wiederherstellung wirklich um 15 Minuten verschiebt). Eine zweite Szene, die bei „Ambiente aktiv = 1 für 15 Minuten“ ausgelöst wird, stellt die Beleuchtung in ihren normalen Zustand zurück und setzt das Feature wieder auf 0. Wenn du den exakten Zustand vor dem Scan wiederherstellen möchtest (und nicht einen Standardzustand), lass die Scan-Szene den Zustand der Lampen in virtuellen Backup-Features kopieren, die die Wiederherstellungsszene dann wieder anwenden.

6. Dashboard. Das Widget „Geräte“ zeigt deine Text-Features (Name der Karte, Ambiente aktiv) an, und es gibt ein Uhr-Widget für die Zeit.

Zögere nicht, Fotos der Montage zu teilen, wenn es läuft, das würde ein super Thema für die Community sein! :crystal_ball: