MQTT Server How To (send & receive)

Habe eine Instanz ‚MQTT Server Gerät‘ erstellt. Und kann damit Strings in der Variable ‚Value‘ empfangen und auch mit einem Script via RequestAction senden.

Wie macht man das nun „best practices“. Habe die Variable mit einem Ereignis auf Veränderung überwacht und das getriggerte Script verarbeitet nun die Variablenupdates. Blöd nur, dass ich in diesem Script keinen Unterschied sehe ob das ein emfangener String ist oder ein per RequestAction gesendeter String. Was ist hier die Idee?

Grüße,

H-C

Warum ist das Blöd? Oder eher, warum ist das wichtig?
Das RequestAction sendet ja nur und setzt nicht die Variable, das erfolgt ja erst durch den Empfang des neuen Wertes.
Michael

Meine Instanz empfängt auf /Viessmann/fan und sendet auf /Viessmann/fan/set. Mein Ziel ist es mit
/Viessmann/fan/set: ‚On‘ den Fan von Symcon aus anzuschalten und dann sendet der Fan alle 5min via /Viessmann/fan ebenfalls ‚On‘ um zu bestätigen, dass der Fan auch an ist (und nicht anderweitig abgeschaltet).

Wenn ich den Log (Debug: MQTT Server) mit allen MQTT messages anschaue sehe ich beim der RequestAction, dass das MQTT Paket gesendet wurde. Kann es auch bei Fan empfangen. Gleichzeitig wird die Variable auf ‚On‘ gesetzt. Dies passiert nicht durch ein Paket, welches vom Fan geschickt wird, sd. direkt. Oder verstehe ich da was falsch?

Im Symcon-Script, welches durch eine Veränderung der Variable getriggert wird, möchte ich nun unterscheiden. ‚On‘ kann eine Message vom Fan sein, das der Fan an ist. ‚On‘ kann aber auch eine Message sein, dass ‚versucht‘ wird den Fan anzuschalten. Das muss aber nicht gelingen. Diesen Fall würde ich gerne anders abarbeiten,

Hoffe, das war verständlich. Gebe aber zu, dass ich die Idee von MQTT vielleicht noch nicht richtig verstanden habe.

Thx, H-C

/Viessmann/fan Ist doch das, was das Gerät an den Broker (Symcon) sendet, somit ist das immer der Zustand vom Fan.
Intern mappt Symcon nix von /Viessmann/fan/set auf /Viessmann/fan

Welcher Variable? /Viessmann/fan oder /Viessmann/fan/set

Das kann nur bei der /set Variable passieren, die Variable /Viessmann/fan sollte immer der echte Zustand sein.
Michael

Na, beim Aufsetzen wird doch die Variable „Value“ generiert (String Variable unterhalb der Instanz). Das ist die Variable, in die dann ‚On‘ geschrieben wird. Sowohl wenn man auf via /Viessmann/fan empfängt als auch wenn man auf /Viessmann/fan/set postet. Die Variable macht da keinen Unterschied. Diese Variable verarbeite ich dann bei Veränderung.

Ach Mist, du hast ja Recht, weil Symcon selbst der Server ist und du ja nur eine Instanz mit geänderten Sende Topic hast.
Somit ist Symcon natürlich der Meinung, dass der neue Wert korrekt ist. Egal ob ein MQTT Client das Topic aboniert hat und verarbeitet.

Lösung wäre dann doch wieder zwei MQTT Geräte Instanzen anzulegen.
Einmal mit dem Topic /Viessmann/fan, was dann nur den echten Wert vom Gerät darstellt; und einmal eine Instanz mit dem Topic /Viessmann/fan/set, nur zum schalten.

Michael

Hi,
könnte man das nicht mit ‚Sender‘ unterscheiden? Einmal ‚Variable‘ und einmal ‚Action‘?

Ralf

Nein, ein ausgelöstes Ereignis wird immer Sender VARIABLE haben.
Es geht nicht um ein Aktionsskript.
Weil eigentlich passiert hier auch keine Aktion.
Es wird wirklich nur die Variable (bzw das Sende Topic) gesetzt.
Der mqtt Server von Symcon sendet diese Änderung nur an Clients welche dieses Topic abonniert haben.

Hat es keiner abonniert, ändert sich halt nur die Variable…
Michael

Vielen Dank, mach es dann über zwei Instanzen. Vielleicht wäre es eine Idee zukünftig zwei Variablen (send & receive) in der Instanz anzulegen …
Grüße, H-C