Ich habe ein Problem mit einem Klingelsensor, der eine Klingel auslösen soll. Der Sensor ist folgendes Gerät
Internals:
CID DVES_C83350
DEF DVES_C83350
FUUID 61c4abd5-f33f-1115-6d1b-1610ab1fee994ddf
FVERSION 10_MQTT2_DEVICE.pm:0.279350/2023-09-05
IODev Mosquitto
LASTInputDev Mosquitto
MSGCNT 2346
Mosquitto_CONN Mosquitto_192.168.2.81_54737
Mosquitto_MSGCNT 2346
Mosquitto_TIME 2023-11-10 20:37:10
NAME Klingelsensor
NR 412
STATE
TYPE MQTT2_DEVICE
eventCount 2337
JSONMAP:
Channel_0 0
Channel_1 0
Channel_2 0
Channel_3 0
Channel_4 0
Channel_5 0
Color 0
Dimmer 0
HSBColor 0
POWER1 0
POWER2 0
POWER3 0
POWER4 0
READINGS:
2023-09-21 15:17:16 BASE 18
2023-11-02 19:37:04 BootCount 405
2023-11-10 12:33:52 Button1_Action CLEAR
2023-09-21 15:17:16 DeviceName Klingelsensor
2023-09-21 15:17:16 Emulation 0
2023-09-21 15:17:16 FLAG 0
2023-11-02 19:37:04 FallbackTopic cmnd/DVES_C83350_fb/
2023-09-21 15:17:16 FriendlyName1 Klingeltaster
2023-09-21 15:17:16 FriendlyName2
2023-09-21 15:17:16 FriendlyName3
2023-09-21 15:17:16 FriendlyName4
2023-09-21 15:17:16 FriendlyName5
2023-09-21 15:17:16 FriendlyName6
2023-09-21 15:17:16 FriendlyName7
2023-09-21 15:17:16 FriendlyName8
2023-09-21 15:17:16 GPIO_1 1
2023-09-21 15:17:16 GPIO_10 1
2023-09-21 15:17:16 GPIO_11 1
2023-09-21 15:17:16 GPIO_12 1
2023-09-21 15:17:16 GPIO_13 1
2023-09-21 15:17:16 GPIO_14 1
2023-09-21 15:17:16 GPIO_2 1
2023-09-21 15:17:16 GPIO_3 1
2023-09-21 15:17:16 GPIO_4 1
2023-09-21 15:17:16 GPIO_5 1
2023-09-21 15:17:16 GPIO_6 1
2023-09-21 15:17:16 GPIO_7 1
2023-09-21 15:17:16 GPIO_8 1
2023-09-21 15:17:16 GPIO_9 1
2023-11-02 19:37:04 GroupTopic cmnd/tasmotas/
2023-11-10 20:37:10 Heap 25
2023-11-02 19:37:04 Hostname tasmota-C83350-4944
2023-11-02 09:17:58 IODev Mosquitto
2023-11-02 19:37:04 IPAddress 192.168.2.81
2023-11-08 07:30:03 LWT Online
2023-11-10 20:37:10 LoadAvg 19
2023-11-02 19:37:04 Module Sonoff Basic
2023-11-10 20:37:10 MqttCount 9
2023-09-21 15:17:16 NAME Generic
2023-11-02 19:37:04 RestartReason Hardware Watchdog
2023-08-13 10:07:34 SaveData on
2023-09-21 15:17:16 SetOption128 on
2023-08-13 10:07:33 SetOption26 on
2023-09-21 15:17:16 SetOption3 on
2023-11-10 20:37:10 Sleep 50
2023-11-10 20:37:10 SleepMode Dynamic
2023-08-13 10:07:33 StateText1 off
2023-08-13 10:07:33 StateText2 on
2023-08-13 10:07:33 StateText3 toggle
2023-08-13 10:07:33 StateText4 hold
2023-11-10 20:37:10 Time 2023-11-10T20:37:10
2023-11-10 20:37:10 Uptime 8T09:11:26
2023-11-10 20:37:10 UptimeSec 724286
2023-11-02 19:37:04 Version 13.0.0.4(tasmota)
2023-09-21 15:17:16 WebPassword ****
2023-11-02 19:37:04 WebServerMode Admin
2023-11-10 20:37:10 Wifi_AP 1
2023-11-10 20:37:10 Wifi_BSSId E6:63:DA:BA:8C:0C
2023-11-10 20:37:10 Wifi_Channel 1
2023-11-10 20:37:10 Wifi_Downtime 0T00:00:23
2023-11-10 20:37:10 Wifi_LinkCount 5
2023-11-10 20:37:10 Wifi_Mode 11n
2023-11-10 20:37:10 Wifi_RSSI 76
2023-11-10 20:37:10 Wifi_SSId WLAN-120954
2023-11-10 20:37:10 Wifi_Signal -62
2023-08-13 10:07:33 attrTemplateVersion 20210523
2023-11-02 19:37:04 state off
2023-10-25 08:16:36 subscriptions cmnd/DVES_C83350_fb/# cmnd/tasmota_C83350/# cmnd/tasmotas/#
Attributes:
autocreate 0
event-min-interval Button1_Action:3
group intern
jsonMap POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 Channel_5:0 HSBColor:0 Color:0
model tasmota_basic_state_power1
readingList tele/tasmota_C83350/LWT:.* LWT
tele/tasmota_C83350/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/tasmota_C83350/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/tasmota_C83350/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ? json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
tele/tasmota_C83350/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
stat/tasmota_C83350/POWER1:.* state
stat/tasmota_C83350/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
room Abwesenheit
setList off:noArg cmnd/tasmota_C83350/POWER1 0
on:noArg cmnd/tasmota_C83350/POWER1 1
toggle:noArg cmnd/tasmota_C83350/POWER1 2
setOtaUrl:textField cmnd/tasmota_C83350/OtaUrl $EVTPART1
upgrade:noArg cmnd/tasmota_C83350/upgrade 1
setStateList on off toggle
stateFormat
verbose 1
webCmd
und ich möchte, dass bei Auslösung (also wenn das Reading Button1_Action auf SINGLE gesetzt wird) ein Klingelschalter die Klingel auslöst. Das entsprechende DOIF lautet dann
Internals:
DEF (([Klingelsensor:Button1_Action] eq "SINGLE") and ([Profil:housemode] eq "normal")) (set Klingel on-for-timer 2,set TelegramBot message @012345678 🛎) DOELSEIF (([Klingelsensor:Button1_Action] eq "SINGLE") and ([Profil:housemode] eq "absence")) (set TelegramBot message @012345678 🛎)
FUUID 64d8c65e-f33f-1115-0555-6effb779c025df09
FVERSION 98_DOIF.pm:0.277400/2023-07-10
MODEL FHEM
NAME KlingelAusloesen
NOTIFYDEV Klingelsensor,Profil,global
NR 509
NTFY_ORDER 50-KlingelAusloesen
STATE cmd_1
TYPE DOIF
VERSION 27740 2023-07-10 09:31:11
READINGS:
2023-11-10 12:33:51 Device Klingelsensor
2023-10-04 12:06:32 cmd 1
2023-10-04 12:06:32 cmd_event Klingelsensor
2023-10-04 12:06:32 cmd_nr 1
2023-11-10 12:33:51 e_Klingelsensor_Button1_Action SINGLE
2023-10-29 15:15:42 e_Profil_housemode normal
2023-09-02 15:45:22 mode enabled
2023-10-04 12:06:32 state cmd_1
Regex:
accu:
bar:
barAvg:
collect:
cond:
Klingelsensor:
0:
Button1_Action ^Klingelsensor$:^Button1_Action:
1:
Button1_Action ^Klingelsensor$:^Button1_Action:
Profil:
0:
housemode ^Profil$:^housemode:
1:
housemode ^Profil$:^housemode:
attr:
waitdel:
condition:
0 (::ReadingValDoIf($hash,'Klingelsensor','Button1_Action') eq "SINGLE") and (::ReadingValDoIf($hash,'Profil','housemode') eq "normal")
1 (::ReadingValDoIf($hash,'Klingelsensor','Button1_Action') eq "SINGLE") and (::ReadingValDoIf($hash,'Profil','housemode') eq "absence")
do:
0:
0 set Klingel on-for-timer 2,set TelegramBot message @012345678 🛎
1:
0 set TelegramBot message @012345678 🛎
2:
helper:
NOTIFYDEV Klingelsensor,Profil,global
event Button1_Action: SINGLE
globalinit 1
last_timer 0
sleeptimer -1
timerdev Klingelsensor
timerevent Button1_Action: SINGLE
triggerDev Klingelsensor
timerevents:
Button1_Action: SINGLE
timereventsState:
Button1_Action: SINGLE
triggerEvents:
Button1_Action: SINGLE
triggerEventsState:
Button1_Action: SINGLE
internals:
perlblock:
readings:
all Klingelsensor:Button1_Action Profil:housemode
trigger:
uiState:
uiTable:
Attributes:
comment https://forum.fhem.de/index.php?topic=134595.msg1284115
group Schalter
room Abwesenheit
Und das geht aber leider nicht. Verbose 5 ergibt folgende Events in der Situation, in der tatsächlich der Klingelsensor eine SINGLE-Action erhält:
2023.11.10 12:32:10 4: MQTT2_DEVICE_Parse: Klingelsensor tele/tasmota_C83350/STATE => { json2nameValue($EVENT,'',$JSONMAP) }
2023.11.10 12:33:51 4: MQTT2_DEVICE_Parse: Klingelsensor stat/tasmota_C83350/RESULT => { json2nameValue($EVENT,'',$JSONMAP) }
2023.11.10 12:33:52 4: MQTT2_DEVICE_Parse: Klingelsensor stat/tasmota_C83350/RESULT => { json2nameValue($EVENT,'',$JSONMAP) }
Das heißt, die RESULTS werden von der json2nameValue nicht als "echtes" FHEM-Ereignis übersetzt. Zwar werden die Readings entsprechend gesetzt, es heißt ja
2023-11-10 12:33:52 Button1_Action CLEAR
aber es gibt kein Ereignis in FHEM, das ein DOIF entgegennehmen könnte. Das DOIF reagiert einfach gar nicht.
Wie kann ich bewerkstelligen, dass DOIF den ausgelösten Klingelsensor erkennt? Wie erreiche ich, dass der Klingelsensor ein echtes FHEM-Ereignis produziert?
Denke das ist mehr eine Frage zu DOIF wie zu MQTT.
Ist es nicht so, ich weiß es nicht, das du mit der DOIF-Syntax die du verwendest zwei Events gleichzeitig abfrägst und das einfach nicht vorkommen kann ?
Zitat([Klingelsensor:Button1_Action] eq "SINGLE") and ([Profil:housemode] eq "normal")
Vermute dem Profil:housemode muss man ein ? davorstellen das es nur eine Abfrage des Status ist und nicht auf ein Event getriggert wird ?
Hmm, das weiß ich jetzt nicht. Ich habe aber andere DOIFs, bei denen das kein Problem darstellt. Daher würde ich jetzt mal als Antwort auf Nein tippen. Das hier zB
defmod GarageOffenDOIF2 DOIF (([Garage:Tor] eq "ON") and ([BresserTemeo_1:temperature]<7) ) (set TelegramBot _msg @0123456 Garage seit 10 Minuten <b>offen</b> und außen [BresserTemeo_1:temperature]°C)
reagiert nur, wenn die Temperatur entsprechend niedrig ist. Und das ist eine vergleichbare logische Struktur.
Mag sein, ich würde das Problem aber trotzdem an der DOIF Syntax suchen, wie an dem nicht vermuteten Event.
Ein Event zu Button1_Action gibts, das sieht man ja in dem List von Klingelsensor und wenn du im Eventmonitor nachschaust wirst das auch sehen, verbose hoch stellen und das Event im LogFile zu erwarten ist der falsche Ansatz.
Das was Du Dir als Events anschaust ist nicht der Eventmonitor sondern ein Logfile!
Ich meine das DOIF hat ausgelöst
Zitat2023-11-10 12:33:51 e_Klingelsensor_Button1_Action SINGLE
2023-10-29 15:15:42 e_Profil_housemode normal
2023-09-02 15:45:22 mode enabled
2023-10-04 12:06:32 state cmd_1
Aber kann sein, Du brauchst do always, damit es wiederholt auslöst :)
Vielen Dank für Eure Tipps, gehen ja in beide Richtungen. Also schaue ich mal beim DOIF und wenn ich "do always" lese, dann erinnere ich mich, dass das meine ewige Schwachstelle war...
Vielleicht sollte man das "do always" zum default machen.
Jetzt hat es lustigerweie gerade geklingelt. Die Sache geht. Es war, wie immer, do always. Danke nochmal!