|
8 | 8 | from typing import Optional |
9 | 9 |
|
10 | 10 | from bleak.backends.device import BLEDevice |
11 | | -from victron_ble.devices import AuxMode, BatteryMonitor, SolarCharger |
| 11 | +from victron_ble.devices import AuxMode, BatteryMonitor, SolarCharger, DcDcConverter |
12 | 12 | from victron_ble.exceptions import AdvertisementKeyMissingError, UnknownDeviceError |
13 | 13 | from victron_ble.scanner import Scanner |
14 | 14 |
|
@@ -51,6 +51,7 @@ def callback(self, bl_device: BLEDevice, raw_data: bytes): |
51 | 51 | transformers = { |
52 | 52 | BatteryMonitor: self.transform_battery_data, |
53 | 53 | SolarCharger: self.transform_solar_charger_data, |
| 54 | + DcDcConverter: self.transform_dcdc_converter_data, |
54 | 55 | } |
55 | 56 | for device_type, transformer in transformers.items(): |
56 | 57 | if isinstance(device, device_type): |
@@ -172,6 +173,48 @@ def transform_solar_charger_data( |
172 | 173 | ], |
173 | 174 | } |
174 | 175 |
|
| 176 | + def transform_dcdc_converter_data( |
| 177 | + self, |
| 178 | + bl_device: BLEDevice, |
| 179 | + cfg_device: ConfiguredDevice, |
| 180 | + data: DcDcConverter, |
| 181 | + id_: str, |
| 182 | + ): |
| 183 | + return { |
| 184 | + "updates": [ |
| 185 | + { |
| 186 | + "source": { |
| 187 | + "label": "Victron", |
| 188 | + "type": "Bluetooth", |
| 189 | + "src": bl_device.address, |
| 190 | + }, |
| 191 | + "timestamp": datetime.datetime.utcnow().isoformat() + "Z", |
| 192 | + "values": [ |
| 193 | + { |
| 194 | + "path": f"electrical.converters.{id_}.chargingMode", |
| 195 | + "value": data.get_charge_state().name.lower(), |
| 196 | + }, |
| 197 | + { |
| 198 | + "path": f"electrical.converters.{id_}.chargerError", |
| 199 | + "value": data.get_charger_error().name.lower(), |
| 200 | + }, |
| 201 | + { |
| 202 | + "path": f"electrical.converters.{id_}.input.voltage", |
| 203 | + "value": data.get_input_voltage(), |
| 204 | + }, |
| 205 | + { |
| 206 | + "path": f"electrical.converters.{id_}.output.voltage", |
| 207 | + "value": data.get_output_voltage(), |
| 208 | + }, |
| 209 | + { |
| 210 | + "path": f"electrical.converters.{id_}.chargerOffReason", |
| 211 | + "value": data.get_off_reason().name.lower(), |
| 212 | + }, |
| 213 | + ], |
| 214 | + }, |
| 215 | + ], |
| 216 | + } |
| 217 | + |
175 | 218 |
|
176 | 219 | async def monitor(devices): |
177 | 220 | scanner = SignalKScanner(devices) |
|
0 commit comments