Autor Thema: [erledigt]Wie retain message löschen ?  (Gelesen 1080 mal)

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 3565
  • ... wer sät, der erntet ...
[erledigt]Wie retain message löschen ?
« am: 25 April 2020, 14:03:56 »
Hallo,

eigentlich wollte ich am MQTT2_Server folgendes publish absetzen:

-r cmnd/solarmax44009/DeepSleepTime 0
wegen copy+paste und schnell, schnell kam aber das dabei raus:

-r Publish2 cmnd/solarmax44009/DeepSleepTime 0
danach hab ich mit

-r Publish2 cmnd/solarmax44009/DeepSleepTime
versucht die Message zu löschen, womit jetzt

{"Publish2":"cmnd/solarmax44009/DeepSleepTime","ebusd/global...}
im RETAIN-Reading steht.

Wid bekomme ich die Message gelöscht ?

Gruß

Thomas

edit:

Habs  ::)

-r Publish2
« Letzte Änderung: 25 April 2020, 14:46:18 von TomLee »

Offline hoppel118

  • Hero Member
  • *****
  • Beiträge: 1089
Antw:[erledigt]Wie retain message löschen ?
« Antwort #1 am: 26 April 2020, 14:53:37 »
Hi Thomas,

wir machen hier mal weiter und nicht in meinem p4d Thread, damit der "sauber" bleibt. Ich übernehme mal unsere kommunikation:

Moin Thomas,

danke für den Hinweis. Einzelne Retain-Nachrichten kann ich über diesen Weg löschen. Durch die ganzen Spielereien und den homeassistant Kram habe ich jetzt aber hunderte solcher retain Nachrichten. Kann ich retain auch irgendwie vollständig zurücksetzen? Wenn nicht, lösche ich kurz das Device "MQTT2_SERVER".

EDIT: Ich habe nun kurz den MQTT2_SERVER gelöscht und neu definiert. Danach werden sofort die relevanten Nachrichten eingelesen und der ganze Müll ist weg. Wäre trotzdem noch interessant zu verstehen, ob es dafür eine elegantere Möglichkeit gibt.

Gruß Hoppel

Gute Frage würde mich auch interessieren, kann man vlt. regex verwenden, habs noch nicht probiert ?

Meine Nachrichten im RETAIN Feld sahen übrigens ungefähr wie folgt aus (Meine Heizung announced momentan ca. 40 Readings):

p4d_publisher:homeassistant/sensor/Aussentemperatur_0x4/config ...
p4d_publisher:p4d2mqtt/sensor/Au__entemperatur_0x4/state ...
p4d_publisher:p4d2mqtt/sensor//Aussentemperatur_0x4/state ...
p4d_publisher:p4d2mqtt/sensor/Aussentemperatur_0x4/state ...

Lediglich der letzte Eintrag war richtig und sollte bleiben.

Ich habe folgendes probiert:

set mqtt2server publish -r homeassistant.*
set mqtt2server publish -r p4d2mqtt
set mqtt2server publish -r p4d_publisher

Alle drei Befehle haben nichts bewirkt. Weitere Ideen? :D

Gruß Hoppel
« Letzte Änderung: 26 April 2020, 15:07:37 von hoppel118 »
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic: VCCU 2xHMUSB, 1xWLGW | HomeConnect | Philips Hue | Sonos: Beam, Sub, One, Symfonisk | Unifi: USG, USW, AC-AP-Pro | Xiaomi: S50, Smart Fan | vbus: Vitosolic 200SD4

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24485
Antw:[erledigt]Wie retain message löschen ?
« Antwort #2 am: 27 April 2020, 10:10:10 »
Zitat
p4d_publisher:homeassistant/sensor/Aussentemperatur_0x4/config ...
Schaut fuer mich merkwuerdig aus, weiss nicht, wie das ClientID da reingeschafft hat, ich kan es nicht nachstellen.

Ohne ClientId kann man es mit "set mqtt2server publish -r homeassistant/sensor/Aussentemperatur_0x4/config" entfernen, hier greifen keine Regexps, weil -r nicht fuer remove steht, sondern fuer retain (Senden einer Nachricht mit Retain Flag), was als Nebeneffekt das RETAIN Reading bzw. Internal pflegt.

Offline hoppel118

  • Hero Member
  • *****
  • Beiträge: 1089
Antw:[erledigt]Wie retain message löschen ?
« Antwort #3 am: 27 April 2020, 11:59:19 »
OK, zur Aufklärung: Die ClientID war natürlich nicht im RETAIN Feld enthalten. Ich hatte sie nur ergänzt, damit man versteht, warum ich die dort aufgeführten 3 Varianten "set mqtt2server publish -r ..." ausprobiert habe. Das war wohl Blödsin...

Das man einzelne Einträge löschen kann, hatte ich verstanden. Aber bei knapp 160 Einträgen, wovon nur noch 40 valide sind, war mir das zu blöd, alle Einträge einzeln zu löschen, so dass ich dann einfach den MQTT2_SERVER gelöscht und neu angelegt habe. Hatte die Hoffnung, dass das irgendwie eleganter geht. Aber ok, es gibt also keine Möglichkeit das RETAIN Feld grundsätzlich zu resetten.

