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

@sokkederheld

nachdem ich mich ein wenig in MQTT eingearbeitet habe, wurde der MQTT Broker von Dir bei uns im Verein eingesetzt mit momentan nur 2 Sensoren.

Es funktioniert auch alles recht gut - nur heute Morgen entdeckte ich folgende Fehlermeldungen:

24.08.2018 09:45:00 | ScriptEngine | Result for Event 16861
<br />
<b>Fatal error</b>: Allowed memory size of 33554432 bytes exhausted (tried to allocate 47 bytes) in <b>/var/lib/symcon/scripts/18374.ips.php</b> on line <b>940</b><br />

Es handelt sich dabei um den MQTT Broker 0.15 Core und das auslösende Element ist das Event: Update Variable Events (alle 15 Minuten)

Hast Du einen Tipp für mich, was da evtl. passiert?

Ich habe leider immer wieder das Problem, dass der Buffer voll läuft:

01.09.2018 11:22:08*| Register Variable*| Buffer is >8kb

Das kommt eventuell durch extrem viele Meldungen vom Regensensor, der zählt 0,001 mm und sende dadurch sehr viele Messages.

Und aktuell auch gerade eine Fehlermeldung, die aber vielleicht ein Folgefehler ist:

01.09.2018 11:22:08*| Register Variable*| <br />
<b>Warning</b>:  Illegal string offset 'qos' in <b>/var/lib/symcon/scripts/22441.ips.php</b> on line <b>2320</b><br />

Neustart von IPS hilft natürlich, ist aber auf Dauer keine Lösung.

Ich bin gerade mal wieder dabei, an dem Broker zu arbeiten und kann hoffentlich einige Fehler noch finden und beheben. Leider ist das Debugging in manchen Fällen nicht ganz einfach, da viele Fehler nur nach längerer Zeit und unter unklaren Bedingungen aufzutreten scheinen. Es wird aber jedenfalls bald mal wieder ein Update geben.

Den Fehler, dass der Buffer voll läuft, habe ich beheben können.

[ul]
[li]Fehler, der zum Vollaufen des RegVar-Puffers und damit zum Speichermangel führte, behoben
[/li][li]Fehler behoben, dass Float-Zahlen ab IP-Symcon 5.0 mit Komma statt Punkt formatiert wurden
[/li][/ul]

Vielen Dank für deine Arbeit,

ich bin ab jetzt auch dabei :slight_smile:

Ich benutze ESP-Easy Mega nodes.

Darin habe ich jetzt mal das protokoll „Domoticz MQTT“ eingestellt.

Habe ich das richtig verstanden, das die Sensoren meiner nodes als variablen in ips erstellt werden ?
Da tut sich bei mir erst mal nichts.

Die Registervariable wird aber fleißig ausgeführt, und mein Test Node wurde wohl auch erkannt.
Nun fehlen eigentlich nur noch die Values.
Da ich aber brandneu in dem Thema bin, befürchte ich, der Fehler liegt bei mir.

Liebe Grüße
Sascha

Anbei mal ein Screenshot:

Entwarnung,

ich habe statt dem Domoticz MQTT mal den OpenHUB MQTT Controller in meinen Nodes eingestellt.

Und siehe da, man bekommt die Werte quasi vor die Füße geworfen :slight_smile:

Liebe Grüße
Sascha

So, nach einem tag „spielen“ jetzt doch eine Frage:

Ist es richtig, das nur ein Script pro Sensorwert erstellt wird, in dem ich dann noch meine Variable wegschreiben muss.

LG
Sascha

Ich bin mir leider nicht ganz sicher, was diese Einstellung bewirkt - das Protokoll ist ja MQTT. Eventuell geht es um die Benennung der Topics? :confused:

Das kommt ganz darauf an, was die Sensoren wie publishen. Wenn sie mit retain-Flag publishen wird daraus eine Variable, andernfalls muss die Message durch ein Handler-Skript verarbeitet werden. (Siehe Anleitung im ersten Post)

Also pro Topic wird ein Skript erstellt (bzw. eine Variable angelegt, je nachdem ob mit retain-Flag oder ohne!). In dem Skript kannst du den Wert verarbeiten.

Vielen Dank für die Antwort.

wie sieht denn so ein retain flag aus ?
eventuell kann ich in meiner Hardware (ESPEasy-Mega auf Lolin mcuboard V3) das noch beeinflussen.

Liebe Grüße
Sascha

Ich habs :slight_smile: Da gab es eine Checkbox in meinem Webinterface meiner Hardware, und ich konnte da „Retain Message“ aktivieren :slight_smile:

