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

Hi sokkederheld,
habe gerade dein neues Test Skript 0.19 probiert und sieht schon mal sehr gut aus. Genauso hatte ich mir das vorgestellt, Super Arbeit, Danke dafür. Gehen da noch andere Werte zum anzeigen? IP Gateway etc.

Was mir auffällt, das bei stat 2x Power aufgeführt ist.

@sokkederheld - Ich bin begeistert ! Super Arbeit - vielen Dank
Bisher keine Probleme beobachtet.

So, wenn’s nun alles rund läuft und keine Major Bugs mehr da sind - sehr gut! Stellt sich natürlich allmählich die Frage, wie es weiter gehen soll. Das Skript dürfte so fast ein Jahr alt sein, da ich damit angefangen habe, kurz nachdem mein Sohn geboren wurde :slight_smile: .

Wenn es sich bei euch, die es zum Teil ja wenn ich richtig verstehe schon in selbstloser Aufopferung live einsetzen :wink: stabil läuft, dann könnte man es demnächst auch mal so benennen. Oder was meint ihr?

Featuremäßig kann das Skript mittlerweile ein vielfaches von dem (Feature Creep lässt grüßen…) was ich ursprünglich mal geplant hatte. Aber es hat sich ja gezeigt, dass es einfach viel praktischer ist für die Anwender, wenn so Kleinigkeiten wie das Aufdröseln von JSON-Daten mit an Bord sind - insofern, warum nicht! Dennoch glaube ich, mehr Features sollten es nicht werden, denn das Skript wird sonst allmählich viel zu komplex.

Was den Umbau in ein Modul betrifft, werde ich davon absehen, da es keine großen Vorteile bringt und ich die Design Guidelines eh nicht einhalten kann (Verschachtelungen unterhalb von Instanzen, Objekte werden per Namen referenziert usw.)

Also, wenn niemand ganz laut „HALT“ ruft, setze ich demnächst mal die Major Versionsnummer von 0 auf 1 hoch und nenne das ganze Stable. Dank euch, die es testen und mir Bugs melden bzw. gemeldet haben!

Kann dann ein Mod ggf. das „Beta“ aus dem Thread-Titel nehmen? Ich kann das glaube ich nicht selbst ändern. Sonst müsste ich einen neuen Thread machen, kann ich natürlich auch.

Moin sokkerheld,

also aus meiner Sicht absolut stabil und extrem brauchbar !

Nur eine Sache ist mir neulich mal wieder passiert:

In einem Testscript wollte ich einen Schaltbefehl testen und habe bei der Angabe des Topics am Ende aus versehen ein ‚/‘ zuviel eingegeben und Dein Script hat dann begonnen einen nicht endende Verschachtelung anzulegen bis SYMCON nicht mehr konnte.

Beispiel:

<?
	IPS_RunScriptEx(21467 /*[MQTT\MQTT Server 0.19 Core]*/, 
	array(
  		'TOPIC' => 'shellies/shelly1-12B91E/relay/0/command/',
  		'MESSAGE' => 'on'
		)
	);
?>

anstatt

<?
	IPS_RunScriptEx(21467 /*[MQTT\MQTT Server 0.19 Core]*/, 
	array(
  		'TOPIC' => 'shellies/shelly1-12B91E/relay/0/command',
  		'MESSAGE' => 'on'
		)
	);
?>

Ich musste einen Hard-Reset machen und manuell die Verschachtelung löschen, was mehrere Minuten dauerte.

Kannst Du Dir vorstellen, was da passiert? Oder ist nur meine ‚Blödheit‘ daran schuld?

Danke und Gruß
Dieter

Hallo @babba, danke für die Meldung, gucke ich mir Anfang der Woche an!

So, die 0.20 ist da. Dort sollte der Fehler mit dem Slash hinter dem Topicnamen behoben sein.

Hi sokkederheld,

wie soll ich am besten Updaten?
Einfach den Inhalt von „MQTT Server 0.19 Core“ ersetzen?

Gruß

