#9 Go: Get single coil

This commit is contained in:
Jarno Rankinen 2023-01-29 14:42:03 +02:00
parent 7a8a7ec7bb
commit 3fab63f60f
4 changed files with 51 additions and 80 deletions

View File

@ -1,3 +1,7 @@
module github.com/0ranki/enervent-ctrl/enervent-ctrl-go module github.com/0ranki/enervent-ctrl/enervent-ctrl-go
go 1.18 go 1.18
require github.com/goburrow/modbus v0.1.0
require github.com/goburrow/serial v0.1.0 // indirect

4
enervent-ctrl-go/go.sum Normal file
View File

@ -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=

View File

@ -1,11 +1,17 @@
package main package main
import ( import (
"fmt"
"log"
"time"
"github.com/0ranki/enervent-ctrl/enervent-ctrl-go/pingvinKL" "github.com/0ranki/enervent-ctrl/enervent-ctrl-go/pingvinKL"
) )
func main() { func main() {
log.Println(time.Now())
pingvin := pingvinKL.New() pingvin := pingvinKL.New()
// fmt.Println(pingvin.Coils) log.Println(time.Now())
print(pingvin.Coils[1].Description) fmt.Println(pingvin.ReadCoil(40))
log.Println(time.Now())
} }

View File

@ -5,6 +5,9 @@ import (
"log" "log"
"os" "os"
"strings" "strings"
"time"
"github.com/goburrow/modbus"
) )
// single coil data // single coil data
@ -46,6 +49,38 @@ func readCsvLines(file string) [][]string {
return data 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 // create a PingvinKL struct, read coils and registers from CSVs
func New() PingvinKL { func New() PingvinKL {
pingvin := PingvinKL{} pingvin := PingvinKL{}
@ -55,81 +90,3 @@ func New() PingvinKL {
} }
return pingvin 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
// }