Compare commits

..

205 Commits

Author SHA1 Message Date
Robbie Trencheny 4748e7f7e9 Version bump 2016-09-10 18:23:21 -07:00
Robbie Trencheny e8f8ea080b Remove dev tag 2016-09-10 18:13:27 -07:00
Paulus Schoutsen b8251b084a Fix bloomsky platform discovery (#3303) 2016-09-10 09:12:24 -07:00
Per Sandström 54a17f5d98 modbus write registers service (#3252) 2016-09-10 08:17:28 -07:00
Mal Curtis 8438001942 Fix TP-Link Archer C7 long passwords (#3225)
* Fix tplink C7 long passwords

Fixes an issue where passwords longer than 15 chars could not log in to Archer C7 routers.

* Truncate in correct place

* Add comment about TP-Link C7 pass truncation

* Fix lint error

* Truncate comment at 79 chars not 80
2016-09-10 08:08:51 -07:00
Lewis Juggins de150ecbc9 Hotfix for #3100 (#3302) 2016-09-10 07:36:55 -07:00
Robbie Trencheny d466bae244 Update frontend 2016-09-09 14:23:03 -07:00
Pascal Vizeli e87da765c5 cleanup Homematic code (#3291)
* cleanup old code

* cleanup round 2

* remove unwanted platforms
2016-09-09 19:33:12 +02:00
John Arild Berentsen ba28208106 Added stuff for support range setting (#3189) 2016-09-09 11:06:53 -06:00
Fabian Affolter 545329174d Pi-Hole statistics sensor (#3158)
* Add Pi-Hole sensor

* Update docstrings and remove print()

* Use None for payload
2016-09-09 17:10:46 +02:00
Fabian Affolter 5881f6000e Point to master till archive is back (#3285) 2016-09-09 16:53:18 +02:00
Daniel Høyer Iversen 3411c4c7c3 Merge pull request #3260 from home-assistant/issue_#3250
issue #3250
2016-09-09 09:33:26 +02:00
Fabian Affolter 5bf66cae1f Use voluptuous for Device Sun Light Trigger (#3105)
* Migrate to voluptuous

* Use default
2016-09-09 09:06:24 +02:00
Brian Karani Ndwiga 53c8115f82 Updated braviatv's braviarc version to 0.3.5 (#3271) 2016-09-09 08:38:32 +02:00
Fabian Affolter 911231afc1 Use constants and update ordering (#3266) 2016-09-09 08:37:30 +02:00
Lewis Juggins 44f5a66b66 Add additional template for custom date formats (#3262)
I can live with a few visual line breaks 🐬
2016-09-08 18:49:02 -06:00
Fabian Affolter ee6c83f569 Use constants and update ordering (#3267)
🐬
2016-09-08 18:34:55 -06:00
Fabian Affolter fb0232429e Use constants and update ordering (#3268)
🐬
2016-09-08 18:32:32 -06:00
Nolan Gilley 1cace5782c fastdotcom from pypi (#3269) 2016-09-08 18:26:50 -06:00
Fabian Affolter 02848b3949 Use voluptuous for nx584 alarm (#3231)
* Migrate to voluptuous

* Fix pylint issue
2016-09-08 23:06:57 +02:00
Johann Kellerman e8ad76c816 Improve yaml fault tolerance and handle check_config border cases (#3159) 2016-09-08 22:20:38 +02:00
Pascal Vizeli 267cda447e Add support for complex template structures to data_template (#3255) 2016-09-08 18:19:47 +02:00
Fabian Affolter 94e3986d54 Use constants and update ordering (#3261) 2016-09-08 16:26:54 +02:00
Pascal Vizeli 24aa3b3c97 Add voluptuous to ecobee (#3257) 2016-09-08 16:11:00 +02:00
Daniel b3d2db45de issue #3250 2016-09-08 08:43:05 +02:00
Fabian Affolter 1af5d4c8b8 Minor Ecobee changes (#3131)
* Update configuration check, ordering, and constants

* Make API key optional
2016-09-07 20:21:42 +02:00
Daniel Høyer Iversen 4d41c5cd0f Fix issue #3250 (#3253) 2016-09-07 19:17:16 +02:00
Pascal Vizeli e632a47772 protect service data for changes in calls (#3249)
* protect service data for changes in calls

* change handling

* move MappingProxyType to service call
2016-09-07 08:19:19 -07:00
Fabian Affolter 32c234ffcc Add linux battery sensor (#3238) 2016-09-07 16:32:35 +02:00
Paulus Schoutsen 5995f2438e fix remove listener (#3196) 2016-09-07 06:59:59 -07:00
Paulus Schoutsen 35b388edce Reload groups (#3203)
* Allow reloading groups without restart

* Test to make sure automation listeners are removed.

* Remove unused imports for group tests

* Simplify group config validation

* Add prepare_reload function to entity component

* Migrate group to use entity_component.prepare_reload

* Migrate automation to use entity_component.prepare_reload

* Clean up group.get_entity_ids

* Use cv.boolean for group config validation
2016-09-07 06:59:16 -07:00
Pascal Vizeli 91028cbc13 Change PR to suggestion on gitter (#3243) 2016-09-07 06:57:59 -07:00
Dave Banks 3668afe306 Zwave set temperature fix (#3221)
* If device was off set target temp would not work.

* Changed to use a workaround just for Horstmann HRT4-ZW Zwave Thermostat

* Wrong Horseman id

* style changes
2016-09-07 11:22:51 +02:00
Johann Kellerman 47864fc7d7 Owntracks voluptuous fix (#3191) 2016-09-06 18:35:10 -07:00
John Arild Berentsen e88e6d1030 Zwave climate fix and wink cover. (#3205)
* Fixes setpoint get was done outside loop

* zxt_120

* Wink not migrated to cover

* Clarifying debug

* too long line

* Only add 1 device entity
2016-09-06 18:34:28 -07:00
Pascal Vizeli d7b757fb97 fix bugfix with unique_id (#3217) 2016-09-06 18:31:56 -07:00
Fabian Affolter 6a837f3aad Migrate to voluptuous (#3234) 2016-09-06 18:28:55 -07:00
Pascal Vizeli 165871d48a update ffmpeg version to 0.10 add get image to camera (#3235) 2016-09-06 18:24:11 -07:00
Marcelo Moreira de Mello fb719f530a Upgraded fitbit to version 0.2.3 which fixed oauthlib.oauth2.rfc6749.errors.TokenExpiredError: (token_expired) (#3244) 2016-09-06 18:23:08 -07:00
Per Sandström d53d8f5ea9 thread safe modbus (#3188) 2016-09-06 18:21:38 -07:00
Fabian Affolter 7aafa309c9 Use voluptuous for Verisure (#3169)
* Migrate to voluptuous

* Update type and add missing config variable
2016-09-06 18:18:34 -07:00
Fabian Affolter abff2f2b36 Use voluptuous for PulseAudio Loopback (#3160)
* Migrate to voluptuous

* Fix conf var
2016-09-06 18:16:03 -07:00
Dan Smith f55095df83 Fix mFi sensors in uninitialized state (#3246)
If mFi sensors are identified but not fully assigned they can
have no tag value, and mficlient throws a ValueError to signal this.
This patch handles that case by considering such devices to always
be STATE_OFF.
2016-09-06 18:04:20 -07:00
Fabian Affolter 9d4ccb1f49 Migrate to voluptuous (#3230)
🐬
2016-09-06 18:03:43 -06:00
Pascal Vizeli 9eacde0005 Use voluptuous for pushbullet, pushetta and pushover (#3240) 2016-09-06 18:00:33 -06:00
Pascal Vizeli 22870d424a Use voluptuous for gntp (#3237) 2016-09-06 16:16:21 -06:00
Fabian Affolter e00f9339d1 Use voluptuous for Alarm.com (#3229) 2016-09-06 23:48:32 +02:00
Fabian Affolter d8db881e9a Replace rollershutter and garage door with cover, add fan (#3242) 2016-09-06 23:41:26 +02:00
Ardetus fa8ed4de41 Improve 1-Wire device family detection and error checking. Use volupt… (#3233)
* Improve 1-Wire device family detection and error checking. Use voluptuous

* Fix detection of gpio connected devices
2016-09-06 14:50:02 -06:00
Pascal Vizeli 79fa9963da Use voluptuous for nma (#3241) 2016-09-06 22:24:04 +02:00
Pascal Vizeli d06a3c9145 Use voluptuous for free mobile (#3236) 2016-09-06 21:33:11 +02:00
Christian Brædstrup c1139a9fda dlink switch added device state attributes and support for legacy firmware (#3211) 2016-09-06 11:52:22 -06:00
Bart274 9ade87013e Bluetooth: keep looking for new devices (#3201)
* keep looking for new devices

* Update bluetooth_tracker.py

* change default value for tracking new devices

* remove commented code
2016-09-06 11:51:36 -06:00
Fabian Affolter 478c82c34c Upgrade sendgrid to 3.4.0 (#3226) 2016-09-06 18:12:24 +02:00
Fabian Affolter 85baebb23b Upgrade Werkzeug to 0.11.11 (#3220) 2016-09-06 08:55:23 -06:00
Fabian Affolter 88d62bd935 Upgrade gps3 to 0.33.3 (#3222) 2016-09-06 08:53:21 -06:00
Fabian Affolter 9530c7366b Upgrade psutil to 4.3.1 (#3223) 2016-09-06 08:51:51 -06:00
Fabian Affolter 26eba4cb1a Upgrade slacker to 0.9.25 (#3224) 2016-09-06 08:51:23 -06:00
Fabian Affolter c06fe51122 Fix email validation (fixes #3138) (#3227) 2016-09-06 08:48:24 -06:00
Fabian Affolter f595c8715c Update email validation (#3228)
🐬
2016-09-06 08:45:33 -06:00
Robbie Trencheny 6e6b2ae3f4 Add new docs requirements 2016-09-05 18:12:44 -07:00
Robbie Trencheny d903661577 Flake8/pylint 2016-09-05 18:10:04 -07:00
Robbie Trencheny a5faa851e8 Docs update 2016-09-05 18:06:19 -07:00
Fabian Affolter 5ec6eaf7d0 Update ordering (#3216) 2016-09-05 22:53:23 +02:00
Pascal Vizeli 73036f4725 change update handling with variable for breack CCU2 (#3215) 2016-09-05 22:39:29 +02:00
Johann Kellerman 17a2cac7e1 Use Voluptuous for Luci and Netgear device trackers (#3123)
* Use Voluptuous for Luci and NEtgear device trackers

* str_schema shortcut

* Undo str_schema
2016-09-05 11:37:36 -06:00
Fabian Affolter e0a6d7941c Migrate to voluptuous (#3200)
🐬
2016-09-05 11:34:35 -06:00
Fabian Affolter 4638696f8c Migrate to voluptuous and upgrade uber_rides to 0.2.5 (#3181) 2016-09-05 11:33:35 -06:00
Fabian Affolter 428db4a644 Use voluptuous for SqueezeBox (#3212)
* Migrate to voluptuous

* Remove name
2016-09-05 19:27:06 +02:00
Fabian Affolter ea1e4ea215 Migrate to voluptuous (#3214) 2016-09-05 19:22:26 +02:00
Fabian Affolter 6b787ee01e Migrate to voluptuous (#3209)
🐬
2016-09-05 10:05:27 -06:00
Fabian Affolter 6be20883f0 Migrate to voluptuous (#3208)
🐬
2016-09-05 10:04:46 -06:00
Fabian Affolter 95ea0c02b9 Migrate to voluptuous (#3207) 2016-09-05 10:03:25 -06:00
Fabian Affolter 5059d8dde9 Migrate to voluptuous (#3206) 2016-09-05 10:01:50 -06:00
arsaboo 3bbd909b20 Updated to use the occupancy sensor_class (#3204)
🐬
2016-09-05 09:55:29 -06:00
Fabian Affolter 909b5ffa5b Migrate to voluptuous (#3202)
🐬
2016-09-05 09:51:18 -06:00
Fabian Affolter e324885ff6 Use extend of PLATFORM_SCHEMA (#3199) 2016-09-05 09:47:53 -06:00
Fabian Affolter 8afed2cafa Migrate to voluptuous (#3198)
🐬
2016-09-05 09:46:57 -06:00
Fabian Affolter 6bbe3483d9 Migrate to voluptuous (#3197) 2016-09-05 09:45:06 -06:00
Fabian Affolter 9c600012a1 Migrate to voluptuous (#3194)
🐬
2016-09-05 09:40:57 -06:00
Fabian Affolter aed59aea7d Migrate to voluptuous (#3193) 2016-09-05 09:39:21 -06:00
Greg Dowling 09d52820dd Simple trend sensor. (#3073)
* First cut of trend sensor.

* Tidy.
2016-09-05 16:32:14 +02:00
Pascal Vizeli 48c1631178 Update voluptuous for existing notify platforms (#3133)
* Update voluptuous for exists notify platforms

* fix constants
2016-09-05 13:27:10 +02:00
Robbie Trencheny 1170b2897a Doc updates 2016-09-05 03:31:48 -07:00
Robbie Trencheny 5144547b70 Try out the RTD theme 2016-09-05 02:25:03 -07:00
Pascal Vizeli e460d8f637 Use voluptuous for message_bird, sendgrid (#3136) 2016-09-05 07:07:31 +02:00
Marcelo Moreira de Mello 7bab4055a5 Added support to 'effect: random' to Osram Lightify lights (#3192)
* Added support to 'effect: random' to Osram Lightify lights

* removed extra line not required
2016-09-04 21:15:44 -07:00
Fabian Affolter 892f6a706a Use voluptuous for Bravia TV (#3165)
🐬
2016-09-04 19:22:01 -06:00
Fabian Affolter 59cd92cb4d Use voluptuous for Edimax (#3178)
🐬
2016-09-04 19:17:40 -06:00
Fabian Affolter 98bdcd3405 Use voluptuous for Hikvisioncam switch (#3184)
* Migrate to voluptuous

* Use vol.Optional
2016-09-04 19:16:16 -06:00
Robbie Trencheny a569ee787d Correct binary_sensor.ecobee docs URL 2016-09-04 14:37:10 -07:00
Johann Kellerman ad52816595 Use voluptuous for BT and Owntracks device trackers (#3187)
🐬
2016-09-04 11:10:20 -06:00
Heiko Rothe 29870b301e Added scale and offset to the Temper component (#2853)
🐬
2016-09-04 10:37:10 -06:00
Fabian Affolter b4c8d10dbc Migrate to voluptuous (#3179)
🐬
2016-09-04 10:32:12 -06:00
Fabian Affolter cd67368bb7 Migrate to voluptuous (#3182)
🐬
2016-09-04 10:27:19 -06:00
Paulus Schoutsen e9813b219e Allow reloading automation without restarting HA (#3002) 2016-09-04 17:15:52 +02:00
Ben Bangert 641d531be3 Add Sphinx API doc generation (#3029)
* add's sphinx project to docs/ dir
* include core/helpers autodocs for API reference
2016-09-04 14:36:44 +02:00
Robbie Trencheny 74980d9563 MQTT fan platform (#3095)
* Add fan.mqtt, allow brightness to be passed and mapped to a fan speed for compatibility with emulated_hue

* Pylint/Flake8 fixes

* Remove brightness

* Add more features, like custom oscillation/speed payloads and setting the speed list

* Flake8 fixes

* flake8/pylint fixes

* Use constants

* block fan.mqtt from coverage

* Fix oscillating comment
2016-09-04 03:15:55 -07:00
Robbie Trencheny 0f37d8d8eb Using alert with Hue maintains prior state (#3147)
* When using flash with hue, dont change the on/off state of the light so that it will naturally return to its previous state once flash is complete

* ATTR_FLASH not ATTR_EFFECT
2016-09-04 03:04:12 -07:00
Johann Kellerman 22362727e4 Use voluptuous for Unifi, Ubus (#3125) 2016-09-04 10:06:16 +02:00
Robbie Trencheny 48e6befc13 Update frontend 2016-09-03 22:04:23 -07:00
Robbie Trencheny 4de9717256 Add the occupancy sensor_class (#3176)
Such a complicated PR
2016-09-03 22:52:31 -06:00
Fabian Affolter b02b008fe5 Migrate to voluptuous (#3144)
🐬
2016-09-03 20:36:21 -06:00
Fabian Affolter 3c615e2319 Use voluptuous for mFi switch (#3168)
* Migrate to voluptuous

* Take change configuration into account
2016-09-03 20:32:35 -06:00
Fabian Affolter 8467d07a3d Migrate to voluptuous (#3171) 2016-09-03 20:24:29 -06:00
Fabian Affolter 6f45906eda Migrate to voluptuous (#3174) 2016-09-03 20:21:59 -06:00
Martin Hjelmare 34ba4d3e09 Exclude www_static from pydocstyle linting (#3175)
🐬
2016-09-03 20:21:19 -06:00
Fabian Affolter 3b1c0a7502 Migrate to voluptuous (#3162)
🐬 and 🍪 for fixing quotes!
2016-09-03 20:20:45 -06:00
Fabian Affolter 6a2f0fc456 Migrate to voluptuous (#3163)
🐬
2016-09-03 20:18:11 -06:00
Fabian Affolter 2aab77a486 Migrate to voluptuous (#3164)
🐬
2016-09-03 20:14:28 -06:00
Fabian Affolter 02960ec482 Migrate to voluptuous (#3166)
🐬
2016-09-03 20:09:02 -06:00
Open Home Automation db7f6a328f Bugfix: ctach Runtime errors (#3153)
"RuntimeError: Disable scan failed" has been seen in a live installation
2016-09-03 16:47:11 -07:00
Fabian Affolter 290ec9b4ac Use constants (#3156) 2016-09-03 16:45:49 -07:00
Fabian Affolter 0198ba4eac Allow https (fixes #3150) (#3155) 2016-09-03 16:45:31 -07:00
Steven Barnes 09b53a0d55 Adding link_names to post.message call (#3167)
If you do not turn link_names on, Slack will not highlight @channel and @username messages.
2016-09-03 16:44:30 -07:00
Heiko Rothe 269e97c6de Added Xbox Live component (#3013)
* Added Xbox Live component

* Added Xbox Live sensor to coveralls

* Added init success checks

* Added entity id
2016-09-03 16:43:33 -07:00
Dan 68ef55a982 Add exclude option to nmap device tracker (#2983)
* Add exclude option to nmap device tracker

Adds an optional exclude paramater to nmap device tracker.
Devices specified in the exclude list will never be scanned
by nmap. This can help to reduce log spam.

ex:
```
device_tracker:
  - platform: nmap_tracker
    hosts: 10.0.0.1/24
    home_interval: 1
    interval_seconds: 12
    consider_home: 120
    track_new_devices: yes
    exclude:
      - 10.0.0.2
      - 10.0.0.1
```

* Handle optional exclude

* Style fixed
2016-09-03 16:41:38 -07:00
Johann Kellerman 91a3522100 Improve voluptuous and login errors for Asus device tracker (#3170) 2016-09-03 17:32:43 -06:00
Johann Kellerman fe7f797ad9 Add voluptuous for tomato and SNMP (#3172) 2016-09-03 17:30:48 -06:00
Fabian Affolter 70888532f8 Migrate to voluptuous (#3173) 2016-09-03 17:30:21 -06:00
Robbie Trencheny 32e1e046ae Merge branch 'master' into dev 2016-09-03 16:25:59 -07:00
Teagan Glenn 601395bc12 Automatic ODB device tracker & device tracker attributes (#3035) 2016-09-03 18:38:17 +02:00
Fabian Affolter a08ac85971 Display the error instead of the traceback (notify.slack) (#3079)
* Display the error instead of the traceback

* Remove name for check
2016-09-03 17:01:05 +02:00
Fabian Affolter 5dc63c17c8 Migrate to voluptuous (#3092) 2016-09-03 10:56:41 +02:00
Fabian Affolter 795121d5a8 Update ordering (#3149) 2016-09-03 09:35:33 +02:00
Fabian Affolter 6ae4e5cb6c Use constants (#3148) 2016-09-03 00:09:14 +02:00
Robbie Trencheny b5ae005acc Update frontend 2016-09-02 14:50:10 -07:00
Fabian Affolter fb9627deda Move details to docs (#3146) 2016-09-02 23:25:35 +02:00
Teagan Glenn 6fdd7f5350 Back out insteon hub and fan changes (#3062) 2016-09-02 12:18:32 -07:00
Robbie Trencheny a7a662d224 Merge pull request #3130 from turbokongen/zwave_fixes
Bugfix. climate and covermqt
2016-09-02 12:15:27 -07:00
Fabian Affolter 3bbcf4d8b1 Migrate to voluptuous (#3142)
🐬
2016-09-02 11:16:42 -06:00
Fabian Affolter a0a509ceea Add coinmarketcap sensor (#3064) 2016-09-02 16:59:05 +02:00
Fabian Affolter 40c71b5d96 Use voluptuous for Command line platforms (#2968)
* Migrate to voluptuous

* Fix pylint issues

* Remove FIXME

* Split setup test

* Test with bootstrap

* Remove lon and lat

* Fix pylint issues
2016-09-02 08:09:09 -06:00
Pascal Vizeli 81628b01c2 Use voluptuous for webostv (#3135) 2016-09-02 07:59:38 -06:00
Pascal Vizeli 28e939afcf Use voluptuous for twilio (#3134) 2016-09-02 07:59:08 -06:00
Fabian Affolter e5ef548f10 Use voluptuous for Acer projector switch (#3077)
🐬
2016-09-02 07:42:38 -06:00
Tomi Tuhkanen dedc4a129c Updated braviatv's braviarc version to 0.3.4 (#2997)
* Updated braviarc version to 0.3.4

* Updated braviarc version to requirements_all.txt
2016-09-02 15:07:40 +02:00
Fabian Affolter 95cc672161 Add missing docstrings (fix PEP257 issues) (#3098)
* Add missing docstrings (fix PEP257 issues)

* Finish sentence
2016-09-02 14:25:13 +02:00
Fabian Affolter 6a84b82663 Use voluptuous for Octoprint (#3111)
* Migrate to voluptuous

* Fix pylint issues
2016-09-02 12:26:23 +02:00
Pascal Vizeli 000832a82c Use voluptuous for instapush (#3132) 2016-09-02 11:14:18 +02:00
turbokongen 0907eea442 move units to temperature for climate zwave. wrong state was sent to mqtt cove 2016-09-02 10:49:53 +02:00
Robbie Trencheny b8b1fadc6d Update frontend 2016-09-01 21:59:32 -07:00
happyleavesaoc 24d3cbdfe9 orvibo updates (#3006)
🐬
2016-09-01 22:37:09 -06:00
happyleavesaoc 451f0cb3f1 snapcast update (#3012)
* snapcast update

* snapcast update

* validate config

* use conf constants
2016-09-01 22:36:14 -06:00
Fabian Affolter b4df9b30d8 Migrate to voluptuous (#3066)
🐬
2016-09-01 22:34:42 -06:00
Fabian Affolter 27ee4c555a Migrate to voluptuous (#3069)
🐬
2016-09-01 22:34:07 -06:00
Daniel Perna 0c310c166a Fixed Homematic cover (#3116) 2016-09-01 22:32:12 -06:00
Fabian Affolter 06df31bb5b Migrate to voluptuous (#3084) 2016-09-01 22:31:49 -06:00
Fabian Affolter 177d8ef4ef Migrate to voluptuous (#3096) 2016-09-01 22:31:32 -06:00
John Arild Berentsen a50205aedb Climate and cover bugfix (#3097)
* Avoid None comparison for zwave cover.

* Just rely on unit from config for unit_of_measurement

* Explicit return None

* Mqtt (#11)

* Explicit return None

* Missing service and wrong service name defined

* Mqtt state was inverted, and never triggering
2016-09-01 22:31:25 -06:00
Fabian Affolter 9226cef61e Update voluptuous (#3104) 2016-09-01 22:30:49 -06:00
Fabian Affolter 29f2dd2ce9 Migrate to voluptuous (#3106) 2016-09-01 22:30:25 -06:00
Fabian Affolter ed7a227035 Fix typo (#3108) 2016-09-01 22:30:20 -06:00
Fabian Affolter d8ad4e1584 Migrate to voluptuous (#3113) 2016-09-01 22:29:35 -06:00
Fabian Affolter db7abc1cfe Use constants, update configuration check, and ordering (Pilight) (#3118)
* Use contants, update configuration check, and ordering

* Fix pylint issue
2016-09-01 22:28:52 -06:00
Johann Kellerman a571271c39 Use voluptuous for Aruba (#3119) 2016-09-01 22:28:46 -06:00
Pascal Vizeli 9e38255c26 Use voluptuous for syslog (#3120) 2016-09-01 22:28:33 -06:00
Johann Kellerman 586e47d08d Use Voluptuous for BT Home Hub (#3121) 2016-09-01 22:28:28 -06:00
Johann Kellerman 78f0e681ed Use voluptuous for Fritzbox and DDWRT (#3122) 2016-09-01 22:28:03 -06:00
Pascal Vizeli afdd734b44 Use voluptuous for twitter (#3126) 2016-09-01 22:27:38 -06:00
Pascal Vizeli 6b6d34ba51 Use voluptuous for xmpp (#3127) 2016-09-01 22:27:28 -06:00
Johann Kellerman dadcf92290 Allow 'None' MAC to be loaded from known_devices (#3102) 2016-09-02 00:02:35 +02:00
Pascal Vizeli dcfc1ef361 fix homematic climate implementation (#3114) 2016-09-01 22:20:55 +02:00
Open Home Automation 83f1272662 Fix for BLE device tracker (#3019)
* Bug fix tracked devices
* Added scan_duration configuration parameter
2016-09-01 22:18:58 +02:00
Fabian Affolter d2dfe04ec9 Update voluptuous for nest (#3109)
* Update configuration check
* Extend platform
2016-09-01 22:08:03 +02:00
Fabian Affolter 24d412938e Use voluptuous for HDMI CEC & CONF_DEVICES constants (#3107) 2016-09-01 22:04:00 +02:00
Fabian Affolter 748d7f4ecb Bitcoin sensor use warning instead of error (#3103) 2016-09-01 21:57:47 +02:00
Daniel Høyer Iversen 1094de7ad9 Merge pull request #3110 from home-assistant/rfxtrx_sensor_cleanup
rfxtrx sensor clean up
2016-09-01 19:42:40 +02:00
Daniel 831d96995d rfxtrx sensor clean up 2016-09-01 19:23:26 +02:00
Paulus Schoutsen 60f540315a Fix broken test 2016-09-01 14:40:13 +01:00
Lewis Juggins 0bcfb65a30 Refactor notification titles to allow for them to be None, this also includes a change in Telegram to only include the title if it's present, and to use a Markdown parse mode for messages (#3100) 2016-09-01 14:35:46 +01:00
Pascal Vizeli 5036bb0bc6 improve isfile validation check (#3101) 2016-09-01 14:35:00 +01:00
Paulus Schoutsen 87e332c777 Merge pull request #2980 from home-assistant/automation-entities
Create entities for automation
2016-09-01 09:50:39 +01:00
Fabian Affolter 88e600827e Upgrade pyowm to 2.4.0 (#3067) 2016-09-01 09:38:50 +01:00
Fabian Affolter e045a6f0c3 Upgrade pyuserinput to 0.1.11 (#3068) 2016-09-01 09:37:58 +01:00
Paulus Schoutsen c792dd4126 Fix linting 2016-09-01 09:12:42 +01:00
John Arild Berentsen 571cbdf40c If device was off target temp was null. Default to Heating setpoint (#3091) 2016-09-01 09:31:52 +02:00
John Arild Berentsen 4b12ea04d6 humidity slider (#3088) 2016-09-01 07:13:33 +02:00
John Arild Berentsen 5f664acb4f unit fix (#3083) 2016-08-31 22:30:44 +02:00
John Arild Berentsen e5b6592870 Zwave climate Bugfix: if some setpoints have different units, we should fetch the o… (#3078)
* Bugfix: if some setpoints have different units, we should fetch the one that are active.

* Move order of population for first time detection

* Default to config if None unit_of_measurement
2016-08-31 21:50:03 +02:00
Pascal Vizeli 705b3571f4 Use voluptuous for file (#3049) 2016-08-31 18:12:34 +02:00
Daniel Høyer Iversen dfee443312 Host should be optional for apcupsd component (#3072) 2016-08-31 18:09:22 +02:00
Greg Dowling 0943cc78cd Merge pull request #2973 from nma83/owntracks-waypoint-import
Owntracks waypoint import
2016-08-31 15:25:49 +01:00
Daniel Høyer Iversen 8816b62d9c Merge pull request #3063 from tchellomello/flux_led_supportability
Added bitfield of features for flux_led since we are supporting effects
2016-08-31 10:25:29 +02:00
Marcelo Moreira de Mello eadd07dc7d Added bitfield of features for flux_led since we are supporting effects 2016-08-31 03:52:19 -04:00
NMA 12e2c38436 Code review feedback from @pavoni 2016-08-31 08:16:01 +05:30
Robbie Trencheny 4864a67dcd Back to 0.28.0.dev0 2016-08-30 14:23:00 -07:00
NMA 70fe7f747a * Improved zone naming in waypoint import
* Added more test coverage for owntracks and zone
2016-08-28 13:18:30 +05:30
Paulus Schoutsen 7f27cc5468 Fix tests docstring 2016-08-27 07:45:46 +01:00
Paulus Schoutsen 586208b3ed Fix JSON encoder issue in recorder 2016-08-27 07:43:42 +01:00
NMA 2430acf3ad Added unit test to enhance waypoint_whitelist coverage 2016-08-26 22:00:48 +05:30
NMA 5a25c74276 Refactored zone creation based on code review feedback, enhanced configuration 2016-08-26 19:52:08 +05:30
Paulus Schoutsen 3fa1963345 Convert automation to entities with services 2016-08-25 23:36:48 -07:00
Paulus Schoutsen d9ecc4af64 EventBus: return function to unlisten 2016-08-25 23:25:35 -07:00
Paulus Schoutsen 62ba0fa7a2 Do not install pip packages in tests 2016-08-25 23:23:14 -07:00
NMA ed872f6054 Fixed E302 2016-08-25 22:29:16 +05:30
NMA 47a9313fdb Fixed variable scope issues for entities 2016-08-25 22:15:31 +05:30
NMA ca73295dd1 Fixed style issues 2016-08-25 21:35:04 +05:30
NMA 2ca3541eac Fixed zone test break and code style issues 2016-08-25 21:33:07 +05:30
NMA 95b7a8c4b9 Removed redundant assignment to CONF_WAYPOINT_IMPORT_USER 2016-08-25 17:07:53 +05:30
NMA 185ae50e24 Rebased to upstream 2016-08-25 17:02:45 +05:30
NMA e6b7511e7d Added test for Owntracks waypoints import 2016-08-25 16:52:22 +05:30
NMA 1ada7d6211 Backend support for importing waypoints from owntracks as HA zones 2016-08-25 16:52:22 +05:30
NMA 2bea5a484f Added test for Owntracks waypoints import 2016-08-25 16:47:34 +05:30
NMA 75e6ed87d6 Backend support for importing waypoints from owntracks as HA zones 2016-08-12 14:48:28 +05:30
15 changed files with 79 additions and 139 deletions
@@ -26,7 +26,7 @@ DEFAULT_NAME = 'SimpliSafe'
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_PASSWORD): cv.string,
vol.Required(CONF_USERNAME): cv.string,
vol.Optional(CONF_CODE): cv.string,
vol.Optional(CONF_CODE): cv.positive_int,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
})
+7 -12
View File
@@ -116,6 +116,9 @@ class Thermostat(ClimateDevice):
return self.target_temperature_low
elif self.operation_mode == 'cool':
return self.target_temperature_high
else:
return (self.target_temperature_low +
self.target_temperature_high) / 2
@property
def target_temperature_low(self):
@@ -220,27 +223,19 @@ class Thermostat(ClimateDevice):
"""Set new target temperature."""
if kwargs.get(ATTR_TEMPERATURE) is not None:
temperature = kwargs.get(ATTR_TEMPERATURE)
low_temp = int(temperature)
high_temp = int(temperature)
low_temp = temperature - 1
high_temp = temperature + 1
if kwargs.get(ATTR_TARGET_TEMP_LOW) is not None and \
kwargs.get(ATTR_TARGET_TEMP_HIGH) is not None:
high_temp = int(kwargs.get(ATTR_TARGET_TEMP_LOW))
low_temp = int(kwargs.get(ATTR_TARGET_TEMP_HIGH))
low_temp = kwargs.get(ATTR_TARGET_TEMP_LOW)
high_temp = kwargs.get(ATTR_TARGET_TEMP_HIGH)
if self.hold_temp:
self.data.ecobee.set_hold_temp(self.thermostat_index, low_temp,
high_temp, "indefinite")
_LOGGER.debug("Setting ecobee hold_temp to: low=%s, is=%s, "
"high=%s, is=%s", low_temp, isinstance(
low_temp, (int, float)), high_temp,
isinstance(high_temp, (int, float)))
else:
self.data.ecobee.set_hold_temp(self.thermostat_index, low_temp,
high_temp)
_LOGGER.debug("Setting ecobee temp to: low=%s, is=%s, "
"high=%s, is=%s", low_temp, isinstance(
low_temp, (int, float)), high_temp,
isinstance(high_temp, (int, float)))
def set_operation_mode(self, operation_mode):
"""Set HVAC mode (auto, auxHeatOnly, cool, heat, off)."""
@@ -70,6 +70,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
node = zwave.NETWORK.nodes[discovery_info[ATTR_NODE_ID]]
value = node.values[discovery_info[ATTR_VALUE_ID]]
value.set_change_verified(False)
if value.index != 1: # Only add 1 device
return
add_devices([ZWaveClimate(value, temp_unit)])
_LOGGER.debug("discovery_info=%s and zwave.NETWORK=%s",
discovery_info, zwave.NETWORK)
+1 -3
View File
@@ -28,10 +28,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
pywink.set_bearer_token(token)
add_devices(WinkCoverDevice(shade) for shade in
add_devices(WinkCoverDevice(shade) for shade, door in
pywink.get_shades())
add_devices(WinkCoverDevice(door) for door in
pywink.get_garage_doors())
class WinkCoverDevice(WinkDevice, CoverDevice):
@@ -338,7 +338,7 @@ class Device(Entity):
attr[ATTR_BATTERY] = self.battery
if self.attributes:
for key, value in self.attributes.items():
for key, value in self.attributes:
attr[key] = value
return attr
@@ -15,11 +15,12 @@ from homeassistant.components.device_tracker import (PLATFORM_SCHEMA,
ATTR_ATTRIBUTES)
from homeassistant.const import CONF_USERNAME, CONF_PASSWORD
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import track_utc_time_change
from homeassistant.util import datetime as dt_util
from homeassistant.util import Throttle, datetime as dt_util
_LOGGER = logging.getLogger(__name__)
MIN_TIME_BETWEEN_SCANS = timedelta(seconds=30)
CONF_CLIENT_ID = 'client_id'
CONF_SECRET = 'secret'
CONF_DEVICES = 'devices'
@@ -52,7 +53,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
def setup_scanner(hass, config: dict, see):
"""Validate the configuration and return an Automatic scanner."""
try:
AutomaticDeviceScanner(hass, config, see)
AutomaticDeviceScanner(config, see)
except requests.HTTPError as err:
_LOGGER.error(str(err))
return False
@@ -60,14 +61,11 @@ def setup_scanner(hass, config: dict, see):
return True
# pylint: disable=too-many-instance-attributes
# pylint: disable=too-few-public-methods
class AutomaticDeviceScanner(object):
"""A class representing an Automatic device."""
def __init__(self, hass, config: dict, see) -> None:
def __init__(self, config: dict, see) -> None:
"""Initialize the automatic device scanner."""
self.hass = hass
self._devices = config.get(CONF_DEVICES, None)
self._access_token_payload = {
'username': config.get(CONF_USERNAME),
@@ -83,10 +81,20 @@ class AutomaticDeviceScanner(object):
self.last_trips = {}
self.see = see
self.scan_devices()
def scan_devices(self):
"""Scan for new devices and return a list with found device IDs."""
self._update_info()
track_utc_time_change(self.hass, self._update_info,
second=range(0, 60, 30))
return [item['id'] for item in self.last_results]
def get_device_name(self, device):
"""Get the device name from id."""
vehicle = [item['display_name'] for item in self.last_results
if item['id'] == device]
return vehicle[0]
def _update_headers(self):
"""Get the access token from automatic."""
@@ -106,9 +114,10 @@ class AutomaticDeviceScanner(object):
'Authorization': 'Bearer {}'.format(access_token)
}
def _update_info(self, now=None) -> None:
@Throttle(MIN_TIME_BETWEEN_SCANS)
def _update_info(self) -> None:
"""Update the device info."""
_LOGGER.debug('Updating devices %s', now)
_LOGGER.info('Updating devices')
self._update_headers()
response = requests.get(URL_VEHICLES, headers=self._headers)
@@ -133,7 +142,6 @@ class AutomaticDeviceScanner(object):
for vehicle in self.last_results:
dev_id = vehicle.get('id')
host_name = vehicle.get('display_name')
attrs = {
'fuel_level': vehicle.get('fuel_level_percent')
@@ -141,7 +149,6 @@ class AutomaticDeviceScanner(object):
kwargs = {
'dev_id': dev_id,
'host_name': host_name,
'mac': dev_id,
ATTR_ATTRIBUTES: attrs
}
+2 -2
View File
@@ -46,12 +46,12 @@ def _conf_preprocess(value):
CONFIG_SCHEMA = vol.Schema({
DOMAIN: cv.ordered_dict(vol.All(_conf_preprocess, {
DOMAIN: {cv.match_all: vol.Schema(vol.All(_conf_preprocess, {
vol.Optional(CONF_ENTITIES): vol.Any(cv.entity_ids, None),
CONF_VIEW: cv.boolean,
CONF_NAME: cv.string,
CONF_ICON: cv.icon,
}, cv.match_all))
}))}
}, extra=vol.ALLOW_EXTRA)
# List of ON/OFF state tuples for groupable states
+8 -7
View File
@@ -10,6 +10,7 @@ import socket
import voluptuous as vol
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.config_validation import ensure_list
from homeassistant.const import (
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, CONF_HOST, CONF_PORT,
CONF_WHITELIST)
@@ -28,10 +29,7 @@ EVENT = 'pilight_received'
# The pilight code schema depends on the protocol
# Thus only require to have the protocol information
# Ensure that protocol is in a list otherwise segfault in pilight-daemon
# https://github.com/pilight/pilight/issues/296
RF_CODE_SCHEMA = vol.Schema({vol.Required(ATTR_PROTOCOL):
vol.All(cv.ensure_list, [cv.string])},
RF_CODE_SCHEMA = vol.Schema({vol.Required(ATTR_PROTOCOL): cv.string},
extra=vol.ALLOW_EXTRA)
SERVICE_NAME = 'send'
@@ -73,9 +71,12 @@ def setup(hass, config):
def send_code(call):
"""Send RF code to the pilight-daemon."""
# Change type to dict from mappingproxy
# since data has to be JSON serializable
message_data = dict(call.data)
message_data = call.data
# Patch data because of bug:
# https://github.com/pilight/pilight/issues/296
# Protocol has to be in a list otherwise segfault in pilight-daemon
message_data['protocol'] = ensure_list(message_data['protocol'])
try:
pilight_client.send_code(message_data)
@@ -20,7 +20,6 @@ from homeassistant.core import HomeAssistant
from homeassistant.const import (EVENT_HOMEASSISTANT_START,
EVENT_HOMEASSISTANT_STOP, EVENT_STATE_CHANGED,
EVENT_TIME_CHANGED, MATCH_ALL)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import track_point_in_utc_time
from homeassistant.helpers.typing import ConfigType, QueryType
import homeassistant.util.dt as dt_util
@@ -41,9 +40,10 @@ QUERY_RETRY_WAIT = 0.1
CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({
vol.Optional(CONF_PURGE_DAYS):
vol.All(vol.Coerce(int), vol.Range(min=1)),
vol.Optional(CONF_DB_URL): cv.string,
vol.Optional(CONF_PURGE_DAYS): vol.All(vol.Coerce(int),
vol.Range(min=1)),
# pylint: disable=no-value-for-parameter
vol.Optional(CONF_DB_URL): vol.Url(),
})
}, extra=vol.ALLOW_EXTRA)
+2 -2
View File
@@ -1,8 +1,8 @@
# coding: utf-8
"""Constants used by Home Assistant components."""
MAJOR_VERSION = 0
MINOR_VERSION = 28
PATCH_VERSION = '2'
MINOR_VERSION = 29
PATCH_VERSION = '0.dev0'
__short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION)
__version__ = '{}.{}'.format(__short_version__, PATCH_VERSION)
REQUIRED_PYTHON_VER = (3, 4)
@@ -1,5 +1,4 @@
"""Helpers for config validation using voluptuous."""
from collections import OrderedDict
from datetime import timedelta
import os
from urllib.parse import urlparse
@@ -291,27 +290,6 @@ def url(value: Any) -> str:
raise vol.Invalid('invalid url')
def ordered_dict(value_validator, key_validator=match_all):
"""Validate an ordered dict validator that maintains ordering.
value_validator will be applied to each value of the dictionary.
key_validator (optional) will be applied to each key of the dictionary.
"""
item_validator = vol.Schema({key_validator: value_validator})
def validator(value):
"""Validate ordered dict."""
config = OrderedDict()
for key, val in value.items():
v_res = item_validator({key: val})
config.update(v_res)
return config
return validator
# Validator helpers
def key_dependency(key, dependency):
+4 -6
View File
@@ -29,10 +29,10 @@ from homeassistant.const import (
SERVICE_CLOSE, SERVICE_LOCK, SERVICE_MEDIA_PAUSE, SERVICE_MEDIA_PLAY,
SERVICE_MEDIA_SEEK, SERVICE_MOVE_DOWN, SERVICE_MOVE_UP, SERVICE_OPEN,
SERVICE_TURN_OFF, SERVICE_TURN_ON, SERVICE_UNLOCK, SERVICE_VOLUME_MUTE,
SERVICE_VOLUME_SET, SERVICE_OPEN_COVER, SERVICE_CLOSE_COVER,
STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED,
STATE_ALARM_TRIGGERED, STATE_CLOSED, STATE_LOCKED, STATE_OFF, STATE_ON,
STATE_OPEN, STATE_PAUSED, STATE_PLAYING, STATE_UNKNOWN, STATE_UNLOCKED)
SERVICE_VOLUME_SET, STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME,
STATE_ALARM_DISARMED, STATE_ALARM_TRIGGERED, STATE_CLOSED, STATE_LOCKED,
STATE_OFF, STATE_ON, STATE_OPEN, STATE_PAUSED, STATE_PLAYING,
STATE_UNKNOWN, STATE_UNLOCKED)
from homeassistant.core import State
_LOGGER = logging.getLogger(__name__)
@@ -77,8 +77,6 @@ SERVICE_TO_STATE = {
SERVICE_OPEN: STATE_OPEN,
SERVICE_MOVE_UP: STATE_OPEN,
SERVICE_MOVE_DOWN: STATE_CLOSED,
SERVICE_OPEN_COVER: STATE_OPEN,
SERVICE_CLOSE_COVER: STATE_CLOSED
}
@@ -6,9 +6,8 @@ import unittest
from unittest.mock import patch
from homeassistant.components.device_tracker.automatic import (
URL_AUTHORIZE, URL_VEHICLES, URL_TRIPS, setup_scanner)
from tests.common import get_test_home_assistant
URL_AUTHORIZE, URL_VEHICLES, URL_TRIPS, setup_scanner,
AutomaticDeviceScanner)
_LOGGER = logging.getLogger(__name__)
@@ -206,7 +205,6 @@ class TestAutomatic(unittest.TestCase):
def setUp(self):
"""Set up test data."""
self.hass = get_test_home_assistant()
def tearDown(self):
"""Tear down test data."""
@@ -223,7 +221,7 @@ class TestAutomatic(unittest.TestCase):
'secret': CLIENT_SECRET
}
self.assertFalse(setup_scanner(self.hass, config, self.see_mock))
self.assertFalse(setup_scanner(None, config, self.see_mock))
@patch('requests.get', side_effect=mocked_requests)
@patch('requests.post', side_effect=mocked_requests)
@@ -237,4 +235,20 @@ class TestAutomatic(unittest.TestCase):
'secret': CLIENT_SECRET
}
self.assertTrue(setup_scanner(self.hass, config, self.see_mock))
self.assertTrue(setup_scanner(None, config, self.see_mock))
@patch('requests.get', side_effect=mocked_requests)
@patch('requests.post', side_effect=mocked_requests)
def test_device_attributes(self, mock_get, mock_post):
"""Test device attributes are set on load."""
config = {
'platform': 'automatic',
'username': VALID_USERNAME,
'password': PASSWORD,
'client_id': CLIENT_ID,
'secret': CLIENT_SECRET
}
scanner = AutomaticDeviceScanner(config, self.see_mock)
self.assertEqual(DISPLAY_NAME, scanner.get_device_name('vid'))
+7 -10
View File
@@ -1,6 +1,5 @@
"""The tests for the Group components."""
# pylint: disable=protected-access,too-many-public-methods
from collections import OrderedDict
import unittest
from unittest.mock import patch
@@ -221,16 +220,16 @@ class TestComponentsGroup(unittest.TestCase):
test_group = group.Group(
self.hass, 'init_group', ['light.Bowl', 'light.Ceiling'], False)
group_conf = OrderedDict()
group_conf['second_group'] = {
_setup_component(self.hass, 'group', {'group': {
'second_group': {
'entities': 'light.Bowl, ' + test_group.entity_id,
'icon': 'mdi:work',
'view': True,
}
group_conf['test_group'] = 'hello.world,sensor.happy'
group_conf['empty_group'] = {'name': 'Empty Group', 'entities': None}
_setup_component(self.hass, 'group', {'group': group_conf})
},
'test_group': 'hello.world,sensor.happy',
'empty_group': {'name': 'Empty Group', 'entities': None},
}
})
group_state = self.hass.states.get(
group.ENTITY_ID_FORMAT.format('second_group'))
@@ -242,7 +241,6 @@ class TestComponentsGroup(unittest.TestCase):
group_state.attributes.get(ATTR_ICON))
self.assertTrue(group_state.attributes.get(group.ATTR_VIEW))
self.assertTrue(group_state.attributes.get(ATTR_HIDDEN))
self.assertEqual(1, group_state.attributes.get(group.ATTR_ORDER))
group_state = self.hass.states.get(
group.ENTITY_ID_FORMAT.format('test_group'))
@@ -253,7 +251,6 @@ class TestComponentsGroup(unittest.TestCase):
self.assertIsNone(group_state.attributes.get(ATTR_ICON))
self.assertIsNone(group_state.attributes.get(group.ATTR_VIEW))
self.assertIsNone(group_state.attributes.get(ATTR_HIDDEN))
self.assertEqual(2, group_state.attributes.get(group.ATTR_ORDER))
def test_groups_get_unique_names(self):
"""Two groups with same name should both have a unique entity id."""
-50
View File
@@ -1,5 +1,3 @@
"""Test config validators."""
from collections import OrderedDict
from datetime import timedelta
import os
import tempfile
@@ -369,51 +367,3 @@ def test_has_at_least_one_key():
for value in ({'beer': None}, {'soda': None}):
schema(value)
def test_ordered_dict_order():
"""Test ordered_dict validator."""
schema = vol.Schema(cv.ordered_dict(int, cv.string))
val = OrderedDict()
val['first'] = 1
val['second'] = 2
validated = schema(val)
assert isinstance(validated, OrderedDict)
assert ['first', 'second'] == list(validated.keys())
def test_ordered_dict_key_validator():
"""Test ordered_dict key validator."""
schema = vol.Schema(cv.ordered_dict(cv.match_all, cv.string))
with pytest.raises(vol.Invalid):
schema({None: 1})
schema({'hello': 'world'})
schema = vol.Schema(cv.ordered_dict(cv.match_all, int))
with pytest.raises(vol.Invalid):
schema({'hello': 1})
schema({1: 'works'})
def test_ordered_dict_value_validator():
"""Test ordered_dict validator."""
schema = vol.Schema(cv.ordered_dict(cv.string))
with pytest.raises(vol.Invalid):
schema({'hello': None})
schema({'hello': 'world'})
schema = vol.Schema(cv.ordered_dict(int))
with pytest.raises(vol.Invalid):
schema({'hello': 'world'})
schema({'hello': 5})