* Allow MQTT device based auto discovery
* Fix merge error
* Remove unused import
* Fix discovery device based topics
* Fix cannot delete twice
* Improve cleanup test
* Follow up comment
* Typo
Co-authored-by: Erik Montnemery <erik@montnemery.com>
* Explain more
* Use tuple
* Default a device payload to have priority over a platform based payload
* Add unique_id to sensor test data
* Set migration flag to mark a discovery topic for migration
* Correct type hint
* Make unique_id required for components in device based discovery payload
* Remove CONF_MIGRATE_DISCOVERY from platform schema
* Unload discovered MQTT item to allow migration
* Follow up comments from code review
* ruff
* Subscribe to platform discovery wildcards first
* Use normal dict
* Use dict to persist wildcard subscription order
* Remove missed unused parameter
* Add a comment to explain we use a dict to preserve the subscription order
* Add wildcard subscription order test
* Remove discovery flag from test
* Improve discovery migration origin logging
* Assert initial wildcard discovery topics subscription order and after reconnect
* Improve log messages
---------
Co-authored-by: Erik Montnemery <erik@montnemery.com>
* Start mqtt integration config flow only once
* Remember last config message
* Filter out instead of unsubscribing the intehration discovery topic
* Follow up comments from code review
* Fix issue where an MQTT device is removed linked to two config entries
* Update homeassistant/components/mqtt/discovery.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/mqtt/debug_info.py
Co-authored-by: J. Nick Koston <nick@koston.org>
---------
Co-authored-by: J. Nick Koston <nick@koston.org>
* Add MQTT device based auto discovery
* Respect override of component options over shared ones
* Add state_topic, command_topic, qos and encoding as shared options
* Add shared option test
* Rename device.py to schemas.py
* Remove unused legacy `platform` attribute to avoid confusion
* Split validation device and origin info
* Require `origin` info on device based discovery
* Log origin info for only once for device discovery
* Fix tests and linters
* ruff
* speed up _replace_all_abbreviations
* Fix imports and merging errors - add slots attr
* Fix unrelated const changes
* More unrelated changes
* join string
* fix merge
* Undo move
* Adjust logger statement
* fix task storm to load platforms
* Revert "fix task storm to load platforms"
This reverts commit 8f12a5f251.
* bail if logging is disabled
* Correct mixup object_id and node_id
* Auto migrate entities to device discovery
* Add device discovery test for device_trigger
* Add migration support for non entity platforms
* Use helper to remove discovery payload
* Fix tests after update branch
* Add discovery migration test
* Refactor
* Repair after rebase
* Fix discovery is broken after migration
* Improve comments
* More comment improvements
* Split long lines
* Add comment to indicate payload dict can be empty
* typo
* Add walrus and update comment
* Add tag to migration test
* Join try blocks
* Refactor
* Cleanup not used attribute
* Refactor
* Move _replace_all_abbreviations out of try block
---------
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: Sid <27780930+autinerd@users.noreply.github.com>
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
This test currently relies on event loop overhead and since #110899
will remove another task in the config entry init flow, it needs
another async_block_till_done. In the future it should be refactored
to have better synchronization without having to rely on iterations
of the event loop.
* Set has_entity_name if device_name is set
* revert unneeded formatting change
* Add image platform
* Follow up comment
* Don't set `has_entity_name` without device name
* Only set has_entity_name if a valid name is set
* Follow device_class name and add tests
* Follow up comments add extra tests
* Move to helper - Log a warning
* fix test
* Allow to assign None as name explictly
* Refactor
* Log info messages when device name is not set
* Revert scene schema change - no device link
* Always set has_entity_name with device mapping
* Always set `_attr_has_entity_name`
* Cleanup
* Debounce MQTT unsubscribes and merge to one call
* Make _async_unsubscribe a callback
* Make sure unsubscribes are processed
* Move debug log out of lock
* Reduce calls and raise outside lock
* Cancel any unsubscribe when queing
* Copy pending unsubscribes
* Only convert topics to list once
* No copy needed
* Typo in comment
* Debounce and group mqtt subscriptions
* Cleanup
* Do not cooldown on resubscribe
* Remove lock from task
Co-authored-by: Erik Montnemery <erik@montnemery.com>
* ruff
* Longer initial cool down. Manages unsubscribes
* Own lock for access to self._pending_subscriptions
* adjust
* Subscribe to highest QoS when sharing subscription
* do not block _pending_subscriptions_lock with io
* Test the highest qos is subscribed at
* Cleanup max qos
* Follow up comments part 1
* Make docstr more generic
* Make max qos update thread safe
* Add lock on clearing _max_qos when resubscribing
* Wait for linger task
* User copy
* Check for key before cleaning up
* Fix lingering task
* Do not use a lock
* do not await _async_queue_subscriptions
* Replace copy with assignment
* Update max qos before returning
* Do not iterate if max_qos == 0
* Do not ieterate subs if max qos == 0
* Set initial cooldown correctly
* Ensure discovery cooldown ends after subscribing
* plan last subscribe with debouncer timeout
* cooldown if self._pending_subscriptions is set
* Revert format changes
* Remove stale assingnment self._last_subscribe
* Remove not used property
* Also check while for pending subscriptions
* revert first added sleep()
* Optimize
---------
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: J. Nick Koston <nick@koston.org>