EDIT: Im Scrip steht doch alles :eek:

Ja, genau so sollte es gehen :slight_smile:

Funktioniert tadellos, vielen Dank dafür!

Ich bin auch mehr als begeistert :slight_smile:
Das tolle script hat so viele Türen bei mir aufgestoßen !

1000 Dank dafür ! :slight_smile:

Anfang nächstes Jahr stelle ich dann mal meine Hardware vor.

Diverse 8-Fach Relais Aktoren lösen gerade Homematic im großen Stil ab.

Gerade ging mein Prototyp meines 16-Tasters mit 16x LED Ring ins rennen.

16 „Sachen“ (relais,scenen) schaltbar, wobei der blaue led ring um den Taster erst dann leuchtet, wenn das relais oder die scene auch wirklich geschaltet hat…also volles feedback. Auch wenn man zum Beispiel eine Lampe per Alexa oder anderen HM Schalter schaltet, geht der blaue led ring auch an oder aus.

Sehr feine Sache :slight_smile:
Danke nochmals für das tolle script !
Sehr gelungene Arbeit.

Liebe Grüße
Sascha

Tausend Dank, Sascha, für die sehr motivierenden Worte!

Ich freue mich außerordentlich, dass mein Skript, das ich ursprünglich ja halb aus Trotz angefangen hatte (weil Symcon das Thema MQTT nicht so wichtig fand) nun bei einigen erfolgreich im Produktiveinsatz ist!

Ich bin selbst in vielen Punkten auf MQTT umgestiegen. Mein Größtes Unterfangen in die Richtung wird meine Gartenbewässerung nächsten Sommer (inkl. Tanksteuerung für die Sandkisten-Schwengelpumpe für unseren Sohn :smiley: )

Ja, so macht es Freude, dabei zu bleiben! :slight_smile:

@sokkederheld

Auch ich bin Dir sehr dankbar, dass Du trotz der z.T. vernichtender Kommentare zum Thema MQTT dran geblieben bist. Auch ich hatte anfänglich arge Bedenken, als ein wesentlich jüngeres Mitglied im Makerspace Wiesbaden die Nutzung von MQTT vorgeschlagen hatte. Irgendwie habe ich dann aber Dein Thema gefunden, mich ein wenig eingelesen und bin heute begeisteter Nutzer Deines Skriptes sowohl zu Hause, als auch im makerspace-wi.de und alles läuft sehr zuverlässig.

Danke, Danke, Danke - Dir und Deiner Familie ein besinnliches Weihnachtsfest.

Gruß aus Wiesbaden
Dieter

Danke auch dir, Dieter, für deine Worte - und wo wir schon bei Danksagungen sind, nochmal herzlichen Dank an alle, die getestet und berichtet haben! Ohne derartiges Feedback wird eine Software nie irgendwo stabil laufen außer (bestenfalls) bei einem selbst :slight_smile:

@Dieter / OT: Das ist ja ein recht amtlich ausgestatteter Space, den ihr da habt! :cool:

Alles gute aus Hamburg

Hallo,

ich habe mich jetzt einige Tage mit deinem MQTT Skript beschäftigt und muss sagen, dass ich total begeistert bin. Es war zwar nicht ganz einfach, aber inzwischen habe ich ESPEasy erfolgreich per MQTT mithilfe deines Skriptes an IPSymcon angebunden. Es soweit hinzubekommen, dass auch das Setzen der GPIO-Pins funktioniert, war zwar etwas schwierig, aber es hat nach vielen Versuchen dann doch geklappt.

Für den Fall, dass auch mal jemand ESPEasy und das Skript hier nutzen möchte, hier ein paar Tipps zur Konfiguration des ESPEasy, damit ihr hoffentlich nicht ganz so lange braucht wie ich:

