* Ensure HomeAssistant can startup if homekit fails to load
* Update homeassistant/components/logbook/manifest.json
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Initial ZHA climate implementation.
* Add retryable_request decorator.
sort helpers imports.
* Check manufacturer for Climate implementation.
* Default zha.climate.operation_list to [Off]
* Migrate to climate 1.0
* Sort imports, properties and methods.
* Handle 'PRESET_NONE' presets.
* Use pi_heating/cooling_demand for HVAC action prop.
* Implement `running_state` HVAC channel property.
For ZHA thermostats which don't support `pi_heating_demand` or
`pi_cooling_demand' attributes.
* wip fan support
* Refactor retryable request logging.
* Rebase cleanup.
* Update climate discovery.
* Fix ZHA climate restoration.
* Bulk configure attribute reports.
* Use configure_reporting_multiple command for Light
More detailed response parsing of configure_reporting_multiple.
* Use ordered list for HVAC cluster attribute reports.
* Don't mutilate HVAC mode list.
* Add fan_mode property to fan channel.
* Fix type hinting.
* Expose fan mode only.
* Implement fan mode setting.
Drop support for HVAC_FAN_ONLY mode.
* Use ClimateEntity as base class.
* Cleanup debug code.
* Update time display for Sinope.
* Don't do many retries.
* Don't use multi attr reporting configuration.
* Make tests pass.
* Drop support for setpoint change source/amount.
* Cleanups.
* Drop aux heat
* Update tests.
* Drop Sinope temperature display code.
* Update tests.
* Refactor temperature setting.
* Update tests.
* Update Fan tests.
* Lint
* Black.
* Use correct logging levels
* Add services remote_set_led_on/remote_set_led_off to control changmi_ir led
* pylint: elif => if
* Fix services.async_register => platform.async_register_entity_service
* Update homeassistant/components/xiaomi_miio/remote.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* more fixes
* async
* more fixes
* fix
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Async remove call removed too much, resulting in disabled entities coming back after a restart
* Calling super().async_remove is no longer needed, changed to self.async_remove
* Yes, they should be sets...
The database fields are timezoned via DateTime(timezone=True), so the
default value should be timezoned too. When using cockroachdb this is
fatal and results in the recorder crashing.
* Fire events on homekit TV remote key press
* Changes from code review
* black
* isort
* flake8
* Update tests/components/homekit/test_type_media_players.py
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update to garminconnect 0.1.13
This will fix body composition sensors being unavailable
* Update requirements_all to garminconnect 0.1.13
* Update requirements_test_all.txt
* Avoid a context switch in the history api
The history api was creating a job to fetch the
states and another job to convert the states to
json. This can be done in a single job which
decreases the overhead of the operation.
* Ensure there is only one sqlalchemy session created per history
query.
Most queries created three sqlalchemy sessions which was
especially slow with sqlite since it opens and closes the
database.
In testing the UI is noticeably faster at generating history
graphs for entites.
* Add additional coverage
* pass hass first to _states_to_json and _get_significant_states
* Avoid a context switch in the history api
The history api was creating a job to fetch the
states and another job to convert the states to
json. This can be done in a single job which
decreases the overhead of the operation.
* Revert to original solution to avoid function redefine each call
* add BleBox lights support
* cherry pick refactoring from #35552
* Inherit from LightEntity instead of Light
Co-authored-by: J. Nick Koston <nick@koston.org>
* import LightEntity instead of Light
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: J. Nick Koston <nick@koston.org>
* PyWeMo version bump to 0.4.43
Changes necessary to safely upgrade to pyWeMo 0.4.43. This includes catching ActionExceptions that may be thrown by pyWeMo when it is unable to interact with a physical device.
* Black formatting fix
* Fix isort issues
* Code review changes
* More code review fixes
* Linting fix
* Undo dict.get change
* Change a couple instances of dict[key] to dict.get
* Add and use ELECTRICAL_CURRENT_AMPERE constant
* Add and use ELECTRICAL_VOLTAGE_AMPERE constant
* Rename ELECTRICAL_VOLTAGE_AMPERE to ELECTRICAL_VOLT_AMPERE
* Fix imports
* Migrate to pyinsteon from insteonplm
* Rename devices entities
* Print ALDB even if not loaded
* Add relay to name map
* Change insteonplm to pyinsteon
* Update requirements_all correctly
* Code review updates
* async_set_speed receive std speed value
* default speed to std medium value
* Call async methods for fan on/off
* Comment await required in loop
* Remove emtpy and add codeowner
* Make services async and remove async_add_job call
* Remove extra logging
* New device as async task and aldb load in loop
* Place lock in context bloxk
* Limiting lock to min
* Remove .env file
* Avoid locking in the logging queue handler
We do not need a lock here as the underlying queue is already
thread safe.
* Add coverage for logging handle
* First cut of Rollease Acmeda Pulse Hub integration.
* Acmeda integration improvements:
- Moved common code into a base entity
- Battery level sensor added
- Localisation now working
* Added requirement for aiopulse now that it has been uploaded to PyPI.
* Exclude acmeda integration from coverage check as it relies on a hub being present.
* Fix Travis CI build issues.
* Remove unused constants.
* Remove unused group logic from cover.py
* Removed commented code from base.py
* Remove sensors (battery entities) on removal of hub.
* Remove unused groups from sensor.py
* Acmeda device and entity update made fully asynchronous using subscriptions to remove need for config polling.
* Updated aiopulse version dependency.
Removed non-functional battery charging indication.
* Rationalised common code to update entities into helpers.py
* Fix linting issue.
* Correct additional CI pylint errors.
* Index config_entries by entry_id.
Move entity loading and unloading to __init__.py
Add entry_id to dispatcher signal
Removed now unused polling code hub
Added config_flow unit tests
* Tweak to integration config_entry title.
* Bumped aiopulse module to 0.3.2.
Reduced verbosity of aiopulse module.
* Changed to using direct write of device state.
Removed old style async_step_init config_flow step.
* Remove superfluous battery_level and device_state_attributes from battery entity.
* Removal of unused strings.
Removal of unused create_config_flow helper.
Removal of stale comment.
* Remove use of shared container to track existing enities.
Moved removal and deregistration of entities to base class through use of dispatch helper.
* Fixed strings.json
* Fix incorrect use of remove instead of pop on dict.
* Add support for tilting covers, bump aiopulse version number.
* Bump aiopulse version to v0.3.4.
Fixed bug in cover supported_features.
* Bumped aiopulse version to 0.4.0
Update acmeda .coveragerc exclusions
* Removed already configured hub check from __init__.py async_setup_entry
Removed passing in hass reference to base entity class
Renamed entity async_reset to async_will_remove_from_hass
Changed device_info and properties
Migrated to CoveEntity from CoverDevice
Added dispatched_connect cleanup on hub removal
Removed unused entries from manifest
Removed override of battery icon
Renamed translations folder
* Reversed unintended change to .coveragerc
* Fixed config flow for multi-hub discovery.
* Acmeda enhancements as requested by MartinHjelmare
* Force import to connect to hub to retrieve id prior to creating entry
* Remove YAML configuration support.
* Tidied up config_flow and tests:
- removed unnecessary steps
- fixed typos
* Removed storage of hub in config_flow.
* add config option to set timeout for wiffi devices
Wiffi devices allow to configure the update period (=
full_loop_minutes). The integration shall respect the configured update
period and therefore need a configuration for the timeout, too.
* Move timeout from config flow to option flow
* add test for option flow
* Add support for "Window covering controller"
Some window cover devices such as Sunricher SR-ZG9080A are identified in deconz as "Window covering controller".
We need to include this device type in const.py to be integrated as type "cover" in home-assistant.
* Added Window covering controller to deconz tests
* Prevent updater from delaying startup
The updater sometimes times out as seen in
#33833 and the linked issues. The issue was
presenting again today as it appears the service
is overloaded again.
* s/hass.loop/asyncio/g
* Add config flow to gogogate2 component.
* Using a more stable gogogate api.
* Getting config flows working better by using different downstream library.
* Fixing options not getting default values.
Adding availability to cover entity.
* Simplifying return types of function.
* Address PR feedback.
* Making user config flow not abort.
* Using DataUpdateCoordinator.
* Addressing PR feedback.
* Using standard method for using hass.data
* Split auth fail test into separate tests.
* Use built in queue log handlers to avoid formatting logs in the event loop
Logging is now formatted and written in another thread to
ensure there is minimal impact on the event loop when
a log message is processed.
This change replaces the existing AsyncHandler log handler
as python 3.7+ now offers an off the shelf solution
* add a simple test
* s/async_migrate_log_handlers_to_queue/async_activate_log_queue_handler/g
* Add device triggers to support setting turn_on event
* Add turn on event
* Add unique_id based on config entry
* Adjust tests for addition of uuid
* Supported features are now always same
* Switch to player_setup fixture that actually start platform
* Update homeassistant/components/arcam_fmj/const.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* openwindow0: this is the part for the HA itself
* Update homeassistant/components/tado/sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/tado/sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* new version after review
Co-authored-by: J. Nick Koston <nick@koston.org>
* Provide yeelight unique_id using ssdp discovery
* Fixes
* Comment fix
* Cleanup initialization logic and add unique id to binary sensor
* Update homeassistant/components/yeelight/__init__.py
Co-authored-by: Teemu R. <tpr@iki.fi>
* Update homeassistant/components/yeelight/__init__.py
Co-authored-by: Teemu R. <tpr@iki.fi>
* Update comment
* Update comment
* Fix wrong model docstring
Co-authored-by: Teemu R. <tpr@iki.fi>
* Fix for creating the device name
Creating the devicename included a typo and was missing the custom (preferred) name set by the OZW Admin tool.
* update comments
* Add config flow to pi-hole
* Add config flow tests
* Change PlatformNotReady to ConfigEntryNotReady
* Improve config flow
* Add @shenxn as codeowner
* Use entity_id as unique id
* Remove .get with [] for required fields
* Remove unique id from config flow
* Replace some strings with references
* Fix api_key string
* Fix service api_key check
* Remove unused DuplicatedNameException
- add expose attribute function and default value
- default climate havc_mode to "heat" if modes are not supported
- support `update_entity` service call
* New forked_daapd component
* Bunch of changes
Add config flow and zeroconf
Add zones on callback when added by server
Add password auth
Add async_play_media for TTS
Add media_image_url
Add support for pipe control/input from librespot-java
Improve update callbacks
* Refactor as per code review suggestions
Move config_flow connection testing to pypi library (v0.1.4)
Remove use of ForkedDaapdData class
Decouple Master and Zone data and functions
Add updater class to manage websocket and entity updates
* More changes as per code review
Avoid direct access to entities in tests
Bump pypi version
Mark entities unavailable when websocket disconnected
Move config tests to test_config_flow
Move full url creation from media_image_url to library
Move updater entity from master to hass.data
Remove default unmute volume option
Remove name from config_flow
Remove storage of entities in hass.data
Use async_write_ha_state
Use signal to trigger update_options
Use unittest.mock instead of asynctest.mock
* Yet more changes as per code review
Add more assertions in tests
Avoid patching asyncio
Make off state require player state stopped
Only send update to existing zones
Split up some tests
Use events instead of async_block_till_done
Use sets instead of lists where applicable
Wait for pause callback before continuing TTS
* Remove unnecessary use of Future()
* Add pipes and playlists as sources
* Add support for multiple servers
Change config options to add max_playlists+remove use_pipe_control
Create Machine ID in test_connection and also get from zeroconf
Modify hass.data storage
Update host for known configurations
Use Machine ID in unique_ids, entity names, config title, signals
* Use entry_id as basis for multiple entries
* Use f-strings and str.format, abort for same host
* Clean up check for same host
* Add integration for wiffi devices
wiffi devices are DIY board manufactured by stall.biz.
Several devices are available, e.g. a weather station (weatherman), an
indoor environmental sensor (wiffi-wz) and some more.
This intgration has been developed using a weatherman device, but should
also work for other devices from stall.biz.
* Fix pylint warning
* Use WIFFI / STALL WIFFI instead of wiffi to be consistent with stall.biz
* Don't update disabled entities.
* fix complains
- move wiffi specific code to pypi
- remove yaml configuration code
* incorporate various suggestions from code review
* fix remaining comments from Martin
* fix comments
* add tests for config flow
* fix comments
* add missing requirements for tests
* fix pylint warnings
* fix comments
* fix comments
remove debug log
rename .translations to translations
* rebase and adapt to latest dev branch
* Update homeassistant/components/wiffi/config_flow.py
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/components/wiffi/config_flow.py
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
* fix missing import
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Use helper functions for exception handling
* Create a separate class to handle communication with the device
* Update manifest
* Use coroutine for service setup
* Fix sensor update
* Update tests
* Fix MP1 switch
* Add device.py to .coveragerc
* Remove unnecessary blocking from test_learn_timeout
* Change access method for entries with default values
* Make the changes suggested by MartinHjelmare
* Remove dot from debug message
* Use underscore for unused variable
* Patch aiohttp client session close
* Add test
* Restore close regardless of auto_cleanup
* Close session instead of detaching and do not restore
* Delint test
* Add frame helper
* Use frame helper
* Test warning log when closing session
* Clean up
* Correct docstring
* Do not change shutdown
* Fix tests
* Ensure homekit_controller recieves zeroconf c# updates
If an integration has a homekit config flow step
homekit controller would not see updates for
devices that were paired with it and would not
rescan for changes.
* Only send updates to homekit controller if the device is paired
This avoids the device showing up a second time.
* remove debug
* fix refactor error
* add binary sensor platform to zwave_mqtt
* add tests for binary_sensor
* fix tests
* device class is required value
* Update homeassistant/components/zwave_mqtt/binary_sensor.py
use colon as separator
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* extend tests
* code optimize
* add test for enabling a legacy binary sensor
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
When the websocket is created `SSLContext.load_default_certs` is called
each time which opens up the system default ssl certs file and reads it in
Normally this goes unnoticed, however since there are frequent connects
and disconnects of the websocket it was noticeable.
* Add validator for battery scan option
Add a validator for the track battery option.
Also add the possibility of configuring the battery scan interval.
* Set config defaults on the validator
Set the defaults on the platform schema, and not in the initialization code.
* Update requirements_all.txt
Updated to vigilancemeteo version 3.0.1
* Update requirements_test_all.txt
Updated to vigilancemeteo version 3.0.1
* Update manifest.json
Update to correct typo error
* rewrite library
* Update strings.json
* fix updated with empty reply
* dont use entity_id
* atag_id
* use super init instead
* original ids to prevent breaking change
* Universal Powerline Bus - Link Event
* Bump lib version.
* Update homeassistant/components/upb/__init__.py
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: J. Nick Koston <nick@koston.org>
* Consolidate value conversion functions
* Update to sensor
* Fix property name
* Revise sensors and state reporting per code standards
* Update uom function and revert to property
Each ServerBrowser currently runs in its own thread which
processes every A or AAAA record update per instance.
As the list of zeroconf names we watch for grows, each additional
ServiceBrowser would process all the A and AAAA updates on the network.
To avoid overwhemling the system we pre-filter here and only process
DNSPointers for the configured record name (type)
* Ensure camera stream can be restarted after failure
* If ffmpeg failed to start, was killed, or the iOS device
closed the stream right away, the stream could never
be started until the HomeKit bridge was restarted.
* watch ffmpeg instead of checking only once
* handle forceful shutdowns gracefully
* Increase coverage
* lutron_caseta: allow for multiple bridges; use config entries
Refactor to use config entries/flows, but only implemented import
(async_setup) flow handler for now.
* lutron_caseta: config_flow.py pylint hint
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
* lutron_caseta: tweaks to __init__.py per PR feedback
* lutron_caseta: add config_flow tests
* lutron_caseta: verify connectivity to bridge
check connectivity before creating config entry; cleanup translation/strings
* lutron_caseta: allow for multiple bridges; use config entries
Refactor to use config entries/flows, but only implemented import
(async_setup) flow handler for now.
* lutron_caseta: config_flow.py pylint hint
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
* lutron_caseta: tweaks to __init__.py per PR feedback
* lutron_caseta: add config_flow tests
* lutron_caseta: verify connectivity to bridge
check connectivity before creating config entry; cleanup translation/strings
* lutron_caseta: add error logging when exception is encountered checking connectivity
* lutron_caseta: tests mock bridge creation, not ha-side connectivity check
* lutron_caseta: catch more specific Error types while checking bridge conn.
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Move opengarage code to separate library
* Move opengarage code to separate library
* Move opengarage code to separate library
* remove unique_id
* style
* Add names for the homematic garage door states
* Use None instead of "unknown"
Co-authored-by: Pascal Vizeli <pascal.vizeli@syshack.ch>
Co-authored-by: Pascal Vizeli <pascal.vizeli@syshack.ch>
* Re-evaluate template on group member state change
* Use named groups for entity extraction regex
This will avoid unnecessary edits of match indices if the regex is
amended in the future
* Improve test coverage
* increase coverage and cleanup BleBox cover
* test entity properites via the `state` property
* properly test entity properities
* properly mock io call
* ISY994 Add support for climate platform
Remove services from Climate (not added yet)
* Incorporate suggestions based on review.
* Collect string literals to Const. Rename device to entity
* Fix merge error
* Simplification of upnp component
* Make update interval configurable
* Description
* Require minimal value of 30
* Black
* Linting
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Use tests.async_mock instead of asynctest
* Remove unnecessary existence check
* Improve songpal service registering
* Add tests
* Seperate device api from entity api
* Improve disconnect log messages
* Improve tests
* Rename SongpalDevice to SongpalEntity
* Improve reconnecting
* Remove logging and sleep patch from tests
* Test unavailable state when disconnected
* Rename SongpalEntity.dev to _dev
* Add quality scale to manifest
* Initial commit for BSBLan Climate component
The most basic climate functions work.
* Delete manifest 2.json
wrongly added to commit
* fix incorrect name
current_hvac_mode
* update coverage to exclude bsblan
* sorted and add configflow
* removed unused code, etc
* fix hvac, preset mix up
now it sets hvac mode to none and preset to eco
* fix naming
* removed commented code and cleaned code that isn't needed
* Add test for the configflow
* Update requirements
fixing some issues in bsblan Lib
* Update coverage file to include configflow bsblan
* Fix hvac preset is not in hvac mode
rewrote how to handle presets.
* Add passkey option
My device had a passkey so I needed to push this functionality to do testing
* Update constants
include passkey and added some more for device indentification
* add passkey for configflow
* Fix use discovery_info instead of user_input
also added passkey
* Fix name
* Fix for discovery_info[CONF_PORT] is None
* Fix get value CONF_PORT
* Fix move translation to new location
* Fix get the right info
* Fix remove zeroconf and fix the code
* Add init for mockConfigEntry
* Fix removed zeroconfig and fix code
* Fix changed ClimateDevice to ClimatEntity
* Fix log error message
* Removed debug code
* Change name of device.
* Remove check
This is done in the configflow
* Remove period from logging message
* Update homeassistant/components/bsblan/strings.json
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add passkey
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add integration for Flick Electric NZ
* Start adding Config Flow and external API
* Second Wave of Config Flow and API implementation
* Fix test (errors is None instead of blank array?)
* Don't update sensor if price is still valid
* Add input validation
* Fix linting for DOMAIN
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
* Remove platform schema (config is by entries only)
* Don't catch AbortFlow exception
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
* Update test
* Re-arrange try-catch in config flow
* Fix linting in sensor.py
* Staticly define list of components
* Fix test exceptions
* Fix _validate_input not being awaited
* Fix tests
* Fix pylint logger
* Rename test and remove print debug
* Add test for duplicate entry
* Don't format string in log function
* Add tests __init__ file
* Remove duplicate result assignment
* Add test for generic exception handling
* Move translations folder
* Simplify testing
* Fix strings/translation
* Move to "flick_electric" as domain
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* ISY994 Add Config and Options Flow
Add tests for config flow
Fix test
Update Tests
* Fix merge errors
* Update homeassistant/components/isy994/strings.json
Co-authored-by: J. Nick Koston <nick@koston.org>
* Apply suggestions from code review
Co-authored-by: J. Nick Koston <nick@koston.org>
* Fix patching in tests to not actually start Home Assistant
Co-authored-by: J. Nick Koston <nick@koston.org>
* Refactor ZHA config flow
Present more descriptive list of radio types when user has to pick one.
* Update docstring.
* Add some common models to EZSP radio.
* Add more model names
More model names, less english since radio types won't be translated.
* Split BinarySensor Entity
* Fix Device Class for Insteon
* ISY994 Improved device sorting (incl Z-Wave Cats) post-PyISYv2
- Z-Wave device classification using new properties.
- ISY Z-Wave Devices can be classified by their Z-Wave categories, since `node_def_id` does not provide useful information for these nodes.
- Better classification of binary_sensors.
- Incorporate better classifications of different types of binary_sensor devices supported by the ISY. These are all field tested/requested based on the HACS-ISY994 version and feedback given through the Community.
- State Unknown updates for binary_sensors.
- Properly fix unknown states on startup for binary_sensors with multiple sub-nodes that don't report the status after an ISY restart until that subnode is activated/triggered the next time. Now instead of adding nodes as unknown status, it adds them in the "assumed safe" state (usually off). This his helpful for things like motion sensor low battery nodes, which may show "unknown" for 12 months before turning "ON" (low batt).
- Fix for heartbeat devices (home-assistant/core#21996)
- Heartbeat devices toggle between both DON and DOF commands, each day when it sends the heartbeat it sends the opposite. Update heartbeat nodes to look for both.
* Additional sorting fixes
* Improve client tracker to be more comprehensible and streamlined
Improve block switches
Improve tests
* Small clean up
* Add descriptions on ssid test
* Improve test
* Make polling default off, only POE clients left to verify
* Minor improvements
* On removal cancel scheduled updates
* POE works without polling now
* Combine else and if to an elif
* Initial version.
* Tests.
* Refactored tests.
* Update requirements_all
* Increase test coverage. Catch exception.
* Update .coveragerc
* Fix lint msg.
* Tweak test (more to force CI build).
* Update based on PR comments.
* Change unique_id to use stable string.
* Add Universal Powerline Bus "link" support.
* Fix missed call.
* Revert botched merge.
* Update homeassistant/components/upb/light.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Three changes.
Update service schema to require one of brightness/brightness_pct.
Fix bug in setting brightness to zero.
Replace async_update_status and replace with async_update.
Co-authored-by: J. Nick Koston <nick@koston.org>
* modbus sensor: string data_type
Adds support for a string data_type. This allows the reading of holding registers that contain ascii string data
* Add modbus sensor string data_type #35269
Fingers crossed that I am putting these file in the correct location this time
* Delete const.py
* Delete sensor.py
* Add files via upload
* modbus sensor - add string support. Upload from local dev environment
* fix executable stauts
* fix flake8 failure
* Remove unnecessary pylint exceptions
* Move up some change to binary_sensors and switch. Fix program d.s.a's.
* ISY994 Basic support for PyISYv2
- Bare minimum changes to be able to support PyISYv2.
- Renaming imports and functions to new names.
- Use necessary constants from module.
- **BREAKING CHANGE** Remove ISY Climate Module support.
- Climate module was retired on 3/30/2020: [UDI Annoucement](https://www.universal-devices.com/byebyeclimatemodule/)
- **BREAKING CHANGE** Device State Attributes use NodeProperty
- Some attributes names and types will have changed as part of the changes to PyISY. If a user relied on a device state attribute for a given entity, they should check that it is still there and formatted the same. In general, *more* state attributes should be getting picked up now that the underlying changes have been made.
- **BREAKING CHANGE** `isy994_control` event changes (using NodeProperty)
- Control events now return an object with additional information. Control events are now parsed to the friendly names and will need to be updated in automations.
Remove cast
* PyISY v2.0.2, add extra UOMs, omit EMPTY_TIME attributes
* Fix typo in function doc string.
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: J. Nick Koston <nick@koston.org>