69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
"""Provide utilities for reading prostar solar panels."""
|
|
|
|
from utilities import int_to_float16
|
|
from Channel import ModbusChannel
|
|
|
|
|
|
def charge_state(inp_state):
|
|
"""Map function for charge state."""
|
|
states = {
|
|
0: "Start",
|
|
1: "Night Check",
|
|
2: "Disconnect",
|
|
3: "Night",
|
|
4: "Fault",
|
|
5: "Bulk",
|
|
6: "Absorption",
|
|
7: "Float",
|
|
8: "Equalize"
|
|
}
|
|
if inp_state in range(0, 9):
|
|
return states[inp_state]
|
|
else:
|
|
return inp_state
|
|
|
|
|
|
def array_faults(inp_array_faults):
|
|
"""Form a string for the array_faults."""
|
|
fault_string = ""
|
|
faults = {
|
|
0: "Overcurrent Phase 1",
|
|
1: "FETs Shorted",
|
|
2: "Software Bug",
|
|
3: "Battery HVD (High Voltage Disconnect)",
|
|
4: "Array HVD (High Voltage Disconnect)",
|
|
5: "EEPROM Setting Edit (reset required)",
|
|
6: "RTS Shorted",
|
|
7: "RTS was valid now disconnected",
|
|
8: "Local temp. sensor failed",
|
|
9: "Battery LVD (Low Voltage Disconect)",
|
|
10: "DIP Switch Changed (excl. DIP 8)",
|
|
11: "Processor Supply Fault"
|
|
}
|
|
|
|
bit_string = ("0" * 16 + "{0:b}".format(inp_array_faults))[-16:]
|
|
for i in range(0, 12):
|
|
if int(bit_string[i]) == 1:
|
|
fault_string += faults[i] + ", "
|
|
if fault_string:
|
|
return fault_string[:-2]
|
|
else:
|
|
return "None"
|
|
|
|
|
|
CHANNELS = [
|
|
ModbusChannel("adc_ia", 17, "REAL", 0.5, 3600, transformFn=int_to_float16),
|
|
ModbusChannel("adc_vbterm", 18, "REAL", 0.5, 3600, transformFn=int_to_float16),
|
|
ModbusChannel("adc_va", 19, "REAL", 0.5, 3600, transformFn=int_to_float16),
|
|
ModbusChannel("adc_vl", 20, "REAL", 0.5, 3600, transformFn=int_to_float16),
|
|
ModbusChannel("adc_il", 22, "REAL", 0.5, 3600, transformFn=int_to_float16),
|
|
ModbusChannel("t_amb", 28, "REAL", 2.0, 3600, transformFn=int_to_float16),
|
|
ModbusChannel("vb_min_daily", 65, "REAL", 2.0, 3600, transformFn=int_to_float16),
|
|
ModbusChannel("vb_max_daily", 66, "REAL", 2.0, 3600, transformFn=int_to_float16),
|
|
ModbusChannel('charge_state', 33, "STRING", 1, 3600, transformFn=charge_state),
|
|
ModbusChannel('array_fault', 34, "STRING", 1, 3600, transformFn=array_faults)
|
|
]
|
|
|
|
NODEADDRESS = 21 # Default node address
|
|
BAUDRATE = 9600 # Default Baud Rate
|