[ol]
[li]In den Main Settings einen eindeutigen Unit-Name festlegen, Unit-Number auf 0 und kein Häkchen bei „Append Unit-Number to hostname“[/li][li]Als Controller „OpenHAB MQTT“ auswählen, IP-Adresse von IPSymcon eintragen und bei Controller Subscribe und Controller Publish die führenden Backslashes entfernen. Also „%sysname%/#“ bzw. „%sysname%/%tskname%/%valname%“ eintragen[/li]Erstmal den Haken bei „Enabled“ noch nicht setzen, dies kommt erst ganz zum Schluss.
[li] Falls ein GPIO als Ausgang genutzt werden soll, muss ein Device „switch input“ angelegt werden - klingt unlogisch, ist aber so ;-)[/li][ul]
[li]Unter Sensor / GPIO wird der gewünschte GPIO ausgewählt (also z. B. GPIO-13/D7)[/li][li]Damit das Device später sofort im IPSymcon als Variable erscheint, den Haken bei „Send Boot state“ setzen. [/li]Korrektur: Wenn der Hake bei „Send Boot State“ gesetzt ist, kann es anscheinend zu einer Endlosschleife kommen - also doch nicht setzen! Außerdem bei „Data Acquisition“ den Haken beim vorhin eingerichteten Controller setzen.
[li]Wichtig: Als Name muss „GPIO“ eingetragen werden, unter Valus muss als Name die Nummer des GPIO eingetragen werden, also z. B. „13“, wenn der GPIO-13 geschaltet werden soll.[/li][li]Wenn weitere Switche angelegt werden, müssen auch die als Namen „GPIO“ haben - das bringt zwar eine rote Warnmeldung, ist aber notwendig, damit auch per MQTT der GPIO gesetzt werden kann[/li][/ul]
[li]Unter Tools / Advanced muss der Haken bei „MQTT Retain Msg“ gesetzt werden, ansonsten werden keine Variablen, sondern Skripte angelegt. Außerdem habe ich den Haken bei MQTT use unit name as ClientID gesetzt, da ich lieber mit dem Namen als mit der mac-Adresse arbeiten möchte.[/li][li]Ganz zum Schluss den Haken beim Controller „OpenHAB MQTT“ / „Enabled“ setzen, daraufhin schickt das ESPEasy-Modul alle Infos zum MQTT-Modul und die Baumstruktur und Variablen werden angelegt.[/li][/ol]

Im IPSymcon darf ich jetzt nicht die Topics und Variablen umbenennen, da sonst die Verknüpfung zum ESPEasy nicht mehr funktioniert. Damit das trotzdem einigermaßen lesbar bleibt, füge ich in der Beschreibung der Variablen jeweils einen sinnvollen Namen hinzu und blende die Info-Spalte ein.

Nun hat man noch das Problem, dass ESPEasy nicht mit booleschen Variablen für die GPIOs arbeitet, sondern mit „0“ bzw. „1“. Das ist für die Visualisierung natürlich ziemlich unpraktisch. Ich habe daher ein eigenes Profil ESPEasySwitch angelegt, in dem ich für den Wert 0 den Text „Aus“ und für den Wert 1 den Text „An“ und die grüne Farbe festgelegt habe.
Dann geht man auf die einzelnen vom Skript angelegten Variablen, wählt als eigenes Profil jeweils „ESPEasySwitch“ aus und klickt neben „Eigene Aktion“ auf „Erstellen“, damit der Button auch bedienbar wird, wenn man ihn in der Visualisierung verwendet.

Hier nun meine eigentlichen Fragen:

Kann ich in der Benutzerkonfiguration einstellen, dass für alle Variablen, die unter einem Topic namens „GPIO“ angelegt werden, automatisch dieses Variablenprofil „ESPEasySwitch“ verwendet wird?

Und kann ich automatisch das Default-Aktionsskript mit dem Inhalt

SetValue($_IPS[‚VARIABLE‘], $_IPS[‚VALUE‘]);

für die neu erstellten Variablen hinzufügen lassen (und natürlich als eigene Aktion in der Variable hinterlegen)?

Hallo,

