* Add support for controlling homekit lights and switches
This adds support for controlling lights and switches that expose a HomeKit
control interface, avoiding the requirement to implement protocol-specific
components.
* Comment out the homekit requirement
This needs to build native code, so leave it commented for now
* Review updates
* Make HomeKit auto-discovery optional
Add an "enable" argument to the discovery component and add a list of
optional devices types (currently just HomeKit) to discover
* Further review comments
* Update requirements_all.txt
* Fix houndci complaints
* Further review updates
* Final review fixup
* Lint fixups
* Fix discovery tests
* Further review updates
* Add support for Eufy bulbs and switches
Add support for driving bulbs and switches from the Eufy range.
* Fix hound checks
* Satisfy pylint
* Handle review comments
* Review updates and test fixes
* PyLint is a bit too aggressive
* Added the ability to switch Tahoma Garage door relay.
Those are special switches that can only be pushed.
Their state is always OFF, they react to the turn_on action, perform it, but stay OFF
* fixing indents and so on
* CI fix
* Added switch component to Amcrest IP Camera.
* Fixes to new switch component after review
* Removed redundant branching, as well as requirement declaration.
* Changes to requirements after rerunning generation script
* Minor changes
* Accept and report both xy and RGB color for lights
* Fix demo light supported_features
* Add new XY color util functions
* Always make color changes available as xy and RGB
* Always expose color as RGB and XY
* Consolidate color supported_features
* Test fixes
* Additional test fix
* Use hue/sat as the hass core color interface
* Tests updates
* Assume MQTT RGB devices need full RGB brightness
* Convert new platforms
* More migration
* Use float for HS API
* Fix backwards conversion for KNX lights
* Adjust limitless min saturation for new scale
* Added vesync platform
Support for power toggling, current power, and daily energy kWh
* Adds vesync to requirements file.
* Reorder vesync item in requirements_all.txt from gen_requirements_all
* Removes unnecessary global values that are not used in this component
* Removes try/catch from setup_platform -no throws. Guard check login()
* Remove unnecessary boolean convert
* Fix indentation of log messages
* Get zha switch and binary_sensor state on startup
* Removed unused var
* Make zha switch report status
* Use right method name
* Formatting fix
* Updates to match latest dev
* PR feedback updates
* Use async for cluster commands
* Unavailable state introduced if the device isn't reachable.
* Redundancy removed.
* Pylint fixed.
* Missing space added.
* Pylint fixed.
* Use format instead of concatenation.
* Next generation of Xiaomi Aqara devices added: ctrl_neutral1.aq1, ctrl_neutral2.aq1, ctrl_ln1.aq1, ctrl_ln2.aq1, ctrl_86plug.aq1
* The Aqara wireless button (3rd gen, sensor_switch.aq3) supports a click_type called "shake".
* Warning added to spot new features.
* Merge from current dev
* Update for Sensor approach
* Update reference to state classes
* Reference stateKey correctly
* Reference stateKey
* Change deviceInfo to a dict
* Pass state to properties method
* Add state info to device_state_attributes
* Update entity name to include state name
* Update for on() off() vs light_on/off
* Flag newnames option
* Update configuration schema
* Update configuration schema
* Spell False correctly
* Rename state to statekey
* Rename statekey to stateKey
* Call new device with stateKey and newname
* Simplify use of newnames
* Add workdir to save devices
* Fix newnames config setup
* Propogate OnOffSensor to VariableSensor change
* Upgrade insteonplm version to 0.8.0
* Pass address rather than device object to platform
* Set inteon_plm data variable to PLM
* Consistant use of conn and plm
* Consistant use of conn and plm
* Proper reference to device and address
* Fixed platform setup issues
* Correct issue with missing _supported_features attr
* Properly reference self._state vs self.state
* Bump insteonplm version to 0.8.1
* Remove subplatform and map based on state name
* Correct refrence to State
* Correct reference to device.states
* Bump insteonplm to 0.8.2
* Fix format errors
* Fix format issues
* Fix trailing whitespace
* Correct format issues
* Fix format issues
* Fix format issues
* Fixed format issues
* Fixed format issues
* Move imports inside classes
* Simplify import of modules
* Correct reference to OnOffSwitch_OutletTop and bottom
* Remove unnessary references
* Fix format issues
* Code review adjustments
* Fix format issue
* Use new nameing format for groups that are not group 0x01
* Remove newname feature
* Fix binary_sensor type to default to None
* Fix device_class property to return the sensor type correctly.
* rename _device and _state to avoid conflicts with Entity
* Format long lines
* Pylint clean up
* Insteon_PLM
* lint cleanup
* Check device_override has address
* 3.4 lint clean up
* Changes per code review
* Change discovered from a list of dict to a dict
* Correct common_attributes usage
* Change discovered from a list of dict to a dict
* Add debugging message to confirm platform setup
* Debug messages
* Debug messages
* Debug async_added_to_hass
* Debug async_added_to_hass async_add_job
* Debug async_added_to_hass
* Debug devices not loading in hass
* Debug new entities not being added to hass
* Debug adding devices to hass
* Revert "3.4 lint clean up"
This reverts commit 0d8fb992b1.
* 3.4 lint clean up
* Revert "Debug adding devices to hass"
This reverts commit ec306773d4.
* Revert "Debug new entities not being added to hass"
This reverts commit 55fb724d06.
* Revert "Debug devices not loading in hass"
This reverts commit 07814b4f14.
* Revert "Debug async_added_to_hass"
This reverts commit 4963a255d8.
* Revert "Debug async_added_to_hass async_add_job"
This reverts commit 22cadff91f.
* Revert "Debug async_added_to_hass"
This reverts commit 12c5651fe4.
* Pylint clean up
* pylint cleanup
* Clean up naming
* Enhance config schema. Fix logging issue
* Reapply changes after squash
* added smappee component
* Fixed pylint errors and a few use cases when starting up with invalid credentials
Added coverage omit
* Added support to run only locally
Added a few more sensors
Added more error handling
Better parsing and debug message
* fixed smappee switch after local/remote support was added
* Smappee - update switches for local support (#3)
* Merged with local version
* Updated smappy library with the patched one
Fixed lint, added merge missing param
Fixed missing run for requirements_all.txt
Fixed lint
* Fixed on/off based on library. Reverted change used for testing stacktrace
* Fixed switches to work with both remote and local active
Fixed lint
Fixed switches
Fixed lint
* nothing to update per switch as the states are not saved by smappee system
* added better error handling for communication errors with smappee
* fixed lint errors
* fixed comment
* fixed lint error
* fixed lint error
* update smappee module with reviewer comments
- update smappy module
- cache cloud api requests
- added actuator info
- updated return states
* Upgrade pylint to 1.8.1
* Fix no-else-return
* Fix bad-whitespace
* Fix too-many-nested-blocks
* Fix raising-format-tuple
See https://github.com/PyCQA/pylint/blob/master/doc/whatsnew/1.8.rst
* Fix len-as-condition
* Fix logging-not-lazy
Not sure about that TEMP_CELSIUS though, but internally it's probably just like if you concatenated any other (variable) string
* Fix stop-iteration-return
* Fix useless-super-delegation
* Fix trailing-comma-tuple
Both of these seem to simply be bugs:
* Nest: The value of self._humidity never seems to be used anywhere
* Dovado: The called API method seems to expect a "normal" number
* Fix redefined-argument-from-local
* Fix consider-using-enumerate
* Fix wrong-import-order
* Fix arguments-differ
* Fix missed no-else-return
* Fix no-member and related
* Fix signatures-differ
* Revert "Upgrade pylint to 1.8.1"
This reverts commit af78aa00f125a7d34add97b9d50c14db48412211.
* Fix arguments-differ
* except for device_tracker
* Cleanup
* Fix test using positional argument
* Fix line too long
I forgot to run flake8 - shame on me... 🙃
* Fix bad-option-value for 1.6.5
* Fix arguments-differ for device_tracker
* Upgrade pylint to 1.8.2
* 👕 Fix missed no-member
* Add error handling to TP-LInk LED state set
Handles errors when setting the LED state of TP-Link sockets.
If the socket is unavailable then the raised exception will cause the
compoent to not be added to HA.
* Move LED state setting out of __init__
* Entity#unique_id defaults to None
* Initial commit entity registry
* Clean up unique_id property
* Lint
* Add tests to entity component
* Lint
* Restore some unique ids
* Spelling
* Remove use of IP address for unique ID
* Add tests
* Add tests
* Fix tests
* Add some docs
* Add one more test
* Fix new test…
* added unavailability tracker, updated sensor component
* change hass argument position according to position in binary_sensor
* added hass argument to binary_sensor, updated is_on(), it can be UNAVAILABLE now
* updated switch component to support unavailability feature
* updated light component to support unavailability feature
* updated cover component to support unavailability feature
* set _hass property
* added unavailability tracker, updated sensor component
* change hass argument position according to position in binary_sensor
* added hass argument to binary_sensor, updated is_on(), it can be UNAVAILABLE now
* updated switch component to support unavailability feature
* updated light component to support unavailability feature
* updated cover component to support unavailability feature
* set _hass property
* fixed error with wrong arguments number during callback call
* reset unavailability state on new message received from device
* use locks to fix race condition during managing _state property
* overriden state() method for some components to check for STATE_UNAVAILABLE and return it instead e.g. STATE_OFF
* fixed linter
* removed blank line
* use available() method instead of changing _state
* filter motion sensors 'heartbeat', was removed from PyXiaomiGateway
* remove self._hass, use self.hass set by HA on attach
* self.push_data now running in the event loop, use async_schedule_update_ha_state()
* merge fix
* removed accidentally added home-assistant-polymer
* bump PyXiaomiGateway version to 0.8.0
* bump PyXiaomiGateway to 0.8.0
* updated methods names and annotations
* Added IHC platform
* Updated requirements for IHC platform
* Exclude IHC from test
* Correcting flake8 issues
* Fixing more flake8 issues
* Fixed flake8 issues
* Fixing pylint issues
* Fixed flake8 issues
* Changes from PR review.
* STATE_UNKNOWN changed to None
* Spelling mistake in comment
* Added IHC platform
* Updated requirements for IHC platform
* Exclude IHC from test
* Correcting flake8 issues
* Fixing more flake8 issues
* Fixed flake8 issues
* Fixing pylint issues
* Fixed flake8 issues
* Changes from PR review.
* STATE_UNKNOWN changed to None
* Spelling mistake in comment
* Updated requirements_all.txt with gen_requirements_app.py
* Pylint fix: No space allowed around keyword argument assignment
* PR review changes
* Moved auto setup from platforms to ihc component
* Do no auto setup if there are no IHC products found
* Changes from PR review
* Make the rpi_rf component thread-safe
The previous implementation suffered from race conditions when two rpi_rf switches are triggered at the same time. This implementation uses an RLock to give one thread at a time exclusive access to the rfdevice object.
* cleanup
* fix lint
* Deprecate explicit entity_id in template platforms
* Use config validator for deprecation
* Fix copy/paste typos
* Also print the config value
* Add test for config validator
* Assert the module name that logged the message
* trying to rework device discovery. now the main component will do the getlinked and pass it to the sub-components. no longer any config needed other than what is needed to connect to the hub. device names are no longer stored. core team told us to stop using configurator to ask for names. there should be a way to set names in hass...possibly this https://home-assistant.io/docs/configuration/customizing-devices/
* fix device types
* make device names just be the isnteon device id
* revert some config changes
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* update insteon client
* linting fixes
* Error Clean up
* Update to make requested changes
* more changes
* Finish requested changes to components
* Fixing Rebase Conflicts
* fix device types
* make device names just be the isnteon device id
* revert some config changes
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* Update insteon_local.py
* update insteon client
* linting fixes
* Error Clean up
* Update to make requested changes
* more changes
* Finish requested changes to components
* Update Insteon_Local for performance improvements
* Fix errors from get_linked
* Fix typo
* Requested changes
* Fix spacing
* Clean up
* Requested Changes
* Connection to mochad occasionally stalls on RPi and CM19A. Reconnect one switch send command.
* Formatting and exception hanling fixes
* Moved import inside the method. Logging outside the try-catch.
* Tailing whitespaces.
* MockDependency on pymochad in unit tests to resolve exceptions
* patch pymochad MochadException in unit tests to resolve exceptions
* patch pymochad MochadException in unit tests to resolve exceptions
* cleaned unused import
* lint issue fixed
* pylint issue fixed
* Lazy loading of service descriptions
* Fix tests
* Load YAML in executor
* Return a copy of available services to allow mutations
* Remove lint
* Add zha/services.yaml
* Only cache descriptions for known services
* Remove lint
* Remove description loading during service registration
* Remove description parameter from async_register
* Test async_get_all_descriptions
* Remove lint
* Fix typos from multi-edit
* Remove unused arguments
* Remove unused import os
* Remove unused import os, part 2
* Remove unneeded coroutine decorator
* Only use executor for loading files
* Cleanups suggested in review
* Increase test coverage
* Fix races in existing tests
* Issue #11432: Do not stop initializing KNX when tunelling device cant be reached
* Issue #11432: Mark devices as unavailable if gateway cant be connected
* Correct units used in TP-Link energy monioring
- Energy is measured in kWh for swtches
- Power is reported in mW for bulbs
- Energy is reported in Wh for bulbs
* TP-Ling energy: store units in attribute names
Stores the unit in the attrbute names for TP-Link devices that support
energy monitoring.
* Huge ISY994 platform cleanup, fixes support for 5.0.10 firmware
# * No more globals - store on hass.data
# * Parent ISY994 component handles categorizing nodes in to Hass components, rather than each individual domain filtering all nodes themselves
# * Remove hidden string, replace with ignore string. Hidden should be done via the customize block; ignore fully prevents the node from getting a Hass entity
# * Removed a few unused methods in the ISYDevice class
# * Cleaned up the hostname parsing
# * Removed broken logic in the fan Program component. It was setting properties that have no setters
# * Added the missing SUPPORTED_FEATURES to the fan component to indicate that it can set speed
# * Added better error handling and a log warning when an ISY994 program entity fails to initialize
# * Cleaned up a few instances of unecessarily complicated logic paths, and other cases of unnecessary logic that is already handled by base classes
* Use `super()` instead of explicit base class calls
* Move `hass` argument to first position
* Use str.format instead of string addition
* Move program structure building and validation to component
Removes the need for a bunch of duplicate exception handling in each individual platform
* Fix climate nodes, fix climate names, add config to disable climate
Sensor platform was crashing when the ISY reported climate nodes. Logic has been fixed. Also added a config option to prevent climate sensors from getting imported from the ISY. Also replace the underscore from climate node names with spaces so they default to friendly names.
* Space missing in error message
* Fix string comparison to use `==`
* Explicitly check for attributes rather than catch AttributeError
Also removes two stray debug lines
* Remove null checks on hass.data, as they are always null at this point
* Fire events for ISY994 control events
This allows hass to react directly to Insteon button presses (on switches and remotes), including presses, double-presses, and long holds
* Move change event subscription to after entity is added to hass
The event handler method requires `self.hass` to exist, which doesn't have a value until the async_added_to_hass method is called. Should eliminate a race condition.
* Overhaul binary sensors in ISY994 to be functional "out of the box"
We now smash all of the subnodes from the ISY994 in to one Hass binary_sensor, and automatically support both paradigms of state reporting that Insteon sensors can do. Sometimes a single node's state represents the sensor's state, other times two nodes are used and only "ON" events are sent from each. The logic between the two forunately do not conflict so we can support both without knowing which mode the device is in.
This also allows us to handle the heartbeat functionality that certain sensors have - we simply store the timestamp of the heartbeat as an attribute on the sensor device. It defaults to Unknown on bootup if and only if the device supports heartbeats, due to the presence of subnode 4.
* Parse the binary sensor device class from the ISY's device "type"
Now we automatically know which sensors are moisture, motion, and openings! (We also reverse the moisture sensor state, because Insteon reports ON for dry on the primary node.)
* Code review tweaks
The one material change here is that the event subscribers were moved to the `async_added_to_hass` method, as the handlers depend on things that only exist after the entity has been added.
* Handle cases where a sensor's state is unknown
When the ISY first boots up, if a battery-powered sensor has not reported in yet (due to heartbeat or a change in state), the state is unknown until it does.
* Clean up from code review
Fix coroutine await, remove unnecessary exception check, and return None when state is unknown
* Unknown value from PyISY is now -inf rather than -1
* Move heartbeat handling to a separate sensor
Now all heartbeat-compatible sensors will have a separate `binary_sensor` device that represents the battery state (on = dead)
* Add support for Unknown state, which is being added in next PyISY
PyISY will report unknown states as the number "-inf". This is implemented in the base ISY994 component, but subcomponents that override the `state` method needed some extra logic to handle it as well.
* Change a couple try blocks to explicit None checks
* Bump PyISY to 1.1.0, now that it has been published!
* Remove -inf checking from base component
The implementation of the -inf checking was improved in another branch which has been merged in to this branch already.
* Restrict negative-node and heartbeat support to known compatible types
Not all Insteon sensors use the same subnode IDs for the same things, so we need to use different logic depending on device type. Negative node and heartbeat support is now only used for leak sensors and open/close sensors.
* Use new style string formatting
* Add binary sensor detection for pre-5.x firmware
Meant to do this originally; writing documentation revealed that this requirement was missed!
All mochad devices are sharing a single socket interface. When multiple
threads are issuing requests to the mochad daemon at the same time the
write read cycle might get crossed between the threads. This is normally
not an issue for 1-way X10 devices because as long as the request issued
successfully and data is read over the socket then we know as much as
mochad will tell us (since there is no ACK from the request for most
X10 devices). However, where it does matter is on the device __init__()
because we're relying on the mochad daemon's internal state to take an
educated guess at the device's state to intialize things with. When
there are multiple devices being initialized at the same time the wires
can get crossed between and the wrong device state may be read.
To address this potential issue this commit adds locking using a
semaphore around all pairs of send_cmd() and read_data() (which is what
pymochad.device.Device.get_status() does internally) calls to the mochad
controller to ensure we're only ever dealing with a single request at a
time.
Fixesmtreinish/pymochad#4
* add ads hub, light and switch
* add binary sensor prototype
* switch: use adsvar for connection
* fix some issues with binary sensor
* fix binary sensor
* fix all platforms
* use latest pyads
* fixed error with multiple binary sensors
* add sensor
* add ads sensor
* clean up after shutdown
* ads component with platforms switch, binary_sensor, light, sensor
add locking
poll sensors at startup
update state of ads switch and light
update ads requirements
remove update() from constructors on ads platforms
omit ads coverage
ads catch read error when polling
* add ads service
* add default settings for use_notify and poll_interval
* fix too long line
* Fix style issues
* no pydocstyle errors
* Send and receive native brightness data to ADS device to prevent issues with math.floor reducing brightness -1 at every switch
* Enable non dimmable lights
* remove setting of self._state in switch
* remove polling
* Revert "remove polling"
This reverts commit 7da420f823.
* add service schema, add links to documentation
* fix naming, cleanup
* re-remove polling
* use async_added_to_hass for setup of callbacks
* fix comment.
* add callbacks for changed values
* use async_add_job for creating device notifications
* set should_poll to False for all platforms
* change should_poll to property
* add service description to services.yaml
* add for brigthness not being None
* put ads component in package
* Remove whitespace
* omit ads package
* Refactored to new global json saving and loading
* Fixed emulated_hue tests
* Removed unnecassary error handling
* Added missing newline
* Remove unused imports
* Fixed linting error
* Moved _load_json wrapper out of the config class
* Initial commit of Vultr components
Have a working Vultr hub and binary sensor which pulls down the
following attributes of your VPS:
- Date created
- Subscription id (server id)
- Cost per month (in US$)
- Operating System installed
- IPv4 address
- label (human readable name)
- region
- number of vcpus
- which storage package chosen
- IPV6 address (if applicable)
- RAM amount
Working next on sensor and then testing / coverage.
* Added Vultr sensor for pending charges and current bandwidth. Refactored binary_sensor and hub too
* Corrected is_on bases
* Added basic tests for Vultr binary & platform
* Updated require files
* Changing test fixture to highlight different cases
* Written basic test for sensor.vultr
* Resolved linting errors and broken test
* Increase test coverage and corrected docs
* Resolved hound issues
* Revert back negative binary test
* Another hound resolve
* Refactoring and adding is switch, moving over to vultr branch
* Made Vultr components more resiliant to invalid configs
* Added negetive test for vultr binary sensor
* Added better testing of vultr sensor
* Resolved vultr platform test affecting subsequent vultr tests
* Moving VULTR components to single use design
* Added in sensor name config
* Added missing sensors var
* Resolved init data setting of sensors, added in name conf to switch
* Made the Vultr component more resiliant to startup failure with better alerting
* Various Vultr component changes
- Refactored sensor, binary_sensor, and switch to reference one subscription
- Renamed CURRENT_BANDWIDTH_GB monitored condition to CURRENT_BANDWIDTH_USED
- Improved test coverage
* Resolved local tox linting issue
* Added more testing for Vultr switch
* Improved test coverage for Vultr components
* Made PR comment changes to vultr binary sensor
* Made PR comment changes to Vultr sensor
* resolved PR comments for Vultr Switch
* Resolved vultr sensor name and improved tests
* Improved Vultr switch testing (default name formatting)
* Removed vultr hub failure checking
* Refactor Neato botvac components as a vacuum
A switch is still use to enable/disable the schedule
Signed-off-by: Hugo D. (jabesq) <jabesq@gmail.com>
* CI Hound fixes
* Fix lint errors
Signed-off-by: Hugo D. (jabesq) <jabesq@gmail.com>
* [Neato vacumm] Add sensor attributes to vacuum
Signed-off-by: Hugo D. (jabesq) <jabesq@gmail.com>
* Remove line breaks and fix docstring
* PR fixes