From 25a8c49225e3f3fa69222deedb8a0cf6adb5b1a6 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 27 Feb 2019 16:49:49 -0800 Subject: [PATCH 01/41] Release 89 draft --- source/_posts/2019-03-13-release-89.markdown | 552 +++++++++++++++++++ 1 file changed, 552 insertions(+) create mode 100644 source/_posts/2019-03-13-release-89.markdown diff --git a/source/_posts/2019-03-13-release-89.markdown b/source/_posts/2019-03-13-release-89.markdown new file mode 100644 index 00000000000..4bb59919dc0 --- /dev/null +++ b/source/_posts/2019-03-13-release-89.markdown @@ -0,0 +1,552 @@ +--- +layout: post +title: "0.89: TBD - UPDATE DAte" +description: "TBD" +date: 2019-02-27 00:11:03 +date_formatted: "March 13, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2019-03-release-89/components.png +--- + + + +## {% linkable_title New Platforms %} + +- Météo-France platform for the weather component ([@victorcerutti] - [#18404]) ([sensor.meteo_france docs]) ([weather.meteo_france docs]) (new-platform) +- Point alarm control ([@fredrike] - [#20972]) ([point docs]) (new-platform) +- Times of The Day Binary Sensor ([@kstaniek] - [#20068]) ([binary_sensor.tod docs]) (new-platform) +- Nissan Leaf Integration (Carwings / NissanConnect EV) ([@filcole] - [#19786]) ([device_tracker docs]) ([nissan_leaf docs]) ([binary_sensor.nissan_leaf docs]) ([sensor.nissan_leaf docs]) ([switch.nissan_leaf docs]) (new-platform) +- Add switch platform for Danfoss Air and additional sensors. ([@JonasPed] - [#21046]) ([danfoss_air docs]) (new-platform) +- Owlet baby monitor component ([@oblogic7] - [#21108]) ([owlet docs]) (new-platform) +- deCONZ thermostat support ([@Kane610] - [#20586]) ([deconz docs]) (new-platform) +- Added device tracker support for Ubee Router ([@mzdrale] - [#19586]) ([device_tracker docs]) (new-platform) +- Nissanleaf ([@filcole] - [#21145]) ([nissan_leaf docs]) (new-platform) +- Add LCN cover platform ([@alengwenus] - [#20288]) ([lcn docs]) ([cover.lcn docs]) (new-platform) +- Split out iperf3 into a component with a sensor platform ([@rohankapoorcom] - [#21138]) ([iperf3 docs]) ([sensor.iperf3 docs]) (breaking change) (new-platform) +- Add initial support for Sony SDCP projector control ([@alistairg] - [#20269]) ([switch.sony_projector docs]) (new-platform) +- Refactoring. Moved LCN constants to const.py ([@alengwenus] - [#21376]) ([lcn docs]) (new-platform) +- Add SmartThings Cover platform and add cover device classes ([@andrewsayre] - [#21192]) ([cover docs]) ([smartthings docs]) (breaking change) (new-platform) +- Rewrite of Toon component ([@frenck] - [#21186]) ([toon docs]) (breaking change) (new-platform) +- Add SmartThings Scene platform ([@andrewsayre] - [#21405]) ([smartthings docs]) (new-platform) +- Reddit Sensor ([@ljmerza] - [#21344]) ([sensor.reddit docs]) (new-platform) + +## {% linkable_title New Features %} + +- Enhance SmartThings component subscription ([@andrewsayre] - [#21124]) ([smartthings docs]) (breaking change) (new-feature) +- SmartThings Lock platform state attributes enhancement ([@andrewsayre] - [#21379]) ([smartthings docs]) (new-feature) +- Add power and energy attributes to SmartThings switch ([@andrewsayre] - [#21375]) ([smartthings docs]) (new-feature) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- RSSI_PEER and RSSI_DEVICE are different things (fixes #20900) ([@dagobert] - [#20902]) ([homematic docs]) (breaking change) +- Add yeelight flow action support ([@zewelor] - [#21195]) ([light.yeelight docs]) (breaking change) +- Prevent partial custom component overlays ([@balloob] - [#21070]) (breaking change) +- Add support for automatic discovery of TP-Link switches, bulbs and dimmers ([@rytilahti] - [#18091]) ([tplink docs]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) +- Enhance SmartThings component subscription ([@andrewsayre] - [#21124]) ([smartthings docs]) (breaking change) (new-feature) +- Split out iperf3 into a component with a sensor platform ([@rohankapoorcom] - [#21138]) ([iperf3 docs]) ([sensor.iperf3 docs]) (breaking change) (new-platform) +- Remove the google travel time update service ([@rohankapoorcom] - [#21153]) ([sensor.google_travel_time docs]) (breaking change) +- Add ADB server functionality to Fire TV ([@JeffLIrion] - [#21221]) ([media_player.firetv docs]) (breaking change) +- Add SmartThings Cover platform and add cover device classes ([@andrewsayre] - [#21192]) ([cover docs]) ([smartthings docs]) (breaking change) (new-platform) +- Rewrite of Toon component ([@frenck] - [#21186]) ([toon docs]) (breaking change) (new-platform) +- Add config for trusted networks auth provider ([@awarecan] - [#21111]) (breaking change) +- HomeMatic: Add error-attribute ([@dagobert] - [#21009]) ([homematic docs]) (breaking change) + +## {% linkable_title All changes %} + +- Météo-France platform for the weather component ([@victorcerutti] - [#18404]) ([sensor.meteo_france docs]) ([weather.meteo_france docs]) (new-platform) +- Update file header ([@fabaff] - [#21061]) +- Climate const.py move ([@elupus] - [#20945]) +- Update file header ([@fabaff] - [#21067]) +- Rename CONF_ATTRIBUTION to ATTRIBUTION ([@fabaff] - [#21069]) +- Bump pyHik library to 0.2.2, improve connections, add sensors ([@mezz64] - [#21086]) ([binary_sensor.hikvision docs]) +- Meteo france ([@fabaff] - [#21065]) ([meteo_france docs]) +- Fix "Unable to find entity" at Waze component ([@VirtualL] - [#21087]) ([sensor.waze_travel_time docs]) +- Point alarm control ([@fredrike] - [#20972]) ([point docs]) (new-platform) +- Times of The Day Binary Sensor ([@kstaniek] - [#20068]) ([binary_sensor.tod docs]) (new-platform) +- Nissan Leaf Integration (Carwings / NissanConnect EV) ([@filcole] - [#19786]) ([device_tracker docs]) ([nissan_leaf docs]) ([binary_sensor.nissan_leaf docs]) ([sensor.nissan_leaf docs]) ([switch.nissan_leaf docs]) (new-platform) +- Add switch platform for Danfoss Air and additional sensors. ([@JonasPed] - [#21046]) ([danfoss_air docs]) (new-platform) +- Config Entry migrations ([@andrewsayre] - [#20888]) +- Refactor http CachingStaticResource ([@awarecan] - [#21062]) ([http docs]) +- Add index parameter to scrape sensor ([@davidbb] - [#21084]) ([sensor.scrape docs]) +- Owlet baby monitor component ([@oblogic7] - [#21108]) ([owlet docs]) (new-platform) +- Order imports ([@fabaff] - [#21117]) ([owlet docs]) +- Add Groups to Homematic IP ([@SukramJ] - [#21076]) ([homematicip_cloud docs]) +- Remove outdated url pattern match support for static file hosting ([@awarecan] - [#21109]) ([http docs]) +- Upgrade pytest to 4.2.1 ([@scop] - [#21112]) +- Make Netatmo able to discover both Weather station and Health Coach ([@msvinth] - [#20274]) +- Add webhook support for Netatmo Cameras ([@danielperna84] - [#20755]) ([netatmo docs]) +- Logging to find what deCONZ events get created ([@Kane610] - [#20551]) +- Add traccar scan_interval configuration option ([@lapy] - [#21079]) ([device_tracker docs]) +- Add component media player.ps4 ([@ktnrg45] - [#21074]) ([ps4 docs]) +- Add traccar monitored_conditions option ([@lapy] - [#21149]) ([device_tracker docs]) +- RSSI_PEER and RSSI_DEVICE are different things (fixes #20900) ([@dagobert] - [#20902]) ([homematic docs]) (breaking change) +- Upgrade voluptuous-serialize to 2.1.0 ([@fabaff] - [#21166]) +- Upgrade youtube_dl to 2019.02.18 ([@fabaff] - [#21164]) ([media_extractor docs]) +- Upgrade sqlalchemy to 1.2.18 ([@fabaff] - [#21162]) ([sensor.sql docs]) +- Upgrade psutil to 5.5.1 ([@fabaff] - [#21171]) ([sensor.systemmonitor docs]) +- Fix HomematicIP Cloud fix cover position property ([@mxworm] - [#21154]) ([homematicip_cloud docs]) +- Clean up upc_connect tests ([@MartinHjelmare] - [#21150]) +- deCONZ thermostat support ([@Kane610] - [#20586]) ([deconz docs]) (new-platform) +- Add context to service call event ([@balloob] - [#21181]) +- Expose effect_list attribute for turned off lights ([@OleksandrBerchenko] - [#20750]) +- Philips Hue: Add bridge update prompt ([@starkillerOG] - [#21119]) ([hue docs]) +- Upgrade crimereports to 1.0.1 ([@fabaff] - [#21187]) ([sensor.crimereports docs]) +- Netatmo, address comments from #20755 ([@danielperna84] - [#21157]) ([netatmo docs]) +- Use constants from const.py ([@fabaff] - [#21068]) ([insteon docs]) ([knx docs]) ([raspihats docs]) ([light.rpi_gpio_pwm docs]) ([sensor.etherscan docs]) ([sensor.ripple docs]) ([sensor.sochain docs]) +- Bump Synology SRM dependency to version 0.0.6 ([@aerialls] - [#21212]) ([device_tracker docs]) +- Upgrade numpy to 1.16.1 ([@fabaff] - [#21190]) ([binary_sensor.trend docs]) ([image_processing.tensorflow docs]) ([sensor.pollen docs]) +- Fix Homematic IP Cloud configuration ([@bauerj] - [#21202]) ([homematicip_cloud docs]) +- Add yeelight flow action support ([@zewelor] - [#21195]) ([light.yeelight docs]) (breaking change) +- Fix the build ([@balloob] - [#21229]) +- Update pyhomematic to 0.1.56 ([@danielperna84] - [#21227]) ([homematic docs]) +- Add self to integration sensor and utility_meter ([@dgomes] - [#21226]) +- Add zone and reps for Xiaomi vacuum ([@marcogazzola] - [#19777]) ([vacuum.xiaomi_miio docs]) +- Bump zigpy ([@damarco] - [#21203]) ([zha docs]) +- Support OpenWRT 18.06 in luci device tracker ([@fbradyirl] - [#21236]) ([device_tracker docs]) +- Remove constraint from regex ([@balloob] - [#21239]) +- Upgrade opensensemap-api to 0.1.4 ([@fabaff] - [#21240]) ([air_quality docs]) +- Alarm trigger support for Point ([@fredrike] - [#21207]) ([point docs]) +- Prevent partial custom component overlays ([@balloob] - [#21070]) (breaking change) +- Correctly detect devices, which went offline during HA restart ([@OleksandrBerchenko] - [#20933]) ([device_tracker docs]) +- Update rova component with suffix for house number ([@GidoHakvoort] - [#21182]) ([sensor.rova docs]) +- Added device tracker support for Ubee Router ([@mzdrale] - [#19586]) ([device_tracker docs]) (new-platform) +- account specific cookies file to enable multiple accounts ([@ToSa27] - [#19811]) ([device_tracker docs]) +- Add support for automatic discovery of TP-Link switches, bulbs and dimmers ([@rytilahti] - [#18091]) ([tplink docs]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) +- Version bump: python-anthemav to v1.1.9 ([@nugget] - [#21273]) ([media_player.anthemav docs]) +- Do not warn for internally loaded components ([@balloob] - [#21287]) +- Remove index ([@fabaff] - [#21304]) +- Adding myself as codeowner for Freebox component ([@SNoof85] - [#21288]) +- Nissanleaf ([@filcole] - [#21145]) ([nissan_leaf docs]) (new-platform) +- Config entry options ([@Kane610] - [#18929]) ([deconz docs]) +- Enhance SmartThings component subscription ([@andrewsayre] - [#21124]) ([smartthings docs]) (breaking change) (new-feature) +- Add more ads plc types ([@philipperequile] - [#19801]) ([ads docs]) +- Add note to issue template regarding iOS issues ([@robbiet480] - [#21342]) +- Allow google home component device tracker to be optional ([@dshokouhi] - [#21335]) ([googlehome docs]) +- Add LCN cover platform ([@alengwenus] - [#20288]) ([lcn docs]) ([cover.lcn docs]) (new-platform) +- Add location to Norway airquality ([@Danielhiversen] - [#21347]) ([air_quality docs]) ([weather.met docs]) +- Updated pyvlx from 0.2.8 to 0.2.9. This version has slightly improved logging ([@Julius2342] - [#21349]) ([velux docs]) +- Update buienradar.py ([@hmmbob] - [#21351]) ([sensor.buienradar docs]) +- Fixes the sensor.filter outlier filter (handle step-changes correctly) ([@siberx] - [#21332]) ([sensor.filter docs]) +- Allows the utility_meter to net meter rather than only allow increases. ([@JBassett] - [#21204]) ([utility_meter docs]) +- implementing freedaily mode ([@tmechen] - [#21314]) ([weather.openweathermap docs]) +- Add voltage per phase ([@leeuwte] - [#21319]) ([sensor.dsmr docs]) +- Add conf_key check for LCN platform load ([@alengwenus] - [#21354]) ([lcn docs]) +- Update luci device tracker ([@fbradyirl] - [#21321]) ([device_tracker docs]) +- Support the person component in Prometheus ([@mitchellrj] - [#21363]) ([prometheus docs]) +- Update Starling Bank Integration to v2 API ([@Dullage] - [#21358]) ([sensor.starlingbank docs]) +- Split out iperf3 into a component with a sensor platform ([@rohankapoorcom] - [#21138]) ([iperf3 docs]) ([sensor.iperf3 docs]) (breaking change) (new-platform) +- Add custom and zone cleaning to Neato Vacuums ([@RomRider] - [#20779]) ([neato docs]) +- Add initial support for Sony SDCP projector control ([@alistairg] - [#20269]) ([switch.sony_projector docs]) (new-platform) +- Check for attribute existence for HS220 support ([@rytilahti] - [#21309]) ([tplink docs]) +- Generate new Discogs sensors + fix scan interval ([@thibmaek] - [#19443]) ([sensor.discogs docs]) +- Update panasonic_viera.py ([@Tony763] - [#21365]) ([media_player.panasonic_viera docs]) +- Handle connection issue for netatmo ([@Danielhiversen] - [#21346]) ([netatmo docs]) +- Refactoring. Moved LCN constants to const.py ([@alengwenus] - [#21376]) ([lcn docs]) (new-platform) +- Clean up owntracks tests ([@MartinHjelmare] - [#21378]) +- Remove the google travel time update service ([@rohankapoorcom] - [#21153]) ([sensor.google_travel_time docs]) (breaking change) +- SmartThings Lock platform state attributes enhancement ([@andrewsayre] - [#21379]) ([smartthings docs]) (new-feature) +- Upgrade shodan to 1.11.0 ([@fabaff] - [#21384]) ([sensor.shodan docs]) +- Update ordering ([@fabaff] - [#21377]) ([modbus docs]) +- Bump nessclient version to 0.9.10 ([@nickw444] - [#21388]) ([ness_alarm docs]) +- Handle capitalized HomeKit property names ([@koreth] - [#21382]) ([homekit_controller docs]) +- Update WazeTravelSensor to 0.9 ([@hmmbob] - [#21130]) ([sensor.waze_travel_time docs]) +- Clean up geofency test ([@MartinHjelmare] - [#21397]) +- Clean up locative tests ([@MartinHjelmare] - [#21400]) +- Add Sonos discovery of multiple households ([@amelchio] - [#21337]) ([sonos docs]) +- Philips js state ([@elupus] - [#21407]) ([media_player.philips_js docs]) +- Add ADB server functionality to Fire TV ([@JeffLIrion] - [#21221]) ([media_player.firetv docs]) (breaking change) +- Upgrade pytest to 4.3.0 ([@scop] - [#21412]) +- Upgrade mypy to 0.670 ([@scop] - [#20934]) +- Update pylinky ([@tiste] - [#21416]) ([sensor.linky docs]) +- Mark water_heater as significant domain ([@elupus] - [#21390]) ([history docs]) +- Add power and energy attributes to SmartThings switch ([@andrewsayre] - [#21375]) ([smartthings docs]) (new-feature) +- Add SmartThings Cover platform and add cover device classes ([@andrewsayre] - [#21192]) ([cover docs]) ([smartthings docs]) (breaking change) (new-platform) +- Add ESPHome User-Defined Services ([@OttoWinter] - [#21409]) ([esphome docs]) +- Handle GA Disconnect intent ([@balloob] - [#21387]) ([google_assistant docs]) +- Fix double events on Lutron Pico keypads ([@koreth] - [#21408]) ([lutron docs]) +- Fix Sonos snapshot/restore ([@amelchio] - [#21411]) ([sonos docs]) +- Increase travis timeout ([@andrewsayre] - [#21447]) +- Rewrite of Toon component ([@frenck] - [#21186]) ([toon docs]) (breaking change) (new-platform) +- Check if a script requirement is available before install ([@kellerza] - [#20517]) +- Add timeout option to sensor.rest and binary_sensor.rest. ([@glogiotatidis] - [#20065]) ([binary_sensor.rest docs]) ([sensor.rest docs]) +- Clean up codeowners file ([@amelchio] - [#21442]) +- Upgrade flake8 to 3.7.7 ([@scop] - [#21452]) +- Clean up ZHA post rewrite ([@dmulcahey] - [#21448]) ([zha docs]) +- Add friendly name to devices in the device registry ([@dmulcahey] - [#21318]) ([config docs]) +- Fix ESPHome nodes being auto-added without user confirmation ([@OttoWinter] - [#21444]) ([esphome docs]) +- Fix for Snips platform update that breaks hermes api. ([@ptc] - [#21443]) ([snips docs]) +- Remove launching a server in a test ([@balloob] - [#21445]) +- Add SmartThings Scene platform ([@andrewsayre] - [#21405]) ([smartthings docs]) (new-platform) +- Adjust GTFS dates when crossing midnight ([@renemarc] - [#20916]) ([sensor.gtfs docs]) +- Reddit Sensor ([@ljmerza] - [#21344]) ([sensor.reddit docs]) (new-platform) +- Add config for trusted networks auth provider ([@awarecan] - [#21111]) (breaking change) +- Add HomematicIP HmIP-OC8 module ([@mxworm] - [#21401]) ([homematicip_cloud docs]) +- Added new econet states ([@w1ll1am23] - [#21420]) ([water_heater docs]) +- Comment out bluepy libraries from requirements_all.txt ([@Danielhiversen] - [#20856]) ([switch.switchbot docs]) ([switch.switchmate docs]) +- Update sensor.nmbs to support vias better + show on map ([@thibmaek] - [#20063]) ([sensor.nmbs docs]) +- Add mitemp bt sensor device class ([@blackray12] - [#20293]) ([sensor.mitemp_bt docs]) +- Add Somfy IO Garage door ([@dfournie] - [#21320]) ([tahoma docs]) +- Add person support for Waze Travel Time ([@Petro31] - [#21471]) ([sensor.waze_travel_time docs]) +- Add cpu_use_percent as a new resource to the Glances sensor. ([@kevintuhumury] - [#21455]) ([sensor.glances docs]) +- Added a digit for precipitation ([@helto4real] - [#21439]) ([smhi docs]) +- Upgrade bcrypt to 3.1.6 ([@fabaff] - [#21476]) +- Upgrade shodan to 1.11.1 ([@fabaff] - [#21478]) ([sensor.shodan docs]) +- Upgrade astral to 1.10.1 ([@fabaff] - [#21474]) +- Refactor async_turn_on() for ZHA Light. ([@Adminiuga] - [#21156]) ([zha docs]) +- Add device_info to enable HA-devices for Homematic IP ([@SukramJ] - [#21241]) ([homematicip_cloud docs]) +- Fire events when Google Assistant commands come in #15139 ([@Swamp-Ig] - [#20204]) ([google_assistant docs]) +- pylint 2.3.0 ([@Danielhiversen] - [#21485]) +- HomeMatic: Add error-attribute ([@dagobert] - [#21009]) ([homematic docs]) (breaking change) +- Avoid unnecessary commands in Vizio update function ([@JeffLIrion] - [#20867]) +- Upgrade pyairvisual to 3.0.1 ([@bachya] - [#21512]) ([sensor.airvisual docs]) +- Bump simplisafe-python to 3.4.1 ([@bachya] - [#21511]) ([simplisafe docs]) +- Upgrade aioambient to 0.1.3 ([@bachya] - [#21510]) ([ambient_station docs]) +- Upgrade tibber lib ([@Danielhiversen] - [#21486]) ([tibber docs]) +- ness_alarm: Bump nessclient version to 0.9.13 ([@nickw444] - [#21466]) ([ness_alarm docs]) +- Bump ihc to 2.3.0 ([@msvinth] - [#21494]) ([ihc docs]) +- Changed source priority for Person ([@gorynychzmey] - [#21479]) + +[#18091]: https://github.com/home-assistant/home-assistant/pull/18091 +[#18404]: https://github.com/home-assistant/home-assistant/pull/18404 +[#18929]: https://github.com/home-assistant/home-assistant/pull/18929 +[#19443]: https://github.com/home-assistant/home-assistant/pull/19443 +[#19586]: https://github.com/home-assistant/home-assistant/pull/19586 +[#19777]: https://github.com/home-assistant/home-assistant/pull/19777 +[#19786]: https://github.com/home-assistant/home-assistant/pull/19786 +[#19801]: https://github.com/home-assistant/home-assistant/pull/19801 +[#19811]: https://github.com/home-assistant/home-assistant/pull/19811 +[#20063]: https://github.com/home-assistant/home-assistant/pull/20063 +[#20065]: https://github.com/home-assistant/home-assistant/pull/20065 +[#20068]: https://github.com/home-assistant/home-assistant/pull/20068 +[#20204]: https://github.com/home-assistant/home-assistant/pull/20204 +[#20269]: https://github.com/home-assistant/home-assistant/pull/20269 +[#20274]: https://github.com/home-assistant/home-assistant/pull/20274 +[#20288]: https://github.com/home-assistant/home-assistant/pull/20288 +[#20293]: https://github.com/home-assistant/home-assistant/pull/20293 +[#20517]: https://github.com/home-assistant/home-assistant/pull/20517 +[#20551]: https://github.com/home-assistant/home-assistant/pull/20551 +[#20586]: https://github.com/home-assistant/home-assistant/pull/20586 +[#20750]: https://github.com/home-assistant/home-assistant/pull/20750 +[#20755]: https://github.com/home-assistant/home-assistant/pull/20755 +[#20779]: https://github.com/home-assistant/home-assistant/pull/20779 +[#20856]: https://github.com/home-assistant/home-assistant/pull/20856 +[#20867]: https://github.com/home-assistant/home-assistant/pull/20867 +[#20888]: https://github.com/home-assistant/home-assistant/pull/20888 +[#20902]: https://github.com/home-assistant/home-assistant/pull/20902 +[#20916]: https://github.com/home-assistant/home-assistant/pull/20916 +[#20933]: https://github.com/home-assistant/home-assistant/pull/20933 +[#20934]: https://github.com/home-assistant/home-assistant/pull/20934 +[#20945]: https://github.com/home-assistant/home-assistant/pull/20945 +[#20972]: https://github.com/home-assistant/home-assistant/pull/20972 +[#21009]: https://github.com/home-assistant/home-assistant/pull/21009 +[#21046]: https://github.com/home-assistant/home-assistant/pull/21046 +[#21061]: https://github.com/home-assistant/home-assistant/pull/21061 +[#21062]: https://github.com/home-assistant/home-assistant/pull/21062 +[#21065]: https://github.com/home-assistant/home-assistant/pull/21065 +[#21067]: https://github.com/home-assistant/home-assistant/pull/21067 +[#21068]: https://github.com/home-assistant/home-assistant/pull/21068 +[#21069]: https://github.com/home-assistant/home-assistant/pull/21069 +[#21070]: https://github.com/home-assistant/home-assistant/pull/21070 +[#21074]: https://github.com/home-assistant/home-assistant/pull/21074 +[#21076]: https://github.com/home-assistant/home-assistant/pull/21076 +[#21079]: https://github.com/home-assistant/home-assistant/pull/21079 +[#21084]: https://github.com/home-assistant/home-assistant/pull/21084 +[#21086]: https://github.com/home-assistant/home-assistant/pull/21086 +[#21087]: https://github.com/home-assistant/home-assistant/pull/21087 +[#21108]: https://github.com/home-assistant/home-assistant/pull/21108 +[#21109]: https://github.com/home-assistant/home-assistant/pull/21109 +[#21111]: https://github.com/home-assistant/home-assistant/pull/21111 +[#21112]: https://github.com/home-assistant/home-assistant/pull/21112 +[#21117]: https://github.com/home-assistant/home-assistant/pull/21117 +[#21119]: https://github.com/home-assistant/home-assistant/pull/21119 +[#21124]: https://github.com/home-assistant/home-assistant/pull/21124 +[#21130]: https://github.com/home-assistant/home-assistant/pull/21130 +[#21138]: https://github.com/home-assistant/home-assistant/pull/21138 +[#21145]: https://github.com/home-assistant/home-assistant/pull/21145 +[#21149]: https://github.com/home-assistant/home-assistant/pull/21149 +[#21150]: https://github.com/home-assistant/home-assistant/pull/21150 +[#21153]: https://github.com/home-assistant/home-assistant/pull/21153 +[#21154]: https://github.com/home-assistant/home-assistant/pull/21154 +[#21156]: https://github.com/home-assistant/home-assistant/pull/21156 +[#21157]: https://github.com/home-assistant/home-assistant/pull/21157 +[#21162]: https://github.com/home-assistant/home-assistant/pull/21162 +[#21164]: https://github.com/home-assistant/home-assistant/pull/21164 +[#21166]: https://github.com/home-assistant/home-assistant/pull/21166 +[#21171]: https://github.com/home-assistant/home-assistant/pull/21171 +[#21181]: https://github.com/home-assistant/home-assistant/pull/21181 +[#21182]: https://github.com/home-assistant/home-assistant/pull/21182 +[#21186]: https://github.com/home-assistant/home-assistant/pull/21186 +[#21187]: https://github.com/home-assistant/home-assistant/pull/21187 +[#21190]: https://github.com/home-assistant/home-assistant/pull/21190 +[#21192]: https://github.com/home-assistant/home-assistant/pull/21192 +[#21195]: https://github.com/home-assistant/home-assistant/pull/21195 +[#21202]: https://github.com/home-assistant/home-assistant/pull/21202 +[#21203]: https://github.com/home-assistant/home-assistant/pull/21203 +[#21204]: https://github.com/home-assistant/home-assistant/pull/21204 +[#21207]: https://github.com/home-assistant/home-assistant/pull/21207 +[#21212]: https://github.com/home-assistant/home-assistant/pull/21212 +[#21221]: https://github.com/home-assistant/home-assistant/pull/21221 +[#21226]: https://github.com/home-assistant/home-assistant/pull/21226 +[#21227]: https://github.com/home-assistant/home-assistant/pull/21227 +[#21229]: https://github.com/home-assistant/home-assistant/pull/21229 +[#21236]: https://github.com/home-assistant/home-assistant/pull/21236 +[#21239]: https://github.com/home-assistant/home-assistant/pull/21239 +[#21240]: https://github.com/home-assistant/home-assistant/pull/21240 +[#21241]: https://github.com/home-assistant/home-assistant/pull/21241 +[#21273]: https://github.com/home-assistant/home-assistant/pull/21273 +[#21287]: https://github.com/home-assistant/home-assistant/pull/21287 +[#21288]: https://github.com/home-assistant/home-assistant/pull/21288 +[#21304]: https://github.com/home-assistant/home-assistant/pull/21304 +[#21309]: https://github.com/home-assistant/home-assistant/pull/21309 +[#21314]: https://github.com/home-assistant/home-assistant/pull/21314 +[#21318]: https://github.com/home-assistant/home-assistant/pull/21318 +[#21319]: https://github.com/home-assistant/home-assistant/pull/21319 +[#21320]: https://github.com/home-assistant/home-assistant/pull/21320 +[#21321]: https://github.com/home-assistant/home-assistant/pull/21321 +[#21332]: https://github.com/home-assistant/home-assistant/pull/21332 +[#21335]: https://github.com/home-assistant/home-assistant/pull/21335 +[#21337]: https://github.com/home-assistant/home-assistant/pull/21337 +[#21342]: https://github.com/home-assistant/home-assistant/pull/21342 +[#21344]: https://github.com/home-assistant/home-assistant/pull/21344 +[#21346]: https://github.com/home-assistant/home-assistant/pull/21346 +[#21347]: https://github.com/home-assistant/home-assistant/pull/21347 +[#21349]: https://github.com/home-assistant/home-assistant/pull/21349 +[#21351]: https://github.com/home-assistant/home-assistant/pull/21351 +[#21354]: https://github.com/home-assistant/home-assistant/pull/21354 +[#21358]: https://github.com/home-assistant/home-assistant/pull/21358 +[#21363]: https://github.com/home-assistant/home-assistant/pull/21363 +[#21365]: https://github.com/home-assistant/home-assistant/pull/21365 +[#21375]: https://github.com/home-assistant/home-assistant/pull/21375 +[#21376]: https://github.com/home-assistant/home-assistant/pull/21376 +[#21377]: https://github.com/home-assistant/home-assistant/pull/21377 +[#21378]: https://github.com/home-assistant/home-assistant/pull/21378 +[#21379]: https://github.com/home-assistant/home-assistant/pull/21379 +[#21382]: https://github.com/home-assistant/home-assistant/pull/21382 +[#21384]: https://github.com/home-assistant/home-assistant/pull/21384 +[#21387]: https://github.com/home-assistant/home-assistant/pull/21387 +[#21388]: https://github.com/home-assistant/home-assistant/pull/21388 +[#21390]: https://github.com/home-assistant/home-assistant/pull/21390 +[#21397]: https://github.com/home-assistant/home-assistant/pull/21397 +[#21400]: https://github.com/home-assistant/home-assistant/pull/21400 +[#21401]: https://github.com/home-assistant/home-assistant/pull/21401 +[#21405]: https://github.com/home-assistant/home-assistant/pull/21405 +[#21407]: https://github.com/home-assistant/home-assistant/pull/21407 +[#21408]: https://github.com/home-assistant/home-assistant/pull/21408 +[#21409]: https://github.com/home-assistant/home-assistant/pull/21409 +[#21411]: https://github.com/home-assistant/home-assistant/pull/21411 +[#21412]: https://github.com/home-assistant/home-assistant/pull/21412 +[#21416]: https://github.com/home-assistant/home-assistant/pull/21416 +[#21420]: https://github.com/home-assistant/home-assistant/pull/21420 +[#21439]: https://github.com/home-assistant/home-assistant/pull/21439 +[#21442]: https://github.com/home-assistant/home-assistant/pull/21442 +[#21443]: https://github.com/home-assistant/home-assistant/pull/21443 +[#21444]: https://github.com/home-assistant/home-assistant/pull/21444 +[#21445]: https://github.com/home-assistant/home-assistant/pull/21445 +[#21447]: https://github.com/home-assistant/home-assistant/pull/21447 +[#21448]: https://github.com/home-assistant/home-assistant/pull/21448 +[#21452]: https://github.com/home-assistant/home-assistant/pull/21452 +[#21455]: https://github.com/home-assistant/home-assistant/pull/21455 +[#21466]: https://github.com/home-assistant/home-assistant/pull/21466 +[#21471]: https://github.com/home-assistant/home-assistant/pull/21471 +[#21474]: https://github.com/home-assistant/home-assistant/pull/21474 +[#21476]: https://github.com/home-assistant/home-assistant/pull/21476 +[#21478]: https://github.com/home-assistant/home-assistant/pull/21478 +[#21479]: https://github.com/home-assistant/home-assistant/pull/21479 +[#21485]: https://github.com/home-assistant/home-assistant/pull/21485 +[#21486]: https://github.com/home-assistant/home-assistant/pull/21486 +[#21494]: https://github.com/home-assistant/home-assistant/pull/21494 +[#21510]: https://github.com/home-assistant/home-assistant/pull/21510 +[#21511]: https://github.com/home-assistant/home-assistant/pull/21511 +[#21512]: https://github.com/home-assistant/home-assistant/pull/21512 +[@Adminiuga]: https://github.com/Adminiuga +[@Danielhiversen]: https://github.com/Danielhiversen +[@Dullage]: https://github.com/Dullage +[@GidoHakvoort]: https://github.com/GidoHakvoort +[@JBassett]: https://github.com/JBassett +[@JeffLIrion]: https://github.com/JeffLIrion +[@JonasPed]: https://github.com/JonasPed +[@Julius2342]: https://github.com/Julius2342 +[@Kane610]: https://github.com/Kane610 +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@OleksandrBerchenko]: https://github.com/OleksandrBerchenko +[@OttoWinter]: https://github.com/OttoWinter +[@Petro31]: https://github.com/Petro31 +[@RomRider]: https://github.com/RomRider +[@SNoof85]: https://github.com/SNoof85 +[@SukramJ]: https://github.com/SukramJ +[@Swamp-Ig]: https://github.com/Swamp-Ig +[@ToSa27]: https://github.com/ToSa27 +[@Tony763]: https://github.com/Tony763 +[@VirtualL]: https://github.com/VirtualL +[@aerialls]: https://github.com/aerialls +[@alengwenus]: https://github.com/alengwenus +[@alistairg]: https://github.com/alistairg +[@amelchio]: https://github.com/amelchio +[@andrewsayre]: https://github.com/andrewsayre +[@awarecan]: https://github.com/awarecan +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bauerj]: https://github.com/bauerj +[@blackray12]: https://github.com/blackray12 +[@dagobert]: https://github.com/dagobert +[@damarco]: https://github.com/damarco +[@danielperna84]: https://github.com/danielperna84 +[@davidbb]: https://github.com/davidbb +[@dfournie]: https://github.com/dfournie +[@dgomes]: https://github.com/dgomes +[@dmulcahey]: https://github.com/dmulcahey +[@dshokouhi]: https://github.com/dshokouhi +[@elupus]: https://github.com/elupus +[@fabaff]: https://github.com/fabaff +[@fbradyirl]: https://github.com/fbradyirl +[@filcole]: https://github.com/filcole +[@fredrike]: https://github.com/fredrike +[@frenck]: https://github.com/frenck +[@glogiotatidis]: https://github.com/glogiotatidis +[@gorynychzmey]: https://github.com/gorynychzmey +[@helto4real]: https://github.com/helto4real +[@hmmbob]: https://github.com/hmmbob +[@kellerza]: https://github.com/kellerza +[@kevintuhumury]: https://github.com/kevintuhumury +[@koreth]: https://github.com/koreth +[@kstaniek]: https://github.com/kstaniek +[@ktnrg45]: https://github.com/ktnrg45 +[@lapy]: https://github.com/lapy +[@leeuwte]: https://github.com/leeuwte +[@ljmerza]: https://github.com/ljmerza +[@marcogazzola]: https://github.com/marcogazzola +[@mezz64]: https://github.com/mezz64 +[@mitchellrj]: https://github.com/mitchellrj +[@msvinth]: https://github.com/msvinth +[@mxworm]: https://github.com/mxworm +[@mzdrale]: https://github.com/mzdrale +[@nickw444]: https://github.com/nickw444 +[@nugget]: https://github.com/nugget +[@oblogic7]: https://github.com/oblogic7 +[@philipperequile]: https://github.com/philipperequile +[@ptc]: https://github.com/ptc +[@renemarc]: https://github.com/renemarc +[@robbiet480]: https://github.com/robbiet480 +[@rohankapoorcom]: https://github.com/rohankapoorcom +[@rytilahti]: https://github.com/rytilahti +[@scop]: https://github.com/scop +[@siberx]: https://github.com/siberx +[@starkillerOG]: https://github.com/starkillerOG +[@thibmaek]: https://github.com/thibmaek +[@tiste]: https://github.com/tiste +[@tmechen]: https://github.com/tmechen +[@victorcerutti]: https://github.com/victorcerutti +[@w1ll1am23]: https://github.com/w1ll1am23 +[@zewelor]: https://github.com/zewelor +[ads docs]: /components/ads/ +[air_quality docs]: /components/air_quality/ +[ambient_station docs]: /components/ambient_station/ +[binary_sensor.hikvision docs]: /components/binary_sensor.hikvision/ +[binary_sensor.nissan_leaf docs]: /components/binary_sensor.nissan_leaf/ +[binary_sensor.rest docs]: /components/binary_sensor.rest/ +[binary_sensor.tod docs]: /components/binary_sensor.tod/ +[binary_sensor.trend docs]: /components/binary_sensor.trend/ +[config docs]: /components/config/ +[cover docs]: /components/cover/ +[cover.lcn docs]: /components/cover.lcn/ +[danfoss_air docs]: /components/danfoss_air/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[esphome docs]: /components/esphome/ +[google_assistant docs]: /components/google_assistant/ +[googlehome docs]: /components/googlehome/ +[history docs]: /components/history/ +[homekit_controller docs]: /components/homekit_controller/ +[homematic docs]: /components/homematic/ +[homematicip_cloud docs]: /components/homematicip_cloud/ +[http docs]: /components/http/ +[hue docs]: /components/hue/ +[ihc docs]: /components/ihc/ +[image_processing.tensorflow docs]: /components/image_processing.tensorflow/ +[insteon docs]: /components/insteon/ +[iperf3 docs]: /components/iperf3/ +[knx docs]: /components/knx/ +[lcn docs]: /components/lcn/ +[light.rpi_gpio_pwm docs]: /components/light.rpi_gpio_pwm/ +[light.tplink docs]: /components/light.tplink/ +[light.yeelight docs]: /components/light.yeelight/ +[lutron docs]: /components/lutron/ +[media_extractor docs]: /components/media_extractor/ +[media_player.anthemav docs]: /components/media_player.anthemav/ +[media_player.firetv docs]: /components/media_player.firetv/ +[media_player.panasonic_viera docs]: /components/media_player.panasonic_viera/ +[media_player.philips_js docs]: /components/media_player.philips_js/ +[meteo_france docs]: /components/meteo_france/ +[modbus docs]: /components/modbus/ +[neato docs]: /components/neato/ +[ness_alarm docs]: /components/ness_alarm/ +[netatmo docs]: /components/netatmo/ +[nissan_leaf docs]: /components/nissan_leaf/ +[owlet docs]: /components/owlet/ +[point docs]: /components/point/ +[prometheus docs]: /components/prometheus/ +[ps4 docs]: /components/ps4/ +[raspihats docs]: /components/raspihats/ +[sensor.airvisual docs]: /components/sensor.airvisual/ +[sensor.buienradar docs]: /components/sensor.buienradar/ +[sensor.crimereports docs]: /components/sensor.crimereports/ +[sensor.discogs docs]: /components/sensor.discogs/ +[sensor.dsmr docs]: /components/sensor.dsmr/ +[sensor.etherscan docs]: /components/sensor.etherscan/ +[sensor.filter docs]: /components/sensor.filter/ +[sensor.glances docs]: /components/sensor.glances/ +[sensor.google_travel_time docs]: /components/sensor.google_travel_time/ +[sensor.gtfs docs]: /components/sensor.gtfs/ +[sensor.iperf3 docs]: /components/sensor.iperf3/ +[sensor.linky docs]: /components/sensor.linky/ +[sensor.meteo_france docs]: /components/sensor.meteo_france/ +[sensor.mitemp_bt docs]: /components/sensor.mitemp_bt/ +[sensor.nissan_leaf docs]: /components/sensor.nissan_leaf/ +[sensor.nmbs docs]: /components/sensor.nmbs/ +[sensor.pollen docs]: /components/sensor.pollen/ +[sensor.reddit docs]: /components/sensor.reddit/ +[sensor.rest docs]: /components/sensor.rest/ +[sensor.ripple docs]: /components/sensor.ripple/ +[sensor.rova docs]: /components/sensor.rova/ +[sensor.scrape docs]: /components/sensor.scrape/ +[sensor.shodan docs]: /components/sensor.shodan/ +[sensor.sochain docs]: /components/sensor.sochain/ +[sensor.sql docs]: /components/sensor.sql/ +[sensor.starlingbank docs]: /components/sensor.starlingbank/ +[sensor.systemmonitor docs]: /components/sensor.systemmonitor/ +[sensor.waze_travel_time docs]: /components/sensor.waze_travel_time/ +[simplisafe docs]: /components/simplisafe/ +[smartthings docs]: /components/smartthings/ +[smhi docs]: /components/smhi/ +[snips docs]: /components/snips/ +[sonos docs]: /components/sonos/ +[switch.nissan_leaf docs]: /components/switch.nissan_leaf/ +[switch.sony_projector docs]: /components/switch.sony_projector/ +[switch.switchbot docs]: /components/switch.switchbot/ +[switch.switchmate docs]: /components/switch.switchmate/ +[switch.tplink docs]: /components/switch.tplink/ +[tahoma docs]: /components/tahoma/ +[tibber docs]: /components/tibber/ +[toon docs]: /components/toon/ +[tplink docs]: /components/tplink/ +[utility_meter docs]: /components/utility_meter/ +[vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ +[velux docs]: /components/velux/ +[water_heater docs]: /components/water_heater/ +[weather.met docs]: /components/weather.met/ +[weather.meteo_france docs]: /components/weather.meteo_france/ +[weather.openweathermap docs]: /components/weather.openweathermap/ +[zha docs]: /components/zha/ From 65555f9f36e9b0b4870d2090664c2f3bbd7e1f80 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 28 Feb 2019 01:52:05 +0100 Subject: [PATCH 02/41] =?UTF-8?q?=F0=9F=9A=9C=20Merges/Redirect=20Rainbird?= =?UTF-8?q?=20component=20pages=20(#8767)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_components/rainbird.markdown | 80 ++++++++++++++++++++- source/_components/sensor.rainbird.markdown | 38 ---------- source/_components/switch.rainbird.markdown | 57 --------------- 3 files changed, 77 insertions(+), 98 deletions(-) delete mode 100644 source/_components/sensor.rainbird.markdown delete mode 100644 source/_components/switch.rainbird.markdown diff --git a/source/_components/rainbird.markdown b/source/_components/rainbird.markdown index 187173c1f78..f58d7a1d9a9 100644 --- a/source/_components/rainbird.markdown +++ b/source/_components/rainbird.markdown @@ -8,13 +8,24 @@ comments: false sharing: true footer: true logo: rainbird.png -ha_category: Irrigation +ha_category: + - Irrigation + - Sensor + - Switch ha_release: 0.61 ha_iot_class: "Local Polling" +redirect_from: + - /components/sensor.rainbird/ + - /components/switch.rainbird/ --- This `rainbird` component allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. +There is currently support for the following device types within Home Assistant: + +- [Sensor](#sensor) +- [Switch](#switch) + ## {% linkable_title Configuration %} To enable it, add the following to your `configuration.yaml` file: @@ -37,6 +48,69 @@ password: type: string {% endconfiguration %} -Finish its configuration by visiting the [Rain Bird sensor](/components/sensor.rainbird/) and [Rain Bird switch](/components/switch.rainbird/) documentation. - +

