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
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!"};;;;\
}}
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).
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"};;
}
}
Ä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.
Ich habe deletereading mit einem optionalen Parameter older-than-seconds erweitert.
Coole Sache. Ist es Absicht, dass es in der engl. cref nicht näher erläutert ist, oder übersehe ich was?
Wer older-than-sec im englischen erklaert haben will, der soll die Zeile nochmal lesen :)