Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

[gelöst] Plot Function für Tür offen/geschlossen Sensor

Begonnen von X-Byte, 16 Juli 2023, 12:58:43

Vorheriges Thema - Nächstes Thema

X-Byte

Ich habe diverse Xiaomi Window/Door Zigbee Sensoren über HUEBridge/deCONZ in FHEM integriert und möchte einen Plot erstellen, der mir den offen/geschlossen Verlauf grafisch darstellt.
Dazu habe ich mich an diesem Tutorial orientiert.
Leider zeigt der Plot mit der Function $fld[2]=~"open"?1:0 immer nur einen kurzen Ausschlag für open/1 an und geht dann sofort wieder auf closed, egal wie lange der Sensor nun im Status offen verbleibt.
Vermutlich weil das Log eben nicht nur open/closed als Einträge enthält sondern auch anderen "Beifang".
2023-07-15_15:01:40 eg_wohnzimmer_sensor_terrassentuer open
2023-07-15_15:01:40 eg_wohnzimmer_sensor_terrassentuer battery: 100
2023-07-15_15:01:40 eg_wohnzimmer_sensor_terrassentuer reachable: 1
2023-07-15_15:01:40 eg_wohnzimmer_sensor_terrassentuer batteryPercent: 100
2023-07-15_15:01:40 eg_wohnzimmer_sensor_terrassentuer lastseen: 2023-07-15T13:01Z

Leider erschließt sich mir trotz Recherche die Syntax für den RegEx Teil der Function (=~), wo ich gerne ergänzen würde, dass nur bei "closed" 0 gesetzt wird.
Für Ideen wäre ich sehr dankbar.

rudolfkoenig

ZitatVermutlich weil das Log eben nicht nur open/closed als Einträge enthält sondern auch anderen "Beifang".
Richtig, man sollte die notwendigen Zeilen mit einem Regexp filtern.
Der Plot-Editor in der FHEMWEB Detailansicht bietet dafuer eine Auswahlliste.

X-Byte

Danke Rudolf, der Gedanke kam mir zwar auch schon, allerdings sehe ich bei der Auswahlliste für den RegExp keinen Ansatzpunkt, außer auf den ersten .* Eintrag zu filtern, da mir ja sonst entweder das open oder das closed fehlt?

eg_wohnzimmer_sensor_terrassentuer.*
eg_wohnzimmer_sensor_terrassentuer.battery:
eg_wohnzimmer_sensor_terrassentuer.batteryPercent:
eg_wohnzimmer_sensor_terrassentuer.closed
eg_wohnzimmer_sensor_terrassentuer.lastseen:
eg_wohnzimmer_sensor_terrassentuer.open
eg_wohnzimmer_sensor_terrassentuer.reachable:

Aber ich entnehme Deiner Antwort, dass ich bei der nachgelagerten Function mit =~ RegEx quasi "zu spät" bin und nicht auf zwei verschiedene Matches mit jeweils unterschiedlicher Ergebniszuweisung (open -> 1, closed -> 0) prüfen kann?

rudolfkoenig

Richtig.

Alternativen:
- .gplot Datei selbst editieren (Regexp: eg_wohnzimmer_sensor_terrassentuer.(closed|open))
- bereits im FileLog auf (open|closed) filtern, macht als Nebeneffekt die SVG-Berechnung schneller.

X-Byte

Super, das funktioniert (weitestgehend). Ich übernehme beide Alternativen, da ich sonst keine einfache Möglichkeit habe, die "alten" FileLogs im Plot darzustellen. Für die Zukunft werden im FileLog aber nur noch open/closed Ereignisse geloggt.

In der tageweisen (24h zoom) Betrachtung irritiert mich noch, dass der Geschlossen-Zustand zu Beginn und Ende des Tages im Graph nicht dargestellt wird. Klar, im Log des Tages gibt es am Anfang kein "closed"-Eintrag, der ist ja am Vortag, da scheint der Plotter nicht auf den letzten Logeintrag des Vortages zu schauen.
Aber auch nach dem letzten "closed" Eintrag des Tages wird die Null-Linie nicht weitergeführt. Hab ich da noch einen Denkfehler?

Du darfst diesen Dateianhang nicht ansehen.

get FileLog_eg_wohnzimmer_sensor_terrassentuer CURRENT INT 2023-07-10_00:00:00 2023-07-10_23:59:59 3:eg_wohnzimmer_sensor_terrassentuer.(closed|open):0:$fld[2]=~"open"?1:0

2023-07-10_07:12:21 1
2023-07-10_07:26:55 0
2023-07-10_07:27:01 1
2023-07-10_07:28:28 0
2023-07-10_13:18:07 1
2023-07-10_17:20:20 0
2023-07-10_17:21:03 1
2023-07-10_17:21:18 0
2023-07-10_20:16:15 1
2023-07-10_21:23:14 0
2023-07-10_22:17:15 1
2023-07-10_22:17:36 0
#3:eg_wohnzimmer_sensor_terrassentuer.(closed|open):0:$fld[2]=~"open"?1:0


rudolfkoenig

Das FileLog Modul sucht nur dann Ausserhalb des spezifizierten Bereiches nach Werten, wenn keiner gefunden wurde, und kein default gesetzt ist.
Soweit ich weiss, kann man das logProxy Modul vorschalten, und damit die Linien verlaengern.