Jetzt bleibt nur noch eine kleine frage (für heute :)):

Wenn ich ein Value 24.0 bekomme, interpretiert das dein Script als integer und schreibt 24.

Kann ich das beeinflussen, das auch so ein Wert als float variable erstellt wird ?

LG
Sascha

Ich kann mich jetzt nicht auf die Schnelle in diese Firmware reinlesen die du da benutzt. Letztlich ist das Retain-Flag Bestandteil des MQTT-Protkolls und bestimmt, ob eine Nachricht nur für den Moment gültig ist (retain=false) oder vom MQTT-Broker gespeichert werden soll (true). Ob du das in deiner Firmware irgendwo direkt konfigurieren kannst weiß ich nicht.

Letztlich entspricht eine MQTT-Nachricht, die gespeichert werden soll, am ehesten einer Variablen in IPS. Eine Nachricht ohne gesetztes Retain-Flag (also false) wird stattdessen defaultmäßig nicht als Variable angelegt, sondern es wird nur ein Handlerskript erzeugt, um die Nachricht unter dem entsprechenden Topic zu verarbeiten.

Du kannst aber an dem Ort eine sog. Schatten-Variable (siehe erster Post, Ctrl+F) anlegen; diese übernimmt dann automatisch den letzten empfangenen Nachrichteninhalt unabhängig vom Retain-Flag.

Oder du behandelst die Nachricht eben per Skript, was auch immer für dich besser funktioniert in der Situation.

Danke für die Antwort,

es geht soweit alles, ich habe das mit der retain flag hinbekommen.

Es ging jetzt nur darum, ob ich unabhängig was für ein Wert von deinem script interpretiert wird, einen Variablentyp forcieren kann ?

Also angenommen, es kommt ein integer Wert rein, ob ich dann auch irgendwo konfigurieren kann, das dein script eine float variable erstellt.

Liebe Grüße
Sascha

Du kannst die Variable dort ja einfach händisch als Float erstellen, dann ist und bleibt sie eine Float :wink:

Es kommt demnächst noch mal ein Update, da mir einige Fehler aufgefallen sind bei der Behandlung von Datentypen. Unter anderem wurden Floats nicht richtig erkannt, wenn der empfangene Wert keine Nachkommastelle hatte (solange ein Punkt als Dezimaltrennzeichen im Wert ist soll er als Float erkannt werden). Und bei Bool-Variablen hat er beim publishing „1“ und „“ statt „true“ und „false“ verbreitet.

Ich habe seit kurzem eine Fehlermeldung:

12.10.2018 10:10:22 | Register Variable | <br />
<b>Warning</b>: Illegal string offset ‚will_qos‘ in <b>/var/lib/symcon/scripts/22441.ips.php</b> on line <b>2385</b><br />

Das kommt von einem WEMOS D1 mit aktueller Tasmota Firmware.

Hallo zusammen,

Ich wollte nur mal kurz ein Feedback abgeben.

Der MQTT Broker läuft nun seit 3 Wochen ohne jegliches Problem auf meinem System.
Mit momentan 5 Nodes (Tendenz steigend :))

verbaut sind Lora Nodemcu V3 mit Temperatursensoren, 16-fach Porterweiterungen und Relais (Einfach, Vierfach, Achtfach) , die auch bei erfolgreichen empfangen des Befehls, eine Rückmeldung geben.
Als Betriebssystem für die Nodes benutze ich „ESPEasy MEGA“.
Für alle, die das interessiert, ist es mal einen Blick wert !

DIY Achtfach Aktor mit Rückmeldung für unter 16 euro !
Tut mir leid Homematic, aber ihr seid erstmal raus aus meinem „Aktor Bedarf“ :slight_smile:

Vielen Dank für dieses wunderbare Script !

Liebe Grüße
Sascha

Schön, das freut mich… und das versprochene Update kommt auch bald! Aktuell hält mich familiäres ein wenig auf Trab… :o

Hallo,

ich habe ein Problem.

Bei mir läuft immer mal wieder das MQTT-Sessions über siehe Bild.

wie kann ich das vermeiden? habe teilweise über 200 solche Strings.

@Padi2055: Das hatte ich in alten Versionen auch mal, mit welcher Version arbeitest du? Sonst probiere bitte mal die neuste (0.17 aktuell). Und bitte diese ganzen Session-Variablen vorher löschen!

Falls es weiterhin auftritt, müsstest du mal gucken, ob es im Log Meldungen dazu gibt, die evtl. weitere Hinweise geben können.

@Alle: Die 0.17er ist endlich raus mit zahlreichen Bugfixes :slight_smile: