New core integration for VegeHub (#129598)
* Initial commit for VegeHub integration
* Moved several pieces to library, continuing.
* All device contact moved to library
* Updated documentation link
* Fixed an error in strings.json
* Removed commented out code and unused file
* Removed unneeded info logging, and a few missed lines of commented code
* Added/removed comments for clarity
* Converted integration to use webhooks.
* Update __init__.py to remove unnecessary code.
Co-authored-by: Josef Zweck <24647999+zweckj@users.noreply.github.com>
* Remove unnecessary code from config_flow.py
Co-authored-by: Josef Zweck <24647999+zweckj@users.noreply.github.com>
* Simplify unique_id assertion.
* Switch to CONF_ constant for user input
* Added explanation for passing exception.
* Got rid of try-except, since I don't really handle the exceptions her anyway.
* Moved data transform to vegehub library
* Changed references to use HA constants.
* Fixed assigning and returning _attr properties.
* Moved temperature sensor transform to the library.
* Moved sensor names to strings.json
* Made webhook names unique to avoid collisions when multiple devices are added.
* Converted to using entry.runtime_data
* Removed options flow for first PR
* Removed switch support to limit PR to one platform
* Removed/updated outdated tests
* Update homeassistant/components/vegehub/__init__.py
Co-authored-by: Josef Zweck <josef@zweck.dev>
* Got rid of strings in favor of constants.
* Got rid of unnecessary check
* Imported constant directly.
* Added custom type for entry
* Expanded CONF_ constants into sensor.py
* Get rid of extra `str` and `get`
Co-authored-by: Josef Zweck <josef@zweck.dev>
* Added type to errors
* Added try/except to MAC address retrieval
* Moved functionality out of ConfigFlow that shouldn't have been there
* Removed IP:MAC tracking from ConfigFlow
* Added retries to VegeHub PyPI package, and implemented them in integration
* Removed different sensor types for now
* Fixed typo
* Changed abort to error
* Fixed error reporting in config flow
* Further simplify sensor.py to handle all sensors the same
* Added comment to clarify
* Got rid of unused constants
* Removed unused strings in strings.json
* Added quality_scale.yaml
* Fixed problems in sensor init
* Moved config url and sw version storage into vegehub package
* Get rid of extra declaration
Co-authored-by: Josef Zweck <josef@zweck.dev>
* Removed unnecessary task
* Fix type for entry
* Added a test before setup
* Fixed tests and got test coverage of config flow to 100%
* Fixed test descriptions
* Implemented a coordinator
* Removed unused property
* Fixed a few minor issues with the coordinator implementation
* Removed unused function
* Fixed some tests
* Trying to fix a problem with re-initialization when server reboots. Mostly working.
* Moved hub.setup from async_setup_entry to config flow to avoid running it on system reboot
* Delete tests/testing_config/.storage/http.auth
* Fixed errors in coordinator.py
* Added IP validation for manual input IP addresses
* Moved data into self._discovered to simplify
* Removed redundant typing
* Shortened sensor unique ID and added coordinator handler
* Added call to super()._handle_coordinator_update() so state gets handled correctly
* Fixed == and is
* Got rid of "slot" and moved functionality to lib
* Got rid of mocked aiohttp calls in favor of just mocking the vegehub library
* Rewrote config flow to make more sense.
* Changed order of data and data_description
* Changes to sensor.py
* Got rid of async_update_data in coordinator and moved async_set_updated_data into webhook callback
* Changed sensor updates so that they keep using last known values if update doesn't contain data for them
* Changed config flow to use homeassistant.helpers.service_info zeroconf instead of homeassistant.components zeroconf
* Added types to test parameters
* Changes and notes in config_flow.py
* Minor fix to get existing tests working before making changes to tests
* Removed unused data and simplified data passing
* Fixed tests, removed unused data, moved sensor tests to snapshots
* Mocked async_setup_entry and async_unload_entry
* Eliminated retry step so that retries just happen in the user flow or zeroconf_confirm
* Bumped the library version
* Bumped library version again
* Changed test-before-setup test
* Improved use of coordinator
* Almost done reworking tests. A few more changes still needed.
* Added via device to sensor.py and key reference to strings.json
* Webhook tests are almost, but not quite, working
* Fully functional again
* Change error to assert
* made identifiers and via_device the same
* made the via_device just be the mac
* Fixed strings.json and updated translations
* Fixed test_sensor.py
* Cleaned up tests and added autouse to several fixtures to simplify
* Switched from error to assert, and added exemption to quality scale.
* Cleaned up some tests and added update of IP if unique ID of discovered device is the same.
* Improved zeroconfig to update IP and hostname, and added a test to make sure those work.
* Fixed a comment.
* Improved ip/hostname update test.
* Changed Hub to VegeHub in strings.json for clarity.
* Switched to using a base entity to simplify and make adding platforms in the future easier.
* Moved the vegehub object into the coordinator to simplify.
* Removed actuators from sensors, and added unique name for battery sensor
* Changed coordinator to manage its own data, changed sensors to use descriptions and return their value as a property
* Updated data retrieval keys
* Minor updates to several files
* Fixed a few things for pytest
* Reverted to explicit check for None for pytest
* Fixed a comment and a variable name
* Fixed a comment
* Fix
* Bumped depenency version to eliminate pytest from dependencies.
---------
Co-authored-by: Josef Zweck <24647999+zweckj@users.noreply.github.com>
Co-authored-by: Josef Zweck <josef@zweck.dev>
Co-authored-by: Joostlek <joostlek@outlook.com>
2025-06-23 22:55:34 -06:00
|
|
|
"""Base entity for VegeHub."""
|
|
|
|
|
|
|
|
from homeassistant.const import CONF_HOST, CONF_MAC
|
|
|
|
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, DeviceInfo
|
|
|
|
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
|
|
|
|
|
|
|
from .const import MANUFACTURER, MODEL
|
|
|
|
from .coordinator import VegeHubCoordinator
|
|
|
|
|
|
|
|
|
|
|
|
class VegeHubEntity(CoordinatorEntity[VegeHubCoordinator]):
|
|
|
|
"""Defines a base VegeHub entity."""
|
|
|
|
|
|
|
|
_attr_has_entity_name = True
|
|
|
|
|
|
|
|
def __init__(self, coordinator: VegeHubCoordinator) -> None:
|
|
|
|
"""Initialize the entity."""
|
|
|
|
super().__init__(coordinator)
|
|
|
|
config_entry = coordinator.config_entry
|
|
|
|
self._mac_address = config_entry.data[CONF_MAC]
|
|
|
|
self._attr_device_info = DeviceInfo(
|
|
|
|
connections={(CONNECTION_NETWORK_MAC, self._mac_address)},
|
|
|
|
name=config_entry.data[CONF_HOST],
|
|
|
|
manufacturer=MANUFACTURER,
|
|
|
|
model=MODEL,
|
|
|
|
sw_version=coordinator.vegehub.sw_version,
|
|
|
|
configuration_url=coordinator.vegehub.url,
|
|
|
|
)
|