Hauptmenü

DHT22 Mittelwerte bilden

Begonnen von Saibot88, 22 August 2018, 08:23:12

Vorheriges Thema - Nächstes Thema

Saibot88

Hallo zusammen,

ich bin neu in diesem Forum und versuche mich derzeit in das Thema Fhem einzuarbeiten. Aus aktuellen Anlass versuche ich grad eine Taupunktgesteuerte Lüftung für meinen Keller zu entwickeln.
Temperatur und Luftfeuchtigkeit werden jeweils von einem DHT22 erfasst und mit einem ESP8266 (ESPeasy) an den Raspberry mit installiertem Fhem geschickt. Im Fhem werden mir alle Werte auch wunderbar angezeigt. Leider finde ich, schwanken die Werte des DHT22 recht "stark" (z.B. +-2°C). Um das etwas zu entschärfen, wollte ich eine gewisse Anzahl an Messwerten aufnehmen und daraus einen Mittelwert erstellen. Als Beispiel der DHT sendet alle 60s die aktuellen Werte und Fhem ermittelt aus den jeweils letzten 5 Werten einen Mittelwert. Somit erhalte ich alle 5min einen neuen Mittelwert. Leider fehlt mir hierfür der Ansatz.

Mir kam aber noch eine andere Idee in den Sinn. Ist es vllt. sogar möglich, dass der ESP mittels ESPeasy direkt einen Mittelwert bildet, den er dann an Fhem sendet?

Habt Ihr evtl. Ideen oder Vorschläge, wie man das am besten umsetzen kann?

Gruß, Tobias

darkness

Hallo und Wilkommen.

Evtl kann dir das Modul weiterhelfen: https://commandref.fhem.de/#statistics
Damit kannst du auch Durchschnittswerte berechnen lassen.


Gruß

Wzut

Für solche einfachen Dinge bin ich seit langem Fan vom pahs movingAverage -> https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

darkness

Ach guck. Das hatte ich gar nicht auf dem Schirm  8)

Saibot88

Danke für die schnellen Antworten.

den movinAverage hab ich jetz mal schnell geteste. Funktioniert soweit auch, allerdings nur für einen Wert. Wenn ich 2 userreadings einfügen will, wird mir anscheinend der Mittelwert aus Temperatur und Luftfeuchte berechnet. Folgenden Befehl hab ich als userReading eingefügt:

avgTemp {sprintf("%.0f",movingAverage("ESPEasy_ESPSensor1_TempHum1","Temp",60))} , avgHum {sprintf("%.0f",movingAverage("ESPEasy_ESPSensor1_TempHum1","Hum",60))}

Kann diese Funktion nur einmal in einem userReadings angegeben werden?
   

Wzut

poste mal ein List von deinem "ESPEasy_ESPSensor1_TempHum1.
Sind die 60 Sekunden nicht etwas kurz ? wie oft kommen denn deine Werte ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Saibot88

Die Werte kommen alle 5s, ich habe das erstmal so kurz eingestellt, damit ich im Testlauf eine schnelle Änderung habe und nicht ein paar Minuten warten muss.

2018-08-22 09:59:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 69 Tem: 33
2018-08-22 09:59:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 48
2018-08-22 09:59:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 09:59:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 absFeuchte: 24.5
2018-08-22 09:59:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 Taup: 26.6
2018-08-22 09:59:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 48
2018-08-22 09:59:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Temp: 31
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 67
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 67 Tem: 31
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 absFeuchte: 21.4
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Taup: 24.2
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 Temp: 31
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 67
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 67 Tem: 31
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 absFeuchte: 21.4
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 Taup: 24.2
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:14 ESPEasy ESPEasy_ESPSensor1_TempHum1 Temp: 33
2018-08-22 10:00:14 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:14 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:14 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 69
2018-08-22 10:00:14 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:14 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50

Wzut

das war jetzt aber kein list vom Device sondern ein Auszug des Event Monitors.
Anyway , solche Ausgaben bitte immer in Code Tags setzen, macht das lesen wesentlich leichter.
fällt dir an dem Abschnit etwas auf  ? :
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Temp: 31
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 67
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 67 Tem: 31
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 50
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 absFeuchte: 21.4
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Taup: 24.2
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 49
2018-08-22 10:00:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 5

Im gleichen Event wurde 4 x avgTemp berechnet und 4 x avgHum, die Datenflut würde ich auf zwei Arten etwas eindämmen, zum einen mittels event-on-change reading und bei deinen userReadings einschränken wann sie neu berechnet werden sollen, ala
avgTemp:Temp.* {sprintf("%.0f",movingAverage($name,"Temp",60))},
avgHum:Hum.* {sprintf("%.0f",movingAverage($name,"Hum",60))}
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Saibot88

Soo folgendermaßen sieht es jetzt aus. Leider immer noch nicht mit dem gewünschten erfolg.

