Skip to content

Commit

Permalink
Fix large numbers from uint32 registers
Browse files Browse the repository at this point in the history
  • Loading branch information
GJSBRT committed Apr 6, 2024
1 parent 85d9cdd commit ae783f2
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 4 deletions.
2 changes: 1 addition & 1 deletion control/control.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ func (c *Control) Start() {
err := c.modbus.ChangeBatteryForceCharge(battery.inverter, battery.battery, modbus.MODBUS_STATE_BATTERY_FORCIBLE_CHARGE_DISCHARGE_DISCHARGE, useWatts)
if err != nil {
c.errChannel <- err
}
}
}
} else {
c.logger.WithFields(logrus.Fields{"inverter": battery.inverter, "battery": battery.battery}).Info("Battery is not required, stopping discharge")
Expand Down
2 changes: 2 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ func init() {
logger.Info("Read config file successfully")

switch config.LogLevel {
case "trace":
logger.SetLevel(logrus.TraceLevel)
case "debug":
logger.SetLevel(logrus.DebugLevel)
case "info":
Expand Down
11 changes: 10 additions & 1 deletion modbus/modbus.go
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,16 @@ func (m *Modbus) updateMetricsRegisters(connection *Connection, inverter Inverte
return err
}

result = int(reg)
if reg > 9999999 {
regBytes, err := connection.client.ReadBytes(register.Address, register.Quantity * 2, modbus.HOLDING_REGISTER)
if err != nil {
return err
}

result = int(convertTooLargeNumber(regBytes))
} else {
result = int(reg)
}
case RegisterTypeInt16:
var res int16
reg, err := connection.client.ReadRegister(register.Address, modbus.HOLDING_REGISTER)
Expand Down
4 changes: 2 additions & 2 deletions utils/encoding.go → modbus/utils.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package utils
package modbus

import (
"encoding/binary"
)

func ConvertTooLargeNumber(in []byte) (uint32) {
func convertTooLargeNumber(in []byte) (uint32) {
var u32 uint32
var out []uint32

Expand Down

0 comments on commit ae783f2

Please sign in to comment.