GROHE SENSE GUARD

Begonnen von Heuberg, 08 Dezember 2017, 19:15:15

Vorheriges Thema - Nächstes Thema

J0EK3R

...ich glaube, ich habe EPIC - Perl Editor and IDE for Eclipse
https://www.epic-ide.org/

McShire


J0EK3R

Moin in die Runde :)

ZitatWenn ich alle verarbeiten würde, wäre die Systemzeit von FHEM aber schon einen Tag weiter - das Setzen von Readings und damit die Zeitstempel im Log wären aber Systemzeit und nicht der tatsächliche Zeitstempel der Messung und somit würde der Zeitstempel nicht zum Wert passen...

Natürlich könnte ich eine Kombination aus Zeitstempel + Wert in die Readings und damit ins Log-File schreiben.
Aber kommt der Plot damit klar? Ich denke nicht...

...ich suche gerade nach einer Lösung für das Problem mit den Zeitstempeln der Messungen und habe vielleicht etwas gefunden:

die optionale Postprocessing Funktion von logproxy

https://wiki.fhem.de/wiki/LogProxy

,,
Die optionale Postprocessing Funktion
Nachdem für eine Kurve alle Verarbeitungsschritte erfolgt sind wird myPostFn($devspec,$data) aufgerufen. Hierbei ist $devspec die zugehörige Zeile aus dem gplot-File und $data ein Array, das alle Datenpunkte dieser Kurve enthält. Jeder Datenpunkt ist ein Triplet aus Zeitpunkt in Sekunden, Wert an diesem Punkt und Zeitpunkt als String. Die postFn muss ein Array in gleichem Format zurückliefern, wobei die dritte Komponente jedes Punktes optional ist und nicht weiter ausgewertet wird. Das zurückgegebene Array muss nicht die gleiche Anzahl an Punkten enthalten wie das ursprüngliche.
,,

Wert an diesem Punkt würde dann den eigentlichen Messwert - bestehend aus Zeitstempel und Wert - enthalten, der in myPostFn in Zeitstempel und Wert aufgesplittet und ins ,,zurückgegebene Array" geschrieben werden könnte...?

Bei nächster Gelegenheit werde ich eine neue Version des Moduls GroheOndusSmartDevice auf github stellen, die zusätzliche readings für eine Kombination aus Zeitstempel-Wert für die Messungen hat.
Dann kann man die Lösung mit logproxy ausprobieren.

Gute Idee?  ;)

McShire

Hallo JOEK3R,

ich habe es jetzt 3 mal gelesen, aber nicht ganz verstanden, wie es funktioniert.
muss dann nach dem Erstellen des Plots jeweils hinterher die Funktion myPostFn aufgerufen werden und die zurückgegebenen Werte in den Plot eingegeben werden?

Wenn es funktioniert, wäre es toll.
Aber vorher müssen zunächst alle Wert abgerufen werden und nicht nur der letzte.

Viele Grüße
Werner

J0EK3R

Hallo Werner,

also ob es funktioniert, das wissen wir (noch) nicht...

Also zuerst brauchen wir die Werte, das muss ich noch implementieren - vielleicht schaff ich es morgen; aber eher Mittwoch oder Donnerstag.

Es reicht ja nicht, einfach den Zeitstempel der Messung mit auszugeben, ich muss ja auch schauen, dass jede Messung nur einmal auf das reading geschrieben wird. Sonst sind die Werte ja doppelt und x-fach im Log-File.

Dann kommt das logproxy-Modul ins Spiel:
Wenn ich die Beschreibung richtig verstanden habe, dann kann man eine eigene Funktion einhängen (-> postFn), die ,,ein Triplet aus Zeitpunkt in Sekunden, Wert an diesem Punkt und Zeitpunkt als String" als Parameter übergeben bekommt und ,,ein Array in gleichem Format zurückliefert" - also muss aus Wert an diesem Punkt - der ja dann aus Zeitstempel+Wert einer Messung besteht, (das was das Modul auf das reading geschrieben hat) aufgesplittet werden und als neues Triplet in das Array geschrieben werden, das zurückgeliefert wird.

Soweit die Theorie.

