gh-6 Device operating mode parsed from bitfield. Bitfields are now 16 bits long, as they should be
This commit is contained in:
parent
ea00590e33
commit
aba5156e7a
|
@ -93,7 +93,7 @@ func newRegister(address, symbol, typ, multiplier, description string) pingvinRe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reserved := symbol == "Reserved" && description == "Reserved"
|
reserved := symbol == "Reserved" && description == "Reserved"
|
||||||
register := pingvinRegister{addr, symbol, 0, "00000000", typ, description, reserved, multipl}
|
register := pingvinRegister{addr, symbol, 0, "0000000000000000", typ, description, reserved, multipl}
|
||||||
return register
|
return register
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -215,7 +215,15 @@ func (p *PingvinKL) updateRegisters() {
|
||||||
}
|
}
|
||||||
if p.Registers[k].Type == "bitfield" {
|
if p.Registers[k].Type == "bitfield" {
|
||||||
p.Registers[k].Value = int(value)
|
p.Registers[k].Value = int(value)
|
||||||
p.Registers[k].Bitfield = fmt.Sprintf("%08b", uvalue)
|
// p.Registers[k].Bitfield = fmt.Sprintf("%16b", uvalue)
|
||||||
|
p.Registers[k].Bitfield = ""
|
||||||
|
for i := 16; i >= 0; i-- {
|
||||||
|
x := 0
|
||||||
|
if p.Registers[k].Value>>i&0x1 == 1 {
|
||||||
|
x = 1
|
||||||
|
}
|
||||||
|
p.Registers[k].Bitfield = fmt.Sprintf("%s%s", p.Registers[k].Bitfield, strconv.Itoa(x))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
k++
|
k++
|
||||||
}
|
}
|
||||||
|
@ -271,12 +279,42 @@ func (p *PingvinKL) populateStatus() {
|
||||||
p.Status.VentInfo.ExtractHum48h = p.Registers[50].Value / p.Registers[50].Multiplier
|
p.Status.VentInfo.ExtractHum48h = p.Registers[50].Value / p.Registers[50].Multiplier
|
||||||
p.Status.HrcEffIn = p.Registers[29].Value / p.Registers[29].Multiplier
|
p.Status.HrcEffIn = p.Registers[29].Value / p.Registers[29].Multiplier
|
||||||
p.Status.HrcEffEx = p.Registers[30].Value / p.Registers[30].Multiplier
|
p.Status.HrcEffEx = p.Registers[30].Value / p.Registers[30].Multiplier
|
||||||
// TODO: Operating mode in separate function
|
p.Status.OpMode = parseStatus(p.Registers[44].Value)
|
||||||
// TODO: Alarms, n of alarms
|
// TODO: Alarms, n of alarms
|
||||||
p.Status.DaysUntilService = p.Registers[538].Value / p.Registers[538].Multiplier
|
p.Status.DaysUntilService = p.Registers[538].Value / p.Registers[538].Multiplier
|
||||||
// TODO: Uptime & date in separate functions
|
// TODO: Uptime & date in separate functions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseStatus(value int) string {
|
||||||
|
val := int16(value)
|
||||||
|
pingvinStatuses := []string{
|
||||||
|
"Normal",
|
||||||
|
"Max heating",
|
||||||
|
"Max cooling",
|
||||||
|
"Stopped by alarm",
|
||||||
|
"Stopped by user",
|
||||||
|
"Away",
|
||||||
|
"reserved",
|
||||||
|
"Temperature boost",
|
||||||
|
"CO2 boost",
|
||||||
|
"RH boost",
|
||||||
|
"Manual boost",
|
||||||
|
"Overpressure",
|
||||||
|
"Cooker hood mode",
|
||||||
|
"Central vac mode",
|
||||||
|
"Electric heater cooloff",
|
||||||
|
"Summer night cooling",
|
||||||
|
"HRC defrost",
|
||||||
|
}
|
||||||
|
for i := 1; i <= 16; i++ {
|
||||||
|
if val>>i&0x1 == 1 {
|
||||||
|
return pingvinStatuses[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "Normal"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PingvinKL) Monitor(interval int) {
|
func (p *PingvinKL) Monitor(interval int) {
|
||||||
for {
|
for {
|
||||||
time.Sleep(time.Duration(interval) * time.Second)
|
time.Sleep(time.Duration(interval) * time.Second)
|
||||||
|
|
Loading…
Reference in New Issue