Files
homeassistant_config/config/custom_components/ecoflow_cloud/devices/powerstream.py
2024-05-31 13:07:35 +02:00

105 lines
6.5 KiB
Python

from . import BaseDevice
from .. import EcoflowMQTTClient
from ..entities import (
BaseSensorEntity, BaseNumberEntity, BaseSelectEntity, BaseSwitchEntity
)
from ..sensor import (
AmpSensorEntity, CentivoltSensorEntity, DeciampSensorEntity,
DecicelsiusSensorEntity, DecihertzSensorEntity, DeciwattsSensorEntity,
DecivoltSensorEntity, InWattsSolarSensorEntity, LevelSensorEntity,
MiscSensorEntity, RemainSensorEntity, StatusSensorEntity,
)
# from ..number import MinBatteryLevelEntity, MaxBatteryLevelEntity
# from ..select import DictSelectEntity
class PowerStream(BaseDevice):
def sensors(self, client: EcoflowMQTTClient) -> list[BaseSensorEntity]:
return [
InWattsSolarSensorEntity(client, "pv1_input_watts", "Solar 1 Watts"),
DecivoltSensorEntity(client, "pv1_input_volt", "Solar 1 Input Potential"),
CentivoltSensorEntity(client, "pv1_op_volt", "Solar 1 Op Potential"),
DeciampSensorEntity(client, "pv1_input_cur", "Solar 1 Currrent"),
DecicelsiusSensorEntity(client, "pv1_temp", "Solar 1 Temperature"),
MiscSensorEntity(client, "pv1_relay_status", "Solar 1 Relay Status"),
MiscSensorEntity(client, "pv1_error_code", "Solar 1 Error Code", False),
MiscSensorEntity(client, "pv1_warning_code", "Solar 1 Warning Code", False),
MiscSensorEntity(client, "pv1_status", "Solar 1 Status", False),
InWattsSolarSensorEntity(client, "pv2_input_watts", "Solar 2 Watts"),
DecivoltSensorEntity(client, "pv2_input_volt", "Solar 2 Input Potential"),
CentivoltSensorEntity(client, "pv2_op_volt", "Solar 2 Op Potential"),
DeciampSensorEntity(client, "pv2_input_cur", "Solar 2 Current"),
DecicelsiusSensorEntity(client, "pv2_temp", "Solar 2 Temperature"),
MiscSensorEntity(client, "pv2_relay_status", "Solar 2 Relay Status"),
MiscSensorEntity(client, "pv2_error_code", "Solar 2 Error Code", False),
MiscSensorEntity(client, "pv2_warning_code", "Solar 2 Warning Code", False),
MiscSensorEntity(client, "pv2_status", "Solar 2 Status", False),
MiscSensorEntity(client, "bp_type", "Battery Type", False),
LevelSensorEntity(client, "bat_soc", "Battery Charge"),
DeciwattsSensorEntity(client, "bat_input_watts", "Battery Input Watts"),
DecivoltSensorEntity(client, "bat_input_volt", "Battery Input Potential"),
DecivoltSensorEntity(client, "bat_op_volt", "Battery Op Potential"),
AmpSensorEntity(client, "bat_input_cur", "Battery Input Current"),
DecicelsiusSensorEntity(client, "bat_temp", "Battery Temperature"),
RemainSensorEntity(client, "battery_charge_remain", "Charge Time"),
RemainSensorEntity(client, "battery_discharge_remain", "Discharge Time"),
MiscSensorEntity(client, "bat_error_code", "Battery Error Code", False),
MiscSensorEntity(client, "bat_warning_code", "Battery Warning Code", False),
MiscSensorEntity(client, "bat_status", "Battery Status", False),
DecivoltSensorEntity(client, "llc_input_volt", "LLC Input Potential", False),
DecivoltSensorEntity(client, "llc_op_volt", "LLC Op Potential", False),
MiscSensorEntity(client, "llc_error_code", "LLC Error Code", False),
MiscSensorEntity(client, "llc_warning_code", "LLC Warning Code", False),
MiscSensorEntity(client, "llc_status", "LLC Status", False),
MiscSensorEntity(client, "inv_on_off", "Inverter On/Off Status"),
DeciwattsSensorEntity(client, "inv_output_watts", "Inverter Output Watts"),
DecivoltSensorEntity(client, "inv_input_volt", "Inverter Output Potential", False),
DecivoltSensorEntity(client, "inv_op_volt", "Inverter Op Potential"),
AmpSensorEntity(client, "inv_output_cur", "Inverter Output Current"),
AmpSensorEntity(client, "inv_dc_cur", "Inverter DC Current"),
DecihertzSensorEntity(client, "inv_freq", "Inverter Frequency"),
DecicelsiusSensorEntity(client, "inv_temp", "Inverter Temperature"),
MiscSensorEntity(client, "inv_relay_status", "Inverter Relay Status"),
MiscSensorEntity(client, "inv_error_code", "Inverter Error Code", False),
MiscSensorEntity(client, "inv_warning_code", "Inverter Warning Code", False),
MiscSensorEntity(client, "inv_status", "Inverter Status", False),
DeciwattsSensorEntity(client, "permanent_watts", "Other Loads"),
DeciwattsSensorEntity(client, "dynamic_watts", "Smart Plug Loads"),
DeciwattsSensorEntity(client, "rated_power", "Rated Power"),
MiscSensorEntity(client, "lower_limit", "Lower Battery Limit", False),
MiscSensorEntity(client, "upper_limit", "Upper Battery Limit", False),
MiscSensorEntity(client, "wireless_error_code", "Wireless Error Code", False),
MiscSensorEntity(client, "wireless_warning_code", "Wireless Warning Code", False),
MiscSensorEntity(client, "inv_brightness", "LED Brightness", False),
MiscSensorEntity(client, "heartbeat_frequency", "Heartbeat Frequency", False),
StatusSensorEntity(client)
]
def numbers(self, client: EcoflowMQTTClient) -> list[BaseNumberEntity]:
return [
# These will likely be some form of serialised data rather than JSON will look into it later
# MinBatteryLevelEntity(client, "lowerLimit", "Min Disharge Level", 50, 100,
# lambda value: {"moduleType": 0, "operateType": "TCP",
# "params": {"id": 00, "lowerLimit": value}}),
# MaxBatteryLevelEntity(client, "upperLimit", "Max Charge Level", 0, 30,
# lambda value: {"moduleType": 0, "operateType": "TCP",
# "params": {"id": 00, "upperLimit": value}}),
]
def switches(self, client: EcoflowMQTTClient) -> list[BaseSwitchEntity]:
return []
def selects(self, client: EcoflowMQTTClient) -> list[BaseSelectEntity]:
return [
# DictSelectEntity(client, "supplyPriority", "Power supply mode", {"Prioritize power supply", "Prioritize power storage"},
# lambda value: {"moduleType": 00, "operateType": "supplyPriority",
# "params": {"supplyPriority": value}}),
]