FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Ruggy am 18 August 2021, 11:55:01

Titel: Synchroner Abruf von Temperatur und Feuchtigkeitdaten
Beitrag von: Ruggy am 18 August 2021, 11:55:01
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




Titel: Antw:Synchroner Abruf von Temperatur und Feuchtigkeitdaten
Beitrag von: MadMax-FHEM am 18 August 2021, 12:16:24
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
Titel: Antw:Synchroner Abruf von Temperatur und Feuchtigkeitdaten
Beitrag von: frank am 18 August 2021, 12:38:23
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?
Titel: Antw:Synchroner Abruf von Temperatur und Feuchtigkeitdaten
Beitrag von: Ruggy am 18 August 2021, 13:40:47
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)}