gh-16 Retry reading registers 5 times, added debug variable to PingvinKL.New(). Not much debug output yet.
This commit is contained in:
parent
ea148e5a38
commit
175254b4ba
|
@ -62,7 +62,7 @@ func listen() {
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
log.Println("enervent-ctrl version", version)
|
log.Println("enervent-ctrl version", version)
|
||||||
pingvin = pingvinKL.New()
|
pingvin = pingvinKL.New(DEBUG)
|
||||||
pingvin.Update()
|
pingvin.Update()
|
||||||
go pingvin.Monitor(15)
|
go pingvin.Monitor(15)
|
||||||
listen()
|
listen()
|
||||||
|
|
|
@ -2,7 +2,6 @@ package pingvinKL
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
@ -30,6 +29,7 @@ type PingvinKL struct {
|
||||||
Status pingvinStatus
|
Status pingvinStatus
|
||||||
buslock *sync.Mutex
|
buslock *sync.Mutex
|
||||||
statuslock *sync.Mutex
|
statuslock *sync.Mutex
|
||||||
|
debug bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// single register data
|
// single register data
|
||||||
|
@ -182,9 +182,16 @@ func (p *PingvinKL) updateRegisters() {
|
||||||
if regs-k < 125 {
|
if regs-k < 125 {
|
||||||
r = regs - k
|
r = regs - k
|
||||||
}
|
}
|
||||||
results, err := client.ReadHoldingRegisters(uint16(k), uint16(r))
|
results := []byte{}
|
||||||
if err != nil {
|
for retries := 0; retries < 5; retries++ {
|
||||||
log.Fatal("updateRegisters: client.ReadCoils: ", err)
|
results, err = client.ReadHoldingRegisters(uint16(k), uint16(r))
|
||||||
|
if len(results) > 0 {
|
||||||
|
break
|
||||||
|
} else if retries == 4 {
|
||||||
|
log.Fatal("updateRegisters: client.ReadHoldingRegisters: ", err)
|
||||||
|
} else if err != nil {
|
||||||
|
log.Println("WARNING: updateRegisters: client.ReadHoldingRegisters: ", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// The values represent 16 bit integers, but modbus works with bytes
|
// The values represent 16 bit integers, but modbus works with bytes
|
||||||
// Each even byte of the returned []byte is the 8 MSBs of a new 16-bit
|
// Each even byte of the returned []byte is the 8 MSBs of a new 16-bit
|
||||||
|
@ -244,7 +251,6 @@ func (p PingvinKL) ReadCoil(n uint16) []byte {
|
||||||
|
|
||||||
func (p *PingvinKL) populateStatus() {
|
func (p *PingvinKL) populateStatus() {
|
||||||
hpct := p.Registers[49].Value / p.Registers[49].Multiplier
|
hpct := p.Registers[49].Value / p.Registers[49].Multiplier
|
||||||
log.Println(hpct)
|
|
||||||
if hpct > 100 {
|
if hpct > 100 {
|
||||||
p.Status.HeaterPct = hpct - 100
|
p.Status.HeaterPct = hpct - 100
|
||||||
p.Status.HrcPct = 100
|
p.Status.HrcPct = 100
|
||||||
|
@ -269,7 +275,6 @@ func (p *PingvinKL) populateStatus() {
|
||||||
// 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
|
||||||
json.NewEncoder(log.Writer()).Encode(p.Status)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PingvinKL) Monitor(interval int) {
|
func (p *PingvinKL) Monitor(interval int) {
|
||||||
|
@ -280,8 +285,9 @@ func (p *PingvinKL) Monitor(interval int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a PingvinKL struct, read coils and registers from CSVs
|
// create a PingvinKL struct, read coils and registers from CSVs
|
||||||
func New() PingvinKL {
|
func New(debug bool) PingvinKL {
|
||||||
pingvin := PingvinKL{}
|
pingvin := PingvinKL{}
|
||||||
|
pingvin.debug = debug
|
||||||
pingvin.buslock = &sync.Mutex{}
|
pingvin.buslock = &sync.Mutex{}
|
||||||
log.Println("Parsing coil data...")
|
log.Println("Parsing coil data...")
|
||||||
coilData := readCsvLines("coils.csv")
|
coilData := readCsvLines("coils.csv")
|
||||||
|
|
Loading…
Reference in New Issue