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
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 '')
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.
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.
Vielen Dank für Deinen Beitrag. Sollte es mit DOIF nicht sinnvoll machbar sein, schaue ich mir monitoring gerne an.
Grüße
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
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
@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
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 ''
das kannst du doch auch beim doif so hinschreiben?!
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
ääää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
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
Habe da mal eines neues Thema zu auf gemacht
https://forum.fhem.de/index.php/topic,73717.0.html