prostar_pwm

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 13, 2025 License: MIT Imports: 6 Imported by: 0

README

GitHub Workflow Status (with event) GitHub tag (with filter) Go Reference

prostar-pwm

ProStar PWM Solar Charge Controller utility.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Alarm

type Alarm uint32

func (Alarm) Details

func (v Alarm) Details() AlarmDetails

type AlarmDetails

type AlarmDetails struct {
	Raw                              uint32
	RTSOpen                          bool
	RTSShort                         bool
	RTSDisconnected                  bool
	HeatsinkTemperatureSensorOpen    bool
	HeatsinkTemperatureSensorShorted bool
	HeatsinkHot                      bool
	CurrentLimit                     bool
	IOffset                          bool
	BatterySenseOutOfRange           bool
	BatterySenseDisconnected         bool
	Uncalibrated                     bool
	BatteryTemperatureOutOfRange     bool
	FP10SupplyOutOfRange             bool
	FETOpen                          bool
	IAOffset                         bool
	ILOffset                         bool
	SupplyOutOfRange                 bool
	Reset                            bool
	LVD                              bool
	LogTimeout                       bool
	EEPROMAccessFailure              bool
}

type ArrayFault

type ArrayFault uint16

func (ArrayFault) Details

func (v ArrayFault) Details() ArrayFaultDetails

type ArrayFaultDetails

type ArrayFaultDetails struct {
	Raw                          uint16
	OvercurrentPhase1            bool
	FETsShorted                  bool
	SoftwareBug                  bool
	BatteryHighVoltageDisconnect bool
	ArrayHighVoltageDisconnect   bool
	EEPROMSettingEdit            bool
	RTSShorted                   bool
	RTSWasValidNowDisconnected   bool
	LocalTemperatureSensorFailed bool
	BatteryLowVoltageDisconnect  bool
	DIPSwitchChanged             bool
	ProcessorSupplyFault         bool
}

type ChargeSettings

type ChargeSettings struct {
	RegulationVoltageAt25C                 *float32 // V,    EV_reg             Regulation Voltage @ 25ºC
	FloatVoltageAt25C                      *float32 // V,    EV_float           Float Voltage @ 25ºC
	TimeBeforeEnteringFloat                *uint16  // s,    Et_float           Time Before Entering Float (Absorption Time)
	TimeBeforeEnteringFloatDueToLowBattery *uint16  // s,    Et_floatlb         Time Before Entering Float due to Low Battery (Absorption Extension Time)
	VoltageTriggerForLowBatteryFloatTime   *float32 // V,    EV_floatlb_trip    Voltage Trigger for Low Battery Float Time
	VoltageToCancelFloat                   *float32 // V,    EV_float_cancel    Voltage to Cancel Float
	ExitFloatTime                          *uint16  // s,    Et_float_exit_cum  Exit Float Time
	EqualizeVoltageAt25C                   *float32 // V,    EV_eq              Equalize Voltage @ 25ºC
	DaysBetweenEQCycles                    *uint16  // days, Et_eqcalendar      Days Between EQ Cycles
	EqualizeTimeLimitAboveEVReg            *uint16  // s,    Et_eq_above        Equalize Time Limit above EV_reg
	EqualizeTimeLimitAtEVEq                *uint16  // s,    Et_eq_reg          Equalize Time Limit at EV_eq
	ReferenceChargeVoltageLimit            *float32 // V,    Evb_ref_charge_lim Reference Charge Voltage Limit
	TemperatureCompensationCoefficient     *float32 // V,    EV_tempcomp        Temperature Compensation Coefficient
	HighVoltageDisconnectAt25C             *float32 // V,    EV_hvd             High Voltage Disconnect @ 25ºC
	HighVoltageReconnect                   *float32 // V,    EV_hvr             High Voltage Reconnect
	MaximumChargeVoltageReference          *float32 // V,    Evb_ref_lim        Maximum Charge Voltage Reference (0 disables)
	MaxBatteryTempCompensationLimit        *int16   // ºC,   ETb_max            Max Battery Temp Compensation Limit
	MinBatteryTempCompensationLimit        *int16   // ºC,   ETb_min            Min Battery Temp Compensation Limit
}

type ChargeState

type ChargeState uint16
const (
	ChargeStateStart ChargeState = iota
	ChargeStateNightCheck
	ChargeStateDisconnect
	ChargeStateNight
	ChargeStateFault
	ChargeStateBulk
	ChargeStateAbsorption
	ChargeStateFloat
	ChargeStateEqualize
)

func (ChargeState) String

func (v ChargeState) String() string

type ChargeStatusLEDState

