Compare commits
No commits in common. "d101053188e9a18f05407a48864f7312e3dd4093" and "0d83d14329e60a4adf7b76d40b023dec0998cc9e" have entirely different histories.
d101053188
...
0d83d14329
@ -22,11 +22,11 @@ type Error string
|
|||||||
func (e Error) Error() string { return string(e) }
|
func (e Error) Error() string { return string(e) }
|
||||||
|
|
||||||
type DeviceState struct {
|
type DeviceState struct {
|
||||||
Mode string `json:"mode"`
|
Mode string `json:"mode"`
|
||||||
Setpoint int `json:"setpoint"`
|
Setpoint int `json:"setpoint"`
|
||||||
Time time.Time `json:"time"`
|
Time time.Time `json:"time"`
|
||||||
ProgramName string `json:"program_name"`
|
Program_name string `json:"program_name"`
|
||||||
UntilTime time.Time `json:"until_time"`
|
Until_time time.Time `json:"until_time"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DeviceState) Equivalent(state DeviceState) bool {
|
func (s *DeviceState) Equivalent(state DeviceState) bool {
|
||||||
@ -50,11 +50,11 @@ func (s *DeviceState) Equivalent(state DeviceState) bool {
|
|||||||
if state.Setpoint != s.Setpoint {
|
if state.Setpoint != s.Setpoint {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if !state.UntilTime.Equal(s.UntilTime) {
|
if !state.Until_time.Equal(s.Until_time) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
case "program":
|
case "program":
|
||||||
if state.ProgramName != s.ProgramName {
|
if state.Program_name != s.Program_name {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -81,8 +81,8 @@ func (d Device) ListenTopic() (string, error) {
|
|||||||
func (d *Device) Program() (WeekProgram, error) {
|
func (d *Device) Program() (WeekProgram, error) {
|
||||||
// return current device program if specified or default one
|
// return current device program if specified or default one
|
||||||
prog_name := "default"
|
prog_name := "default"
|
||||||
if d.State.ProgramName != "" {
|
if d.State.Program_name != "" {
|
||||||
prog_name = d.State.ProgramName
|
prog_name = d.State.Program_name
|
||||||
}
|
}
|
||||||
|
|
||||||
program, ok := d.Settings.Programs[prog_name]
|
program, ok := d.Settings.Programs[prog_name]
|
||||||
@ -94,10 +94,11 @@ func (d *Device) Program() (WeekProgram, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) ProgramName() string {
|
func (d *Device) ProgramName() string {
|
||||||
if d.State.ProgramName != "" {
|
prog_name := "default"
|
||||||
return d.State.ProgramName
|
if d.State.Program_name != "" {
|
||||||
|
prog_name = d.State.Program_name
|
||||||
}
|
}
|
||||||
return "default"
|
return prog_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) publishState(pubchan chan Message) error {
|
func (d *Device) publishState(pubchan chan Message) error {
|
||||||
@ -151,7 +152,11 @@ func (d *Device) SetState(log *zerolog.Logger, state DeviceState, pubchan chan M
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return d.publishState(pubchan)
|
if err := d.publishState(pubchan); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) CheckSetpoint(log *zerolog.Logger, pubchan chan Message) error {
|
func (d *Device) CheckSetpoint(log *zerolog.Logger, pubchan chan Message) error {
|
||||||
@ -161,7 +166,9 @@ func (d *Device) CheckSetpoint(log *zerolog.Logger, pubchan chan Message) error
|
|||||||
}
|
}
|
||||||
|
|
||||||
if change {
|
if change {
|
||||||
return d.publishState(pubchan)
|
if err := d.publishState(pubchan); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -175,7 +182,7 @@ func (d *Device) update(log *zerolog.Logger, pubchan chan Message) (bool, error)
|
|||||||
Int("current_setpoint", d.CurrentSetpoint).
|
Int("current_setpoint", d.CurrentSetpoint).
|
||||||
Str("State.Mode", d.State.Mode).
|
Str("State.Mode", d.State.Mode).
|
||||||
Int("State.Setpoint", d.State.Setpoint).
|
Int("State.Setpoint", d.State.Setpoint).
|
||||||
Str("State.Program_name", d.State.ProgramName).
|
Str("State.Program_name", d.State.Program_name).
|
||||||
Logger()
|
Logger()
|
||||||
log.Debug().Msg("check if setpoint need an update")
|
log.Debug().Msg("check if setpoint need an update")
|
||||||
|
|
||||||
@ -245,10 +252,10 @@ func (d *Device) handle_reset_state(log *zerolog.Logger, pubchan chan Message) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
d.State = DeviceState{
|
d.State = DeviceState{
|
||||||
Setpoint: value,
|
Setpoint: value,
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
ProgramName: d.ProgramName(),
|
Program_name: d.ProgramName(),
|
||||||
Time: timeNow(),
|
Time: timeNow(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.CurrentSetpoint != value {
|
if d.CurrentSetpoint != value {
|
||||||
@ -277,9 +284,9 @@ func (d *Device) handle_always(log *zerolog.Logger, pubchan chan Message) (bool,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) handle_until_time(log *zerolog.Logger, pubchan chan Message) (bool, error) {
|
func (d *Device) handle_until_time(log *zerolog.Logger, pubchan chan Message) (bool, error) {
|
||||||
*log = log.With().Time("until_time", d.State.UntilTime).Logger()
|
*log = log.With().Time("until_time", d.State.Until_time).Logger()
|
||||||
|
|
||||||
if d.State.UntilTime.Before(timeNow()) {
|
if d.State.Until_time.Before(timeNow()) {
|
||||||
log.Info().Msg("until_time passed, reset")
|
log.Info().Msg("until_time passed, reset")
|
||||||
return d.handle_reset_state(log, pubchan)
|
return d.handle_reset_state(log, pubchan)
|
||||||
}
|
}
|
||||||
@ -329,7 +336,7 @@ func (d *Device) handle_until_next(log *zerolog.Logger, pubchan chan Message) (b
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) handle_program(log *zerolog.Logger, pubchan chan Message) (bool, error) {
|
func (d *Device) handle_program(log *zerolog.Logger, pubchan chan Message) (bool, error) {
|
||||||
*log = log.With().Str("program", d.State.ProgramName).Logger()
|
*log = log.With().Str("program", d.State.Program_name).Logger()
|
||||||
|
|
||||||
program, err := d.Program()
|
program, err := d.Program()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -342,13 +349,13 @@ func (d *Device) handle_program(log *zerolog.Logger, pubchan chan Message) (bool
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
d.State.Setpoint = value
|
|
||||||
|
|
||||||
if d.CurrentSetpoint != value {
|
if d.CurrentSetpoint != value {
|
||||||
log.Info().Msg("publish setpoint update")
|
log.Info().Msg("publish setpoint update")
|
||||||
if err := d.SetSetpoint(value, pubchan); err != nil {
|
if err := d.SetSetpoint(value, pubchan); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
d.State.Setpoint = value
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,10 +48,10 @@ var test_device = Device{
|
|||||||
},
|
},
|
||||||
CurrentSetpoint: 0,
|
CurrentSetpoint: 0,
|
||||||
State: DeviceState{
|
State: DeviceState{
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "default",
|
Program_name: "default",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,10 +64,10 @@ func TestStateEquivalent(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "default",
|
Program_name: "default",
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "always",
|
Mode: "always",
|
||||||
@ -78,46 +78,46 @@ func TestStateEquivalent(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "default",
|
Program_name: "default",
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time.Add(1 * time.Minute),
|
Time: test_time.Add(1 * time.Minute),
|
||||||
ProgramName: "default",
|
Program_name: "default",
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "default",
|
Program_name: "default",
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
Setpoint: 13,
|
Setpoint: 13,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "default",
|
Program_name: "default",
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "default",
|
Program_name: "default",
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
Setpoint: 13,
|
Setpoint: 13,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "other",
|
Program_name: "other",
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -128,11 +128,11 @@ func TestStateEquivalent(t *testing.T) {
|
|||||||
Time: test_time,
|
Time: test_time,
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "always",
|
Mode: "always",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "other",
|
Program_name: "other",
|
||||||
UntilTime: test_time,
|
Until_time: test_time,
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
@ -143,11 +143,11 @@ func TestStateEquivalent(t *testing.T) {
|
|||||||
Time: test_time,
|
Time: test_time,
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "always",
|
Mode: "always",
|
||||||
Setpoint: 15,
|
Setpoint: 15,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "other",
|
Program_name: "other",
|
||||||
UntilTime: test_time,
|
Until_time: test_time,
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -158,11 +158,11 @@ func TestStateEquivalent(t *testing.T) {
|
|||||||
Time: test_time,
|
Time: test_time,
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "until_next",
|
Mode: "until_next",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "other",
|
Program_name: "other",
|
||||||
UntilTime: test_time,
|
Until_time: test_time,
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
@ -173,59 +173,59 @@ func TestStateEquivalent(t *testing.T) {
|
|||||||
Time: test_time,
|
Time: test_time,
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "until_next",
|
Mode: "until_next",
|
||||||
Setpoint: 13,
|
Setpoint: 13,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "other",
|
Program_name: "other",
|
||||||
UntilTime: test_time,
|
Until_time: test_time,
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "until_time",
|
Mode: "until_time",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
UntilTime: test_time.Add(1 * time.Hour),
|
Until_time: test_time.Add(1 * time.Hour),
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "until_time",
|
Mode: "until_time",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "other",
|
Program_name: "other",
|
||||||
UntilTime: test_time.Add(1 * time.Hour),
|
Until_time: test_time.Add(1 * time.Hour),
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "until_time",
|
Mode: "until_time",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
UntilTime: test_time.Add(1 * time.Hour),
|
Until_time: test_time.Add(1 * time.Hour),
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "until_time",
|
Mode: "until_time",
|
||||||
Setpoint: 13,
|
Setpoint: 13,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "other",
|
Program_name: "other",
|
||||||
UntilTime: test_time.Add(1 * time.Hour),
|
Until_time: test_time.Add(1 * time.Hour),
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "until_time",
|
Mode: "until_time",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
UntilTime: test_time.Add(1 * time.Hour),
|
Until_time: test_time.Add(1 * time.Hour),
|
||||||
},
|
},
|
||||||
DeviceState{
|
DeviceState{
|
||||||
Mode: "until_time",
|
Mode: "until_time",
|
||||||
Setpoint: 14,
|
Setpoint: 14,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "other",
|
Program_name: "other",
|
||||||
UntilTime: test_time.Add(2 * time.Hour),
|
Until_time: test_time.Add(2 * time.Hour),
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
@ -262,7 +262,7 @@ func TestListenTopic(t *testing.T) {
|
|||||||
func TestProgram(t *testing.T) {
|
func TestProgram(t *testing.T) {
|
||||||
//case 1: no program set in state return default
|
//case 1: no program set in state return default
|
||||||
case1_device := test_device
|
case1_device := test_device
|
||||||
case1_device.State.ProgramName = ""
|
case1_device.State.Program_name = ""
|
||||||
|
|
||||||
//case 2: program set "confort" must return it
|
//case 2: program set "confort" must return it
|
||||||
var test_confort_weekprogram = WeekProgram{
|
var test_confort_weekprogram = WeekProgram{
|
||||||
@ -279,11 +279,11 @@ func TestProgram(t *testing.T) {
|
|||||||
"default": test_weekprogram,
|
"default": test_weekprogram,
|
||||||
"confort": test_confort_weekprogram,
|
"confort": test_confort_weekprogram,
|
||||||
}
|
}
|
||||||
case2_device.State.ProgramName = "confort"
|
case2_device.State.Program_name = "confort"
|
||||||
|
|
||||||
//case 3: program set "confort" but not exist
|
//case 3: program set "confort" but not exist
|
||||||
case3_device := test_device
|
case3_device := test_device
|
||||||
case3_device.State.ProgramName = "confort"
|
case3_device.State.Program_name = "confort"
|
||||||
|
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
name string
|
name string
|
||||||
@ -324,15 +324,15 @@ func TestUpdate(t *testing.T) {
|
|||||||
device1 := test_device
|
device1 := test_device
|
||||||
device1.Name = "1"
|
device1.Name = "1"
|
||||||
device1.State = DeviceState{
|
device1.State = DeviceState{
|
||||||
Mode: "program",
|
Mode: "program",
|
||||||
Setpoint: 0,
|
Setpoint: 0,
|
||||||
Time: test_time,
|
Time: test_time,
|
||||||
ProgramName: "",
|
Program_name: "",
|
||||||
}
|
}
|
||||||
|
|
||||||
device2 := test_device
|
device2 := test_device
|
||||||
device2.Name = "2"
|
device2.Name = "2"
|
||||||
device2.State.ProgramName = "unknown"
|
device2.State.Program_name = "unknown"
|
||||||
|
|
||||||
device3 := test_device
|
device3 := test_device
|
||||||
device3.Name = "3"
|
device3.Name = "3"
|
||||||
@ -345,20 +345,20 @@ func TestUpdate(t *testing.T) {
|
|||||||
device4.Name = "4"
|
device4.Name = "4"
|
||||||
device4.CurrentSetpoint = 22
|
device4.CurrentSetpoint = 22
|
||||||
device4.State = DeviceState{
|
device4.State = DeviceState{
|
||||||
Mode: "until_time",
|
Mode: "until_time",
|
||||||
Setpoint: 22,
|
Setpoint: 22,
|
||||||
Time: timeNow(),
|
Time: timeNow(),
|
||||||
UntilTime: timeNow().Add(2 * time.Hour),
|
Until_time: timeNow().Add(2 * time.Hour),
|
||||||
}
|
}
|
||||||
|
|
||||||
device5 := test_device
|
device5 := test_device
|
||||||
device5.Name = "5"
|
device5.Name = "5"
|
||||||
device5.CurrentSetpoint = 17
|
device5.CurrentSetpoint = 17
|
||||||
device5.State = DeviceState{
|
device5.State = DeviceState{
|
||||||
Mode: "until_time",
|
Mode: "until_time",
|
||||||
Setpoint: 22,
|
Setpoint: 22,
|
||||||
Time: timeNow().Add(-2 * time.Hour),
|
Time: timeNow().Add(-2 * time.Hour),
|
||||||
UntilTime: timeNow().Add(-1 * time.Minute),
|
Until_time: timeNow().Add(-1 * time.Minute),
|
||||||
}
|
}
|
||||||
|
|
||||||
device6 := test_device
|
device6 := test_device
|
||||||
|
@ -34,13 +34,13 @@ func (d DayOfWeek) DaysBetween(n DayOfWeek) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Monday DayOfWeek = iota
|
Monday DayOfWeek = 0
|
||||||
Thuesday
|
Thuesday DayOfWeek = 1
|
||||||
Wednesday
|
Wednesday DayOfWeek = 2
|
||||||
Thursday
|
Thursday DayOfWeek = 3
|
||||||
Friday
|
Friday DayOfWeek = 4
|
||||||
Saturday
|
Saturday DayOfWeek = 5
|
||||||
Sunday
|
Sunday DayOfWeek = 6
|
||||||
)
|
)
|
||||||
|
|
||||||
func WeekDayEnToFr(weekday time.Weekday) DayOfWeek {
|
func WeekDayEnToFr(weekday time.Weekday) DayOfWeek {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user