[geloest] Readings "älter als" aus einem Device löschen

Begonnen von fhem@supergut, 07 Dezember 2020, 08:07:48

Vorheriges Thema - Nächstes Thema

fhem@supergut

Moin,

ich habe einen Bluetooth Empfänger per MQTT2 eingerichtet. Dank der Nähe zur Strasse empfängt dieser auch reichlich sinnloses Zeugs, was ich nicht brauche. Trotzdem möchte ich aber unbekannte Geräte, z.B. einen neuen Tempsensor, auch ohne Angabe der BT-MAC empfangen. Daher kein Filter im Empfänger möglich. Also hier die Frage:

Wie lösche ich Readings älter (oder auch zuletzt geändert vor) als z.B. 1 Tag aus dem Device?

Danke im Voraus, bleibt gesund

Frank_Huber

Moin,

mit diesem AT beomme ich eine Benachrichtigung wenn ein beliebiges Reading eines speziellen gerätes länger als 16 Minuten nicht aktualisiert wurde.
Gerätename = "Temperaturen"
Du könntest das auf 1 Tag umbauen und anstelle der Telegram Nachricht das Reading löschen. Ichwürde dann aber auch nicht alle 5 Minuten das AT laufen lassen, sondern auch  x am Tag, evtl nachts.

defmod Whatchdog_Temp at +*00:05:00 {\
  my $hash = $defs{"Temperaturen"};;;;\
  foreach my $key (keys %{$hash->{READINGS}}){\
    if (ReadingsAge("Temperaturen",$key,0) > 960) \
      {fhem "set TelegramBot message Temperatursensor $key scheint offline zu sein, bitte prüfen!"};;;;\
  }}

Beta-User

Für das attrTemplate "OpenMQTTGateway_BT_scanner" habe ich zur Lösung des "Problems" eine etwas rabiatere Lösung gewählt: dort wird per periodicCmd einmal täglich schlicht (fast) alles gelöscht, was das Ding eingesammelt hat (in der setList steht dann Perl-code, der keinen Rückgabeinhalt hat, also kein Topic/Payload zum Senden via MQTT2-IO zurückliefert).
Die Devices, die dann als "nützlich" identifiziert worden sind, bekommen dann ein eigenes Device (z.B. OpenMQTTGateway_BT_temp_hum_sensor für diverse LYWSD03MMC und LYWSDCGQ, die dann als abgesetzte Temp-Sensoren (via virtuellem CUL_HM-Kanal) für HM-CC-RT-DN im Einsatz sind).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

fhem@supergut

Danke an euch beide. Ich werde mich erstmal mit der ersten Lösung begnügen und mir mal bezeiten die zweite angucken.

+*04:00:00 {my $hash = $defs{"MQTT2_MQTT2Client"};;
foreach my $key (keys %{$hash->{READINGS}}){
if (ReadingsAge("MQTT2_MQTT2Client",$key,0) > 86400)
{Log 1, "deleteReading MQTT2_MQTT2Client $key";
fhem "deleteReading MQTT2_MQTT2Client $key"};; 
}
}

Beta-User

Ähm, da wenn ich da "MQTT2_MQTT2Client" als Device-Name sehe, noch eine kliene OT-Anmerkung: Vermutlich solltest du dir das Thema "bridgeRegexp" mal näher ansehen, alles in ein Device laufen zu lassen, das von einem Broker so geliefert wird, ist auf die Dauer ziemlich unübersichtlich, so jedenfalls meine Erfahrung bisher.Im Wiki wäre dazu unter MQTT2_CLIENT was zu finden.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rudolfkoenig

Ich habe deletereading mit einem optionalen Parameter older-than-seconds erweitert.

Beta-User

Coole Sache. Ist es Absicht, dass es in der engl. cref nicht näher erläutert ist, oder übersehe ich was?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rudolfkoenig

Wer older-than-sec im englischen erklaert haben will, der soll die Zeile nochmal lesen :)