NEWS
mqtt Adapter 4.0.7 Hohe CPU Load
-
@mickym Verstehe! Und, Asche auf mein Haupt, dass ich den mqtt-Adapter verdächtigt habe! Hab einen Slash ans Ende gemacht … Deine Lösung mach ich die Tage … Man muss ja leider immer nebenbei auch noch was arbeiten
-
@mickym hach … die Load ist wieder bei 0.14 … was ein Glück!
-
So, moin. Hab gerade mal alles gelesen ... und alles ist gesagt dank @mickym
-
Hallo zusammen. Also ich habe seit 3 Tagen nach Update auf Adapter-Version 4.07 (MQTT Broker/Client) das gleiche Problem.
Konfiguration:
1x Raspberry-Pi (Dietpi) mit Node-Red und MQTT-Server
2x IOBroker auf 2 unterschiedlichen Proxmox-Systemen (Adapter im Client-Modus) (Proxmox-Systeme 2x Intel-NUC)Konfiguration lief seit ca. 2 Jahren ohne Probleme. Seit 3 Tagen steigt nun zu unterschiedlichen Zeiten die Gesamtbelastung beider Proxmox-System bis Anschlag an und geht von allein nicht mehr runter. Das Stoppen und erneute Starten der beiden Adapter in den IOBrokern beendet den "Spuk" und alles ist wieder normal. Auf beiden System sind zusätzliche MQTT-Adapter sowohl im Server- als auch im Clientmodus aktiv. Diese verursachen die Belastung nicht.
Den Raspberry-Pi und seine Systeme sind bereits neugestartet und auf aktuellem Software-Stand.
Ich werde jetzt einen der beiden Server mal auf die biss dato laufende Version des MQTT-Adapters downgraden. Vielleicht hilft das ja erstmal.Bin für weitere Ideen/Vorschläge sehr dankbar.
-
@sro769 sagte in mqtt Adapter 4.0.7 Hohe CPU Load:
Bin für weitere Ideen/Vorschläge sehr dankbar.
Hast du die Konfiguration verglichen mit dem was hier besprochen wurde?
-
@homoran beide Adapter sind schon immer so eingestellt gewesen. Auf Server 1 empfängt der Adapter nur ohne etwas zu senden. Auf Server 2 sendet der Adapter nur etwas und empfängt nix. Zwischen Server1 und Server2 gibt es keine gemeinsame Daten. Beide Server hängen eben nur an dem einen MQTT-Server.
-
@sro769 schau mal mit MQTT-Explorer, in dem du dir alles (/#) anzeigen lässt, ob, so wie bei mir, bei einem Device Tausende von Meldungen auflaufen. Bei mir war es wohl ein verwaister Datenpunkt. Seit ich den gelöscht und die Dinge nach der Anleitung von @mickym umgestellt habe, läuft alles wieder.
So sah das aus (nach wenigen Sekunden - siehe stat, 47.615 Meldungen). Nach einer Minuten waren über 200.000 Meldungen aufgelaufen.
Der Datenpunkt war von einem Testscript, das aber nicht gelaufen ist. Also nur ein „rumliegender“ Datenpunkt ohne Sinn und Nutzen …
-
@lakelounge ich habe die zu übermittelnden Daten schon sehr genau definiert. Trotzdem, zur Kontrolle habe ich mal den Test am Mqtt-Server gemacht mit folgendem Ergebnis:
Da passiert auch nicht so viel. Das System läuft in dieser Konfig bereits 2 Jahre und das ohne jedwede Aussetzer. Die Signale sind quasi "handverlesen" und haben auf dem sendenden Server1 auch nur eine lokale Quelle. Die hohe CPU-Last/Load/Network-Traffic ist jetzt an 3 Tagen zu unterschiedlichen Zeiten (volle Stunde...!) aufgetreten und lässt sich durch stoppen der Adapter heilen. Wenn ich den MQTT-Server (Raspberry) neu starte, kann ich die hohe Belastung auch manuell hervorrufen. Ein Neustart der beiden Adapter richtet es dann wieder. Diese Probleme hatte ich in der Vergangenheit so definitiv nicht. Die Systeme werden permanent überwacht und alarmieren im Falle einer Abweichung hinsichtlich Belastung/CPU-Temp. etc.
-
@sro769 sagte in mqtt Adapter 4.0.7 Hohe CPU Load:
@homoran beide Adapter sind schon immer so eingestellt gewesen. Auf Server 1 empfängt der Adapter nur ohne etwas zu senden. Auf Server 2 sendet der Adapter nur etwas und empfängt nix. Zwischen Server1 und Server2 gibt es keine gemeinsame Daten. Beide Server hängen eben nur an dem einen MQTT-Server.
könntest du trotzdem mal deine Adapter-Konfigurationen posten? "Schon immer" oder "ging doch früher" mag ich in meinem Admin-Leben gar nicht mehr hören, das kann auch ein Fehler sein das vorher ging
-
@sro769 sagte in mqtt Adapter 4.0.7 Hohe CPU Load:
Die hohe CPU-Last/Load/Network-Traffic ist jetzt an 3 Tagen zu unterschiedlichen Zeiten (volle Stunde...!) aufgetreten und lässt sich durch stoppen der Adapter heilen. Wenn ich den MQTT-Server (Raspberry) neu starte, kann ich die hohe Belastung auch manuell hervorrufen.
Ich behaupte mal Du schickst Zustände und nur Änderungen. Deswegen hast Du solange keine Endlosschleife, bis sich der eine Punkt ändert. - Wann das ist - kannst nur Du beantworten. - Vielleicht auch mal Log und debug anschauen.
-
@bananajoe das ist die Konfig des sendenden Servers:
-
@sro769 Ich hab das in dem anderen Thread schon mal geschrieben:
Wenn du NICHTS in das Subscribe Pattern schreibst - dann nimmt er AUTOMATISCH # - also ALLES. Deshalb bekommst Du alles was Du schreibst postwendend zurück und die Endlosschleife ist perfekt. Wenn diese Instanz nichts subsriben soll - dann musst Du einen Dummy nehmen - schau mal in meinen Screenshot - da steht "nothing". Ausserdem wird er nichts machen mit diesen Einstellungen, wenn Du kein Präfix mitgibst.
Habe ich aber hier alles beschrieben:
https://forum.iobroker.net/topic/57365/mqtt-broker-empfängt-daten-sendet-aber-nicht-an-client/8?_=1662032439387 -
@mickym wenn du mir jetzt noch sagst, wie ich da machen soll... der Adapter läuft als Client. Unter "Subscribe Pattern" kann ich zwar was eintragen aber nichts speichern. Der Speicher-Button bleibt ausgegraut. Wenn ich noch eine andere Option ändere und den Button damit aktiviere, ist der Eintrag unter Subscribe Pattern wech... Wenn ich dann wieder was eintrage und auf Speichern klicke, ist nix gepeichert....
-
@mickym laut Log (höchste Detail-Stufe) bekomme ich auch keine Nachricht zurück, die zuvor gesendet wurde
-
@sro769 Subscribe Pattern was reinschreiben und dann ENTER drücken - dann wird aus dem Text so eine ovale Kachel, wie im Screenshot.
-
@mickym Shit, Asche auf mein Haupt. Da war ich aber schon lange nicht mehr dran. Habe ich jetzt entsprechend nachgetragen und werde das beobachten. Soweit erst mal danke.
-
@sro769 und trotzdem Präfix mit abschließendem / vergeben- der Adapter schmeißt in der Regel alles weg, das genauso wie ein Adapterpfad beginnt
-
@mickym Vorab erstmal, ich hab meine mqtt-Einstellungen jetzt genau nach deinem Vorbild gemacht Danke nochmal für deine Hilfe gestern!
Sag, darf ich dir zu diesem Thema noch eine Frage stellen:
ioBroker Subscribe Pattern: home/#
ioBroker Präfix für alle Tonics: lakelounge/
ioBroker published (Maske zum Bekanntgeben eigener States) mqtt.0.*
und nehmen wir an, „Sende auch Zustände (ack=true)“ ist aktivDie Tasmota Devices haben einen Datenpunkt stat in dem es Unterdatenpunkte wie RESULT etc. gibt. Die Änderung kommen vom Tasmota Device nach mqtt.0 und laut den Angaben oben, verstehe ich auch, dass sie von dort sofort wieder published werden. Dadurch entsteht der Loop.
Aber müssten diese jetzt nicht eigentlich unter (Präfix) lakelounge/ ... gepublished werden?
Warum published er den mqtt.0.* nicht mit dem Präfix lakelounge?Ich hab das mit fbcheckpresence versucht und da macht er das so wie erwartet:
Das ganze passiert aber nur, wenn „Sende auch Zustände (ack=true)“ aktiv ist. Das würde ich so verstehen, dass er neben allem Möglichen auch den ack des Datenpunktes mit raus published – oder?
Kannst du da den Hintergrund erklären, warum er den mqtt.0.* ohne den Präfix macht und den fbcheckpresence z. B. mit?
Nur, wenn du Lust hast
-
@lakelounge Nun ich habe eigentlich versucht das zu erklären.
Ich habe 2 !!! Instanzen. Die Instanz mit dem mqtt.0 - bei mir im Screenshot mqtt.1 ist ein Abbild des Brokers - da Subscribest alles - also nicht home/# sondern. Wenn ein Tasmota Device also was published taucht das unter mqtt.0 auf. Diese Instanz veröffentlicht KEINE Zustände - deshalb sind alle Haken draussen. Wenn Du was steuern willst schreibst Du es in einen Datenpunkt unter mqtt.0 und zwar unbestätigt. Dann wird das auch zum Broker geschickt. Deswegen braucht oder darf diese Instanz auch KEINE Zustände publishen.
Die 2. Instanz veröffentlicht Zustände eines bestehenden Adapters (dort sind die Datenpunkte alle bereits vom Adapter) bestätigt. Nur diese Instanz veröffentlichst Du unter eine Präfix - von mir aus lakelounge. Diese Datenpunkte tauchen dann automatisch in der 1. Instanz - also unter mqtt.0 unter lakelounge auf.
Diese 2. Instanz veröffentlicht iobroker Datenpunkte aber subscribed nichts - muss sie ja auch nicht, weil Du die Datenpunkte eh im iobroker hast. Wenn Du mit einem anderen Tool zum Beispiel NodeRed direkt an Deinen mosquito gehst - sind die Datenpunkt ja unter lakelounge . Schau Dir bitte meine beiden Screenshotsmqtt.1 = bei Dir mqtt.0 und ein komplettes Abbild Deines mosquitto Brokers
mqtt.2 = bei Dir halt mqtt.1 und dort werden die iobroker Adapter Punkte unter einem Präfix gepublished.Den Screenshot von mqtt.0, bei mir mqtt.1 hast Du ja unten. mqtt.2 ist meine publishing Instanz und die published bei mir halt nicht unter dem Prefix lakelounge sonder iobroker.
Die hat aber keine eigenen Datenpunkte - da sie diese ja von fremden Adaptern holt -
Du siehst mqtt.2 hat gar keine eigenen Datenpunkte - da ja die Datenpunke vom tr-064 gepublished werden sollen und bei mir unter dem präfix ioboker, dass taucht dann auch in der mqtt.1 - die ja ein vollständiges Abbild darstellt auf.
Die mqtt.0 bwz, mqtt.1 Instanz published keine Zustände, da sie alles vom mosquitto bekommt - Zustände publishen macht man nur von FREMDEN Adaptern - da diese Datenpunkte von diesen bestätigt werden.
-
@lakelounge sagte in mqtt Adapter 4.0.7 Hohe CPU Load:
Die Tasmota Devices haben einen Datenpunkt stat in dem es Unterdatenpunkte wie RESULT etc. gibt. Die Änderung kommen vom Tasmota Device nach mqtt.0 und laut den Angaben oben, verstehe ich auch, dass sie von dort sofort wieder published werden. Dadurch entsteht der Loop.
Das passiert eben nicht, wenn man keine Zustände published - deswegen sind alle Haken weg bei der Instanz, die ein 1:1 von mosquitto darstellt. Man braucht keine Zustände. Der Master ist mosquitto und sonst gar nichts. Wenn Du was rausschickst, dann schickst Du das unbestätigt - also keinen Zustand, sondern ein Kommando.
Ich weiss nicht ob das hier richtig verlinkt ist:
https://forum.iobroker.net/topic/57648/visualisierung-mit-node-red-erstellen/33
und
https://forum.iobroker.net/topic/57648/visualisierung-mit-node-red-erstellen/29 (also so ziemlich am Anfang des Threads).- aber hier habe ich noch mal erklärt - was bestätigt ist, was ein Zustand und ein ACK Flag ist. Nur mqtt kennt keine ACK Flags die mqtt-Adapter schon. Im reinen mqtt Umfeld wirst Du also nie eine Einstellung Zustände publishen finden, das ist ein Feature des iobrokers: