Da der Aqara Magic Cube* ein Multi Device ist, werden im FHEM drei Sensoren angelegt, wobei wir aber nur die zwei  Flip und Rotate davon benötigen.

Da der Cube doch mit ziemlich nichtssagenden Status arbeitet, habe ich anhand dieser Auflistung ein DOIF (WZ.DOIF.Sensor.MagicCube) als Event Mapper geschrieben das ich doch etwas sprechendere Events in den Reading action absetzt.

x000 for push, so 1000, 2000, 3000, 4000, 5000, 6000;
x00x for double tap, so 1001, 2002, 3003, 4004, 5005, 6006;
x00o for 180° flip (where o = 7 - x), so 1006, 2005, 3004, 4003, 5002, 6001;
x00y for 90° flip (where y ≠ x and y ≠ 7 - x), so 1002, 1003, 1004, 1005, 2001, 2003, 2004, 2006, 3001, 3002, 3005, 3006, 4001, 4002, 4005, 4006, 5001, 5003, 5004, 5006, 6002, 6003, 6004, 6005;
7007 for shake;
7008 for drop (EDITED);
7000 for wakeup (the cube sends raw value 2 when I just tap it after a while).

DOIF: WZ.DOIF.Sensor.MagicCube:

defmod WZ.DOIF.Sensor.MagicCube DOIF ## Nach rechts derehen\
([WZ.Sensor.MagicCube.Rotate:state] =~ /^-.*/) \
(\
  set $SELF rotateDirection left,\
  set $SELF action rotateLeft\
)\
## Nach links drehen\
DOELSEIF([WZ.Sensor.MagicCube.Rotate:state] =~ /^(?!-).*$/)\
(\
  set $SELF rotateDirection right,\
  set $SELF action rotateRight\
)\
DOELSEIF([WZ.Sensor.MagicCube.Flip:state] ne 7000)\
(\
\
  (\
    IF ([?WZ.Sensor.MagicCube.Flip] =~ /^((?!7007|7008).)*$/)\
    (	## Hier wird der Filter eingesetzt, so das nur tätsächliche Seitenänderungen erfasst werden \
      set $SELF:FILTER=topSide!={((substr([?WZ.Sensor.MagicCube.Flip],0,1)))} topSide {((substr([?WZ.Sensor.MagicCube.Flip],0,1)))},\
      set $SELF action topSide[$SELF:topSide]\
    )\
  ),\
  \
  (\
    IF ([?$SELF:topSide] eq {((substr([?WZ.Sensor.MagicCube.Flip],3,1)))})\
    (\
      set $SELF doubleTap triggert,\
      set $SELF action doubleTap\
    )\
  ),\
  \
  (\
    IF ([?WZ.Sensor.MagicCube.Flip] eq 7007)\
    (\
      set $SELF shake triggert,\
      set $SELF action shake\
    )\
  ),\
  \
  (\
    IF ({((substr([?WZ.Sensor.MagicCube.Flip],1,3)))} eq 000)\
    (\
      set $SELF swipe triggert,\
      set $SELF action swipe\
    )\
  ),\
  \
  (\
    IF ([?WZ.Sensor.MagicCube.Flip] =~ /(1006|2005|3004|4003|5002|6001)/)\
    (\
      set $SELF flip180 triggert,\
      set $SELF action flip180\
    )\
  ),\
  \
  (\
    IF ([?WZ.Sensor.MagicCube.Flip] =~ /(1002|1003|1004|1005|2001|2003|2004|2006|3001|3002|3005|3006|4001|4002|4005|4006|5001|5003|5004|5006|6002|6003|6004|6005)/)\
    (\
      set $SELF flip90 triggert,\
      set $SELF action flip90\
    )\
  )\
  \
)
attr WZ.DOIF.Sensor.MagicCube alias WZ.DOIF.Sensor.MagicCube
attr WZ.DOIF.Sensor.MagicCube do always
attr WZ.DOIF.Sensor.MagicCube icon helper_doif
attr WZ.DOIF.Sensor.MagicCube readingList rotateDirection, topSide, doubleTap, swipe, shake, flip90, flip180, action
attr WZ.DOIF.Sensor.MagicCube room 1.1_Wohnzimmer,9.2_DOIF
attr WZ.DOIF.Sensor.MagicCube state [$SELF:action]

