Hallo,
ich nutze FHEM u.a. als Kellerlüftung/entfeuchtung.
Grob gesagt soll gelüftet werden, wenn es außen trockener ist als im Keller (Taupunkt wird verglichen).
Es wurde auch so eingestellt, dass der Unterschied zwischen Keller und außen einen bestimmten Wert haben muß, bis die Lüfter einschalten.
Als Sensoren habe ich Xiaomi Temperatur- und Feuchtigkeitsensoren.
Für das gesamte Vorhaben gibt es bereits zwei Threads, welche sich damit beschäftigen und wo mir geholfen wurde.
https://forum.fhem.de/index.php/topic,116925.0.html
https://forum.fhem.de/index.php/topic,119456.30.html
Jetzt habe ich beobachtet, dass die absolute und auch relative Luftfeuchtigkeit im Keller beim Lüften ansteigt, obwohl es außen eigentlich trockener wäre (laut Taupunkt).
Kann es sein, dass die erfassten Daten von unterschiedlichen Zeitpunkten stammen, und der Lüfter eingeschaltet wird, obwohl die Daten nicht mehr stimmten.
Wann werden eigentlich die einzelnen Daten von den Sensoren abgerufen?
Kann man es beeinflussen, dass die Daten gleichzeitig abgerufen und ausgewertete werden?
Welchen Zeitpunkt "nimmt" eigentlich DOIF um die Daten miteinander zu vergleichen um dann zu entscheiden, dass gelüftet wird?
Welche Devices und weitere Infos werden für meine Fragen benötigt, falls mir jemand helfen möchte/ helfen kann und nicht die o.g. anderen beiden Threads durchgelesen werden müssten?
Vielen Dank
Ruggy
Abgerufen werde die Daten nicht wirklich bzw. kommt es eben drauf an, ob das DOIF durch einen Event getriggert wird bzw. durch welchen.
Die Events kommen "selbständig" von den jeweiligen Devices (und vorher von physischen Geräten).
Wird ein DOIF (oder auch notify) durch einen Event getriggert "läuft" es los und frägt dann auch Werte ab (nicht triggernde Readings etc.).
D.h. du musst eben dein DOIF durchkämmen und schauen durch "was" dein DOIF getriggert wird und welche Werte "nur" abgefragt werden.
Eine Zeitgleichheit wirst du nicht/nur schwer erreichen können, da viele Sensoren die verschiedenen Werte durchaus zu unterschiedlichen Zeiten liefern und zwar schon durch das physische Gerät selbst (z.B. Homematic, da kommen Temperatur und Luftfeuchte zu unterschiedlichen Zeitpunkten)...
...dadurch sind die Werte zu unterschiedlichen Zeiten aktuell und auch Events kommen eben, wenn sich Werte ändern.
Einfluss haben aber auch event-on-change-reading etc.
Allerdings wäre der "Algorithmus" deines DOIF schon sehr "eigenartig", wenn kleine Unterschiede wann die Temperatur etc. aktualisiert wird zu solchen Auswirkungen führt...
...da würde ich eher noch mal über das DOIF schauen, evtl. sind Hysteresen "falsch" o.ä.
Gruß, Joachim
entscheidend sind natürlich erst einmal die positionen der sensoren. misst der aussensensor auch wirklich die zuluft?
in welche richtung geht der luftstrom?
sind die messwerte beider sensoren bei identischer position auch identisch?
erhöht sich die innenfeuchtigkeit nur zu beginn der lüftung, oder auch über einen längeren zeitraum?
Habe mal nachgeschaut.
Die Daten der physischen Sensoren liegen ca. 40 Minuten auseinander.
Der Außensensor ist in der Nähe vom Rohr bei dem die Luft angesaugt wird.
Die Luftfeuchtigkeit nimmt kontinuierlich zu, wenn über einen längeren Zeitraum "intervallgelüftet" wird (mit der Steuerung).
Evlt. kann man es Anhand der Plots (siehe Anhang) nachvolziehen. Hier sieht man die Lüftungsintervalle, Temperatur und Feuchtigkeitsverlauf und im letzten Plot wie das Verhältnis von Taupunkt Keller und außen ist (EG Zimmer ist nur noch ein weiterer Sensor, welcher aber in die Lüftersteuerung nicht mit eingebunden ist).
Das DOIF beginnt, wenn der Taupunktunterschied von außen und Keller größer als 1.1 ist. Der Lüfter läuft dann für 1800 Sekunden und das ganze soll sich dann nach 3.000 Sekunden (repeatcmd) wiederholen.
(Die anderen Bedingungen mit der Temperatur sind zusätzlich, damit im Sommer der Keller nicht überhitzt und im Winter nicht zu viel abkühlt; dafür habe ich drei verschiedene DOIF für verschiedene Temperaturen)
Hier wäre das DOIF sozusagen für den Sommer als Beispiel:
Internals:
DEF ([deltadewpoint:state]>1.1 and
[KEL_LUFTFEUCHTIGKEIT:temperature]>=12 and
[AUS_LUFTFEUCHTIGKEIT:temperature]<[KEL_LUFTFEUCHTIGKEIT:temperature])
(set HUEDevice9 on-for-timer 1800)
DOELSE
(set HUEDevice9 off)
FUUID 6060f068-f33f-f59f-7b67-d2e5224f86ac0104
MODEL FHEM
NAME TAUPUNKT_LUEFTUNG_WARM
NOTIFYDEV deltadewpoint,global,AUS_LUFTFEUCHTIGKEIT,KEL_LUFTFEUCHTIGKEIT
NR 114
NTFY_ORDER 50-TAUPUNKT_LUEFTUNG_WARM
STATE cmd_1
TYPE DOIF
VERSION 24429 2021-05-12 19:22:50
Helper:
DBLOG:
state:
DbLog:
TIME 1629283212.06654
VALUE cmd_1
READINGS:
2021-08-18 13:04:24 Device deltadewpoint
2021-08-18 12:40:12 cmd 1
2021-08-18 12:40:12 cmd_event AUS_LUFTFEUCHTIGKEIT
2021-08-18 12:40:12 cmd_nr 1
2021-08-18 12:23:08 e_AUS_LUFTFEUCHTIGKEIT_temperature 12.63
2021-08-18 13:04:24 e_KEL_LUFTFEUCHTIGKEIT_temperature 13.41
2021-08-18 13:04:24 e_deltadewpoint_state 1.6
2021-08-10 13:10:19 mode enabled
2021-08-18 12:40:12 state cmd_1
2021-08-18 12:40:12 wait_timer 18.08.2021 13:30:12 cmd_1 AUS_LUFTFEUCHTIGKEIT
Regex:
accu:
collect:
cond:
AUS_LUFTFEUCHTIGKEIT:
0:
temperature ^AUS_LUFTFEUCHTIGKEIT$:^temperature:
KEL_LUFTFEUCHTIGKEIT:
0:
temperature ^KEL_LUFTFEUCHTIGKEIT$:^temperature:
deltadewpoint:
0:
state ^deltadewpoint$:^state:
attr:
cmdState:
repeatcmd:
3000
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'deltadewpoint','state')>1.1 and ::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')>=12 and ::ReadingValDoIf($hash,'AUS_LUFTFEUCHTIGKEIT','temperature')<::ReadingValDoIf($hash,'KEL_LUFTFEUCHTIGKEIT','temperature')
do:
0:
0 set HUEDevice9 on-for-timer 1800
1:
0 set HUEDevice9 off
helper:
DEVFILTER ^global$|^deltadewpoint$|^KEL_LUFTFEUCHTIGKEIT$|^AUS_LUFTFEUCHTIGKEIT$
NOTIFYDEV global|deltadewpoint|KEL_LUFTFEUCHTIGKEIT|AUS_LUFTFEUCHTIGKEIT
event 1.6
globalinit 1
last_timer 0
sleepdevice AUS_LUFTFEUCHTIGKEIT
sleepsubtimer 0
sleeptimer 0
timerdev deltadewpoint
timerevent 1.6
triggerDev deltadewpoint
timerevents:
1.6
timereventsState:
state: 1.6
triggerEvents:
1.6
triggerEventsState:
state: 1.6
internals:
readings:
all deltadewpoint:state KEL_LUFTFEUCHTIGKEIT:temperature AUS_LUFTFEUCHTIGKEIT:temperature
trigger:
uiState:
uiTable:
Attributes:
repeatcmd 3000
room Kellerlüftung
Das event-on-update-reading ist bei den zwei entsprechenden Sensoren so eingestellt
absFeuchte,dewpoint,temperature,humidity
Der Temperaturwert wird mit folgenden userReading vom Temperatursensor geholt (musste ich so machen, damit der Taupunkt berechnet werden kann.
temperature {ReadingsVal("KEL_TEMPERATUR","temperature",0)}
Hier wäre das List vom Device für die Senorenwerte:
Internals:
DEF sensor 34 IODev=deCONZ
FUUID 5f1bd2bf-f33f-f59f-4223-20393969640a9584
FVERSION 31_HUEDevice.pm:0.239120/2021-03-08
ID S34
INTERVAL
IODev deCONZ
NAME KEL_LUFTFEUCHTIGKEIT
NR 46
STATE ???
TYPE HUEDevice
lastupdated 2021-08-18 11:30:42
lastupdated_local 2021-08-18 13:30:42
manufacturername LUMI
modelid lumi.weather
name Keller
on 1
reachable 1
swversion 20161129
type ZHAHumidity
uniqueid 00:15:8d:00:02:72:0d:d0-01-0405
Helper:
DBLOG:
absFeuchte:
DbLog:
TIME 1629286242.64767
VALUE 11.5
dewpoint:
DbLog:
TIME 1629286242.64767
VALUE 13.2
humidity:
DbLog:
TIME 1629286242.64767
VALUE 98.64
temperature:
DbLog:
TIME 1629286242.64767
VALUE 13.41
READINGS:
2021-07-07 05:56:38 IODev deCONZ
2021-08-18 13:30:42 absFeuchte 11.5
2021-08-18 13:04:24 battery 35
2021-08-18 13:04:24 batteryPercent 35
2021-08-18 13:30:42 dewpoint 13.2
2020-12-21 07:56:38 fan on
2021-08-18 13:30:42 humidity 98.64
2021-06-22 02:18:03 lastseen 2021-06-22T00:24:19.014
2021-08-18 13:04:24 reachable 1
2021-08-18 13:30:42 temperature 13.41
helper:
devtype S
reachable 0
update_timeout 1
configList:
json:
e changed
id 34
r sensors
t event
uniqueid 00:15:8d:00:02:72:0d:d0-01-0405
state:
humidity 9864
lastupdated 2021-08-18T11:30:42.641
setList:
Attributes:
IODev deCONZ
event-on-update-reading absFeuchte,dewpoint,temperature,humidity
model lumi.weather
room Keller,Kellerlüftung
userReadings temperature {ReadingsVal("KEL_TEMPERATUR","temperature",0)}