added ac200m
This commit is contained in:
1 parent
5fcd57b517
commit
d9d4860d44
2 files changed
+99
No files matched your search
@@ -0,0 +1,48 @@
|
|||||||
|
"""AC200M fields."""
|
||||||
|
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from ..utils.commands import ReadHoldingRegisters
|
||||||
|
from ..field_enums import AutoSleepMode, OutputMode
|
||||||
|
from ..base_devices.ProtocolV1Device import ProtocolV1Device
|
||||||
|
|
||||||
|
|
||||||
|
class AC200M(ProtocolV1Device):
|
||||||
|
def __init__(self, address: str, sn: str):
|
||||||
|
super().__init__(address, "AC200M", sn)
|
||||||
|
|
||||||
|
# Details
|
||||||
|
self.struct.add_enum_field('ac_output_mode', 70, OutputMode)
|
||||||
|
self.struct.add_uint_field('internal_ac_voltage', 71)
|
||||||
|
self.struct.add_decimal_field('internal_current_one', 72, 1)
|
||||||
|
self.struct.add_uint_field('internal_power_one', 73)
|
||||||
|
self.struct.add_decimal_field('internal_ac_frequency', 74, 1)
|
||||||
|
self.struct.add_uint_field('internal_dc_input_voltage', 86)
|
||||||
|
self.struct.add_decimal_field('internal_dc_input_power', 87, 1)
|
||||||
|
self.struct.add_decimal_field('internal_dc_input_current', 88, 2)
|
||||||
|
|
||||||
|
# Battery packs
|
||||||
|
self.struct.add_decimal_array_field('cell_voltages', 105, 16, 2) # internal
|
||||||
|
|
||||||
|
# Controls
|
||||||
|
self.struct.add_bool_field('power_off', 3060)
|
||||||
|
self.struct.add_enum_field('auto_sleep_mode', 3061, AutoSleepMode)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pack_num_max(self):
|
||||||
|
return 3
|
||||||
|
|
||||||
|
@property
|
||||||
|
def polling_commands(self) -> List[ReadHoldingRegisters]:
|
||||||
|
return super().polling_commands + [
|
||||||
|
ReadHoldingRegisters(70, 4),
|
||||||
|
ReadHoldingRegisters(86, 3),
|
||||||
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def writable_ranges(self) -> List[range]:
|
||||||
|
return super().writable_ranges + [range(3060, 3061)]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pack_polling_commands(self) -> List[ReadHoldingRegisters]:
|
||||||
|
return super().pack_polling_commands + [ReadHoldingRegisters(105, 16)]
|
||||||
@@ -3,6 +3,8 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from enum import Enum, auto, unique
|
from enum import Enum, auto, unique
|
||||||
|
|
||||||
|
from .field_enums import AutoSleepMode, OutputMode
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
class FieldType(Enum):
|
class FieldType(Enum):
|
||||||
@@ -20,6 +22,7 @@ class FieldAttributes:
|
|||||||
unit_of_measurement: str|None = None
|
unit_of_measurement: str|None = None
|
||||||
device_class: str|None = None
|
device_class: str|None = None
|
||||||
state_class: str|None = None
|
state_class: str|None = None
|
||||||
|
options: Enum
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
class PowerFieldAttributes(FieldAttributes):
|
class PowerFieldAttributes(FieldAttributes):
|
||||||
@@ -35,6 +38,13 @@ class VoltageFieldAttributes(FieldAttributes):
|
|||||||
device_class = 'voltage'
|
device_class = 'voltage'
|
||||||
state_class = 'measurement'
|
state_class = 'measurement'
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class CurrentFieldAttributes(FieldAttributes):
|
||||||
|
type = FieldType.NUMERIC
|
||||||
|
unit_of_measurement = 'A'
|
||||||
|
device_class = 'current'
|
||||||
|
state_class = 'measurement'
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
class OutletFieldAttributes(FieldAttributes):
|
class OutletFieldAttributes(FieldAttributes):
|
||||||
type = FieldType.BOOL
|
type = FieldType.BOOL
|
||||||
@@ -87,6 +97,47 @@ FIELD_ATTRIBUTES = {
|
|||||||
),
|
),
|
||||||
|
|
||||||
# Device specific fields
|
# Device specific fields
|
||||||
|
'ac_output_mode': FieldAttributes(
|
||||||
|
type = FieldType.ENUM,
|
||||||
|
name = 'AC Output Mode',
|
||||||
|
options = OutputMode,
|
||||||
|
),
|
||||||
|
'internal_ac_voltage': VoltageFieldAttributes(
|
||||||
|
name = 'Internal AC Voltage',
|
||||||
|
),
|
||||||
|
'internal_current_one': CurrentFieldAttributes(
|
||||||
|
name = 'Internal Current Sensor 1',
|
||||||
|
),
|
||||||
|
'internal_power_one': PowerFieldAttributes(
|
||||||
|
name = 'Internal Power Sensor 1',
|
||||||
|
),
|
||||||
|
'internal_ac_frequency': FieldAttributes(
|
||||||
|
type = FieldType.NUMERIC,
|
||||||
|
name = 'Internal AC Frequency',
|
||||||
|
unit_of_measurement = 'Hz',
|
||||||
|
device_class = 'frequency',
|
||||||
|
state_class ='measurement',
|
||||||
|
),
|
||||||
|
'internal_dc_input_voltage': VoltageFieldAttributes(
|
||||||
|
name = 'Internal DC Input Voltage',
|
||||||
|
),
|
||||||
|
'internal_dc_input_power': PowerFieldAttributes(
|
||||||
|
name = 'Internal DC Input Power',
|
||||||
|
),
|
||||||
|
'internal_dc_input_current': CurrentFieldAttributes(
|
||||||
|
name = 'Internal DC Input Current',
|
||||||
|
),
|
||||||
|
'power_off': FieldAttributes(
|
||||||
|
type = FieldType.BUTTON,
|
||||||
|
setter = True,
|
||||||
|
name = 'Power Off',
|
||||||
|
),
|
||||||
|
'auto_sleep_mode': FieldAttributes(
|
||||||
|
type = FieldType.ENUM,
|
||||||
|
setter = True,
|
||||||
|
name = 'Screen Auto Sleep Mode',
|
||||||
|
options = AutoSleepMode,
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
def PACK_FIELD_ATTRIBUTES(pack: int):
|
def PACK_FIELD_ATTRIBUTES(pack: int):
|
||||||
|
|||||||
Reference in new issue
Block a user