ich hatte heute das Phänomen, dass ich nach einem Stromausfall nach Wiederherstellung der Spannungsversorgung plötzlich eine heftig blitzende Leuchte hatte. Sie schaltete sich 5x pro Sekunde ein und wieder aus.
Ich konnte mich zum Glück noch mit dem ESP8266 verbinden, MQTT deaktivieren und alles war ruhig. Nachdem ich MQTT dann wieder aktiviert hatte, war alles wieder ganz normal.

Ich habe dann versucht, den Fehler zu reproduzieren und bin auf folgendes gekommen:

Wenn der ESP8266 ausgeschaltet ist (z. B. wegen Stromausfall) und dann die im IP-Symcon für einen GPIO zuständige Variable auf 1 gesetzt wird (z. B. weil jemand das Licht einschalten will oder die Zeitschaltuhr das Licht aktivieren will) und dann der ESP8266 neu gestartet wird, startet der vermutlich mit dem GPIO auf 0/aus. Nun sendet er vermutlich einerseits die Info, dass der GPIO auf 0 steht und bekommt fast zeitgleich per MQTT Subscription die Aufforderung den GPIO auf 1 zu setzen und schaltet sich ein. Der MQTT Broker hat noch die Info, dass der GPIO auf 0 steht, setzt die Variable entsprechend und das Skript wird aufgrund der Variablenänderung erneut gestartet. Der ESP8266 bekommt sendet nun die Info, dass der GPIO auf 1 steht und bekommt per MQTT Subscription die Aufforderung, den GPIO auf 0 zu stellen und das Spiel wiederholt sich dann endlos mit der Geschwindigkeit die der ESP8266 und das MQTT Skript hergeben.

Ist das ein Bug? Gibt es dafür einen Workaround?
Oder sollte man GPIOs besser nicht mit Variablen koppeln und auf das Retain Flag verzichten und stattdessen Skripte nutzen?

Ergänzung: Ich habe jetzt den Parameter „Send boot state“ im ESPEasy für den GPIO deaktiviert. Somit scheint es nicht mehr zu dieser Endlosschleife zu kommen. Ist vermutlich auch besser, den boot-state nicht zu setzen, dann wird nach einem Stromausfall der ursprüngliche Zustand lt. IPSymcon wiederhergestellt. Aber ich fürchte, dass das Problem auch auftreten könnte, wenn im laufenden Betrieb Verbindungsprobleme auftreten und der Status dann mal wieder aktualisiert wird?

Hallo ihr MQTT-Jünger :wink:

vorhin bekam ich einen Anruf aus unserem Verein, dass es ‚saukalt‘ sei. Es stellte sich heraus, dass alle Clients seit heute morgen 04:30 Uhr ‚offline‘ waren - mit anderen Worten der MQTT-Broker schien keine Verbindung mehr zu unseren Modulen zu haben. Über unser WLAN waren jedoch alle Tasmota Module erreichbar.
In der Eile dann schnell mal den SYMCON Dienst angehalten und wieder gestartet und schon lief alles wieder korrekt.

Hat von Euch jemand eine Idee,was dazu führen kann?

Beim ‚rumschauen‘ ist mir dann noch folgendes aufgefallen. In den Meldungen erscheint recht oft folgendes

Screenshot 2019-01-19 15.57.18.png

Dabei muss es sich um den MQTT-Broker Port handeln - ist das ‚normal‘?

Euch allen ein schönes Wochenende und Gruß aus Wiesbaden
Dieter

Hallo zusammen,

ich nutze dieses Script seit kurzem und bis auf eine kleine Ausnahme macht es auch das was es soll :slight_smile:

Ich nutze zigbee2mqtt als Gateway für meine Zigbee devices. Jetzt kann man dort sich ein „network map“ über seine devices generieren lassen. Leider kommt der Payload nicht an. Im Meldungsfenster erhalte ich das:


