Hallo zusammen,
ich habe eine Frage zum Pushover. Pushover habe ich bereits für einige Meldungen implementiert, bspw. zu niedriger Batteriestand, Temperatur unterhalb eines Grenzwertes etc. Das funktioniert auch wunderbar. Nun möchte ich eine Pushmitteilung auch für meine DOIF des Luftentfeuchters (https://forum.fhem.de/index.php/topic,129483.msg1237693.html#msg1237693 (https://forum.fhem.de/index.php/topic,129483.msg1237693.html#msg1237693)) implementieren. Dazu habe ich eine Abfrage über einen Sensor (MQTT2_lora_node05_module01) gemacht, falls der Wert des Sensors (up_uplink_message_decoded_payload_relative_humidity_2) überhalb eines Grenzwertes liegt, so schalte den Luftentfeuchter ein und sende eine Nachricht. Ebenfalls soll er eine Nachricht senden, wenn der Wert des Sensors unterhalb des Grenzwertes liegt. Zum Ausprobieren, schalte ich ein Licht an, damit der Luftentfeuchter nicht immer ein-und ausgeschaltet wird.
Das DOIF schaut wie folgt aus
([MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2] >[di_Keller_Entfeuchten:Grenzwert])
{my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', '');
my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', '');
my $lstat = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'status', '');
my $lsoll = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'humiditySetpoint', '');
my $luefter = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'fanSpeed', '');
my $modus = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'mode', '');
my $message = "empty";
if ($lstat eq "online"){
fhem ("set Wohnzimmer_Halogen on");
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist online. Ich schalte ihn nun ein. Die Einstellungen sind: \\n Luffeuchtigkeit SOLL: $lsoll \\n Lüftergeschwindigkeit: $luefter \\n Modus: $modus'");
}
elsif ($lstat eq "offline"){
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber OFFLINE. Checke die Stromzufuhr - ShellyPlugS1!'");;
}
else{
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber weder online noch offline. Systemerror!'");;
}
}
DOELSE
{if (ReadingsVal('Wohnzimmer_Halogen', 'state', '') eq "on"){
fhem ("set Wohnzimmer_Halogen off");
my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', '');
my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', '');
my $delay = ReadingsVal('di_Keller_Entfeuchten', 'Verzoegerung', '');
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='Im Keller liegt die Luftfeuchtigkeit nun bei $hum \% (Grenzwert: $thr \%). Ich schalte den Luftentfeuchter in $delay Sekunden aus.'");
}
}
Für die Vollständigkeit noch ein paar Attribute
userReadings: Verzoegerung 10, Grenzwert 60
wait: 0:[di_Keller_Entfeuchten:Verzoegerung]
webCmd: initialize:disable
Wenn ich nun den Grenzwert di_Keller_Entfeuchten:Grenzwert nun manuell ändere, bspw. auf 60, so erhalte ich eine Pushnachricht, je nachdem ob der Wert des Sensors über- oder unterhalb des Grenzwertes liegt. Wenn ich aber nun das reading des Sensors ändere mit
setreading MQTT2_lora_node05_module01 up_uplink_message_decoded_payload_relative_humidity_2 59
setreading MQTT2_lora_node05_module01 up_uplink_message_decoded_payload_relative_humidity_2 62
so erhalte ich keine Pushnachricht. Das Licht wird aber richtig geschaltet, d.h. das DOIF wird ausgeführt. Ich habe nun in global das verbose auf 4 gestellt und beobachte die log Datei auf dem raspberry mit
tail -n 20 /opt/fhem/log/fhem-2022-10.log -f | grep -i Push
Dabei mache ich folgende Beobachtung: Wenn ich den Grenzwert manuell setze, so sehe ich, dass die Nachricht erfolgreich gepusht wird:
2022.10.09 11:22:43 4: Pushover Pushnachricht: REQ messages.json/message=AUS&title=Keller&device=iphoneAB_xyz&token=yyy&user=xxx
2022.10.09 11:22:43 4: IP: api.pushover.net -> 137.220.59.207
2022.10.09 11:22:51 4: https://api.pushover.net:443/1/messages.json: HTTP response code 200
2022.10.09 11:22:51 4: Pushover Pushnachricht: RCV messages.json/message=AUS&title=Keller&device=iphoneAB_xyz&token=yyy&user=xxx
Wenn ich den Wert des readings (Wert des Sensors) ändere, so kommt ein RCV TIMEOUT
2022.10.09 11:23:13 4: Pushover Pushnachricht: REQ messages.json/device=iphoneAB_xyz&message=EIN&title=Keller&user=xxx&token=yyy
2022.10.09 11:23:13 4: IP: api.pushover.net -> 137.220.59.207
2022.10.09 11:23:21 4: Pushover Pushnachricht: RCV TIMEOUT messages.json/device=iphoneAB_xyz&message=EIN&title=Keller&user=xxx&token=yyy
Das ist reproduzierbar. Hat da jemand eine Idee?
Update
Ich habe ein notify geschrieben mit dem gleichen Ziel: eine Pushnachricht zu versenden. Hier tritt ebenfalls dasselbe Problem auf: Sobald ich auf das reading MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2 triggere, erhalte ich einen RCV Timeout. Wenn ich hingegen auf den Grenzwert di_Keller_Entfeuchten:Grenzwert triggere, bekomme ich die Pushnachricht.
Nun habe ich mir mal die CPU Last angeschaut, es sind immer 100% beim Readingsetzen von MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2. Diese CPU Last liegt für ca. 10 Sekunden bei 100%. Ich nehme an, dass die Pushnachricht bzw. deren Antwort einfach nicht bedient werden kann. Warum für ein Readingsetzen jedoch so viel Rechenpower benötigt wird, leuchtet mir noch nicht ein. Die ganzen UserReadings habe ich mal gelöscht - jedoch ohne Änderung.... ich suche mal weiter.
Ok, die Lösung des Problems war sehr simpel. Ich baue einfach ein bzw. zwei (für den DOELSE-Fall) ausreichende(s) Delay(s) zwischen dem Lesen der Variablen und dem Befehl die Pushnachricht zu senden ein. Außerdem war noch ein Denkfehler in der Nachricht für den DOELSE Fall. Diese wird natürlich auch nur verzögert gesendet. Deshalb hier nun meine Lösung (schön ist sie zwar nicht, aber funktioniert), falls es jemanden interessiert oder falls jemand eventuell auf das gleiche Problem stoßen sollte.
DOIF di_Keller_Entfeuchten
([MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2] >[di_Keller_Entfeuchten:Grenzwert])
{my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', '');
my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', '');
my $lstat = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'status', '');
my $lsoll = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'humiditySetpoint', '');
my $luefter = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'fanSpeed', '');
my $modus = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'mode', '');
sleep(6);
if ($lstat eq "online"){
fhem ("set MQTT2_DEHUMIDIFIER_A12345 on");
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist online. Ich schalte ihn nun ein. Die Einstellungen sind: \\n Luffeuchtigkeit SOLL: $lsoll \\n Lüftergeschwindigkeit: $luefter \\n Modus: $modus'");
}
elsif ($lstat eq "offline"){
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber OFFLINE. Checke die Stromzufuhr - ShellyPlugS1!'");;
}
else{
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber weder online noch offline. Systemerror!'");;
}
}
DOELSE
{if (ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'state', '') eq "on"){
sleep(1);
fhem ("set MQTT2_DEHUMIDIFIER_A12345 off");
my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', '');
my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', '');
my $delay = ReadingsVal('di_Keller_Entfeuchten', 'Verzoegerung', '');
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='Im Keller lag die Luftfeuchtigkeit nun bei $hum \% (Grenzwert: $thr \%) vor $delay Sekunden. Ich habe den Luftentfeuchter jetzt ausgeschaltet.'");
}
}
Warum postest du das nicht im Unterforum von DOIF?
Zitat von: help DOIF
Module: 98_DOIF.pm Maintainer: damian-s Forum: Automatisierung/DOIF
EDIT: du kannst das auch nachträglich verschieben... 8)
Ich kenne ja DOIF zu wenig (und nutze es nicht) aber die sleep sehen mir nach Perl-sleep aus?
-> die blockieren!
Und wenn dem so ist, dann ist das sicher nicht die Lösung sondern (denke ich unabhängig davon) kaschiert das nur das eigentliche Problem.
Hilfreich wäre auch ein KOMPLETTES list des DOIF nicht "zerhackt"...
(hier ein wenig DOIF hier ein paar Attribute und Readings? Wozu? lassen wir einfach weg ;) )
...und auch der/des anderen beteiigten Devices "MQTT2_lora_node05_module01" und evtl. auch von "MQTT2_DEHUMIDIFIER_A12345"...
EDIT: gibt es weitere notify/DOIF etc. die auf deine Events reagieren? Mehr sieht man auch, wenn man mit dem Eventmonitor arbeitet...
Gruß, Joachim
Hallo Joachmin,
vielen Dank für die Antwort.
1) => Thema ist verschoben
2) => ja, das ist in perl; schön ist es nicht; es blockiert wahrscheinlich wie du sagst
3) => anbei (siehe unten die list des DOIFs sowie der beteiligten Devices); habe noch bisschen mit den delayzeiten gespielt
4) => Nein, das ist das einzige DOIF (ich habe noch ein notify implentiert, wieder gelöscht und ein weiteres DOIF, das deaktiviert ist). Event Monitor ist auch noch ein guter Hinweis, danke auch dafür.
list di_Keller_Entfeuchten
Internals:
DEF ([MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2] >[di_Keller_Entfeuchten:Grenzwert])
{my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', '');
my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', '');
my $lstat = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'status', '');
my $lsoll = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'humiditySetpoint', '');
my $luefter = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'fanSpeed', '');
my $modus = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'mode', '');
sleep(20);
if ($lstat eq "online"){
fhem ("set MQTT2_DEHUMIDIFIER_A12345 on");
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist online. Ich schalte ihn nun ein. Die Einstellungen sind: \\n Luffeuchtigkeit SOLL: $lsoll \\n Lüftergeschwindigkeit: $luefter \\n Modus: $modus'");
}
elsif ($lstat eq "offline"){
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber OFFLINE. Checke die Stromzufuhr - ShellyPlugS1!'");;
}
else{
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber weder online noch offline. Systemerror!'");;
}
}
DOELSE
{if (ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'state', '') eq "on"){
sleep(1);
fhem ("set MQTT2_DEHUMIDIFIER_A12345 off");
my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', '');
my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', '');
my $delay = ReadingsVal('di_Keller_Entfeuchten', 'Verzoegerung', '');
fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='Im Keller lag die Luftfeuchtigkeit nun bei $hum \% (Grenzwert: $thr \%) vor $delay Sekunden. Ich habe den Luftentfeuchter jetzt ausgeschaltet.'");
}
}
FUUID xxx
MODEL FHEM
NAME di_Keller_Entfeuchten
NOTIFYDEV di_Keller_Entfeuchten,global,MQTT2_lora_node05_module01
NR 139
NTFY_ORDER 50-di_Keller_Entfeuchten
STATE initialized
TYPE DOIF
VERSION 26444 2022-09-25 16:29:19
eventCount 39
OLDREADINGS:
READINGS:
2022-10-10 00:18:36 Grenzwert 60
2022-10-10 00:16:12 Verzoegerung 3600
2022-10-11 18:55:52 cmd 0
2022-10-11 18:55:52 mode enabled
2022-10-11 18:55:52 state initialized
Regex:
accu:
collect:
cond:
MQTT2_lora_node05_module01:
0:
up_uplink_message_decoded_payload_relative_humidity_2 ^MQTT2_lora_node05_module01$:^up_uplink_message_decoded_payload_relative_humidity_2:
di_Keller_Entfeuchten:
0:
Grenzwert ^di_Keller_Entfeuchten$:^Grenzwert:
attr:
cmdState:
wait:
0:
20
1:
[di_Keller_Entfeuchten:Verzoegerung]
waitdel:
condition:
0 ::ReadingValDoIf($hash,'MQTT2_lora_node05_module01','up_uplink_message_decoded_payload_relative_humidity_2') >::ReadingValDoIf($hash,'di_Keller_Entfeuchten','Grenzwert')
do:
0:
0 {my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', ''); my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', ''); my $lstat = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'status', ''); my $lsoll = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'humiditySetpoint', ''); my $luefter = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'fanSpeed', ''); my $modus = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'mode', ''); sleep(20); if ($lstat eq "online"){ fhem ("set MQTT2_DEHUMIDIFIER_A12345 on"); fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist online. Ich schalte ihn nun ein. Die Einstellungen sind: \\n Luffeuchtigkeit SOLL: $lsoll \\n Lüftergeschwindigkeit: $luefter \\n Modus: $modus'"); } elsif ($lstat eq "offline"){ fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber OFFLINE. Checke die Stromzufuhr - ShellyPlugS1!'");; } else{ fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber weder online noch offline. Systemerror!'");; } }
1:
0 {if (ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'state', '') eq "on"){ sleep(1); fhem ("set MQTT2_DEHUMIDIFIER_A12345 off"); my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', ''); my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', ''); my $delay = ReadingsVal('di_Keller_Entfeuchten', 'Verzoegerung', ''); fhem ("set Pushnachricht msg device='iphoneAB_xyz' title='Keller' message='Im Keller lag die Luftfeuchtigkeit nun bei $hum \% (Grenzwert: $thr \%) vor $delay Sekunden. Ich habe den Luftentfeuchter jetzt ausgeschaltet.'"); } }
helper:
NOTIFYDEV di_Keller_Entfeuchten,global,MQTT2_lora_node05_module01
globalinit 1
last_timer 0
sleeptimer -1
readings:
all MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2 di_Keller_Entfeuchten:Grenzwert
uiState:
uiTable:
Attributes:
devStateIcon disabled:15px-red:initialize initialize:15px-green:disable
room System
userReadings Verzoegerung 10,
Grenzwert 63
wait 20:[di_Keller_Entfeuchten:Verzoegerung]
webCmd initialize:disable
list MQTT2_DEHUMIDIFIER_A12345
Internals:
CID DEHUMIDIFIER_A12345
DEF DEHUMIDIFIER_A12345
FUUID xxx
IODev MQTTserver
LASTInputDev MQTTserver
MQTTserver_CONN MQTTserver_192.168.0.101_54290
MQTTserver_MSGCNT 5312
MQTTserver_TIME 2022-10-11 19:04:32
MSGCNT 5312
NAME MQTT2_DEHUMIDIFIER_A12345
NR 130
STATE off
TYPE MQTT2_DEVICE
eventCount 110
READINGS:
2022-10-09 23:30:33 IODev MQTTserver
2022-10-11 18:52:40 availability_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/status
2022-10-11 18:52:40 command_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/command
2022-10-11 18:52:40 device_class dehumidifier
2022-10-11 18:52:40 device_identifiers_1 DEHUMIDIFIER-A12345
2022-10-11 18:52:40 device_manufacturer Midea Group Co., Ltd.
2022-10-11 18:52:40 device_model Generic Dehumidifier
2022-10-11 18:52:40 device_name DEHUMIDIFIER-A12345
2022-10-11 18:52:40 device_sw_version 2021.08.0
2022-10-11 19:04:32 errorCode 0
2022-10-11 19:04:32 fanSpeed medium
2022-10-11 19:04:32 humidityCurrent 62
2022-10-11 19:04:32 humiditySetpoint 45
2022-10-11 18:52:40 icon mdi:wifi
2022-10-11 18:52:40 json_attributes_template {"ssid": "{{value_json.wifi.ssid}}", "ip": "{{value_json.wifi.ip}}"}
2022-10-11 18:52:40 json_attributes_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/state
2022-10-11 18:52:40 max_humidity 85
2022-10-11 18:52:40 min_humidity 35
2022-10-11 19:04:32 mode continuous
2022-10-11 18:52:40 mode_command_template {"mode": "{{value}}"}
2022-10-11 18:52:40 mode_command_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/command
2022-10-11 18:52:40 mode_state_template {{value_json.mode}}
2022-10-11 18:52:40 mode_state_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/state
2022-10-11 18:52:40 modes_1 setpoint
2022-10-11 18:52:40 modes_2 continuous
2022-10-11 18:52:40 modes_3 smart
2022-10-11 18:52:40 modes_4 clothesDrying
2022-10-11 18:52:40 name DEHUMIDIFIER-A12345 Dehumidifier
2022-10-11 18:52:40 payload_off {"state": "off"}
2022-10-11 18:52:40 payload_on {"state": "on"}
2022-10-11 18:52:40 preset_mode_command_template {"fanSpeed": "{{value}}"}
2022-10-11 18:52:40 preset_mode_command_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/command
2022-10-11 18:52:40 preset_mode_state_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/state
2022-10-11 18:52:40 preset_mode_value_template {{value_json.fanSpeed}}
2022-10-11 18:52:40 preset_modes_1 low
2022-10-11 18:52:40 preset_modes_2 medium
2022-10-11 18:52:40 preset_modes_3 high
2022-10-11 19:04:32 state off
2022-10-11 18:52:40 state_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/state
2022-10-11 18:52:40 state_value_template {"state": "{{value_json.state}}"}
2022-10-11 18:52:40 status online
2022-10-11 18:52:40 target_humidity_command_template {"humiditySetpoint": {{value | int}}}
2022-10-11 18:52:40 target_humidity_command_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/command
2022-10-11 18:52:40 target_humidity_state_template {{value_json.humiditySetpoint | int}}
2022-10-11 18:52:40 target_humidity_state_topic esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/state
2022-10-11 18:52:40 unique_id DEHUMIDIFIER-A12345_dehumidifier
2022-10-11 18:52:40 unit_of_measurement %
2022-10-11 18:52:40 value_template {{value_json.humidityCurrent}}
2022-10-11 19:04:32 wifi_ip 192.168.0.101
2022-10-11 19:04:32 wifi_rssi -43
2022-10-11 19:04:32 wifi_ssid xxx
Attributes:
event-min-interval humidityCurrent:3600
event-on-change-reading errorCode,fanSpeed,humidityCurrent:3,humiditySetpoint,mode,state,status
readingList DEHUMIDIFIER_A12345:esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/status:.* status
DEHUMIDIFIER_A12345:homeassistant/sensor/esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345_wifi/config:.* { json2nameValue($EVENT) }
DEHUMIDIFIER_A12345:homeassistant/sensor/esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345_humidity/config:.* { json2nameValue($EVENT) }
DEHUMIDIFIER_A12345:homeassistant/fan/esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345_fan/config:.* { json2nameValue($EVENT) }
DEHUMIDIFIER_A12345:homeassistant/humidifier/esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345_dehumidifier/config:.* { json2nameValue($EVENT) }
DEHUMIDIFIER_A12345:esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/state:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE
setList humiditySetpoint:slider,40,5,75 esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/command {"humiditySetpoint": "$EVTPART1"}
on esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/command {"state": "on"}
off esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/command {"state": "off"}
modeSet:uzsuDropDown,setpoint,continuous,smart,clothesDrying esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/command {"mode": "$EVTPART1"}
fanSpeedSet:uzsuDropDown,low,medium,high esp8266-midea-dehumidifier/DEHUMIDIFIER-A12345/command {"fanSpeed": "$EVTPART1"}
list MQTT2_lora_node05_module01
Internals:
CID lora_node05_module01
DEF lora_node05_module01
FUUID xxx
IODev MQTT_lora_node05
LASTInputDev MQTT_lora_node05
MQTT_lora_node05_MSGCNT 40
MQTT_lora_node05_TIME 2022-10-11 18:11:24
MSGCNT 40
NAME MQTT2_lora_node05_module01
NR 137
STATE ???
TYPE MQTT2_DEVICE
eventCount 78
READINGS:
2022-10-09 23:30:33 IODev MQTT_lora_node05
2022-10-11 18:11:24 RSSI -103
2022-10-11 18:11:24 SNR 4
2022-10-04 22:51:17 associatedWith MQTT2_MQTT_lora_node05
2022-10-11 18:11:24 firmware_version 2.1.2.0
2022-10-04 23:06:08 queued_correlation_ids_1 as:conn:xxx
2022-10-04 23:06:08 queued_correlation_ids_2 as:downlink:xxx
2022-10-04 23:06:08 queued_downlink_queued_correlation_ids_1 as:conn:xxx
2022-10-04 23:06:08 queued_downlink_queued_correlation_ids_2 as:downlink:xxx
2022-10-09 23:14:47 queued_downlink_queued_f_port 1
2022-10-04 23:06:08 queued_downlink_queued_frm_payload AA4Q
2022-10-04 23:06:08 queued_downlink_queued_priority NORMAL
2022-10-04 23:06:08 queued_end_device_ids_application_ids_application_id lora-node05
2022-10-04 23:06:08 queued_end_device_ids_device_id module01
2022-10-04 23:55:23 sent_correlation_ids_1 as:conn:xxx
2022-10-04 23:55:23 sent_correlation_ids_10 ns:tx_ack:xxx
2022-10-04 23:55:23 sent_correlation_ids_11 ns:uplink:xxx
2022-10-04 23:55:23 sent_correlation_ids_12 rpc:/ttn.lorawan.v3.GsNs/HandleUplink:xxx
2022-10-04 23:55:23 sent_correlation_ids_13 rpc:/ttn.lorawan.v3.GsNs/ReportTxAcknowledgment:xxx
2022-10-04 23:55:23 sent_correlation_ids_14 rpc:/ttn.lorawan.v3.NsAs/HandleUplink:xxx
2022-10-04 23:55:23 sent_correlation_ids_15 rpc:/ttn.lorawan.v3.NsGs/ScheduleDownlink:xxx
2022-10-04 23:55:23 sent_correlation_ids_2 as:downlink:xxx
2022-10-04 23:55:23 sent_correlation_ids_3 as:up:xxx
2022-10-04 23:55:23 sent_correlation_ids_4 gs:conn:xxx
2022-10-04 23:55:23 sent_correlation_ids_5 gs:tx_ack:xxx
2022-10-04 23:55:23 sent_correlation_ids_6 gs:up:host:xxx
2022-10-04 23:55:23 sent_correlation_ids_7 gs:uplink:xxx
2022-10-04 23:55:23 sent_correlation_ids_8 ns:downlink:xxx
2022-10-04 23:55:23 sent_correlation_ids_9 ns:transmission:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_1 as:conn:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_10 ns:uplink:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_11 rpc:/ttn.lorawan.v3.GsNs/HandleUplink:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_12 rpc:/ttn.lorawan.v3.GsNs/ReportTxAcknowledgment:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_13 rpc:/ttn.lorawan.v3.NsGs/ScheduleDownlink:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_2 as:downlink:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_3 gs:conn:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_4 gs:tx_ack:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_5 gs:up:host:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_6 gs:uplink:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_7 ns:downlink:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_8 ns:transmission:xxx
2022-10-04 23:55:23 sent_downlink_sent_correlation_ids_9 ns:tx_ack:xxx
2022-10-04 23:55:23 sent_downlink_sent_f_cnt 128
2022-10-04 23:55:23 sent_downlink_sent_f_port 1
2022-10-04 23:55:23 sent_downlink_sent_frm_payload AA4Q
2022-10-04 23:55:23 sent_downlink_sent_priority HIGHEST
2022-10-04 23:55:23 sent_downlink_sent_session_key_id AYN1oKFVazUfWPHm8cNndA==
2022-10-04 23:55:23 sent_end_device_ids_application_ids_application_id lora-node05
2022-10-04 23:55:23 sent_end_device_ids_dev_addr xxx
2022-10-04 23:55:23 sent_end_device_ids_dev_eui xxx
2022-10-04 23:55:23 sent_end_device_ids_device_id module01
2022-10-04 23:55:23 sent_end_device_ids_join_eui xxx
2022-10-04 23:55:23 sent_received_at 2022-10-04T21:55:23.383848641Z
2022-10-11 18:11:24 up_correlation_ids_1 as:up:xxx
2022-10-11 18:11:24 up_correlation_ids_2 gs:conn:xxx
2022-10-11 18:11:24 up_correlation_ids_3 gs:up:host:xxx
2022-10-11 18:11:24 up_correlation_ids_4 gs:uplink:xxx
2022-10-11 18:11:24 up_correlation_ids_5 ns:uplink:xxx
2022-10-11 18:11:24 up_correlation_ids_6 rpc:/ttn.lorawan.v3.GsNs/HandleUplink:xxx
2022-10-11 18:11:24 up_correlation_ids_7 rpc:/ttn.lorawan.v3.NsAs/HandleUplink:xxx
2022-10-11 18:11:24 up_end_device_ids_application_ids_application_id lora-node05
2022-10-11 18:11:24 up_end_device_ids_dev_addr xxx
2022-10-11 18:11:24 up_end_device_ids_dev_eui xxx
2022-10-11 18:11:24 up_end_device_ids_device_id module01
2022-10-11 18:11:24 up_end_device_ids_join_eui xxx
2022-10-11 18:11:24 up_received_at 2022-10-11T16:11:24.750470283Z
2022-10-11 18:11:24 up_uplink_message_consumed_airtime 0.xyz
2022-10-11 18:11:24 up_uplink_message_decoded_payload_analog_in_4 3.31
2022-10-11 18:11:24 up_uplink_message_decoded_payload_barometric_pressure_3 960.6
2022-10-11 18:11:24 up_uplink_message_decoded_payload_firmware_version_1_5 2
2022-10-11 18:11:24 up_uplink_message_decoded_payload_firmware_version_2_5 1
2022-10-11 18:11:24 up_uplink_message_decoded_payload_firmware_version_3_5 2
2022-10-11 18:11:24 up_uplink_message_decoded_payload_firmware_version_4_5 0
2022-10-11 18:11:24 up_uplink_message_decoded_payload_relative_humidity_2 48
2022-10-11 18:11:24 up_uplink_message_decoded_payload_temperature_1 19.5
2022-10-11 18:11:24 up_uplink_message_decoded_payload_txinterval_6 3600
2022-10-11 18:11:24 up_uplink_message_f_cnt 416
2022-10-11 18:11:24 up_uplink_message_f_port 1
2022-10-11 18:11:24 up_uplink_message_frm_payload xxx
2022-10-11 18:11:24 up_uplink_message_network_ids_cluster_address eu1.cloud.thethings.network
2022-10-11 18:11:24 up_uplink_message_network_ids_cluster_id eu1
2022-10-11 18:11:24 up_uplink_message_network_ids_net_id 000013
2022-10-11 18:11:24 up_uplink_message_network_ids_tenant_id ttn
2022-10-11 18:11:24 up_uplink_message_received_at 2022-10-11T16:11:24.545418537Z
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_channel_index 3
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_channel_rssi -103
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_gateway_ids_eui xxx
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_gateway_ids_gateway_id xxx
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_location_altitude xyz
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_location_latitude yy.xxx
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_location_longitude yy.xxx
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_location_source SOURCE_REGISTRY
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_received_at 2022-10-11T16:11:24.544400881Z
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_rssi -103
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_snr 4
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_time 2022-10-11T16:11:24.523727Z
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_timestamp 2395046635
2022-10-11 18:11:24 up_uplink_message_rx_metadata_1_uplink_token xxx
2022-10-11 18:11:24 up_uplink_message_session_key_id xxx
2022-10-11 18:11:24 up_uplink_message_settings_data_rate_lora_bandwidth 125000
2022-10-11 18:11:24 up_uplink_message_settings_data_rate_lora_coding_rate 4/5
2022-10-11 18:11:24 up_uplink_message_settings_data_rate_lora_spreading_factor 7
2022-10-11 18:11:24 up_uplink_message_settings_frequency 867100000
2022-10-11 18:11:24 up_uplink_message_settings_time 2022-10-11T16:11:24.523727Z
2022-10-11 18:11:24 up_uplink_message_settings_timestamp 2395046635
Attributes:
alias my_alias
icon 15px-green
readingList v3/lora-node05\x40ttn/devices/module01/down/queued:.* { json2nameValue($EVENT, 'queued_', $JSONMAP) }
v3/lora-node05\x40ttn/devices/module01/up:.* { json2nameValue($EVENT, 'up_', $JSONMAP) }
v3/lora-node05\x40ttn/devices/module01/down/sent:.* { json2nameValue($EVENT, 'sent_', $JSONMAP) }
room MQTT2_DEVICE
userReadings RSSI {
my $device = "MQTT2_lora_node05_module01";
my @rssi = (-510..-500);
my @a = (0..10);
# Jetzt lesen wir quasi alle Geraete aus, wir nehmen an max. 10 Stueck
for my $i (@a){
# definiere den ReadingValue
my $name = "up_uplink_message_rx_metadata_" . $i . "_rssi";
# wir lesen nur aus, falls falls der Wert neuer als 2h ist (3600sec*2)
if (ReadingsAge($device, $name, 10000) < 7200){
# Wir fuettern unser array mit den Werten
$rssi[$i] = ReadingsVal($device, $name, -500);
}
}
# jetzt nehmen wir den Maximalwert
List::Util::max(@rssi);
},
SNR {
my $device = "MQTT2_lora_node05_module01";
my @snr = (-110..-100);
my @a = (0..10);
# Jetzt lesen wir quasi alle Geraete aus, wir nehmen an max. 10 Stueck
for my $i (@a){
# definiere den ReadingValue
my $name = "up_uplink_message_rx_metadata_" . $i . "_snr";
# wir lesen nur aus, falls falls der Wert neuer als 2h ist (3600sec*2)
if (ReadingsAge($device, $name, 10000) < 7200){
# Wir fuettern unser array mit den Werten
$snr[$i] = ReadingsVal($device, $name, -100);
}
}
# jetzt nehmen wir den Maximalwert
List::Util::max(@snr);
},
firmware_version {
my $device = "MQTT2_lora_node05_module01";
my $version1 = ReadingsVal($device, "up_uplink_message_decoded_payload_firmware_version_1_5", -1);
my $version2 = ReadingsVal($device, "up_uplink_message_decoded_payload_firmware_version_2_5", -1);
my $version3 = ReadingsVal($device, "up_uplink_message_decoded_payload_firmware_version_3_5", -1);
my $version4 = ReadingsVal($device, "up_uplink_message_decoded_payload_firmware_version_4_5", -1);
"$version1.$version2.$version3.$version4";
}
Viele Grüße
Sleep solltest du so nicht verwenden, sonst steht dein ganzes System. Verzögerungen im DOIF-Perl-Modus werden mit einem set_Exec-Aufruf realisiert:
https://wiki.fhem.de/wiki/DOIF/Perl-Modus#Interne_Timer
Hallo,
danke auch für die Antwort. Ok, ich habe mal ein funktionierendes Minimalbeispiel. (Diesmal der DOIF-Befehl im perl-Modus, damit die set_Exec Funktion funktioniert.)
{if ([MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2]>[di_Keller_Entfeuchten:Grenzwert]){
set_Exec("timer1",1,'fhem("set Wohnzimmer_Halogen on")');
set_Exec("timer2",1,'fhem("set Pushnachricht msg device=\'iphoneAB_xyz\' title=\'Keller\' message=\'Im Keller liegt die Luftfeuchtigkeit bei \'")');
}
}
Jetzt ne Frage bzgl. den Variablen, wie bekomme ich geschickt den Wert $hum (my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', '');) in meine Pushnachricht? Muss die Variable $hum die in den <perlCode>, also drittes Argument der set_Exec Funktion, dort definiert werden? Geht das auch woanders? Ich habe das Gefühl, dass das ganz unschön wird.
Ich bin gerne für weitere Vorschläge offen, eventuell muss ich auch alles umbauen.
Hier ein funktionierender Versuch die ReadingsVal im String der Textmessage zu implementieren:
{if ([MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2]>[di_Keller_Entfeuchten:Grenzwert]){
set_Exec("timer1",1,'fhem("set Wohnzimmer_Halogen on")');
set_Exec("timer2",1,'fhem("set Pushnachricht msg device=\'iphoneAB_xyz\' title=\'Keller\' message=\'Im Keller liegt die Luftfeuchtigkeit bei @{[ReadingsVal(\'MQTT2_lora_node05_module01\', \'up_uplink_message_decoded_payload_relative_humidity_2\', \'\')]} \' ")');
}
}
Variablen kannst du in Perl direkt im String in (doppelten) Anführungszeichen angeben, dann werden sie beim Aufruf der Funktion ausgewertet:
set_Exec("timer1",1,"fhem('set Pushnachricht msg $hum')");
PS: die Reihenfolge des Anführungszeichen beachten
Du brauchst auch nicht mehrere Timer, du kannst es mit einem erledigen:
set_Exec("timer1",1,"fhem('set Pushnachricht msg $hum');fhem('sonst was')");
Ein herzliches Dankeschön. Es funktioniert! Und dank des Timers werden für den Fall, dass die Luftfeuchtigkeit in Ordnung ist (d.h. unterhalb des Grenzwertes) auch gleich 2x Pushnachrichten versendet;
1) wenn die Luftfeuchtigkeit wieder in Ordnung ist und
2) wenn der Luftentfeuchter ausgeschaltet wird.
Mit der Reihenfolge der Anführungszeichen habe ich tatsächlich nicht aufgepasst.
Ich habe es mit dem Wohnzimmerlicht getestet, es schaut ganz gut aus. Anbei meine Implementierung, eventuell hilft es dem ein oder anderen.
{if ([MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2]>[di_Keller_Entfeuchten:Grenzwert]){
# Lese Varibalen des Sensors und des Luftentfeuchters aus
my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', '');
my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', '');
my $lstat = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'status', '');
my $lsoll = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'humiditySetpoint', '');
my $luefter = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'fanSpeed', '');
my $modus = ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'mode', '');
# Wir überprüfen, ob der Luftentfechter online ist
if ($lstat eq "online"){
# Dann schalten wir ihn an
fhem ("set MQTT2_DEHUMIDIFIER_A12345 on");
#fhem ("set Wohnzimmer_Halogen on");
# und schicken 20sek später eine Pushnachricht (wg. Systemüberlastung und möglichen Timeout)
set_Exec("timer1",20,"fhem('set Pushnachricht msg device=iphoneAB_xyz title=Keller message=\"Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist online. Ich schalte ihn nun ein. Die Einstellungen sind: \\n Luffeuchtigkeit SOLL: $lsoll \\n Lüftergeschwindigkeit: $luefter \\n Modus: $modus\" ')");
}
elsif ($lstat eq "offline"){
# wenn er offline ist, so schicken wir auch eine Nachricht mit der Info
set_Exec("timer1",20,"fhem('set Pushnachricht msg device=iphoneAB_xyz title=Keller message=\"ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber OFFLINE. Checke die Stromzufuhr - ShellyPlugS1!\" ')");
}
else{
# falls er weder online noch offline ist, haben wir ein anderes Problem - das teilen wir auch mit
set_Exec("timer1",20,"fhem('set Pushnachricht msg device=iphoneAB_xyz title=Keller message=\"ERROR: Im Keller liegt die Luftfeuchtigkeit bei $hum \% (Grenzwert: $thr \%). Der Luftentfeuchter ist aber weder online noch offline. Systemerror!\" ')");
}
}
# für den Fall, dass die Luftfeuchtigkeit unterhalb des Grenzwertes ist, d.h. im grünen Bereich
else
{# wir machen nur etwas, wenn der Luftentfeuchter eingeschaltet ist
if (ReadingsVal('MQTT2_DEHUMIDIFIER_A12345', 'state', '') eq "on"){
# Lese Varibalen des Sensors und des Luftentfeuchters aus
my $hum = ReadingsVal('MQTT2_lora_node05_module01', 'up_uplink_message_decoded_payload_relative_humidity_2', '');
my $thr = ReadingsVal('di_Keller_Entfeuchten', 'Grenzwert', '');
my $delay = ReadingsVal('di_Keller_Entfeuchten', 'Verzoegerung', '');
# nun schicken wir mit 20sek Verzögerung eine Nachricht, dass der Luftentfechter mit der eingestellten Verzögerung (delay) ausgeschaltet werden wird
set_Exec("timer1",20,"fhem('set Pushnachricht msg device=iphoneAB_xyz title=Keller message=\"Im Keller liegt die Luftfeuchtigkeit nun bei $hum \% (Grenzwert: $thr \%). Ich werde den Luftentfeuchter in $delay Sekunden ausschalten.\" ')");
# nach der Verzögerung wird der Luftentfeuchter ausgeschaltet und wir schicken außerdem noch eine Nachricht
set_Exec("timer2",$delay+20,"fhem('set MQTT2_DEHUMIDIFIER_A12345 off'); fhem('set Pushnachricht msg device=iphoneAB_xyz title=Keller message=\"Ich habe den Luftentfeuchter jetzt ausgeschaltet.\" ')");
#set_Exec("timer2",$delay+20,"fhem('set Wohnzimmer_Halogen off'); fhem('set Pushnachricht msg device=iphoneAB_xyz title=Keller message=\"Ich habe den Luftentfeuchter jetzt ausgeschaltet.\" ')");
}
}
}
Bei den ersten Tests hat sich nun gezeigt, dass der Timer nicht ausgeführt wird bzw. abgebrochen wird, wenn ein neuer Sensorwert (Reading) auftritt, konkret: Der Luftentfeuchter hat eine Nachlaufzeit von 3h; jede Stunde kommt ein neues Reading von MQTT2_lora_node05_module01:up_uplink_message_decoded_payload_relative_humidity_2. Dies hat zur Folge, dass der Luftentfeuchter nie ausgeschaltet wird. => zurück zur ursprünglichen Lösung mit dem Problem, dass die Pushnachrichten nicht gesendet werden, aber mit dem wait Attribut, dass der Befehl erst nach 20 Sekunden ausgeführt wird. Das beobachte ich nun. Scheint aber zu funktionieren und der Luftentfeuchter wird auch nach 3 h Verzoegerung ausgeschaltet.