Please note that due to the implementation of the API within the LNK Module, there is a concurrency issue. For example, the Rain Bird app will give connection issues (like already a connection active). +

+ +## {% linkable_title Sensor %} + +This `rainbird` sensor allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. + +Add the following to your `configuration.yaml` file to enable the rain sensor: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: rainbird + monitored_conditions: + - rainsensor +``` + +{% configuration %} +monitored_conditions: + description: Conditions to be monitored. + keys: + rainsensor: + description: Returns the sensor level. +{% endconfiguration %} + +## {% linkable_title Switch %} + +This `rainbird` switch platform allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. + +Add the following to your `configuration.yaml` file to use the switch platform: + +```yaml +switch: + - platform: rainbird + switches: + sprinkler_1: + zone: 1 + friendly_name: "Front sprinklers" + trigger_time: 10 + scan_interval: 10 + sprinkler_2: + friendly_name: "Back sprinklers" + zone: 2 + trigger_time: 20 + scan_interval: 10 +``` + +{% configuration %} +zone: + description: Station zone identifier. + required: true + type: string +friendly_name: + description: Just a friendly name for the station. + required: false + type: string +trigger_time: + description: The default duration to sprinkle the zone. + required: true + type: integer +scan_interval: + description: How fast to refresh the switch. + required: false + type: integer +{% endconfiguration %} \ No newline at end of file diff --git a/source/_components/sensor.rainbird.markdown b/source/_components/sensor.rainbird.markdown deleted file mode 100644 index 18bd7d944cf..00000000000 --- a/source/_components/sensor.rainbird.markdown +++ /dev/null @@ -1,38 +0,0 @@ ---- -layout: page -title: "Rain Bird Sensor" -description: "Instructions on how to integrate your Rain Bird LNK WiFi Module rain sensor within Home Assistant." -date: 2017-08-25 12:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: rainbird.png -ha_category: Irrigation -ha_release: 0.61 -ha_iot_class: "Local Polling" ---- - -This `rainbird` sensor allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. - -## {% linkable_title Configuration %} - -Once you have enabled the [Rain Bird component](/components/rainbird), add the following to your `configuration.yaml` file to enable the rain sensor: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: rainbird - monitored_conditions: - - rainsensor -``` - -{% configuration %} -monitored_conditions: - description: Conditions to be monitored. - keys: - rainsensor: - description: Returns the sensor level. -{% endconfiguration %} - -Please note that due to the implementation of the API within the LNK Module, there is a concurrency issue. For example, the Rain Bird app will give connection issues (like already a connection active). diff --git a/source/_components/switch.rainbird.markdown b/source/_components/switch.rainbird.markdown deleted file mode 100644 index c29241f80a8..00000000000 --- a/source/_components/switch.rainbird.markdown +++ /dev/null @@ -1,57 +0,0 @@ ---- -layout: page -title: "Rain Bird Switch" -description: "Instructions on how to integrate your Rain Bird LNK WiFi Module as Switches within Home Assistant." -date: 2017-08-25 12:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: rainbird.png -ha_category: Irrigation -ha_release: 0.57 -ha_iot_class: "Local Polling" ---- - -This `rainbird` switch platform allows interacting with [LNK WiFi](http://www.rainbird.com/landscape/products/controllers/LNK-WiFi.htm) module of the Rain Bird Irrigation system in Home Assistant. - -## {% linkable_title Configuration %} - -Once you have enabled the [Rain Bird component](/components/rainbird), add the following to your `configuration.yaml` file: - -```yaml -switch: - - platform: rainbird - switches: - sprinkler_1: - zone: 1 - friendly_name: "Front sprinklers" - trigger_time: 10 - scan_interval: 10 - sprinkler_2: - friendly_name: "Back sprinklers" - zone: 2 - trigger_time: 20 - scan_interval: 10 -``` - -{% configuration %} -zone: - description: Station zone identifier. - required: true - type: string -friendly_name: - description: Just a friendly name for the station. - required: false - type: string -trigger_time: - description: The default duration to sprinkle the zone. - required: true - type: integer -scan_interval: - description: How fast to refresh the switch. - required: false - type: integer -{% endconfiguration %} - -Please note that due to the implementation of the API within the LNK Module, there is a concurrency issue. For example, the Rain Bird app will give connection issues (like already a connection active). From a3cf9e84d6427231c93ffe17bf0b409c9d744823 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Wed, 27 Feb 2019 22:26:01 -0600 Subject: [PATCH 03/41] Update changelog.markdown (#8770) * Update changelog.markdown * Update changelog.markdown --- source/lovelace/changelog.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/lovelace/changelog.markdown b/source/lovelace/changelog.markdown index 2b7224c81e7..28256d46317 100644 --- a/source/lovelace/changelog.markdown +++ b/source/lovelace/changelog.markdown @@ -10,6 +10,8 @@ footer: true --- ## {% linkable_title Changes in 0.87.0 %} - 📣 MDI icons updated to [3.3.92](https://cdn.materialdesignicons.com/3.3.92/) +- 📣 Theming: New CSS card style `ha-card-border-radius` +- 📣 Theming: New CSS card style `ha-card-background` - 📣 New system-health card in dev-info - 📣 UI Editor: YAML syntax support - 📣 UI Editor: Line numbers @@ -18,7 +20,7 @@ footer: true - 📣 [thermostat card]: more-info button added - 📣 [light card]: more-info button added - 🔧 [thermostat card]: Fix slider -- 🔧 groups togglable +- 🔧 groups are now togglable ## {% linkable_title Changes in 0.86.0 %} - 📣 Lovelace is now the default UI for Home Assistant! From 1891388bac89e67300ae34e616821b69e9464692 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 28 Feb 2019 05:26:41 +0100 Subject: [PATCH 04/41] =?UTF-8?q?=F0=9F=9A=9C=20Merges/Redirect=20GC100=20?= =?UTF-8?q?component=20pages=20(#8769)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/binary_sensor.gc100.markdown | 33 ---------- source/_components/gc100.markdown | 65 +++++++++++++++++-- source/_components/switch.gc100.markdown | 33 ---------- 3 files changed, 61 insertions(+), 70 deletions(-) delete mode 100644 source/_components/binary_sensor.gc100.markdown delete mode 100644 source/_components/switch.gc100.markdown diff --git a/source/_components/binary_sensor.gc100.markdown b/source/_components/binary_sensor.gc100.markdown deleted file mode 100644 index 2551d551004..00000000000 --- a/source/_components/binary_sensor.gc100.markdown +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: page -title: gc100 Binary Sensor -description: "Instructions on how to set up a gc100 binary sensor within Home Assistant." -date: 2017-10-27 17:26 -sidebar: true -comments: false -sharing: true -footer: true -ha_category: Binary Sensor -ha_release: 0.57 -ha_iot_class: "Local Polling" ---- - -To enable this sensor, you first have to set up [gc100](/components/gc100/), and add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: gc100 - ports: - - '3:1': Doorchime - - '3:2': Garage Obstruction -``` - -{% configuration %} -ports: - description: > - A list of module-address to name mappings in the format `'x:y': name`, - where x is module #, y is address. - required: true - type: list -{% endconfiguration %} diff --git a/source/_components/gc100.markdown b/source/_components/gc100.markdown index 1899560f492..78bff6a3735 100644 --- a/source/_components/gc100.markdown +++ b/source/_components/gc100.markdown @@ -7,22 +7,35 @@ sidebar: true comments: false sharing: true footer: true -ha_category: Hub +ha_category: + - Hub + - Binary Sensor + - Switch ha_release: 0.57 +ha_iot_class: "Local Polling" +redirect_from: + - /components/binary_sensor.gc100/ + - /components/switch.gc100/ --- The Global Caché [GC-100](https://www.globalcache.com/products/gc-100/) can be integrated into Home Assistant. GC-100 is a TCP-controllable hardware device which has an array of relays, RS232 serial ports, and flexible ports which can be programmed to be either digital inputs or IR blaster outputs. There are a variety of submodels of the GC-100 which have different amounts of each I/O type. -Currently, only relays and ports configured to be digital inputs are supported in Home Assistant. For IR support, please use the iTach remote platform (/components/remote.itach/), but note that it will likely not function concurrently on the same GC100 due to limitations in the TCP socket server implementation used by Global Caché. +There is currently support for the following device types within Home Assistant: + +- [Binary Sensor](binary-sensor) +- [Switch](#switch) + +Currently, only relays and ports configured to be digital inputs are supported in Home Assistant. For IR support, please use the [iTach remote platform](/components/remote.itach/), but note that it will likely not function concurrently on the same GC100 due to limitations in the TCP socket server implementation used by Global Caché. + +## {% linkable_title Configuration %} To enable this device, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry gc100: - host: 192.168.1.114 - port: 4998 + host: IP_ADDRESS ``` {% configuration %} @@ -36,3 +49,47 @@ port: default: 4998 type: integer {% endconfiguration %} + +## {% linkable_title Binary Sensor %} + +To enable this sensor, you first have to set up [gc100](#configuration), and add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: gc100 + ports: + - '3:1': Doorchime + - '3:2': Garage Obstruction +``` + +{% configuration %} +ports: + description: > + A list of module-address to name mappings in the format `'x:y': name`, + where x is module #, y is address. + required: true + type: list +{% endconfiguration %} + +## {% linkable_title Switch %} + +This allows you to control and monitor the relay state on your GC100. + +To enable this switch, you first have to set up [gc100](#configuration), and add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: gc100 + ports: + - '4:1': Siren + - '4:2': Sprinkler +``` + +{% configuration %} +ports: + description: "A list of module-address to name mappings in the format 'x:y': name, where x is module #, y is address." + required: true + type: list +{% endconfiguration %} \ No newline at end of file diff --git a/source/_components/switch.gc100.markdown b/source/_components/switch.gc100.markdown deleted file mode 100644 index 795fd596626..00000000000 --- a/source/_components/switch.gc100.markdown +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: page -title: gc100 Switch -description: "Instructions on how to set up a gc100 switch within Home Assistant." -date: 2017-10-27 17:26 -sidebar: true -comments: false -sharing: true -footer: true -ha_category: Switch -ha_release: 0.57 -ha_iot_class: "Local Polling" ---- - -This allows you to control and monitor the relay state on your GC100. - -To enable this switch, you first have to set up [gc100](/components/gc100/), and add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -switch: - - platform: gc100 - ports: - - '4:1': Siren - - '4:2': Sprinkler -``` - -{% configuration %} -ports: - description: "A list of module-address to name mappings in the format 'x:y': name, where x is module #, y is address." - required: true - type: list -{% endconfiguration %} From 12d889a3f3415194db8071920f36ea11f9b6c341 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 28 Feb 2019 05:27:02 +0100 Subject: [PATCH 05/41] =?UTF-8?q?=F0=9F=9A=9C=20Merges/Redirect=20Huawei?= =?UTF-8?q?=20LTE=20component=20pages=20(#8768)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🚜 Merges/Redirect Huawei LTE component pages * :pencil2: Tweak --- .../device_tracker.huawei_lte.markdown | 32 ---- source/_components/huawei_lte.markdown | 141 ++++++++++++++++-- source/_components/notify.huawei_lte.markdown | 46 ------ source/_components/sensor.huawei_lte.markdown | 75 ---------- 4 files changed, 126 insertions(+), 168 deletions(-) delete mode 100644 source/_components/device_tracker.huawei_lte.markdown delete mode 100644 source/_components/notify.huawei_lte.markdown delete mode 100644 source/_components/sensor.huawei_lte.markdown diff --git a/source/_components/device_tracker.huawei_lte.markdown b/source/_components/device_tracker.huawei_lte.markdown deleted file mode 100644 index 7beb8c788cc..00000000000 --- a/source/_components/device_tracker.huawei_lte.markdown +++ /dev/null @@ -1,32 +0,0 @@ ---- -layout: page -title: "Huawei LTE Router Device Tracker" -description: "Instructions on how to use Huawei LTE routers to track devices within Home Assistant." -date: 2018-09-08 20:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: huawei.svg -ha_category: Presence Detection -ha_release: 0.79 ---- - - -This platform offers presence detection by looking at connected devices to a [Huawei LTE router](https://consumer.huawei.com/en/smart-home/). - -This requires you to have set up the [Huawei LTE component](/components/huawei_lte/). - -## {% linkable_title Configuration %} - -To enable the sensor, add the following lines to your -`configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: huawei_lte -``` - -See the [device tracker component page](/components/device_tracker/) -for instructions how to configure the people to be tracked. diff --git a/source/_components/huawei_lte.markdown b/source/_components/huawei_lte.markdown index ba637bb5d79..e40859b3446 100644 --- a/source/_components/huawei_lte.markdown +++ b/source/_components/huawei_lte.markdown @@ -8,17 +8,28 @@ comments: false sharing: true footer: true logo: huawei.svg -ha_category: Network +ha_category: + - Network + - Presence Detection + - Notifications + - Sensor ha_release: 0.79 +ha_iot_class: "Local Polling" +redirect_from: + - /components/notify.huawei_lte/ + - /components/device_tracker.huawei_lte/ + - /components/sensor.huawei_lte/ --- -The Huawei LTE router integration for Home Assistant allows you to observe -and control [Huawei LTE routers](https://consumer.huawei.com/en/smart-home/). +The Huawei LTE router integration for Home Assistant allows you to observe and control [Huawei LTE routers](https://consumer.huawei.com/en/smart-home/). -The integration provides: +There is currently support for the following device types within Home Assistant: -* a sensor with device, signal, and traffic information -* a device tracker for connected devices +- [Presence Detection](#presence-detection) - a device tracker for connected devices +- [Notifications](#notifications) +- [Sensor](#sensor) - with device, signal, and traffic information + +All platform requires you to have set up the [Huawei LTE component](#configuration). ## {% linkable_title Configuration %} @@ -35,17 +46,17 @@ huawei_lte: {% configuration %} url: - description: URL of the router web interface. - required: true - type: url + description: URL of the router web interface. + required: true + type: url username: - description: The username used for the router web interface. - required: true - type: string + description: The username used for the router web interface. + required: true + type: string password: - description: The password used for the router web interface. - required: true - type: string + description: The password used for the router web interface. + required: true + type: string {% endconfiguration %} ### {% linkable_title Tested routers %} @@ -58,3 +69,103 @@ Routers we know to be working with this component based on the documentation of - Huawei B618 This is not a complete list. The component can probably connect to other Huawei LTE routers running similar firmware. + +## {% linkable_title Presence Detection %} + +This platform offers presence detection by looking at connected devices to a [Huawei LTE router](https://consumer.huawei.com/en/smart-home/). + +To enable the sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: huawei_lte +``` + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. + +## {% linkable_title Notifications %} + +The `huawei_lte` platform allows you to use a Huawei LTE router for notifications from Home Assistant. The messages will be sent as SMS text messages. + +```yaml +# Example configuration.yaml entry +notify: + - platform: huawei_lte + recipient: "+15105550123" +``` + +{% configuration %} +recipient: + description: The phone number of a default recipient or a list with multiple recipients. + required: true + type: string, list +name: + description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. + required: false + default: notify + type: string +url: + description: The router to use. Not needed if you only have one. + required: false + type: url +{% endconfiguration %} + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). + +## {% linkable_title Sensor %} + +The `huawei_lte` sensor platform allows you to monitor Huawei LTE routers. + +The names for the item you want to monitor are dot separated paths to information returned by the router. The data set varies by router model. To see what your router provides, set logging level to debug and watch `homeassistant.components.huawei_lte` debug entries. The configuration variable description contains a few example paths just to illustrate the syntax. These may not be available on all routers or their semantics may differ, and there are quite likely many more that are not listed here. + +To enable the sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: huawei_lte + monitored_conditions: + - device_information.SoftwareVersion + - device_signal.rssi + - traffic_statistics.CurrentDownloadRate + - traffic_statistics.TotalConnectTime +``` + +{% configuration %} +monitored_conditions: + description: Defines the data to monitor as sensors. Defaults to a few generally available data items expected to be available on most boxes. + required: false + default: Below is indicated which conditions are the default. + type: list + keys: + device_information.SoftwareVersion: + description: Software version. + device_information.WanIPAddress: + description: WAN interface IPv4 address. + default: default + device_information.WanIPv6Address: + description: WAN interface IPv6 address. + device_signal.rsrq: + description: The signal RSRQ value. + default: default + device_signal.rsrp: + description: The signal RSRP value. + default: default + device_signal.rssi: + description: The signal RSSI value. + default: default + device_signal.sinr: + description: The signal SINR value. + default: default + traffic_statistics.CurrentDownloadRate: + description: Current download rate, bytes/sec. + traffic_statistics.CurrentUploadRate: + description: Current upload rate, bytes/sec. + traffic_statistics.TotalUpload: + description: Total bytes uploaded since last reset. + traffic_statistics.TotalDownload: + description: Total bytes downloaded since last reset. + traffic_statistics.TotalConnectTime: + description: Total time connected since last reset. +{% endconfiguration %} \ No newline at end of file diff --git a/source/_components/notify.huawei_lte.markdown b/source/_components/notify.huawei_lte.markdown deleted file mode 100644 index 1baf01ca9a7..00000000000 --- a/source/_components/notify.huawei_lte.markdown +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: page -title: "Huawei LTE Notify" -description: "Instructions on how to add Huawei LTE notifications to Home Assistant." -date: 2018-12-23 17:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: huawei.svg -ha_category: Notifications -ha_release: 0.88 ---- - -The `huawei_lte` platform allows you to use a Huawei LTE router for -notifications from Home Assistant. The messages will be sent as SMS -text messages. - -This requires you to have set up the -[Huawei LTE component](/components/huawei_lte/). - -```yaml -# Example configuration.yaml entry -notify: - - platform: huawei_lte - recipient: "+15105550123" -``` - -{% configuration %} -recipient: - description: The phone number of a default recipient or a list with multiple recipients. - required: true - type: string, list -name: - description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. - required: false - default: notify - type: string -url: - description: The router to use. Not needed if you only have one. - required: false - type: url -{% endconfiguration %} - -To use notifications, please see the -[getting started with automation page](/getting-started/automation/). diff --git a/source/_components/sensor.huawei_lte.markdown b/source/_components/sensor.huawei_lte.markdown deleted file mode 100644 index 673ac3186f8..00000000000 --- a/source/_components/sensor.huawei_lte.markdown +++ /dev/null @@ -1,75 +0,0 @@ ---- -layout: page -title: "Huawei LTE Router Sensor" -description: "Instructions on how to integrate Huawei LTE router sensors into Home Assistant." -date: 2018-09-08 20:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: huawei.svg -ha_category: Network -ha_iot_class: "Local Polling" -ha_release: 0.79 ---- - -The `huawei_lte` sensor platform allows you to monitor Huawei LTE routers. - -## {% linkable_title Configuration %} - -This platform requires you to have set up the [Huawei LTE component](/components/huawei_lte/). - -The names for the item you want to monitor are dot separated paths to information returned by the router. The data set varies by router model. To see what your router provides, set logging level to debug and watch `homeassistant.components.huawei_lte` debug entries. The configuration variable description contains a few example paths just to illustrate the syntax. These may not be available on all routers or their semantics may differ, and there are quite likely many more that are not listed here. - -## {% linkable_title Configuration %} - -To enable the sensor, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: huawei_lte - monitored_conditions: - - device_information.SoftwareVersion - - device_signal.rssi - - traffic_statistics.CurrentDownloadRate - - traffic_statistics.TotalConnectTime -``` - -{% configuration %} -monitored_conditions: - description: Defines the data to monitor as sensors. Defaults to a few generally available data items expected to be available on most boxes. - required: false - default: Below is indicated which conditions are the default. - type: list - keys: - device_information.SoftwareVersion: - description: Software version. - device_information.WanIPAddress: - description: WAN interface IPv4 address. - default: default - device_information.WanIPv6Address: - description: WAN interface IPv6 address. - device_signal.rsrq: - description: The signal RSRQ value. - default: default - device_signal.rsrp: - description: The signal RSRP value. - default: default - device_signal.rssi: - description: The signal RSSI value. - default: default - device_signal.sinr: - description: The signal SINR value. - default: default - traffic_statistics.CurrentDownloadRate: - description: Current download rate, bytes/sec. - traffic_statistics.CurrentUploadRate: - description: Current upload rate, bytes/sec. - traffic_statistics.TotalUpload: - description: Total bytes uploaded since last reset. - traffic_statistics.TotalDownload: - description: Total bytes downloaded since last reset. - traffic_statistics.TotalConnectTime: - description: Total time connected since last reset. -{% endconfiguration %} From f75fb23091bb951e530ca28a799243a5ee07daf4 Mon Sep 17 00:00:00 2001 From: ikifar2012 Date: Wed, 27 Feb 2019 23:27:27 -0500 Subject: [PATCH 06/41] fixed typos (#8766) --- source/_components/device_tracker.icloud.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/device_tracker.icloud.markdown b/source/_components/device_tracker.icloud.markdown index 6867eaae007..f59a0bfbe76 100644 --- a/source/_components/device_tracker.icloud.markdown +++ b/source/_components/device_tracker.icloud.markdown @@ -63,11 +63,11 @@ You may receive an email from Apple stating that someone has logged into your ac To disable the drainage of the battery, a dynamic interval is being used for each individual device instead of a fixed interval for all devices linked to one account. The dynamic interval is based on the current zone of a device, the distance towards home and the battery level of the device. -2 Steps Authentication is enabled for iCloud. The component will ask which device you want to use as Trusted Device and then you can enter the code that has been sent to that device. The duration of this authentication is determined by Apple, but is now at 2 months, so you will only need to verify your account each two months, even after restarting Home Assistant. -2 Factor Authentication is the improved version of 2 Steps Authentication, this is still not supported by the pyicloud library. Therefore it's not possible to use it with the device_tracker yet. +If 2 Step Authentication is enabled for your iCloud account. The component will ask which device you want to use as Trusted Device and component will send a prompt to that device with the code which you can enter in Home Assistant. The duration of this authentication is determined by Apple, but is now at 2 months, so you will only need to verify your account each two months. +2 Factor Authentication is the improved version of 2 Step Authentication, this is still not supported by the pyicloud library. Therefore it's not possible to use it with the device_tracker yet. 4 services are available for this component: - **icloud_update**: This service can be used to ask for an update of a certain iDevice. The `account_name` and `device_name` are optional. Request will result in new Home Assistant [state_changed](/docs/configuration/events/#event-state_changed) event describing current iphone location. Can be used in automations when manual location update is needed, e.g., to check if anyone is home when door's been opened. - **icloud_lost_iphone**: This service will play the Lost iPhone sound on a certain iDevice. The `account_name` and `device_name` are optional. - **icloud_set_interval**: This service will change the dynamic interval of an iDevice. The `account_name` and `device_name` are optional. If `interval` is used in the service_data, the iDevice will be updated with that new interval. That interval will be fixed until the iDevice changes zone or if this service is called again. If `interval` isn't used in the service_data, the interval for that iDevice will revert back to its default dynamic interval based on its current zone, its distance towards home and its battery level. -- **icloud_reset_account**: This service can be used to reset an iCloud account. This is helpful when not all devices are being found by the component or if you have added a new iDevice to your account. The `account_name` is optional. +- **icloud_reset_account**: This service can be used to reset an iCloud account. This is helpful when not all devices are found by the component or if you have added a new iDevice to your account. The `account_name` is optional. From ae2747ba2af0e0a82571fb7e04178eff2c34690b Mon Sep 17 00:00:00 2001 From: Gauthier B Date: Thu, 28 Feb 2019 05:28:19 +0100 Subject: [PATCH 07/41] Add json_attributes example (#8765) Add a REST example using json_attributes and dictionaries with template (input data + configuration) --- source/_components/sensor.rest.markdown | 59 +++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 98958f3797f..ac4264da7b7 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -262,3 +262,62 @@ sensor: entity_id: sensor.owm_report ``` {% endraw %} + +This config shows how to extract multiple values from a dictionary with `json_attributes` and `template`. It helps you to avoid flooding the REST service and only ask once the results and separate them in multiple templates referring to it. (No need for a specific state on the REST sensor and it's default state will be the full JSON value which will be longer than the 255 max length. It's why we'll used a static value) + +{% raw %} +```json +{ + "bedroom1": { + "temperature": 15.79, + "humidity": 55.78, + "battery": 5.26, + "timestamp": "2019-02-27T22:21:37Z" + }, + "bedroom2": { + "temperature": 18.99, + "humidity": 49.81, + "battery": 5.08, + "timestamp": "2019-02-27T22:23:44Z" + }, + "bedroom3": { + "temperature": 18.58, + "humidity": 47.95, + "battery": 5.15, + "timestamp": "2019-02-27T22:21:22Z" + } +} +``` +{% endraw %} + +{% raw %} +```yaml +sensor: + - platform: rest + name: room_sensors + resource: http:// + json_attributes: + - bedroom1 + - bedroom2 + - bedroom3 + value_template: 'OK' + - platform: template + sensors: + bedroom1_temperature: + value_template: '{{ states.sensor.room_sensors.attributes["bedroom1"]["temperature"] }}' + device_class: temperature + unit_of_measurement: '°C' + bedroom1_humidity: + value_template: '{{ states.sensor.room_sensors.attributes["bedroom1"]["humidity"] }}' + device_class: humidity + unit_of_measurement: '%' + bedroom1_battery: + value_template: '{{ states.sensor.room_sensors.attributes["bedroom1"]["battery"] }}' + device_class: battery + unit_of_measurement: 'V' + bedroom2_temperature: + value_template: '{{ states.sensor.room_sensors.attributes["bedroom2"]["temperature"] }}' + device_class: temperature + unit_of_measurement: '°C' +``` +{% endraw %} From 51031cc0cd6bff448ac2e5a2d195ed5e68fa277c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 28 Feb 2019 09:12:58 +0100 Subject: [PATCH 08/41] Fix formatting --- source/_components/person.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/person.markdown b/source/_components/person.markdown index 6a0782635c8..a35cadb6876 100644 --- a/source/_components/person.markdown +++ b/source/_components/person.markdown @@ -13,7 +13,7 @@ ha_qa_scale: internal ha_release: 0.88 --- -The person component allows to connect device tracker entities to one or more person entities. The last state update of a connected device tracker will set the state of the person. For example if you connect your router and your OwnTracks device as trackers to your person, the last state update from either the router or your OwnTracks device will set the state of your person. +The `person` component allows to connect device tracker entities to one or more person entities. The last state update of a connected device tracker will set the state of the person. For example if you connect your router and your OwnTracks device as trackers to your person, the last state update from either the router or your OwnTracks device will set the state of your person. You can manage persons via the UI from the person page inside the configuration panel or via `YAML`. From 5efcbfb0963430c8f8601dba45d819ad23819b5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isabella=20Gross=20Alstr=C3=B6m?= Date: Thu, 28 Feb 2019 10:46:55 +0100 Subject: [PATCH 09/41] Updated info about usage with HASS.io (#8774) * Updated info about usage with HASS.io * :pencil2: Tweaks * :pencil2: Typo --- source/_components/deconz.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index e9f3819c529..7b687f2a1d8 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -43,7 +43,8 @@ There is currently support for the following device types within Home Assistant: ## {% linkable_title Recommended way of running deCONZ %} -Use [community container](https://hub.docker.com/r/marthoc/deconz/) by Marthoc for your deCONZ needs. It works both as a standalone container as well as with HASS.io. +If you are running Hass.io, an official add-on for Deconz is available in the add-on store. +Otherwise, use [community container](https://hub.docker.com/r/marthoc/deconz/) by Marthoc for your deCONZ needs. ### {% linkable_title Supported devices %} From d0f7c3545f988e9f92796cfe4f459a4dd9d81280 Mon Sep 17 00:00:00 2001 From: aaamoeder Date: Thu, 28 Feb 2019 13:48:12 +0100 Subject: [PATCH 10/41] fixed wifi instructions since there was some missing info (#8775) tried to enable wifi myself and found the steps fell a bit short, so here's an updated version. --- source/getting-started/index.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index eae279dbff4..756aacaf8ef 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -39,7 +39,12 @@ We will need a few things to get started with installing Home Assistant. For bes 1. Put the SD card in your SD card reader. 1. Open balenaEtcher, select the Hass.io image and flash it to the SD card. -1. WiFi and Static IP setup only: Format a USB-Stick with name `CONFIG`, create a folder named `network` and within that folder a file named `my-network`. Copy one of [the examples] to the `my-network` file. +1. WiFi and Static IP setup only: + - Format a USB-Stick to FAT32 with volume-name `CONFIG`. + - Create a folder named `network` in the root of the newly formatted USB-stick. + - Within that folder create a file named `my-network` without extension. + - Copy one of [the examples] to the `my-network` file. + - Plug the USB-stick into the RaspberryPi 3. 1. Unmount the SD card and remove it from your SD card reader. 1. Insert the SD card into your Raspberry Pi 3. If you are going to use an Ethernet cable, connect that too. 1. Connect your Raspberry Pi to the power supply, so it turns on. From e98a32dc9eddf2e98369fa0a3bdae8e9d6d35db7 Mon Sep 17 00:00:00 2001 From: Josh Date: Thu, 28 Feb 2019 14:32:32 -0400 Subject: [PATCH 11/41] Add note about finding user_id (#8784) Closes https://github.com/home-assistant/home-assistant.io/issues/8714 --- source/_components/person.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/person.markdown b/source/_components/person.markdown index a35cadb6876..2b292794b19 100644 --- a/source/_components/person.markdown +++ b/source/_components/person.markdown @@ -48,7 +48,7 @@ person: required: true type: string user_id: - description: The user id of the Home Assistant user account for the person. + description: The user id of the Home Assistant user account for the person. *`user_id` (aka `ID`) of users can be inspected in the "Users"/"Manage users" screen in the configuration panel.* required: false type: string device_trackers: From b7c1f61cc0fc8ef9b62b17ba0783adf42bd5370e Mon Sep 17 00:00:00 2001 From: cvwillegen Date: Fri, 1 Mar 2019 12:28:55 +0100 Subject: [PATCH 12/41] Fix a few links so that they are clickable (#8789) - []() syntax does not work within embedded HTML - Fix a few other links so that they become clickable --- source/_docs/installation/docker.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 655caea6b85..01bf2e37a54 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -54,11 +54,11 @@ netsh interface portproxy add v4tov4 listenaddress=192.168.1.10 listenport=8123 netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8123 connectaddress=10.0.50.2 connectport=8123 ``` -This will let you access your Home Assistant portal from http://localhost:8123, and if you forward port 8123 on your router to your machine IP, the traffic will be forwarded on through to the docker container. +This will let you access your Home Assistant portal from , and if you forward port 8123 on your router to your machine IP, the traffic will be forwarded on through to the docker container. ### {% linkable_title Synology NAS %} -As Synology within DSM now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatibility-information, if your NAS is supported), see https://www.synology.com/en-us/dsm/app_packages/Docker +As Synology within DSM now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatibility-information, if your NAS is supported), see The steps would be: * Install "Docker" package on your Synology NAS @@ -114,7 +114,7 @@ Remark: to restart your Home Assistant within Synology NAS, you just have to do * Right-click on it and select "Action"->"Restart".