Beste Grüße
JOEK3R

McShire

#110
Hallo JOEK3R,

danke für die Info.
Wenn man die Funktion beim Auslesen oder bei der Ausgabe der Werte ins Log einhängen kann, dann ist das die Idee.
Ich hatte das so verstanden, dass die Funktion bei der Ausgabe des Plots (sie wird im .gplot-file eingetragen) zur Darstellung der Werte verwendet wird,
die dann nicht mehr aus dem Logfile entnommen werden, sondern aus dem logProxy-file. Das logProxy-file wiederum wird mit den Werten gefüllt,
die dem Logfile entnommen werden und mit der postFn-Funktion bearbeitet werden.
Das heißt für mich, im Logfile stehen alle Rohdaten, ggf auch doppelt und x-fach, aber im Plot werden sie korrekt ausgegeben.
Was ist bei meinen Überlegungen falsch.

Viele Grüße
Werner

J0EK3R

Moin Werner,

Du hast das genau richtig verstanden - wobei logproxy, wenn so parametriert, schon auf das Log-File (oder ein DbLog) zugreift. Es wird ,,dazwischengeschaltet".

Und die postFn bearbeitet dann die Rohdaten aus der Quelle und gibt sie an den Plot.

So zumindest mein Verständnis.

Schönen Tag und beste Grüße
JOEK3R

McShire

Hallo JOEK3R,

na dann viel Erfolg.
Dann ist aber der Hinweis für die Anwender wichtig, das kein neuer Plot aus dem Logfile erstellt werden darf,
sondern das vorhandene .gplot benutzt wird.

Viele Grüße
Werner



J0EK3R

So, ab Version V3.0.20 werden jetzt für die Sense-Geräte weitere readings geschrieben:

  • MeasurementDataTimestamp
  • MeasurementHumidity
  • MeasurementTemperature


2021-11-23_14:04:56 EG_Kueche_Sense MeasurementDataTimestamp: 2021-11-22T00:02:52.000+01:00
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementHumidity: 2021-11-22T00:02:52.000+01:00 45
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementTemperature: 2021-11-22T00:02:52.000+01:00 23.3
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementDataTimestamp: 2021-11-22T01:02:52.000+01:00
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementHumidity: 2021-11-22T01:02:52.000+01:00 46
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementTemperature: 2021-11-22T01:02:52.000+01:00 22.8
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementDataTimestamp: 2021-11-22T02:02:52.000+01:00
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementHumidity: 2021-11-22T02:02:52.000+01:00 46
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementTemperature: 2021-11-22T02:02:52.000+01:00 22.4
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementDataTimestamp: 2021-11-22T04:00:30.000+01:00
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementHumidity: 2021-11-22T04:00:30.000+01:00 46
2021-11-23_14:04:56 EG_Kueche_Sense MeasurementTemperature: 2021-11-22T04:00:30.000+01:00 22.4


MeasurementHumidity und MeasurementTemperature haben als Wert den "Zeitstempel der Messung Leerzeichen Wert".
Damit können wir den nächsten Schritt mit dem logproxy angehen.

Inzwischen holen die SmartDevices nur dann neue Messungen, wenn sich der ApplianceTDT ändert - beim Sense vermutlich alle 24 Stunden.

Damit wir gleich testen können, habe ich ein Kommando eingebaut, das diesen Mechanismus einmalig übergeht: debugForceUpdate.

Damit das kommando in der UI beim set auswählbar ist, muss das Attribut im SmartDevice debug 1 gesetzt werden.

Aber Vorsicht: bei jedem Aufruf des Kommandos debugForceUpdate werden alle Messungen der letzten 48 Stunden ins Log-File geschrieben.
Der Mechanismus, der das verhindern soll, wird einmalig außer Kraft gesetzt.

Bin gespannt...

Beste Grüße
J0EK3R

J0EK3R

ZitatDann ist aber der Hinweis für die Anwender wichtig, das kein neuer Plot aus dem Logfile erstellt werden darf,
sondern das vorhandene .gplot benutzt wird.

Ja klar. Der Plot wird nur von direkt FileLog auf logproxy umgestellt, so wie in der logproxy-Doku beschrieben.

