Drawer controller

This commit is contained in:
2026-08-21 00:01:12 +03:00
parent 0c3413c1c6
commit 5f0aad4e85
3 changed files with 29 additions and 1 deletions
+10
View File
@@ -25,6 +25,7 @@ module HomeAssistant.Controller
, Presence(..)
, presence
, debug
, switch
) where
import AFRP (Mealy, eff, Event(..), hold, events, changes, filterA, (>>|), toEvent)
@@ -98,6 +99,15 @@ light entityIds b = Service
, serviceTarget=entityIds
}
-- Name conflict with AFRP
switch :: [T.Text] -> Bool -> Service
switch entityIds b = Service
{ serviceDomain="switch"
, serviceName= bool "turn_off" "turn_on" b
, serviceData=Nothing
, serviceTarget=entityIds
}
lightController :: HASS (Event Value) (Event DoorState)
lightController = proc ev -> do
doorState <- door -< ev
+17
View File
@@ -9,6 +9,7 @@ import Data.Aeson (Value, object, (.=))
import Control.Arrow ((>>>), returnA, arr, Arrow (..))
import Control.Lens ((^?), to, traversed)
import Data.Aeson.Lens (key, _String)
import Data.Bool (bool)
@@ -98,3 +99,19 @@ bedroomButtonController = proc x -> do
Event (Enishen DoubleClickOn) -> callService (activateScene "scene.makuuhuone_keski") -< ()
Event (Enishen LongClickOn) -> callService (activateScene "scene.makuuhuone_kirkas") -< ()
_ -> returnA -< ()
drawer :: HASS (Event Value) (Event DoorState)
drawer = entityBool "binary_sensor.bedroom_nightstand_drawer_sensor_masse_contact"
>>> arr (fmap (bool Closed Open))
bedroomDrawerController :: HASS (Event Value) ()
bedroomDrawerController = proc x -> do
st <- drawer -< x
case st of
Event Open -> callService (switch [entity] True) -< ()
Event Closed -> callService (switch [entity] False) -< ()
_ -> returnA -< ()
where
entity = "switch.bedroom_drawer_light_masse"
+2 -1
View File
@@ -26,7 +26,7 @@ import HomeAssistant.Runtime.Connection (readerAction, writerAction)
import HomeAssistant.Runtime.Supervisor (defaultBackoff, supervised)
import Network.Socket (withSocketsDo)
import System.Environment (getEnv)
import HomeAssistant.Controller.Bedroom (bedroomPresenceController, bedroomButtonController)
import HomeAssistant.Controller.Bedroom (bedroomPresenceController, bedroomButtonController, bedroomDrawerController)
step :: (forall x. eff x -> IO x) -> Mealy eff a b -> a -> IO (b, Mealy eff a b)
step nt (Mealy f) a = do
@@ -39,6 +39,7 @@ controllers :: [Controller]
controllers =
[ Controller "bedroom-presence" bedroomPresenceController
, Controller "bedroom-button" bedroomButtonController
, Controller "bedroom-drawer" bedroomDrawerController
]
-- | Steps the machine for every inbound message; service calls go to the