32 lines
998 B
Haskell
32 lines
998 B
Haskell
{-# 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 ())
|