FHEM Forum

FHEM => Sonstiges => Thema gestartet von: fhem@supergut am 07 Dezember 2020, 08:07:48

Titel: [geloest] Readings "älter als" aus einem Device löschen
Beitrag von: fhem@supergut am 07 Dezember 2020, 08:07:48
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
Titel: Antw:Readings "älter als" aus einem Device löschen
Beitrag von: Frank_Huber am 07 Dezember 2020, 08:16:35
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!"};;;;\
  }}
Titel: Antw:Readings "älter als" aus einem Device löschen
Beitrag von: Beta-User am 07 Dezember 2020, 09:08:38
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).
Titel: Antw:Readings "älter als" aus einem Device löschen
Beitrag von: fhem@supergut am 07 Dezember 2020, 09:11:55
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"};; 
}
}
Titel: Antw:[geloest] Readings "älter als" aus einem Device löschen
Beitrag von: Beta-User am 07 Dezember 2020, 09:18:19
Ä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.
Titel: Antw:[geloest] Readings "älter als" aus einem Device löschen
Beitrag von: rudolfkoenig am 07 Dezember 2020, 10:03:04
Ich habe deletereading mit einem optionalen Parameter older-than-seconds erweitert.
Titel: Antw:[geloest] Readings "älter als" aus einem Device löschen
Beitrag von: Beta-User am 07 Dezember 2020, 10:11:25
Coole Sache. Ist es Absicht, dass es in der engl. cref nicht näher erläutert ist, oder übersehe ich was?
Titel: Antw:[geloest] Readings "älter als" aus einem Device löschen
Beitrag von: rudolfkoenig am 07 Dezember 2020, 10:14:00
Wer older-than-sec im englischen erklaert haben will, der soll die Zeile nochmal lesen :)