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
Hallo und Wilkommen.
Evtl kann dir das Modul weiterhelfen: https://commandref.fhem.de/#statistics
Damit kannst du auch Durchschnittswerte berechnen lassen.
Gruß
Für solche einfachen Dinge bin ich seit langem Fan vom pahs movingAverage -> https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen
Ach guck. Das hatte ich gar nicht auf dem Schirm 8)
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?
poste mal ein List von deinem "ESPEasy_ESPSensor1_TempHum1.
Sind die 60 Sekunden nicht etwas kurz ? wie oft kommen denn deine Werte ?
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
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))}
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
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.
Fantastisch,
es scheint jetzt zu funktionieren.
Recht herzlichen Dank bis dahin :)
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