gelöst: RGBW-Leuchte mit Tasmota als Alarmmelder

Begonnen von FHEM-User22, 26 September 2020, 16:00:37

Vorheriges Thema - Nächstes Thema

FHEM-User22

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

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.
FHEM auf Raspberry Pi und Proxmox und... und.... und....

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

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')}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM-User22

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
FHEM auf Raspberry Pi und Proxmox und... und.... und....

FHEM-User22

#4
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
FHEM auf Raspberry Pi und Proxmox und... und.... und....

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM-User22

#6
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
FHEM auf Raspberry Pi und Proxmox und... und.... und....

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM-User22

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
FHEM auf Raspberry Pi und Proxmox und... und.... und....

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM-User22

#10
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
FHEM auf Raspberry Pi und Proxmox und... und.... und....

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM-User22

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
FHEM auf Raspberry Pi und Proxmox und... und.... und....

TomLee

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

Damian

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 ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF