MQTT Broker in IP-Symcon (Beta..!)

Hi,

ich hatte noch die erste 0.15

habe nun das Update drauf gemacht 0.17.

Ich werde es beobachten und mich dann noch mal melden sollte es wieder auftrete.

Vielen Dank für deine Arbeit und dem script.

Danke

Hallo Leute,

bin neuling was MQTT angeht.

Habe ein ESP8266 mit ESPEasy Firmware. Im IPS MQTT Script ausgeführt und bekomme auch was :slight_smile:

ESPEasy habe ich ein Device

Wie bekomme ich den Wert in IPS?

Gruß

Wie bekomme ich den Wert in IPS?

Wieder hängt dies sehr davon ab, was die betreffende Firmware wohin publiziert. Bislang offenbar nur das „LWT“, was wohl für Last Will Topic steht und in diesem Fall ein Status ist, ob das Gerät online ist.

Sende doch mal einen Schaltbefehl und behalte die Topicstruktur im Auge, sowie das Message-Fenster.

Hallo,
Danke erstmal für das Skript. Das Skript habe ich einmal ausgeführt. Ich habe hier einen Sonoff mit Tasmota Firmware und drei Temperaturfühler dran angeschlossen. Wie bekomme ich jetzt die Temp Werte in IPS angezeigt?

Hat das nicht jemand schon mal hinbekommen mit der Tasmota? Mein Problem ist, dass ich diese Firmware noch nicht eingesetzt habe und das Verhalten daher nicht kenne. Der MQTT-Server wird die Werte wohl bekommen und verarbeiten, aber wie/wo, das hängt halt davon ab, was das Gerät wie/wo sendet. Vielleicht kann da ja mal jemand was zu sagen, der die Tasmota bereits erfolgreich mit meinem Skript einsetzt.

An alle:
Ansonsten gibt es später noch ein wichtiges Update, in dem ich einen ausgesprochen nervigen Fehler behoben habe, der dazu führen konnte, dass endlos Session-Variablen erstellt wurden. Es hing damit zusammen, dass ein Client eine Verbindung aufgebaut hat, bevor die alte als abgelaufen galt. Das war leider nicht ganz einfach zu lokalisieren, denn ich musste darauf warten, dass es bei mir mal auftritt :slight_smile:

@sokkederheld
gut zu hören, dass Du diesen nervigen Fehler ausgemerzt hast - habe auch eine Weile damit kämpfen müssen.
Zwischenzeitlich liebe ich MQTT - in unserem Verein kommt es zunehmend in Einsatz

@Stefan71
JA, ich wir betreiben ähnliches im Verein und ich muss später mal zusammensuchen was ich da programmiert habe.

Kannst Du denn in der symcon konsole die von den tasmota modulen versendeten Nachrichten in ‚Meldungen‘ sehen?

bis später
Dieter

Hallo Dieter,
wäre klasse wenn du da was hättest. Folgendes bekomme ich angezeigt:

Leg mal in dem Ordner „tele/sonoff“ eine Stringvariable an mit dem Namen *SENSOR .
Wichtig ist das * in dem Namen.
Da sollten deine Werte dann ankommen.

cu.
uriel2006

edit:

Schatten-Variablen - um die jeweils letzte Nachricht eines bestimmten Topics, selbst wenn sie ohne Retain-Flag publiziert wurde, in IP-Symcon als Variable verfügbar zu machen, kann an entsprechender Stelle eine so genannte Schatten-Variable erstellt werden. Diese unterscheidet sich von einer herkömlichen Topic-Variable durch das voran gestellte Sternchen (*). Schatten-Variablen existieren nur zur Verarbeitung in IP-Symcon und sind für MQTT-Clients nicht sichtbar.

edit 2:
in der Konsole von deinem Tasmotagerät kannst du auch das Retain flag setzen.
der befehl ist „SensorRetain 1“

Viele Wege führen ja nach Rom - was uriel2006 da zeigt ist auch mir neu, muss ich mal probieren.

