[GELÖST] Luftfeuchtealarm. Ein DOIF, alle Räume. Wie umsetzen?

Begonnen von CoolTux, 29 Juni 2017, 06:30:05

Vorheriges Thema - Nächstes Thema

CoolTux

Guten Morgen,

Ich habe eine Umsetzungsfrage. Selbst kann ich nicht beantworten ob es Sinnvoll ist oder sogar machbar, dahe rschreibe ich hier.

Es sollen die Sensoren in 5 Räumen überwacht werden und sobald ein Sensor mehr wie 70% misst möchte ich informiert werden. Genau so möchte ich informiert werden sobald der selbe Sensor wieder unter 65% fällt. So lange soll der Zustand beibehalten werden (cmd1) beibehalten werden.


((["^TempFeuchtSensorBadezimmer:^humidity"]
or ["^TempFeuchtSensorFlur:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"]) and [?$DEVICE:humidity] > 70 )

(set pushmsg msg 'Wohnungsstatus - Luftfeuchte' 'Der Sensor $DEVICE meldet eine zu hohe Luftfeuchtigkeit von [$DEVICE:humidity]% !' 'nexus5-marko' 1 '')


DOELSEIF ((["^TempFeuchtSensorBadezimmer:^humidity"]
or ["^TempFeuchtSensorFlur:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"]) and [?$DEVICE:humidity] < 65 )

(set pushmsg msg 'Wohnungsstatus - Luftfeuchte' 'Der Sensor $DEVICE meldet Normalisierung der Luftfeuchte auf [$DEVICE:humidity]% !' 'nexus5-marko' 0 '')


Nun habe ich ja ein Reading cmd_event, wo ich den Devicenamen des Devices darin finde welches den letzten cmd Wechsel ausgelöst hat. Bedeutet, sobald ein Sensor einen Wert liefert welcher ein CMD2 auslösen würde, soll vorher geprüft werden ob es der selbe Sensor ist welcher vorher ein CMD1 ausgelöst hat, wenn nicht soll CMD1 beibehalten werden.

Jemand eine Idee wie man das genau macht mit DOIF? Und was haltet Ihr generell von der rangehensweise? Sinnvoll? Nutzlos?



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Ich habe jetzt mal folgendes versucht. Keine Ahnung ob das Müll ist oder so gehen sollte
Im DOELSEIF Teil habe ich folgendes angehangen

and [?$SELF:cmd_event] eq "$DEVICE"



((["^TempFeuchtSensorBadezimmer:^humidity"]
or ["^TempFeuchtSensorFlur:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"])
and [?$DEVICE:humidity] > 70 )

(set pushmsg msg 'Wohnungsstatus - Luftfeuchte' 'Der Sensor $DEVICE meldet eine zu hohe Luftfeuchtigkeit von [$DEVICE:humidity]% !' 'nexus5-marko' 1 '')


DOELSEIF ((["^TempFeuchtSensorBadezimmer:^humidity"]
or ["^TempFeuchtSensorFlur:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"])
and [?$DEVICE:humidity] < 65 and [?$SELF:cmd_event] eq "$DEVICE" )

(set pushmsg msg 'Wohnungsstatus - Luftfeuchte' 'Der Sensor $DEVICE meldet Normalisierung der Luftfeuchte auf [$DEVICE:humidity]% !' 'nexus5-marko' 0 '')


Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

igami

Zitat von: CoolTux am 29 Juni 2017, 06:30:05
Jemand eine Idee wie man das genau macht mit DOIF? Und was haltet Ihr generell von der rangehensweise? Sinnvoll? Nutzlos?
Mit DOIF: Nein
Mit monitoring:Ja

Monitoring ist im Prinzip nur ein globaler watchdog.

