Fix ikea buttons
This commit is contained in:
@@ -48,28 +48,30 @@ bedroomPresenceController = proc x -> do
|
||||
Event Occupied -> callService (activateScene "makuuhuone_lights_snapshot") -< ()
|
||||
_ -> returnA -< ()
|
||||
|
||||
-- Ikea quick buttons are identified by different event types
|
||||
data IkeaQuickButton
|
||||
= ShortClickOn
|
||||
| DoubleClickOn
|
||||
| LongClickOn
|
||||
| ShortClickOff
|
||||
| DoubleClickOff
|
||||
| LongClickOff
|
||||
data IkeaGesture
|
||||
= ShortClick
|
||||
| ShortRelease
|
||||
| DoubleClick
|
||||
| LongClick
|
||||
deriving Show
|
||||
data IkeaButton a = OnButton !a | OffButton !a
|
||||
deriving Show
|
||||
|
||||
|
||||
toIkeaQuickButton :: T.Text -> Maybe IkeaQuickButton
|
||||
toIkeaQuickButton :: T.Text -> Maybe (IkeaButton IkeaGesture)
|
||||
toIkeaQuickButton = \case
|
||||
"1_initial_press" -> Just ShortClickOn
|
||||
"1_double_press" -> Just DoubleClickOn
|
||||
"1_long_press" -> Just LongClickOn
|
||||
"2_initial_press" -> Just ShortClickOff
|
||||
"2_double_press" -> Just DoubleClickOff
|
||||
"2_long_press" -> Just LongClickOff
|
||||
-- 1 is on, 2 is off side of the button
|
||||
"1_initial_press" -> Just $ OnButton ShortClick
|
||||
"1_short_release" -> Just $ OnButton ShortRelease
|
||||
"1_double_press" -> Just $ OnButton DoubleClick
|
||||
"1_long_press" -> Just $ OnButton LongClick
|
||||
"2_initial_press" -> Just $ OffButton ShortClick
|
||||
"2_short_release" -> Just $ OffButton ShortRelease
|
||||
"2_double_press" -> Just $ OffButton DoubleClick
|
||||
"2_long_press" -> Just $ OffButton LongClick
|
||||
_ -> Nothing
|
||||
|
||||
ikeaQuickButton :: T.Text -> HASS (Event Value) (Event IkeaQuickButton)
|
||||
ikeaQuickButton :: T.Text -> HASS (Event Value) (Event (IkeaButton IkeaGesture))
|
||||
ikeaQuickButton entityId =
|
||||
entityChangeEvent' entityId
|
||||
>>| arr (maybe (Left ()) Right . eventType)
|
||||
@@ -79,8 +81,8 @@ ikeaQuickButton entityId =
|
||||
|
||||
|
||||
data BedroomControls
|
||||
= Masse IkeaQuickButton
|
||||
| Enishen IkeaQuickButton
|
||||
= Masse (IkeaButton IkeaGesture)
|
||||
| Enishen (IkeaButton IkeaGesture)
|
||||
deriving Show
|
||||
|
||||
|
||||
@@ -94,12 +96,12 @@ bedroomButtonController :: HASS (Event Value) ()
|
||||
bedroomButtonController = proc x -> do
|
||||
ev <- bedroomButton >>> traceEvent -< x
|
||||
case ev of
|
||||
Event (Masse ShortClickOn) -> callService (activateScene "scene.makuuhuone_masse") -< () -- this should be on release
|
||||
Event (Masse DoubleClickOn) -> callService (activateScene "scene.makuuhuone_keski") -< ()
|
||||
Event (Masse LongClickOn) -> callService (activateScene "scene.makuuhuone_kirkas") -< ()
|
||||
Event (Enishen ShortClickOn) -> callService (activateScene "scene.makuuhuone_jemina") -< ()
|
||||
Event (Enishen DoubleClickOn) -> callService (activateScene "scene.makuuhuone_keski") -< ()
|
||||
Event (Enishen LongClickOn) -> callService (activateScene "scene.makuuhuone_kirkas") -< ()
|
||||
Event (Masse (OnButton ShortRelease)) -> callService (activateScene "scene.makuuhuone_masse") -< () -- this should be on release
|
||||
Event (Masse (OnButton DoubleClick)) -> callService (activateScene "scene.makuuhuone_keski") -< ()
|
||||
Event (Masse (OnButton LongClick)) -> callService (activateScene "scene.makuuhuone_kirkas") -< ()
|
||||
Event (Enishen (OnButton ShortRelease)) -> callService (activateScene "scene.makuuhuone_jemina") -< ()
|
||||
Event (Enishen (OnButton DoubleClick)) -> callService (activateScene "scene.makuuhuone_keski") -< ()
|
||||
Event (Enishen (OnButton LongClick)) -> callService (activateScene "scene.makuuhuone_kirkas") -< ()
|
||||
_ -> returnA -< ()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user