64 lines
1.6 KiB
Python
64 lines
1.6 KiB
Python
|
import config as cfg
|
||
|
from collections import Iterable
|
||
|
|
||
|
# trick the pycharm type-checker into thinking Callable is in scope, not used at runtime
|
||
|
# noinspection PyUnreachableCode
|
||
|
if False:
|
||
|
from typing import Callable
|
||
|
|
||
|
|
||
|
class LedState(object):
|
||
|
"""
|
||
|
from page 6 of the '48TLxxx ModBus Protocol doc'
|
||
|
"""
|
||
|
off = 0
|
||
|
on = 1
|
||
|
blinking_slow = 2
|
||
|
blinking_fast = 3
|
||
|
|
||
|
|
||
|
class LedColor(object):
|
||
|
green = 0
|
||
|
amber = 1
|
||
|
blue = 2
|
||
|
red = 3
|
||
|
|
||
|
|
||
|
|
||
|
class CsvSignal(object):
|
||
|
def __init__(self, name, get_value, get_text = None):
|
||
|
self.name = name
|
||
|
self.get_value = get_value if callable(get_value) else lambda _: get_value
|
||
|
self.get_text = get_text
|
||
|
|
||
|
if get_text is None:
|
||
|
self.get_text = ""
|
||
|
|
||
|
class Battery(object):
|
||
|
|
||
|
""" Data record to hold hardware and firmware specs of the battery """
|
||
|
|
||
|
def __init__(self, slave_address, hardware_version, firmware_version, bms_version, ampere_hours):
|
||
|
# type: (int, str, str, str, int) -> None
|
||
|
self.slave_address = slave_address
|
||
|
self.hardware_version = hardware_version
|
||
|
self.firmware_version = firmware_version
|
||
|
self.bms_version = bms_version
|
||
|
self.ampere_hours = ampere_hours
|
||
|
|
||
|
|
||
|
def __str__(self):
|
||
|
return 'slave address = {0}\nhardware version = {1}\nfirmware version = {2}\nbms version = {3}\nampere hours = {4}'.format(
|
||
|
self.slave_address, self.hardware_version, self.firmware_version, self.bms_version, str(self.ampere_hours))
|
||
|
|
||
|
|
||
|
class BatteryStatus(object):
|
||
|
"""
|
||
|
record holding the current status of a battery
|
||
|
"""
|
||
|
def __init__(self, battery, modbus_data):
|
||
|
# type: (Battery, list[int]) -> None
|
||
|
|
||
|
self.battery = battery
|
||
|
self.modbus_data = modbus_data
|