type ChargeStatusLEDState uint16
const (
	ChargeStatusLEDStateLEDStart ChargeStatusLEDState = iota
	ChargeStatusLEDStateLEDStart2
	ChargeStatusLEDStateLEDBranch
	ChargeStatusLEDStateEqualize
	ChargeStatusLEDStateFloat
	ChargeStatusLEDStateAbsorption
	ChargeStatusLEDStateGreenLED
	ChargeStatusLEDStateGreenYellowLED
	ChargeStatusLEDStateYellowLED
)

func (ChargeStatusLEDState) String

func (v ChargeStatusLEDState) String() string

type ChargerStatus

type ChargerStatus struct {
	ChargeState                                     *ChargeState       // charge_state         Charge State
	ArrayFault                                      *ArrayFaultDetails // array_fault          Array Fault Bitfield
	BatteryVoltage                                  *float32           // V,  vb_f             Battery Voltage, slow filter (25s)
	BatteryRegulatorReferenceVoltage                *float32           // V,  vb_ref           Battery Regulator Reference Voltage
	AhChargeResettable                              *float32           // Ah, Ahc_r            Ah Charge Resettable
	AhChargeTotal                                   *float32           // Ah, Ahc_t            Ah Charge Total
	KWhChargeResettable                             *float32           // kWh, kWhc_r          kWh Charge Resettable
	KWhChargeTotal                                  *float32           // kWh, kWhc_t          kWh Charge Total
	BatteryTemperatureFoldback100PercentOutputLimit *float32           // ºC, Tb_lo_limit_100  Battery Temp Foldback 100% Output Limit
	BatteryTemperatureFoldback0PercentOutputLimit   *float32           // ºC, Tb_lo_limit_0    Battery Temp Foldback 0% Output Limit
}

type Dev

type Dev struct {
	// contains filtered or unexported fields
}

func New

func New(mc *modbus.ModbusClient, unitId uint8, mutex *sync.Mutex) *Dev

func (*Dev) ReadChargeSettings

func (dev *Dev) ReadChargeSettings() (ChargeSettings, error)

func (*Dev) ReadChargerStatus

func (dev *Dev) ReadChargerStatus() (ChargerStatus, error)

func (*Dev) ReadFilteredADCData

func (dev *Dev) ReadFilteredADCData() (FilteredADCData, error)

func (*Dev) ReadLoadSettings

func (dev *Dev) ReadLoadSettings() (LoadSettings, error)

func (*Dev) ReadLoadStatus

func (dev *Dev) ReadLoadStatus() (LoadStatus, error)

func (*Dev) ReadLoggedData

func (dev *Dev) ReadLoggedData() ([]LoggedDataRecord, error)

func (*Dev) ReadMiscData

func (dev *Dev) ReadMiscData() (MiscData, error)

func (*Dev) ReadMiscSettings

func (dev *Dev) ReadMiscSettings() (MiscSettings, error)

func (*Dev) ReadPWMSettings

func (dev *Dev) ReadPWMSettings() (PWMSettings, error)

func (*Dev) ReadRawADCData

func (dev *Dev) ReadRawADCData() (RawADCData, error)

func (*Dev) ReadStatistics

func (dev *Dev) ReadStatistics() (Statistics, error)

func (*Dev) ReadTemperatureData

func (dev *Dev) ReadTemperatureData() (TemperatureData, error)

type FilteredADCData

type FilteredADCData struct {
	ArrayCurrent           *float32 // A, adc_ia       Array Current
	BatteryTerminalVoltage *float32 // V, adc_vbterm   Battery Terminal Voltage
	ArrayVoltage           *float32 // V, adc_va       Array Voltage
	LoadVoltage            *float32 // V, adc_vl       Load Voltage
	LoadCurrent            *float32 // A, adc_il       Load Current
	BatterySenseVoltage    *float32 // V, adc_vbsense  Battery Sense Voltage
	BatteryVoltage         *float32 // V, adc_vb_f_1m  Battery Voltage, slow filter (60s)
	BatteryCurrent         *float32 // A, adc_ib_f_1m  Battery Current (net), slow filter (60s)
}

type LEDState

type LEDState uint16
const (
	LEDStateLEDStart LEDState = iota
	LEDStateLEDStart2
	LEDStateLEDBranch
	LEDStateEqualize
	LEDStateFloat
	LEDStateAbsorption
	LEDStateGreenLED
	LEDStateGreenYellowLED
	LEDStateYellowLED
	LEDStateYellowRedLED
	LEDStateBlinkRedLED
	LEDStateRedLED
	LEDStateR_Y_GError
	LEDStateRY_GError
	LEDStateRG_YError
	LEDStateR_YError
	LEDStateR_GError
	LEDStateRY_GYError
	LEDStateGYRError
	LEDStateGYRx2
	LEDStateOff
	LEDStateGYRx2_Greenx2
	LEDStateGYRx2_Redx2
)

