some tweaks/renames, schedule documentation

This commit is contained in:
Sam Lewis
2022-11-01 01:20:15 -04:00
parent cbfce76897
commit b0804e39d0
6 changed files with 61 additions and 53 deletions

18
app.go
View File

@@ -41,16 +41,16 @@ type timeRange struct {
}
/*
NewApp establishes the websocket connection and returns an object
App establishes the websocket connection and returns an object
you can use to register schedules and listeners.
*/
func NewApp(connString string) *app {
func App(connString string) *app {
token := os.Getenv("HA_AUTH_TOKEN")
conn, ctx, ctxCancel := ws.SetupConnection(connString, token)
httpClient := http.NewHttpClient(connString, token)
service := NewService(conn, ctx, httpClient)
service := newService(conn, ctx, httpClient)
state := newState(httpClient)
return &app{
@@ -72,7 +72,8 @@ func (a *app) Cleanup() {
}
}
func (a *app) RegisterSchedule(s Schedule) {
func (a *app) RegisterSchedules(schedules ...Schedule) {
for _, s := range schedules {
// realStartTime already set for sunset/sunrise
if s.isSunrise || s.isSunset {
a.schedules.Insert(s, float64(s.realStartTime.Unix()))
@@ -98,8 +99,10 @@ func (a *app) RegisterSchedule(s Schedule) {
s.realStartTime = startTime
a.schedules.Insert(s, float64(startTime.Unix()))
}
}
func (a *app) RegisterEntityListener(etl EntityListener) {
func (a *app) RegisterEntityListeners(etls ...EntityListener) {
for _, etl := range etls {
if etl.delay != 0 && etl.toState == "" {
panic("EntityListener error: you have to use ToState() when using Duration()")
}
@@ -112,8 +115,10 @@ func (a *app) RegisterEntityListener(etl EntityListener) {
}
}
}
}
func (a *app) RegisterEventListener(evl EventListener) {
func (a *app) RegisterEventListeners(evls ...EventListener) {
for _, evl := range evls {
for _, eventType := range evl.eventTypes {
if elList, ok := a.eventListeners[eventType]; ok {
a.eventListeners[eventType] = append(elList, &evl)
@@ -123,6 +128,7 @@ func (a *app) RegisterEventListener(evl EventListener) {
}
}
}
}
func getSunriseSunset(a *app, sunrise bool, offset []DurationString) carbon.Carbon {
printString := "Sunset"

View File

@@ -26,6 +26,7 @@ type EntityListener struct {
exceptionRanges []timeRange
}
// TODO: add state object as second arg
type EntityListenerCallback func(*Service, EntityData)
type EntityData struct {
@@ -60,7 +61,7 @@ type msgState struct {
/* Methods */
func EntityListenerBuilder() elBuilder1 {
func NewEntityListener() elBuilder1 {
return elBuilder1{EntityListener{
lastRan: carbon.Now().StartOfCentury(),
}}

View File

@@ -21,6 +21,7 @@ type EventListener struct {
exceptionRanges []timeRange
}
// TODO: add state object as second arg
type EventListenerCallback func(*Service, EventData)
type EventData struct {
@@ -30,7 +31,7 @@ type EventData struct {
/* Methods */
func EventListenerBuilder() eventListenerBuilder1 {
func NewEventListener() eventListenerBuilder1 {
return eventListenerBuilder1{EventListener{
lastRan: carbon.Now().StartOfCentury(),
}}

View File

@@ -9,39 +9,39 @@ import (
)
func main() {
app := ga.NewApp("0.0.0.0:8123") // Replace with your Home Assistant IP Address
app := ga.App("0.0.0.0:8123") // Replace with your Home Assistant IP Address
defer app.Cleanup()
pantryDoor := ga.
EntityListenerBuilder().
NewEntityListener().
EntityIds("binary_sensor.pantry_door").
Call(pantryLights).
Build()
_11pmSched := ga.
ScheduleBuilder().
NewSchedule().
Call(lightsOut).
Daily().
At("23:00").
Build()
_30minsBeforeSunrise := ga.
ScheduleBuilder().
NewSchedule().
Call(sunriseSched).
Daily().
Sunrise(app, "-30m").
Build()
zwaveEventListener := ga.
EventListenerBuilder().
NewEventListener().
EventTypes("zwave_js_value_notification").
Call(onEvent).
Build()
app.RegisterEntityListener(pantryDoor)
app.RegisterSchedule(_11pmSched)
app.RegisterSchedule(_30minsBeforeSunrise)
app.RegisterEventListener(zwaveEventListener)
app.RegisterEntityListeners(pantryDoor)
app.RegisterSchedules(_11pmSched)
app.RegisterSchedules(_30minsBeforeSunrise)
app.RegisterEventListeners(zwaveEventListener)
app.Start()

View File

@@ -50,7 +50,7 @@ type scheduleBuilderEnd struct {
schedule Schedule
}
func ScheduleBuilder() scheduleBuilder {
func NewSchedule() scheduleBuilder {
return scheduleBuilder{
Schedule{
frequency: 0,

View File

@@ -20,7 +20,7 @@ type Service struct {
InputNumber *services.InputNumber
}
func NewService(conn *websocket.Conn, ctx context.Context, httpClient *http.HttpClient) *Service {
func newService(conn *websocket.Conn, ctx context.Context, httpClient *http.HttpClient) *Service {
return &Service{
Light: services.BuildService[services.Light](conn, ctx),
HomeAssistant: services.BuildService[services.HomeAssistant](conn, ctx),