Packages

A Gleam library to write and run Home Assistant automations.

Current section

Files

Jump to
glome src glome.gleam
Raw

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.{Cover, InputBoolean, Light}
import glome/homeassistant/state.{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_handler(
for: EntityId(Cover, "*"),
handler: input_boolean_handler,
)
},
)
}
fn input_boolean_handler(data: StateChangeEvent, home_assistant: HomeAssistant) {
io.println("")
io.println("### Event handler ###")
io.println("")
data
|> io.debug
try resp =
home_assistant
|> get_state(of: EntityId(Light, "main_downstairs"))
io.println("")
io.println("### ############ ###")
Ok(Nil)
}
fn got_turned_on(data: StateChangeEvent, home_assistant: HomeAssistant) {
data.old_state.value == Off && data.new_state.value == On
}