# MQTT Server How To (send & receive)

**URL:** <https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082>\
**Category:** Skripte, PHP, SQL (Anleitungen)\
**Created:** [6. Januar 2024 um 22:44 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082 "2024-01-06T22:44:36Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![hcp](https://community.symcon.de/letter_avatar_proxy/v4/letter/h/9de053/32.png) [@hcp](https://community.symcon.de/u/hcp)\
**Post date:** [6. Januar 2024 um 22:44 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082/1 "2024-01-06T22:44:36Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [7. Januar 2024 um 05:57 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082/2 "2024-01-07T05:57:58Z")

</div>

> [@hcp](#):
>
> Blöd nur, dass ich in diesem Script keinen Unterschied sehe ob das ein emfangener String ist oder ein per RequestAction gesendeter String.

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

---

<div class="post-metadata">

**Author:** ![hcp](https://community.symcon.de/letter_avatar_proxy/v4/letter/h/9de053/32.png) [@hcp](https://community.symcon.de/u/hcp)\
**Post date:** [7. Januar 2024 um 07:48 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082/3 "2024-01-07T07:48:06Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [7. Januar 2024 um 08:01 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082/4 "2024-01-07T08:01:34Z")

</div>

`/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

> [@hcp](#):
>
> Im Symcon-Script, welches durch eine Veränderung der Variable getriggert wird…

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

> [@hcp](#):
>
> , 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 kann nur bei der /set Variable passieren, die Variable `/Viessmann/fan` sollte immer der echte Zustand sein.  
Michael

---

<div class="post-metadata">

**Author:** ![hcp](https://community.symcon.de/letter_avatar_proxy/v4/letter/h/9de053/32.png) [@hcp](https://community.symcon.de/u/hcp)\
**Post date:** [7. Januar 2024 um 08:14 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082/5 "2024-01-07T08:14:52Z")

</div>

> [@Nall-chan](#):
>
> `/Viessmann/fan` oder `/Viessmann/fan/set`

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.

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [7. Januar 2024 um 08:43 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082/6 "2024-01-07T08:43:55Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![HarmonyFan](https://community.symcon.de/user_avatar/community.symcon.de/harmonyfan/32/66241_2.png) [@HarmonyFan](https://community.symcon.de/u/HarmonyFan)\
**Post date:** [7. Januar 2024 um 08:57 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082/7 "2024-01-07T08:57:44Z")

</div>

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

Ralf

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [7. Januar 2024 um 08:58 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082/8 "2024-01-07T08:58:57Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![hcp](https://community.symcon.de/letter_avatar_proxy/v4/letter/h/9de053/32.png) [@hcp](https://community.symcon.de/u/hcp)\
**Post date:** [7. Januar 2024 um 09:56 UTC](https://community.symcon.de/t/mqtt-server-how-to-send-receive/136082/9 "2024-01-07T09:56:01Z")

</div>

> [@Nall-chan](#):
>
> Viessmann/fan

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
