set fan mode

This commit is contained in:
Javier Peletier
2020-12-15 17:08:01 +01:00
parent a7298c3ff4
commit af0ea3a880
3 changed files with 35 additions and 1 deletions

View File

@@ -172,6 +172,23 @@ func (b *Bridge) Start() error {
log.Printf("Cannot set target temperature to %g in zone %d", targetTemp, zone.ZoneNumber)
}
})
if err != nil {
return err
}
err = b.Subscribe(fanModeSetTopic, func(message string) {
fm, err := Str2FanMode(message)
if err != nil {
log.Printf("Unknown fan mode %q in message to zone %d", message, zone.ZoneNumber)
}
err = zone.SetFanMode(fm)
if err != nil {
log.Printf("Cannot set fan mode to %s in zone %d", message, zone.ZoneNumber)
}
})
if err != nil {
return err
}
name := fmt.Sprintf("%s_zone%d", b.ModuleName, zone.ZoneNumber)
config := map[string]interface{}{

View File

@@ -1,6 +1,9 @@
package kn
import "koolnova2mqtt/bimap"
import (
"errors"
"koolnova2mqtt/bimap"
)
const NUM_ZONES = 16
@@ -81,6 +84,14 @@ func FanMode2Str(fm FanMode) string {
return st.(string)
}
func Str2FanMode(st string) (FanMode, error) {
fm, ok := FanModes.Get(st)
if !ok {
return FAN_OFF, errors.New("Unknown fan mode")
}
return fm.(FanMode), nil
}
func KnMode2Str(hm KnMode) string {
st, ok := KnModes.GetInverse(hm)
if !ok {

View File

@@ -100,6 +100,12 @@ func (z *Zone) GetFanMode() FanMode {
return (FanMode)(r2&0x00F0) >> 4
}
func (z *Zone) SetFanMode(fanMode FanMode) error {
r2 := z.ReadRegister(REG_MODE) & 0x000F
fm := (uint16(fanMode) & 0x000F) << 4
return z.WriteRegister(REG_MODE, r2|fm)
}
func (z *Zone) GetHvacMode() KnMode {
r2 := z.ReadRegister(REG_MODE)
return (KnMode)(r2 & 0x000F)