Hallo,
falls es die falsche Rubrik ist, bitte sagen wohin, oder verschieben. Dankeschön.
Meine RGB W - Leuchte lässt sich prima über MQTT(2) steuern, nachdem ich sie mit Tasmota geflasht habe.
https://www.amazon.de/gp/product/B07RJN2VJ3/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1 (https://www.amazon.de/gp/product/B07RJN2VJ3/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1)
Die Befehle:
set MQTT2_fw_rgbw01 on
set MQTT2_fw_rgbw01 off
set MQTT2_fw_rgbw01 blink 5 1
set MQTT2_fw_rgbw01 Color 000000FF00 -> weiss
set MQTT2_fw_rgbw01 Color 0000000000 ->aus
set MQTT2_fw_rgbw01 Color FF00000000 ->rot
set MQTT2_fw_rgbw01 Color 03FF0B0000 ->grün
klappen super.
Nun möchte ich, während die Lampe leuchtet oder aus ist, durch Blinken z.B. Alarm auslösen.
Dazu stelle ich mir einen Dummy(?) vor, der, wenn er ausgelöst wird, die Leuchte abfragt, den Zustand speichert, dann z.b. blinken 5 mal rot, und wieder in den Anfangszustand zurücksetzen.
Sozusagen, pro "Alarm-Szene" einen Dummy. Diesen möchte ich dann ganz einfach aus anderen Ereignissen auslösen, ohne jedesmal die ganze Prozedur programieren zu müssen.
Hier noch das List der Leuchte:
Internals:
CFGFN
CID fw_rgbw01
DEF fw_rgbw01
DEVICETOPIC MQTT2_fw_rgbw01
FUUID 5f6eec20-f33f-6033-5ac5-9502a275341e2c72
IODev mqtt2c
LASTInputDev mqtt2c
MSGCNT 334
NAME MQTT2_fw_rgbw01
NR 306383
STATE off
TYPE MQTT2_DEVICE
mqtt2c_MSGCNT 270
mqtt2c_TIME 2020-09-26 15:50:53
mqtt2s_MSGCNT 64
mqtt2s_TIME 2020-09-26 09:25:44
JSONMAP:
Channel_1 0
Channel_2 0
Channel_3 0
Channel_4 white
Dimmer pct
HSBColor 0
POWER1 0
OLDREADINGS:
READINGS:
2020-09-26 15:50:53 CT 153
2020-09-26 15:50:53 Channel_5 0
2020-09-26 15:50:53 Color 5909190000
2020-09-26 10:01:48 Command Unknown
2020-09-26 15:50:53 Fade off
2020-09-26 09:25:48 FallbackTopic cmnd/fw_rgbw01_fb/
2020-09-26 09:25:48 GroupTopic cmnd/tasmotas/fw_rgbw01/
2020-09-26 15:50:53 Heap 26
2020-09-26 09:25:48 Hostname FW_RGBW01
2020-09-26 09:25:48 IPAddress 172.18.2.239
2020-09-26 09:25:48 LWT Online
2020-09-26 10:03:27 Latitude xx
2020-09-26 15:50:53 LedTable on
2020-09-26 15:50:53 LoadAvg 99
2020-09-26 10:03:28 Longitude xx
2020-09-26 09:25:48 Module LE lampUX 15W
2020-09-26 15:50:53 MqttCount 1
2020-09-26 09:25:48 RestartReason Software/System restart
2020-09-26 09:22:41 SaveData on
2020-09-26 15:50:53 Scheme 0
2020-09-26 10:02:17 SetOption0 on
2020-09-26 10:03:28 SetOption1 off
2020-09-26 09:22:41 SetOption26 on
2020-09-26 15:50:53 Sleep 10
2020-09-26 15:50:53 SleepMode Dynamic
2020-09-26 15:50:53 Speed 10
2020-09-26 09:22:40 StateText1 off
2020-09-26 09:22:40 StateText2 on
2020-09-26 09:22:40 StateText3 toggle
2020-09-26 09:22:41 StateText4 hold
2020-09-26 15:50:53 Time 2020-09-26T15:50:52
2020-09-26 10:03:27 Timezone 99
2020-09-26 15:50:53 Uptime 0T06:25:09
2020-09-26 15:50:53 UptimeSec 23109
2020-09-26 09:25:48 Version 8.5.0(tasmota)
2020-09-26 09:25:48 WebServerMode Admin
2020-09-26 15:50:53 White 0
2020-09-26 15:50:53 Wifi_AP 1
2020-09-26 15:50:53 Wifi_BSSId A0:F3:C1:A0:07:66
2020-09-26 15:50:53 Wifi_Channel 9
2020-09-26 15:50:53 Wifi_Downtime 0T00:00:03
2020-09-26 15:50:53 Wifi_LinkCount 1
2020-09-26 15:50:53 Wifi_RSSI 60
2020-09-26 15:50:53 Wifi_SSId fxxxxx
2020-09-26 15:50:53 Wifi_Signal -70
2020-09-26 09:22:40 attrTemplateVersion 20200522 or prior
2020-09-26 10:16:27 dimdown set
2020-09-26 10:16:47 dimup set
2020-09-26 15:50:53 pct 35
2020-09-26 14:49:27 saturation 90
2020-09-26 11:04:30 state off
2020-09-26 15:50:53 white 0
Attributes:
IODev mqtt2c
autocreate 0
comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10; 'cmnd/cmnd/fhem02/fw_rgbw01/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
devStateIcon {Color::devStateIcon($name,"rgb","Color","pct","state")}
icon light_control
jsonMap POWER1:0 Dimmer:pct Channel_4:white Channel_1:0 Channel_2:0 Channel_3:0 HSBColor:0
model tasmota_rgbw_led
readingList tele/fhem02/fw_rgbw01/LWT:.* LWT
tele/fhem02/fw_rgbw01/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/fhem02/fw_rgbw01/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/fhem02/fw_rgbw01/INFO.:.* { json2nameValue($EVENT,'',$JSONMAP) }
tele/fhem02/fw_rgbw01/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
stat/fhem02/fw_rgbw01/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
stat/fhem02/fw_rgbw01/RESULT:.* { $EVENT =~ m,HSBColor...(\d+)\,(\d+)\,(\d+), ? $2 eq ReadingsVal($NAME,"saturation","unknown") ? return : { "saturation"=>$2 } : return }
stat/fhem02/fw_rgbw01/POWER1:.* state
room 00-home,MQTT2_DEVICE
setList off:noArg cmnd/fhem02/fw_rgbw01/POWER1 0
on:noArg cmnd/fhem02/fw_rgbw01/POWER1 1
toggle:noArg cmnd/fhem02/fw_rgbw01/POWER1 2
Color:colorpicker,RGB cmnd/fhem02/fw_rgbw01/COLOR
pct:colorpicker,BRI,0,5,100 cmnd/fhem02/fw_rgbw01/DIMMER
dimup:noArg { my $num=int((ReadingsNum($NAME,'pct',0)+4)/10)*10+10; return qq {cmnd/fhem02/fw_rgbw01/Dimmer $num}; }
dimdown:noArg { my $num=int((ReadingsNum($NAME,'pct',0)+7)/10)*10-10; return qq {cmnd/fhem02/fw_rgbw01/Dimmer $num}; }
white:colorpicker,BRI,0,5,100 { "cmnd/fhem02/fw_rgbw01/COLOR ". sprintf("000000%02X",$EVTPART1*2.55) }
saturation:colorpicker,BRI,0,1,100 cmnd/fhem02/fw_rgbw01/HSBCOLOR2
Speed:colorpicker,BRI,0,1,20 cmnd/fhem02/fw_rgbw01/SPEED
Fade:uzsuSelect,ON,OFF cmnd/fhem02/fw_rgbw01/FADE $EVTPART1
mode:selectnumbers,0,1,4,0,lin cmnd/fhem02/fw_rgbw01/SCHEME
setStateList on off toggle
webCmd pct:white:Color
webCmdLabel Helligkeit
:Weiss
:Farbe:
Hierzu habe ich nichts gefunden. Ist das überhaupt realisierbar?
Dankeschön für Anstösse.
z. B. mit diesem Einzeiler:
defmod di_alarm DOIF {["mydummy"];;@{$_a}=(0,"FF00000000",0,"FF00000000",0,"FF00000000",0,"FF00000000",0,"FF00000000",0,"FF00000000",ReadingsVal("MQTT2_fw_rgbw01","color",""));;set_Exec("timer",1,'fhem_set("MQTT2_fw_rgbw01 color $_a[$count]")','$count < 13')}
Wenn mydummy auslöst, wird im Sekundentakt "set MQTT2_fw_rgbw01 color <Farbe>" zwischen off und rot geschaltet und am Ende der ursprüngliche Zustand der Lampe wiederhergestellt.
oder noch kürzer:
defmod di_alarm DOIF {["mydummy"];;$_last=ReadingsVal("MQTT2_fw_rgbw01","color,"");;set_Exec("timer",1,'fhem_set("MQTT2_fw_rgbw01 color ".($count == 13 ? $_last:($count % 2 ? "FF00000000":"0000000000")))','$count <= 13')}
Hallo Damian,
Zitat von: Damian am 26 September 2020, 16:43:00
z. B. mit diesem Einzeiler:
defmod di_alarm DOIF {["mydummy"];;@{$_a}=(0,"FF00000000",0,"FF00000000",0,"FF00000000",0,"FF00000000",0,"FF00000000",0,"FF00000000",ReadingsVal("MQTT2_fw_rgbw01","color",""));;set_Exec("timer",1,'fhem_set("MQTT2_fw_rgbw01 color $_a[$count]")','$count < 13')}
Wenn mydummy auslöst, wird im Sekundentakt "set MQTT2_fw_rgbw01 color <Farbe>" zwischen off und rot geschaltet und am Ende der ursprüngliche Zustand der Lampe wiederhergestellt.
sorry, wenn ich schon wieder fragen muss.....
Wie löse ich mydummy aus? "on" "off" "0" klappt nicht. Oder kann ich das Doif gleich direkt auslösen?
Dankeschön
Hallo nochmal,
di_alarm steht auf "block_01"
und in den Readings steht:
block_01
condition c01: Can't find string terminator '"' anywhere before EOF, line 1.
nach "color" fehlte wohl ein "
{["mydummy"];;$_last=ReadingsVal("MQTT2_fw_rgbw01","color","");;set_Exec("timer",1,'fhem_set("MQTT2_fw_rgbw01 color ".($count == 13 ? $_last:($count % 2 ? "FF00000000":"0000000000")))','$count <= 13')}
jetzt im Reading error:
in fhem_set("MQTT2_fw_rgbw01 color ".($count == 13 ? $hash->{var}{last}:($count % 2 ? "FF00000000":"0000000000"))): Undefined subroutine &DOIF::fhem_set("MQTT2_fw_rgbw01 color ".($count == 13 ? $hash->{var}{last}:($count % 2 ? "FF00000000":"0000000000"))) called at (eval 208060091) line 1.
Dankeschön
Du brauchts die aktuelle DOIF-Version.
Hallo Damian,
Zitat von: Damian am 26 September 2020, 17:21:12
Du brauchts die aktuelle DOIF-Version.
ich habe jetzt die:
98_DOIF.pm 22834 2020-09-23 17:50:00Z Damian
da fehlte wohl das letzte Update.
Die Fehlermedungen sind weg, nur bekomme ich es nicht ausgelöst.
Internals:
DEF {["mydummy"];;$_last=ReadingsVal("MQTT2_fw_rgbw01","color","");;set_Exec("timer",1,'fhem_set("MQTT2_fw_rgbw01 color ".($count == 13 ? $_last:($count % 2 ? "FF00000000":"0000000000")))','$count <= 13')}
DOIFDEV ^global$|mydummy
FUUID 5f6f5538-f33f-6033-a6b0-85e70f42a0061033
MODEL Perl
NAME di_alarm
NR 461
NTFY_ORDER 50-di_alarm
STATE initialized
TYPE DOIF
VERSION 22834 2020-09-23 17:50:00
READINGS:
2020-09-27 09:30:29 Device mydummy
2020-09-27 09:30:29 block_01 executed
2020-09-27 09:29:13 mode enabled
2020-09-27 09:17:34 state initialized
Regex:
accu:
cond:
:
0:
"mydummy" mydummy
condition:
0 ::EventDoIf('mydummy',$hash,'',0);;$hash->{var}{last}=ReadingsVal("MQTT2_fw_rgbw01","color","");;set_Exec("timer",1,'fhem_set("MQTT2_fw_rgbw01 color ".($count == 13 ? $hash->{var}{last}:($count % 2 ? "FF00000000":"0000000000")))','$count <= 13')
helper:
DEVFILTER ^global$|mydummy
NOTIFYDEV global|.*mydummy.*
event off
globalinit 1
last_timer 0
sleeptimer -1
triggerDev mydummy
triggerEvents:
off
triggerEventsState:
state: off
internals:
perlblock:
0 block_01
ptimer:
timer:
cond $count <= 13
count 14
name timer
sec 1
subname fhem_set("MQTT2_fw_rgbw01 color ".($count == 13 ? $hash->{var}{last}:($count % 2 ? "FF00000000":"0000000000")))
time 1601191843.15815
hash:
readings:
trigger:
uiTable:
var:
last
Attributes:
comment https://forum.fhem.de/index.php/topic,114534.msg1087876.html#msg1087876
room 00-home
mydummy hat als State on und off
Dankeschön
Zitat von: FHEM-User22 am 27 September 2020, 09:02:32
Hallo Damian,
ich habe jetzt die:
98_DOIF.pm 22834 2020-09-23 17:50:00Z Damian
da fehlte wohl das letzte Update.
Die Fehlermedungen sind weg, nur bekomme ich es nicht ausgelöst.
Ich schon, "set mydummy irgendwas" löst bei mir aus.
Du musst ohnehin deinen Trigger anpassen:
{["<device>:<Reading>"];;$_last=ReadingsVal....
https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Hallo,
oh Mann, ich komme immer noch nicht weiter.
Jetzt habe ich :
{["mydummy:on"];;$_last=ReadingsVal("MQTT2_fw_rgbw01","color","");;set_Exec("timer",1,'fhem_set("MQTT2_fw_rgbw01 color ".($count == 13 ? $_last:($count % 2 ? "FF00000000":"0000000000")))','$count <= 13')}
Aber es tut sich immer noch nichts.
Das Reading in di_alarm
e_mydummy_events on 2020-09-27 10:39:59
ändert sich
e_mydummy_events off 2020-09-27 10:54:29
also sollte es doch gehen....
Sorry und dankeschön
Zitat von: FHEM-User22 am 27 September 2020, 10:58:08
Hallo,
oh Mann, ich komme immer noch nicht weiter.
Jetzt habe ich :
{["mydummy:on"];;$_last=ReadingsVal("MQTT2_fw_rgbw01","color","");;set_Exec("timer",1,'fhem_set("MQTT2_fw_rgbw01 color ".($count == 13 ? $_last:($count % 2 ? "FF00000000":"0000000000")))','$count <= 13')}
Aber es tut sich immer noch nichts.
Das Reading in di_alarm
e_mydummy_events on 2020-09-27 10:39:59
ändert sich
e_mydummy_events off 2020-09-27 10:54:29
also sollte es doch gehen....
Sorry und dankeschön
Dann wird der Block ausgeführt, das siehst du in den Readings des DOIF.
Funktioniert das überhaupt, wenn du es in der Eingabezeile ausführst?
set MQTT2_fw_rgbw01 color FF00000000
Super, das war es. nicht "color", sondern wie in meinem erstem Post "Color". Jetzt klappt es.
Sorry, eine Frage noch: Kann ich das doif auch direkt ansprechen, oder geht es nur über den dummy. Und wenn nicht, ist er dann optimal mit "on off"?
Internals:
FUUID 5f6f56eb-f33f-6033-ed2d-736869d8a2e4cab6
NAME mydummy
NR 462
STATE on
TYPE dummy
READINGS:
2020-09-27 15:00:46 state on
Attributes:
room 00-home
setList on off
webCmd on:off
Daaaankeschön nochmals
Zitat von: FHEM-User22 am 27 September 2020, 15:05:50
Super, das war es. nicht "color", sondern wie in meinem erstem Post "Color". Jetzt klappt es.
Sorry, eine Frage noch: Kann ich das doif auch direkt ansprechen, oder geht es nur über den dummy. Und wenn nicht, ist er dann optimal mit "on off"?
Internals:
FUUID 5f6f56eb-f33f-6033-ed2d-736869d8a2e4cab6
NAME mydummy
NR 462
STATE on
TYPE dummy
READINGS:
2020-09-27 15:00:46 state on
Attributes:
room 00-home
setList on off
webCmd on:off
Daaaankeschön nochmals
Statt auf Dummy kannst du natürlich auf beliebige Ereignisse in FHEM triggern, den Link habe ich dir bereits gepostet.
Zitat von: Damian am 27 September 2020, 15:59:56
Statt auf Dummy kannst du natürlich auf beliebige Ereignisse in FHEM triggern, den Link habe ich dir bereits gepostet.
Stimmt. Ich habe da warscheinlich einen Denkfehler. Hier "guggt" das doif nach dem Auslöser.
Ich wollte es andersrum, das ein Ereignis das doif anstösst, so wie "set doif on".....
Ist aber am Ende warscheinlich gleich.
Dankeschön
ZitatIch wollte es andersrum, das ein Ereignis das doif anstösst, so wie "set doif on".....
Könnte so aussehen:
defmod doif_Test DOIF ($SELF eq "on")()\
DOELSE ()
attr doif_Test cmdState on|off
attr doif_Test devStateIcon on:general_an:off off|initialize.*:general_aus:on
attr doif_Test do always
attr doif_Test setList on off
Nutz ich bei Lösungen zu Alexa-Devices die eine notify/dummy Lösung unumgänglich machen würden.
Gruß
Thomas
Zitat von: FHEM-User22 am 27 September 2020, 17:18:12
Stimmt. Ich habe da warscheinlich einen Denkfehler. Hier "guggt" das doif nach dem Auslöser.
Ich wollte es andersrum, das ein Ereignis das doif anstösst, so wie "set doif on".....
Ist aber am Ende warscheinlich gleich.
Dankeschön
Es macht nicht viel Sinn weitere Module dazwischenzuschalten, um wiederum mit
set di_alarm block_01
die Aktion auszulösen, wenn das Modul selbst auf beliebige Ereignisse reagieren kann, um die Alarm-Lichtorgie anzustoßen ;)