From 2056a3592ec33821276e81d2221f22b0c71bf76a Mon Sep 17 00:00:00 2001 From: hmelder Date: Sun, 10 Nov 2024 06:19:01 +0100 Subject: [PATCH] succd: do not early return on error in modbusUpdate --- succbone/succd/modbus.go | 67 ++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 37 deletions(-) diff --git a/succbone/succd/modbus.go b/succbone/succd/modbus.go index e5f3b91..a4d05e0 100644 --- a/succbone/succd/modbus.go +++ b/succbone/succd/modbus.go @@ -2,11 +2,10 @@ package main import ( "context" - "errors" - "fmt" "time" "github.com/simonvetter/modbus" + "k8s.io/klog" ) func modbusValuesToFloat(v uint16) float32 { @@ -39,7 +38,7 @@ func (d *daemon) modbusConnect() error { // There are currently two devices connected to the modbus. // The first one (slave 1) is a temperature/humidity sensor. // The second one (slave 2) is a PTA8D08 transmitter -func (d *daemon) modbusUpdate() error { +func (d *daemon) modbusUpdate() { var err error // Switch to slave 1 (BTA1) @@ -49,19 +48,16 @@ func (d *daemon) modbusUpdate() error { var registersBTA1 []uint16 // temperature, humidity registersBTA1, err = d.modbusClient.ReadRegisters(1, 2, modbus.INPUT_REGISTER) if err != nil { - return err + klog.Warningf("error while reading registers from BTA1 %v", err) + } else if len(registersBTA1) != 2 { + klog.Warningf("expected two registers from modbus slave 1, but got %d", len(registersBTA1)) + } else { + d.mu.Lock() + d.daemonState.tempSEM = modbusValuesToFloat(registersBTA1[0]) + d.daemonState.humiditySEM = modbusValuesToFloat(registersBTA1[1]) + d.mu.Unlock() } - if len(registersBTA1) != 2 { - msg := fmt.Sprintf("Expected two registers from modbus slave 1, but got %d", len(registersBTA1)) - return errors.New(msg) - } - - d.mu.Lock() - d.daemonState.tempSEM = modbusValuesToFloat(registersBTA1[0]) - d.daemonState.humiditySEM = modbusValuesToFloat(registersBTA1[1]) - d.mu.Unlock() - // Switch to slave 2 (KEC2) d.modbusClient.SetUnitId(2) @@ -72,19 +68,17 @@ func (d *daemon) modbusUpdate() error { var registersKEC2 []uint16 // temperatures dp registersKEC2, err = d.modbusClient.ReadRegisters(0, 3, modbus.HOLDING_REGISTER) if err != nil { - return err + klog.Warningf("error while reading registers from KEC2 %v", err) + } else if len(registersKEC2) != 3 { + klog.Warningf("expected three registers from modbus slave 2, but got %d", len(registersKEC2)) + } else { + d.mu.Lock() + d.daemonState.tempDPBottom = modbusValuesToFloat(registersKEC2[0]) + d.daemonState.tempDPInlet = modbusValuesToFloat(registersKEC2[1]) + d.daemonState.tempDPTop = modbusValuesToFloat(registersKEC2[2]) + d.mu.Unlock() } - if len(registersKEC2) != 3 { - return fmt.Errorf("expected three registers from modbus slave 2, but got %d", len(registersKEC2)) - } - - d.mu.Lock() - d.daemonState.tempDPBottom = modbusValuesToFloat(registersKEC2[0]) - d.daemonState.tempDPInlet = modbusValuesToFloat(registersKEC2[1]) - d.daemonState.tempDPTop = modbusValuesToFloat(registersKEC2[2]) - d.mu.Unlock() - // Switch to slave 3 (KEC1) d.modbusClient.SetUnitId(3) @@ -94,17 +88,18 @@ func (d *daemon) modbusUpdate() error { digitalInputRegisters, err = d.modbusClient.ReadRegisters(0x81, 8, modbus.HOLDING_REGISTER) if err != nil { - return err - } - // Convert MODBUS words into bools - for idx, value := range digitalInputRegisters { - if value != 0 { - digitalInputs[idx] = true - } else { - digitalInputs[idx] = false + klog.Warningf("error while reading digital inputs from KEC1 %v", err) + } else { + // Convert MODBUS words into bools + for idx, value := range digitalInputRegisters { + if value != 0 { + digitalInputs[idx] = true + } else { + digitalInputs[idx] = false + } } + // TODO: Input mapping goes here } - // TODO: Input mapping goes here // KFA1-KFA8 var relayState [8]bool @@ -140,10 +135,8 @@ func (d *daemon) modbusUpdate() error { err = d.modbusClient.WriteRegisters(0x01, registerValuesKEC1[:]) if err != nil { - return err + klog.Warningf("error while updating registers %v", err) } - - return nil } // Call modbusUpdate every 100 milliseconds