Ich mache es ein wenig anders - dazu muss man wissen, dass unter ‚MQTT Topip Root‘ eine Menge ‚Topic Handler‘ angelegt werden, die für jede Message Art zunächst mal nur die jeweilige Message in das Log schreibt und damit auch auf der Konsole unter Meldungen sichtbar sind.

Schau Dir mal unter Meldungen /tele/sonoff/Sensor an da steht alles in json-Format drin
bei mir z.B.:

29.11.2018 09:51:57 | ScriptEngine | Result for Script 47170
Unpopulated MQTT topic handler script called.
Array
(
[THREAD] => 6
[SELF] => 47170
[CLIENT] => DVES_523466
[RETAIN] =>
[TOPIC] => tele/heizung_1/SENSOR
[MESSAGE] => {„Time“:„2018-11-29T10:51:57“,„AM2301“:{„Temperature“:15.3,„Humidity“:37.4},„TempUnit“:„C“}
[SENDER] => MQTT
)

Für die Werte habe ich Variablen angelegt - in meinem Fall Temp 1 und Hum 1

Im script /tele/sonoff/Sensor habe ich folgendes ergänzt oder ersetzt:


if($_IPS["SENDER"] == "MQTT") {
$result = json_decode($_IPS["MESSAGE"],true);
SetValueFloat(32467 /*[Heizung\Kreis 1\Temp 1]*/, $result['AM2301']['Temperature']);
SetValueFloat(22144 /*[Heizung\Kreis 1\Hum 1]*/, $result['AM2301']['Humidity']);
}

Das ist alles - eigentlich ganz einfach wenn man weiß wie :wink:

Habe ich so gemacht, nach einiger Zeit kommt dann eine weitere Variable „Sensor“ mit den Werten. Müsste dann nur noch die Werte von den drei Sensoren trennen.

@babba:

Werde deine Möglichkeit auch noch testen.

Edit: das kommt bei mir raus:

29.11.2018 12:33:59 | ScriptEngine | Ergebnis für Skript 31794
Unpopulated MQTT topic handler script called.
Array
(
    [SENDER] => MQTT
    [MESSAGE] => {"Time":"2018-11-29T12:33:58","DS18x20":{"DS1":{"Type":"DS18B20","Address":"2870B1631B130170","Temperature":21.8},"DS2":{"Type":"DS18B20","Address":"28319C861E1301DB","Temperature":21.6},"DS3":{"Type":"DS18B20","Address":"280F18691B130117","Temperature":21.6}},"TempUnit":"C"}
    [TOPIC] => tele/sonoff/SENSOR
    [RETAIN] => 1
    [CLIENT] => DVES_029F7C
    [THREAD] => 6
    [SELF] => 31794
)

Muss ich dann die Werte trennen nach DS1…oder eher die Adresse. Habe gerade mit DS1… probiert da bekomme ich nur einen Wert mit 0.

Danke euch für die Hilfe.

Habe mir das mal alles angeschaut und es ist eigentlich die gleiche Methode nur auf Umwegen.

Mit meinem kleien Script wird der String (ein json-Array) direkt geholt (ohne Umweg über ‚*SENSOR‘) und dann den vorher erstellten Variablen zugeordnet.

Gerade schnell mal getestet - geht!

sollte so aussehen bei Dir:

if($_IPS[„SENDER“] == „MQTT“) {
$result = json_decode($_IPS[„MESSAGE“],true);
SetValueFloat(deine Variable 1, $result[‚DS18x20‘][‚DS1‘][‚Temperature‘]);
SetValueFloat(deine Variable 2, $result[‚DS18x20‘][‚DS2‘][‚Temperature‘]);
SetValueFloat(deine Variable 3, $result[‚DS18x20‘][‚DS3‘][‚Temperature‘]);
}

Bin jetzt auch nicht so der json Guru - aber ich habe das experimentell und mit Google herausbekommen.

