From 545897211eb572ae8b5bd17fb0f9bec1a6c7e67c Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Mon, 20 Mar 2023 20:29:00 +0200 Subject: [PATCH] Ability to configure serial path --- main.go | 6 +++++- pingvin/pingvin.go | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index 3dd5d3b..1582907 100644 --- a/main.go +++ b/main.go @@ -38,6 +38,7 @@ var ( ) type Conf struct { + SerialAddress string `yaml:"serial_address"` Port int `yaml:"port"` SslCertificate string `yaml:"ssl_certificate"` SslPrivatekey string `yaml:"ssl_privatekey"` @@ -276,6 +277,7 @@ func parseConfigFile() { // Write the default configuration to $HOME/.config/enervent-ctrl/configuration.yaml func initDefaultConfig(confpath string) { config = Conf{ + "/dev/ttyS0", 8888, confpath + "/certificate.pem", confpath + "/privatekey.pem", @@ -311,6 +313,7 @@ func configure() { passwflag := flag.String("password", config.Password, "Password for HTTP Basic Authentication") promflag := flag.Bool("enable-metrics", config.EnableMetrics, "Enable the built-in Prometheus exporter") logflag := flag.String("logfile", config.LogFile, "Path to log file. Default is empty string, log to stdout") + serialflag := flag.String("serial", config.SerialAddress, "Path to serial console for RS-485 connection. Defaults to /dev/ttyS0") // TODO: log file flag flag.Parse() config.Debug = *debugflag @@ -322,6 +325,7 @@ func configure() { config.Password = *passwflag config.EnableMetrics = *promflag config.LogFile = *logflag + config.SerialAddress = *serialflag usernamehash = sha256.Sum256([]byte(config.Username)) passwordhash = sha256.Sum256([]byte(config.Password)) if len(config.LogFile) != 0 { @@ -354,7 +358,7 @@ func configure() { func main() { log.Println("enervent-ctrl version", version) configure() - device = *pingvin.New(config.Debug) + device = *pingvin.New(config.SerialAddress, config.Debug) device.Update() go device.Monitor(config.Interval) serve(&config.SslCertificate, &config.SslPrivatekey) diff --git a/pingvin/pingvin.go b/pingvin/pingvin.go index 6415a86..b4eb311 100644 --- a/pingvin/pingvin.go +++ b/pingvin/pingvin.go @@ -183,7 +183,7 @@ func readCsvLines(file string) [][]string { // Create modbus.Handler, store it in p.handler, // connect the handler and create p.modbusclient (modbus.Client) -func (p *Pingvin) createModbusClient() { +func (p *Pingvin) createModbusClient(serial string) { // TODO: read configuration from file, hardcoded for now p.handler = modbus.NewRTUClientHandler("/dev/ttyS0") p.handler.BaudRate = 19200 @@ -613,11 +613,11 @@ func (p *Pingvin) Collect(ch chan<- prometheus.Metric) { } // create a Pingvin struct, read coils and registers from CSVs -func New(debug bool) *Pingvin { +func New(serial string, debug bool) *Pingvin { pingvin := Pingvin{} pingvin.Debug.dbg = debug pingvin.buslock = &sync.Mutex{} - pingvin.createModbusClient() + pingvin.createModbusClient(serial) log.Println("Parsing coil data...") coilData := readCsvLines("coils.csv") for i := 0; i < len(coilData); i++ {