Neuer Trigger: Ankunft einer MQTT-Nachricht

Funktionsbeschreibung
Nach unserer Diskussion hier

Eine Szene sollte ausgelöst werden können, wenn eine MQTT-Nachricht auf einem bestimmten Topic eintrifft.

Und das wäre in anderen Fällen auch nützlich, denke ich!

Ich muss hier eine Abstimmung freigeben :ok_hand:

Ich habe einen kleinen Vorschlag für diesen PR gemacht:

Ich habe keinen neuen Auslöser hinzugefügt. Ich habe nur hinzugefügt, dass man jede Szene über eine MQTT-Nachricht starten kann.

Dazu muss man eine Nachricht « START » im Kanal « gladys/scene/[sceneSelector] » veröffentlichen.

Was haltet ihr davon?

@Lokkye einfach nur ein Wort: Genial! :blush:

Dafür muss eine Nachricht « START » im Channel « gladys/scene/[sceneSelector] » veröffentlicht werden.

Das müsste man erklären, denn so sehe ich nicht das « Wie »?

Ansonsten ist es super, Szenen von außen über MQTT oder Node-Red zu öffnen!
Gratulation an die Entwickler!!! :+1: :clap:

Super cool @Lokkye!

Für das Format des Topics sollten wir das aktuelle Format der anderen MQTT-Topics beibehalten, insbesondere das Präfix « master », das anzeigt, dass wir uns an die « Master »-Instanz wenden. Das ist in Gladys noch nicht der Fall, aber die Idee hinter diesem « Master » war, in Zukunft abgekoppelte « Pod »-Instanzen zu haben, die entfernte Dienste ausführen können.

Ich würde mir also etwas wie Folgendes vorstellen:

gladys/master/scene/[sceneSelector]/start

Kein spezifischer Body.

Was hältst du davon?

PS: Ich habe auch eine kleine technische Überprüfung durchgeführt: Run scene when receive message on MQTT by callemand · Pull Request #1911 · GladysAssistant/Gladys · GitHub

@pierre-gilles: Ich kannte das Thema ‹ gladys/master/… › nicht.
Ich habe meinen Code entsprechend geändert. Es ist viel einfacher :slight_smile:

Danke für das technische Review :slight_smile:

Tatsächlich ist es viel einfacher :smiley: Super PR, ich habe es getestet und es funktioniert bei mir!

Es ist gemerged und wird in der nächsten Version von Gladys verfügbar sein.

Allerdings bin ich mir nicht sicher, ob wir diese Funktionsanfrage schließen, da es nicht genau das geforderte Feature ist (hier ging es um benutzerdefinierte Topics).

Danke @pierre-gilles für das Mergen :slight_smile:

Ich werde schauen, ob ich auch den neuen Auslöser in einer Szene in einem anderen PR hinzufüge.

@pierre-gilles:
Hier ist der PR, der die Funktion umsetzt:

Sag mir, was du davon hältst :slight_smile:

@Lokkye Ich habe dir eine Review gemacht! Add scene trigger : MQTT message by callemand · Pull Request #1913 · GladysAssistant/Gladys · GitHub

Ich würde die Logik hinter dieser Entwicklung ein bisschen besser verstehen, um die Implementierungsentscheidungen zu verstehen :slight_smile: Wenn du lieber hier auf Französisch statt auf Github auf Englisch erklären möchtest, wie du möchtest!

@pierre-gilles: Danke für das Gegenlesen.

Dass ich das Wort „mqtt“ nicht verwende, liegt daran, dass ich mich komplett vom Service abkoppeln wollte. Ich mache viel Clean Architecture in meinem Job und trenne daher gerne die Konzepte. Ich wollte auch vermeiden, technische Begriffe in Gladys einzuführen. Aber es stimmt, dass ich dadurch nicht unbedingt klarer werde.
Werden wir in naher oder ferner Zukunft noch andere Message Queues einführen?