20.01.2019, 14:47:49 | ScriptEngine | Result for Script 47468
Unpopulated MQTT topic handler script called.
Array
(
    [THREAD] => 4
    [SELF] => 47468
    [CLIENT] => mqttjs_d25ae96b
    [SENDER] => MQTT
    [RETAIN] => 
    [MESSAGE] => digraph G {node[shape=record];  "0x00124b001bd11895" [label="{0x00124b001bd11895|Coordinator|No model information available|online}"];  "0x00124b001936645e" [label="{router|Router|Custom devices (DiY) [CC2530 router](http://ptvo.info/cc2530-based-zigbee-coordinator-and-router-112/) (CC2530.ROUTER)|online}"];  "0x00158d0001e83dfb" [label="{button_linus|EndDevice|Xiaomi Aqara wireless switch (WXKG11LM)|online}"];  "0x00158d0002ec0f45" [label="{contact_briefkasten|EndDevice|Xiaomi Aqara door & window contact sensor (MCCGQ11LM)|online}"];  "0x00158d00025847ee" [label="{pir_hwr|EndDevice|Xiaomi Aqara human body movement and illuminance sensor (RTCGQ11LM)|online}"];  "0x8418260000060030" [label="{0x8418260000060030|Router|OSRAM LIGHTIFY Surface Light TW (4052899926158)|offline}"];  "0x00158d0002059f78" [label="{button_schlafzimmer|EndDevice|Xiaomi Aqara wireless switch (WXKG11LM)|online}"];  "0x00158d0002e9e557" [label="{contact_speicher|EndDevice|Xiaomi Aqara door & window contact sensor (MCCGQ11LM)|online}"];  "0x00158d00025d8b4a" [label="{sensor_hwr|EndDevice|Xiaomi Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)|online}"];  "0x00158d00025ee951" [label="{sensor_heizraum|EndDevice|Xiaomi Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)|online}"];  "0x00158d00027d772d" [label="{cube|EndDevice|Xiaomi Mi/Aqara smart home cube (MFKZQ01LM)|online}"];}
    [TOPIC] => zigbee2mqtt/bridge/networkmap/graphviz
)


Die Message stimmt, aber es wird im Topic Root keine Variable mit diesem String angelegt. Hat hier jemand einen Tip?

Gruß Kay

Hallo,
zuerst mal vielen Dank für dieses Super Skript, funktioniert bei mir wirklich gut.

Ich bin absoluter Neueinsteiger bei Mqtt, aber mit Hilfe des Skriptes habe ich in kürzester Zeit alles was ich wollte, in IPS rein bekommen.
Ich verwende aktuell einen Arduino Uno mit Ethernet Shield und 2xESP8266.
Aktuell in der Testphase.
Geplant ist es mehrere DHT22 und PIR Bewegungsmelder zu verteilen und an IPS anzubinden.

Nachdem ich dieses Script von Dir nun einsetze,
bin auch ich verwundert weshalb Mqtt noch nicht nativ von IPS unterstützt wird.

Wenn das ganze mit nur einem Script von Dir funktioniert (das soll nicht die Arbeit die dahinter steckt abwerten),
sollte es für Symcon doch relativ einfach möglich sein Mqtt zu integrieren.

Ich hoffe, dass mit 5.1 vielleicht doch noch eine Überraschung mit an Bord ist.

Gruß
Giuseppe

Meine „Breakout“ Platinen (Eigenes Design)
kamen gestern an :slight_smile:

ESP Easy mit MQTT Protokoll
Die Platinen können über 2 Port-Extender 32 IOs entweder als Ausgang (über ULN2803) oder Eingang (wahlweise 10k Pulldown per Jumper) betrieben werden. Hierbei kann JEDER IO seperat konfiguriert werden.

Ausgänge für Sensoren sind natürlich auch zu Hauf verfügbar :slight_smile:

Falls Interesse besteht, PN an mich.

Und nochmals vielen Dank für diese Tolle Script :slight_smile:

LG
Sascha

Hallo Sascha,
zeig doch mal, Größe und Konzept interessieren mich auf jeden Fall, obwohl ich eher UDP freundlich bin.

Kann man(n) auch auf 64 gehen?
Gruß Helmut