From 3fab63f60fee87fc35edc3223d4fa1debf61b01d Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Sun, 29 Jan 2023 14:42:03 +0200 Subject: [PATCH] #9 Go: Get single coil --- enervent-ctrl-go/go.mod | 4 + enervent-ctrl-go/go.sum | 4 + enervent-ctrl-go/main.go | 10 ++- enervent-ctrl-go/pingvinKL/pingvinKL.go | 113 ++++++++---------------- 4 files changed, 51 insertions(+), 80 deletions(-) create mode 100644 enervent-ctrl-go/go.sum diff --git a/enervent-ctrl-go/go.mod b/enervent-ctrl-go/go.mod index f1eebbc..538de98 100644 --- a/enervent-ctrl-go/go.mod +++ b/enervent-ctrl-go/go.mod @@ -1,3 +1,7 @@ module github.com/0ranki/enervent-ctrl/enervent-ctrl-go go 1.18 + +require github.com/goburrow/modbus v0.1.0 + +require github.com/goburrow/serial v0.1.0 // indirect diff --git a/enervent-ctrl-go/go.sum b/enervent-ctrl-go/go.sum new file mode 100644 index 0000000..e702ea7 --- /dev/null +++ b/enervent-ctrl-go/go.sum @@ -0,0 +1,4 @@ +github.com/goburrow/modbus v0.1.0 h1:DejRZY73nEM6+bt5JSP6IsFolJ9dVcqxsYbpLbeW/ro= +github.com/goburrow/modbus v0.1.0/go.mod h1:Kx552D5rLIS8E7TyUwQ/UdHEqvX5T8tyiGBTlzMcZBg= +github.com/goburrow/serial v0.1.0 h1:v2T1SQa/dlUqQiYIT8+Cu7YolfqAi3K96UmhwYyuSrA= +github.com/goburrow/serial v0.1.0/go.mod h1:sAiqG0nRVswsm1C97xsttiYCzSLBmUZ/VSlVLZJ8haA= diff --git a/enervent-ctrl-go/main.go b/enervent-ctrl-go/main.go index 60b1ce9..fdfac05 100644 --- a/enervent-ctrl-go/main.go +++ b/enervent-ctrl-go/main.go @@ -1,11 +1,17 @@ package main import ( + "fmt" + "log" + "time" + "github.com/0ranki/enervent-ctrl/enervent-ctrl-go/pingvinKL" ) func main() { + log.Println(time.Now()) pingvin := pingvinKL.New() - // fmt.Println(pingvin.Coils) - print(pingvin.Coils[1].Description) + log.Println(time.Now()) + fmt.Println(pingvin.ReadCoil(40)) + log.Println(time.Now()) } diff --git a/enervent-ctrl-go/pingvinKL/pingvinKL.go b/enervent-ctrl-go/pingvinKL/pingvinKL.go index 9e72e2c..387d394 100644 --- a/enervent-ctrl-go/pingvinKL/pingvinKL.go +++ b/enervent-ctrl-go/pingvinKL/pingvinKL.go @@ -5,6 +5,9 @@ import ( "log" "os" "strings" + "time" + + "github.com/goburrow/modbus" ) // single coil data @@ -46,6 +49,38 @@ func readCsvLines(file string) [][]string { return data } +// Configure the modbus client on creation +func (p PingvinKL) getHandler() *modbus.RTUClientHandler { + // TODO: read configuration from file, hardcoded for now + handler := modbus.NewRTUClientHandler("/dev/ttyS0") + handler.BaudRate = 19200 + handler.DataBits = 8 + handler.Parity = "N" + handler.StopBits = 1 + handler.SlaveId = 1 + handler.Timeout = 200 * time.Millisecond + return handler +} + +func (p PingvinKL) Update() { + // coildata, err := p.Client.ReadCoils(0, len(p.Coils)) +} + +func (p PingvinKL) ReadCoil(n uint16) []byte { + handler := p.getHandler() + err := handler.Connect() + if err != nil { + log.Fatal("ReadCoil1: ", err) + } + defer handler.Close() + client := modbus.NewClient(handler) + results, err := client.ReadCoils(n, 1) + if err != nil { + log.Fatal("ReadCoil2: ", err) + } + return results +} + // create a PingvinKL struct, read coils and registers from CSVs func New() PingvinKL { pingvin := PingvinKL{} @@ -55,81 +90,3 @@ func New() PingvinKL { } return pingvin } - -// func New() PingvinKL { -// pingvin := PingvinKL{} -// // var Coils []pingvinCoil -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_STOP", "Stop")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_AWAY", "Away mode")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_AWAY_L", "Away Long mode")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_MAX_H", "Max Heating")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_MAX_C", "Max Cooling")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_CO_BOOST_EN", "CO2 boost")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_RH_BOOST_EN", "Relative humidity boost")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_M_BOOST", "Manual boost 100%")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_TEMP_BOOST_EN", "Temperature boost")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_SNC", "Summer night cooling")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_AWAY_H", "Heating enabled/disabled in AWAY mode")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_AWAY_C", "Cooling enabled/disabled in AWAY mode")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_LTO_ON", "Heat recycler state (running=1, stopped = 0)")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_HEAT_ON", "After heater element state (On = 1, Off = 0)")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_TEMP_DECREASE", "Temperature decrease function")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_OVERTIME", "Programmatic equivalent of OVERTIME digital input")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_ECO_MODE", "Eco mode")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_ALARM_A", "Alarm of class A active")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_ALARM_B", "Alarm of class B active")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_CLK_PROG", "Clock program is currently active")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_SILENT_MODE", "Silent mode")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_STOP_SLP_COOLING", "Electrical heater cool-off function enabled when the machine has stopped")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_SERVICE_EN", "Service reminder")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_COOLING_EN", "Active cooling function enabled")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_LTO_EN", "N/A")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_HEATING_EN", "Active heating function enabled")) -// pingvin.Coils = append(pingvin.Coils, newCoil("COIL_LTO_DEFROST_EN", "HRC defrosting function enabled during winter season")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// pingvin.Coils = append(pingvin.Coils, newCoil("-", "-")) -// return pingvin -// }