Ich verstehe den Gedanken, aber manchmal verwirrt aus Nutzersicht das « ultra-generische » nur die Nutzung, und es ist besser, « ultra-spezifisch » zu sein, was es ermöglicht, den richtigen Vokabular zu verwenden.

UX-Ebene

In diesem Fall wird der Nutzer, der ein externes MQTT-Skript verbinden möchte, sicherlich nach dem Wort « MQTT » als Auslöser suchen. Es ist zwar technisch, aber wer das möchte, ist technisch versiert.

Wenn MQTT nirgends erwähnt wird, ist es unmöglich zu wissen, was das bedeutet :slight_smile:

Selbst wenn wir in Zukunft andere Technologien für Warteschlangen haben, können wir andere spezifische Auslöser für diese Technologien erstellen.

Wenn wir uns das Beispiel von Zapier (https://zapier.com/) ansehen, wenn du einen Trigger auswählst, bieten sie dir direkt alle möglichen Technologien an, damit es klar ist:

Ich denke, wir können MQTT in diesem Fall erwähnen und überall im Code über MQTT sprechen, ohne Probleme :slight_smile:

Implementierungsebene

Ich bin mir nicht sicher, ob die Implementierung für diesen speziellen Fall sinnvoll ist, insbesondere die Verwendung von EventEmittern zum Abbrechen von Triggern und zum Setzen von Triggern, da wir keine Garantie für die Ausführung des Codes vor dem Weitergehen haben.

In der aktuellen Implementierung gibt es nichts, was besagt, dass der Listener:

this.gladys.event.on(EVENTS.MESSAGE_QUEUE.UNSUBSCRIBE, this.handleGladysEventUnsubscribe.bind(this));

wird sicher vor ausgeführt:

this.gladys.event.on(EVENTS.MESSAGE_QUEUE.SUBSCRIBE, this.handleGladysEventSubscribe.bind(this));

Daher könnte es sein, dass, wenn ich meine Szene bearbeite, mein Listener ein zweites Mal hinzugefügt und dann entfernt wird, und wir uns in einem « schmutzigen » Zustand befinden

Ich glaube nicht, dass wir eine Wahl haben, ich denke, wir müssen this.service.mqtt in der Szene aufrufen. Übrigens, wenn wir normalerweise von Gladys zu den Diensten gehen, machen wir das im Rest des Codes (zum Beispiel in der Telegram-Integration machen wir das)

Was denkst du?

Ok, ich verstehe besser.

Ja, nach reiflicher Überlegung hast du völlig recht :slight_smile:

Ich dachte nicht, dass der „Kern“ direkt mit den Diensten verbunden werden könnte. Daher müssen wir auch berücksichtigen, dass der Dienst nicht aktiviert ist :slight_smile:

Ich kümmere mich darum, das zu erledigen :slight_smile:

Wenn wir das zum Beispiel in der Telegram-Integration machen :slight_smile:

Ja, und ich würde sogar sagen, dass es idealerweise in der UI des Triggers auch angezeigt werden sollte, falls der MQTT-Dienst nicht konfiguriert ist.

@pierre-gilles : Normalerweise habe ich die Änderungen basierend auf deinem Feedback vorgenommen.

Super! Ich schaue mir das heute an :slight_smile:

Super cool @Lokkye, läuft perfekt bei mir so :ok_hand:

Ich habe dir ein paar Rückmeldungen gegeben, aber nichts Schlimmes :slight_smile:

https://github.com/GladysAssistant/Gladys/pull/1913#pullrequestreview-1714640371

@pierre-gilles: Ich habe gerade die Änderungen basierend auf deinem Feedback vorgenommen.
Lass es mich wissen, falls ich etwas übersehen habe. :slight_smile:

Danke für die Korrekturen, das ist für mich in Ordnung und wird in der nächsten Version von Gladys veröffentlicht! :folded_hands:

Diese Funktion ist in Gladys Assistant 4.31 verfügbar! :rocket:

Ich schließe dieses Thema, um die Abstimmungen freizugeben. Zögern Sie nicht, ein neues Thema zu erstellen, falls Sie auf Fehler stoßen :slight_smile: