FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Phill am 05 Mai 2015, 10:06:46

Titel: Mittelwert in Readings hinzufügen.
Beitrag von: Phill am 05 Mai 2015, 10:06:46
Hallo,

ich würde gerne zu meinem Feuchtefühler (OWDevice DS2438) einen Mittelwert hinzufügen. Aber über einen selbst bestimmten Zeitbereich. (1h oder 10h wie auch immer) So wie ich das verstehe fällt hierdurch "statistics" und "average" schon mal raus. Diese geben ja nur Tages/Monats-Werte usw. aus.

attr event-aggregator HIH4000/humidity:3600:linear:mean
Das hier ist eigentlich genau das was ich will, nur hätte ich gerne diesen Wert als extra Reading.

Also habe ich mit UserReading ein neues Reading angelegt  und auf dieses den event-aggregator angewendet.
attr userReadings mean_humidity {ReadingsVal("ow_klima_ht_2","HIH4000/humidity",0)}
attr event-aggregator mean_humidity:3600:linear:mean


In mean-humidity steht jetzt weiterhin der Wert der auch in HIH4000/humidity steht und in der Log wird alle Stunde eine 1 ausgegeben. Was mache ich falsch. Oder kann ich das irgendwie anders lösen?

Hintergrund: ich möchte den Echtzeitwert zur Anzeige bringen, aber von dem Mittelwert Grenzwerte ableiten.

Gruß und Danke schon mal im vorraus.
Titel: Antw:Mittelwert in Readings hinzufügen.
Beitrag von: Phill am 06 Mai 2015, 13:03:31
OK, habs allein gelöst. Aber wäre schön wenn sich trotzdem zu dem Problem oben jemand äußern könnte.

Nachdem ich festgestellt habe, dass der event-aggregator nur nach Ablauf der Interval-Zeit den Wert aktualisiert wäre das für mich auch wieder nicht das richtige gewesen. Also habe ich es mit dblog gelöst.

Also dblog installiert und ein kleine Perl Funktion welche mir die SQL-Befehle verarbeitet erzeugt. Jetzt kann ich in kombination von UserReading und der Perl Funktion einen echten Mittelwert bilden.
Das sieht dann so aus falls es jemand mal interessiert.
attr ow_klima_ht_3 userReadings mean_humidity {
my @r = getsql("SELECT AVG(VALUE)
  FROM history
  WHERE DEVICE = 'ow_klima_ht_3'
   AND READING = 'HIH4000/humidity'
   AND TIMESTAMP >= (NOW() - INTERVAL 1 HOUR)");
return $r[0][0]}


Wundert mich das einen echten Mittelwert noch keiner benötigt hat. Oder hab ich nur was übersehen.

Gibt es eigentlich eine dblog interne funktion um SQL Befehle an die Datenbank abzusetzen?
Titel: Antw:Mittelwert in Readings hinzufügen.
Beitrag von: stromer-12 am 06 Mai 2015, 23:22:31
Steht doch in der Commandref drin:

set <name> userCommand <validSqlStatement>
Titel: Antw:Mittelwert in Readings hinzufügen.
Beitrag von: Phill am 17 Mai 2015, 00:29:04
Ich dachte da eher an einen komfortablen Weg die Daten zu bekommen.

Zur Vollständigkeit.
{ my @a = $defs{"LOGDB_DEVICE"}{DBH}->selectrow_array("SQL STATEMENT") }
Titel: Antw:Mittelwert in Readings hinzufügen.
Beitrag von: wolfgang99 am 05 Mai 2016, 18:10:04
getsql: ist so eine perl-Funktion irgendwo im Standard? Oder wie sieht das genau aus? Nicht nur für Mittelwerte, sondern für alle möglichen Informationen per sql!
Titel: Antw:Mittelwert in Readings hinzufügen.
Beitrag von: Prof. Dr. Peter Henning am 05 Mai 2016, 20:10:00
Dafür habe ich eine nette kleine Lösung geschrieben, siehe hier, ist bei mir ständig im Einsatz.

http://www.fhemwiki.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen#Gleitender_Mittelwert_f.C3.BCr_beliebige_Readings

LG

pah