-If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assistant on Synology Docker these instructions do not correctly configure the container to access the USB devices. To configure these devices on your Synology Docker Home Assistant you can follow the instructions provided [here](https://philhawthorne.com/installing-home-assistant-io-on-a-synology-diskstation-nas/) by Phil Hawthorne. +If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assistant on Synology Docker these instructions do not correctly configure the container to access the USB devices. To configure these devices on your Synology Docker Home Assistant you can follow the instructions provided here by Phil Hawthorne.

### {% linkable_title QNAP NAS %} From 6ae81fa0eb51d81857b59ccea1cdaa8da7731b90 Mon Sep 17 00:00:00 2001 From: migromao Date: Fri, 1 Mar 2019 11:36:24 +0000 Subject: [PATCH 13/41] model MJDP02YL (#8787) I just bought 2 bulbs model MJDP02YL and they work as expected. I've have been suggested to update the component documentetion mentioning this new model . thank you for the continuous support --- source/_components/light.yeelight.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index 9e6ca94dcae..fe9a7d5b026 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -131,6 +131,7 @@ This component is tested to work with the following models. If you have a differ | `strip1` | YLDD02YL | Lightstrip (Color) | | ? | YLDD04YL | Lightstrip (Color) | `bslamp1` | MJCTD01YL | Xiaomi Mijia Bedside Lamp - WIFI Version! | +| `RGBW` | MJDP02YL | Mi Led smart Lamp - white and color WIFI Version | | `lamp1` | MJTD01YL | Xiaomi Mijia Smart LED Desk Lamp (autodiscovery isn't possible because the device doesn't support mDNS due to the small amount of RAM) | | `ceiling1` | YLXD01YL | Yeelight Ceiling Light | | `ceiling2` | YLXD03YL | Yeelight Ceiling Light - Youth Version | @@ -138,6 +139,7 @@ This component is tested to work with the following models. If you have a differ | `ceiling3` | YLXD05YL | Yeelight Ceiling Light (Jiaoyue 480) | | `ceiling4` | YLXD02YL | Yeelight Ceiling Light (Jiaoyue 650) | + ## {% linkable_title Platform Services %} ### {% linkable_title Service `light.yeelight_set_mode` %} From 3662381ed8f9cd1994279ce4a01f6593e5647de8 Mon Sep 17 00:00:00 2001 From: emontnemery Date: Fri, 1 Mar 2019 16:36:12 +0100 Subject: [PATCH 14/41] Update discovery.markdown (#8793) --- source/_docs/mqtt/discovery.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 85983004e2b..7785650e3d9 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -98,6 +98,7 @@ Supported abbreviations: 'cln_tpl': 'cleaning_template', 'cmd_t': 'command_topic', 'curr_temp_t': 'current_temperature_topic', + 'dev': 'device', 'dev_cla': 'device_class', 'dock_t': 'docked_topic', 'dock_tpl': 'docked_template', @@ -121,6 +122,7 @@ Supported abbreviations: 'ic': 'icon', 'init': 'initial', 'json_attr': 'json_attributes', + 'json_attr_t': 'json_attributes_topic', 'max_temp': 'max_temp', 'min_temp': 'min_temp', 'mode_cmd_t': 'mode_command_topic', @@ -189,6 +191,7 @@ Supported abbreviations: 'unit_of_meas': 'unit_of_measurement', 'val_tpl': 'value_template', 'whit_val_cmd_t': 'white_value_command_topic', + 'whit_val_scl': 'white_value_scale', 'whit_val_stat_t': 'white_value_state_topic', 'whit_val_tpl': 'white_value_template', 'xy_cmd_t': 'xy_command_topic', @@ -196,6 +199,16 @@ Supported abbreviations: 'xy_val_tpl': 'xy_value_template', ``` +Supported abbreviations for device registry configuration: +``` + 'cns': 'connections', + 'ids': 'identifiers', + 'name': 'name', + 'mf': 'manufacturer', + 'mdl': 'model', + 'sw': 'sw_version', +``` + ### {% linkable_title Support by third-party tools %} The following software has built-in support for MQTT discovery: From 76b70fbe6c9b0dce0a33ce60cf97bcf04dde22a0 Mon Sep 17 00:00:00 2001 From: emontnemery Date: Sat, 2 Mar 2019 11:34:17 +0100 Subject: [PATCH 15/41] Update cover.mqtt.markdown (#8792) --- source/_components/cover.mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index 0cd7c71de9d..e47fbfc8c03 100644 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -173,6 +173,10 @@ tilt_invert_state: required: false type: boolean default: false +device_class: + description: The [type/class](/components/cover/#device-class) of the cover to set the icon in the frontend. + required: false + type: string json_attributes_topic: description: The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes. Usage example can be found in [MQTT sensor](/components/sensor.mqtt/#json-attributes-topic-configuration) documentation. required: false From 3e66aba9f1d3d6f5ff259193ac9510d0a172134c Mon Sep 17 00:00:00 2001 From: Tsvi Mostovicz Date: Sat, 2 Mar 2019 12:35:16 +0200 Subject: [PATCH 16/41] Add info regarding charset for Mariadb addon (#8786) --- source/_addons/mariadb.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/mariadb.markdown b/source/_addons/mariadb.markdown index 7aa57b5a8ae..1ff9d87095b 100644 --- a/source/_addons/mariadb.markdown +++ b/source/_addons/mariadb.markdown @@ -83,5 +83,5 @@ Use the following configuration in Home Assistant to use the database above: ```yaml recorder: - db_url: mysql://hass:securePassword@core-mariadb/homeassistant + db_url: mysql://hass:securePassword@core-mariadb/homeassistant?charset=utf8 ``` From 515ca53bd7efcc31934583bce5238e1d2f70c178 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Sun, 3 Mar 2019 13:02:56 +0100 Subject: [PATCH 17/41] =?UTF-8?q?=F0=9F=9A=9C=20Merges/Redirect=20SPC=20co?= =?UTF-8?q?mponent=20pages=20(#8803)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🚜 Merges/Redirect SPC component pages * :pencil2: Tweak --- .../alarm_control_panel.spc.markdown | 35 ---------------- source/_components/binary_sensor.spc.markdown | 20 --------- source/_components/spc.markdown | 41 ++++++++++++++++++- 3 files changed, 40 insertions(+), 56 deletions(-) delete mode 100644 source/_components/alarm_control_panel.spc.markdown delete mode 100644 source/_components/binary_sensor.spc.markdown diff --git a/source/_components/alarm_control_panel.spc.markdown b/source/_components/alarm_control_panel.spc.markdown deleted file mode 100644 index de7bd83b4ef..00000000000 --- a/source/_components/alarm_control_panel.spc.markdown +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: page -title: "Vanderbilt SPC Alarm" -description: "Instructions on how to setup the Vanderbilt SPC Alarm control panel within Home Assistant." -date: 2017-05-18 22:01 -sidebar: true -comments: false -sharing: true -footer: true -logo: vanderbilt_spc.png -ha_category: Alarm -ha_release: 0.47 -ha_iot_class: "Local Push" ---- - -The `spc` alarm control panel platform allows you to control your [Vanderbilt SPC](https://www.spcsupportinfo.com/) alarms. - -The requirement is that you have setup your [SPC hub](/components/spc/). - -The `changed_by` attribute enables one to be able to take different actions depending on who armed/disarmed the alarm in [automation](/getting-started/automation/). - -```yaml -automation: - - alias: Alarm status changed - trigger: - - platform: state - entity_id: alarm_control_panel.alarm_1 - action: - - service: notify.notify - data_template: - message: > - {% raw %}Alarm changed from {{ trigger.from_state.state }} - to {{ trigger.to_state.state }} - by {{ trigger.to_state.attributes.changed_by }}{% endraw %} -``` diff --git a/source/_components/binary_sensor.spc.markdown b/source/_components/binary_sensor.spc.markdown deleted file mode 100644 index 86fe817f8ad..00000000000 --- a/source/_components/binary_sensor.spc.markdown +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: page -title: "SPC Binary Sensor" -description: "Instructions on how to integrate Vanderbilt SPC binary sensors into Home Assistant." -date: 2017-05-18 22:05 -sidebar: true -comments: false -sharing: true -footer: true -logo: vanderbilt_spc.png -ha_release: 0.47 -ha_category: Binary Sensor -ha_iot_class: "Local Push" ---- - -The `spc` platform allows you to get data from your [Vanderbilt SPC](http://www.spc-intruder-detection.com/ssp-spc/) binary sensors from within Home Assistant. - -Check the [type/class](/components/binary_sensor/) list for a possible visualization of your zone. Currently motion, smoke and door sensors are supported. - -The requirement is that you have setup your [SPC hub](/components/spc/). diff --git a/source/_components/spc.markdown b/source/_components/spc.markdown index 1e5d707c860..2b2de62dc00 100644 --- a/source/_components/spc.markdown +++ b/source/_components/spc.markdown @@ -7,15 +7,27 @@ sidebar: true comments: false sharing: true footer: true -ha_category: Hub +ha_category: + - Hub + - Alarm + - Binary Sensor ha_release: 0.47 logo: vanderbilt_spc.png +ha_iot_class: "Local Push" +redirect_from: + - /components/binary_sensor.spc/ + - /components/alarm_control_panel.spc/ --- Home Assistant has support to integrate your [Vanderbilt SPC](http://www.spc-intruder-detection.com/ssp-spc/) alarm panel and any connected motion, door and smoke sensors. Integration with SPC is done through a third-party API gateway called [SPC Web Gateway](http://www.lundix.se/smarta-losningar/) which must be installed and configured somewhere on your network. +There is currently support for the following device types within Home Assistant: + +- [Alarm](#alarm) +- [Binary Sensor](#binary-sensor) + Home Assistant needs to know where to find the SPC Web Gateway API endpoints, to configure this add the following section to your `configuration.yaml` file: ```yaml @@ -37,3 +49,30 @@ ws_url: {% endconfiguration %} Supported sensors will be automatically discovered and added, however they will be hidden by default. + +## {% linkable_title Alarm %} + +The `spc` alarm control panel platform allows you to control your [Vanderbilt SPC](https://www.spcsupportinfo.com/) alarms. + +The `changed_by` attribute enables one to be able to take different actions depending on who armed/disarmed the alarm in [automation](/getting-started/automation/). + +```yaml +automation: + - alias: Alarm status changed + trigger: + - platform: state + entity_id: alarm_control_panel.alarm_1 + action: + - service: notify.notify + data_template: + message: > + {% raw %}Alarm changed from {{ trigger.from_state.state }} + to {{ trigger.to_state.state }} + by {{ trigger.to_state.attributes.changed_by }}{% endraw %} +``` + +## {% linkable_title Binary Sensor %} + +The `spc` platform allows you to get data from your [Vanderbilt SPC](http://www.spc-intruder-detection.com/ssp-spc/) binary sensors from within Home Assistant. + +Check the [type/class](/components/binary_sensor/) list for a possible visualization of your zone. Currently motion, smoke and door sensors are supported. From 8176b273193008317cddfbc11eccc75aada288e8 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 3 Mar 2019 13:11:08 +0100 Subject: [PATCH 18/41] Update history_graph.markdown (#8808) Make it clear that the component and lovelace UI are not the same thing. See https://github.com/home-assistant/home-assistant.io/pull/8665 Also, I would suggest to streamline both configurations, by accepting both refresh and refresh_interval. --- source/_components/history_graph.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/history_graph.markdown b/source/_components/history_graph.markdown index 42a8fe79046..79dd95361dd 100644 --- a/source/_components/history_graph.markdown +++ b/source/_components/history_graph.markdown @@ -17,7 +17,7 @@ ha_qa_scale: internal

-The `history_graph` component will make the UI display a graph similar to the graphs in `more-info` popups and the [history](/components/history/) panel. +The `history_graph` component will make the UI display a graph similar to the graphs in `more-info` popups and the [history](/components/history/) panel. If you want to add history graphs to the Lovelace UI, please check the [History Graph Card](/lovelace/history-graph/) configuration as it slightly differs from the component. To use this component in your installation, add the following to your `configuration.yaml` file: From ea5ed13255cf3c6f0cb9b89be79990f04627aff8 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Mon, 4 Mar 2019 03:29:09 +0100 Subject: [PATCH 19/41] =?UTF-8?q?=F0=9F=9A=9C=20Merges/Redirect=20Pilight?= =?UTF-8?q?=20component=20pages=20(#8812)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🚜 Merges/Redirect Pilight component pages * :pencil2: Tweak --- .../binary_sensor.pilight.markdown | 85 ------ source/_components/pilight.markdown | 247 +++++++++++++++++- source/_components/sensor.pilight.markdown | 76 ------ source/_components/switch.pilight.markdown | 117 --------- 4 files changed, 246 insertions(+), 279 deletions(-) delete mode 100644 source/_components/binary_sensor.pilight.markdown delete mode 100644 source/_components/sensor.pilight.markdown delete mode 100644 source/_components/switch.pilight.markdown diff --git a/source/_components/binary_sensor.pilight.markdown b/source/_components/binary_sensor.pilight.markdown deleted file mode 100644 index b539a5b2778..00000000000 --- a/source/_components/binary_sensor.pilight.markdown +++ /dev/null @@ -1,85 +0,0 @@ ---- -layout: page -title: "Pilight Binary Sensor" -description: "Instructions on how to integrate Pilight binary sensors within Home Assistant." -date: 2017-03-24 20:41 -sidebar: true -comments: false -sharing: true -footer: true -logo: pilight.png -ha_category: DIY -ha_release: 0.44 -ha_iot_class: "Local Polling" ---- - -The `pilight` binary sensor platform implement the -[pilight hub](/components/pilight/) binary sensor functionality. -Two type of Pilight binary sensor configuration available. A normal sensor which -send the on and off state cyclical and a trigger sensor which send only a -trigger when an event happened (for example lots of cheap PIR motion detector). - -## {% linkable_title Configuration %} - -To enable a Pilight binary sensor in your installation, -add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: pilight - variable: 'state' -``` - -{% configuration %} -variable: - description: The variable name in the data stream that defines the sensor value. - required: true - type: string -payload: - description: > - Message payload identifiers. - Only if all identifiers are matched the sensor value is set. - required: true - type: string -name: - description: Name of the sensor. - required: false - type: string -payload_on: - description: "Variable `on` value. The component will recognize this as logical '1'." - required: false - type: [string, float, integer] -payload_off: - description: "Variable `off` value. The component will recognize this as logical '0'." - required: false - type: [string, float, integer] -disarm_after_trigger: - description: Configure sensor as trigger type. - required: false - type: boolean -reset_delay_sec: - description: > - Seconds before the sensor is disarmed if - `disarm_after_trigger` is set to true. - required: false - type: integer - default: 30 -{% endconfiguration %} - -## {% linkable_title Full example %} - -A full configuration example could look like this: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: pilight - name: 'Motion' - variable: 'state' - payload: - unitcode: 371399 - payload_on: 'closed' - disarm_after_trigger: true - reset_delay_sec: 30 -``` diff --git a/source/_components/pilight.markdown b/source/_components/pilight.markdown index 599aaa4eea6..18dd9a659d9 100644 --- a/source/_components/pilight.markdown +++ b/source/_components/pilight.markdown @@ -8,9 +8,17 @@ comments: false sharing: true footer: true logo: pilight.png -ha_category: DIY +ha_category: + - DIY + - Binary Sensor + - Sensor + - Switch ha_release: 0.26 ha_iot_class: "Local Push" +redirect_from: + - /components/binary_sensor.pilight/ + - /components/sensor.pilight/ + - /components/switch.pilight/ --- [Pilight](https://www.pilight.org/) is a modular and open source solution to communicate with 433 MHz devices and runs on various small form factor computers. A lot of common [protocols](https://manual.pilight.org/protocols/index.html) are already available. @@ -19,6 +27,12 @@ This pilight hub connects to the [pilight-daemon](https://manual.pilight.org/pro The received and supported RF codes are put on the event bus of Home Assistant and are therefore directly usable by other components (e.g., automation). Additionally a send service is provided to send RF codes. +There is currently support for the following device types within Home Assistant: + +- [Binary Sensor](#binary-sensor) +- [Sensor](#sensor) +- [Switch](#switch) + ## {% linkable_title Configuration %} To integrate pilight into Home Assistant, add the following section to your `configuration.yaml` file: @@ -68,6 +82,237 @@ pilight: - 42 ``` +## {% linkable_title Binary Sensor %} + +The `pilight` binary sensor platform implement the [pilight hub](#configuration) binary sensor functionality. Two type of Pilight binary sensor configuration available. A normal sensor which send the on and off state cyclical and a trigger sensor which send only a trigger when an event happened (for example lots of cheap PIR motion detector). + +To enable a Pilight binary sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: pilight + variable: 'state' +``` + +{% configuration %} +variable: + description: The variable name in the data stream that defines the sensor value. + required: true + type: string +payload: + description: > + Message payload identifiers. + Only if all identifiers are matched the sensor value is set. + required: true + type: string +name: + description: Name of the sensor. + required: false + type: string +payload_on: + description: "Variable `on` value. The component will recognize this as logical '1'." + required: false + type: [string, float, integer] +payload_off: + description: "Variable `off` value. The component will recognize this as logical '0'." + required: false + type: [string, float, integer] +disarm_after_trigger: + description: Configure sensor as trigger type. + required: false + type: boolean +reset_delay_sec: + description: > + Seconds before the sensor is disarmed if + `disarm_after_trigger` is set to true. + required: false + type: integer + default: 30 +{% endconfiguration %} + +### {% linkable_title Full example %} + +A full configuration example could look like this: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: pilight + name: 'Motion' + variable: 'state' + payload: + unitcode: 371399 + payload_on: 'closed' + disarm_after_trigger: true + reset_delay_sec: 30 +``` + +## {% linkable_title Sensor %} + +This `pilight` sensor platform for 433 MHz devices uses a value in the message payload as the sensor value. Unique identifiers (e.g., _uuid_) can be set to distinguish between multiple pilight devices. To use a pilight sensor the pilight Home Assistant hub has to be set up. + +To use your sensor via pilight, make sure it is [supported](https://wiki.pilight.org/doku.php/protocols) and add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: pilight + variable: temperature + payload: + uuid: '0000-b8-27-eb-f447d3' +``` + +{% configuration %} +variable: + description: The variable name in the data stream that defines the sensor value. + required: true + type: string +payload: + description: Message payload identifiers. Only if all identifiers are matched the sensor value is set. + required: true + type: string +name: + description: Name of the sensor. + required: false + default: Pilight Sensor + type: string +unit_of_measurement: + description: Defines the units of measurement of the sensor, if any. + required: false + type: string +{% endconfiguration %} + +### {% linkable_title Example: Weather station %} + +This section shows a real life example how to use values of a weather station. + +```yaml +# Example configuration.yaml entry +sensor: + - platform: pilight + name: 'Temperature' + variable: 'temperature' + payload: + uuid: 0000-b8-27-eb-f1f72e + unit_of_measurement: '°C' + - platform: pilight + name: 'Humidity' + variable: 'humidity' + payload: + uuid: 0000-b8-27-eb-f1f72e + unit_of_measurement: '%' + - platform: pilight + name: 'Battery' + variable: 'battery' + payload: + uuid: 0000-b8-27-eb-f1f72e + unit_of_measurement: '%' +``` + +## {% linkable_title Switch %} + +The `pilight` switch platform is issuing 433 MHz commands using [pilight](https://www.pilight.org/) to turn a 433 MHz device on or off. The Pilight Home Assistant hub has to be set up. + +Additionally, RF commands can be defined that trigger this switch to turn on and off. This allows you to also use the remote shipped with your 433 MHz switch without mixing up the Home Assistant states. You can even define several on/off commands, thus several RF remotes to toggle this switch. + +To be really sure that Home Assistant knows the actual state of your device it is recommended to use the RF remote with codes unknown to any of your 433 MHz devices. Thus you use the remote to trigger this switch to send the correct RF code to the device. + +To define a Pilight switch, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +switch: + - platform: pilight + switches: + Bed light: + on_code: + protocol: intertechno_old + 'on': 1 + off_code: + protocol: intertechno_old + 'off': 1 +``` + +{% configuration %} +switches: + description: The list that contains all command switches. + required: true + type: string + keys: + entry: + description: Name of the command switch. Multiple entries are possible. + required: true + type: list + keys: + on_code: + description: The code to turn the device on. + required: true + type: list + off_code: + description: The code to turn the device off. + required: true + type: list + on_code_receive: + description: If given, this command will turn the switch on if it is received by pilight. + required: false + type: list + off_code_receive: + description: If given, this command will turn the switch off if it is received by pilight. + required: false + type: list +{% endconfiguration %} + +Variables for the different codes (`on_code` and `off_code`): + +- **protocol** (*Required*): Protocol to use, e.g., `intertechno_old` or `daycom`. +- **systemcode** (*Optional*): The systemcode of the device. +- **unit** (*Optional*): The unit to use (is equivalent to `pilight-send --unit`). +- **unitcode** (*Optional*): The unitcode to use (is equivalent to `pilight-send --unitcode`). +- **id** (*Optional*): ID of the device +- **state** (*Optional*): `'on'` or `'off'` has to be in apostrophes to be parsed correctly. +- **'off'** (*Optional*): `1` or `0` +- **'on'** (*Optional*): `1` or `0` + +For possible code entries, look at the [pilight API](https://manual.pilight.org/development/api.html). All commands allowed by [pilight-send](https://manual.pilight.org/programs/send.html) can be used. Which means that if, for a certain protocol, there are different parameters used, you should be able to replace the variables above by the proper ones required by the specific protocol. When using the `elro_800_switch` or `mumbi` protocol, for example, you will have to replace the variable `unit` with `unitcode` or there will be errors occurring. + +Variables for the different receive codes (`on_code_receive` and `off_code_receive`): + +- **echo** (*Optional*) Set to `true` if the on-/off-code should be sent if the given code was received. + +This is useful if you have paired your sender directly with the receiver to prevent sending the signal twice. + +### {% linkable_title Examples %} + +```yaml +switch: + - platform: pilight + switches: + Bed light: + on_code: + protocol: intertechno_old + unit: 3 + id: 4 + 'on': 1 + off_code: + protocol: intertechno_old + unit: 3 + id: 4 + 'off': 1 + on_code_receive: + protocol: daycom + systemcode: 14462 + unit: 6 + id: 34 + state: 'on' + off_code_receive: + protocol: daycom + systemcode: 14462 + unit: 6 + id: 34 + state: 'off' +``` + ## {% linkable_title Troubleshooting %} - A list of tested RF transceiver hardware is available [here](https://manual.pilight.org/electronics/index.html). This might be useful before buying. diff --git a/source/_components/sensor.pilight.markdown b/source/_components/sensor.pilight.markdown deleted file mode 100644 index 13ed0303ffa..00000000000 --- a/source/_components/sensor.pilight.markdown +++ /dev/null @@ -1,76 +0,0 @@ ---- -layout: page -title: "Pilight Sensor" -description: "Instructions on how to integrate pilight sensors within Home Assistant." -date: 2016-10-08 23:21 -sidebar: true -comments: false -sharing: true -footer: true -logo: pilight.png -ha_category: DIY -ha_release: 0.31 -ha_iot_class: depends ---- - -This `pilight` sensor platform for 433 MHz devices uses a value in the message payload as the sensor value. Unique identifiers (e.g., _uuid_) can be set to distinguish between multiple pilight devices. To use a pilight sensor the pilight Home Assistant hub has to be set up. - -## {% linkable_title Configuration %} - -To use your sensor via pilight, make sure it is [supported](https://wiki.pilight.org/doku.php/protocols) and add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: pilight - variable: temperature - payload: - uuid: '0000-b8-27-eb-f447d3' -``` - -{% configuration %} -variable: - description: The variable name in the data stream that defines the sensor value. - required: true - type: string -payload: - description: Message payload identifiers. Only if all identifiers are matched the sensor value is set. - required: true - type: string -name: - description: Name of the sensor. - required: false - default: Pilight Sensor - type: string -unit_of_measurement: - description: Defines the units of measurement of the sensor, if any. - required: false - type: string -{% endconfiguration %} - -## {% linkable_title Example: Weather station %} - -This section shows a real life example how to use values of a weather station. - -```yaml -# Example configuration.yaml entry -sensor: - - platform: pilight - name: 'Temperature' - variable: 'temperature' - payload: - uuid: 0000-b8-27-eb-f1f72e - unit_of_measurement: '°C' - - platform: pilight - name: 'Humidity' - variable: 'humidity' - payload: - uuid: 0000-b8-27-eb-f1f72e - unit_of_measurement: '%' - - platform: pilight - name: 'Battery' - variable: 'battery' - payload: - uuid: 0000-b8-27-eb-f1f72e - unit_of_measurement: '%' -``` diff --git a/source/_components/switch.pilight.markdown b/source/_components/switch.pilight.markdown deleted file mode 100644 index 89eee313b68..00000000000 --- a/source/_components/switch.pilight.markdown +++ /dev/null @@ -1,117 +0,0 @@ ---- -layout: page -title: "Pilight Switch" -description: "Instructions on how to have switches using 433 MHz connected to a computer running pilight." -date: 2015-06-10 22:41 -sidebar: true -comments: false -sharing: true -footer: true -logo: pilight.png -ha_category: DIY -ha_release: 0.26 -ha_iot_class: "Local Polling" ---- - -The `pilight` switch platform is issuing 433 MHz commands using [pilight](https://www.pilight.org/) to turn a 433 MHz device on or off. The Pilight Home Assistant hub has to be set up. - -Additionally, RF commands can be defined that trigger this switch to turn on and off. This allows you to also use the remote shipped with your 433 MHz switch without mixing up the Home Assistant states. You can even define several on/off commands, thus several RF remotes to toggle this switch. - -To be really sure that Home Assistant knows the actual state of your device it is recommended to use the RF remote with codes unknown to any of your 433 MHz devices. Thus you use the remote to trigger this switch to send the correct RF code to the device. - -## {% linkable_title Configuration %} - -To define a Pilight switch, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -switch: - - platform: pilight - switches: - Bed light: - on_code: - protocol: intertechno_old - 'on': 1 - off_code: - protocol: intertechno_old - 'off': 1 -``` - -{% configuration %} -switches: - description: The list that contains all command switches. - required: true - type: string - keys: - entry: - description: Name of the command switch. Multiple entries are possible. - required: true - type: list - keys: - on_code: - description: The code to turn the device on. - required: true - type: list - off_code: - description: The code to turn the device off. - required: true - type: list - on_code_receive: - description: If given, this command will turn the switch on if it is received by pilight. - required: false - type: list - off_code_receive: - description: If given, this command will turn the switch off if it is received by pilight. - required: false - type: list -{% endconfiguration %} - -Variables for the different codes (`on_code` and `off_code`): - -- **protocol** (*Required*): Protocol to use, e.g., `intertechno_old` or `daycom`. -- **systemcode** (*Optional*): The systemcode of the device. -- **unit** (*Optional*): The unit to use (is equivalent to `pilight-send --unit`). -- **unitcode** (*Optional*): The unitcode to use (is equivalent to `pilight-send --unitcode`). -- **id** (*Optional*): ID of the device -- **state** (*Optional*): `'on'` or `'off'` has to be in apostrophes to be parsed correctly. -- **'off'** (*Optional*): `1` or `0` -- **'on'** (*Optional*): `1` or `0` - -For possible code entries, look at the [pilight API](https://manual.pilight.org/development/api.html). All commands allowed by [pilight-send](https://manual.pilight.org/programs/send.html) can be used. Which means that if, for a certain protocol, there are different parameters used, you should be able to replace the variables above by the proper ones required by the specific protocol. When using the `elro_800_switch` or `mumbi` protocol, for example, you will have to replace the variable `unit` with `unitcode` or there will be errors occurring. - -Variables for the different receive codes (`on_code_receive` and `off_code_receive`): - -- **echo** (*Optional*) Set to `true` if the on-/off-code should be sent if the given code was received. - -This is useful if you have paired your sender directly with the receiver to prevent sending the signal twice. - -## {% linkable_title Examples %} - -```yaml -switch: - - platform: pilight - switches: - Bed light: - on_code: - protocol: intertechno_old - unit: 3 - id: 4 - 'on': 1 - off_code: - protocol: intertechno_old - unit: 3 - id: 4 - 'off': 1 - on_code_receive: - protocol: daycom - systemcode: 14462 - unit: 6 - id: 34 - state: 'on' - off_code_receive: - protocol: daycom - systemcode: 14462 - unit: 6 - id: 34 - state: 'off' -``` From 7b01a746b59c156e83bdadcb5a6e7cac3a8c62e2 Mon Sep 17 00:00:00 2001 From: Strixx76 Date: Mon, 4 Mar 2019 03:29:52 +0100 Subject: [PATCH 20/41] Small corretions (#8813) Found error in examples for: - Setting up a sensor with multiple measurement values - Setting up a switch using topic prefix and abbreviated configuration variable names --- source/_docs/mqtt/discovery.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 7785650e3d9..0be6a1714b5 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -264,9 +264,9 @@ $ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/switch/irrigation/set" -m Setting up a sensor with multiple measurement values requires multiple consecutive configuration topic submissions. - Configuration topic no1: `homeassistant/sensor/sensorBedroomT/config` -- Configuration payload no1: `{"device_class": "sensor", "name": "Temperature", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "°C", "value_template": "{% raw %}{{ value_json.temperature}}{% endraw %}" }` +- Configuration payload no1: `{"device_class": "temperature", "name": "Temperature", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "°C", "value_template": "{% raw %}{{ value_json.temperature}}{% endraw %}" }` - Configuration topic no2: `homeassistant/sensor/sensorBedroomH/config` -- Configuration payload no2: `{"device_class": "sensor", "name": "Humidity", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "%", "value_template": "{% raw %}{{ value_json.humidity}}{% endraw %}" }` +- Configuration payload no2: `{"device_class": "humidity", "name": "Humidity", "state_topic": "homeassistant/sensor/sensorBedroom/state", "unit_of_measurement": "%", "value_template": "{% raw %}{{ value_json.humidity}}{% endraw %}" }` - Common state payload: `{ "temperature": 23.20, "humidity": 43.70 }` Setting up a switch using topic prefix and abbreviated configuration variable names to reduce payload length. @@ -274,7 +274,7 @@ Setting up a switch using topic prefix and abbreviated configuration variable na - Configuration topic: `homeassistant/switch/irrigation/config` - Command topic: `homeassistant/switch/irrigation/set` - State topic: `homeassistant/switch/irrigation/state` -- Payload: `{"~": "homeassistant/switch/irrigation", "name": "garden", "cmd_t": "~/set", , "stat_t": "~/state"}` +- Payload: `{"~": "homeassistant/switch/irrigation", "name": "garden", "cmd_t": "~/set", "stat_t": "~/state"}` Setting up a climate component (heat only) with abbreviated configuration variable names to reduce payload length. From 9fbd36048d0dd9a114352d61669e0bf9b28daa64 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 4 Mar 2019 02:30:50 +0000 Subject: [PATCH 21/41] virtualenv -> venv (#8817) Since virtualenv is the name of some third party tool --- source/_docs/installation.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown index 9440729d618..e27f3dce0df 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -36,8 +36,8 @@ If you use these install methods, we assume that you know how to manage and admi **Method**|**You have**|**Recommended for** :-----|:-----|:----- -[Virtualenv
(as another user)](/docs/installation/raspberry-pi/)|Any Linux, Python 3.5.3 or later|Those familiar with their operating system -[Virtualenv
(as your user)](/docs/installation/virtualenv/)|Any Python 3.5.3 or later|Developers +[venv
(as another user)](/docs/installation/raspberry-pi/)|Any Linux, Python 3.5.3 or later|Those familiar with their operating system +[venv
(as your user)](/docs/installation/virtualenv/)|Any Python 3.5.3 or later|Developers ## {% linkable_title Community provided guides %} From bfd7f2dc656ec4d1f834d6614d9eb36613859034 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Mon, 4 Mar 2019 10:01:10 +0100 Subject: [PATCH 22/41] =?UTF-8?q?=F0=9F=9A=9C=20Merges/Redirect=20Asterisk?= =?UTF-8?q?=20component=20pages=20(#8805)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_components/asterisk_mbox.markdown | 2 ++ source/_components/mailbox.asterisk_mbox.markdown | 15 --------------- 2 files changed, 2 insertions(+), 15 deletions(-) delete mode 100644 source/_components/mailbox.asterisk_mbox.markdown diff --git a/source/_components/asterisk_mbox.markdown b/source/_components/asterisk_mbox.markdown index 23cb489269f..9d0c75b4d11 100644 --- a/source/_components/asterisk_mbox.markdown +++ b/source/_components/asterisk_mbox.markdown @@ -11,6 +11,8 @@ logo: asterisk.png ha_category: Mailbox ha_iot_class: "Local Push" ha_release: 0.51 +redirect_from: + - /components/mailbox.asterisk_mbox/ --- The `asterisk_mbox` Asterisk Voicemail integration for Home Assistant allows you to view, listen to, and delete voicemails from an Asterisk voicemail mailbox. The component includes a panel on the frontend that provides caller-id and speech-to-text transcription (using Google's API) of messages in addition to playback and message deletion. There is also an included sensor that indicates of the number of available messages. There is no requirement that the Asterisk PBX and Home Assistant are running on the same machine. diff --git a/source/_components/mailbox.asterisk_mbox.markdown b/source/_components/mailbox.asterisk_mbox.markdown deleted file mode 100644 index 07e50d287c1..00000000000 --- a/source/_components/mailbox.asterisk_mbox.markdown +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: page -title: "Asterisk Voicemail Mailbox" -description: "Instructions on how to integrate an Asterisk Voicemail within Home Assistant." -date: 2017-06-30 18:30 -sidebar: true -comments: false -sharing: true -footer: true -logo: asterisk.png -ha_category: Mailbox -ha_release: 0.51 ---- - -The Asterisk Voicemail Mailbox provides visual and audio access to voicemail on the Asterisk PBX server. This mailbox is enabled automatically through the [Asterisk Voicemail component](/components/asterisk_mbox/) configuration. From 05e17058295fd49bf64e36607fe5e52777dfbc85 Mon Sep 17 00:00:00 2001 From: Eduard van Valkenburg Date: Mon, 4 Mar 2019 10:14:52 +0000 Subject: [PATCH 23/41] git_pull note (#8820) * added note about no passphrase in the SSH key * :pencil2: Tweak --- source/_addons/git_pull.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/git_pull.markdown b/source/_addons/git_pull.markdown index fb7579a3900..2be4cd85d2c 100644 --- a/source/_addons/git_pull.markdown +++ b/source/_addons/git_pull.markdown @@ -61,7 +61,7 @@ Load and update configuration files for Home Assistant from a [Git](https://git- * **interval** (*Required*): The interval in seconds to poll the repo for if automatic polling is enabled. - **deployment_user** (*Optional*): Username to use when authenticating to a repository with a username and password. - **deployment_password** (*Optional*): Password to use when authenticating to a repository. Ignored if `deployment_user` is not set. -- **deployment_key** (*Optional*): A private SSH key that will be used for communication during Git operations. This key is mandatory for ssh-accessed repositories, which are the ones with the following pattern: `@:`. +- **deployment_key** (*Optional*): A private SSH key that will be used for communication during Git operations. This key is mandatory for ssh-accessed repositories, which are the ones with the following pattern: `@:`. This key has to be created without a passphrase. - **deployment_key_protocol** (*Optional*): The key protocol. Default is `rsa`. Valid protocols are: * **dsa** From b968470b9f35b1784cd040bc16528669bb9c8b9b Mon Sep 17 00:00:00 2001 From: Mike O'Driscoll Date: Mon, 4 Mar 2019 06:23:45 -0500 Subject: [PATCH 24/41] Updating rotted URL for certbot guide (#8800) HAProxy docs has a rotted URL to digital ocean guide for certbot Let's Encrypt certificates. Updated this URL to the newest guide. --- source/_docs/ecosystem/haproxy.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/haproxy.markdown b/source/_docs/ecosystem/haproxy.markdown index 3e56ae52a9d..6c77a4ba249 100644 --- a/source/_docs/ecosystem/haproxy.markdown +++ b/source/_docs/ecosystem/haproxy.markdown @@ -18,7 +18,7 @@ This will vary depending on your OS. Check out Google for this. ### {% linkable_title Obtain an SSL certificate %} There are multiple ways of obtaining an SSL certificate. Let’s Encrypt is one method. -Use Google for this, but a good example of using Certbot can be found [here](https://www.digitalocean.com/community/tutorials/how-to-secure-haproxy-with-let-s-encrypt-on-ubuntu-12-04). +Use Google for this, but a good example of using Certbot can be found [here](https://www.digitalocean.com/community/tutorials/how-to-secure-haproxy-with-let-s-encrypt-on-ubuntu-14-04). ### {% linkable_title HAPRoxy Configuration %} From 47f78da74a4e90442ab82976fdc302b4bf52ccca Mon Sep 17 00:00:00 2001 From: akasma74 Date: Mon, 4 Mar 2019 11:24:06 +0000 Subject: [PATCH 25/41] Update automation.markdown (#8778) * Update automation.markdown Clarification of initial_state behaviour * Update automation.markdown * Update automation.markdown come more adjustments and clarification * :pencil2: Wording --- source/_docs/automation.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/automation.markdown b/source/_docs/automation.markdown index fdd1526a7f5..2c21c495286 100644 --- a/source/_docs/automation.markdown +++ b/source/_docs/automation.markdown @@ -49,9 +49,9 @@ Actions are all about calling services. To explore the available services open t ### {% linkable_title Automation initial state %} -If you always want your automations to be enabled or disabled upon Home Assistant restart, then you have to set an initial state in your automations. Otherwise the previous state will be restored. +When you create a new automation, it will be disabled (and therefore won't trigger) unless you explicitly add `initial_state: true` to it or turn it on manually via UI/another automation/developer tools. -If an automation is disabled (turned off) then it will never trigger. Only automations that are enabled (turned on) will trigger. +In case automations need to be enabled or disabled upon Home Assistant restart, then you have to set the `initial_state` in your automations. Otherwise, the previous state will be restored. Please note that if for some reason Home Assistant cannot restore the previous state, e.g., because of an interrupted or failed startup, it will result in the automation being disabled on the next Home Assistant startup. ```text automation: From 8d122d5229ff354b8bdc48f69b42d64110005832 Mon Sep 17 00:00:00 2001 From: stefanlod Date: Mon, 4 Mar 2019 22:57:37 +1100 Subject: [PATCH 26/41] Added documentation for the Remotec ZRC-90 (#8819) --- source/_docs/z-wave/device-specific.markdown | 65 +++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown index bb8c9c805bd..c244dd31f5e 100644 --- a/source/_docs/z-wave/device-specific.markdown +++ b/source/_docs/z-wave/device-specific.markdown @@ -386,6 +386,69 @@ Button four tap|Circle with Line|4|0 Button four hold|Circle with Line|4|2 Button four release|Circle with Line|4|1 +### {% linkable_title Remotec ZRC-90 Scene Master %} + +To get the ZRC-90 Scene Master working in Home Assistant, you must first edit the `COMMAND_CLASS_CENTRAL_SCENE` in your `zwcfg` file. + +1. Go the Z-Wave control panel in Home Assistant and make a note of the node number your ZRC-90 has been assigned. +2. *Stop* Home Assistant. +3. Make a backup of your `zwfcg` file, just in case. +4. In the `zwcfg` file, find the `Node id` that corresponds to the number you noted in the first step. +5. Within the `Node id` you identified, highlight everything between `` (inclusive) and paste in the following: + + ```xml + + + + + + + + + + + + + + ``` + +6. Save the changes you made the `zwcfg` file and start Home Assistant back up. + +Button presses will trigger `zwave.scene_activated` with the following: + +- `node_id`: the node of your Scene Master (useful if you have more than one) +- `scene_id`: the number button you press (1-8) +- `scene_data`: the type of press registered (see below) + +The Scene Master has eight buttons which can send four actions. +The type of action is reflected in the `scene_data` parameter: + +**Action**|**scene\_data** +:-----:|:-----: +Single press | 0 +Long press (2s) | 1 +Release from hold | 2 +Double-press | 3 + +Let's see how this works in an automation for a Scene Master that's assigned as Node 7: + +```yaml +- id: '1234567890' + alias: Double-press Button 2 to toggle all lights + trigger: + - platform: event + event_type: zwave.scene_activated + event_data: + node_id: 7 + scene_id: 2 + scene_data: 3 + condition: [] + action: + - data: + service: light.toggle + entity_id: group.all_lights +``` + ### {% linkable_title RFWDC Cooper 5-button Scene Control Keypad %} For the RFWDC Cooper 5-button Scene Control Keypad, you may need to update the `COMMAND_CLASS_CENTRAL_SCENE` for each node in your `zwcfg` file with the following: @@ -508,4 +571,4 @@ switch: value_id: "{{ state_attr('sensor.scene_contrl_indicator','value_id') }}" value: "{{ states('sensor.scene_contrl_indicator')|int - 16 }}" ``` -{% endraw %} \ No newline at end of file +{% endraw %} From abf9b137082b3b0caba69b617900a2d5fc0ed716 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Mon, 4 Mar 2019 13:03:58 +0100 Subject: [PATCH 27/41] =?UTF-8?q?=F0=9F=9A=9C=20Merges/Redirect=20Zwave=20?= =?UTF-8?q?component=20pages=20(#8804)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/binary_sensor.zwave.markdown | 16 --- source/_components/climate.zwave.markdown | 83 ----------- source/_components/cover.zwave.markdown | 27 ---- source/_components/fan.zwave.markdown | 16 --- source/_components/light.zwave.markdown | 16 --- source/_components/lock.zwave.markdown | 24 ---- source/_components/sensor.zwave.markdown | 16 --- source/_components/switch.zwave.markdown | 16 --- source/_components/zwave.markdown | 129 +++++++++++++++++- 9 files changed, 128 insertions(+), 215 deletions(-) delete mode 100644 source/_components/binary_sensor.zwave.markdown delete mode 100644 source/_components/climate.zwave.markdown delete mode 100644 source/_components/cover.zwave.markdown delete mode 100644 source/_components/fan.zwave.markdown delete mode 100644 source/_components/light.zwave.markdown delete mode 100644 source/_components/lock.zwave.markdown delete mode 100644 source/_components/sensor.zwave.markdown delete mode 100644 source/_components/switch.zwave.markdown diff --git a/source/_components/binary_sensor.zwave.markdown b/source/_components/binary_sensor.zwave.markdown deleted file mode 100644 index 85c4cc30bba..00000000000 --- a/source/_components/binary_sensor.zwave.markdown +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: page -title: "Z-Wave Binary Sensor" -description: "Instructions on how to setup the Z-Wave binary sensors within Home Assistant." -date: 2016-02-22 07:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Binary Sensor -ha_release: 0.14 -ha_iot_class: "Local Push" ---- - -To get your Z-Wave binary sensors working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_components/climate.zwave.markdown b/source/_components/climate.zwave.markdown deleted file mode 100644 index d0cd7289f9b..00000000000 --- a/source/_components/climate.zwave.markdown +++ /dev/null @@ -1,83 +0,0 @@ ---- -layout: page -title: "Z-Wave Climate" -description: "Instructions on how to set up the Z-Wave thermostat or HVAC within Home Assistant." -date: 2016-04-03 9:52 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Climate -ha_release: 0.17 -ha_iot_class: "Local Push" ---- - -To get your Z-Wave thermostat or HVAC unit working with Home Assistant, follow the instructions for the general [Z-Wave component](/getting-started/z-wave/). - -

-Thermostats with support for fan modes or different operating modes, will be handled like a HVAC device and will also be detected as one. - -If the thermostat supports different operating modes, you will get one thermostat entity for each mode. These can be hidden with settings using the customize setting in the `configuration.yaml` file. -

- -To enable the climate component for your Z-Wave network, add the following to your `configuration.yaml` file. - -```yaml -climate: - - platform: zwave -``` - -Once enabled, any Z-Wave climate devices will be available to Home Assistant. Multiple entities may be created. The following entities are created for a Remotec ZXT-120. - -- `climate.remotec_zxt120_heating_1_id`: Allows you to control the connected device. See below for examples. -- `sensor.remotec_zxt120_temperature_38`: A sensor which returns the current temperature set on the attached device. - -## {% linkable_title Automating Z-Wave Climate Devices %} - -The following examples will instruct a Remotec ZXT-120 to turn the attached device mode to Heating, and set the temperature at 24 degrees after 8pm. Add it to `automation.yaml`. - -```yaml -automation: - - alias: Turn on Heater at 8pm - trigger: - - platform: time - at: "20:00:00" - action: - - service: climate.set_operation_mode - data: - entity_id: climate.remotec_zxt120_heating_1_id - operation_mode: Heat - - service: climate.set_temperature - data: - entity_id: climate.remotec_zxt120_heating_1_39 - temperature: 24 -``` - -Generally, in Home Assistant, you can use the `homeassistant/turn_off` service to turn devices off. For the Remotec ZXT-120, you must instead make a service call like the following. - -```yaml -automation: - - alias: Turn off Heater at 9pm - trigger: - - platform: time - at: "21:00:00" - action: - - service: climate.set_operation_mode - data: - entity_id: climate.remotec_zxt120_heating_1_id - operation_mode: 'Off' -``` - -**Note:** In the example above, the word `Off` is encased in single quotes to be valid YAML. - -## {% linkable_title Test if it works %} - -A simple way to test if your Z-Wave climate device is working is to use service developer tool icon **Services** from the **Developer Tools**. Choose the applicable Climate service from the list of **Available services:** and enter something like the sample below into the **Service Data** field and then press **CALL SERVICE**. - -```json -{ - "entity_id": "climate.remotec_zxt120_heating_1_id", - "operation_mode": "Heat" -} -``` diff --git a/source/_components/cover.zwave.markdown b/source/_components/cover.zwave.markdown deleted file mode 100644 index 53477e1e005..00000000000 --- a/source/_components/cover.zwave.markdown +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: page -title: "Z-Wave Cover" -description: "Instructions on how to setup the Z-Wave covers within Home Assistant." -date: 2016-12-18 19:41 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Cover -ha_release: 0.23 -ha_iot_class: "Local Push" ---- - -Z-Wave garage doors, blinds, and roller shutters are supported as cover in Home Assistant. - -To get your Z-Wave covers working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). - -If you discover that you need to [invert the operation](/docs/z-wave/installation/#invert_openclose_buttons) of open/close for a particular device, you may change this behavior in your Z-Wave section of your `configuration.yaml` file as follows: - -```yaml -zwave: - device_config: - cover.my_cover: - invert_openclose_buttons: true -``` diff --git a/source/_components/fan.zwave.markdown b/source/_components/fan.zwave.markdown deleted file mode 100644 index 4e83a0b8a58..00000000000 --- a/source/_components/fan.zwave.markdown +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: page -title: "Z-Wave Fan" -description: "Instructions on how to setup the Z-Wave Fans within Home Assistant." -date: 2017-05-25 17:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_release: 0.38 -ha_category: Fan -ha_iot_class: "Local Push" ---- - -To get your Z-Wave fans working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_components/light.zwave.markdown b/source/_components/light.zwave.markdown deleted file mode 100644 index 891f63e8867..00000000000 --- a/source/_components/light.zwave.markdown +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: page -title: "Z-Wave Light" -description: "Instructions on how to setup the Z-Wave lights within Home Assistant." -date: 2015-11-11 13:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Light -ha_release: pre 0.7 -ha_iot_class: "Local Push" ---- - -To get your Z-Wave lights working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_components/lock.zwave.markdown b/source/_components/lock.zwave.markdown deleted file mode 100644 index ba25eacd6c0..00000000000 --- a/source/_components/lock.zwave.markdown +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: page -title: "Z-Wave Lock" -description: "Instructions on how to setup the Z-Wave Locks within Home Assistant." -date: 2016-05-07 08:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Lock -ha_release: 0.19 -ha_iot_class: "Local Push" ---- - -To get your Z-Wave locks working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). - -Z-Wave locks will expose three services under the lock domain to manage usercodes if the lock supports it: - -| Service | Description | -| ------- | ----------- | -| clear_usercode | Clears a usercode at code_slot X. Valid code_slots are 1-254, but max is defined by the lock. | -| get_usercode | Get a usercode from the lock at code_slot. Valid code_slots are 1-254, but max is defined by the lock. | -| set_usercode | Sets usercode to X at code_slot Y. Valid usercodes are at least 4 digits, and max defined by the lock. | diff --git a/source/_components/sensor.zwave.markdown b/source/_components/sensor.zwave.markdown deleted file mode 100644 index 70fba841c58..00000000000 --- a/source/_components/sensor.zwave.markdown +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: page -title: "Z-Wave Sensor" -description: "Instructions on how to setup the Z-Wave sensors within Home Assistant." -date: 2015-11-15 13:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Sensor -ha_release: pre 0.7 -ha_iot_class: "Local Push" ---- - -To get your Z-Wave sensors working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_components/switch.zwave.markdown b/source/_components/switch.zwave.markdown deleted file mode 100644 index 9525daed351..00000000000 --- a/source/_components/switch.zwave.markdown +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: page -title: "Z-Wave Switch" -description: "Instructions on how to setup the Z-Wave switches within Home Assistant." -date: 2015-11-15 13:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: z-wave.png -ha_category: Switch -ha_release: pre 0.7 -ha_iot_class: "Local Push" ---- - -To get your Z-Wave switches working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). diff --git a/source/_components/zwave.markdown b/source/_components/zwave.markdown index 33c11eeccd3..afdf4538fe4 100644 --- a/source/_components/zwave.markdown +++ b/source/_components/zwave.markdown @@ -8,13 +8,42 @@ comments: false sharing: true footer: true logo: z-wave.png -ha_category: Hub +ha_category: + - Hub + - Binary Sensor + - Climate + - Cover + - Fan + - Light + - Lock + - Sensor + - Switch featured: true ha_iot_class: "Local Push" +redirect_from: + - /components/binary_sensor.zwave/ + - /components/climate.zwave/ + - /components/cover.zwave/ + - /components/fan.zwave/ + - /components/light.zwave/ + - /components/lock.zwave/ + - /components/sensor.zwave/ + - /components/switch.zwave/ --- The [Z-Wave](http://www.z-wave.com/) integration for Home Assistant allows you to observe and control connected Z-Wave devices. Please see the [Z-Wave getting started section](/docs/z-wave/) for in-depth documentation on how to use and setup the Z-Wave component. +There is currently support for the following device types within Home Assistant: + +- Binary Sensor +- [Climate](#climate) +- [Cover](#cover) +- Fan +- Light +- [Lock](#lock) +- Sensor +- Switch + ## {% linkable_title Configuration %} If you have setup the requirements, then add the following entry `configuration.yaml` file: @@ -23,3 +52,101 @@ If you have setup the requirements, then add the following entry `configuration. # Example configuration.yaml entry zwave: ``` + +## {% linkable_title Climate %} + +To get your Z-Wave thermostat or HVAC unit working with Home Assistant, follow the instructions for the general [Z-Wave component](/getting-started/z-wave/). + +

+Thermostats with support for fan modes or different operating modes, will be handled like a HVAC device and will also be detected as one. + +If the thermostat supports different operating modes, you will get one thermostat entity for each mode. These can be hidden with settings using the customize setting in the `configuration.yaml` file. +

+ +To enable the climate component for your Z-Wave network, add the following to your `configuration.yaml` file. + +```yaml +climate: + - platform: zwave +``` + +Once enabled, any Z-Wave climate devices will be available to Home Assistant. Multiple entities may be created. The following entities are created for a Remotec ZXT-120. + +- `climate.remotec_zxt120_heating_1_id`: Allows you to control the connected device. See below for examples. +- `sensor.remotec_zxt120_temperature_38`: A sensor which returns the current temperature set on the attached device. + +### {% linkable_title Automating Z-Wave Climate Devices %} + +The following examples will instruct a Remotec ZXT-120 to turn the attached device mode to Heating, and set the temperature at 24 degrees after 8pm. Add it to `automation.yaml`. + +```yaml +automation: + - alias: Turn on Heater at 8pm + trigger: + - platform: time + at: "20:00:00" + action: + - service: climate.set_operation_mode + data: + entity_id: climate.remotec_zxt120_heating_1_id + operation_mode: Heat + - service: climate.set_temperature + data: + entity_id: climate.remotec_zxt120_heating_1_39 + temperature: 24 +``` + +Generally, in Home Assistant, you can use the `homeassistant/turn_off` service to turn devices off. For the Remotec ZXT-120, you must instead make a service call like the following. + +```yaml +automation: + - alias: Turn off Heater at 9pm + trigger: + - platform: time + at: "21:00:00" + action: + - service: climate.set_operation_mode + data: + entity_id: climate.remotec_zxt120_heating_1_id + operation_mode: 'Off' +``` + +**Note:** In the example above, the word `Off` is encased in single quotes to be valid YAML. + +### {% linkable_title Test if it works %} + +A simple way to test if your Z-Wave climate device is working is to use service developer tool icon **Services** from the **Developer Tools**. Choose the applicable Climate service from the list of **Available services:** and enter something like the sample below into the **Service Data** field and then press **CALL SERVICE**. + +```json +{ + "entity_id": "climate.remotec_zxt120_heating_1_id", + "operation_mode": "Heat" +} +``` + +## {% linkable_title Cover %} + +Z-Wave garage doors, blinds, and roller shutters are supported as cover in Home Assistant. + +To get your Z-Wave covers working with Home Assistant, follow the instructions for the general [Z-Wave component](#configuration). + +If you discover that you need to [invert the operation](/docs/z-wave/installation/#invert_openclose_buttons) of open/close for a particular device, you may change this behavior in your Z-Wave section of your `configuration.yaml` file as follows: + +```yaml +zwave: + device_config: + cover.my_cover: + invert_openclose_buttons: true +``` + +## {% linkable_title Lock %} + +To get your Z-Wave locks working with Home Assistant, follow the instructions for the general [Z-Wave component](#configuration). + +Z-Wave locks will expose three services under the lock domain to manage usercodes if the lock supports it: + +| Service | Description | +| ------- | ----------- | +| clear_usercode | Clears a usercode at code_slot X. Valid code_slots are 1-254, but max is defined by the lock. | +| get_usercode | Get a usercode from the lock at code_slot. Valid code_slots are 1-254, but max is defined by the lock. | +| set_usercode | Sets usercode to X at code_slot Y. Valid usercodes are at least 4 digits, and max defined by the lock. | \ No newline at end of file From 552e6abf9c95c5bea81dcb77d5fa2be48421fc14 Mon Sep 17 00:00:00 2001 From: "Simon L. B. Nielsen" Date: Mon, 4 Mar 2019 12:10:12 +0000 Subject: [PATCH 28/41] Expand Google pub/sub topic config description (#8798) Make it more clear that the user should use the short relative pubsub name like "mytopic" and not the longer like "projects/myproject/topics/mytopic". --- source/_components/google_pubsub.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_pubsub.markdown b/source/_components/google_pubsub.markdown index c7738613a31..6cf43e12793 100644 --- a/source/_components/google_pubsub.markdown +++ b/source/_components/google_pubsub.markdown @@ -45,7 +45,7 @@ project_id: required: true type: string topic_name: - description: The Pub/Sub topic name. + description: The Pub/Sub [relative](https://cloud.google.com/pubsub/docs/admin#resource_names) topic name (looks like `hass`). required: true type: string credentials_json: From d37a87908c0c7b0bfcafc36575bb7eff0a95b71f Mon Sep 17 00:00:00 2001 From: emontnemery Date: Mon, 4 Mar 2019 23:28:42 +0100 Subject: [PATCH 29/41] Update camera.mqtt.markdown (#8791) --- source/_components/camera.mqtt.markdown | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/source/_components/camera.mqtt.markdown b/source/_components/camera.mqtt.markdown index 1f79e16cc7c..978243247dc 100644 --- a/source/_components/camera.mqtt.markdown +++ b/source/_components/camera.mqtt.markdown @@ -41,4 +41,33 @@ unique_id: description: An ID that uniquely identifies this camera. If two cameras have the same unique ID Home Assistant will raise an exception. required: false type: string +device: + description: "Information about the device this camera is a part of to tie it into the [device registry](https://developers.home-assistant.io/docs/en/device_registry_index.html). Only works through [MQTT discovery](/docs/mqtt/discovery/) and when [`unique_id`](#unique_id) is set." + required: false + type: map + keys: + identifiers: + description: 'A list of IDs that uniquely identify the device. For example a serial number.' + required: false + type: list, string + connections: + description: 'A list of connections of the device to the outside world as a list of tuples `[connection_type, connection_identifier]`. For example the MAC address of a network interface: `"connections": ["mac", "02:5b:26:a8:dc:12"]`.' + required: false + type: list + manufacturer: + description: The manufacturer of the device. + required: false + type: string + model: + description: The model of the device. + required: false + type: string + name: + description: The name of the device. + required: false + type: string + sw_version: + description: The firmware version of the device. + required: false + type: string {% endconfiguration %} From 666b3a0d0c345f0a441c1dd4fff650c03c27a610 Mon Sep 17 00:00:00 2001 From: Victor Vostrikov <1998617+gorynychzmey@users.noreply.github.com> Date: Tue, 5 Mar 2019 22:56:04 +0100 Subject: [PATCH 30/41] Add example of choice of sources for Person (#8779) * Added description for source priority. * Changed description of source priority. * Added example of sources' choice. * Corrected example * Added TL;DR to example * Updated TL:DR * Added hint for consider_home --- source/_components/person.markdown | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/source/_components/person.markdown b/source/_components/person.markdown index 6a0782635c8..37203c01855 100644 --- a/source/_components/person.markdown +++ b/source/_components/person.markdown @@ -13,7 +13,27 @@ ha_qa_scale: internal ha_release: 0.88 --- -The person component allows to connect device tracker entities to one or more person entities. The last state update of a connected device tracker will set the state of the person. For example if you connect your router and your OwnTracks device as trackers to your person, the last state update from either the router or your OwnTracks device will set the state of your person. +The person component allows to connect device tracker entities to one or more person entities. The state updates of a connected device trackers will set the state of the person. When multiple device tracers used, the state of berson will be determined next way: + +1. If there are stationary sources (which type is not 'gps') presenting status 'home', than latest of this sources will be taken. +2. If there are sources of type 'gps', than latest of this sources will be taken. +3. Otherwise will be taken latest source with status 'not_home'. + +Lets say for example, that you have 3 trackers: 'tracker_gps', 'tracker_router' and 'tracker_ble'. + +1. You're at home, all 3 devices shows status 'home' - status of your Person entity will be 'home' with source 'tracker_router' or 'tracker_ble', whatever was latest. +2. You're going out. 'tracker_gps' shows status 'not_home', but other two trackers show status 'home' according to their setting 'consider_home'. You are still considered to be at home. +3. After some time both stationary trackers show status 'not_home'. Now your Person entity has status 'not_home' with source 'tracker_gps'. +4. While you are outside your home, your Home Assistant was suddenly restarted. Until 'tracker_gps' receives update, your status will be determined by stationary tracker, which gets latest update after restart. Obviously the status will be 'not_home'. +5. Than you're going into area marked as 'zone1', 'tracker_gps' is getting update, and now your status is 'zone1' with source 'tracker_gps'. +6. You've returned home, and your mobile device has connected to router, but GPS update yet didn't occur. Your status will be 'home' with source 'tracker_router'. +7. After GPS update occurs, your status still be 'home' with source 'tracker_router' or 'tracker_ble', whatever updates later. + +TL;DR: When you're at home, your position is determined firstly by stationary trackers (if any) and then by GPS. When you're outside your home, your position is determined firstly by GPS and then by stationary trackers. + + +**Hint**: When you use multiple device trackers together, especially stationary and GPS trackers, it's advisable to set `consider_home`for stationary trackers as low as possible. + You can manage persons via the UI from the person page inside the configuration panel or via `YAML`. From fd7f78565205b2017be3e23d211fa5f8ac1325d0 Mon Sep 17 00:00:00 2001 From: yosilevy <37745463+yosilevy@users.noreply.github.com> Date: Mon, 4 Mar 2019 19:00:12 +0200 Subject: [PATCH 31/41] Added conditional element documentation (#8795) * Added conditional element documentation Will add an example later on * Fixed required * Added conditional example * Update picture-elements.markdown --- source/_lovelace/picture-elements.markdown | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/source/_lovelace/picture-elements.markdown b/source/_lovelace/picture-elements.markdown index 997bccd14c3..38aac6b58e9 100644 --- a/source/_lovelace/picture-elements.markdown +++ b/source/_lovelace/picture-elements.markdown @@ -397,6 +397,38 @@ style: default: "position: absolute, transform: translate(-50%, -50%)" {% endconfiguration %} +### {% linkable_title Conditional Element %} + +Much like the Conditional card, this element will let you show its sub-elements based on entity states. + +{% configuration %} +type: + required: true + description: conditional + type: string +conditions: + required: true + description: List of entity IDs and matching states. + type: list + keys: + entity: + required: true + description: HA entity ID. + type: string + state: + required: false + description: Entity state is equal to this value.* + type: string + state_not: + required: false + description: Entity state is unequal to this value.* + type: string +elements: + required: true + description: One or more elements of any type to show when conditions are met. See below for an example. + type: list +{% endconfiguration %} + ### {% linkable_title Custom Elements %} {% configuration %} @@ -554,3 +586,26 @@ elements: left: 75% width: 5% ``` + +## {% linkable_title Conditional Example %} + +```yaml +type: picture-elements +image: /local/House.png +elements: + # conditionally show TV off button shortcut when dad's away and daughter is home + - type: conditional + conditions: + - entity: sensor.presence_daughter + state: 'home' + - entity: sensor.presence_dad + state: 'not_home' + elements: + - type: state-icon + entity: switch.tv + tap_action: + action: toggle + style: + top: 47% + left: 42% +``` From 5832ced7b8e1fe58302d9c06344da6c97b3ba193 Mon Sep 17 00:00:00 2001 From: Phil Cole Date: Mon, 4 Mar 2019 12:13:45 +0000 Subject: [PATCH 32/41] Add nissan_leaf.start_charge service and doc fixes. (#8801) --- source/_components/nissan_leaf.markdown | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/source/_components/nissan_leaf.markdown b/source/_components/nissan_leaf.markdown index 5a1c4ce801a..4650df72481 100644 --- a/source/_components/nissan_leaf.markdown +++ b/source/_components/nissan_leaf.markdown @@ -15,10 +15,10 @@ ha_iot_class: "Cloud Polling" The `nissan_leaf` component offers integration with the [NissanConnect EV](http://youplus.nissan.co.uk/GB/en/YouPlus/ConnectedServices.html) cloud service. NissanConnect EV was previously known as Nissan Carwings. It offers: -* sensors for the battery status and range +* sensors for the battery status, range and charging status * a switch to start and stop the climate control -* a switch to start the car charging (cannot be stopped remotely - API limitation) * a device tracker to locate the car (only on later Leaf models) +* services to request updates from the car and to request the car starts charging. ## {% linkable_title Configuration %} @@ -48,7 +48,7 @@ nissan_connect: description: If your car has the updated head unit (NissanConnect rather than Carwings) then the location can be aquired and exposed via a device tracker. If you have a pre-2014 24 kWh Leaf then you will have Carwings and this should be set to false. required: false type: boolean -scan_interval: +update_interval: description: The interval between updates if the climate control is off and the car is not charging. Set in any time unit (e.g. minutes, hours, days!). required: false default: 1 hour @@ -76,7 +76,7 @@ nissan_leaf: password: "YOUR_PASSWORD" region: "YOUR_REGION" nissan_connect: true - scan_interval: + update_interval: hours: 1 update_interval_charging: minutes: 15 @@ -85,9 +85,19 @@ nissan_leaf: force_miles: true ``` +## {% linkable_title Starting a Charge %} + +You can use the `nissan_leaf.start_charge` service to send a request to the Nissan servers to start a charge. The car must be plugged in! The service requires you to provide the vehicle identification number (VIN) as a parameter. You can see the VIN on the attributes of all the entities created by this component, except the device_tracker. + +```yaml +- service: nissan_leaf.start_charge + data: + vin: '1HGBH41JXMN109186' # replace +``` + ## {% linkable_title Updating on-demand using Automation %} -You can also use the `nissan_leaf.update` service to request an on-demand update. To update almost exclusively via the service set the `update_interval` to a high value in the component configuration. The service requires you to provide the vehicle identification number (VIN) as a parameter. You can see the VIN on the attributes of all the entities created by this component, except the device_tracker. +You can also use the `nissan_leaf.update` service to request an on-demand update. To update almost exclusively via the service set the `update_interval` to a high value in the component configuration. The service requests the VIN number as described above. ```yaml - id: update_when_driver_not_home @@ -111,7 +121,9 @@ You can also use the `nissan_leaf.update` service to request an on-demand update * The update interval has a minimum of two minutes. * Requesting updates uses a small amount of power from the 12 V battery. The 12 V battery charges from the main traction battery when the car is not plugged in. If the car is left plugged in for a long time, or if the main traction battery is very low then the 12 V battery may gradually discharge. A low update interval may cause the 12 V battery to become flat. When the 12 V battery is flat the car will not start. _Do not set the update interval too low. Use at your own risk._ * This component communicates with the Nissan Servers which then communicate with the car. The communication between the car and the Nissan Servers is very slow, and takes up to five minutes to get information from the car, therefore the default polling interval is set to one hour to not overwhelm the connection. -* Responses from the Nissan servers are received separately for the battery/range, climate control and location. The `updated_on` attribute will show the last time the data was retrieved from the server. There are separate attributes for when the `next_update` is scheduled, and if an `update_inprogress`. The `nissan_leaf.update` service will reset the `next_update` attribute. +* Responses from the Nissan servers are received separately for the battery/range, climate control and location. The `updated_on` attribute will show the last time the data was retrieved from the server. There are separate attributes for when the `next_update` is scheduled, and to indicate if `update_in_progress`. The `nissan_leaf.update` service will reset the `next_update` attribute. +* The Nissan APIs do not allow charging to be stopped remotely. +* The Nissan servers have a history of being unstable, therefore please confirm that the official Nissan Leaf app/website is working correctly before reporting bugs. Please report bugs using the following logger configuration. From 5af50555596dafaad2b29d623bf4fbdc290e6d24 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 5 Mar 2019 14:07:57 -0800 Subject: [PATCH 33/41] Update notes --- source/_posts/2019-03-13-release-89.markdown | 104 +++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/source/_posts/2019-03-13-release-89.markdown b/source/_posts/2019-03-13-release-89.markdown index 4bb59919dc0..b3be091d8ee 100644 --- a/source/_posts/2019-03-13-release-89.markdown +++ b/source/_posts/2019-03-13-release-89.markdown @@ -32,6 +32,7 @@ og_image: /images/blog/2019-03-release-89/components.png - Rewrite of Toon component ([@frenck] - [#21186]) ([toon docs]) (breaking change) (new-platform) - Add SmartThings Scene platform ([@andrewsayre] - [#21405]) ([smartthings docs]) (new-platform) - Reddit Sensor ([@ljmerza] - [#21344]) ([sensor.reddit docs]) (new-platform) +- mobile_app component ([@robbiet480] - [#21475]) ([mobile_app docs]) (beta fix) (new-platform) ## {% linkable_title New Features %} @@ -64,6 +65,38 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add config for trusted networks auth provider ([@awarecan] - [#21111]) (breaking change) - HomeMatic: Add error-attribute ([@dagobert] - [#21009]) ([homematic docs]) (breaking change) +## {% linkable_title Beta Fixes %} + +- Add PLATFORM_SCHEMA_BASE to telegram_bot component ([@veleek] - [#21155]) ([telegram_bot docs]) (beta fix) +- Add watchdog to Ambient PWS ([@bachya] - [#21507]) ([ambient_station docs]) (beta fix) +- Improve new Sonos snapshot/restore ([@amelchio] - [#21509]) ([sonos docs]) (beta fix) +- Fix lint ([@balloob] - [#21520]) ([person docs]) ([sensor.airvisual docs]) (beta fix) +- Only use a single store instance ([@balloob] - [#21521]) ([frontend docs]) (beta fix) +- Allow skip-pip applied to HA core ([@awarecan] - [#21527]) (beta fix) +- Updated variable name for readability ([@gorynychzmey] - [#21528]) ([person docs]) (beta fix) +- Add missing retain option to mqtt.climate configuration schema ([@emontnemery] - [#21536]) ([mqtt docs]) (beta fix) +- Fix warning ([@awarecan] - [#21538]) ([http docs]) (beta fix) +- Fix incorrect pyairvisual call ([@bachya] - [#21542]) ([sensor.airvisual docs]) (beta fix) +- mobile_app component ([@robbiet480] - [#21475]) ([mobile_app docs]) (beta fix) (new-platform) +- Make time trigger data trigger.now local ([@emontnemery] - [#21544]) (beta fix) +- Bump zigpy-deconz ([@damarco] - [#21566]) ([zha docs]) (beta fix) +- Re-thrown exception occurred in the blocking service call ([@awarecan] - [#21573]) ([websocket_api docs]) (beta fix) +- Upgrade PyXiaomiGateway library ([@Danielhiversen] - [#21582]) ([xiaomi_aqara docs]) (beta fix) +- Log exception occurred in WS service call command ([@awarecan] - [#21584]) ([websocket_api docs]) (beta fix) +- Word the tplink deprecation warning more strongly ([@amelchio] - [#21586]) ([tplink docs]) (beta fix) +- Handle when installed app has already been removed ([@andrewsayre] - [#21595]) ([smartthings docs]) (beta fix) +- Resolve race condition when HA auth provider is loading ([@awarecan] - [#21619]) (beta fix) +- Upgrade pysonos to 0.0.8 ([@amelchio] - [#21624]) ([sonos docs]) (beta fix) +- Fix calc next ([@balloob] - [#21630]) (beta fix) +- Cast displaytime to int for JSON RPC ([@GGeezes] - [#21649]) ([notify docs]) (beta fix) +- :shirt: Corrects unit of measurement symbol for Watt ([@frenck] - [#21654]) ([toon docs]) (beta fix) +- Rename Google Assistant evenets ([@balloob] - [#21655]) ([google_assistant docs]) (beta fix) +- :ambulance: Fixes Toon doing I/O in coroutines ([@frenck] - [#21657]) ([toon docs]) (beta fix) +- Upgrade toonapilib to 3.1.0 ([@frenck] - [#21661]) ([toon docs]) (beta fix) +- Avoid recorder thread crashing ([@balloob] - [#21668]) (beta fix) +- check we have a tb ([@dgomes] - [#21670]) ([system_log docs]) (beta fix) +- Fix ADS race condition ([@carstenschroeder] - [#21677]) ([ads docs]) (beta fix) + ## {% linkable_title All changes %} - Météo-France platform for the weather component ([@victorcerutti] - [#18404]) ([sensor.meteo_france docs]) ([weather.meteo_france docs]) (new-platform) @@ -218,6 +251,35 @@ Experiencing issues introduced by this release? Please report them in our [issue - ness_alarm: Bump nessclient version to 0.9.13 ([@nickw444] - [#21466]) ([ness_alarm docs]) - Bump ihc to 2.3.0 ([@msvinth] - [#21494]) ([ihc docs]) - Changed source priority for Person ([@gorynychzmey] - [#21479]) +- Add PLATFORM_SCHEMA_BASE to telegram_bot component ([@veleek] - [#21155]) ([telegram_bot docs]) (beta fix) +- Add watchdog to Ambient PWS ([@bachya] - [#21507]) ([ambient_station docs]) (beta fix) +- Improve new Sonos snapshot/restore ([@amelchio] - [#21509]) ([sonos docs]) (beta fix) +- Fix lint ([@balloob] - [#21520]) ([person docs]) ([sensor.airvisual docs]) (beta fix) +- Only use a single store instance ([@balloob] - [#21521]) ([frontend docs]) (beta fix) +- Allow skip-pip applied to HA core ([@awarecan] - [#21527]) (beta fix) +- Updated variable name for readability ([@gorynychzmey] - [#21528]) ([person docs]) (beta fix) +- Add missing retain option to mqtt.climate configuration schema ([@emontnemery] - [#21536]) ([mqtt docs]) (beta fix) +- Fix warning ([@awarecan] - [#21538]) ([http docs]) (beta fix) +- Fix incorrect pyairvisual call ([@bachya] - [#21542]) ([sensor.airvisual docs]) (beta fix) +- mobile_app component ([@robbiet480] - [#21475]) ([mobile_app docs]) (beta fix) (new-platform) +- Make time trigger data trigger.now local ([@emontnemery] - [#21544]) (beta fix) +- Bump zigpy-deconz ([@damarco] - [#21566]) ([zha docs]) (beta fix) +- Re-thrown exception occurred in the blocking service call ([@awarecan] - [#21573]) ([websocket_api docs]) (beta fix) +- Upgrade PyXiaomiGateway library ([@Danielhiversen] - [#21582]) ([xiaomi_aqara docs]) (beta fix) +- Log exception occurred in WS service call command ([@awarecan] - [#21584]) ([websocket_api docs]) (beta fix) +- Word the tplink deprecation warning more strongly ([@amelchio] - [#21586]) ([tplink docs]) (beta fix) +- Handle when installed app has already been removed ([@andrewsayre] - [#21595]) ([smartthings docs]) (beta fix) +- Resolve race condition when HA auth provider is loading ([@awarecan] - [#21619]) (beta fix) +- Upgrade pysonos to 0.0.8 ([@amelchio] - [#21624]) ([sonos docs]) (beta fix) +- Fix calc next ([@balloob] - [#21630]) (beta fix) +- Cast displaytime to int for JSON RPC ([@GGeezes] - [#21649]) ([notify docs]) (beta fix) +- :shirt: Corrects unit of measurement symbol for Watt ([@frenck] - [#21654]) ([toon docs]) (beta fix) +- Rename Google Assistant evenets ([@balloob] - [#21655]) ([google_assistant docs]) (beta fix) +- :ambulance: Fixes Toon doing I/O in coroutines ([@frenck] - [#21657]) ([toon docs]) (beta fix) +- Upgrade toonapilib to 3.1.0 ([@frenck] - [#21661]) ([toon docs]) (beta fix) +- Avoid recorder thread crashing ([@balloob] - [#21668]) (beta fix) +- check we have a tb ([@dgomes] - [#21670]) ([system_log docs]) (beta fix) +- Fix ADS race condition ([@carstenschroeder] - [#21677]) ([ads docs]) (beta fix) [#18091]: https://github.com/home-assistant/home-assistant/pull/18091 [#18404]: https://github.com/home-assistant/home-assistant/pull/18404 @@ -280,6 +342,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#21150]: https://github.com/home-assistant/home-assistant/pull/21150 [#21153]: https://github.com/home-assistant/home-assistant/pull/21153 [#21154]: https://github.com/home-assistant/home-assistant/pull/21154 +[#21155]: https://github.com/home-assistant/home-assistant/pull/21155 [#21156]: https://github.com/home-assistant/home-assistant/pull/21156 [#21157]: https://github.com/home-assistant/home-assistant/pull/21157 [#21162]: https://github.com/home-assistant/home-assistant/pull/21162 @@ -362,18 +425,47 @@ Experiencing issues introduced by this release? Please report them in our [issue [#21466]: https://github.com/home-assistant/home-assistant/pull/21466 [#21471]: https://github.com/home-assistant/home-assistant/pull/21471 [#21474]: https://github.com/home-assistant/home-assistant/pull/21474 +[#21475]: https://github.com/home-assistant/home-assistant/pull/21475 [#21476]: https://github.com/home-assistant/home-assistant/pull/21476 [#21478]: https://github.com/home-assistant/home-assistant/pull/21478 [#21479]: https://github.com/home-assistant/home-assistant/pull/21479 [#21485]: https://github.com/home-assistant/home-assistant/pull/21485 [#21486]: https://github.com/home-assistant/home-assistant/pull/21486 [#21494]: https://github.com/home-assistant/home-assistant/pull/21494 +[#21507]: https://github.com/home-assistant/home-assistant/pull/21507 +[#21509]: https://github.com/home-assistant/home-assistant/pull/21509 [#21510]: https://github.com/home-assistant/home-assistant/pull/21510 [#21511]: https://github.com/home-assistant/home-assistant/pull/21511 [#21512]: https://github.com/home-assistant/home-assistant/pull/21512 +[#21520]: https://github.com/home-assistant/home-assistant/pull/21520 +[#21521]: https://github.com/home-assistant/home-assistant/pull/21521 +[#21527]: https://github.com/home-assistant/home-assistant/pull/21527 +[#21528]: https://github.com/home-assistant/home-assistant/pull/21528 +[#21536]: https://github.com/home-assistant/home-assistant/pull/21536 +[#21538]: https://github.com/home-assistant/home-assistant/pull/21538 +[#21542]: https://github.com/home-assistant/home-assistant/pull/21542 +[#21544]: https://github.com/home-assistant/home-assistant/pull/21544 +[#21566]: https://github.com/home-assistant/home-assistant/pull/21566 +[#21573]: https://github.com/home-assistant/home-assistant/pull/21573 +[#21582]: https://github.com/home-assistant/home-assistant/pull/21582 +[#21584]: https://github.com/home-assistant/home-assistant/pull/21584 +[#21586]: https://github.com/home-assistant/home-assistant/pull/21586 +[#21595]: https://github.com/home-assistant/home-assistant/pull/21595 +[#21619]: https://github.com/home-assistant/home-assistant/pull/21619 +[#21624]: https://github.com/home-assistant/home-assistant/pull/21624 +[#21630]: https://github.com/home-assistant/home-assistant/pull/21630 +[#21649]: https://github.com/home-assistant/home-assistant/pull/21649 +[#21654]: https://github.com/home-assistant/home-assistant/pull/21654 +[#21655]: https://github.com/home-assistant/home-assistant/pull/21655 +[#21657]: https://github.com/home-assistant/home-assistant/pull/21657 +[#21661]: https://github.com/home-assistant/home-assistant/pull/21661 +[#21668]: https://github.com/home-assistant/home-assistant/pull/21668 +[#21670]: https://github.com/home-assistant/home-assistant/pull/21670 +[#21677]: https://github.com/home-assistant/home-assistant/pull/21677 [@Adminiuga]: https://github.com/Adminiuga [@Danielhiversen]: https://github.com/Danielhiversen [@Dullage]: https://github.com/Dullage +[@GGeezes]: https://github.com/GGeezes [@GidoHakvoort]: https://github.com/GidoHakvoort [@JBassett]: https://github.com/JBassett [@JeffLIrion]: https://github.com/JeffLIrion @@ -401,6 +493,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@balloob]: https://github.com/balloob [@bauerj]: https://github.com/bauerj [@blackray12]: https://github.com/blackray12 +[@carstenschroeder]: https://github.com/carstenschroeder [@dagobert]: https://github.com/dagobert [@damarco]: https://github.com/damarco [@danielperna84]: https://github.com/danielperna84 @@ -410,6 +503,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@dmulcahey]: https://github.com/dmulcahey [@dshokouhi]: https://github.com/dshokouhi [@elupus]: https://github.com/elupus +[@emontnemery]: https://github.com/emontnemery [@fabaff]: https://github.com/fabaff [@fbradyirl]: https://github.com/fbradyirl [@filcole]: https://github.com/filcole @@ -448,6 +542,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@thibmaek]: https://github.com/thibmaek [@tiste]: https://github.com/tiste [@tmechen]: https://github.com/tmechen +[@veleek]: https://github.com/veleek [@victorcerutti]: https://github.com/victorcerutti [@w1ll1am23]: https://github.com/w1ll1am23 [@zewelor]: https://github.com/zewelor @@ -466,6 +561,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [deconz docs]: /components/deconz/ [device_tracker docs]: /components/device_tracker/ [esphome docs]: /components/esphome/ +[frontend docs]: /components/frontend/ [google_assistant docs]: /components/google_assistant/ [googlehome docs]: /components/googlehome/ [history docs]: /components/history/ @@ -490,12 +586,16 @@ Experiencing issues introduced by this release? Please report them in our [issue [media_player.panasonic_viera docs]: /components/media_player.panasonic_viera/ [media_player.philips_js docs]: /components/media_player.philips_js/ [meteo_france docs]: /components/meteo_france/ +[mobile_app docs]: /components/mobile_app/ [modbus docs]: /components/modbus/ +[mqtt docs]: /components/mqtt/ [neato docs]: /components/neato/ [ness_alarm docs]: /components/ness_alarm/ [netatmo docs]: /components/netatmo/ [nissan_leaf docs]: /components/nissan_leaf/ +[notify docs]: /components/notify/ [owlet docs]: /components/owlet/ +[person docs]: /components/person/ [point docs]: /components/point/ [prometheus docs]: /components/prometheus/ [ps4 docs]: /components/ps4/ @@ -538,7 +638,9 @@ Experiencing issues introduced by this release? Please report them in our [issue [switch.switchbot docs]: /components/switch.switchbot/ [switch.switchmate docs]: /components/switch.switchmate/ [switch.tplink docs]: /components/switch.tplink/ +[system_log docs]: /components/system_log/ [tahoma docs]: /components/tahoma/ +[telegram_bot docs]: /components/telegram_bot/ [tibber docs]: /components/tibber/ [toon docs]: /components/toon/ [tplink docs]: /components/tplink/ @@ -549,4 +651,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [weather.met docs]: /components/weather.met/ [weather.meteo_france docs]: /components/weather.meteo_france/ [weather.openweathermap docs]: /components/weather.openweathermap/ +[websocket_api docs]: /components/websocket_api/ +[xiaomi_aqara docs]: /components/xiaomi_aqara/ [zha docs]: /components/zha/ From 265ce9a8a4d66eea706a6d52b7a1ab302eef833b Mon Sep 17 00:00:00 2001 From: akasma74 Date: Wed, 6 Mar 2019 03:26:19 +0000 Subject: [PATCH 34/41] Update entities.markdown (#8834) clarify difference between entity and entity object --- source/_lovelace/entities.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_lovelace/entities.markdown b/source/_lovelace/entities.markdown index d5f3ebcf7be..4dcb4ed2e46 100644 --- a/source/_lovelace/entities.markdown +++ b/source/_lovelace/entities.markdown @@ -38,7 +38,7 @@ theme: ## {% linkable_title Options For Entities %} -If you define entities as objects instead of strings, you can add more customization and configuration: +If you define entities as objects instead of strings (by adding `entity:` before entity ID), you can add more customization and configuration: {% configuration %} entity: From 48e46da980e75c65db5558d6a2492e99254885fe Mon Sep 17 00:00:00 2001 From: Courtenay Date: Wed, 6 Mar 2019 09:51:50 -0800 Subject: [PATCH 35/41] update of breaking change paragraphs (#8837) * update of breaking change paragraphs I did my best :) Thanks @balloob for the coaching! * fixed initial description of smartthings change * picky picky fixes * Update 2019-03-13-release-89.markdown --- source/_posts/2019-03-13-release-89.markdown | 41 ++++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/source/_posts/2019-03-13-release-89.markdown b/source/_posts/2019-03-13-release-89.markdown index b3be091d8ee..1b3fef91194 100644 --- a/source/_posts/2019-03-13-release-89.markdown +++ b/source/_posts/2019-03-13-release-89.markdown @@ -12,6 +12,23 @@ og_image: /images/blog/2019-03-release-89/components.png --- +## {% linkable_title Noteworthy Breaking Change %} + +__Custom Components file structure change:__ A significant change in how the "under the hood" of Home Assistant works has led to forcing platforms to be resolved based off the component path, if it exists. + +Today, if you want, you can override the Hue light platform, but not the other parts of the Hue integration. If a future update evolves the Hue component, removing or changing internal methods that the custom platform relied upon, the custom platform will start failing ([like this report](https://github.com/home-assistant/home-assistant/issues/17943#issuecomment-462014778)). + +To avoid this, we're going to __no longer allow custom components to be partial overlays__ (just a platform). Instead, if you want to override a built-in platform, __you will need to override the whole component__. + +This is enforced by first resolving the platform as a component, and if it exists, limiting the lookup path to the component path. + +Example: if I look up the hue component, and it is provided by a custom component, then all platform lookups will also be looked up in the custom component dir. The same works the other way around, if a user would only try to override `hue/light.py` but not` hue/__init__.py`, the custom platform will be ignored. + +Paulus has written some detailed information about this change on the developers' blog, if you'd like more information. [The Great Migration by Paulus](https://developers.home-assistant.io/blog/2019/02/19/the-great-migration.html) + + +__Existing SmartThings configuration entries will be removed,__ including the SmartApp/Automation from the SmartThings app. Home Assistant will prompt you to configure the integration again or it can be invoked from the integrations page. The configuration process is the same as before. To prepare, have your _personal access token and a mobile device with the SmartThings Classic App handy._ This will not affect the naming of devices or entities and is a __one-time inconvenience.__ The implementation switches over to the SmartApp access token to synchronize subscriptions during setup of the config entry, which cannot be done using the personal access token. + ## {% linkable_title New Platforms %} @@ -52,18 +69,18 @@ Experiencing issues introduced by this release? Please report them in our [issue ## {% linkable_title Breaking Changes %} -- RSSI_PEER and RSSI_DEVICE are different things (fixes #20900) ([@dagobert] - [#20902]) ([homematic docs]) (breaking change) -- Add yeelight flow action support ([@zewelor] - [#21195]) ([light.yeelight docs]) (breaking change) -- Prevent partial custom component overlays ([@balloob] - [#21070]) (breaking change) -- Add support for automatic discovery of TP-Link switches, bulbs and dimmers ([@rytilahti] - [#18091]) ([tplink docs]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) -- Enhance SmartThings component subscription ([@andrewsayre] - [#21124]) ([smartthings docs]) (breaking change) (new-feature) -- Split out iperf3 into a component with a sensor platform ([@rohankapoorcom] - [#21138]) ([iperf3 docs]) ([sensor.iperf3 docs]) (breaking change) (new-platform) -- Remove the google travel time update service ([@rohankapoorcom] - [#21153]) ([sensor.google_travel_time docs]) (breaking change) -- Add ADB server functionality to Fire TV ([@JeffLIrion] - [#21221]) ([media_player.firetv docs]) (breaking change) -- Add SmartThings Cover platform and add cover device classes ([@andrewsayre] - [#21192]) ([cover docs]) ([smartthings docs]) (breaking change) (new-platform) -- Rewrite of Toon component ([@frenck] - [#21186]) ([toon docs]) (breaking change) (new-platform) -- Add config for trusted networks auth provider ([@awarecan] - [#21111]) (breaking change) -- HomeMatic: Add error-attribute ([@dagobert] - [#21009]) ([homematic docs]) (breaking change) +- __HomeMatic component's wireless actors__ are having two RSSI values. The way the component was programmed one of them was being overwritten. With this new change, the __`rssi` attribute of HomeMatic entities has been removed.__ As a replacement the attributes rssi_device and rssi_peer have been added. The attribute of `rssi` will no longer be available, you'll need to __update to `rssi_device`,__ and you can add `rssi_peer` now as well! (fixes #20900) ([@dagobert] - [#20902]) ([homematic docs]) (breaking change) +- You can now specifiy an action when calling the __yeelight_start_flow service__ on your yeelights. The __default action will be 'recover'__ if you do not specify something else. This action will be taken after the flow stops. ([@zewelor] - [#21195]) ([light.yeelight docs]) (breaking change) +- Custom platforms that override a built-in platform that has a component, should now also include the component in the custom_components/ folder. So if you want to override `hue/light.py` with a custom version, __you will also need to provide/copy over `hue/__init__.py`.__ See details in main section about this change. ([@balloob] - [#21070]) (breaking change) +- Automatic discovery of __TP-Link switches, bulbs and dimmers.__ This is a continuation of #15329 and adds support for automatic discovery of TP-Link bulbs, switches, and dimmers based on the new config flow. The integration needs to be enabled either in the __integration configuration or__ alternatively by __adding tplink component__ to the configuration file. As the devices are now configured on the component, this is a __breaking change for light.tplink and switch.tplink.__ ([@rytilahti] - [#18091]) ([tplink docs]) ([light.tplink docs]) ([switch.tplink docs]) (breaking change) +- Enhance __SmartThings component__ subscription. See details in main section about this change. ([@andrewsayre] - [#21124]) ([smartthings docs]) (breaking change) (new-feature) +- The __iperf3 sensor platform__ has been __separated__ into a component and a sensor to remove the service from the sensor platform. Configuration options have changed, __please review the documentation__ and select the correct options. ([@rohankapoorcom] - [#21138]) ([iperf3 docs]) __([sensor.iperf3 docs])__ (breaking change) (new-platform) +- The __`google_travel_time`__ platform no longer has an update service, use __homeassistant.update with the appropriate entity_id(s) instead.__ ([@rohankapoorcom] - [#21153]) ([sensor.google_travel_time docs]) (breaking change) +- Add ADB server functionality to __Fire TV.__ This change __removes the `get_source`__ configuration option. ([@JeffLIrion] - [#21221]) ([media_player.firetv docs]) (breaking change) +- With the addition of the __SmartThings Cover__ platform, the SmartThings __Sensor platform will no longer represent Door, Garage Door and Window Share attributes.__ Additionally, if the cover device reports battery status, the value will be present as a __state attribute__ (battery_level) and not a discrete sensor. ([@andrewsayre] - [#21192]) ([cover docs]) ([smartthings docs]) (breaking change) (new-platform) +- The __Toon component__ was broken some time ago, so now requires a Toon API developer account and __can be configured using the Home Assistant integrations.__ Support for Switches & Smoke detectors has been removed. ([@frenck] - [#21186]) ([toon docs]) (breaking change) (new-platform) +- Addition of config for __trusted networks auth provider.__ It is a breaking changes for users who __manually configured__ trusted network auth provider. An invalid config error will be thrown and HA won't be able to fully started. (It is NOT a breaking changes for user who didn't manual configured trusted network auth provider.) ([@awarecan] - [#21111]) (breaking change) +- For some __HomeMatic devices the `sabotage` attribute is replaced by `error`.__ The value (if not 0) is a device specific error code. ([@dagobert] - [#21009]) ([homematic docs]) (breaking change) ## {% linkable_title Beta Fixes %} From 329c6fafaf5a84aade329fd598f73c0e6623b2fc Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 6 Mar 2019 18:46:31 +0000 Subject: [PATCH 36/41] Adding warning about below Pi2 (#8841) Too many folks have bought a Pi Zero and been unhappy at the experience. Adding a note here that they're not recommended. --- source/hassio/installation.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index fe28d9b61be..a62cf799cb7 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -15,9 +15,9 @@ The following will take you through the steps required to install Hass.io. - As an image for your device: - - [Raspberry Pi Zero][pi1] - - [Raspberry Pi Zero W][pi0-w] - - [Raspberry Pi 1 Model B][pi1] + - [Raspberry Pi Zero][pi1] (not recommended for more than testing) + - [Raspberry Pi Zero W][pi0-w] (not recommended for more than testing) + - [Raspberry Pi 1 Model B][pi1] (not recommended for more than testing) - [Raspberry Pi 2 Model B][pi2] - [Raspberry Pi 3 Model B and B+ 32bit][pi3-32] (recommended) - [Raspberry Pi 3 Model B and B+ 64bit][pi3-64] From c85d5304d4bb83d780b9cf5dda3fed1c4c8b9322 Mon Sep 17 00:00:00 2001 From: "Mr. Snyds" <41122989+mrsnyds@users.noreply.github.com> Date: Wed, 6 Mar 2019 15:50:06 -0500 Subject: [PATCH 37/41] port number typo on sesame sample URL (#8833) The current version of the sample URL in the sesame section shows the port as 8123, like so ... https://hassio.yourdomain.com:8123/somesecretnobodycanguess ..but I believe it should be port 3218, like so ... https://hassio.yourdomain.com:3218/somesecretnobodycanguess --- source/_addons/configurator.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/configurator.markdown b/source/_addons/configurator.markdown index 0b0dae29d00..578fc62f305 100644 --- a/source/_addons/configurator.markdown +++ b/source/_addons/configurator.markdown @@ -120,7 +120,7 @@ loglevel: type: string default: info sesame: - description: Secret token to dynamically allow access from the IP the request originates from. Open your bookmark https://hassio.yourdomain.com:8123/somesecretnobodycanguess while `allowed_networks` is set to `[]` and your IP will get whitelisted. You can use the Network status menu to revoke IP addresses for which access has been granted. Regular authentication is still required. + description: Secret token to dynamically allow access from the IP the request originates from. Open your bookmark https://hassio.yourdomain.com:3218/somesecretnobodycanguess while `allowed_networks` is set to `[]` and your IP will get whitelisted. You can use the Network status menu to revoke IP addresses for which access has been granted. Regular authentication is still required. required: false type: string sesame_totp_secret: From 34bc30185a062d48e1b046a732e8121383ee36d2 Mon Sep 17 00:00:00 2001 From: zackbcom Date: Wed, 6 Mar 2019 15:02:28 -0600 Subject: [PATCH 38/41] Added documentation for the Aeotec NanoMote Quad (#8828) * Updated to add Aetoec NanoMote Quad https://products.z-wavealliance.org/products/2817 * Updated Formatting * Updated Names and Example * :pencil2: Tweak --- source/_docs/z-wave/device-specific.markdown | 43 ++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown index c244dd31f5e..1ebb5083945 100644 --- a/source/_docs/z-wave/device-specific.markdown +++ b/source/_docs/z-wave/device-specific.markdown @@ -294,6 +294,49 @@ Button six (Triangle) release|6|7740 Press circle and plus simultaneously to wake up the device. +### {% linkable_title Aeotec NanoMote Quad %} + + + +```xml + + + + + + + + +``` + +Below is a table of the action/scenes for the NanoMote Quad: + +**Action**|**scene\_id**|**scene\_data** +:-----:|:-----:|:-----: +Button one single tap|1|7680 +Button one hold|1|7800 +Button one release|1|7740 +Button two single tap|2|7680 +Button two hold|2|7800 +Button two release|2|7740 +Button three single tap|3|7680 +Button three hold|3|7800 +Button three release|3|7740 +Button four single tap|4|7680 +Button four hold|4|7800 +Button four release|4|7740 + +Example Event: + +```yaml + "event_type": "zwave.scene_activated", + "data": { + "entity_id": "zwave.nanomote", + "scene_id": 2, + "scene_data": 7680 + } +``` + ### {% linkable_title Aeotec Wallmote %} From cc99ce67f31502ac8750c74424a6839a94f5eab6 Mon Sep 17 00:00:00 2001 From: mastakebob <47671816+mastakebob@users.noreply.github.com> Date: Wed, 6 Mar 2019 16:17:22 -0500 Subject: [PATCH 39/41] Provide clearer explanation of the sensor.random (#8598) * Provide clearer explanation of the sensor.random These changes provide a clearer explanation of: - what sensor.random is, - why we're creating one, - what to edit to make it - how to know when it worked * :pencil2: Tweak --- source/getting-started/configuration.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index cc34e312dbf..a82d827b11a 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -98,11 +98,15 @@ Now that you are able to edit the configuration, it's time to set up some of you

YAML can be a little daunting at first. A lot is possible! [Here is some more info.](/docs/configuration/devices/)

-For a sensor that is showing [random values](/components/sensor.random/), the entry would look like the sample below: +For your first integration, you'll create a virtual sensor that generates a random integer value between 0 and 20 every 30 seconds. + +To create this random value sensor [random values](/components/sensor.random/), enter the following to the bottom of your `configuration.yaml` file, and restart Home Assistant (remember it may take up to a minute for the service to restart): ```yaml sensor: - platform: random ``` +You'll know it worked when you see the new random sensor in your overview page. On the next page, we'll create an automation that uses this sensor to take an action. + ### [Next step: Automate Home Assistant »](/getting-started/automation/) From 744aff1da6c0a54066a3289d1f990bdefeee78e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Wed, 6 Mar 2019 22:57:36 +0100 Subject: [PATCH 40/41] Update sensor.yr.markdown (#8380) * Update sensor.yr.markdown * Update sensor.yr.markdown * Update sensor.yr.markdown * :pencil2: Tweaks --- source/_components/sensor.yr.markdown | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/_components/sensor.yr.markdown b/source/_components/sensor.yr.markdown index 58c3b572e02..c08417e32bf 100644 --- a/source/_components/sensor.yr.markdown +++ b/source/_components/sensor.yr.markdown @@ -68,6 +68,21 @@ monitored_conditions: description: Medium cloud level. highClouds: description: High cloud level. +latitude: + description: Manually specify latitude. + required: false + type: float + default: Provided by Home Assistant configuration. +longitude: + description: Manually specify longitude. + required: false + type: float + default: Provided by Home Assistant configuration. +altitude: + description: Manually specify altitude. + required: false + type: float + default: Provided by Home Assistant configuration. {% endconfiguration %} A full configuration example can be found below: From 41b4b69e834c8c9ddcc172a859b8978718a4c361 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 6 Mar 2019 15:45:42 -0800 Subject: [PATCH 41/41] Finish release --- _config.yml | 6 +-- source/_components/esphome.markdown | 1 + source/_components/lcn.markdown | 5 ++- source/_components/mobile_app.markdown | 20 +++++++++ source/_components/mysensors.markdown | 2 +- source/_components/nissan_leaf.markdown | 4 ++ ...media_player.ps4.markdown => ps4.markdown} | 0 source/_posts/2019-03-13-release-89.markdown | 38 +++++++++--------- .../blog/2019-03-release-89/components.png | Bin 0 -> 53251 bytes .../images/{ => supported_brands}/reddit.png | Bin 10 files changed, 52 insertions(+), 24 deletions(-) create mode 100644 source/_components/mobile_app.markdown rename source/_components/{media_player.ps4.markdown => ps4.markdown} (100%) create mode 100644 source/images/blog/2019-03-release-89/components.png rename source/images/{ => supported_brands}/reddit.png (100%) diff --git a/_config.yml b/_config.yml index 5c9641209ca..33b89bf248e 100644 --- a/_config.yml +++ b/_config.yml @@ -138,9 +138,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 88 -current_patch_version: 2 -date_released: 2019-02-27 +current_minor_version: 89 +current_patch_version: 0 +date_released: 2019-03-06 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_components/esphome.markdown b/source/_components/esphome.markdown index ae995bccbf1..736d2cc49e7 100644 --- a/source/_components/esphome.markdown +++ b/source/_components/esphome.markdown @@ -6,6 +6,7 @@ date: 2018-12-16 14:20 sidebar: true comments: false sharing: true +featured: true footer: true logo: esphome.png ha_category: DIY diff --git a/source/_components/lcn.markdown b/source/_components/lcn.markdown index 1e788904e12..d2862df27ae 100644 --- a/source/_components/lcn.markdown +++ b/source/_components/lcn.markdown @@ -18,6 +18,7 @@ ha_iot_class: "Local Push" redirect_from: - /components/light.lcn/ - /components/switch.lcn/ + - /components/cover.lcn/ --- The `lcn` integration for Home Assistant allows you to connect to [LCN](http://www.lcn.eu) hardware devices. @@ -50,14 +51,14 @@ lcn: - name: Living room cover address: myhome.s0.m7 motor: motor1 - + lights: - name: Bedroom light address: myhome.s0.m7 output: output1 dimmable: true transition: 5 - + switches: - name: Sprinkler switch address: myhome.s0.m7 diff --git a/source/_components/mobile_app.markdown b/source/_components/mobile_app.markdown new file mode 100644 index 00000000000..0d1ab607ce4 --- /dev/null +++ b/source/_components/mobile_app.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "Mobile App" +description: "The Mobile App component allows a generic platform for integrating with mobile apps." +date: 2019-03-06 01:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: "Other" +ha_release: 0.89 +ha_qa_scale: internal +--- + +The Mobile App component allows Home Assistant mobile apps to easily integrate with Home Assistant. + +If you are planning to use a mobile application that integrates with Home Assistant, we recommend that you keep this component enabled. + +If you are a mobile app developer, see the [developer documentation](https://developers.home-assistant.io/docs/en/app_integration_index.html) for instructions on how to build your app on top of the mobile app component. diff --git a/source/_components/mysensors.markdown b/source/_components/mysensors.markdown index 832ad97b9d2..855749eefa5 100644 --- a/source/_components/mysensors.markdown +++ b/source/_components/mysensors.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: mysensors.png ha_category: DIY -featured: true +featured: false ha_iot_class: "Local Push" --- diff --git a/source/_components/nissan_leaf.markdown b/source/_components/nissan_leaf.markdown index 4650df72481..2e9945f0a8b 100644 --- a/source/_components/nissan_leaf.markdown +++ b/source/_components/nissan_leaf.markdown @@ -11,6 +11,10 @@ logo: nissan.png ha_category: Car ha_release: 0.89 ha_iot_class: "Cloud Polling" +redirect_from: + - /components/binary_sensor.nissan_leaf/ + - /components/sensor.nissan_leaf/ + - /components/switch.nissan_leaf/ --- The `nissan_leaf` component offers integration with the [NissanConnect EV](http://youplus.nissan.co.uk/GB/en/YouPlus/ConnectedServices.html) cloud service. NissanConnect EV was previously known as Nissan Carwings. It offers: diff --git a/source/_components/media_player.ps4.markdown b/source/_components/ps4.markdown similarity index 100% rename from source/_components/media_player.ps4.markdown rename to source/_components/ps4.markdown diff --git a/source/_posts/2019-03-13-release-89.markdown b/source/_posts/2019-03-13-release-89.markdown index 1b3fef91194..368397e38ce 100644 --- a/source/_posts/2019-03-13-release-89.markdown +++ b/source/_posts/2019-03-13-release-89.markdown @@ -1,9 +1,9 @@ --- layout: post -title: "0.89: TBD - UPDATE DAte" -description: "TBD" -date: 2019-02-27 00:11:03 -date_formatted: "March 13, 2019" +title: "0.89: Nissan Leaf, PlayStation 4, Point alarm control, Owlet baby monitor" +description: "Vroom vroom vrooooooooooom." +date: 2019-03-06 00:11:03 +date_formatted: "March 6, 2019" author: Paulus Schoutsen author_twitter: balloob comments: true @@ -12,7 +12,12 @@ og_image: /images/blog/2019-03-release-89/components.png --- -## {% linkable_title Noteworthy Breaking Change %} + +It's time for release 0.89. It's another great new release with some cool new features, bug fixes and improvements. The first cool new feature is that yet another car is integrated into Home Assistant: the Nissan Leaf. Both deConz and SmartThings integrations keep expanding to cover more devices. + +This release introduces a new mobile app component. [@robbiet480], who also works on the iOS app, has taken the best parts of the Home Assistant iOS app component and turned it into a standardized API that any mobile app can build upon. This will allow any mobile apps to integrate with Home Assistant with a great user experience. If you are a mobile app developer, please check the updated [app integration docs](https://developers.home-assistant.io/docs/en/app_integration_index.html). We will be fine tuning the API in upcoming releases. Feedback is welcome. + +## {% linkable_title Noteworthy Breaking Changes %} __Custom Components file structure change:__ A significant change in how the "under the hood" of Home Assistant works has led to forcing platforms to be resolved based off the component path, if it exists. @@ -26,36 +31,26 @@ Example: if I look up the hue component, and it is provided by a custom componen Paulus has written some detailed information about this change on the developers' blog, if you'd like more information. [The Great Migration by Paulus](https://developers.home-assistant.io/blog/2019/02/19/the-great-migration.html) - __Existing SmartThings configuration entries will be removed,__ including the SmartApp/Automation from the SmartThings app. Home Assistant will prompt you to configure the integration again or it can be invoked from the integrations page. The configuration process is the same as before. To prepare, have your _personal access token and a mobile device with the SmartThings Classic App handy._ This will not affect the naming of devices or entities and is a __one-time inconvenience.__ The implementation switches over to the SmartApp access token to synchronize subscriptions during setup of the config entry, which cannot be done using the personal access token. - ## {% linkable_title New Platforms %} - Météo-France platform for the weather component ([@victorcerutti] - [#18404]) ([sensor.meteo_france docs]) ([weather.meteo_france docs]) (new-platform) - Point alarm control ([@fredrike] - [#20972]) ([point docs]) (new-platform) -- Times of The Day Binary Sensor ([@kstaniek] - [#20068]) ([binary_sensor.tod docs]) (new-platform) - Nissan Leaf Integration (Carwings / NissanConnect EV) ([@filcole] - [#19786]) ([device_tracker docs]) ([nissan_leaf docs]) ([binary_sensor.nissan_leaf docs]) ([sensor.nissan_leaf docs]) ([switch.nissan_leaf docs]) (new-platform) +- Rewrite of Toon component ([@frenck] - [#21186]) ([toon docs]) (breaking change) (new-platform) +- Times of The Day Binary Sensor ([@kstaniek] - [#20068]) ([binary_sensor.tod docs]) (new-platform) - Add switch platform for Danfoss Air and additional sensors. ([@JonasPed] - [#21046]) ([danfoss_air docs]) (new-platform) - Owlet baby monitor component ([@oblogic7] - [#21108]) ([owlet docs]) (new-platform) - deCONZ thermostat support ([@Kane610] - [#20586]) ([deconz docs]) (new-platform) - Added device tracker support for Ubee Router ([@mzdrale] - [#19586]) ([device_tracker docs]) (new-platform) -- Nissanleaf ([@filcole] - [#21145]) ([nissan_leaf docs]) (new-platform) - Add LCN cover platform ([@alengwenus] - [#20288]) ([lcn docs]) ([cover.lcn docs]) (new-platform) -- Split out iperf3 into a component with a sensor platform ([@rohankapoorcom] - [#21138]) ([iperf3 docs]) ([sensor.iperf3 docs]) (breaking change) (new-platform) - Add initial support for Sony SDCP projector control ([@alistairg] - [#20269]) ([switch.sony_projector docs]) (new-platform) -- Refactoring. Moved LCN constants to const.py ([@alengwenus] - [#21376]) ([lcn docs]) (new-platform) - Add SmartThings Cover platform and add cover device classes ([@andrewsayre] - [#21192]) ([cover docs]) ([smartthings docs]) (breaking change) (new-platform) -- Rewrite of Toon component ([@frenck] - [#21186]) ([toon docs]) (breaking change) (new-platform) - Add SmartThings Scene platform ([@andrewsayre] - [#21405]) ([smartthings docs]) (new-platform) - Reddit Sensor ([@ljmerza] - [#21344]) ([sensor.reddit docs]) (new-platform) - mobile_app component ([@robbiet480] - [#21475]) ([mobile_app docs]) (beta fix) (new-platform) - -## {% linkable_title New Features %} - -- Enhance SmartThings component subscription ([@andrewsayre] - [#21124]) ([smartthings docs]) (breaking change) (new-feature) -- SmartThings Lock platform state attributes enhancement ([@andrewsayre] - [#21379]) ([smartthings docs]) (new-feature) -- Add power and energy attributes to SmartThings switch ([@andrewsayre] - [#21375]) ([smartthings docs]) (new-feature) +- Add component media player.ps4 ([@ktnrg45] - [#21074]) ([ps4 docs]) ## {% linkable_title If you need help... %} @@ -113,6 +108,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - Avoid recorder thread crashing ([@balloob] - [#21668]) (beta fix) - check we have a tb ([@dgomes] - [#21670]) ([system_log docs]) (beta fix) - Fix ADS race condition ([@carstenschroeder] - [#21677]) ([ads docs]) (beta fix) +- resync hass that changes have occured ([@fredrike] - [#21705]) ([tellduslive docs]) (beta fix) +- Upgrade toonapilib to 3.2.1 ([@frenck] - [#21706]) ([toon docs]) (beta fix) ## {% linkable_title All changes %} @@ -297,6 +294,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - Avoid recorder thread crashing ([@balloob] - [#21668]) (beta fix) - check we have a tb ([@dgomes] - [#21670]) ([system_log docs]) (beta fix) - Fix ADS race condition ([@carstenschroeder] - [#21677]) ([ads docs]) (beta fix) +- resync hass that changes have occured ([@fredrike] - [#21705]) ([tellduslive docs]) (beta fix) +- Upgrade toonapilib to 3.2.1 ([@frenck] - [#21706]) ([toon docs]) (beta fix) [#18091]: https://github.com/home-assistant/home-assistant/pull/18091 [#18404]: https://github.com/home-assistant/home-assistant/pull/18404 @@ -479,6 +478,8 @@ Experiencing issues introduced by this release? Please report them in our [issue [#21668]: https://github.com/home-assistant/home-assistant/pull/21668 [#21670]: https://github.com/home-assistant/home-assistant/pull/21670 [#21677]: https://github.com/home-assistant/home-assistant/pull/21677 +[#21705]: https://github.com/home-assistant/home-assistant/pull/21705 +[#21706]: https://github.com/home-assistant/home-assistant/pull/21706 [@Adminiuga]: https://github.com/Adminiuga [@Danielhiversen]: https://github.com/Danielhiversen [@Dullage]: https://github.com/Dullage @@ -658,6 +659,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [system_log docs]: /components/system_log/ [tahoma docs]: /components/tahoma/ [telegram_bot docs]: /components/telegram_bot/ +[tellduslive docs]: /components/tellduslive/ [tibber docs]: /components/tibber/ [toon docs]: /components/toon/ [tplink docs]: /components/tplink/ diff --git a/source/images/blog/2019-03-release-89/components.png b/source/images/blog/2019-03-release-89/components.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4f2e9c6027373e10fe09d5b29db8ff14b2c09e GIT binary patch literal 53251 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 UNfqq}7K+83?A`1h*@h7Q1v1l9=Kufz literal 0 HcmV?d00001 diff --git a/source/images/reddit.png b/source/images/supported_brands/reddit.png similarity index 100% rename from source/images/reddit.png rename to source/images/supported_brands/reddit.png