Skip to content

Commit 16f9808

Browse files
committed
Move River 2 to controls system
1 parent 90eb08a commit 16f9808

2 files changed

Lines changed: 38 additions & 16 deletions

File tree

custom_components/ef_ble/eflib/devices/river2.py

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from bleak.backends.scanner import AdvertisementData
33

44
from ..devicebase import DeviceBase
5+
from ..entity import controls
6+
from ..entity.base import dynamic
57
from ..model import (
68
DirectBmsMDeltaHeartbeatPack,
79
DirectEmsDeltaHeartbeatPack,
@@ -140,11 +142,13 @@ async def data_parse(self, packet: Packet) -> bool:
140142

141143
return processed
142144

145+
@controls.outlet(ac_ports)
143146
async def enable_ac_ports(self, enabled: bool):
144147
payload = bytes([1 if enabled else 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
145148
packet = Packet(0x21, 0x05, 0x20, 0x42, payload, version=2)
146149
await self._conn.sendPacket(packet)
147150

151+
@controls.outlet(dc_12v_port)
148152
async def enable_dc_12v_port(self, enabled: bool):
149153
payload = bytes([0x01 if enabled else 0x00])
150154
packet = Packet(0x21, 0x05, 0x20, 0x51, payload, version=2)
@@ -160,6 +164,7 @@ async def enable_ac_always_on(self, enabled: bool):
160164
packet = Packet(0x21, 0x02, 0x20, 0x5F, payload, version=2)
161165
await self._conn.sendPacket(packet)
162166

167+
@controls.switch(energy_backup)
163168
async def enable_energy_backup(self, enabled: bool):
164169
reserve = (
165170
self.energy_backup_battery_level
@@ -172,14 +177,21 @@ async def enable_energy_backup(self, enabled: bool):
172177
packet = Packet(0x21, 0x02, 0x20, 0x5E, payload, version=2)
173178
await self._conn.sendPacket(packet)
174179

175-
async def set_energy_backup_battery_level(self, value: int) -> bool:
180+
@controls.battery(
181+
energy_backup_battery_level,
182+
min=dynamic(battery_charge_limit_min),
183+
max=dynamic(battery_charge_limit_max),
184+
availability=dynamic(energy_backup),
185+
)
186+
async def set_energy_backup_battery_level(self, value: float) -> bool:
176187
percent = max(0, min(int(value), 100))
177188
payload = bytes([0x01, percent, 0x00, 0x00])
178189
packet = Packet(0x21, 0x02, 0x20, 0x5E, payload, version=2)
179190
await self._conn.sendPacket(packet)
180191
return True
181192

182-
async def set_battery_charge_limit_min(self, limit: int) -> bool:
193+
@controls.battery(battery_charge_limit_min, max=dynamic(battery_charge_limit_max))
194+
async def set_battery_charge_limit_min(self, limit: float) -> bool:
183195
limit = max(0, min(int(limit), 30))
184196
if (
185197
self.battery_charge_limit_max is not None
@@ -191,28 +203,35 @@ async def set_battery_charge_limit_min(self, limit: int) -> bool:
191203
await self._conn.sendPacket(packet)
192204
return True
193205

194-
async def set_battery_charge_limit_max(self, limit: int) -> bool:
206+
@controls.battery(battery_charge_limit_max, min=dynamic(battery_charge_limit_min))
207+
async def set_battery_charge_limit_max(self, limit: float) -> bool:
195208
if self.battery_charge_limit_min is not None and limit < int(
196209
self.battery_charge_limit_min
197210
):
198211
return False
199212

200-
packet = Packet(0x21, 0x03, 0x20, 0x31, limit.to_bytes(), version=2)
213+
packet = Packet(0x21, 0x03, 0x20, 0x31, int(limit).to_bytes(), version=2)
201214
await self._conn.sendPacket(packet)
202215
return True
203216

204-
async def set_dc_charging_amps_max(self, value: int) -> bool:
205-
packet = Packet(0x21, 0x05, 0x20, 0x47, value.to_bytes(), version=2)
217+
@controls.current(dc_charging_max_amps, max=dynamic(dc_charging_current_max))
218+
async def set_dc_charging_amps_max(self, value: float) -> bool:
219+
packet = Packet(0x21, 0x05, 0x20, 0x47, int(value).to_bytes(), version=2)
206220
await self._conn.sendPacket(packet)
207221
return True
208222

209-
async def set_dc_mode(self, value: DCMode) -> bool:
223+
@controls.select(dc_mode, options=DCMode)
224+
async def set_dc_mode(self, value: DCMode):
210225
packet = Packet(0x21, 0x05, 0x20, 0x52, value.to_bytes(), version=2)
211226
await self._conn.sendPacket(packet)
212-
return True
213227

214-
async def set_ac_charging_speed(self, value: int):
215-
payload = value.to_bytes(2, "little") + b"\xff"
228+
@controls.power(
229+
ac_charging_speed,
230+
min=dynamic(min_ac_charging_power),
231+
max=dynamic(max_ac_charging_power),
232+
)
233+
async def set_ac_charging_speed(self, value: float):
234+
payload = int(value).to_bytes(2, "little") + b"\xff"
216235
packet = Packet(0x21, 0x05, 0x20, 0x45, payload, version=2)
217236
await self._conn.sendPacket(packet)
218237
return True

custom_components/ef_ble/translations/en.json

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -849,12 +849,6 @@
849849
"en_pet_care": {
850850
"name": "Pet Care Mode"
851851
},
852-
"battery_charge_limit_min": {
853-
"name": "Discharge Limit"
854-
},
855-
"battery_charge_limit_max": {
856-
"name": "Charge Limit"
857-
},
858852
"sleep_state": {
859853
"name": "Sleep State"
860854
},
@@ -919,6 +913,9 @@
919913
"led_mode": {
920914
"name": "LED"
921915
},
916+
"dc_mode": {
917+
"name": "DC Mode"
918+
},
922919
"dc_charging_type": {
923920
"name": "DC Charging Type"
924921
},
@@ -1031,6 +1028,12 @@
10311028
},
10321029
"dc_charging_max_amps_2": {
10331030
"name": "DC (2) Charging Max Amps"
1031+
},
1032+
"battery_charge_limit_min": {
1033+
"name": "Discharge Limit"
1034+
},
1035+
"battery_charge_limit_max": {
1036+
"name": "Charge Limit"
10341037
}
10351038
},
10361039
"climate": {

0 commit comments

Comments
 (0)