Current section
Files
Jump to
Current section
Files
src/glome.gleam
import gleam/io
import gleam/otp/process.{Receiver}
import nerf/websocket.{Connection}
import gleam/option.{Some}
import gleam/result
import gleam/map
import gleam/dynamic
import glome/homeassistant.{
HomeAssistant, StateChangeHandlers, add_constrained_handler, add_handler, call_service,
get_state,
}
import glome/core/authentication.{AccessToken}
import glome/homeassistant/state_change_event.{StateChangeEvent}
import glome/homeassistant/entity_id.{EntityId}
import glome/homeassistant/domain.{BinarySensor, Cover, InputBoolean, Light}
import glome/homeassistant/state.{MotionDetected, Normal, Off, On}
import glome/core/json
import glome/homeassistant/environment.{Configuration}
pub fn main() {
assert Some(token) = environment.get_access_token()
assert Ok(_) =
homeassistant.connect(
Configuration("192.168.178.62", 8123, AccessToken(token)),
fn(home_assistant: HomeAssistant) {
home_assistant
|> add_constrained_handler(
for: EntityId(BinarySensor, "*"),
handler: motion_sensor_handler,
constraint: motion_detected,
)
},
)
}
fn motion_sensor_handler(data: StateChangeEvent, home_assistant: HomeAssistant) {
try light_state =
home_assistant
|> get_state(of: EntityId(Light, "main_downstairs"))
Ok(Nil)
}
fn motion_detected(data: StateChangeEvent, home_assistant: HomeAssistant) {
data.old_state.value == Normal && data.new_state.value == MotionDetected
}