func (LEDState) String

func (v LEDState) String() string

type LoadFault

type LoadFault uint16

func (LoadFault) Details

func (v LoadFault) Details() LoadFaultDetails

type LoadFaultDetails

type LoadFaultDetails struct {
	Raw                     uint16
	ExternalShortCircuit    bool
	Overcurrent             bool
	FETsShorted             bool
	SoftwareBug             bool
	HighVoltageDisconnect   bool
	HeatsinkOverTemperature bool
	DIPSwitchChanged        bool
	EEPROMSettingEdit       bool
	FP10Fault               bool
	ProcessorSupplyFault    bool
}

type LoadSettings

type LoadSettings struct {
	LowVoltageDisconnect       *float32 // V, EV_lvd      Low Voltage Disconnect
	LowVoltageReconnect        *float32 // V, EV_lvr      Low Voltage Reconnect
	LoadHighVoltageDisconnect  *float32 // V, EV_lhvd     Load High Voltage Disconnect
	LoadHighVoltageReconnect   *float32 // V, EV_lhvr     Load High Voltage Reconnect
	LVDLoadCurrentCompensation *float32 // Ω, ER_icomp    LVD Load Current Compensation
	LVDWarningTimeout          *uint16  // s, Et_lvd_warn LVD Warning Timeout
}

type LoadState

type LoadState uint16
const (
	LoadStateStart LoadState = iota
	LoadStateLoadOn
	LoadStateLVDWarning
	LoadStateLVD
	LoadStateFault
	LoadStateDisconnect
	LoadStateLoadOff
	LoadStateOverride
)

func (LoadState) String

func (v LoadState) String() string

type LoadStatus

type LoadStatus struct {
	LoadState                        *LoadState        // load_state
	LoadFault                        *LoadFaultDetails // load_fault
	LoadCurrentCompensatedLVDVoltage *float32          // V_lvd
	LoadHVDVoltage                   *float32          // V_lhvd
	AhLoadResettable                 *float32          // Ahl_r
	AhLoadTotal                      *float32          // Ahl_t
}

type LoggedDataRecord

type LoggedDataRecord struct {
	Hourmeter                  uint32            // hours, hourmeter
	AlarmDaily                 AlarmDetails      // -,     alarm_daily       Alarm Bitfield – daily
	LoadFaultDaily             LoadFaultDetails  // -,     load_fault_daily  Load Fault Bitfield – daily
	ArrayFaultDaily            ArrayFaultDetails // -,     array_fault_daily Array Fault Bitfield – daily
	BatteryVoltageMinimumDaily float32           // V,     Vb_min_daily,     Battery Voltage Minimum – daily
	BatteryVoltageMaximumDaily float32           // V,     Vb_max_daily,     Battery Voltage Maximum – daily
	AhChargeDaily              float32           // Ah,    Ahc_daily         Ah Charge – daily
	AhLoadDaily                float32           // Ah,    Ahl_daily         Ah Load – daily
	ArrayVoltageMaximumDaily   float32           // V,     Va_max_daily      Maximum Array Voltage – daily
	TimeInAbsorptionDaily      uint16            // min,   time_ab_daily     Time in Absorption – daily
	TimeInEqualizeDaily        uint16            // min,   time_eq_daily     Time in Equalize – daily
	TimeInFloatDaily           uint16            // min,   time_fl_daily     Time in Float – daily
}

type MiscData

type MiscData struct {
	Hourmeter            *uint32               // hours, hourmeter
	Alarm                *AlarmDetails         // alarm
	DIPSwitch            *uint16               // dip_switch
	LEDState             *LEDState             // led_state
	ChargeStatusLEDState *ChargeStatusLEDState // charge_led_state
	LightingShouldBeOn   *uint16               // lighting_should_be_on
}

type MiscSettings

type MiscSettings struct {
	LEDGreenToGreenAndYellowLimit     *float32 // V, EV_soc_g_gy LED Green to Green&Yellow Limit
	LEDGreenAndYellowToYellowLimit    *float32 // V, EV_soc_gy_y LED Green&Yellow to Yellow Limit
	LEDYellowToYellowAndRedLimit      *float32 // V, EV_soc_y_yr Yellow to Yellow&Red Limit
	LEDYellowAndRedToRedFlashingLimit *float32 // V, EV_soc_yr_r Yellow&Red to Red Flashing Limit
	ModbusID                          *uint16  //    Emodbus_id  Modbus ID
	MeterbusID                        *uint16  //    Emeter_id   Meterbus ID
}

