Files
prostarsolar/python-driver/prostarsolar_utils.py
2018-01-08 18:26:08 -06:00

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