Danke dir und Gruß Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic: VCCU 2xHMUSB, 1xWLGW | HomeConnect | Philips Hue | Sonos: Beam, Sub, One, Symfonisk | Unifi: USG, USW, AC-AP-Pro | Xiaomi: S50, Smart Fan | vbus: Vitosolic 200SD4

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24485
Antw:[erledigt]Wie retain message löschen ?
« Antwort #4 am: 27 April 2020, 12:12:19 »
Zitat
Hatte die Hoffnung, dass das irgendwie eleganter geht.
Ja: "deletereading mqtt2_server RETAIN" und FHEM-Neustart.

Offline hoppel118

  • Hero Member
  • *****
  • Beiträge: 1089
Antw:[erledigt]Wie retain message löschen ?
« Antwort #5 am: 27 April 2020, 12:48:02 »
hm... Ich bin der Meinung, dass ich das probiert hatte. Auch die von Beta-User aufgezeigte Variante hatte ich probiert, um das RETAIN Feld zu löschen:

deletereading -q DEVICE (?!associatedWith).*
Das Reading ist dann zwar kurz weg, aber es kommt nach kurzer Zeit wieder und bringt alle (auch die veralteten) Inhalte mit. Meine deletereading Tests habe ich immer ohne FHEM Neustart ausgeführt. Dann war das wohl das Problem. Ich werde das testen.

Danke und Gruß Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic: VCCU 2xHMUSB, 1xWLGW | HomeConnect | Philips Hue | Sonos: Beam, Sub, One, Symfonisk | Unifi: USG, USW, AC-AP-Pro | Xiaomi: S50, Smart Fan | vbus: Vitosolic 200SD4

Offline hoppel118

  • Hero Member
  • *****
  • Beiträge: 1089
[erledigt]Wie retain message löschen ?
« Antwort #6 am: 30 April 2020, 00:17:11 »
By the way... Rudi hatte in meinem anderen Thread übrigens noch folgendes gepostet:


Zitat
Kann ich den MQTT2_Server eigentlich irgendwie stoppen?

delete MQTT2_Server
oder
modify MQTT2_Server 1884

Das disable Attribut verhindert nur das Senden.

Gruß Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic: VCCU 2xHMUSB, 1xWLGW | HomeConnect | Philips Hue | Sonos: Beam, Sub, One, Symfonisk | Unifi: USG, USW, AC-AP-Pro | Xiaomi: S50, Smart Fan | vbus: Vitosolic 200SD4

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 3565
  • ... wer sät, der erntet ...
Antw:[erledigt]Wie retain message löschen ?
« Antwort #7 am: 18 September 2021, 12:56:12 »
Hallo,

hab mir vor Monaten beim "testen" mit Valetudo enorm viele homeassistant-Topics in RETAIN "eingefangen".
Die längsten (Karten) und auch viele weitere hab ich bisher mit -r gelöscht, es würde aber ewig dauern jeden Topic händisch zu löschen.

Mit deletereading:
Ja: "deletereading mqtt2_server RETAIN" und FHEM-Neustart.
sind die Topics nach einem restart weiterhin vorhanden.

Geht es nur über den Umweg den MQTT2_SERVER zu löschen und wieder neu anzulegen ?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15640
Antw:[erledigt]Wie retain message löschen ?
« Antwort #8 am: 18 September 2021, 13:17:14 »
Mein Test eben mit Rudi's Vorschlag, einem sicherheitshalber danach abgeschossenen "save statefile" und einem Neustart zeitigte am Ende einen deutlich ververkleinerten Reading-Inhalt. Was jetzt wieder (denke ich zumindest, dass es wieder ist) drinsteht, erscheint mir plausibel, es verbinden sich halt dann wieder alle Clients und dann gibt es auch wieder einige Retain-Einträge...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 3565
  • ... wer sät, der erntet ...
Antw:[erledigt]Wie retain message löschen ?
« Antwort #9 am: 18 September 2021, 17:00:09 »
Sry, nach dem schreiben vorhin bin ich direkt eingespannt worden was zu arbeiten.

Habs mir jetzt nochmal genauer angeschaut.

Also ich meine festgestellt zu haben das es nach einem löschen des Reading RETAIN der Fall sein kann das gleich wieder alle vorherigen Topics reingeschrieben werden, gleich nach Aktualisieren von FHEMWEB stehen diese wieder drin.
Meine Vermutung dabei ist das dieses Verhalten auftritt wenn gleich nach dem löschen des Reading irgendein Gerät was gesendet hat, die ganze "Liste" an Topics die zuvor gelöscht wurde wieder ergänzt wird.
Ist man aber schnell genug bzw. hat Glück das (nach meiner Vermutung) nach dem deletereading kein Gerät was sendet, ein save das leere Reading auch wirklich speichert und rechtzeitig den restart macht, erst dann die alten Topics nach dem neu laden weg sind.


Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15640
Antw:[erledigt]Wie retain message löschen ?
« Antwort #10 am: 18 September 2021, 17:29:45 »
was als Nebeneffekt das RETAIN Reading bzw. Internal pflegt.
Ohne in den Code gesehen zu haben hätte ich auch getippt, dass da ein Internal mit einem Array/einer Liste von Hashes existiert, das beim Senden einer Nachricht mit -r Flag dann ausgewertet wird. Also entweder schnell sein mit dem shutdown restart, oder eine Schleife basteln, die einmal das leere publish auf alle relevanten Topics macht...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

 

decade-submarginal