diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 13b6f67..0000000 --- a/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -__pycache__ -pythonenv* -venv -.venv -.coverage diff --git a/custom_components/openhasp/__init__.py b/custom_components/openhasp/__init__.py index b074078..7fdc1ab 100644 --- a/custom_components/openhasp/__init__.py +++ b/custom_components/openhasp/__init__.py @@ -147,6 +147,7 @@ def hasp_object(value): vol.Required("version"): cv.string, vol.Required("uptime"): int, vol.Required("canUpdate"): cv.boolean, + vol.Optional("ip"): cv.string, # <-- Added for dynamic IP }, extra=vol.ALLOW_EXTRA, ) @@ -188,13 +189,27 @@ async def async_setup(hass, config): _LOGGER, DOMAIN, hass ) - component.async_register_entity_service(SERVICE_WAKEUP, {}, "async_wakeup") + # Define minimal schemas so that each service is recognized as an entity service + WAKEUP_SCHEMA = cv.make_entity_service_schema({}) + PAGE_NEXT_SCHEMA = cv.make_entity_service_schema({}) + PAGE_PREV_SCHEMA = cv.make_entity_service_schema({}) + + component.async_register_entity_service( + SERVICE_WAKEUP, + WAKEUP_SCHEMA, + "async_wakeup" + ) component.async_register_entity_service( - SERVICE_PAGE_NEXT, {}, "async_change_page_next" + SERVICE_PAGE_NEXT, + PAGE_NEXT_SCHEMA, + "async_change_page_next" ) component.async_register_entity_service( - SERVICE_PAGE_PREV, {}, "async_change_page_prev" + SERVICE_PAGE_PREV, + PAGE_PREV_SCHEMA, + "async_change_page_prev" ) + component.async_register_entity_service( SERVICE_PAGE_CHANGE, {vol.Required(ATTR_PAGE): int}, "async_change_page" ) @@ -428,6 +443,24 @@ async def statusupdate_message_received(msg): self._available = True self._statusupdate = message + # If "ip" is reported, update config entry + device registry + if "ip" in message: + self._statusupdate["ip"] = message["ip"] + new_url = f"http://{message['ip']}/" + old_url = self._entry.data.get(DISCOVERED_URL, "") + if new_url != old_url: + _LOGGER.debug("IP changed to %s, updating config entry URL...", new_url) + new_data = dict(self._entry.data) + new_data[DISCOVERED_URL] = new_url + self.hass.config_entries.async_update_entry(self._entry, data=new_data) + + dev_reg = dr.async_get(self.hass) + device = dev_reg.async_get_device( + identifiers={(DOMAIN, self._entry.data[CONF_HWID])} + ) + if device: + dev_reg.async_update_device(device.id, configuration_url=new_url) + self._page = message[ATTR_PAGE] self.async_write_ha_state()