NEWS
Kann im MQTT Objekte nicht löschen
-
@capitaenz
Da bist Du zu beneiden.
Hier ist mqtt Vers. 2.1.3 und JS Vers. 4.6.4 installiert,
aber die defekten Einträge sind immer noch da und können nicht gelöscht werden. -
@hanss Es ist nur eine Frage der Zeit, bis mich dieses Problem wieder erwischt! Ich würde auch gerne ein Ticket dazu aufmachen, weiß allerdings nicht wo... MQTT-Adapter, JS-Controller, …
Update:
Der Eintrag ist wieder da -
Hallo. Bin neu im Forum bzw. mit ioBroker aktiv.
Habe jetzt schon einiges laufen und wolle bevor ich weitermache diversen Müll aus meiner Testphase löschen. Ich habe mehrere Wemos D1 Mini eingebunden welche ich mit ESPEasy geflasht habe. Später habe ich dann SYSNAME, TSKNAME und NAME umbenannt oder die ge-publishted Topics geändert. Im MQTT habe ich nun den Datenmüll der alten Bezeichnungen. Da ich automatisch die Datenobjekte anlege konnte ich den kompletten MQTT Ordner löschen. Beim Neustart des Adpters ist aber wieder alles da. Finde die Einträge in "states.json" und "objects.json" aber wenn ich das hier lese ist mir das zu heiss das von Hand zu löschen. Habt ihr ne idee was ich noch machen könnte?
-
Bislang fehlte mir der Antrieb um gewissenhaft folgendes auszuprobieren:
@capitaenz said in Kann im MQTT Objekte nicht löschen:
Danke für den Hinweis.
Die einzelnen Objekte werden offensichtlich immer mit einem}},
geschlossen, sehe ich das richtig?
Also lösche ich folgendes?"mqtt.0.Tasmota\u0001\u0000_.Tasmota_RGBW_Controller_Wohnzim":{"common":{"name":"/Tasmota/Tasmota_RGBW_Controller_Wohnzim","write":true,"read":true,"role":"variable","desc":"mqtt server variable","type":"string"},"native":{"topic":"/Tasmota\u0001\u0000*/Tasmota_RGBW_Controller_Wohnzim"},"type":"state","from":"system.adapter.mqtt.0","user":"system.user.admin","ts":1586980682159,"_id":"mqtt.0.Tasmota\u0001\u0000_.Tasmota_RGBW_Controller_Wohnzim","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}},
Hier die Einträge davor und dahinter:
_per_Telegram"},"type":"state","from":"system.adapter.javascript.0","user":"system.user.admin","ts":1586863470377,"acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}},"mqtt.0.Tasmota\u0001\u0000_.Tasmota_RGBW_Controller_Wohnzim":{"common":{"name":"/Tasmota/Tasmota_RGBW_Controller_Wohnzim","write":true,"read":true,"role":"variable","desc":"mqtt server variable","type":"string"},"native":{"topic":"/Tasmota\u0001\u0000*/Tasmota_RGBW_Controller_Wohnzim"},"type":"state","from":"system.adapter.mqtt.0","user":"system.user.admin","ts":1586980682159,"_id":"mqtt.0.Tasmota\u0001\u0000_.Tasmota_RGBW_Controller_Wohnzim","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}},"hm-rpc.0.LEQ062
Ist es geplant diesen Fehler in Zukunft zu beseitigen und ist dieser bekannt?
Danke und VG
LeifBei dir wird es eine ähnliche Struktur haben.
Ich müsste dann, wenn ich es richtig verstanden habe, folgendes entfernen:
Ich würde ein Backup anlegen, den ioBroker stoppen und die Einträge aus "states.json" und "objects.json" entfernen.
Nur lohnt die Arbeit? Vor dem Problem wird man ja öfter stehen und dann immer so umständlich vorgehen?
Ich bin mir halt nicht sicher wo man jetzt ein Ticket eröffnen muss, beim Entwickler des MQTT-Adapters, des JS-Controllers, …VG
Leif -
Danke erst mal für die schnelle erste Antwort. Habe ich nicht mit gerechnet. Habe mir nun eine Sicherung erstellt und zusätzlich auch ein Image der SD Karte gemacht.
Bevor ich jetzt anfange zwei Verständisfragen.
Es gibt je eine "states.json.bak" bzw. "objects.jason.bak" in "iobroker-data" was meine Erachtens Sicherungsdateien sein sollten UND noch einen Unterordner "backup-objects" unter "iobroker-data" in dem noch weitere Kopien liegen. Kannst du mir erklären wie das ioBroker verwendet? Weist du aus welcher Datei er beim Start von mqtt seine objekte zieht? Habe Sorge das er ggf. die bak verwendet und von dort automatisch zurückspielt und die Arbeit umsonst wäre
Und die Zweite Frage
Ich habe kein zwei }} Klammer die einen Datensatz beenden. Würdest du zustimmen das der markierte Bereich einen Datensatz darstellt. Ich würde dann
- mqtt im iobroker anhalten
- Alle objekte im mqtt adapter löschen
- iobroker in der shell stoppen
- Datensatz in "objects.json" und parallel in "states.json" löschen
- iobroker rebooten
- schauen ob die datensätzen nun endlich weg sind.
Gruß Ralf
-
@Moppedman
Ich bin (auch nur) interessierter Anwender und kann leider keine weiteren technischen Infos liefern.
Aber ich würde auch annehmen, dass der von dir markierte Bereich gelöscht werden muss.
Schalte dich doch mit z.B. WinSCP drauf und lade dir die editierte Datei herunter, dann war die Arbeit nicht umsonst, wenn diese wiederhergestellt werden sollte.
Und denk dran, Backup, Backup, Backup! -
Darf ich dich mal bitten einen Blick auf meinen Fall zu werfen. Wie oben geschrieben habe ich durch mein Ausprobieren mit ESPEasy / Wemos D1 mini 8266 diverse Objekte als Restmüll in den MQTT Objekten stehen. Ich habe die beim Testen umbenannt und/oder die Daten die vom 8266 gepublished werden, geändert. Bei jeder Namesänderung z.B. wurde unter dem neuen Namen ein neues Objekt angelegt und nicht das alte Objekt überschrieben. Löschen hilft nicht, sie kommen wieder. Schaue ich in "states.json" und "objects.json" finde ich darin die alten und neuen Bezeichnungen. Gemeinsam haben die verschiedenen Namen die fest zugewiesene IP-Adresse vom Router.
Ich habe heute nun mal einen Sensor in beiden Dateien gelöscht der aber nach Starten des MQTT adapters wieder da war. Daher die Frage wie ioBroker mit den angelegten Datensicherungen "states.json.bak" und "objects.json.bak" umgeht. Bzw was ist mit den anderen Sicherungen in dem Ordner "/opt/iobroker/backup-objects". Welche Datei benutzt das System beim Start?
Ich habe folgendes gemacht.
- mqtt im iobroker angehalten
- Alle objekte im mqtt adapter gelöscht
- iobroker in der shell gestoppt
- Datensatz in "objects.json" und parallel in "states.json" gelöscht
- iobroker reboot
Wie wäre die richtige Reihenfolge bzw. was fehlt das ich die Einträge endgültig gelöscht kriege.
Gruß und Dank
-
DIe die diese Namensprobleme haben ... welche js.controller version ist im Einsatz?
-
@apollon77
Nutze Version 3.1.6VG
Leif -
Ahhh ok, habs verstanden
-
@apollon77 Also den Fehler gefunden? Das würde mich echt freuen!
Und übrigens: Danke, dass du dich dem Problem annimmst! -
@capitaenz Ne so wirklich gefunden wäre übertrieben ... aber am Ende ist klar was man ändern muss ... unerlaubte Zeichen müssen au den IDs raus ...
-
@apollon77
vielen Dank.
Ideal wäre natürlich, wenn solche unerwünschten Einträge erst gar nicht entstehen würden,
aber diese Ursache zu finden ist natürlich sehr schwierig. -
@hanss Zur Ursache: Wenn man es schafft das verhalten zu reproduzieren dann könnte man das mit einem Debug log dann mal dokumentieren
-
@apollon77 Wenn man jetzt genau wüsste, welches die unerlaubten Zeichen sind, dann könnte man doch veranlassen, z.B. ein Gerät mit Tasmota ein Objekt damit zu erstellen.
Was müsste dann genau geloggt werden? Den MQTT-Adapter auf Debug stellen würde reichen? -
@capitaenz @apollon77
Ich meine, die Fehlervermeidung müsste weiter unten erfolgen, beim QOS, Prüfsumme, fehlerhafte MQTT Datenpakete erkennen usw..
Wenn MQTT mit fehlerhaften Datenpaketen weiter arbeitet, kann ja alles mögliche passieren, nicht nur diese unerwünschten Objekte.Was bisher aufgefallen ist:
Diese verstümmelten Objekte hatten immer eine Ähnlichkeit mit bestehenden Objekten.
Evtl. auch Störungen im WLAN oder js.controller (hohe Auslastung, Speicher Überlauf etc.) als Ursache -
@hanss Es klingt auf jeden Fall danach das irgendwie "garbage" über die Leitung kommt ...
Ich würde also erstmal hingehen und versuchen solche IDs zu erkennen und zu ignorieren und das zu loggen. Dann sehen wir ob plötzlich was anderes nicht tut
-
@apollon77
Das sehe ich genauso, denn was ich bisher darüber gelesen habe, wird reproduzieren wahrscheinlich nicht möglich sein.Ich habe gerade jetzt wieder einen Eintrag (in ein bestehendes MQTT Objekt) bemerkt, obwoh derim Client wurde ein Interrupt ausgelöst,
dafür zuständige Client nichts im Logbuch stehen hatte, daß er etwas weggeschrieben hätte.
Der Wert wurde wie üblich auch in der SQL Datenbank gespeichert und ist durchaus plausibel.
Dieses Mal ohne WiFi Störung, ohne JS Besonderheiten.
Eintrag war i.O. -
Naja am Ende müsste jemand der das Problem hat im texteditor mit so einem kaputten Objects File einfach mal schauen was das genau "Hex Code technisch" für ein zeichen ist
-
mach ich gerne, wenn das wieder einmal auftritt.
In welcher Datei stehen denn die Zeichen, die Dich interessieren?