An alle Helfenden: Danke :slight_smile:
An alle, die auf den Bugfix warten: Morgen! Kind kränkelt gerade und braucht (noch) etwas mehr Aufmerksamkeit gerade) :o

Läuft…Danke. Was mir jetzt noch nicht so gefällt, die Aktualisierung der Werte, das die schneller aktualisiert werden. Das hinkt ziemlich hinterher. Muss dann wohl noch ein Ereignis hinterlegen. Wie würdest du das machen?

So sieht es jetzt bei mir aus:

Muss ich alle Dateien behalten, die mir das Skript angelegt hat oder kann ich davon auch einiges löschen, der Übersicht wegen.

Hm - die Messwerte werden ja von Deinem ‚tasmotosierten‘ sonoff modul gemäss MQTT ‚published‘ und es ist das Modul was dafür zuständig ist.
D.h. Du müsstest mal schauen, ob man in der Tasmota Konsole was einstellen kann - es gibt ja gefühlt hunderte von Kontrollbefehlen dort.

Das was unter MQTT angelegt wird solltest Du nicht löschen, denn es wird dann von dem MQTT-Broker wieder angelegt.

Schau ich mir mal morgen an. Vielleicht gibt es ja noch einen Tasmota/Sonoff Spezialist der eine Einstellung kennt, die ich ausführen kann.:smiley:

Wie würde den das bei Power aussehen, um den Zustand anzuzeigen?

Was mich auch noch interessieren würde, hast du auch noch was in den anderen Skripten hinterlegt, wie Info 1 - 3 etc.? Wenn ich das richtig sehe könnte man ja auch noch andere Daten abfragen, wie SSID usw.

Moin Stefan,

nun - die ‚tasmotisierten‘ Sonoff Module sind ja extrem geschwätzig und ‚publishen‘ so ziemlich alles was verfügbar ist.
Was genau, kannst Du Dir ja in den Meldungen (symcon Konsole) anschauen. Wähle z.B. dort einen Report aus und drücke die Space Taste, dann siehst Du die komplette Information.

Wir haben im Verein (makerspace-wi.de) momentan 4 ‚tasmotisierte‘ Sonoff Module am laufen - aber wir werten nur die Sensorsignale und den Schaltzustand aus - in erster Linie für die Heizkörpersteuerung und Beleuchtung im Flurbereich und Treppenhaus.

Gruß
Dieter

So, das versprochene Update ist endlich da. Behoben wurde der Fehler, dass bei mehreren sich „überschneidenden“ (in kurzem zeitlichen Abstand nacheinander erstellten) Verbindungen mit gleicher Client-ID eine große Anzahl nutzloser Variablen in der Sessions-Kategorie angelegt wurde. Die aktuelle Version behebt diesen Fehler und beseitigt auch (in 100er Schritten, um keine zu großen „Deltas“ im Updatepaket zu erzeugen) die Überbleibsel, sprich: die fehlerhaft erstellten Variablen. Sonst kann das sehr mühselig sein.

Damit ist ein bekannter Major Bug behoben und das Skript hoffentlich noch mal deutlich stabiler geworden. Vielen Dank an alle, die Fehler gemeldet und damit beim Verbessern geholfen haben. Außerdem Danke an babba, der in Sachen Tasmota einige wertvolle Hinweise gegeben hat!

Diese will ich nicht einfach offiziell freigeben, weil ich sie nur „abstrakt“ testen konnte.

Neues Feature ist, dass bei Topics, unter denen eine Message mit JSON-Daten empfangen wird, automatisch diese Daten deserialisiert werden und als Dummy-Instanz mit entsprechenden Unterobjekten dargestellt. Dies sollte vor allem für User von Tasmota und ähnlichen Firmwares interessant sein. Die Daten erscheinen dann wie erwartet direkt in der Struktur, anstatt dass man erst ein Skript schreiben muss, um sie auszuwerten.

Aktuell ist das Verhalten per Default aktiviert und lässt sich in der User Config abstellen. Feedback unbedingt erwünscht!

mqttserver_v0_19_test.php.zip (23.7 KB)