type PWMSettings

type PWMSettings struct {
	ChargeCurrentLimit *float32 // A, Eic_lim Charge Current Limit
}

type RawADCData

type RawADCData struct {
	SupplyVoltage                           *float32 // V, vdd_actual   3.3V Supply Voltage
	GateDriveVoltage                        *float32 // V, adc_fgdrive  Gate Drive Voltage
	MeterBusSupplyVoltage                   *float32 // V, adc_pmeter   MeterBus Supply Voltage
	InternalReferenceVoltage                *float32 // V, adc_vrefint  Internal Reference Voltage
	NegativeSupplyRailForCurrentMeasurement *float32 // V, adc_FN3      Negative Supply rail for current measurement
	LoadFETGateVoltage                      *float32 // V, adc_gload    Load FET gate voltage
	ArrayFETGateVoltage                     *float32 // V, adc_gatepv   Array FET gate voltage
}

type Registers

type Registers struct {
	// contains filtered or unexported fields
}

func NewRegisters

func NewRegisters(mc *modbus.ModbusClient, regType modbus.RegType) *Registers

func (*Registers) ReadFloat16

func (r *Registers) ReadFloat16(addr uint16) (float16.Float16, error)

func (*Registers) ReadFloat16AsFloat32

func (r *Registers) ReadFloat16AsFloat32(addr uint16) (float32, error)

func (*Registers) ReadFloat16AsFloat32Ptr

func (r *Registers) ReadFloat16AsFloat32Ptr(addr uint16) (*float32, error)

func (*Registers) ReadUint16

func (r *Registers) ReadUint16(addr uint16) (uint16, error)

func (*Registers) ReadUint16AsFloat32

func (r *Registers) ReadUint16AsFloat32(addr uint16, divisor float32) (float32, error)

func (*Registers) ReadUint16AsFloat32Ptr

func (r *Registers) ReadUint16AsFloat32Ptr(addr uint16, divisor float32) (*float32, error)

func (*Registers) ReadUint16AsInt16

func (r *Registers) ReadUint16AsInt16(addr uint16) (int16, error)

func (*Registers) ReadUint16AsInt16Ptr

func (r *Registers) ReadUint16AsInt16Ptr(addr uint16) (*int16, error)

func (*Registers) ReadUint16Ptr

func (r *Registers) ReadUint16Ptr(addr uint16) (*uint16, error)

func (*Registers) ReadUint32

func (r *Registers) ReadUint32(addr uint16, wordOrdering WordOrdering) (uint32, error)

func (*Registers) ReadUint32AsFloat32

func (r *Registers) ReadUint32AsFloat32(addr uint16, wordOrdering WordOrdering, divisor float32) (float32, error)

func (*Registers) ReadUint32AsFloat32Ptr

func (r *Registers) ReadUint32AsFloat32Ptr(addr uint16, wordOrdering WordOrdering, divisor float32) (*float32, error)

func (*Registers) ReadUint32Ptr

func (r *Registers) ReadUint32Ptr(addr uint16, wordOrdering WordOrdering) (*uint32, error)

type Statistics

type Statistics struct {
	Hourmeter             *uint32  // hours, hourmeter
	AhLoadResettable      *float32 // Ah,    EAhl_r
	AhLoadTotal           *float32 // Ah,    Eahl_t
	AhChargeResettable    *float32 // Ah,    Eahc_r
	AhChargeTotal         *float32 // Ah,    Eahc_t
	KWhcResettable        *float32 // kWh,   EkWhc_r
	KWhcTotal             *float32 // kWh,   EkWhc_t
	BatteryVoltageMinimum *float32 // V,     EVb_min
	BatteryVoltageMaximum *float32 // V,     EVb_max
	ArrayVoltageMaximum   *float32 // V,     EVa_max
	TimeSinceLastEqualize *uint16  // days,  Etmr_eqcalander
}

type TemperatureData

type TemperatureData struct {
	Heatsink *float32 // ºC, T_hs    Heatsink Temperature
	Battery  *float32 // ºC, T_batt  Battery Temperature (Either Ambient or RTS is connected)
	Ambient  *float32 // ºC, T_amb   Ambient (local) Temperature
	Remote   *float32 // ºC, T_rts   Remote Temperature Sensor Temperature
}

type WordOrdering

type WordOrdering int
const (
	WordOrderingHighFirst WordOrdering = iota
	WordOrderingLowFirst
)

func (WordOrdering) Uint32

func (wordOrdering WordOrdering) Uint32(v []uint16) uint32

Directories

Path Synopsis
tools
cli command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL