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