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