{"record":{"id":"ad0b8dac04628bd5","repo":"home-assistant/core","slug":"error-ad0b8d","errorCode":null,"errorMessage":"error","messagePattern":"error","errorType":"exception","errorClass":"UpdateFailed","httpStatus":null,"severity":"error","filePath":"homeassistant/components/aurora_abb_powerone/coordinator.py","lineNumber":83,"sourceCode":"                power_in_1 = self.client.measure(8)\n                power_in_2 = self.client.measure(9)\n                temperature_c = self.client.measure(21)\n                voltage_in_1 = self.client.measure(23)\n                current_in_1 = self.client.measure(25)\n                voltage_in_2 = self.client.measure(26)\n                current_in_2 = self.client.measure(27)\n                r_iso = self.client.measure(30)\n                energy_wh = self.client.cumulated_energy(5)\n                [alarm, *_] = self.client.alarms()\n            except AuroraTimeoutError:\n                self.available = False\n                _LOGGER.debug(\"No response from inverter (could be dark)\")\n                retries = 0\n            except (SerialException, AuroraError) as error:\n                self.available = False\n                retries -= 1\n                if retries <= 0:\n                    raise UpdateFailed(error) from error\n                _LOGGER.debug(\n                    \"Exception: %s occurred, %d retries remaining\",\n                    repr(error),\n                    retries,\n                )\n                sleep(1)\n            else:\n                data[\"grid_voltage\"] = round(grid_voltage, 1)\n                data[\"grid_current\"] = round(grid_current, 1)\n                data[\"instantaneouspower\"] = round(power_watts, 1)\n                data[\"grid_frequency\"] = round(frequency, 1)\n                data[\"i_leak_dcdc\"] = i_leak_dcdc\n                data[\"i_leak_inverter\"] = i_leak_inverter\n                data[\"power_in_1\"] = round(power_in_1, 1)\n                data[\"power_in_2\"] = round(power_in_2, 1)\n                data[\"temp\"] = round(temperature_c, 1)\n                data[\"voltage_in_1\"] = round(voltage_in_1, 1)\n                data[\"current_in_1\"] = round(current_in_1, 1)","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/aurora_abb_powerone/coordinator.py#L65-L101","documentation":"UpdateFailed raised by the aurora_abb_powerone coordinator only after the retry budget is exhausted: each SerialException or AuroraError decrements `retries`, sleeps 1s, and re-attempts; when retries reaches 0 the exception is re-raised as UpdateFailed. AuroraTimeoutError is treated separately as 'inverter dark' (no failure). This models a solar inverter on a serial/modbus link that is persistently erroring but not merely silent.","triggerScenarios":"Repeated SerialException (USB/serial adapter unplugged, wrong device path, permissions on /dev/ttyUSB*) or AuroraError (modbus framing errors, bad response CRC) on every retry attempt of the measurement loop (voltage, current, power, energy, alarms).","commonSituations":"Serial adapter re-enumerated to a different ttyUSB device after reboot; user lacks dialout group membership; RS485 wiring/grounding noise causing persistent protocol errors; inverter powered off for the season (though that normally yields AuroraTimeoutError instead).","solutions":["Check the serial device exists and is the right one: ls -l /dev/ttyUSB* and compare with the integration config","Ensure the HA process user can open the device (dialout group / udev rules)","Inspect RS485 cabling/termination if AuroraError dominates (framing/CRC issues)","If the inverter is intentionally off, disable the integration to stop the retry loop"],"exampleFix":"# before: config points at a stale device path\n# options: /dev/ttyUSB0\n\n# after: pin the adapter via udev by serial\n# /etc/udev/rules.d/99-aurora.rules:\n# SUBSYSTEM==\"tty\", ATTRS{idSerial}==\"A9012XYZ\", SYMLINK+=\"aurora485\"\n# then configure the integration with /dev/aurora485","handlingStrategy":"retry","validationCode":"import os, stat\nmode = os.stat(device_path).st_mode\nif not stat.S_ISCHR(mode):\n    raise ValueError(f\"{device_path} is not a serial device\")","typeGuard":null,"tryCatchPattern":"try:\n    data = await coordinator.async_refresh()\nexcept UpdateFailed as err:\n    cause = err.__cause__\n    if isinstance(cause, SerialException):\n        _LOGGER.error(\"Serial link down: check adapter/cable\")\n    elif isinstance(cause, AuroraError):\n        _LOGGER.error(\"Modbus protocol errors: check RS485 wiring\")","preventionTips":["Pin serial adapters with udev rules (SYMLINK) instead of raw ttyUSB paths","Ensure the HA user is in the dialout group","Distinguish AuroraTimeoutError (dark inverter, benign) from SerialException/AuroraError before debugging"],"tags":["solar","inverter","serial","rs485","coordinator","aurora-abb-powerone"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}