diff --git a/goodwe/dt.py b/goodwe/dt.py index 57e780a..b54e880 100644 --- a/goodwe/dt.py +++ b/goodwe/dt.py @@ -200,6 +200,7 @@ async def _read_setting(self, setting: Sensor) -> Any: if ex.message == ILLEGAL_DATA_ADDRESS: logger.debug("Unsupported setting %s", setting.id_) self._settings.pop(setting.id_, None) + raise ValueError(f'Unknown setting "{setting.id_}"') return None async def write_setting(self, setting_id: str, value: Any): diff --git a/goodwe/es.py b/goodwe/es.py index 096c4d5..3eed3d7 100644 --- a/goodwe/es.py +++ b/goodwe/es.py @@ -220,9 +220,11 @@ async def read_setting(self, setting_id: str) -> Any: elif setting_id.startswith("modbus"): response = await self._read_from_socket(self._read_command(int(setting_id[7:]), 1)) return int.from_bytes(response.read(2), byteorder="big", signed=True) - else: + elif setting_id in self._settings: all_settings = await self.read_settings_data() return all_settings.get(setting_id) + else: + raise ValueError(f'Unknown setting "{setting_id}"') async def _read_setting(self, setting: Sensor) -> Any: count = (setting.size_ + (setting.size_ % 2)) // 2 diff --git a/goodwe/et.py b/goodwe/et.py index 2ee1c6e..506ea01 100644 --- a/goodwe/et.py +++ b/goodwe/et.py @@ -628,6 +628,7 @@ async def _read_setting(self, setting: Sensor) -> Any: if ex.message == ILLEGAL_DATA_ADDRESS: logger.debug("Unsupported setting %s", setting.id_) self._settings.pop(setting.id_, None) + raise ValueError(f'Unknown setting "{setting.id_}"') return None async def write_setting(self, setting_id: str, value: Any): diff --git a/tests/stability_check.py b/tests/stability_check.py index cd09a2a..f1420eb 100644 --- a/tests/stability_check.py +++ b/tests/stability_check.py @@ -53,6 +53,21 @@ async def pymodbus(ip): i += 1 +async def read_modbus_range(ip, port, register, length): + inverter = await goodwe.connect(host=ip, port=port, family="ET", timeout=1, retries=3) + # inverter.set_keep_alive(False) + + i = 1 + while True: + logger.info("################################") + logger.info(" Request %d", i) + logger.info("################################") + await goodwe.protocol.ModbusRtuReadCommand(0xf7, register, length).execute( + goodwe.protocol.UdpInverterProtocol(ip, port, 1, 3)) + await asyncio.sleep(5) + i += 1 + + async def get_runtime_data(ip, port): inverter = await goodwe.connect(host=ip, port=port, family="ET", timeout=1, retries=3) # inverter.set_keep_alive(False) @@ -68,4 +83,5 @@ async def get_runtime_data(ip, port): # asyncio.run(pymodbus('127.0.0.1')) +# asyncio.run(read_modbus_range('192.168.2.14', 8899, 35100, 125)) asyncio.run(get_runtime_data('127.0.0.1', 502))