@marc-berg said in JS-Adapter startet ständig neu: heap out of memory:
Und du erwartest jetzt, dass der MQTT Adapter Objekte entfernt, wenn du die Retained Messages in deinem Broker löschst?
Ja, Grundsätzlich bin ich davon ausgegangen, dass der MQTT Adapter Objekte von Nachrichten und die dazu gehörigen Topics löscht, wenn diese nicht mehr vorhanden sind (nur bei Retained Messages).
Bei allem anderen wäre das nicht wünschenswert, besonders wenn Clients offline gehen und man die Objekte für etwas benutzen will.
Vielleicht bin ich auch von anderen Systemen die ich kenne (nicht nur im Smarthome Bereich) etwas verwöhnt. In Systemen, in denen man die Topics selber definiert und kontrolliert, ist dies vielleicht noch eine einfache Sache, aber in dynamischen Systemen, die sich durch z.B. Software-Updates ständig erweitern oder ändern, ist das ein Muss, sonst hat man ganz schnell Probleme.
Ich habe während des Studiums mal an einem Telemetriesystem für Satelliten gearbeitet,
da war diese Sache ein Hauptbestandteil.
Wenn man sich als Client schon alles speichert, was auf dem Broker passiert, könnte man auch ab und zu über die Topics gehen und feststellen ob ein Topic was mit einer Retained Message versehen war weg gefallen ist. Grundsätzlich abonniere ich alles was da ist und arbeite dann mit Autodiscovery. Gezieltes Abonnieren ist mir zu aufwändig.
So habe ich das damals umgesetzt, das ist kein muss.
Vielleicht gibt es im MQTT Adapter die Möglichkeit bestimmte Topics vom Abonnieren auszuschließen, das würde ja schon helfen.
Und was hat das mit „clean session“ zu tun?
"Cleansession=false" ist nur die "Anmelde Option" die dem Broker mitteilt, das die Session über die Onlinephase hinaus aktiv bleibt und dass der Client alle Nachrichten von einem Topic gerne später nachgereicht haben möchte.
Hierbei handelt es sich um eine andere Art der Nachrichten/Topic Erhaltung.
Der Broker speichert alle Werte zwischen und sobald der wieder Client online kommt, werden ihm alle Werte die er während seiner "Offlinephase" verpasst hat zur Verfügung gestellt.
Hierbei werden auch Topic und Nachrichten zwischengespeichert die, wenn irgendetwas schief läuft vom Broker wieder gelöscht werden müssen.
Du hast mir ja unterstellt ich würde das MQTT-Protokoll nicht verstehen, obwohl ich damit schon eine Zeit lange arbeite (15+ Jahre). Deshalb wollte ich nur versuchen, dir klar zu machen, was ich mit meiner Aussage gemeint habe und dass man so gesehen schon Topics und ihre Nachricht vom Broker "löschen" kann bzw. auch muss.
Grundsätzlich verbleibt eine Nachricht nur solange auf dem Broker bis alle Clients die das Topic abonniert haben, diese empfangen haben. (Ausnahmen bestätigen die Regel siehe QoS, Retained Messages und persistent storage)
Ich finde es witzig, welche Richtung dieses Gespräch eingeschlagen hat und dass ich jemanden erklären muss, dass ich ein Protokoll schon verstanden habe, aber er anscheinend mit meiner Aussage ein Problem hat. Das hat einen gewissen Troll-Faktor. Nicht böse gemeint.
Aber eine einfache Antwort wie, "Leider bietet der MQTT Adapter so eine Funktion nicht an" hätte ausgereicht.
Versteh mich nicht falsch, ich mag ioBroker, aber ursprünglich komme ich aus der openHAB Ecke.
Ich habe riesige Automatisierungsskripte geschrieben,
die aber so ausgeartet sind, dass ich für meine Familie etwas Intuitiveres gesucht habe (Shuttercontrol ;-)).
Jede Software ist anders und setzt Sachen anders um.
Ich sehe die Vorteile vom Objektsystem in ioBroker, man muss diese nicht selber erstellen und hat alles schön in einem Baum. Andererseits kann dies aber recht Ressourcen schluckend sein.
Keine Software ist perfekt, meine eigene auch nicht.
Ich habe hier nun mal einen Edge-Case und vielleicht haben Andere das gleiche Problem.
Wenn einer der Entwickler Lust hat, kann er für diesen Edge-Case eine Option einbauen oder vielleicht gibt es schon eine Option, nur ich kenne sie noch nicht.
Nach 3 Jahren, ist dies das erste Mal, dass dieser Fehler bei mir aufgetreten ist und wenn ich alles wüsste, müsste ich die Community nicht bemühen.
Und jetzt führe ich solche Gespräche wie diese hier oder ob Docker auf einem Pi absoluter Bullshit ist.
Ich bin vielleicht nicht der erste und bestimmt nicht der Letzte, der die genauen internen Funktionen von ioBroker und seinen Adaptern nicht kennt.
Das Problem kann demnach auch jeder andere Adapter verursachen, sogar Adapter die gar nicht mehr installiert sind und Datenreste in der Objektdatenbank hinterlassen haben. Bei mir war es nun mal der MQTT Adapter mit der HA Autodiscovery Funktion von bestimmten Clients.
Der Fehler hätte auf jedem System mit zu wenig RAM auftreten können.
Dieses Thema soll anderen helfen, sollten diese vielleicht mal vor demselben Problem stehen.
Der MQTT Adapter war bei mir nun mal ausschlaggebend,
deshalb werde ich das weiter beobachten und vielleicht selber eine Lösung finden.
Für jeden anderen der beim Starten des JS Adapters ein „heap out of memory“ Fehler bekommt, kann ich nur raten, prüft eure Objektdatenbank auf verwaiste Objekte und räumt diese auf.