Internals:
   DEF        192.168.3.200 80 ESPBridge ESPSensor1_TempHum1
   ESPBridge_MSGCNT 720
   ESPBridge_TIME 2018-08-22 11:17:44
   ESP_BUILD  20102
   ESP_BUILD_GIT mega-20180815
   ESP_BUILD_NOTES  - Mega
   ESP_NODE_TYPE_ID 17: ESP Easy Mega
   ESP_SLEEP  0
   ESP_UNIT   0
   ESP_VERSION 2
   HOST       192.168.3.200
   IDENT      ESPSensor1_TempHum1
   INTERVAL   300
   IODev      ESPBridge
   LASTInputDev ESPBridge
   MSGCNT     720
   NAME       ESPEasy_ESPSensor1_TempHum1
   NOTIFYDEV  global
   NR         27
   NTFY_ORDER 50-ESPEasy_ESPSensor1_TempHum1
   PORT       80
   STATE      Hum: 69 Tem: 30
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    1.39
   READINGS:
     2018-08-22 11:17:44   Hum             69
     2018-08-22 11:17:44   Taup            23.7
     2018-08-22 11:17:44   Temp            30
     2018-08-22 11:17:44   absFeuchte      20.9
     2018-08-22 11:17:44   avgHum          38
     2018-08-22 11:17:44   avgTemp         37
     2018-08-22 11:13:20   presence        present
     2018-08-22 11:17:44   state           Hum: 69 Tem: 30
   helper:
     fpc        1534925878
     history:
       ARRAY(0x1f6a958)
       ARRAY(0x20c9550)
       ARRAY(0x2215038)
       ARRAY(0x20e9920)
       ARRAY(0x2215918)
       ARRAY(0x221a510)
       ARRAY(0x2217828)
       ARRAY(0x220de48)
       ARRAY(0x2215308)
       ARRAY(0x20aa0e8)
       ARRAY(0x1ddae60)
       ARRAY(0x20ca890)
       ARRAY(0x2199448)
       ARRAY(0x220da88)
       ARRAY(0x221a5a0)
       ARRAY(0x2215e28)
       ARRAY(0x20a5f98)
       ARRAY(0x2219c70)
       ARRAY(0x20c9a48)
       ARRAY(0x1f63748)
       ARRAY(0x2215c00)
       ARRAY(0x2198c08)
       ARRAY(0x1fe6560)
       ARRAY(0x22185a8)
       ARRAY(0x1f631a8)
     pm:
       Encode     1
       JSON       1
     received:
       Hum        1534929464
       Temp       1534929464
Attributes:
   IODev      ESPBridge
   Interval   300
   event-on-change-reading .*
   group      ESPEasy Device
   presenceCheck 1
   readingSwitchText 1
   room       ESPEasy
   setState   3
   userReadings avgTemp:Temp.* {sprintf("%.0f",movingAverage($name,"Temp",60))},
avgHum:Hum.* {sprintf("%.0f",movingAverage($name,"Hum",60))}


2018-08-22 11:14:44 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 67
2018-08-22 11:14:44 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 46
2018-08-22 11:14:44 ESPEasy ESPEasy_ESPSensor1_TempHum1 Temp: 30
2018-08-22 11:14:44 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 46
2018-08-22 11:14:44 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 67 Tem: 30
2018-08-22 11:14:44 ESPEasy ESPEasy_ESPSensor1_TempHum1 absFeuchte: 20.3
2018-08-22 11:14:44 ESPEasy ESPEasy_ESPSensor1_TempHum1 Taup: 23.2
2018-08-22 11:14:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 Temp: 32
2018-08-22 11:14:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 45
2018-08-22 11:14:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 68
2018-08-22 11:14:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 45
2018-08-22 11:14:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 68 Tem: 32
2018-08-22 11:14:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 absFeuchte: 22.9
2018-08-22 11:14:59 ESPEasy ESPEasy_ESPSensor1_TempHum1 Taup: 25.4
2018-08-22 11:15:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 69
2018-08-22 11:15:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 47
2018-08-22 11:15:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Temp: 33
2018-08-22 11:15:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgTemp: 47
2018-08-22 11:15:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 69 Tem: 33
2018-08-22 11:15:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 absFeuchte: 24.5
2018-08-22 11:15:04 ESPEasy ESPEasy_ESPSensor1_TempHum1 Taup: 26.6
2018-08-22 11:15:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 68
2018-08-22 11:15:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 avgHum: 48
2018-08-22 11:15:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 Temp: 32
2018-08-22 11:15:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 Hum: 68 Tem: 32
2018-08-22 11:15:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 absFeuchte: 22.9
2018-08-22 11:15:09 ESPEasy ESPEasy_ESPSensor1_TempHum1 Taup: 25.4


Wzut

#9
Deine userReadings sind ok , das Problem liegt im Wiki ....
Bsp  Wiki :
push(@{$hash->{helper}{history}},\@new);
Bsp bei mir :
push(@{$hash->{READINGS}{$reading}{"history"}},\@new);
D.h. der Wiki Code kann nur einen Mittelwert pro Device ( sieht man ja bei dir ) hingegen meine Version in der 99_myUtlis hat diese Einschränkung nicht. IMHO hatte ich den damals direkt aus einem Posting von pah und nicht aus dem Wiki. Gib mal im Bereich Codeschnippsel moving Average  oder gleitende Mittelwerte in das Suchfeld ein.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Saibot88

Fantastisch,
es scheint jetzt zu funktionieren.

Recht herzlichen Dank bis dahin  :)

Prof. Dr. Peter Henning

Sieh an, in dem alten Wiki-Beispiel steht noch der Code von 2015 drin...

Ich habe das gerade durch den Code ersetzt, der seitdem bei mir im Einsatz ist. Der "history"-Hash wird dabei am Reading festgemacht.

LG

pah