130 lines
7.3 KiB
Python
130 lines
7.3 KiB
Python
from . import const, BaseDevice
|
|
from ..button import EnabledButtonEntity
|
|
from ..entities import BaseSensorEntity, BaseNumberEntity, BaseSwitchEntity, BaseSelectEntity, BaseButtonEntity
|
|
from ..mqtt.ecoflow_mqtt import EcoflowMQTTClient
|
|
from ..number import SetTempEntity
|
|
from ..sensor import LevelSensorEntity, RemainSensorEntity, SecondsRemainSensorEntity, TempSensorEntity, \
|
|
CyclesSensorEntity, InWattsSensorEntity, OutWattsSensorEntity, VoltSensorEntity, QuotasStatusSensorEntity, \
|
|
MilliVoltSensorEntity, ChargingStateSensorEntity, \
|
|
FanSensorEntity, MiscBinarySensorEntity, DecicelsiusSensorEntity, MiscSensorEntity, CapacitySensorEntity
|
|
from ..switch import EnabledEntity, InvertedBeeperEntity
|
|
|
|
|
|
class Glacier(BaseDevice):
|
|
def charging_power_step(self) -> int:
|
|
return 50
|
|
|
|
def sensors(self, client: EcoflowMQTTClient) -> list[BaseSensorEntity]:
|
|
return [
|
|
# Power and Battery Entities
|
|
LevelSensorEntity(client, "bms_bmsStatus.soc", const.MAIN_BATTERY_LEVEL)
|
|
.attr("bms_bmsStatus.designCap", const.ATTR_DESIGN_CAPACITY, 0)
|
|
.attr("bms_bmsStatus.fullCap", const.ATTR_FULL_CAPACITY, 0)
|
|
.attr("bms_bmsStatus.remainCap", const.ATTR_REMAIN_CAPACITY, 0),
|
|
CapacitySensorEntity(client, "bms_bmsStatus.designCap", const.MAIN_DESIGN_CAPACITY, False),
|
|
CapacitySensorEntity(client, "bms_bmsStatus.fullCap", const.MAIN_FULL_CAPACITY, False),
|
|
CapacitySensorEntity(client, "bms_bmsStatus.remainCap", const.MAIN_REMAIN_CAPACITY, False),
|
|
|
|
LevelSensorEntity(client, "bms_emsStatus.f32LcdSoc", const.COMBINED_BATTERY_LEVEL),
|
|
|
|
ChargingStateSensorEntity(client, "bms_emsStatus.chgState", const.BATTERY_CHARGING_STATE),
|
|
|
|
InWattsSensorEntity(client, "bms_bmsStatus.inWatts", const.TOTAL_IN_POWER),
|
|
OutWattsSensorEntity(client, "bms_bmsStatus.outWatts", const.TOTAL_OUT_POWER),
|
|
|
|
OutWattsSensorEntity(client, "pd.motorWat", "Motor Power"),
|
|
|
|
RemainSensorEntity(client, "bms_emsStatus.chgRemain", const.CHARGE_REMAINING_TIME),
|
|
RemainSensorEntity(client, "bms_emsStatus.dsgRemain", const.DISCHARGE_REMAINING_TIME),
|
|
|
|
CyclesSensorEntity(client, "bms_bmsStatus.cycles", const.CYCLES),
|
|
|
|
TempSensorEntity(client, "bms_bmsStatus.tmp", const.BATTERY_TEMP)
|
|
.attr("bms_bmsStatus.minCellTemp", const.ATTR_MIN_CELL_TEMP, 0)
|
|
.attr("bms_bmsStatus.maxCellTemp", const.ATTR_MAX_CELL_TEMP, 0),
|
|
TempSensorEntity(client, "bms_bmsStatus.minCellTmp", const.MIN_CELL_TEMP, False),
|
|
TempSensorEntity(client, "bms_bmsStatus.maxCellTmp", const.MAX_CELL_TEMP, False),
|
|
|
|
VoltSensorEntity(client, "bms_bmsStatus.vol", const.BATTERY_VOLT, False)
|
|
.attr("bms_bmsStatus.minCellVol", const.ATTR_MIN_CELL_VOLT, 0)
|
|
.attr("bms_bmsStatus.maxCellVol", const.ATTR_MAX_CELL_VOLT, 0),
|
|
MilliVoltSensorEntity(client, "bms_bmsStatus.minCellVol", const.MIN_CELL_VOLT, False),
|
|
MilliVoltSensorEntity(client, "bms_bmsStatus.maxCellVol", const.MAX_CELL_VOLT, False),
|
|
|
|
MiscBinarySensorEntity(client,"pd.batFlag", "Battery Present"),
|
|
|
|
MiscSensorEntity(client, "pd.xt60InState", "XT60 State"),
|
|
|
|
#Fridge Entities
|
|
FanSensorEntity(client, "bms_emsStatus.fanLvl", "Fan Level"),
|
|
|
|
DecicelsiusSensorEntity(client, "pd.ambientTmp", "Ambient Temperature"),
|
|
DecicelsiusSensorEntity(client, "pd.exhaustTmp", "Exhaust Temperature"),
|
|
DecicelsiusSensorEntity(client, "pd.tempWater", "Water Temperature"),
|
|
DecicelsiusSensorEntity(client, "pd.tmpL", "Left Temperature"),
|
|
DecicelsiusSensorEntity(client, "pd.tmpR", "Right Temperature"),
|
|
|
|
MiscBinarySensorEntity(client,"pd.flagTwoZone","Dual Zone Mode"),
|
|
|
|
SecondsRemainSensorEntity(client, "pd.iceTm", "Ice Time Remain"),
|
|
LevelSensorEntity(client, "pd.icePercent", "Ice Percentage"),
|
|
|
|
MiscSensorEntity(client, "pd.iceMkMode", "Ice Make Mode"),
|
|
|
|
MiscBinarySensorEntity(client,"pd.iceAlert","Ice Alert"),
|
|
MiscBinarySensorEntity(client,"pd.waterLine","Ice Water Level OK"),
|
|
|
|
QuotasStatusSensorEntity(client)
|
|
|
|
]
|
|
|
|
def numbers(self, client: EcoflowMQTTClient) -> list[BaseNumberEntity]:
|
|
return [
|
|
SetTempEntity(client,"pd.tmpLSet", "Left Set Temperature",-25, 10,
|
|
lambda value, params: {"moduleType": 1, "operateType": "temp",
|
|
"params": {"tmpM": int(params.get("pd.tmpMSet", 0)),
|
|
"tmpL": int(value),
|
|
"tmpR": int(params.get("pd.tmpRSet", 0))}}),
|
|
|
|
SetTempEntity(client,"pd.tmpMSet", "Combined Set Temperature",-25, 10,
|
|
lambda value, params: {"moduleType": 1, "operateType": "temp",
|
|
"params": {"tmpM": int(value),
|
|
"tmpL": int(params.get("pd.tmpLSet", 0)),
|
|
"tmpR": int(params.get("pd.tmpRSet", 0))}}),
|
|
|
|
SetTempEntity(client,"pd.tmpRSet", "Right Set Temperature",-25, 10,
|
|
lambda value, params: {"moduleType": 1, "operateType": "temp",
|
|
"params": {"tmpM": int(params.get("pd.tmpMSet", 0)),
|
|
"tmpL": int(params.get("pd.tmpLSet", 0)),
|
|
"tmpR": int(value)}}),
|
|
|
|
]
|
|
|
|
def switches(self, client: EcoflowMQTTClient) -> list[BaseSwitchEntity]:
|
|
return [
|
|
InvertedBeeperEntity(client, "pd.beepEn", const.BEEPER,
|
|
lambda value: {"moduleType": 1, "operateType": "beepEn", "params": {"flag": value}}),
|
|
|
|
EnabledEntity(client, "pd.coolMode", "Eco Mode",
|
|
lambda value: {"moduleType": 1, "operateType": "ecoMode", "params": {"mode": value}}),
|
|
|
|
#power parameter is inverted for some reason
|
|
EnabledEntity(client, "pd.pwrState", "Power",
|
|
lambda value: {"moduleType": 1, "operateType": "powerOff", "params": {"enable": value}}),
|
|
|
|
]
|
|
|
|
def buttons(self, client: EcoflowMQTTClient) -> list[BaseButtonEntity]:
|
|
return [
|
|
EnabledButtonEntity(client, "smlice", "Make Small Ice", lambda value: {"moduleType": 1, "operateType": "iceMake", "params": {"enable": 1, "iceShape": 0}}),
|
|
EnabledButtonEntity(client, "lrgice", "Make Large Ice", lambda value: {"moduleType": 1, "operateType": "iceMake", "params": {"enable": 1, "iceShape": 1}}),
|
|
EnabledButtonEntity(client, "deice", "Detach Ice", lambda value: {"moduleType": 1, "operateType": "deIce", "params": {"enable": 1}})
|
|
|
|
]
|
|
|
|
|
|
def selects(self, client: EcoflowMQTTClient) -> list[BaseSelectEntity]:
|
|
return [
|
|
|
|
]
|