diff --git a/src/HomeAssistant/Controller/Bedroom.hs b/src/HomeAssistant/Controller/Bedroom.hs index 9725afe..1132987 100644 --- a/src/HomeAssistant/Controller/Bedroom.hs +++ b/src/HomeAssistant/Controller/Bedroom.hs @@ -87,17 +87,30 @@ bedroomButtonController = proc x -> do ev <- bedroomButton >>> traceEvent -< x -- Any event will cause the sleep mode to be turned off case ev of - Event _ -> sleepMode -< False - _ -> returnA -< () - case ev of - Event (Masse (OnButton ShortRelease)) -> callService (activateScene "scene.makuuhuone_masse") -< () - Event (Masse (OnButton DoubleClick)) -> callService (activateScene "scene.makuuhuone_keski") -< () - Event (Masse (OnButton LongClick)) -> callService (activateScene "scene.makuuhuone_kirkas") -< () - Event (Masse (OffButton _)) -> callService (light [AreaId "makuuhuone"] Off) -< () - 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") -< () - Event (Enishen (OffButton _)) -> callService (light [AreaId "makuuhuone"] Off) -< () + Event (Masse (OnButton ShortRelease)) -> do + sleepMode -< False + callService (activateScene "scene.makuuhuone_masse") -< () + Event (Masse (OnButton DoubleClick)) -> do + sleepMode -< False + callService (activateScene "scene.makuuhuone_keski") -< () + Event (Masse (OnButton LongClick)) -> do + sleepMode -< False + callService (activateScene "scene.makuuhuone_kirkas") -< () + Event (Masse (OffButton _)) -> do + sleepMode -< False + callService (light [AreaId "makuuhuone"] Off) -< () + Event (Enishen (OnButton ShortRelease)) -> do + sleepMode -< False + callService (activateScene "scene.makuuhuone_jemina") -< () + Event (Enishen (OnButton DoubleClick)) -> do + sleepMode -< False + callService (activateScene "scene.makuuhuone_keski") -< () + Event (Enishen (OnButton LongClick)) -> do + sleepMode -< False + callService (activateScene "scene.makuuhuone_kirkas") -< () + Event (Enishen (OffButton _)) -> do + sleepMode -< False + callService (light [AreaId "makuuhuone"] Off) -< () _ -> returnA -< () where sleepMode = callServiceDyn (switch [EntityId "switch.adaptive_lighting_makuuhuoneen_valot_sleep_mode"] ) diff --git a/test/BedroomSpec.hs b/test/BedroomSpec.hs index 86be855..d9e3ee8 100644 --- a/test/BedroomSpec.hs +++ b/test/BedroomSpec.hs @@ -45,6 +45,7 @@ entitySpec = describe "entities" $ do `shouldBe` S.fromList [ "event.bedroom_quick_remote_masse_action" , "event.bedroom_quick_jemina_action" + , "event.bedroom_remote_action" ] it "bedroomPresenceController subscribes to the presence sensor" $ @@ -89,36 +90,36 @@ buttonSpec = describe "bedroomButtonController" $ do let area = AreaId "makuuhuone" it "Masse single click turns on his nightstand scene (lowest)" $ - services (runHASS bedroomButtonController [masseButton "1_short_release"]) - `shouldBe` [[activateScene "scene.makuuhuone_masse"]] + concat (services (runHASS bedroomButtonController [masseButton "1_short_release"])) + `shouldContain` [activateScene "scene.makuuhuone_masse"] it "Masse double click turns on the middle scene" $ - services (runHASS bedroomButtonController [masseButton "1_double_press"]) - `shouldBe` [[activateScene "scene.makuuhuone_keski"]] + concat (services (runHASS bedroomButtonController [masseButton "1_double_press"])) + `shouldContain` [activateScene "scene.makuuhuone_keski"] it "Masse long click turns on the bright scene" $ - services (runHASS bedroomButtonController [masseButton "1_long_press"]) - `shouldBe` [[activateScene "scene.makuuhuone_kirkas"]] + concat (services (runHASS bedroomButtonController [masseButton "1_long_press"])) + `shouldContain` [activateScene "scene.makuuhuone_kirkas"] it "Masse off click turns the bedroom lights off" $ - services (runHASS bedroomButtonController [masseButton "2_short_release"]) - `shouldBe` [[light [area] Off]] + concat (services (runHASS bedroomButtonController [masseButton "2_short_release"])) + `shouldContain` [light [area] Off] it "Enishen single click turns on her nightstand scene (lowest)" $ - services (runHASS bedroomButtonController [enishenButton "1_short_release"]) - `shouldBe` [[activateScene "scene.makuuhuone_jemina"]] + concat (services (runHASS bedroomButtonController [enishenButton "1_short_release"])) + `shouldContain` [activateScene "scene.makuuhuone_jemina"] it "Enishen double click turns on the middle scene" $ - services (runHASS bedroomButtonController [enishenButton "1_double_press"]) - `shouldBe` [[activateScene "scene.makuuhuone_keski"]] + concat (services (runHASS bedroomButtonController [enishenButton "1_double_press"])) + `shouldContain` [activateScene "scene.makuuhuone_keski"] it "Enishen long click turns on the bright scene" $ - services (runHASS bedroomButtonController [enishenButton "1_long_press"]) - `shouldBe` [[activateScene "scene.makuuhuone_kirkas"]] + concat (services (runHASS bedroomButtonController [enishenButton "1_long_press"])) + `shouldContain` [activateScene "scene.makuuhuone_kirkas"] it "Enishen off click turns the bedroom lights off" $ - services (runHASS bedroomButtonController [enishenButton "2_short_release"]) - `shouldBe` [[light [area] Off]] + concat (services (runHASS bedroomButtonController [enishenButton "2_short_release"])) + `shouldContain` [light [area] Off] it "ignores the initial press (scene only fires on release)" $ services (runHASS bedroomButtonController [masseButton "1_initial_press"])