McShire

#115
Hallo JOEK3R,


Downloading https://fhem.de/fhemupdate/controls_fhem.txt

fhem
nothing to do...
Downloading https://raw.githubusercontent.com/J0EK3R/fhem-grohe-ondus/master/controls_grohe_ondus.txt

grohe_ondus
UPD FHEM/74_GroheOndusSmartDevice.pm

New entries in the CHANGED file:
FHEM Grohe Ondus last changes:
2021-11-23
- net set command "debugForceUpdate"

Downloading https://www.rp-dev.de/fhem/entertaintv/controls_entertaintv.txt

entertaintv
nothing to do...
Calling /usr/bin/perl ./contrib/commandref_join.pl -noWarnings, this may take a while

update finished, "shutdown restart" is needed to activate the changes.

Please consider using the global attribute sendStatistics


Erfahrung und Ergebnisse folgen.
Viele Grüße
Werner

Fuxi

Ich kann leider nicht helfen ,da ich keine Sense Geräte habe,nur den Sense Guard.

McShire

Hallo JOEK3R,
anbei das Ergebnis.

2021-11-23_20:10:05 Unter_Wasseruhr debugForceUpdate
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T00:11:28.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T00:11:28.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T00:11:28.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T01:11:28.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T01:11:28.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T01:11:28.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T02:11:28.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T02:11:28.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T02:11:28.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T04:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T04:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T04:12:02.000+01:00 16.2
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T05:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T05:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T05:12:02.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T06:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T06:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T06:12:02.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T07:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T07:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T07:12:02.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T08:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T08:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T08:12:02.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T09:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T09:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T09:12:02.000+01:00 15.9
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T10:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T10:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T10:12:02.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T11:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T11:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T11:12:02.000+01:00 15.9
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T12:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T12:12:02.000+01:00 61
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T12:12:02.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T13:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T13:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T13:12:02.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T14:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T14:12:02.000+01:00 61
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T14:12:02.000+01:00 15.9
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T15:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T15:12:02.000+01:00 61
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T15:12:02.000+01:00 15.9
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T16:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T16:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T16:12:02.000+01:00 15.9
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T17:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T17:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T17:12:02.000+01:00 16
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T18:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T18:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T18:12:02.000+01:00 15.9
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T19:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T19:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T19:12:02.000+01:00 15.9
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T20:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T20:12:02.000+01:00 62
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T20:12:02.000+01:00 15.8
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T21:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T21:12:02.000+01:00 61
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T21:12:02.000+01:00 15.9
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T22:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T22:12:02.000+01:00 61
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T22:12:02.000+01:00 15.9
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-22T23:12:02.000+01:00
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementHumidity: 2021-11-22T23:12:02.000+01:00 61
2021-11-23_20:10:06 Unter_Wasseruhr MeasurementTemperature: 2021-11-22T23:12:02.000+01:00 16
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-23T00:12:02.000+01:00
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementHumidity: 2021-11-23T00:12:02.000+01:00 61
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementTemperature: 2021-11-23T00:12:02.000+01:00 16
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-23T01:12:02.000+01:00
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementHumidity: 2021-11-23T01:12:02.000+01:00 61
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementTemperature: 2021-11-23T01:12:02.000+01:00 15.9
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-23T02:12:02.000+01:00
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementHumidity: 2021-11-23T02:12:02.000+01:00 60
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementTemperature: 2021-11-23T02:12:02.000+01:00 15.9
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementDataTimestamp: 2021-11-23T04:11:28.000+01:00
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementHumidity: 2021-11-23T04:11:28.000+01:00 60
2021-11-23_20:10:07 Unter_Wasseruhr MeasurementTemperature: 2021-11-23T04:11:28.000+01:00 15.9


Gratulation.

Viele Grüße
Werner

McShire

Jetzt müssen nur der Timestamp in der jeweils ersten Zeile mit den Werten der zweiten und dritten Zeile verheiratet werden.

McShire

Korrektur, ich habe nicht genau hingesehen.
In den Zeilen mit den Meßwerten steht ja auch der Zeitstempel zum Wert.