Logfile "abspielen"

Begonnen von sigi3001, 11 Februar 2023, 12:57:37

Vorheriges Thema - Nächstes Thema

sigi3001

Hallo!

Ich würde gerne eine Anwesenheitssimulation wie beim Gira Homeserver erstellen.
Dort funktioniert das folgendermassen:
Es gibt ein Logfile, in dem man die On/Off-Zeitpunkte bestimmter Geräte (Lampen) mitloggen lassen kann.
Dieses ist wie ein Ringspeicher konzipiert, d.H. kann man die Größe beschränken indem immer die ältesten Werte wieder rausgelöscht werden.
Darin lässt man alle für die Anwesenheitssimulation wichtigen Lampen im ganzen Haus mitloggen.
Wenn man nun das Haus verlässt und z.B. die Alarmanlage einschaltet, dann wird die Anwesenheitssimulation
aktiviert und beginnt das Lampen-Logfile zum gleichen Zeitpunkt von vor 7 Tagen abzuspielen.
Das hat gegenüber dem RandomTimer den Vorteil, dass die Simulation wirklich realistisch wirkt.

Das stellt mich als FHEM-Anfänger und Perl-Nichtversteher vor folgende Probleme:
1. Ein Logfile erstellen, wo alle benötigten Lampen reinschreiben. (Das würde ich vielleicht gerade noch schaffen.  ;D )
2. Das Logfile auf ca. 8 Tage limitieren (Ringspeicher), damit es nicht zu groß wird.
3. Das Logfile beim Aktivieren der Alarmanlage mit dem korrekten Startpunkt (gleiche Zeit minus 7 Tage) abzuspielen.

Ich habe schon etliche Foreneinträge zu den Themen "Anwesenheitssimulation" und "Logfiles" durchgelesen,
aber irgendwie nichts gefunden, das mir konkret weiterhelfen würde.

Hat irgendjemand Ideen, wie ich das angehen könnte?

Cheers,
Sigi
Mühsam ernährt sich das Eichhörnchen.

Der Gira Homeserver ist tot! - Lang lebe FHEM!

sash.sc

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

DeeSPe

Klingt interessant!
Die ersten beiden Dinge sollten schon einfach so machbar sein.

Für das Dritte würde ich eine Funktion schreiben die das Logfile durchparst und für jede Zeile ein 'at' erstellt.
Diese Funktion wird dann immer um 0 Uhr aufgerufen um die 'at's für den neuen Tag zu planen falls niemand da ist. Und sie muss auch aufgerufen werden wenn keine Anwesenheit mehr für Zeit X erkannt wird.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Prof. Dr. Peter Henning

ich halte es nicht für zielführend, das wirklich jeweils neu zu machen. Erstens ist die Wahrscheinlichkeit eines Fehlers dabei ziemlich groß, und zweitens würde das bedeuten, dass man nicht länger als eine Woche wegbleiben kann, ohne dass es sich wiederholt.

Jetzt kann man den Spieß aber umdrehen.

1. Über sieben Wochentage hinweg in einem Log diese Lampenevents sammeln (von mir aus auch noch in vier verschiedenen Jahreszeiten)
2. Diese Logdateien manuell editieren und optimieren (!).
3. Aus jeder dieser Logdateien ein Skript generieren und testen, also einen Anwesenheitssimulator für jeden Wochentag.

Dazu gehören natürlich auch Events für Rollläden, Türschlösser, evtl. den Fernseher.

Das Modul YAAHM bietet die Möglichkeit, solche Skripte auch automatisiert an Tageszeiten (wie z.B. eine Stunde nach Sonnenuntergang) anzupassen, es generiert daraus dann DOIFS.

LG

pah

sigi3001

Hallo Peter!

Ich verstehe deinen Einwand und finde auch deinen Lösungsvorschlag grundsätzlich sehr gut. Insbesondere auch dass man Rolläden, Fernseher usw mit einbinden können sollte.

Für mein persönliches Empfinden wäre aber trotzdem mein Ansatz besser weil er eine höhere Variabilität bietet. So wird nicht nur genauer auf die momentane Tageslänge (Jahreszeit) reagiert, sondern es macht zum Beispiel auch einen Unterschied wieviele Personen das Haus gerade bewohnen (Anzahl der beleuchteten Zimmer) usw. - Das System ist also näher am aktuellen Zustand.
Ausserdem glaube ich nicht, dass ein das Haus beobachtender potentieller Einbrecher die Wiederholung bei einem 7-tägigen Simulationsrhythmus wirklich erkennen würde.
Ich hatte dieses System jetzt über 10 Jahre auf meinem Gira Homeserver laufen und kann also aus eigener Erfahrung berichten, dass es sich in dieser Form bewährt hat.

LG
Sigi
Mühsam ernährt sich das Eichhörnchen.

Der Gira Homeserver ist tot! - Lang lebe FHEM!

sigi3001

#5
Ich hab das ganze Problem jetzt nochmal durchdacht und folgende Lösung hat sich aufgetan:

Alle für die Anwesenheitssimulation relevanten Lampen werden mit einem "notify" überwacht und damit ein "at" mit 168 Stunden Verzögerung (= 7 Tage) erstellt.
(Danke an Otto123 für die Hilfestellung beim Erstellen der Namen mit Unix-Zeitstempel!)

define AWSim_Licht1_on notify Licht1:on {fhem("define at_AWSim_Licht1_on_".time()." at +168:00:00 set Licht1 on; attr AWSim_Licht.* room AWSim")}
define AWSim_Licht1_off notify Licht1:off {fhem("define at_AWSim_Licht1_off_".time()." at +168:00:00 set Licht1 off; attr AWSim_Licht.* room AWSim")}

So bekomme ich für jeden ausgeführten Schaltvorgang ein  "at", das den gleichen Schaltvorgang in genau 7 Tagen zur gleichen Zeit ausführt.

Damit die Schaltvorgänge nur ausgeführt werden, wenn die Alarmanlage von aussen scharfgeschaltet wird, lasse ich 1x am Tag ein DOIF drüberlaufen, das alle "at" vorerst einmal auf inactive setzt.

define Ueberpruefung DOIF ([03:33] and [Alarmanlage_EXT:state] eq "off"]) (set at_AWsim_Licht.* inactive)

Wird nun die Alarmanlage beim Verlassen des Hauses aktiviert, so setzt ein DOIF alle "at" auf active, bzw. beim Deaktivieren der Alarmanlage wieder auf inactive:

define AWSim_on_off DOIF ([Alarmanlage_EXT:state] eq "off"]) (set at_AWSim.* inactive, set Ueberpruefung inactive) DOELSE ([Alarmanlage_EXT:state] eq "on"]) (set at_AWSim.* active, set Ueberpruefung active)

Soweit funktioniert das momentan recht gut.

Einen kleinen Schönheitsfehler hat das ganze noch: Die beim Erstellen der "at" gesetzten "attr AWSim_Licht.* room AWSim" verschwinden beim Neustart und alle "at" sind wieder im Raum Unsorted. Ich vermute das liegt daran, dass die "at" im statefile gespeichert werden.
Lässt sich das irgendwie beheben?

Falls jemand von den Profis sonst noch Verbesserungsmöglichkeiten sieht, wäre ich natürlich froh diese zu hören.

LG
Sigi

Mühsam ernährt sich das Eichhörnchen.

Der Gira Homeserver ist tot! - Lang lebe FHEM!