defmod humidity_monitoring monitoring (TempFeuchtSensor(Badezimmer|Flur|KinZim|Schlafzimmer)|WandThermostatWohnzimmer_Weather):humidity:..+
attr humidity_monitoring errorFuncAdd {return 1\
   if(ReadingsVal($name, "humidity", 0) > 70;;\
return;;\
}
attr humidity_monitoring errorFuncRemove {return 1\
   if(ReadingsVal($name, "humidity", 0) < 65;;\
return;;\
}

Es werden dabei jedoch nur Listen erstellt. Das Versenden der Nachricht muss noch über ein notify, DOIF oder so erfolgen. Dabei kann man auf die Events "error add: <name>" und "error remove: <name>" reagieren.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

Edit: geht sogar noch einfacher mit regex:

defmod humidity_monitoring monitoring (TempFeuchtSensor(Badezimmer|Flur|KinZim|Schlafzimmer)|WandThermostatWohnzimmer_Weather):humidity:.[7-9][0-9] (TempFeuchtSensor(Badezimmer|Flur|KinZim|Schlafzimmer)|WandThermostatWohnzimmer_Weather):humidity:.[1-6][0-9]

Ist aber ungetestet.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

CoolTux

Vielen Dank für Deinen Beitrag. Sollte es mit DOIF nicht sinnvoll machbar sein, schaue ich mir monitoring gerne an.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Brockmann

Ich bin mir nicht sicher, ob mit Deiner Herangehensweise mit dem letzten Event eine stabile Lösung möglich ist. Theoretisch können ja auch zwei Räume gleichzeitig > 70 sein. Wie soll das DOIF da den Überblick behalten? Stabiler wäre es, wenn Du den Status der verschiedenen Sensoren als Readings im DOIF speicherst. Dann hast Du jeweils sicher Zugriff auf den vorherigen Zustand der Sensoren. In der DOIF-Commandref gibt es eine Batterie-Warnung, die nach diesem Prinzip funktioniert, die müsstest Du nur entsprechend anpassen:
Zitat von: CommandRef
Batteriewarnung per E-Mail verschicken

define di_battery DOIF ([":battery: low"] and [?$SELF:B_$DEVICE] ne "low")
({DebianMail('yourname@gmail.com', 'FHEM - battery warning from device: $DEVICE')}, setreading $SELF B_$DEVICE low)
DOELSEIF ([":battery: ok"] and [?$SELF:B_$DEVICE] ne "ok")
(setreading $SELF B_$DEVICE ok)

attr di_battery do always

Eine aktuelle Übersicht aller Batterie-Status entsteht gleichzeitig in den Readings des di_battery-DOIF-Moduls.

Vielleicht so:
DOIF ([":^humidity$"] and [$DEVICE:humidity] > 70 and [?$SELF:H_$DEVICE] ne "high")
(
set pushmsg msg 'Wohnungsstatus - Luftfeuchte' 'Der Sensor $DEVICE meldet eine zu hohe Luftfeuchtigkeit von [$DEVICE:humidity]% !' 'nexus5-marko' 1 '',
setreading $SELF H_$DEVICE high
)
DOELSEIF  ([":^humidity$"] and [$DEVICE:humidity] < 65 and [?$SELF:H_$DEVICE] ne "low")
(
set pushmsg msg 'Wohnungsstatus - Luftfeuchte' 'Der Sensor $DEVICE meldet Normalisierung der Luftfeuchte auf [$DEVICE:humidity]% !' 'nexus5-marko' 0 '',
setreading $SELF H_$DEVICE low
)
attr ... do always

Ungetestet und ohne Gewähr

CoolTux

An do always hatte ich auch schon gedacht. Würde aber auch in den sauren Apfel beißen und sagen eine Meldung reicht mir. Den Ansatz finde ich aber gut mit einem zusätzlichen Reading. Schaue ich mir mal an.

Danke Dir
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

@Brockmann

Ich habe Deine Idee umgesetzt und werde das die Tage über mal testen.
Noch mal vielen Dank für die tolle Idee.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Verdammt. Ich weiß das ich das schon mal irgendwo gelesen habe. Dennoch finde ich gerade keine Info darüber.

Ich möchte das im Ausführungsteil nicht $DEVICE gesendet wird sondern das Attribut alias vom $DEVICE. Kann da bitte einer kurz einen Tip geben.

Beim notify würde es so gehen

set pushmsg msg 'Wohnungsstatus - [$DEVICE:alias] meldet Normalisierung der Luftfeuchte auf [$DEVICE:humidity]% !' 'nexus5-marko' 0 ''
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

nils_

das kannst du doch auch beim doif so hinschreiben?!
viele Wege in FHEM es gibt!

CoolTux

Dachte ich auch. Aber nimmt er einfach nicht. Oder sagen wir mal so, er löst es nicht auf und sendet somit an der Stelle NICHTS
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

nils_

ääääh

aber $DEVICE:humidity löst er auf??


hat dein device denn auch ein alias?
poste doch mal ein list vom device in code-tags (das wollte ich schon immer mal sagen :);D ;D ;D
viele Wege in FHEM es gibt!

CoolTux

Also. Er löst $DEVICE:humidity immer auf.
Wenn ich einfach in der Commandline von FHEMWEB set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[TempFeuchtSensorFlur:alias] meldet Normalisierung der Luftfeuchte auf [TempFeuchtSensorFlur:humidity]% !' 'nexus5-marko' 0 '' eingebe kommt alles korrekt an. Also ja alias gibt es   ;D



Internals:
   CFGFN
   DEF        ((["^TempFeuchtSensorBadezimmer$:^humidity"]
or ["^TempFeuchtSensorFlur$:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer$:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"])
and [?$DEVICE:humidity] > 64
and [?$SELF:H_$DEVICE] ne 'high' )

(set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[$DEVICE:alias] meldet eine zu hohe Luftfeuchtigkeit von [$DEVICE:humidity]% !' 'nexus5-marko' 1 '',
setreading $SELF H_$DEVICE high)


DOELSEIF ((["^TempFeuchtSensorBadezimmer$:^humidity"]
or ["^TempFeuchtSensorFlur$:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer$:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"])
and [?$DEVICE:humidity] < 56
and [?$SELF:H_$DEVICE] ne 'low')

(set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[$DEVICE:alias] meldet Normalisierung der Luftfeuchte auf [$DEVICE:humidity]% !' 'nexus5-marko' 0 '',
setreading $SELF H_$DEVICE low)
   NAME       doifInnenraumLuftfeuchteAlarm
   NR         432
   NTFY_ORDER 50-doifInnenraumLuftfeuchteAlarm
   STATE      disabled
   TYPE       DOIF
   Readings:
     2017-06-29 09:47:28   cmd             0
     2017-06-29 09:47:31   last_cmd        initialized
     2017-06-29 09:47:31   mode            disabled
     2017-06-29 09:47:31   state           disabled
   Condition:
     0          (EventDoIf('^TempFeuchtSensorBadezimmer$',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorFlur$',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorKinZim',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorSchlafzimmer$',$hash,'^humidity',0) or EventDoIf('^WandThermostatWohnzimmer_Weather$',$hash,'^humidity',0)) and ReadingValDoIf($hash,'$DEVICE','humidity') > 64 and ReadingValDoIf($hash,'doifInnenraumLuftfeuchteAlarm','H_$DEVICE') ne 'high'
     1          (EventDoIf('^TempFeuchtSensorBadezimmer$',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorFlur$',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorKinZim',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorSchlafzimmer$',$hash,'^humidity',0) or EventDoIf('^WandThermostatWohnzimmer_Weather$',$hash,'^humidity',0)) and ReadingValDoIf($hash,'$DEVICE','humidity') < 56 and ReadingValDoIf($hash,'doifInnenraumLuftfeuchteAlarm','H_$DEVICE') ne 'low'
   Devices:
   Do:
     0:
       0          set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[$DEVICE:alias] meldet eine zu hohe Luftfeuchtigkeit von [$DEVICE:humidity]% !' 'nexus5-marko' 1 '', setreading doifInnenraumLuftfeuchteAlarm H_$DEVICE high
     1:
       0          set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[$DEVICE:alias] meldet Normalisierung der Luftfeuchte auf [$DEVICE:humidity]% !' 'nexus5-marko' 0 '', setreading doifInnenraumLuftfeuchteAlarm H_$DEVICE low
     2:
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Itimer:
   Regexp:
     0:
       0          ^TempFeuchtSensorBadezimmer$:^humidity
       1          ^TempFeuchtSensorFlur$:^humidity
       2          ^TempFeuchtSensorKinZim:^humidity
       3          ^TempFeuchtSensorSchlafzimmer$:^humidity
       4          ^WandThermostatWohnzimmer_Weather$:^humidity
     1:
       0          ^TempFeuchtSensorBadezimmer$:^humidity
       1          ^TempFeuchtSensorFlur$:^humidity
       2          ^TempFeuchtSensorKinZim:^humidity
       3          ^TempFeuchtSensorSchlafzimmer$:^humidity
       4          ^WandThermostatWohnzimmer_Weather$:^humidity
     All:
       0          ^TempFeuchtSensorBadezimmer$:^humidity
       1          ^TempFeuchtSensorFlur$:^humidity
       2          ^TempFeuchtSensorKinZim:^humidity
       3          ^TempFeuchtSensorSchlafzimmer$:^humidity
       4          ^WandThermostatWohnzimmer_Weather$:^humidity
   State:
     State:
Attributes:
   do         always



Internals:
   CFGFN
   DEF        30E0F9
   HMLAN1_MSGCNT 7569
   HMLAN1_RAWMSG E30E0F9,0000,30FC6EB5,FF,FFDD,04867030E0F900000000E444
   HMLAN1_RSSI -35
   HMLAN1_TIME 2017-06-29 09:49:14
   IODev      HMLAN1
   LASTInputDev HMLAN1
   MSGCNT     7569
   NAME       TempFeuchtSensorFlur
   NOTIFYDEV  global
   NR         62
   NTFY_ORDER 50-TempFeuchtSensorFlur
   STATE      T: 22.8 H: 68
   TYPE       CUL_HM
   lastMsg    No:04 - t:70 s:30E0F9 d:000000 00E444
   protLastRcv 2017-06-29 09:49:14
   rssi_at_HMLAN1 lst:-35 max:-34 cnt:7569 avg:-35.4 min:-41
   Helper:
     Dblog:
       Dewpoint:
         Logdbhistory:
           TIME       1498722554.23411
           VALUE      16.6
       Humidity:
         Logdbhistory:
           TIME       1498722554.23411
           VALUE      68
       Temperature:
         Logdbhistory:
           TIME       1498722554.23411
           VALUE      22.8
   Readings:
     2017-06-16 01:33:00   Activity        alive
     2016-06-21 05:40:03   D-firmware      1.3
     2016-06-21 05:40:03   D-serialNr      LEQ1083308
     2016-06-21 05:40:03   PairedTo        0x2AEE70
     2016-06-21 05:40:03   R-pairCentral   0x2AEE70
     2016-06-21 05:40:03   RegL_00.        01:00 02:01 0A:2A 0B:EE 0C:70 0F:00 18:00 00:00
     2017-06-29 09:49:14   battery         ok
     2017-06-29 09:49:14   dewpoint        16.6
     2017-06-29 09:49:14   humidity        68
     2017-06-29 08:59:55   statDewpointTendency 1h: -0.1 2h: +0.1 3h: +0.2 6h: -0.2
     2017-06-29 08:59:55   statHumidityTendency 1h: +0 2h: +1 3h: +2 6h: +2
     2017-06-29 08:59:55   statTemperatureTendency 1h: -0.1 2h: -0.1 3h: -0.2 6h: -0.7
     2017-06-29 09:49:14   state           T: 22.8 H: 68
     2017-06-29 09:49:14   temperature     22.8
   Helper:
     HM_CMDNR   4
     _98_statistics STATISTIKEN
     mId        00BC
     rxType     132
     supp_Pair_Rep 0
     Expert:
       def        1
       det        0
       raw        1
       tpl        0
     Io:
       newChn     +30E0F9,00,01,00
       nextSend   1498722554.25121
       rxt        0
       vccu       VCCU1
       p:
         30E0F9
         00
         01
         00
       prefIO:
         HMLAN1
     Mrssi:
       mNo        04
       Io:
         HMLAN1     -33
     Prt:
       bErr       0
       sProc      0
     Q:
       qReqConf
       qReqStat
     Role:
       chn        1
       dev        1
     Rssi:
       At_hmlan1:
         avg        -35.4086405073327
         cnt        7569
         lst        -35
         max        -34
         min        -41
     Shadowreg:
     Tmpl:
Attributes:
   IODev      HMLAN1
   IOgrp      VCCU1:HMLAN1
   actCycle   000:10
   actStatus  alive
   alias      Klimasensor Flur
   autoReadReg 4_reqStatus
   event-on-change-reading battery,statDewpointTendency,statHumidityTendency,statTemperatureTendency
   event-on-update-reading temperature,humidity,dewpoint
   expert     2_full
   firmware   1.3
   model      HM-WDS40-TH-I-2
   peerIDs    00000000,
   serialNr   LEQ1083308
   subType    THSensor


;D ;D ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net