{-# LANGUAGE Arrows #-} {-# LANGUAGE OverloadedStrings #-} module HomeAssistant.Controller.Ruuvi ( Ruuvi(..) , ruuvi , ruuviTemperatures , ruuviPressures , ruuviController ) where import AFRP (Mealy, Event, hold, changes, rollup) import Control.Category ((>>>)) import Data.Aeson (Value) import HomeAssistant.Controller (entityRead, traceEvent, HASS) import Control.Arrow (Arrow(..)) ruuviTemperatures :: Mealy eff (Event Value) Double ruuviTemperatures = entityRead @Double "sensor.ruuvitag_b168_temperature" >>> hold 0 ruuviPressures :: Mealy eff (Event Value) Double ruuviPressures = entityRead "sensor.ruuvitag_b168_pressure" >>> hold 0 data Ruuvi = Ruuvi { ruuviTemperature :: Double, ruuviPressure :: Double } deriving (Show, Eq) ruuvi :: Mealy eff (Event Value) (Event Ruuvi) ruuvi = (Ruuvi <$> ruuviTemperatures <*> ruuviPressures) >>> changes ruuviController :: HASS (Event Value) () ruuviController = ruuvi >>> rollup 1 30 >>> traceEvent >>> arr (const ())