Damit habe ich auch schon zwei Spielereien umgesetzt…..

 

Spielerei Nummer 1: das WZ.DOIF.Steuerung.MagicCube.Sonos

Device Information: wiki.fhem.de/wiki/SONOS

defmod WZ.DOIF.Steuerung.MagicCube.Sonos DOIF ## Nach rechts derehen\
([WZ.DOIF.Sensor.MagicCube:action] eq "rotateRight" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 1) \
(\
  set Sonos_Wohnzimmer Volume +2\
)\
## Nach links drehen\
DOELSEIF([WZ.DOIF.Sensor.MagicCube:action] eq "rotateLeft" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 1)\
(\
  set Sonos_Wohnzimmer Volume -2\
)\
## Nach rechts wischen\
DOELSEIF([WZ.DOIF.Sensor.MagicCube:action] eq "swipe" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 1)\
(\
  set Sonos_Wohnzimmer Next\
)\
## Doppel Tab\
DOELSEIF([WZ.DOIF.Sensor.MagicCube:action] eq "doubleTap" and [?Sonos_Wohnzimmer:transportState] eq "PLAYING" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 1)\
(\
  set Sonos_Wohnzimmer Pause\
)\
## Doppel Tab\
DOELSEIF([WZ.DOIF.Sensor.MagicCube:action] eq "doubleTap" and [?Sonos_Wohnzimmer:transportState] ne "PLAYING" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 1)\
(\
  set Sonos_Wohnzimmer Play\
)
attr WZ.DOIF.Steuerung.MagicCube.Sonos alias WZ.DOIF.Steuerung.MagicCube.Sonos
attr WZ.DOIF.Steuerung.MagicCube.Sonos do always
attr WZ.DOIF.Steuerung.MagicCube.Sonos icon helper_doif
attr WZ.DOIF.Steuerung.MagicCube.Sonos room 1.1_Wohnzimmer,9.2_DOIF

Spielerei Nummer 2: das WZ.DOIF.Steuerung.MagicCube.RGB

Device Information: ESP RGBWW Wifi Led Controller

defmod WZ.DOIF.Steuerung.MagicCube.RGB DOIF ## Nach rechts derehen\
([WZ.DOIF.Sensor.MagicCube:action] eq "rotateRight" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 2) \
(\
  set WZ.Licht.RGB.Fensterfront hue +15 0.5\
)\
## Nach links drehen\
DOELSEIF([WZ.DOIF.Sensor.MagicCube:action] eq "rotateLeft" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 2)\
(\
  set WZ.Licht.RGB.Fensterfront hue -15 0.5\
)\
## Nach rechts wischen\
DOELSEIF([WZ.DOIF.Sensor.MagicCube:action] eq "swipe" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 2)\
(\
  set WZ.Licht.RGB.Fensterfront hue +90 5 r,\
  set WZ.Licht.RGB.Fensterfront sat 50 5 qr,\
  set WZ.Licht.RGB.Fensterfront sat 100 5 qr\
)\
## Doppel Tab\
DOELSEIF([WZ.DOIF.Sensor.MagicCube:action] eq "doubleTap" and [?WZ.Licht.RGB.Fensterfront:stateLight] eq "off" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 2)\
(\
  set WZ.Licht.RGB.Fensterfront on\
)\
## Doppel Tab\
DOELSEIF([WZ.DOIF.Sensor.MagicCube:action] eq "doubleTap" and [?WZ.Licht.RGB.Fensterfront:stateLight] eq "on" and [?WZ.DOIF.Sensor.MagicCube:topSide] eq 2)\
(\
  set WZ.Licht.RGB.Fensterfront off\
)
attr WZ.DOIF.Steuerung.MagicCube.RGB alias WZ.DOIF.Steuerung.MagicCube.RGB
attr WZ.DOIF.Steuerung.MagicCube.RGB do always
attr WZ.DOIF.Steuerung.MagicCube.RGB icon helper_doif
attr WZ.DOIF.Steuerung.MagicCube.RGB room 1.1_Wohnzimmer,9.2_DOIF

 

Mit * markierte Links sind Amazon ParnerNet Affiliate Links


0 Kommentare

Schreibe einen Kommentar

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.