NEWS
MQTT-Adapter Cache löschen (manuell angelegt Datenpunkte)
-
Verwende am besten für tasmota den sonoff Adapter, das funktioniert einwandfrei.
-
Ich habe festgestellt das der MQTT-Adapter als Client es gar nicht mag wenn ich Datenpunkte lösche. Ich nutze einen Mosquitto-MQTT-Broker und der MQTT-Adapter (der, der sowohl Broker als auch Client sein kann) ist als Client damit verbunden.
Zum löschen halte ich den MQTT-Adapter an, lösche die Datenpunkte im Objekte-Explorer und starte diesen dann wieder - und habe kein Probleme, die Datenpunkte sind dann schlicht weg und der Adapter meckert nicht.
Ähnlich zickig war diese Kombination auch oft beim anlegen von Datenpunkten. Über
SendTo
funktioniert auch das immer Problemlos (SendTo an die MQTT-Adapter-Instanz), beim anlegen als normalen Datenpunkt hatte ich früher immer Probleme.Du hast es nicht beschrieben, aber vermutlich setzt du den Adapter als Broker ein? Die 2. Instanz zum senden brauchst du normalerweise gar nicht sondern kannst auch an die 1. per SendTo senden.
Sonst zeig mal deine Adapter Einstellungen. -
Der MQTT-Adapter KANN SICH im iobroker NIE wie ein richtiger mqtt Broker verhalten. Jeder mqtt-Broker löscht automatisch die topics wenn alle subscriber bedient wurden (retain ausgenommen , damit hat der Adapter eh ein Problem). Das löschen von topics ist nicht vorgesehen und bekommt auch in der Regel kein mqtt-client mit.
Deswegen ist die Vorgehensweise von @BananaJoe richtig, wenn man zuviel Schrott drin hat. Aber wie gesagt das ist auch kein Adapterproblem - ein mqtt Client speichert in der Regel keine Nachrichten.
Verwende am besten für tasmota den sonoff Adapter, das funktioniert einwandfrei.
Das ist natürlich wieder der blödeste Ratschlag insbesondere, wenn der TE schreibt, was bei dem Adapter nicht funktioniert. Generell funktionieren Adapter nur, wenn sie Standards kennen . Aber nicht wieder diese Diskussion.
-
@ilovegym
Der liefert mir leider nicht die Werte, die ich brauche und ich hatte es damals auch nicht hinbekommen, die teleperiod und den poweronmodus zu setzen.
Daher meine Lösung über den mqtt-Adapter und dessen cmnd-Datempunkte. -
@bananajoe
Korrekt, den 2. Adapter starte ich nur, wenn ich die Datenpunkte anlegen möchte. Im Prinzip simuliere ich damit einen vorhandenen Datenpunkt den sich der 1. Adapter merkt (wenn ich mich recht erinnere, dann war das damals meine Idee).
Und ja, die Datenpunkte lege ich via SendTo an.Dann sehe ich mal, ob ich den Adapter wechsle oder einfach mal beide bei mir entferne und neu mache.
Thx!EDIT:
Oh Mann, ich glaube, ich Idiot habe einfach nur vergessen, den Adapter zu stoppen. Ich bin zwar sicher, dass ich das gemacht hatte, aber jetzt sieht das besser aus.
Sorry, ich war anscheinend einfach nur zu blöd!! -
@mickym
So genau hab ich mich gar nicht in das Verhalten der Broker eingearbeitet - oder ich habe alles wieder vergessen
Ich hatte vom Protokoll gelesen und mir die cmnd-Lösung überlegt und war dann mächtig stolz.
Was ich nicht ganz verstehe ist, dass Du sagst, dass ein Client die topics normal automatisch löscht, wenn ich das richtig verstehe, dann ist da das Verhalten beim Adapter aber anders, weil er halt kein echter Broker ist.Wie oben schon erwähnt werde ich dann vielleicht mal die Instanzen neu machen. Eine einfache Lösung gibt es ja scheinbar nicht, wirklich stören tut das aber ja auch nicht.
Mich würde auch interessieren, was genau dazu führt, dass die wieder angelegt werden, ist das wirklich der Neustart des Adapters. Wenn ich den Lösche, dann sollten ja auch alle seine Datenpunkte weg sein.danke!
-
@sammy-r Ich betreibe mosquitto als mqtt Broker. Der verhält sich in jedem Fall konform und löscht automatisch topics, wenn diese an die mqtt- Clients geschickt wurden. Im iobroker betreibe ich den mqtt-Server/Client Adapter als Client.
Wenn tatsächlich zuviel Schrott sich im Adapter gesammelt hat. Dann kannst Du alle Datenpunkte im Adapter löschen. Wenn Du beim nächsten Verbinden mit # Dich wieder mit dem Broker verbindest, kommen die Datenpunkt mit jeder Aktualisierung peu a peu wieder rein. -
@sammy-r sagte in MQTT-Adapter Cache löschen (manuell angelegt Datenpunkte):
Mich würde auch interessieren, was genau dazu führt, dass die wieder angelegt werden, ist das wirklich der Neustart des Adapters. Wenn ich den Lösche, dann sollten ja auch alle seine Datenpunkte weg sein.
Nein - die Datenpunkte werden immer von dem Gerät angelegt, das published - nie vom Adapter selbst. Wenn Du externe Broker hast und Du ein Client/Gerät hat topics mit dem retained flag publiziert, dann kommen die sofort mit dem Neuverbinden wieder in den Adapter.
-
@mickym
Das ist aber ja genau der Weg, auf dem ich die Datenpunkte anlege (cmd und stat):
Der die Tasmotas die nicht per Default anbieten starte ich einmalig die mqtt.1-Instanz und mache mit der das sendTo an die mqtt.0-Instanz.
Danach kann ich die 2. Instanz wieder stoppen.
Wenn ich die teleperiod zB setzen will, dann ändere ich einfach den cmnd-Datenpunkt und der Wert geht an die Dose, die mit einem RESULT antwortet, worauf wiederum mein Skript reagiert und, das parst und meinen stat-Datenpunkt aktualisiert.Die werden also nie von einem Client gesendet - ausser, ich starte die 2. Instanz und lasse die mit dem sendTo so tun, als wäre sie eine der Tasmotas.
...und damit beantworte ich mein Fragezeichen:
Da Löschen von Topics nicht vorgesehen ist, behält der Adapter die, bis ich ihn mal stoppe und den Objecttree ganz löschen.Schöner wäre natürlich, ich könnte die Rückgaben der Tasmotas direkt konfigurieren, dazu hatte ich damals aber nichts gefunden.
Thx!
-
@sammy-r Na über die cmnd topics kannst Du doch alle Kommandos absetzen. Die stat topics werden dann doch automatisch vom Gerät geliefert, dass muss man in der Regel nicht via Skript machen.
Ansonsten schau Dir den Tasmota Device Manager an über den kannst Du über mqtt via GUI leicht komplexere Aufgaben eintragen und die mqtt topics werden automatisch angelegt. -
@mickym
Richtig. Die Tasmotas liefern aber keinen cmnd für den poweronmodus und teleperiod nicht, weshalb ich sie so dazu 'bewege'. Bei den stat-Datenpunkten ist es dasselbe. Die Werte werden über RESULT geliefert aber nicht irgendwo abgelegt.
Ich hab auch beide Werte in Projekten geplant, weshalb ich sie im iobroker brauche.
Falls es interessiert:
In Ausnahmefälle soll eine Dose (durch mich) schaltbar sein, normal soll der Hardware-Schalter aber deaktiviert sein.
Die teleperiod war für die 'Datensparsamkeit' gedacht, um nur während der relevanten Phase Unmengen an Daten zu liefern. -
@sammy-r Das sieht man in der Konsole ob stat Punkte gepublished werden. Wenn dort nichts gepublished wird, dann hilft auch das Anlegen der Datenpunkte nichts.
Wie gesagt der Tasmota Device Manager hilft ggf. die topics automatisch anzulegen, wenn Du einen Windowsrechner hast. Dieser Tasmota device manager greift über mqtt auf die Geräte zu.
-
@sammy-r sagte in MQTT-Adapter Cache löschen (manuell angelegt Datenpunkte):
@mickym
Richtig. Die Tasmotas liefern aber keinen cmnd für den poweronmodus und teleperiod nicht, weshalb ich sie so dazu 'bewege'. Bei den stat-Datenpunkten ist es dasselbe. Die Werte werden über RESULT geliefert aber nicht irgendwo abgelegt.
Ich hab auch beide Werte in Projekten geplant, weshalb ich sie im iobroker brauche.
Falls es interessiert:
In Ausnahmefälle soll eine Dose (durch mich) schaltbar sein, normal soll der Hardware-Schalter aber deaktiviert sein.
Die teleperiod war für die 'Datensparsamkeit' gedacht, um nur während der relevanten Phase Unmengen an Daten zu liefern.Das soll keine Belehrung sein sondern eher eine Zusammenfassung für mitlesende:
Also, richtig ist das du jeden möglichen Tasmota Befehl ( https://tasmota.github.io/docs/Commands/ ) per MQTT setzen kannst indem du diesen einfach unterhalb von
cmnd/Gerätetopic/Befehl
anlegst und mit einem Wert sendest. In einem Rutsch geht das perSendTo
Auch richtig ist, das du unter
mqtt.0.stat.Gerätetopic.RESULT
immer unmittelbar auf den letzten Befehl oder Ereignis eine Antwort erhältst.
Meistens gibt es den Wert ja noch versteckt in einen der anderen STATUS-Meldungen im gleichen Topic:
und/oder im
/tele/
Zweig:
Was dort nicht aufgeführt wird kannst du abfragen indem du den Befehl aufrufst, aber ohne Parameter, also nichts als Payload, das sollte dann einenRESULT
erzeugen. Das RESULT enthält dabei auch immer den Befehlsnamen was bei einem Vergleich mit geprüft werden sollte, in den Datenpunkt können ja auch mehrere Dinge hintereinander / fast zeitgleich eintrudeln. -
@bananajoe
Das war auch etwas belehrend, aber darum hatte ich ja auch gebeten und ich bin Dir sehr dankbar für Deine Erklärungen und Zeit!Also. Meine Dosen haben da nicht so viel zu bieten:
'teleperiod' ist der Datenpunkt, den ich wie oben beschrieben angelegt habe. Aus 'Sensor' kann ich den aktuellen Verbrauch etc. auslesen.Teleperiod und poweron finde ich da nicht und für mich war ja das Absenden des Commandos das wichtige.
Nun aber zu meinem Verständnis, das hab ich vielleicht in der Doku vom Tasmota-Manager (nur quer gelesen) übersehen:
Ich kann den Dose damit beibringen, dass sie 'meine' Commandos von sich aus veröffentlichen? Ebenso deren Datenpunkte / Status unter tele/stat?Ggf. geht das dann ja vielleicht auch über die Web-UI / Console von Tasmota? Einmal ändern, immer ansteuern können wäre natürlich die bessere Lösung.
-
@sammy-r
Teleperiod
ok, damit verstellst du eben diese. Was willst du mitPowerOn
? Dafür ist derPOWER
Datenpunkt da und schaltet z.B. ein Relais, auch wenn der Button/Switch entkoppelt ist.Was meinst du mit Commandos veröffentlichen? In
stat
undtele
ist alles was die Büchse kann. Was die Büchse kann hängt davon ab wie diese konfiguriert ist. Wie ist denn die Konfiguration des Gerätes? Gerne Screenshot der Seite wo man festlegt welcher Pin wofür genutzt wird.Deine Befehle werden doch per RESULT zurück gemeldet, die Konfiguration sollte sich in
stat/gerätename/status
finden, ggf. percmd/gerätename/STATUS
mit Wert 0 antriggern (habe ich mal gemacht um die Konfiguration eines Shellys zu prüfen der sich immer wieder verstellt hatte) -
@bananajoe
verschrieben... ich hatte den Punkt 'poweronstate' genannt (aktuell fehlend, deshalb nicht auf der Hardcopy).
Ich nutze ihn, damit kann ich den Power-Modus beim Einschalten festlegen und damit auch, ob der Hardware-Schalter eine Funktion hat.
Einen Trockner möchte ich nur ungern aus versehen im Betrieb ausschalten, weil mein Skript nicht läuft. Einen anderen Verbraucher aber vielleicht damit steuern können (oder zeitweise ganz deaktivieren).Wie im allerersten Post (ist ja schon etwas her ;-)) geschrieben, benötige ich die Datenpunkte in cmnd halt, damit ich aus Skripten heraus die Commandos absetzen kann, die von den Tasmota-Dosen nicht 'freiwillig' dem Adapter melden und deshalb auch nicht angelegt werden.
Ich lege also Datenpunkte in cmnd an, damit ich die Tasmotas konfigurieren kann und weitere in stat, in denen ich dann das geparkte Result ablege und die ich auch in den Skripten nutzen kann.
-
@sammy-r sagte in MQTT-Adapter Cache löschen (manuell angelegt Datenpunkte):
die von den Tasmota-Dosen nicht 'freiwillig' dem Adapter melden und deshalb auch nicht angelegt werden.
Naja, sonst würden da ja hunderte von Kommandos stehen, in sofern ist schon ok das dort nicht alle sondern nur für das verwendete Template wichtige aufgeführt werden, in der Regel also
POWER
Du hats ja deinen weg. Auch wenn ich das dann nicht unterstats
ablegen würde, da kann man ja nicht mehr unterscheiden was vom Gerät kam und was von deinen Skripts.Vermutlich könnte man über Skripte (ESP32) oder Rules auch verschiedenen Dinge per MQTT publishen.
-
@bananajoe
Ich gebe Dir da Recht, ich hatte die Datenpunkte erst bei bei meinen userdata, allerdings war das nervig, weil ich bim Testen immer scrollen musste
Über die Rules bin ich im Rahmen dieses Threads auch gestolpert, ebenso über die Templates. Da recherchiere ich evtl. später mal. Steht aber nicht ganz oben.Danke Dir für den regen Austausch!
-
@sammy-r sagte in MQTT-Adapter Cache löschen (manuell angelegt Datenpunkte):
Ich gebe Dir da Recht, ich hatte die Datenpunkte erst bei bei meinen userdata, allerdings war das nervig, weil ich bim Testen immer scrollen musste
2 Bildschirme mit mehreren Browserfenstern nebeneinander wirken wunder!