diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 53ae8b5a44a..8c9a336662c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,13 @@ { "name": "home-assistant.io", - "context": "..", - "dockerFile": "../Dockerfile", + "build": { + "dockerfile": "../Dockerfile", + "context": "..", + "args": { + "VARIANT": "2.6", + "NODE_VERSION": "12.1", + } + }, "appPort": [4000], "postCreateCommand": "bundle install && npm install", "containerEnv": {"DEVCONTAINER": "true"}, @@ -21,4 +27,4 @@ "errorLens.enabledDiagnosticLevels": ["error", "warning"], "terminal.integrated.shell.linux": "/usr/bin/zsh", } -} +} \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 34d7762a58f..05efb5b23a6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: with: node-version: 12.x - name: Setup NPM cache - uses: actions/cache@v2.1.4 + uses: actions/cache@v2.1.5 with: path: ~/.npm key: npm-${{ hashFiles('**/package-lock.json') }} @@ -37,7 +37,7 @@ jobs: with: node-version: 12.x - name: Setup NPM cache - uses: actions/cache@v2.1.4 + uses: actions/cache@v2.1.5 with: path: ~/.npm key: npm-${{ hashFiles('**/package-lock.json') }} @@ -61,7 +61,7 @@ jobs: with: ruby-version: 2.6 - name: Setup Ruby Gems cache - uses: actions/cache@v2.1.4 + uses: actions/cache@v2.1.5 with: path: vendor/bundle key: gems-${{ hashFiles('**/Gemfile.lock') }} @@ -73,7 +73,7 @@ jobs: bundle config path vendor/bundle bundle install --jobs 4 --retry 3 - name: Setting up Jekyll cache - uses: actions/cache@v2.1.4 + uses: actions/cache@v2.1.5 with: path: source/.jekyll-cache key: diff --git a/.gitignore b/.gitignore index 6384f76a26c..d13fff8475d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ .gist-cache .pygments-cache public +source/_data/analytics_data.json +source/_data/blueprint_exchange_data.json source/_stash source/stylesheets/screen.css source/.jekyll-cache/ diff --git a/Dockerfile b/Dockerfile index 445458446aa..a5c00fa85ad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,8 @@ -ARG VARIANT=2.6 +ARG VARIANT=2 FROM mcr.microsoft.com/vscode/devcontainers/ruby:${VARIANT} -# Install node -COPY .nvmrc /tmp/.nvmrc -RUN \ - su vscode -c \ - "source /usr/local/share/nvm/nvm.sh && nvm install $(cat /tmp/.nvmrc) 2>&1" +ARG NODE_VERSION="lts/*" +RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1" # Locale env vars ENV \ @@ -19,11 +16,8 @@ RUN \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ ack \ && echo "en_US UTF-8" > /etc/locale.gen \ - && locale-gen en_US.UTF-8 \ - && apt-get autoremove -y \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* + && locale-gen en_US.UTF-8 # Install the specific version of bundler we need COPY Gemfile.lock ./ -RUN gem install bundler -v `awk 'c&&c--;/BUNDLED WITH/{c=1}' Gemfile.lock` +RUN gem install bundler -v `awk 'c&&c--;/BUNDLED WITH/{c=1}' Gemfile.lock` \ No newline at end of file diff --git a/Gemfile b/Gemfile index 9da9617fe7d..27784675efc 100644 --- a/Gemfile +++ b/Gemfile @@ -21,7 +21,7 @@ group :jekyll_plugins do end gem 'sinatra', '2.1.0' -gem 'nokogiri', '1.11.2' +gem 'nokogiri', '1.11.3' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # and associated library diff --git a/Gemfile.lock b/Gemfile.lock index 0c2184f3df8..4eaf7d640cd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -74,10 +74,10 @@ GEM multi_json (1.15.0) mustermann (1.1.1) ruby2_keywords (~> 0.0.1) - nokogiri (1.11.2) + nokogiri (1.11.3) mini_portile2 (~> 2.5.0) racc (~> 1.4) - nokogiri (1.11.2-x64-mingw32) + nokogiri (1.11.3-x64-mingw32) racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) @@ -130,7 +130,7 @@ DEPENDENCIES jekyll-sitemap (= 1.4.0) jekyll-time-to-read (= 0.1.2) jekyll-toc (= 0.17.0) - nokogiri (= 1.11.2) + nokogiri (= 1.11.3) rake (= 13.0.3) sass-globbing (= 1.1.5) sassc (= 2.1.0) diff --git a/Rakefile b/Rakefile index 8df92944c02..9dba571e0dd 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,9 @@ require "rubygems" require "bundler/setup" require "stringex" +require 'net/http' +require 'json' + ## -- Misc Configs -- ## public_dir = "public/" # compiled site directory @@ -28,6 +31,10 @@ task :generate do puts "## Generating Site with Jekyll" success = system "compass compile --css-dir #{source_dir}/stylesheets" abort("Generating CSS failed") unless success + success = system "rake analytics_data" + abort("Generating analytics data failed") unless success + success = system "rake blueprint_exchange_data" + abort("Generating blueprint exchange data failed") unless success success = system "jekyll build" abort("Generating site failed") unless success if ENV["CONTEXT"] != 'production' @@ -63,6 +70,8 @@ task :preview, :listen do |t, args| puts "Starting to watch source with Jekyll and Compass." puts "Now listening on http://localhost:#{server_port}" system "compass compile --css-dir #{source_dir}/stylesheets" unless File.exist?("#{source_dir}/stylesheets/screen.css") + system "rake analytics_data" + system "rake blueprint_exchange_data" jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build -t --watch --incremental") compassPid = Process.spawn("compass watch") rackupPid = Process.spawn("rackup --port #{server_port} --host #{listen_addr}") @@ -168,6 +177,29 @@ task :clean do rm_rf [Dir.glob(".pygments-cache/**"), Dir.glob(".gist-cache/**"), Dir.glob(".sass-cache/**"), "source/stylesheets/screen.css"] end +desc "Download data from analytics.home-assistant.io" +task :analytics_data do + uri = URI('https://analytics.home-assistant.io/data.json') + + remote_data = JSON.parse(Net::HTTP.get(uri)) + last_entry=remote_data.keys().sort().reverse()[0] + + File.open("#{source_dir}/_data/analytics_data.json", "w") do |file| + file.write(JSON.generate(remote_data[last_entry])) + end +end + +desc "Download data from the blueprint exchange @ community.home-assistant.io" +task :blueprint_exchange_data do + uri = URI('https://community.home-assistant.io/c/blueprints-exchange/53/l/top/all.json') + + remote_data = JSON.parse(Net::HTTP.get(uri)) + + File.open("#{source_dir}/_data/blueprint_exchange_data.json", "w") do |file| + file.write(JSON.generate(remote_data['topic_list']['topics'])) + end +end + def get_stdin(message) print message STDIN.gets.chomp diff --git a/_config.yml b/_config.yml index 2a7275c2b92..58cfccafd12 100644 --- a/_config.yml +++ b/_config.yml @@ -66,7 +66,7 @@ titlecase: true # Converts page and post titles to titlecase collections: integrations: output: true - cookbook: + examples: output: true docs: output: true @@ -106,8 +106,8 @@ social: # Home Assistant release details current_major_version: 2021 current_minor_version: 4 -current_patch_version: 0 -date_released: 2021-04-07 +current_patch_version: 4 +date_released: 2021-04-13 # 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/package.json b/package.json index c2e70cc6b4f..72bdfc121a5 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,6 @@ "scripts": { "markdown:lint": "remark --quiet --frail .", "textlint:all": "textlint source", - "textlint": "textlint source/_cookbook source/_docs source/_faq source/_integrations source/_lovelace source/cloud source/getting-started source/hassio source/lovelace" + "textlint": "textlint source/_examples source/_docs source/_faq source/_integrations source/_lovelace source/cloud source/getting-started source/hassio source/lovelace" } } \ No newline at end of file diff --git a/sass/custom/_paulus.scss b/sass/custom/_paulus.scss index 2dba14063b2..0a0c56c9762 100644 --- a/sass/custom/_paulus.scss +++ b/sass/custom/_paulus.scss @@ -208,8 +208,17 @@ $primary-color: #049cdb; border: 0; box-shadow: none; margin: 15px; - width: 200px; + width: 100%; max-width: 40%; + max-height: 70px; + } + + .square { + width: initial; + } + + .round { + border-radius: 50%; } } } @@ -455,7 +464,8 @@ div.note { } } } - } + + } .brand-logo-container { text-align: center; diff --git a/source/_cookbook/automation_enocean_phue.markdown b/source/_cookbook/automation_enocean_phue.markdown deleted file mode 100644 index 2d5f60b6436..00000000000 --- a/source/_cookbook/automation_enocean_phue.markdown +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Switch Philips Hue with enocean" -description: "Automation to switch a Philips Hue lamp with an enocean switch." -ha_category: Automation Examples ---- - -Assume that you have an enocean wall switch and some Philips Hue lamps. The enocean wall switch will fire the event button_pressed and pass along several parameters which is used to turn on/off the lamps. - -event_data: - -* which -* pushed -* onoff -* id -* devname - -```yaml -enocean: - device: /dev/ttyUSB0 - -binary_sensor: - - platform: enocean - id: [0x00,0x01,0x02,0x03] - name: living_room_switch - -automation: - - alias: "Turn on living room light" - trigger: - platform: event - event_type: button_pressed - event_data: - onoff: 1 - devname: living_room_switch - action: - service: light.turn_on - target: - entity_id: light.hue_color_lamp_3 - - - alias: "Turn off living room light" - trigger: - platform: event - event_type: button_pressed - event_data: - onoff: 0 - devname: living_room_switch - action: - service: light.turn_off - target: - entity_id: light.hue_color_lamp_3 -``` diff --git a/source/_cookbook/automation_first_light.markdown b/source/_cookbook/automation_first_light.markdown deleted file mode 100644 index e31a5db69ea..00000000000 --- a/source/_cookbook/automation_first_light.markdown +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: "Examples using first light" -description: "Automation examples that trigger lights in the morning." -ha_category: Automation Examples ---- - -#### Create an input_boolean - -```yaml -input_boolean: - trigger_first_morning: - name: Waiting for first morning motion - icon: mdi:kettle -``` - -#### The Main Automation - -{% raw %} - -```yaml -## These first two control t input_boolean that allows the "first morning action" to occur -## If the action is triggered, it will also disable this boolean. This assumes you have the sun platform enabled. - -automation: -#turns it on at 5am - - alias: "Enable First Morning Trigger" - trigger: - - platform: time - at: "05:00:00" - action: - service: homeassistant.turn_on - target: - entity_id: input_boolean.trigger_first_morning - -# turns it off an hour after sunrise - - alias: "Disable First Morning Trigger" - trigger: - - platform: sun - event: sunrise - offset: "01:00:00" - action: - service: homeassistant.turn_off - target: - entity_id: input_boolean.trigger_first_morning - - - -# This is the main automation. It triggers when my motion sensor is triggered -# (in this case, a motion sensor from a security system attached to my Vera) - - alias: "First Morning Motion" - trigger: - platform: state - entity_id: binary_sensor.livingroom_motion - to: "on" - # only complete the automation if we're still waiting for the first motion - condition: - condition: state - entity_id: input_boolean.trigger_first_morning - state: "on" - - action: - # turn off the "waiting" boolean regardless of whether lights will turn on - # so that this happens only once - - service: homeassistant.turn_off - target: - entity_id: input_boolean.trigger_first_morning - - # But only turn on lights if the living room and kitchen lights are off or dimmed - # If a condition tests false, the automation will end - - condition: and - conditions: - - condition: numeric_state - entity_id: light.livingroom_ec - # if light is off, force a 0, otherwise use the brightness value - value_template: '{% if is_state('light.livingroom_ec', 'on') %}{{ state_attr('light.livingroom_ec', 'brightness') }}{% else %}0{% endif %}' - # brightness below 50% (255 = 100%) - below: 128 - - condition: numeric_state - entity_id: light.kitchen_bar - value_template: '{% if is_state('light.kitchen_bar', 'on') %}{{ state_attr('light.kitchen_bar', 'brightness') }}{% else %}0{% endif %}' - below: 128 - - condition: numeric_state - entity_id: light.kitchen_ceiling - value_template: '{% if is_state('light.kitchen_ceiling', 'on') %}{{ state_attr('light.kitchen_ceiling', 'brightness') }}{% else %}0{% endif %}' - below: 128 - - # Trigger a scene - # You could add as many services or scenes as you'd like - - service: scene.turn_on - target: - entity_id: scene.morning_first_motion -``` - -{% endraw %} - -#### The Scene - -Here is the Scene that is called via the Automations above. - -```yaml -# here's the scene that gets called. Lights in -# my living room and kitchen turn on. -scene: - - name: Morning First Motion - entities: - light.kitchen_ceiling: - state: on - brightness: 127 - light.kitchen_bar: - state: on - brightness: 178 - light.kitchen_above_cabinet: - state: on - brightness: 178 - light.livingroom_ec: - state: on - brightness: 153 - light.livingroom_track: - state: on - brightness: 153 -``` diff --git a/source/_cookbook/automation_flashing_lights.markdown b/source/_cookbook/automation_flashing_lights.markdown deleted file mode 100644 index 1ecce435d1d..00000000000 --- a/source/_cookbook/automation_flashing_lights.markdown +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: "Examples for flashing lights" -description: "Automation examples for flashing lights in case of an alarm." -ha_category: Automation Examples ---- - -#### Flashing lights triggered by an alarm - -For flashing regular lights in case an alarm is triggered. - -```yaml -# AlmAct1 - switch to activate the alarm in Room1 -# AlmSnd1 - switch for a buzzer - -automation: -- alias: "Alarm_PIR_Room1" - trigger: - platform: state - entity_id: binary_sensor.PIR1 - to: "on" - condition: - - condition: state - entity_id: switch.AlmAct1 - state: "on" - - condition: state - entity_id: script.alarm_room1 - state: "off" - action: - # start alarm on movement if alarm activated - # and the alarm is not triggered - service: script.turn_on - target: - entity_id: script.alarm_room1 - -- alias: "flash_room1_start" - trigger: - platform: state - entity_id: switch.AlmSnd1 - to: "on" - action: - service: script.turn_on - target: - entity_id: script.flash_room1 - -- alias: "flash_room1_stop" - trigger: - platform: state - entity_id: switch.REL1 - to: "off" - condition: - condition: state - entity_id: switch.AlmSnd1 - state: "off" - action: - service: script.turn_off - target: - entity_id: script.flash_room1 - -script: - alarm_room1: - alias: "Alarm room1" - sequence: - - alias: "Alarm Room1 Start" - service: homeassistant.turn_on - target: - entity_id: switch.AlmSnd1 - - alias: "Set Ack Room1" - service: homeassistant.turn_on - target: - entity_id: input_boolean.ack1 - - alias: "email_Room1" - service: notify.email - data: - message: "Movement alarm in Room1" - - delay: - # time interval for alarm sound and light flashing - seconds: 60 - - alias: "Alarm Room1 Stop" - service: homeassistant.turn_off - target: - entity_id: switch.AlmSnd1 - - flash_room1: - alias: "Flash Room1 On" - sequence: - - alias: "Light Room1 On" - service: homeassistant.turn_on - target: - entity_id: switch.REL1 - - delay: - # time for flash light on - seconds: 1 - - alias: "Light Room1 Off" - service: homeassistant.turn_off - target: - entity_id: switch.REL1 - - alias: "loop_room1" - service: script.turn_on - target: - entity_id: script.flash_loop - - flash_loop: - alias: "Flash loop" - sequence: - - delay: - # time for flash light off - seconds: 1 - - alias: "loop_room1" - service: script.turn_on - target: - entity_id: script.flash_room1 -``` - diff --git a/source/_cookbook/automation_for_rainy_days.markdown b/source/_cookbook/automation_for_rainy_days.markdown deleted file mode 100644 index 4a481e30015..00000000000 --- a/source/_cookbook/automation_for_rainy_days.markdown +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: "Automation for rainy days" -description: "Basic example how to use weather conditions to set states" -ha_category: Automation Examples ---- - -This requires a [Dark Sky](/integrations/darksky) sensor with the condition `precip_intensity` that tells if it's raining or not. You could also experiment with other attributes such as `cloud_cover`. - -Turn on a light in the living room when it starts raining, someone is home, and it's afternoon or later. - -```yaml -automation: - - alias: "Rainy Day" - trigger: - - platform: state - entity_id: sensor.precip_intensity - to: "rain" - condition: - - condition: state - entity_id: all - state: "home" - - condition: time - after: "14:00" - before: "23:00" - action: - service: light.turn_on - target: - entity_id: light.couch_lamp -``` - -And then of course turn off the lamp when it stops raining but only if it's within an hour before sunset. - -```yaml - - alias: "Rain is over" - trigger: - - platform: state - entity_id: sensor.precip_intensity - to: "None" - condition: - - condition: sun - after: "sunset" - after_offset: "-01:00:00" - action: - service: light.turn_off - target: - entity_id: light.couch_lamp -``` - diff --git a/source/_cookbook/automation_sun.markdown b/source/_cookbook/automation_sun.markdown deleted file mode 100644 index 959a580de4d..00000000000 --- a/source/_cookbook/automation_sun.markdown +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: "Examples using the sun" -description: "Automation examples that use the sun." -ha_category: Automation Examples ---- - -#### Turn on the living room lights 45 minutes before sunset if anyone is at home - -```yaml -automation: - trigger: - platform: sun - event: sunset - offset: "-00:45:00" - condition: - condition: state - entity_id: all - state: home - action: - service: light.turn_on - target: - entity_id: group.living_room_lights -``` - -#### Natural wake up light - -_Note, Philips Hue and LIFX are currently the only light platforms that support transitions._ - -```yaml -automation: - trigger: - platform: time - at: "07:15:00" - action: - service: light.turn_on - target: - entity_id: light.bedroom - data: - # 900 seconds = 15 minutes - transition: 900 -``` - -#### Send sun rise/sun set notifications - -Send notifications through [PushBullet](/integrations/pushbullet) when the sun state is changed. - -```yaml -automation: - - alias: "Send notification when sun rises" - trigger: - platform: sun - event: sunrise - offset: "+00:00:00" - action: - service: notify.pushbullet - data: - message: "The sun is up." - - alias: "Send notification when sun sets" - trigger: - platform: sun - event: sunset - offset: "+00:00:00" - action: - service: notify.pushbullet - data: - message: "The sun is down." -``` - -#### Automations for lights and blinds based on solar elevation - -Solar elevation automations can cope with offsets from sunset / sunrise as the seasons change better than using a time based offsets. - -{% raw %} - -```yaml -- alias: "Turn a few lights on when the sun gets dim" - trigger: - platform: numeric_state - entity_id: sun.sun - value_template: "{{ state_attr('sun.sun', 'elevation') }}" - below: 3.5 - action: - service: scene.turn_on - target: - entity_id: scene.background_lights - -- alias: "Turn more lights on as the sun gets dimmer" - trigger: - platform: numeric_state - entity_id: sun.sun - value_template: "{{ state_attr('sun.sun', 'elevation') }}" - below: 1.5 - action: - service: scene.turn_on - target: - entity_id: scene.more_lights - -- alias: "Close blind at dusk" - trigger: - platform: numeric_state - entity_id: sun.sun - value_template: "{{ state_attr('sun.sun', 'elevation') }}" - below: -2.5 - action: - service: switch.turn_off - target: - entity_id: switch.blind -``` - -{% endraw %} \ No newline at end of file diff --git a/source/_cookbook/automation_telegram_presence_alert.markdown b/source/_cookbook/automation_telegram_presence_alert.markdown deleted file mode 100644 index e8ceeb7ba10..00000000000 --- a/source/_cookbook/automation_telegram_presence_alert.markdown +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Examples sending notification depending of the presence" -description: "Examples sending notification depending of the presence" -ha_category: Automation Examples ---- - -This will send a message when someone in your known devices list connects to your local network. In other words, when someone arrives home. It will only work if you are using the [Nmap](/integrations/nmap_tracker) device tracker or a similar integration. - -This example uses [Telegram](/integrations/telegram) to send the notification. - -```yaml -notify: - - name: Telegram - platform: telegram - api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - chat_id: xxxxxxxxx -``` - -Add the automation rule. Change `device_name_here` to match the device you want to track. - -```yaml -automation: - trigger: - platform: state - entity_id: device_tracker.device_name_here - from: "not_home" - to: "home" - action: - service: notify.Telegram - data: - message: "Person is now home" -``` diff --git a/source/_cookbook/automation_using_timeinterval_inputboolean.markdown b/source/_cookbook/automation_using_timeinterval_inputboolean.markdown deleted file mode 100644 index 070399ddded..00000000000 --- a/source/_cookbook/automation_using_timeinterval_inputboolean.markdown +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "Using time interval and input boolean" -description: "Automation to get a random color every 2 minutes that can be turned on/off." -ha_category: Automation Examples ---- - -#### Change Hue light on interval to random color based on state of an input boolean - -_Note, Philips Hue is currently the only light platform that support the random effect._ - -```yaml -input_boolean: - loop_livingcolors: - name: Loop LivingColors - initial: off - icon: mdi:spotlight - -automation: -# Changes Hue light every two minutes to random color if input boolean is set to on -- alias: "Set LivingColors to random color" - trigger: - platform: time_pattern - minutes: "/2" - condition: - condition: state - entity_id: input_boolean.loop_livingcolors - state: "on" - action: - service: light.turn_on - target: - entity_id: light.woonkamer_livingcolors - data: - effect: random - transition: 5 - brightness: 255 -``` diff --git a/source/_cookbook/dim_and_brighten_lights.markdown b/source/_cookbook/dim_and_brighten_lights.markdown deleted file mode 100644 index 160d30db7b6..00000000000 --- a/source/_cookbook/dim_and_brighten_lights.markdown +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: "Dim (and brighten) lights via a remote" -description: "The scripts and automations to allow you to use a remote to dim and brighten a light" -ha_category: Automation Examples ---- - -This requires both a dimmable light, and a Z-Wave remote control that sends one scene when a button is held, and another when released. This ensures that the scripts (which follow) are stopped, avoiding the risks of a script that never ends. - -In the following automations, replace `zwave.YOUR_REMOTE` with the actual entity ID of your controller, and `light.YOUR_LIGHT` with the actual entity ID of your light. - -For the controller this was written for scene ID 13 was sent when the up button was held, and 15 when released. Similarly, scene 14 when the down button was held, and 16 when released. You'll need to use the scene IDs that are sent by your remote if different. - -```yaml -automation: - - - alias: "Make the lights go bright" - initial_state: "on" - trigger: - - platform: event - event_type: zwave.scene_activated - event_data: - scene_id: 13 - entity_id: zwave.YOUR_REMOTE - action: - - service: script.turn_on - target: - entity_id: script.ramp_light - data: - variables: - direction: up - light: light.YOUR_LIGHT - - - alias: "Make the lights go dim" - initial_state: "on" - trigger: - - platform: event - event_type: zwave.scene_activated - event_data: - scene_id: 14 - entity_id: zwave.YOUR_REMOTE - action: - - service: script.turn_on - target: - entity_id: script.ramp_light - data: - variables: - direction: down - light: light.YOUR_LIGHT - - - alias: "Stop the light just there" - initial_state: "on" - trigger: - - platform: event - event_type: zwave.scene_activated - event_data: - scene_id: 15 - entity_id: zwave.YOUR_REMOTE - - platform: event - event_type: zwave.scene_activated - event_data: - scene_id: 16 - entity_id: zwave.YOUR_REMOTE - action: - - service: script.turn_off - target: - entity_id: script.ramp_light -``` - -There are two variables that control the speed of the change for the script below. The first is the step -- small steps create a smooth transition. The second is the delay -- larger delays will create a slower transition. -Please note that some lights do not update their new brightness attribute very quickly, so make sure to use a large enough delay for your particular light. - -There are two other variables that control the minimum and maximum brightness levels at which to stop the script. - -To allow flexibility all four variables are controlled by [Input Number](/integrations/input_number/) entities so that it's easy to tune (or manage through an automation). - -```yaml -input_number: - light_step: - name: "Step the lights this much" - initial: 20 - min: 1 - max: 64 - step: 1 - - light_minimum: - name: "No dimmer than this" - initial: 5 - min: 1 - max: 255 - step: 1 - - light_maximum: - name: "No brighter than this" - initial: 255 - min: 50 - max: 255 - step: 1 - - light_delay_ms: - name: "Step the lights this often (ms)" - initial: 500 - min: 100 - max: 5000 - step: 100 -``` - -Now the script. - -{% raw %} -```yaml -script: - ramp_light: - alias: "Ramp Light Brightness" - description: Ramp light brightness up or down - fields: - direction: - description: "Direction to change brightness: up or down" - example: up - light: - description: Light entity_id - example: light.family_room_lamp - mode: restart - sequence: - - repeat: - while: - - condition: template - value_template: > - {% set br = state_attr(light, 'brightness')|int(0) %} - {% set mn = states('input_number.light_minimum')|int %} - {% set mx = states('input_number.light_maximum')|int %} - {{ direction == 'up' and br < mx or - direction == 'down' and br > mn }} - sequence: - - service: light.turn_on - target: - entity_id: "{{ light }}" - data: - brightness: > - {% set br = state_attr(light, 'brightness')|int(0) %} - {% set mn = states('input_number.light_minimum')|int %} - {% set mx = states('input_number.light_maximum')|int %} - {% set st = states('input_number.light_step')|int %} - {% if direction == 'up' %} - {{ [br + st, mx]|min }} - {% else %} - {{ [br - st, mn]|max }} - {% endif %} - - delay: - milliseconds: "{{ states('input_number.light_delay_ms')|int }}" -``` -{% endraw %} diff --git a/source/_cookbook/dim_lights_when_playing_media.markdown b/source/_cookbook/dim_lights_when_playing_media.markdown deleted file mode 100644 index 45231c140fc..00000000000 --- a/source/_cookbook/dim_lights_when_playing_media.markdown +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "Dim lights when playing media" -description: "Dim lights up or down when playing media" -ha_category: Automation Examples ---- - -Like it how the lights dim up/down at the movies? Do it at home as well! - -This example uses the [media player](/integrations/media_player/), [lights](/integrations/light/) (transitions) and the [sun](/integrations/sun/) integration. We'll use actions to detect media player state changes and [scenes](/integrations/scene/) to control multiple lights and transition between scenes. - -#### Scenes -One scene for normal light, one for when movies are on. A 2 second transition gives a nice 'feel' to the switch. - -```yaml -scene: - - name: Livingroom normal - entities: - light.light1: - state: on - transition: 2 - brightness_pct: 60 - light.light2: - state: on - transition: 2 - brightness_pct: 85 - - name: Livingroom dim - entities: - light.light1: - state: on - transition: 2 - brightness_pct: 30 - light.light2: - state: on - transition: 2 - brightness_pct: 55 -``` - - -#### Automation -The paused/stopped state is best matched using "from: 'playing'". Adding in the sun condition as we only want this when it's dark. - -```yaml -automation: - - alias: "Media player paused/stopped" - trigger: - - platform: state - entity_id: media_player.htpc - from: "playing" - to: "idle" - condition: - - condition: state - entity_id: sun.sun - state: "below_horizon" - action: - service: scene.turn_on - target: - entity_id: scene.livingroom_normal - - - alias: "Media player playing" - trigger: - - platform: state - entity_id: media_player.htpc - to: "playing" - from: "idle" - condition: - - condition: state - entity_id: sun.sun - state: "below_horizon" - action: - service: scene.turn_on - target: - entity_id: scene.livingroom_dim -``` - diff --git a/source/_cookbook/foscam_away_mode_PTZ.markdown b/source/_cookbook/foscam_away_mode_PTZ.markdown deleted file mode 100644 index 7cdaaffdc9a..00000000000 --- a/source/_cookbook/foscam_away_mode_PTZ.markdown +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: "Foscam Recording during Away Mode Only using Pan/Tilt/Zoom Control and Motion Detection" -description: "Example of how to set Foscam to only have Motion Detection Recording while no one is home. When users are home the Foscam will indicate it is not recording by pointing down and away from users" -ha_category: Automation Examples ---- - -This requires a [Foscam IP Camera](/integrations/foscam) camera with PTZ (Pan, Tilt, Zoom) and CGI functionality ([Source](https://www.foscam.es/descarga/Foscam-IPCamera-CGI-User-Guide-AllPlatforms-2015.11.06.pdf)) - -Foscam Cameras can be controlled by Home Assistant through a number of CGI commands. -The following outlines examples of the switch, services, and scripts required to move between 2 preset destinations while controlling motion detection, but many other options of movement are provided in the Foscam CGI User Guide linked above. - -The `switch.foscam_motion` will control whether the motion detection is on or off. This switch supports `statecmd`, which checks the current state of motion detection. - -{% raw %} - -```yaml -# Replace admin and password with an "Admin" privileged Foscam user -# Replace ipaddress with the local IP address of your Foscam -switch: - platform: command_line - switches: - #Switch for Foscam Motion Detection - foscam_motion: - command_on: "curl -k --tls-max 1.2 "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&usr=admin&pwd=password"" - command_off: 'curl -k --tls-max 1.2 "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=0&usr=admin&pwd=password"' - command_state: 'curl -k --silent --tls-max 1.2 "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=admin&pwd=password" | grep "isEnable" | cut -b 15' - value_template: '{{ value == "1" }}' -``` - -{% endraw %} - -The service `shell_command.foscam_turn_off` sets the camera to point down and away to indicate it is not recording, and `shell_command.foscam_turn_on` sets the camera to point where I'd like to record. Each of these services require preset points to be added to your camera. See source above for additional information. - -```yaml -shell_command: - #Created a preset point in Foscam Web Interface named Off which essentially points the camera down and away - foscam_turn_off: 'curl -k --tls-max 1.2 "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=Off&usr=admin&pwd=password"' - #Created a preset point in Foscam Web Interface named Main which points in the direction I would like to record - foscam_turn_on: 'curl -k --tls-max 1.2 "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=ptzGotoPresetPoint&name=Main&usr=admin&pwd=password"' -``` - -The `script.foscam_off` and `script.foscam_on` can be used to set the motion detection appropriately, and then move the camera. These scripts can be called as part of an automation with `device_tracker` triggers to set `home` and `not_home` modes for your Foscam and disable motion detection recording while `home`. - -```yaml -script: - foscam_off: - sequence: - - service: switch.turn_off - target: - entity_id: switch.foscam_motion - - service: shell_command.foscam_turn_off - foscam_on: - sequence: - - service: switch.turn_off - target: - entity_id: switch.foscam_motion - - service: shell_command.foscam_turn_on - - service: switch.turn_on - target: - entity_id: switch.foscam_motion -``` - -To automate Foscam being set to "on" (facing the correct way with motion sensor on), I used the following simple automation: - -```yaml -automation: - - alias: "Set Foscam to Away Mode when I leave home" - trigger: - platform: state - entity_id: group.family - from: "home" - action: - service: script.foscam_on - - alias: "Set Foscam to Home Mode when I arrive Home" - trigger: - platform: state - entity_id: group.family - to: "home" - action: - service: script.foscam_off -``` diff --git a/source/_cookbook/notify_if__new_ha_release.markdown b/source/_cookbook/notify_if__new_ha_release.markdown deleted file mode 100644 index c4fcedf70cd..00000000000 --- a/source/_cookbook/notify_if__new_ha_release.markdown +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: "Send notification if new Home Assistant release" -description: "Basic example of how to send a notification if a new Home Assistant release is available" -ha_category: Automation Examples ---- - -The following example sends a notification via XMPP if a new Home Assistant release is available: - -```yaml -notify: - - platform: xmpp - name: jabber - sender: sender@jabber.org - password: !secret xmpp_password - recipient: recipient@jabber.org - -automation: - - alias: "Update notification" - trigger: - - platform: state - entity_id: binary_sensor.updater - from: "off" - to: "on" - action: - - service: notify.jabber - data: - message: "There is a new Home Assistant release available." -``` - -You can use [templates](/topics/templating/) to include the release number of Home Assistant if you prefer. The following example sends a notification via [Pushbullet](/integrations/pushbullet) with the Home Assistant version in the message. - -{% raw %} - -```yaml -notify: - - platform: pushbullet - api_key: "YOUR_KEY_HERE" - name: pushbullet - -automation: - - alias: "Update notification" - trigger: - - platform: state - entity_id: binary_sensor.updater - from: "off" - to: "on" - action: - - service: notify.pushbullet - data: - title: "New Home Assistant Release" - target: "YOUR_TARGET_HERE" #See Pushbullet integration for usage - message: "Home Assistant {{ state_attr('binary_sensor.updater', 'newest_version') }} is now available." -``` - -{% endraw %} diff --git a/source/_cookbook/notify_if_over_threshold.markdown b/source/_cookbook/notify_if_over_threshold.markdown deleted file mode 100644 index 9ac53100330..00000000000 --- a/source/_cookbook/notify_if_over_threshold.markdown +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "Send notification based on sensor" -description: "Basic example of how to send a templated notification if a sensor is over a given threshold" -ha_category: Automation Examples ---- - -The following example sends a notification via pushbullet if a sensor is over a critical value: - -{% raw %} - -```yaml -notify me: - platform: pushbullet - api_key: "API_KEY_HERE" - name: mypushbullet - -automation: - - alias: "FanOn" - trigger: - platform: numeric_state - entity_id: sensor.furnace - above: 2 - action: - service: notify.mypushbullet - data: - title: "Furnace fan is running" - message: "Fan running because current is {{ states('sensor.furnace') }} amps" -``` - -{% endraw %} - -If you also want a notification when it drops back down below that limit, you could add this as well: - -{% raw %} - -```yaml - - alias: "FanOff" - trigger: - platform: numeric_state - entity_id: sensor.furnace - below: 2 - action: - service: notify.mypushbullet - data: - title: "Furnace fan is stopped" - message: "Fan stopped because current is {{ states('sensor.furnace') }} amps" -``` - -{% endraw %} diff --git a/source/_cookbook/perform_actions_based_on_input_select.markdown b/source/_cookbook/perform_actions_based_on_input_select.markdown deleted file mode 100644 index 5f3e9aa648d..00000000000 --- a/source/_cookbook/perform_actions_based_on_input_select.markdown +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: "Perform actions based on input select" -description: "Example playing media to Chromecast based on input select element" -ha_category: Automation Examples ---- - -This example uses an [`input_select`](/integrations/input_select/) element to pick which mp3 file to play on a [Chromecast](/integrations/cast/). - -```yaml -# Define our dropdown list -input_select: - lullaby: - name: Lullaby - options: - - Rain - - Babbling Brook - - None - initial: None - icon: mdi:weather-rainy - -# Define our media player -media_player: - - platform: cast - host: chromecast-nursery - name: Nursery - -automation: - # If you select "Rain", play the "rain.mp3" file - - alias: "Play Rain Lullaby" - - trigger: - platform: state - entity_id: input_select.lullaby - to: "Rain" - - action: - service: media_player.play_media - target: - entity_id: media_player.nursery - data: - media_content_id: http://fileserver/rain.mp3 - media_content_type: music - - - # If you select "Babbling Brook", play the "babbling_brook.mp3" file - - alias: "Play Babbling Brook Lullaby" - - trigger: - platform: state - entity_id: input_select.lullaby - to: "Babbling Brook" - - action: - service: media_player.play_media - target: - entity_id: media_player.nursery - data: - media_content_id: http://fileserver/babbling_brook.mp3 - media_content_type: music - - # If you select "None, turn the Chromecast off - - alias: "Stop the Lullaby" - - trigger: - platform: state - entity_id: input_select.lullaby - to: "None" - - action: - service: media_player.turn_off - target: - entity_id: media_player.nursery -``` -A little bit more complex example that uses [`input_select`](/integrations/input_select/) and template to decide what to play, and which [Chromecast](/integrations/cast/) to play on. - -{% raw %} - -```yaml -input_select: - radio_station: - name: Radio Station - options: - - Z88.3 - - Virgin - - RMC - - rmcHQ - - 105 - - None - initial: None - icon: mdi:radio - radio_player: - name: Radio Player - options: - - Mansarda - - Doccia - - Bed - - Bath - - Salotto - - Salotto Video - - None - initial: None - icon: mdi:airplay - -automation: - - alias: "Stop Streaming Radio" - trigger: - - platform: state - entity_id: input_select.radio_station - to: "None" - action: - service: media_player.turn_off - target: - entity_id: > - {% if is_state("input_select.radio_player", "Mansarda") %} - media_player.bed_2 - {%-elif is_state("input_select.radio_player", "Doccia") %} - media_player.bed_3 - {%-elif is_state("input_select.radio_player", "Bed") %} - media_player.bed - {%-elif is_state("input_select.radio_player", "Bath") %} - media_player.bath - {%-elif is_state("input_select.radio_player", "Salotto") %} - media_player.salotto - {%-elif is_state("input_select.radio_player", "Salotto Video") %} - media_player.salotto_video - {% else %} - none - {% endif %} - - - alias: "Stream Radio - Template" - trigger: - - platform: state - entity_id: input_select.radio_station - action: - - service: media_player.play_media - target: - entity_id: > - {% if is_state("input_select.radio_player", "Mansarda") %} - media_player.bed_2 - {%-elif is_state("input_select.radio_player", "Doccia") %} - media_player.bed_3 - {%-elif is_state("input_select.radio_player", "Bed") %} - media_player.bed - {%-elif is_state("input_select.radio_player", "Bath") %} - media_player.bath - {%-elif is_state("input_select.radio_player", "Salotto") %} - media_player.salotto - {%-elif is_state("input_select.radio_player", "Salotto Video") %} - media_player.salotto_video - {% else %} - none - {% endif %} - data: - media_content_id: > - {% if is_state("input_select.radio_station", "Z88.3") %} - http://ice.zradio.org/z/high.mp3 - {%-elif is_state("input_select.radio_station", "Virgin") %} - http://icecast.unitedradio.it/Virgin.mp3 - {%-elif is_state("input_select.radio_station", "RMC") %} - http://icecast.unitedradio.it/RMC.mp3 - {%-elif is_state("input_select.radio_station", "rmcHQ") %} - http://icecast.unitedradio.it/rmcHQ.mp3 - {%-elif is_state("input_select.radio_station", "105") %} - http://icecast.unitedradio.it/Radio105.mp3 - {% else %} - none - {% endif %} - media_content_type: "music" -``` - -{% endraw %} diff --git a/source/_cookbook/restart_ha_if_wemo_switch_is_not_detected.markdown b/source/_cookbook/restart_ha_if_wemo_switch_is_not_detected.markdown deleted file mode 100644 index f315c64d9b4..00000000000 --- a/source/_cookbook/restart_ha_if_wemo_switch_is_not_detected.markdown +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: "Restart Home Assistant if Wemo Switch is not detected" -description: "Restart Home Assistant if Wemo Switch is not detected." -ha_category: Automation Examples ---- - -### Restart Home Assistant - -This configuration example is restarting Home Assistant if a [WeMo](/integrations/wemo) switch is not detected. An additional MQTT switch is present for stopping Home Assistant and can be triggered by [IFTTT](/integrations/ifttt/). The running batch script will automatically restart Home Assistant if the process isn't found anymore. - -{% raw %} - -```yaml -mqtt: - broker: 127.0.0.1 - port: 1883 - client_id: home-assistant-1 - keepalive: 60 - -device_tracker: - - platform: nmap_tracker - hosts: 192.168.0.1-255 - home_interval: 1 - interval_seconds: 30 - consider_home: 900 - -ifttt: - key: *** - -notify: - - platform: pushbullet - api_key: *** - name: pushbullet - -wemo: - discovery: true - -switch: - - platform: mqtt - state_topic: "home/killhass" - command_topic: "home/killhass" - name: "KillHass" - qos: 0 - payload_on: "ON" - payload_of: "OFF" - optimistic: false - -script: - restarthawemo: - alias: "Restart HA if WeMo isn't found after 15 minutes" - sequence: - - delay: - minutes: 15 - - service: notify.pushbullet - data: - message: "WeMo not found, restarting HA" - - service: switch.turn_on - target: - entity_id: switch.killhass - -automation: -- alias: "Restart HA if WeMo switch isn't found after 15 minutes" - trigger: - platform: state - entity_id: device_tracker.wemo - from: "not_home" - to: "home" - condition: - - condition: template - value_template: '{% if states.switch.wemo %}false{% else %}true{% endif %}' - - condition: state - entity_id: script.restarthawemo - state: "off" - action: - service: homeassistant.turn_on - target: - entity_id: script.restarthawemo -- alias: "Stop HA" - trigger: - - platform: state - entity_id: switch.KillHass - to: "on" - action: - service: homeassistant.stop - - alias: "Stop restarting HA is WeMo is found" - trigger: - platform: template - value_template: '{% if states.switch.wemo %}true{% else %}false{% endif %}' - condition: - condition: state - entity_id: script.restarthawemo - state: "on" - action: - service: homeassistant.turn_off - target: - entity_id: script.restarthawemo -``` - -{% endraw %} diff --git a/source/_cookbook/send_a_reminder.markdown b/source/_cookbook/send_a_reminder.markdown deleted file mode 100644 index 9b4509bbf83..00000000000 --- a/source/_cookbook/send_a_reminder.markdown +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Send a reminder" -description: "Send a reminder" -ha_category: Automation Examples ---- - -Always forget to eat lunch? Let Home Assistant send you a reminder. - -Add a [notify platform](/integrations/notify/) of your choice. - -```yaml -notify: - - platform: xmpp - name: jabber - sender: YOUR_JID - password: YOUR_JABBER_ACCOUNT_PASSWORD - recipient: YOUR_RECIPIENT -``` - -and automation part to your `configuration.yaml` file. - -```yaml -automation: - - alias: "Send message at a given time" - trigger: - platform: time - at: "12:15:00" - action: - service: notify.jabber - data: - message: "Time for lunch" -``` diff --git a/source/_cookbook/sonos_say.markdown b/source/_cookbook/sonos_say.markdown deleted file mode 100644 index 3167b14009b..00000000000 --- a/source/_cookbook/sonos_say.markdown +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "Sonos say script to speak with text-to-speech" -description: "Sonos say script to use text-to-speech with Sonos" -ha_category: Automation Examples ---- - -#### Sonos say script to speak with text-to-speech - -This script allows you to use [TTS](/integrations/#text-to-speech) on Sonos. - -{% raw %} - -```yaml -script: - sonos_say: - alias: "Sonos TTS script" - sequence: - - service: sonos.snapshot - target: - entity_id: "{{ sonos_entity }}" - - service: sonos.unjoin - target: - entity_id: "{{ sonos_entity }}" - - service: media_player.volume_set - data: - entity_id: "{{ sonos_entity }}" - volume_level: "{{ volume }}" - - service: tts.voicerss_say - data: - entity_id: "{{ sonos_entity }}" - message: "{{ message }}" - - delay: "{{ delay }}" - - service: sonos.restore - target: - entity_id: "{{ sonos_entity }}" -``` - -{% endraw %} - -We call this now with: - -```yaml -automation: - - alias: "test" - trigger: - - platform: state - entity_id: input_boolean.mytest - action: - - service: script.sonos_say - data: - sonos_entity: media_player.office - volume: 0.5 - message: "Your husband coming home!" - delay: "00:00:05" -``` - -Note that this example uses the `voicerss` text-to-speech platform. There are many platforms that can be used. The one installed by default with Home Assistant is Google TTS. This appears in your `configuration.yaml` file as: - -```yaml -tts: - - platform: google_translate -``` - -If you want to use this TTS engine, change the line in the example provided to: - -```txt -- service: tts.google_translate_say -``` diff --git a/source/_cookbook/track_battery_level.markdown b/source/_cookbook/track_battery_level.markdown deleted file mode 100644 index 9ea3ce8a960..00000000000 --- a/source/_cookbook/track_battery_level.markdown +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: "Track your phone battery level" -description: "Basic example how to track the battery level of your mobile devices." -ha_category: Automation Examples ---- - -## Android and iOS Devices - -The [Home Assistant Companion Apps](https://companion.home-assistant.io/) for iOS and Android pass the current battery level to Home Assistant with every location update. The default name of the sensor used is `sensor.battery_level`. - -### iOS Devices - -If you have a device running iOS (iPhone, iPad, etc), The [iCloud](/integrations/icloud) integration is gathering various details about your device including the battery level. To display it in the Frontend use a [template sensor](/integrations/template). You can also use the `battery` [sensor device class](/integrations/sensor/#device-class) to dynamically change the icon with the battery level. - -{% raw %} - -```yaml -sensor: - - platform: template - sensors: - battery_iphone: - friendly_name: iPhone Battery - unit_of_measurement: "%" - value_template: >- - {%- if state_attr('device_tracker.iphone', 'battery') %} - {{ state_attr('device_tracker.iphone', 'battery')|round }} - {% else %} - {{ states('sensor.battery_iphone') }} - {%- endif %} - device_class: battery -``` - -{% endraw %} - -### Android Devices - -On your Android device, once the official [Home Assistant Companion app](https://companion.home-assistant.io/) is installed and connected to your Home Assistance instance, you will be able to display the battery level in the frontend by adding a [template sensor](/integrations/template) to your configuration YAML file. You can also use the battery [sensor device class](/integrations/sensor/#device-class) to dynamically change the icon with the battery level. - -{% raw %} - -```yaml -sensor: - - platform: template - sensors: - battery_phone: - friendly_name: AndroidPhone Battery - unit_of_measurement: "%" - value_template: >- - {%- if state_attr('device_tracker.xxxxx', 'battery_level') %} - {{ state_attr('device_tracker.xxxxx', 'battery_level')|round }} - {% else %} - {{ states('device_tracker.xxxxx') }} - {%- endif %} - device_class: battery -``` - -{% endraw %} - -Replace 'device_tracker.xxxxx' with your phone name as shown under Configuration/Devices Device Info/Entities, for example: 'device_tracker.mi_a1' - -#### MQTT - -If you have configured Owntracks to send reports via MQTT you can use the received data via a MQTT sensor. -Replace username with your MQTT username (for the embedded MQTT it's simply homeassistant), and deviceid with the set Device ID in Owntracks. - -{% raw %} - -```yaml -sensor: - - platform: mqtt - state_topic: "owntracks/username/deviceid" - name: "Battery Tablet" - unit_of_measurement: "%" - value_template: "{{ value_json.batt }}" - device_class: battery -``` - -{% endraw %} - -#### HTTP - -If you have configured Owntracks to send reports to your Home Assistant instance via HTTP you can use a template sensor. -Replace `deviceid` with the set Device ID in Owntracks. - -{% raw %} - -```yaml -sensor: -- platform: template - sensors: - your_battery_sensor_name: - value_template: "{{ state_attr('device_tracker.deviceid', 'battery_level') }}" - unit_of_measurement: "%" -``` - -{% endraw %} diff --git a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown deleted file mode 100644 index aeb91e0e89f..00000000000 --- a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: "Turn on lights for 10 minutes after motion detected" -description: "Turn on lights for 10 minutes when motion detected." -ha_category: Automation Examples ---- - -#### Turn on lights with a resettable off timer - -This recipe will turn on a light when there is motion and turn off the light when ten minutes has passed without any motion events. - -```yaml -automation: -- alias: "Turn on kitchen light when there is movement" - trigger: - platform: state - entity_id: sensor.motion_sensor - to: "on" - action: - service: light.turn_on - target: - entity_id: light.kitchen_light - -- alias: "Turn off kitchen light 10 minutes after last movement" - trigger: - platform: state - entity_id: sensor.motion_sensor - to: "off" - for: - minutes: 10 - action: - service: light.turn_off - target: - entity_id: light.kitchen_light -``` - -Or in the case of multiple sensors/triggers: - -```yaml -automation: -- alias: "Turn on hallway lights when the doorbell rings, the front door opens or if there is movement" - trigger: - - platform: state - entity_id: sensor.motion_sensor, binary_sensor.front_door, binary_sensor.doorbell - to: "on" - action: - - service: light.turn_on - target: - entity_id: - - light.hallway_0 - - light.hallway_1 - - service: timer.start - target: - entity_id: timer.hallway - -- alias: "Turn off hallway lights 10 minutes after trigger" - trigger: - platform: event - event_type: timer.finished - event_data: - entity_id: timer.hallway - action: - service: light.turn_off - target: - entity_id: - - light.hallway_0 - - light.hallway_1 - -timer: - hallway: - duration: "00:10:00" -``` - -You can also restrict lights from turning on based on time of day and implement transitions for fading lights on and off. - -```yaml -- alias: "Motion Sensor Lights On" - trigger: - platform: state - entity_id: binary_sensor.ecolink_pir_motion_sensor_sensor - to: "on" - condition: - condition: time - after: "07:30" - before: "23:30" - action: - service: homeassistant.turn_on - target: - entity_id: group.office_lights - data: - transition: 15 - - -- alias: "Motion Sensor Lights Off" - trigger: - - platform: state - entity_id: binary_sensor.ecolink_pir_motion_sensor_sensor - to: "off" - for: - minutes: 15 - action: - - service: homeassistant.turn_off - target: - entity_id: group.office_lights - data: - transition: 160 -``` diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index 342b1ae6a9d..623c7560bc4 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -10,8 +10,6 @@ description: "Integrations (see below) used to be known as components." - topic: Condition description: "[Conditions](/docs/scripts/conditions/) are an optional part of an automation that will prevent an action from firing if they are not met." -- topic: Cookbook - description: "The [Cookbook](/cookbook/) contains a set of configuration examples of Home Assistant from the community." - topic: Cover description: "[Covers](/integrations/cover) are devices such as blinds, garage doors, etc that can be opened and closed and optionally set to a specific position." - topic: Customize diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index 14cf80c8ab1..67afdee479b 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -20,7 +20,7 @@ If you want to use a different folder for configuration, use the configuration c Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains integrations to be loaded along with their configurations. Throughout the documentation you will find snippets that you can add to your configuration file to enable specific functionality. -If you run into trouble while configuring Home Assistant, refer the [configuration troubleshooting page](/getting-started/troubleshooting-configuration/) and at the [`configuration.yaml` examples](/cookbook/#example-configurationyaml). +If you run into trouble while configuring Home Assistant, refer the [configuration troubleshooting page](/getting-started/troubleshooting-configuration/) and at the [`configuration.yaml` examples](/examples/#example-configurationyaml).
diff --git a/source/_docs/configuration/splitting_configuration.markdown b/source/_docs/configuration/splitting_configuration.markdown index bb7edc22e6a..76cfefbcf7b 100644 --- a/source/_docs/configuration/splitting_configuration.markdown +++ b/source/_docs/configuration/splitting_configuration.markdown @@ -5,7 +5,7 @@ description: "Splitting the configuration.yaml into several files." So you've been using Home Assistant for a while now and your `configuration.yaml` file brings people to tears or you simply want to start off with the distributed approach, here's how to split the `configuration.yaml` into more manageable (read: humanly readable) pieces. -First off, several community members have sanitized (read: without API keys/passwords etc) versions of their configurations available for viewing, you can see a list of them [here](/cookbook/#example-configurationyaml). +First off, several community members have sanitized (read: without API keys/passwords etc) versions of their configurations available for viewing, you can see a list of them [here](/examples/#example-configurationyaml). As commenting code doesn't always happen, please read on for the details. diff --git a/source/_docs/configuration/state_object.markdown b/source/_docs/configuration/state_object.markdown index 309b62fd709..ba20fe37a5f 100644 --- a/source/_docs/configuration/state_object.markdown +++ b/source/_docs/configuration/state_object.markdown @@ -32,4 +32,4 @@ When using templates, attributes will be available by their name. For example `s | `assumed_state` | Boolean if the current state is an assumption. [More info](/blog/2016/02/12/classifying-the-internet-of-things/#classifiers) Example: `True`. | | `unit_of_measurement` | The unit of measurement the state is expressed in. Used for grouping graphs or understanding the entity. Example: `°C`. | -When an attribute contains spaces, you can retrieve it like this: `states.sensor.livingroom.attributes["Battery numeric"]`. +When an attribute contains spaces, you can retrieve it like this: `state_attr('sensor.livingroom', 'Battery numeric')`. diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index e4ae508a881..c1ff0dc3d2a 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -440,8 +440,8 @@ Some of these functions can also be used in a [filter](https://jinja.palletsproj - `round(x, "floor")` will always round down to `x` decimals - `round(x, "ceil")` will always round up to `x` decimals - `round(1, "half")` will always round to the nearest .5 value. `x` should be 1 for this mode -- Filter `max` will obtain the largest item in a sequence. -- Filter `min` will obtain the smallest item in a sequence. +- Filter `[x, y, ...] | max` will obtain the largest item in a sequence. +- Filter `[x, y, ...] | min` will obtain the smallest item in a sequence. - Filter `value_one|bitwise_and(value_two)` perform a bitwise and(&) operation with two values. - Filter `value_one|bitwise_or(value_two)` perform a bitwise or(\|) operation with two values. - Filter `ord` will return for a string of length one an integer representing the Unicode code point of the character when the argument is a Unicode object, or the value of the byte when the argument is an 8-bit string. @@ -544,7 +544,7 @@ The following overview contains a couple of options to get the needed values: {% endraw %} -To evaluate a response, go to **{% my developer_templates title="Developer Tools -> Template" %}**, create your output in "Template editor", and check the result. +To evaluate a response, go to **{% my developer_template title="Developer Tools -> Template" %}**, create your output in "Template editor", and check the result. {% raw %} diff --git a/source/_docs/frontend.markdown b/source/_docs/frontend.markdown index c743b25912b..a5780afaf89 100644 --- a/source/_docs/frontend.markdown +++ b/source/_docs/frontend.markdown @@ -9,7 +9,7 @@ The frontend of Home Assistant is built with [Polymer](https://www.polymer-proje

-The [User Interface section](/cookbook/#user-interface) can give you some starting points to expand the frontend. +The [User Interface section](/examples/#user-interface) can give you some starting points to expand the frontend. If you want to work on the frontend, please refer to the [Frontend Development documentation](/developers/frontend/). diff --git a/source/_cookbook/configuration_yaml_by_DrJohnT.markdown b/source/_examples/configuration_yaml_by_DrJohnT.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_DrJohnT.markdown rename to source/_examples/configuration_yaml_by_DrJohnT.markdown diff --git a/source/_cookbook/configuration_yaml_by_alok_saboo.markdown b/source/_examples/configuration_yaml_by_alok_saboo.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_alok_saboo.markdown rename to source/_examples/configuration_yaml_by_alok_saboo.markdown diff --git a/source/_cookbook/configuration_yaml_by_aneisch.markdown b/source/_examples/configuration_yaml_by_aneisch.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_aneisch.markdown rename to source/_examples/configuration_yaml_by_aneisch.markdown diff --git a/source/_cookbook/configuration_yaml_by_apocrathia.markdown b/source/_examples/configuration_yaml_by_apocrathia.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_apocrathia.markdown rename to source/_examples/configuration_yaml_by_apocrathia.markdown diff --git a/source/_cookbook/configuration_yaml_by_carlo_costanzo.markdown b/source/_examples/configuration_yaml_by_carlo_costanzo.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_carlo_costanzo.markdown rename to source/_examples/configuration_yaml_by_carlo_costanzo.markdown diff --git a/source/_cookbook/configuration_yaml_by_cy1701.markdown b/source/_examples/configuration_yaml_by_cy1701.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_cy1701.markdown rename to source/_examples/configuration_yaml_by_cy1701.markdown diff --git a/source/_cookbook/configuration_yaml_by_geekofweek.markdown b/source/_examples/configuration_yaml_by_geekofweek.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_geekofweek.markdown rename to source/_examples/configuration_yaml_by_geekofweek.markdown diff --git a/source/_cookbook/configuration_yaml_by_gummientchen.markdown b/source/_examples/configuration_yaml_by_gummientchen.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_gummientchen.markdown rename to source/_examples/configuration_yaml_by_gummientchen.markdown diff --git a/source/_cookbook/configuration_yaml_by_jimpower.markdown b/source/_examples/configuration_yaml_by_jimpower.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_jimpower.markdown rename to source/_examples/configuration_yaml_by_jimpower.markdown diff --git a/source/_cookbook/configuration_yaml_by_jonathan_adams.markdown b/source/_examples/configuration_yaml_by_jonathan_adams.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_jonathan_adams.markdown rename to source/_examples/configuration_yaml_by_jonathan_adams.markdown diff --git a/source/_cookbook/configuration_yaml_by_joshuagarrison27.markdown b/source/_examples/configuration_yaml_by_joshuagarrison27.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_joshuagarrison27.markdown rename to source/_examples/configuration_yaml_by_joshuagarrison27.markdown diff --git a/source/_cookbook/configuration_yaml_by_klaasnicolaas.markdown b/source/_examples/configuration_yaml_by_klaasnicolaas.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_klaasnicolaas.markdown rename to source/_examples/configuration_yaml_by_klaasnicolaas.markdown diff --git a/source/_cookbook/configuration_yaml_by_mcaminiti.markdown b/source/_examples/configuration_yaml_by_mcaminiti.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_mcaminiti.markdown rename to source/_examples/configuration_yaml_by_mcaminiti.markdown diff --git a/source/_cookbook/configuration_yaml_by_shortbloke.markdown b/source/_examples/configuration_yaml_by_shortbloke.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_shortbloke.markdown rename to source/_examples/configuration_yaml_by_shortbloke.markdown diff --git a/source/_cookbook/configuration_yaml_by_silvrrgit.markdown b/source/_examples/configuration_yaml_by_silvrrgit.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_silvrrgit.markdown rename to source/_examples/configuration_yaml_by_silvrrgit.markdown diff --git a/source/_cookbook/configuration_yaml_by_skalavala.markdown b/source/_examples/configuration_yaml_by_skalavala.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_skalavala.markdown rename to source/_examples/configuration_yaml_by_skalavala.markdown diff --git a/source/_cookbook/configuration_yaml_by_tinkerer.markdown b/source/_examples/configuration_yaml_by_tinkerer.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_tinkerer.markdown rename to source/_examples/configuration_yaml_by_tinkerer.markdown diff --git a/source/_cookbook/configuration_yaml_by_ubhits.markdown b/source/_examples/configuration_yaml_by_ubhits.markdown similarity index 100% rename from source/_cookbook/configuration_yaml_by_ubhits.markdown rename to source/_examples/configuration_yaml_by_ubhits.markdown diff --git a/source/_cookbook/google_maps_card.markdown b/source/_examples/google_maps_card.markdown similarity index 100% rename from source/_cookbook/google_maps_card.markdown rename to source/_examples/google_maps_card.markdown diff --git a/source/_cookbook/notify.mqtt.markdown b/source/_examples/notify.mqtt.markdown similarity index 100% rename from source/_cookbook/notify.mqtt.markdown rename to source/_examples/notify.mqtt.markdown diff --git a/source/_cookbook/owntracks_two_mqtt_broker.markdown b/source/_examples/owntracks_two_mqtt_broker.markdown similarity index 100% rename from source/_cookbook/owntracks_two_mqtt_broker.markdown rename to source/_examples/owntracks_two_mqtt_broker.markdown diff --git a/source/_includes/asides/component_navigation.html b/source/_includes/asides/component_navigation.html index 75a809b5399..450fcd4d241 100644 --- a/source/_includes/asides/component_navigation.html +++ b/source/_includes/asides/component_navigation.html @@ -18,39 +18,20 @@
{%- endif -%} - {%- if page.ha_iot_class -%} -
- IoT class: {{ page.ha_iot_class }} -
- {%- endif -%} +
+ The {{ page.name | default: page.title }} integration was introduced in Home Assistant {{ page.ha_release | default: "unknown" }}, + and it's used by + {{ 100.0 | times: site.data.analytics_data.integrations[page.ha_domain] | divided_by: site.data.analytics_data.reports_integrations | round: 1 | remove: ".0" }}% of the active installations. + Its IoT class is {{ page.ha_iot_class | default: "unknown" }} - {%- if page.ha_quality_scale -%} -
- Quality Scale: - {%- if page.ha_quality_scale == 'platinum' -%} - 🏆 (platinum) - {%- elsif page.ha_quality_scale == 'gold' -%} - 🥇 (gold) - {%- elsif page.ha_quality_scale == 'silver' -%} - 🥈 (silver) - {%- elsif page.ha_quality_scale == 'internal' -%} - 🏠 (internal) - {%- endif -%} - -
- {%- endif -%} + {%- if page.ha_quality_scale %} + and scores {{page.ha_quality_scale}} on our quality scale + {%- endif -%}. - {%- if page.ha_release -%} -
- Introduced in release: {{ page.ha_release }} -
- {%- endif -%} - - {%- if page.ha_domain -%} -
- Source: View on GitHub -
- {%- endif -%} + {% if page.ha_domain %} + You can find the source for this integration on GitHub. + {%- endif -%} +
{%- if page.ha_category.first -%}
diff --git a/source/_includes/asides/cookbook_navigation.html b/source/_includes/asides/cookbook_navigation.html deleted file mode 100644 index 8713bb4bf16..00000000000 --- a/source/_includes/asides/cookbook_navigation.html +++ /dev/null @@ -1,26 +0,0 @@ -
- {% assign cookbook = site.cookbook | sort_natural: 'title' %} - - - -
-

{{page.ha_category}}

-
    - {% for recipe in cookbook %} {% if recipe.ha_category == page.ha_category - %} -
  • - {% if recipe.url == page.url %} {{recipe.title}} {% elsif - recipe.ha_external_link %} - {{recipe.title}} - {% else %} - {{recipe.title}} - {% endif %} -
  • - {% endif %} {% endfor %} -
-
-
diff --git a/source/_includes/custom/grid_item_right.html b/source/_includes/custom/grid_item_right.html index a1b637ad6b1..4e0c13cf2b0 100644 --- a/source/_includes/custom/grid_item_right.html +++ b/source/_includes/custom/grid_item_right.html @@ -9,4 +9,4 @@
  • receive a message when the lights turn on while you are not at home?
  • We've got you covered.

    -

    View examples by the community.

    +

    View examples by the community.

    diff --git a/source/_includes/integrations/option_flow.md b/source/_includes/integrations/option_flow.md new file mode 100644 index 00000000000..74ce71bcae0 --- /dev/null +++ b/source/_includes/integrations/option_flow.md @@ -0,0 +1,11 @@ +{% capture name %}{{ include.name | default: page.title }}{% endcapture %} + +## Options + +Options for {{ name }} can be set via the user interface, by taking the following steps: + +- Browse to your Home Assistant instance. +- In the sidebar click on _**{% my config icon %}**_. +- From the configuration menu select: _**{% my integrations icon %}**_. +- If multiple instances of {{ name }} are configured, choose the instance you want to configure. +- Click on _**"Options"**_. diff --git a/source/_includes/site/header.html b/source/_includes/site/header.html index 61f66d8a414..490246171ff 100644 --- a/source/_includes/site/header.html +++ b/source/_includes/site/header.html @@ -44,7 +44,7 @@
  • Integrations
  • -
  • Examples
  • +
  • Examples
  • Blog
  • Need help?
  • diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html index fa4afecb2eb..ad4dad554bc 100644 --- a/source/_includes/site/sidebar.html +++ b/source/_includes/site/sidebar.html @@ -7,8 +7,6 @@ {% include asides/installation_navigation.html %} {% elsif root == 'common-tasks' %} {% include asides/common_tasks_navigation.html %} - {% elsif root == 'cookbook' %} - {% include asides/cookbook_navigation.html %} {% elsif root == 'lovelace' %} {% include asides/lovelace_navigation.html %} {% elsif root == 'developers' or root == 'help' %} diff --git a/source/_integrations/air_quality.markdown b/source/_integrations/air_quality.markdown index d56c2d81eda..ce601b5eb3b 100644 --- a/source/_integrations/air_quality.markdown +++ b/source/_integrations/air_quality.markdown @@ -4,6 +4,7 @@ description: Instructions on how to add air quality sensors with Home Assistant ha_release: 0.85 ha_iot_class: ha_domain: air_quality +ha_quality_scale: internal --- The `air_quality` gather information about the air quality and pollution details. diff --git a/source/_integrations/amazon_polly.markdown b/source/_integrations/amazon_polly.markdown index d970322650f..ad28edd0ea7 100644 --- a/source/_integrations/amazon_polly.markdown +++ b/source/_integrations/amazon_polly.markdown @@ -49,10 +49,6 @@ region_name: required: false type: [string, list] default: us-east-1 -name: - description: "Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`." - required: false - type: string text_type: description: "Specify wherever to use text (default) or ssml markup by default." required: false diff --git a/source/_integrations/analytics.markdown b/source/_integrations/analytics.markdown index ea4a1828a8b..93e2f0e070b 100644 --- a/source/_integrations/analytics.markdown +++ b/source/_integrations/analytics.markdown @@ -16,7 +16,7 @@ Home Assistant allows users to share their usage data via the analytics integrat ## Data Collection -The information sent depends on what you opt-in to. You can opt-in during onboarding and by going to **{% my general title="Configuration >> General" %}**. +The information sent depends on what options you opt-in to. You can opt-in during onboarding and by going to **{% my general title="Configuration >> General" %}** . **{% my general badge %}** diff --git a/source/_integrations/bayesian.markdown b/source/_integrations/bayesian.markdown index bc2efd7e794..04bb2cd501e 100644 --- a/source/_integrations/bayesian.markdown +++ b/source/_integrations/bayesian.markdown @@ -153,7 +153,3 @@ binary_sensor: ``` {% endraw %} - -The template is re-evaluated whenever an entity ID that it references changes state. If you use non-deterministic functions like `now()` in the template it will not be continuously re-evaluated, but only when an entity ID that is referenced is updated. - -In this example, since the template is only evaluated on state change of `device_tracker.paulus` the template won't change state after 5 mins like intended. The ways to force template reevaluation are documented in the [template binary_sensor](/integrations/binary_sensor.template/#working-without-entities). diff --git a/source/_integrations/blink.markdown b/source/_integrations/blink.markdown index 51b179625e3..fef78a2318e 100644 --- a/source/_integrations/blink.markdown +++ b/source/_integrations/blink.markdown @@ -73,7 +73,6 @@ Save the last recorded video of a camera to a local file. Note that in most case | `name` | no | Name of camera containing video to save. | | `filename` | no | Location of save file. | - ```yaml homeassistant: allowlist_external_dirs: @@ -91,7 +90,7 @@ Send a new pin to blink. Since Blink's 2FA implementation is new and changing, ### Other Services -In addition to the services mentioned above, there are generic `camera` and `alarm_control_panel` services available for use as well. The `camera.enable_motion_detection` and `camera.disable_motion_detection` services allow for individual cameras to be enabled and disabled, respectively, within the Blink system. The `alarm_control_panel.alarm_arm_away` and `alarm_control_panel.alarm_disarm` services allow for the whole system to be armed and disarmed, respectively. Blink Mini cameras linked to an existing sync module cannot be armed/disarmed via Home Assistant. +In addition to the services mentioned above, there are generic `camera` and `alarm_control_panel` services available for use as well. The `camera.enable_motion_detection` and `camera.disable_motion_detection` services allow for individual cameras to be enabled and disabled, respectively, within the Blink system. The `alarm_control_panel.alarm_arm_away` and `alarm_control_panel.alarm_disarm` services allow for the whole system to be armed and disarmed, respectively. Blink Mini cameras linked to an existing sync module cannot be armed/disarmed individually via Home Assistant. ## Examples diff --git a/source/_integrations/cast.markdown b/source/_integrations/cast.markdown index 64f12c4cd94..ead15b863e9 100644 --- a/source/_integrations/cast.markdown +++ b/source/_integrations/cast.markdown @@ -13,12 +13,21 @@ ha_codeowners: ha_zeroconf: true --- -You can enable the Cast integration by going to the Integrations page inside the configuration panel. - -## Setup +{% include integrations/config_flow.md %} Support for mDNS discovery in your local network is mandatory. Make sure that your router has this feature enabled. This is even required if you entered the IP addresses of the Cast devices are manually in the configuration as mentioned below. +{% include integrations/option_flow.md %} +{% configuration_basic %} +Known hosts: + description: "A comma-separated list of hostnames or IP-addresses of cast devices, use if mDNS discovery is not working" +Allowed UUIDs: + description: A comma-separated list of UUIDs of Cast devices to add to Home Assistant. **Use only if you don't want to add all available devices.** The device won't be added until discovered through either mDNS or if it's included in the list of known hosts. In order to find the UUID for your device use a mDNS browser or advanced users can use the following Python command (adjust friendly names as required) - `python3 -c "import pychromecast; print(pychromecast.get_listed_chromecasts(friendly_names=['Living Room TV', 'Bedroom TV', 'Office Chromecast']))`. This option is only visible if advanced mode is enabled in your user profile. +Ignore CEC: + description: A comma-separated list of Chromecasts that should ignore CEC data for determining the + active input. [See the upstream documentation for more information.](https://github.com/balloob/pychromecast#ignoring-cec-data). This option is only visible if advanced mode is enabled in your user profile. +{% endconfiguration_basic %} + ## Home Assistant Cast Home Assistant has its own Cast application to show the Home Assistant UI on any Chromecast device. You can use it by adding the [Cast entity row](/lovelace/entities/#cast) to your Lovelace UI, or by calling the `cast.show_lovelace_view` service. The service takes the path of a Lovelace view and an entity ID of a Cast device to show the view on. A `path` has to be defined in your Lovelace YAML for each view, as outlined in the [views documentation](/lovelace/views/#path). The `dashboard_path` is the part of the Lovelace UI URL that follows the defined `base_url` Typically "lovelace". The following is a full configuration for a script that starts casting the `downstairs` tab of the `lovelace-cast` path (note that `entity_id` is specified under `data` and not for the service call): @@ -173,46 +182,12 @@ data: - url: "https://tilos.hu/images/kockalogo.png" ``` -## Advanced use - -### Manual configuration - -By default, any discovered Cast device is added to Home Assistant. This can be restricted by supplying a list of allowed chrome casts. - -```yaml -# Example configuration.yaml entry -cast: - media_player: - - uuid: "ae3be716-b011-4b88-a75d-21478f4f0822" -``` - -{% configuration %} -media_player: - description: A list that contains advanced configuration options. - required: false - type: list - keys: - uuid: - description: UUID of a Cast device to add to Home Assistant. Use only if you don't want to add all available devices. The device won't be added until discovered through mDNS. In order to find the UUID for your device use a mDNS browser or advanced users can use the following Python command (adjust friendly names as required) - `python3 -c "import pychromecast; print(pychromecast.get_listed_chromecasts(friendly_names=['Living Room TV', 'Bedroom TV', 'Office Chromecast']))"` - required: false - type: string - ignore_cec: - description: > - A list of Chromecasts that should ignore CEC data for determining the - active input. [See the upstream documentation for more information.](https://github.com/balloob/pychromecast#ignoring-cec-data) - required: false - type: list -{% endconfiguration %} - -### Docker and Cast devices and Home Assistant on different subnets - -Cast devices can only be discovered and connected to if they are on the same subnet as Home Assistant. - -When running Home Assistant Core in a [Docker container](/docs/installation/docker/), the command line option `--net=host` or the compose file equivalent `network_mode: host` must be used to put it on the host's network, otherwise the Home Assistant Core will not be able to connect to any Cast device. +## Cast devices and Home Assistant on different subnets +Cast devices can only be automatically discovered if they are on the same subnet as Home Assistant. Setups with cast devices on a different subnet than Home Assistant are not recommended and not supported. +If this is not possible, it's necessary to either enable mDNS forwarding between the subnets or to provide a list of known hosts. -If this is not possible, it's necessary to: +### Home Assistant Container -- Enable mDNS forwarding between the subnets. -- Enable source NAT to make requests from Home Assistant to the Chromecast appear to come from the same subnet as the Chromecast. +When running the [Home Assistant Container](/installation/linux#install-home-assistant-container) in Docker, make sure it is running with host network mode. Running without it is not supported by the Home Assistant project, and will cause this integration to be unable to discover to your Cast devices. diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown index 1ef909c4c46..233d9a26c07 100644 --- a/source/_integrations/command_line.markdown +++ b/source/_integrations/command_line.markdown @@ -7,7 +7,6 @@ ha_category: ha_release: 0.12 ha_iot_class: Local Polling ha_domain: command_line -ha_quality_scale: internal ha_platforms: - binary_sensor - cover diff --git a/source/_integrations/daikin.markdown b/source/_integrations/daikin.markdown index 3fccb8de211..b2b4f7a8208 100644 --- a/source/_integrations/daikin.markdown +++ b/source/_integrations/daikin.markdown @@ -115,7 +115,7 @@ Zones with the name `-` will be ignored, just as the AirBase application is work
  • -Additionally the Daikin Streamer (air purifier) function can be toggled on supported devices using a switch. +Additionally the Daikin Streamer (air purifier) function can be toggled onsupported devices using a switch. Note that it isn't currently possible to reliably detect whether a specific device has streamer support, so the switch may appear in the UI even if the functionality isn't actually supported. ## Region Changing diff --git a/source/_integrations/epsonworkforce.markdown b/source/_integrations/epsonworkforce.markdown index 9b18e0b119b..ad51e194604 100644 --- a/source/_integrations/epsonworkforce.markdown +++ b/source/_integrations/epsonworkforce.markdown @@ -67,6 +67,7 @@ Tested devices: - Epson WF3640 - Epson EcoTank ET-77x0 - Epson ET-2650 +- Epson Expression Home XP-2105 To make this module work you need to connect your printer to your LAN. The best is to navigate to the status page of the printer to check if it shows the page with the ink levels on the URL http:///PRESENTATION/HTML/TOP/PRTINFO.HTML diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown index ac49e346819..62f3e07e797 100644 --- a/source/_integrations/fan.mqtt.markdown +++ b/source/_integrations/fan.mqtt.markdown @@ -217,12 +217,12 @@ retain: type: boolean default: true speed_range_min: - description: The minimum of numeric output range (`off` not included, so `speed_range_min` - 1 represents 0%). + description: The minimum of numeric output range (`off` not included, so `speed_range_min` - 1 represents 0%). The number of speeds within the speed_range / 100 will determine the `percentage_step`. required: false type: integer default: 1 speed_range_max: - description: The maximum of numeric output range (representing 100%). + description: The maximum of numeric output range (representing 100%). The number of speeds within the speed_range / 100 will determine the `percentage_step`. required: false type: integer default: 100 @@ -253,6 +253,7 @@ In this section you find some real-life examples of how to use this fan. ### Full configuration The example below shows a full configuration for a MQTT fan using percentage and preset modes. +There are 10 speeds within the speed range, so `percentage_step` = 100 / 10 steps = 10.0 %. ```yaml # Example using percentage based speeds with preset modes configuration.yaml @@ -279,10 +280,10 @@ fan: payload_oscillation_on: "true" payload_oscillation_off: "false" speed_range_min: 1 - speed_range_max: 100 + speed_range_max: 10 ``` -{% raw %}} +{% raw %} This example demonstrates how to use command templates with JSON output. @@ -308,4 +309,4 @@ fan: - "breeze" ``` -{% endraw %} \ No newline at end of file +{% endraw %} diff --git a/source/_integrations/fan.template.markdown b/source/_integrations/fan.template.markdown index 844831874c7..3593f66d8db 100644 --- a/source/_integrations/fan.template.markdown +++ b/source/_integrations/fan.template.markdown @@ -54,7 +54,7 @@ fan: preset_modes: - 'auto' - 'smart' - - 'woosh' + - 'whoosh' ``` {% endraw %} diff --git a/source/_integrations/filter.markdown b/source/_integrations/filter.markdown index 31a54338c1d..df7c9cafa19 100644 --- a/source/_integrations/filter.markdown +++ b/source/_integrations/filter.markdown @@ -130,7 +130,7 @@ The returned value is rounded to the number of decimals defined in (`precision`) The Outlier filter (`outlier`) is a basic Band-pass filter, as it cuts out any value outside a specific range. -The included Outlier filter will discard any value beyond a band centered on the median of the previous values, replacing it with the median value of the previous values. If inside the band, the +The included Outlier filter will discard any value beyond a band centered on the median of the previous values, replacing it with the median value of the previous values. If inside the band, the current state is returned. ```python distance = abs(state - median(previous_states)) diff --git a/source/_integrations/foscam.markdown b/source/_integrations/foscam.markdown index ace75d06649..2a520fa755b 100644 --- a/source/_integrations/foscam.markdown +++ b/source/_integrations/foscam.markdown @@ -160,4 +160,4 @@ elements: ### Extra CGI Commands -Foscam Webcams which support CGI Commands can be controlled by Home Assistant ([Source](https://www.iltucci.com/blog/wp-content/uploads/2018/12/Foscam-IPCamera-CGI-User-Guide-V1.0.4.pdf)). For an example of how this can be done, see the [Foscam IP Camera Pan, Tilt, Zoom Control](/cookbook/foscam_away_mode_PTZ/) Cookbook entry. +Foscam Webcams which support CGI Commands can be controlled by Home Assistant ([Source](https://www.iltucci.com/blog/wp-content/uploads/2018/12/Foscam-IPCamera-CGI-User-Guide-V1.0.4.pdf)). diff --git a/source/_integrations/generic.markdown b/source/_integrations/generic.markdown index 8f1fd8957ef..b316cc5abbe 100644 --- a/source/_integrations/generic.markdown +++ b/source/_integrations/generic.markdown @@ -71,10 +71,14 @@ verify_ssl: required: false default: true type: boolean +rtsp_transport: + description: "Set the RTSP transport protocol to `tcp`, `udp`, `udp_multicast` or `http`." + required: false + type: string {% endconfiguration %}

    - + Screenshot showing Google Maps integration in Home Assistant front end. Example showing the Generic camera platform pointing at a dynamic Google Map image. diff --git a/source/_integrations/geo_location.markdown b/source/_integrations/geo_location.markdown index 88e1dbee7b2..b9615ff9406 100644 --- a/source/_integrations/geo_location.markdown +++ b/source/_integrations/geo_location.markdown @@ -6,6 +6,7 @@ ha_category: logo: geo_location.png ha_release: 0.78 ha_domain: geo_location +ha_quality_scale: internal ha_iot_class: --- diff --git a/source/_integrations/hikvision.markdown b/source/_integrations/hikvision.markdown index cd5237790a3..d69de480cbe 100644 --- a/source/_integrations/hikvision.markdown +++ b/source/_integrations/hikvision.markdown @@ -25,7 +25,7 @@ using the "ignored" customize option detailed below.

    In order for the sensors to work the hikvision user must have the 'Remote: Notify Surveillance Center/Trigger Alarm Output' permission which can be enabled from the user management section of the web interface. -Also the 'WEB Authentication' needs to be set to 'digest/basic' in the security/authentication section. +Also the 'WEB Authentication' needs to be set to 'digest/basic' in the security/authentication section. Ensure this is applied on each individual camera in case of using an NVR.
    For example, if you configure a camera with the name "Front Porch" that has diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index f689eed26f8..c3ddc142eb1 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -312,7 +312,7 @@ When exposing a Camera, Activity based remote (a `remote` that supports activiti To quickly add all accessory modes entities in the UI: 1. Create a new bridge via the UI (i.e., **{% my config_flow_start title="Configuration >> Integrations" domain=page.ha_domain %}**). -2. Select `media_player` and `camera` domains. +2. Select `media_player`, `remote`, `lock`, and `camera` domains. 3. Complete the flow as normal. 4. Additional HomeKit entries for each entity that must operate in accessory mode will be created for each entity that does not already have one. 5. If you have already created another HomeKit bridge for the non-accessory mode entities, the new bridge can safely be removed. diff --git a/source/_integrations/hue.markdown b/source/_integrations/hue.markdown index 71561f4a149..d90deb031ff 100644 --- a/source/_integrations/hue.markdown +++ b/source/_integrations/hue.markdown @@ -21,7 +21,7 @@ ha_platforms: - sensor --- -The Philips Hue integration allows you to control and monitor the lights and motion sensors connected to your Hue bridge. The Hue integration is automatically discovered. If not, add it via the add integration menu. +The Philips Hue integration allows you to control and monitor the lights and motion sensors connected to your Hue bridge. There is currently support for the following device types within Home Assistant: @@ -35,53 +35,28 @@ There is currently support for the following device types within Home Assistant: {% include integrations/config_flow.md %} -## Using Hue Groups in Home Assistant +## Options -The Hue API allows you to group lights. Home Assistant also supports grouping of entities natively, but sometimes it can be useful to use Hue groups to group light bulbs. By doing so, Home Assistant only needs to send one API call to change the state of all the bulbs in those groups instead of one call for every light in the group. This causes all the bulbs to change state simultaneously. +Options for the Hue integration can be set going to **Configuration** -> **Integrations** -> **Hue** -> **Options**. -These Hue groups can be a `Luminaire`, `Lightsource`, `LightGroup`, or `Room`. The `Luminaire` and `Lightsource` can't be created manually since the Hue bridge manages these automatically based on the discovered bulbs. The `Room` and `LightGroup` can be created manually through the API or the mobile app. A bulb can only exist in one `Room`, but can exist in more than one `LightGroup`. The `LightGroup` can be useful if you want to link certain bulbs together. +{% configuration_basic %} +Allow Hue groups: + description: "Enabling this option, will create entities for each Hue group, so you can control your Hue light groups from Home Assistant." +Allow unreachable bulbs to report their state correctly: + description: "If a light is unavailable, it will show up as unavailable in Home Assistant as well. Enabling this option, will not mark the light unavailable, but instead show the last state known to the Hue bridge." +{% endconfiguration_basic %} -The 2nd generation Hue app only has the ability to create a `Room`. You need to use the first generation app or the API to create a `LightGroup`. +## Using Hue Scenes -Example: - -To create a `LightGroup` named `Ceiling lights` that contains the lights 1, 2, and 3, execute the following command: - -```bash -curl -XPOST -d '{"name": "Ceiling lights", "lights": ["1", "2", "3"]}' http:///api//groups -``` - -The `` is the string that is used to register Home Assistant with the bridge. You can find it in the `core.config_entries` file in `/PATH-TO-YOUR-CONFIGURATION/.storage/`. `` is the IP address or hostname of your Hue bridge. - -You can find the IDs of your lights by executing the following command: - -```bash -curl http:///api//lights -``` - -Home Assistant will automatically detect your new `LightGroup` and add it to the interface. - -
    - To support Hue light groups, your bridge needs to have at least firmware 1.13 (released on June 3, 2016). -
    - -More information can be found on the [Philips Hue API documentation](https://www.developers.meethue.com/documentation/groups-api#22_create_group) website. - -## Using Hue Scenes in Home Assistant - -The Hue platform has its own concept of scenes for setting the colors of a group of lights simultaneously. A Hue bridge could potentially have dozens of scenes stored on it, and many scenes across different rooms might share the same name (the default scenes, for example). To avoid user interface overload, we don't expose scenes directly. Instead there is a `hue.hue_activate_scene` service which can be used in an automation or script. -This will have all the bulbs transitioned at once, instead of one at a time like when using standard scenes in Home Assistant. +The Hue platform has its own concept of scenes for setting the colors of a group of lights simultaneously. A Hue bridge could potentially have dozens of scenes stored on it, and many scenes across different rooms might share the same name (the default scenes, for example). To avoid user interface overload, we don't expose scenes directly. Instead there is a `hue.hue_activate_scene` service which can be used in an automation or script. This will have all the bulbs transitioned at once, instead of one at a time like when using standard scenes in Home Assistant. For instance: ```yaml -script: - porch_on: - sequence: - - service: hue.hue_activate_scene - data: - group_name: "Porch" - scene_name: "Porch Orange" +service: hue.hue_activate_scene +data: + group_name: "Porch" + scene_name: "Porch Orange" ``` | Service data attribute | Optional | Description | @@ -96,11 +71,11 @@ _Note_: `group_name` is not a reference to a Home Assistant group name. It can o The easiest way to find Hue scene names is to only use the scenes from the 2nd generation Hue app, which are organized by room (group) and scene name. Use the room name and scene name that you see in the app. You can test that these work at Developer Tools > Services in your Home Assistant instance. -Alternatively, you can dump all rooms and scene names using this [gist](https://gist.github.com/sdague/5479b632e0fce931951c0636c39a9578). This does **not** tell you which groups and scenes work together, but it is sufficient to get values that you can test at Developer Tools > Services. +Alternatively, a more advanced method can be used to dump all rooms and scene names using this [gist](https://gist.github.com/sdague/5479b632e0fce931951c0636c39a9578). This does **not** tell you which groups and scenes work together, but it is sufficient to get values that you can test at Developer Tools > Services. ### Caveats -The Hue API doesn't activate scenes directly; rather, they must be associated with a Hue group (typically rooms, especially if using the 2nd generation Hue app). But Hue scenes don't actually reference their group, so heuristic matching is used. +The Hue API doesn't activate scenes directly; rather, they must be associated with a Hue group (typically rooms). But Hue scenes don't actually reference their group, so heuristic matching is used. Neither group names nor scene names are guaranteed unique in Hue. If you are observing unexpected behavior from calling Hue scenes in Home Assistant, make the names of your Hue scenes more specific in the Hue app. diff --git a/source/_integrations/local_ip.markdown b/source/_integrations/local_ip.markdown index bf5eb3dedf9..472e54bdd41 100644 --- a/source/_integrations/local_ip.markdown +++ b/source/_integrations/local_ip.markdown @@ -9,7 +9,6 @@ ha_config_flow: true ha_codeowners: - '@issacg' ha_domain: local_ip -ha_quality_scale: internal ha_platforms: - sensor --- diff --git a/source/_integrations/logger.markdown b/source/_integrations/logger.markdown index e01a2f98dbf..c14768f9378 100644 --- a/source/_integrations/logger.markdown +++ b/source/_integrations/logger.markdown @@ -131,7 +131,7 @@ logger: logs: custom_components.my_integration: critical filters: - custom_component.my_integartion: + custom_component.my_integration: - "HTTP 429" # Filter all HTTP 429 errors - "Request to .*unreliable.com.* Timed Out" homeassistant.components.nws: diff --git a/source/_integrations/media_source.markdown b/source/_integrations/media_source.markdown index c97d81811ff..bf6250d31a6 100644 --- a/source/_integrations/media_source.markdown +++ b/source/_integrations/media_source.markdown @@ -63,6 +63,10 @@ homeassistant: To play media from a media source via a service call, use the uri scheme `media-source://media_source//`. Default `media_dir`is `local`. +
    +Web browsers and Google Cast media players have very limited video container and codec support. The Media Source integration does not do any transcoding of media, meaning media files must be natively supported by your media player or web browser (for playing in the frontend). If a video file is not supported by your media player or web browser it will fail to play. Please check the documentation of your media player or web browser for lists of supported video formats. +
    + Example: ```yaml service: media_player.play_media diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown index 0c452af1bed..6bc7879393f 100644 --- a/source/_integrations/modbus.markdown +++ b/source/_integrations/modbus.markdown @@ -521,7 +521,7 @@ modbus: - name: Sensor2 unit_of_measurement: mg slave: 1 - register: 110 + address: 110 count: 2 - name: Sensor3 unit_of_measurement: °C @@ -614,7 +614,7 @@ If you specify scale or offset as floating point values, double precision floati #### Full example -Example a temperature sensor with a 10 seconds scan interval: +Example temperature sensor with a default scan interval: ```yaml modbus: @@ -681,7 +681,7 @@ switches: required: true type: integer input_type: - description: type of adddress (holding/discrete/coil) + description: type of adddress (holding/input/coil) required: false default: holding type: integer @@ -722,7 +722,7 @@ switches: #### Full example -Example switches, for which the state is polled from Modbus every 10 seconds. +Example switches, for which the state is polled from Modbus every 15 seconds (default). ```yaml modbus: diff --git a/source/_integrations/mqtt_eventstream.markdown b/source/_integrations/mqtt_eventstream.markdown index e24cbc36ae4..e96f0072480 100644 --- a/source/_integrations/mqtt_eventstream.markdown +++ b/source/_integrations/mqtt_eventstream.markdown @@ -31,7 +31,7 @@ subscribe_topic: required: false type: string ignore_event: - description: Ignore sending these [events](/docs/configuration/events/) over mqtt. + description: List of [events](/docs/configuration/events/) which will not be sent over mqtt. required: false type: list {% endconfiguration %} diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown index c76b23be06d..c805fcb65e2 100644 --- a/source/_integrations/nest.markdown +++ b/source/_integrations/nest.markdown @@ -105,7 +105,7 @@ Project**. Note: This is a different type of project from the Device Access proj 1. From the drop-down list select *OAuth client ID*. ![Screenshot of OAuth client ID selection](/images/integrations/nest/oauth_client_id.png) -1. Enter *Web Application* for the Application typex, since you will use this with Home Assistant. +1. Enter *Web Application* for the Application type, since you will use this with Home Assistant. 1. Pick a name for your credential. diff --git a/source/_integrations/panasonic_viera.markdown b/source/_integrations/panasonic_viera.markdown index 6f26a5cdb3d..69e07214e25 100644 --- a/source/_integrations/panasonic_viera.markdown +++ b/source/_integrations/panasonic_viera.markdown @@ -141,11 +141,13 @@ The list with all known valid keys can be found [here](https://github.com/floria - TX-55FZ802B - TX-58AX802B - TX-58DX700B +- TX-65CX800E - TX-65EXW784 - TX-65FX720W - TX-L42ET50 - TX-L47ET60E (can't power on) - TX-P42STW50 +- TX-P42VT30E - TX-P50GT30Y - TX-P50GT60E diff --git a/source/_integrations/proximity.markdown b/source/_integrations/proximity.markdown index addc4d36bc7..3b8206d9ec8 100644 --- a/source/_integrations/proximity.markdown +++ b/source/_integrations/proximity.markdown @@ -23,19 +23,19 @@ The Proximity entity which is created has the following values: - `state`: Distance from the monitored zone (in km) - `dir_of_travel`: Direction of the closest device or person to the monitored zone. Values are: - - 'not set' - - 'arrived' - - 'towards' - - 'away_from' - - 'unknown' - - 'stationary' + - `not set` + - `arrived` + - `towards` + - `away_from` + - `unknown` + - `stationary` - `dist_to_zone`: Distance from the monitored zone (in km) - `unit_of_measurement`: Measurement of distance. Values are: - - 'km' - - 'm' - - 'mi' - - 'yd' - - 'ft' + - `km` + - `m` + - `mi` + - `yd` + - `ft` - `nearest`: The device or person which is nearest to the zone To enable this integration in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_integrations/pvoutput.markdown b/source/_integrations/pvoutput.markdown index 42c805dd358..adf40579ceb 100644 --- a/source/_integrations/pvoutput.markdown +++ b/source/_integrations/pvoutput.markdown @@ -22,7 +22,6 @@ sensor: - platform: pvoutput system_id: YOUR_SYSTEM_ID api_key: YOUR_API_KEY - scan_interval: 120 ``` {% configuration %} @@ -41,12 +40,6 @@ name: type: string {% endconfiguration %} -
    - -It's recommended to set `scan_interval:` according to a value greater than 60 seconds. The service only allows 60 requests per hour but the sensor's default is 30 seconds. - -
    - To format the PVoutput sensor it's recommended to use the [template component](/topics/templating/). For example: {% raw %} @@ -56,7 +49,6 @@ sensor: - platform: pvoutput system_id: YOUR_SYSTEM_ID api_key: YOUR_API_KEY - scan_interval: 150 - platform: template sensors: power_consumption: diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index dca87302c03..22823135a2f 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -122,6 +122,7 @@ In order to have your devices discovered automatically, you need to add the foll When pressing the button on the physical remote, RFLink detects the signal and the device should be added automatically to Home Assistant. ```yaml +# Example configuration.yaml entry light: - platform: rflink automatic_add: true @@ -173,6 +174,7 @@ If you find a device is recognized differently, with different protocols or the For debugging purposes or context when investigating issues you can enable debug logging for RFLink with the following configuration snippet: ```yaml +# Example configuration.yaml entry logger: default: error logs: diff --git a/source/_integrations/sharkiq.markdown b/source/_integrations/sharkiq.markdown index 69f8ce2a0e5..d15ad9ee575 100644 --- a/source/_integrations/sharkiq.markdown +++ b/source/_integrations/sharkiq.markdown @@ -32,3 +32,10 @@ Currently supported services are: - `stop` - `return_to_base` - `locate` + +## Troubleshooting + +### Integration Disconnecting + +If the integration frequently disconnects and you have an ad blocker runner like [Pi-hole](https://pi-hole.net/) or [AdGuard](https://adguard.com) add `ads-field.aylanetworks.com` to the Allow list . This domain is needed for the connection and can be part of the automatic blocking because of `ads` being part of the subdomain. + diff --git a/source/_integrations/slack.markdown b/source/_integrations/slack.markdown index fa8e9bd8073..c0373de60a8 100644 --- a/source/_integrations/slack.markdown +++ b/source/_integrations/slack.markdown @@ -21,7 +21,7 @@ The `slack` platform allows you to deliver notifications from Home Assistant to 1. Create a [new app](https://api.slack.com/apps) under your Slack.com account. 2. Click the `OAuth & Permissions` link in the sidebar, under the Features heading. 3. In the Scopes section, add the `chat:write` scope, `Send messages as user`. If you get a `missing_scope` error when trying to send a message, check these permissions. -4. Scroll up to `OAuth Tokens & Redirect URLs` and click `Install App`. +4. Scroll up to `OAuth Tokens & Redirect URLs` and click `Add to Workspace`. 5. Copy your `OAuth Access Token` and put that key into your `configuration.yaml` file -- see below.
    diff --git a/source/_integrations/startca.markdown b/source/_integrations/startca.markdown index 90138976b5d..f65a0dfa2e9 100644 --- a/source/_integrations/startca.markdown +++ b/source/_integrations/startca.markdown @@ -14,7 +14,7 @@ Integrate your [Start.ca](https://www.start.ca/) account information into Home A ## Setup -You can get your API key from: [Start.ca Usage API](https://www.start.ca/support/usage/api) +You can get your API key from: [Start.ca Usage API](https://www.start.ca/account/usage/api) ## Configuration diff --git a/source/_integrations/stt.markdown b/source/_integrations/stt.markdown index 7b2eac968b5..af33b99b85d 100644 --- a/source/_integrations/stt.markdown +++ b/source/_integrations/stt.markdown @@ -6,6 +6,7 @@ ha_codeowners: - '@pvizeli' ha_domain: stt ha_iot_class: +ha_quality_scale: internal --- Speech-to-Text (STT) allows you to stream speech data to the STT API and get text back. diff --git a/source/_integrations/synology_dsm.markdown b/source/_integrations/synology_dsm.markdown index 69267d19bdb..c3d6e83a9be 100644 --- a/source/_integrations/synology_dsm.markdown +++ b/source/_integrations/synology_dsm.markdown @@ -53,61 +53,49 @@ If you denied access to all locations and applications it is normal to receive a ## Sensors -Utilisation: -- `cpu_other_load`: Displays unspecified (that is, not user or system) load in percentage. -- `cpu_user_load`: Displays user load in percentage. -- `cpu_system_load`: Displays system load in percentage. -- `cpu_total_load`: Displays combined load in percentage. -- `cpu_1min_load`: Displays maximum load in past minute. -- `cpu_5min_load`: Displays maximum load in past 5 minutes. -- `cpu_15min_load`: Displays maximum load in past 15 minutes. -- `memory_real_usage`: Displays percentage of memory used. -- `memory_size`: Displays total size of memory in MB. -- `memory_cached`: Displays total size of cache in MB. -- `memory_available_swap`: Displays total size of available swap in MB. -- `memory_available_real`: Displays total size of memory used (based on real memory) in MB. -- `memory_total_swap`: Displays total size of actual memory in MB. -- `memory_total_real`: Displays total size of real memory in MB. -- `network_up`: Displays total up speed of network interfaces (combines all interfaces). -- `network_down`: Displays total down speed of network interfaces (combines all interfaces). +### CPU Utilisation sensors -Information: -- `temperature`: Displays the temperature of the NAS. -- `uptime`: Displays the uptime of the NAS (in seconds). +Entities reporting the current and combined CPU utilization of the NAS. There are sensors the report the current CPU load, separated by User, System and others. By default, only the User sensor is enabled. -For each disk: -- `disk_smart_status`: Displays the S.M.A.R.T status of the disk. -- `disk_status`: Displays the status of the disk. -- `disk_temp`: Displays the temperature of the disk. +There are also combined CPU load sensors. These report the total CPU load for the entire NAS. Available as current, 1min, 5min and 15min load sensors. By default the 1min load sensor is disabled. -For each volume: -- `volume_status`: Displays the status of the volume. -- `volume_size_total`: Displays the total size of the volume in TB's. -- `volume_size_used`: Displays the used space on this volume in TB's. -- `volume_percentage_used`: Displays the percentage used for this volume. -- `volume_disk_temp_avg`: Displays the average temperature of all disks in the volume. -- `volume_disk_temp_max`: Displays the maximum temperature of all disks in the volume. +### Memory Utilisation sensors +Entities reporting the current and combined memory and swap utilization of the NAS. These sensors include the total installed amount, the currently free amount and the % of memory used. + +### Network sensors + +Entities reporting the current network transfer rates of the NAS. Both upload and download sensors are available. + +### General sensors + +Entities reporting the internal temperature and the uptime of the NAS. The uptime sensor is disabled by default. + +### Disk sensors + +Entities reporting the internal temperature, status (as shown in Synology DSM) and SMART status for each drive inside the NAS. The SMART status sensor is disabled by default. + +### Volume sensors + +Entities reporting status, total size (TB), used size (TB), % of volume used, average disk temperature and maximum disk temperature for each volume inside the NAS. By default the total size and maximum disk temperature sensors are disabled. ## Binary sensors -Security: -- `security_status`: Displays safe to indicate if the NAS is safe. +### General sensors -Upgrade: -- `update_available`: Displays on if a DSM update is available. +Entities reporting the update and security status of the NAS. -For each disk: -- `disk_exceed_bad_sector_thr`: Displays on to indicate if the disk exceeded the maximum bad sector threshold. (Does not work with DSM 5.x) -- `disk_below_remain_life_thr`: Displays on to indicate if the disk dropped below the remain life threshold. (Does not work with DSM 5.x) +### Disk sensors +Similar to the [normal disk sensors](#disk-sensors), there are binary sensors reporting each drive's status. These sensors report if a drive has exceeded the maximum threshold for detected bad sectors and if a drive has dropped below the threshold for its remaining life. ## Switch -- `home_mode`: Displays a toggle to enable/disable the [Surveillance Station](https://www.synology.com/en-us/surveillance) Home mode. +A switch is available to enable/disable the [Surveillance Station](https://www.synology.com/en-us/surveillance) Home mode. ## Cameras -- `{camera_name}`: Displays cameras added in [Surveillance Station](https://www.synology.com/en-us/surveillance). + +For each camera added in [Surveillance Station](https://www.synology.com/en-us/surveillance), a camera will be created in Home Assistant. ## Services diff --git a/source/_integrations/telegram_bot.markdown b/source/_integrations/telegram_bot.markdown index 09465a458e0..75b5632609c 100644 --- a/source/_integrations/telegram_bot.markdown +++ b/source/_integrations/telegram_bot.markdown @@ -50,7 +50,7 @@ Send a photo. | `parse_mode` | yes | Parser for the message text: `markdownv2`, `html` or `markdown`. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. | -| `timeout` | yes | Timeout for send photo. Will help with timeout errors (poor internet connection, etc) | +| `timeout` | yes | Timeout for sending photo in seconds. Will help with timeout errors (poor internet connection, etc) | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. `[]` to reset to no custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | | `message_tag` | yes | Tag for sent message. In `telegram_sent` event data: `{{trigger.event.data.message_tag}}` | @@ -71,7 +71,7 @@ Send a video. | `parse_mode` | yes | Parser for the message text: `markdownv2`, `html` or `markdown`. | | `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. | | `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. | -| `timeout` | yes | Timeout for send video. Will help with timeout errors (poor internet connection, etc) | +| `timeout` | yes | Timeout for sending video in seconds. Will help with timeout errors (poor internet connection, etc) | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. `[]` to reset to no custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | @@ -91,7 +91,7 @@ Send an animation. | `parse_mode` | yes | Parser for the message text: `markdownv2`, `html` or `markdown`. | | `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. | | `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. | -| `timeout` | yes | Timeout for send video. Will help with timeout errors (poor internet connection, etc) | +| `timeout` | yes | Timeout for sending video in seconds. Will help with timeout errors (poor internet connection, etc) | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. `[]` to reset to no custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | | `message_tag` | yes | Tag for sent message. In `telegram_sent` event data: `{{trigger.event.data.message_tag}}` | @@ -111,7 +111,7 @@ Send a voice message. | `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false to send the message silently. iOS users and web users will not receive a notification. Android users will receive a notification with no sound. Defaults to False. | | `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. | -| `timeout` | yes | Timeout for send voice. Will help with timeout errors (poor internet connection, etc) | +| `timeout` | yes | Timeout for sending voice in seconds. Will help with timeout errors (poor internet connection, etc) | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. `[]` to reset to no custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | | `message_tag` | yes | Tag for sent message. In `telegram_sent` event data: `{{trigger.event.data.message_tag}}` | @@ -130,7 +130,7 @@ Send a sticker. | `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. | -| `timeout` | yes | Timeout for send photo. Will help with timeout errors (poor internet connection, etc) | +| `timeout` | yes | Timeout for sending photo in seconds. Will help with timeout errors (poor internet connection, etc) | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. `[]` to reset to no custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | | `message_tag` | yes | Tag for sent message. In `telegram_sent` event data: `{{trigger.event.data.message_tag}}` | @@ -151,7 +151,7 @@ Send a document. | `parse_mode` | yes | Parser for the message text: `markdownv2`, `html` or `markdown`. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `verify_ssl` | yes | True/false for checking the SSL certificate of the server for HTTPS URLs. Defaults to True. | -| `timeout` | yes | Timeout for send document. Will help with timeout errors (poor internet connection, etc) | +| `timeout` | yes | Timeout for sending document in seconds. Will help with timeout errors (poor internet connection, etc) | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. `[]` to reset to no custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | | `message_tag` | yes | Tag for sent message. In `telegram_sent` event data: `{{trigger.event.data.message_tag}}` | @@ -487,7 +487,7 @@ Telegram callbacks also support arguments and commands the same way as normal me data: show_alert: true callback_query_id: "{{ trigger.event.data.id }}" - message: "I repeat: {{trigger.event.data["args"]}}" + message: "I repeat: {{trigger.event.data['args']}}" ``` {% endraw %} diff --git a/source/_integrations/tesla.markdown b/source/_integrations/tesla.markdown index 099442a9efc..954253a3117 100644 --- a/source/_integrations/tesla.markdown +++ b/source/_integrations/tesla.markdown @@ -28,6 +28,7 @@ ha_platforms: The `Tesla` integration offers integration with the [Tesla](https://auth.tesla.com/login) cloud service and provides presence detection as well as sensors such as charger state and temperature. + This integration provides the following platforms: - Binary sensors - such as update available, parking, and charger connection. @@ -39,6 +40,12 @@ This integration provides the following platforms: {% include integrations/config_flow.md %} +
    + + Note: MFA on your Tesla Account is not supported at this time. + +
    + ## Options Tesla options are set via **Configuration** -> **Integrations** -> **Tesla** -> **Options**. diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown index f34bd74de88..ea721e7d917 100644 --- a/source/_integrations/tplink.markdown +++ b/source/_integrations/tplink.markdown @@ -71,7 +71,6 @@ Other bulbs may also work, but with limited color temperatures. If you find a bu - KL125 - KL130 - KB130 -- KL430 ## Configuration diff --git a/source/_integrations/tuya.markdown b/source/_integrations/tuya.markdown index 75122bbb29f..a0e25b9bfb1 100644 --- a/source/_integrations/tuya.markdown +++ b/source/_integrations/tuya.markdown @@ -23,7 +23,7 @@ ha_platforms: - switch --- -The `tuya` integration is the main integration to integrate [Tuya Smart](https://www.tuya.com) related platforms, except the Zigbee hub. You will need your Tuya account information (username, password and account country code) to discover and control devices which related to your account. +The `tuya` integration is the main integration to integrate [Tuya Smart](https://www.tuya.com) related platforms, except the Zigbee hub. This includes devices linked with the Tuya, Smart Life, and Jinvoo Smart apps. You will need your account information (username, password and account country code) from one of these apps to discover and control devices which related to your account. **Important**: Not all Tuya devices are supported by the `tuya API` used by this integration. For more details refer to [TuyaHA Library](https://github.com/PaulAnnekov/tuyaha). diff --git a/source/_integrations/webhook.markdown b/source/_integrations/webhook.markdown index 5b9a33b46da..84cc66c04dc 100644 --- a/source/_integrations/webhook.markdown +++ b/source/_integrations/webhook.markdown @@ -2,6 +2,7 @@ ha_release: 0.8 title: Webhook ha_domain: webhook +ha_quality_scale: internal ha_iot_class: --- diff --git a/source/_lovelace/entities.markdown b/source/_lovelace/entities.markdown index 7d47b779a42..2768bb8810e 100644 --- a/source/_lovelace/entities.markdown +++ b/source/_lovelace/entities.markdown @@ -93,15 +93,15 @@ state_color: default: false tap_action: required: false - description: Action taken on card tap. See [action documentation](/lovelace/actions/#tap-action). + description: Action taken on row tap. See [action documentation](/lovelace/actions/#tap-action). type: map hold_action: required: false - description: Action taken on card tap and hold. See [action documentation](/lovelace/actions/#hold-action). + description: Action taken on row tap and hold. See [action documentation](/lovelace/actions/#hold-action). type: map double_tap_action: required: false - description: Action taken on card double tap. See [action documentation](/lovelace/actions/#double-tap-action). + description: Action taken on row double tap. See [action documentation](/lovelace/actions/#double-tap-action). type: map {% endconfiguration %} @@ -171,15 +171,15 @@ action_name: default: "`Run`" tap_action: required: true - description: Action taken on card tap. See [action documentation](/lovelace/actions/#tap-action). + description: Action taken on button tap. See [action documentation](/lovelace/actions/#tap-action). type: map hold_action: required: false - description: Action taken on card tap and hold. See [action documentation](/lovelace/actions/#hold-action). + description: Action taken on button tap and hold. See [action documentation](/lovelace/actions/#hold-action). type: map double_tap_action: required: false - description: Action taken on card double tap. See [action documentation](/lovelace/actions/#double-tap-action). + description: Action taken on button double tap. See [action documentation](/lovelace/actions/#double-tap-action). type: map {% endconfiguration %} @@ -226,15 +226,15 @@ entities: default: "true" tap_action: required: false - description: Action taken on card tap. See [action documentation](/lovelace/actions/#tap-action). + description: Action taken on button tap. See [action documentation](/lovelace/actions/#tap-action). type: map hold_action: required: false - description: Action taken on card tap and hold. See [action documentation](/lovelace/actions/#hold-action). + description: Action taken on button tap and hold. See [action documentation](/lovelace/actions/#hold-action). type: map double_tap_action: required: false - description: Action taken on card double tap. See [action documentation](/lovelace/actions/#double-tap-action). + description: Action taken on button double tap. See [action documentation](/lovelace/actions/#double-tap-action). type: map {% endconfiguration %} diff --git a/source/_lovelace/markdown.markdown b/source/_lovelace/markdown.markdown index 0669d69b802..328961f5e57 100644 --- a/source/_lovelace/markdown.markdown +++ b/source/_lovelace/markdown.markdown @@ -6,7 +6,7 @@ description: "The Markdown card is used to render Markdown" The Markdown card is used to render [Markdown](https://commonmark.org/help/). -The renderer uses [Marked.js](https://marked.js.org), which supports [several specifications of Markdown](https://marked.js.org/#/README.md#specifications), including CommonMark, GitHub Flavored Markdown (GFM) and `markdown.pl`. +The renderer uses [Marked.js](https://marked.js.org), which supports [several specifications of Markdown](https://marked.js.org/#specifications), including CommonMark, GitHub Flavored Markdown (GFM) and `markdown.pl`.

    Screenshot of the markdown card diff --git a/source/_posts/2016-02-20-community-highlights.markdown b/source/_posts/2016-02-20-community-highlights.markdown index 7b9a190e179..6d0b889f871 100644 --- a/source/_posts/2016-02-20-community-highlights.markdown +++ b/source/_posts/2016-02-20-community-highlights.markdown @@ -9,7 +9,7 @@ categories: Community Video og_image: /images/blog/2016-02-community-highlights/part-of-the-thing.png --- -Home Assistant land has been busy and a lot of people have been creating awesome stuff. We've added [a cookbook section](/cookbook/) to the website full of examples how you can automate different things. Make sure you take a look and share your own recipes too! +Home Assistant land has been busy and a lot of people have been creating awesome stuff. We've added [a cookbook section](/examples/) to the website full of examples how you can automate different things. Make sure you take a look and share your own recipes too! ### Home automation demo by Part of the Thing diff --git a/source/_posts/2017-10-14-templating-date-time.markdown b/source/_posts/2017-10-14-templating-date-time.markdown index 8ab8b8d7e24..5d82514f1a4 100644 --- a/source/_posts/2017-10-14-templating-date-time.markdown +++ b/source/_posts/2017-10-14-templating-date-time.markdown @@ -30,7 +30,7 @@ Hmmm, ...OK, that's a start. How to get the year? {% raw %}`{{ now() }}`{% endra For the year it would be: {% raw %}`{{ now().year }}`{% endraw %}. I guess that there are rare use cases for `now().resolution`, `now().min` and `now().max` too. -[Hacktoberfest](/blog/2017/09/29/hacktoberfest/) is still running. Working on the documentation is pretty easy. If you know a nice [trick](/cookbook/), want to help improving the page of a platform or just fix typo then please do. Our [Website/Documentation section](/developers/documentation/) contains some requirements which are defined in the [Documentation Standards](/developers/documentation/standards/) and the "[Create a page](/developers/documentation/create_page/)" documentation for other useful details. +[Hacktoberfest](/blog/2017/09/29/hacktoberfest/) is still running. Working on the documentation is pretty easy. If you know a nice [trick](/examples/), want to help improving the page of a platform or just fix typo then please do. Our [Website/Documentation section](/developers/documentation/) contains some requirements which are defined in the [Documentation Standards](/developers/documentation/standards/) and the "[Create a page](/developers/documentation/create_page/)" documentation for other useful details. Thanks to [Egor Tsinko](https://github.com/etsinko) for bringing this issue to our attention. diff --git a/source/_posts/2021-04-07-release-20214.markdown b/source/_posts/2021-04-07-release-20214.markdown index dd08c01b835..04f6110ee4c 100644 --- a/source/_posts/2021-04-07-release-20214.markdown +++ b/source/_posts/2021-04-07-release-20214.markdown @@ -44,6 +44,9 @@ Enjoy the release! - [New Integrations](#new-integrations) - [New Platforms](#new-platforms) - [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui) +- [Release 2021.4.1 - April 8](#release-202141---april-8) +- [Release 2021.4.2 - April 9](#release-202142---april-9) +- [Release 2021.4.3 - April 10](#release-202143---april-10) - [If you need help...](#if-you-need-help) - [Breaking Changes](#breaking-changes) - [Farewell to the following](#farewell-to-the-following) @@ -324,7 +327,7 @@ Screenshot of selecting the number format you prefer. - [@marvin-w] added support for unique IDs to KNX entities. So, as a KNX user you can now tweak your entities in the frontend and group them into areas! - HomeKit now supports CO/CO2 device classes, thanks to [@iMicknl]! -- [@robertdelpeut] added monthly and yearly totals to the DMSR sensor, thanks! +- [@robertdelpeut] added monthly and yearly totals to the DSMR sensor, thanks! - Hyperion users can now hide certain effects from the UI using integration options. Thanks, [@dermotduffy]! - Got that one message in your logs that you don't care about? [@jshufro] @@ -364,6 +367,189 @@ The following integrations are now available via the Home Assistant UI: - [Hive][hive docs], done by [@KJonline] - [Verisure][verisure docs], done by [@frenck] +## Release 2021.4.1 - April 8 + +- Check all endpoints for zwave_js.climate fan mode and operating state ([@raman325] - [#48800]) ([zwave_js docs]) +- Add missing super call in Verisure Camera entity ([@JohNan] - [#48812]) ([verisure docs]) +- Fix iCloud extra attributes ([@nzapponi] - [#48815]) ([icloud docs]) +- Replace redacted stream recorder credentials with '****' ([@emontnemery] - [#48832]) ([stream docs]) +- Fix mysensor cover closed state ([@MartinHjelmare] - [#48833]) ([mysensors docs]) +- Validate supported_color_modes for MQTT JSON light ([@emontnemery] - [#48836]) ([light docs]) ([mqtt docs]) +- Bump speedtest-cli to 2.1.3 ([@spacegaier] - [#48861]) ([speedtestdotnet docs]) +- Correct wrong x in frontend manifest ([@bramkragten] - [#48865]) ([frontend docs]) +- Fix motion_blinds gateway signal strength sensor ([@starkillerOG] - [#48866]) ([motion_blinds docs]) +- Fix possibly missing changed_by in Verisure Alarm ([@frenck] - [#48867]) ([verisure docs]) +- Fix optional data payload in Prowl messaging service ([@frenck] - [#48868]) ([prowl docs]) +- Update frontend to 20210407.2 ([@bramkragten] - [#48888]) ([frontend docs]) + +[#48800]: https://github.com/home-assistant/core/pull/48800 +[#48812]: https://github.com/home-assistant/core/pull/48812 +[#48815]: https://github.com/home-assistant/core/pull/48815 +[#48832]: https://github.com/home-assistant/core/pull/48832 +[#48833]: https://github.com/home-assistant/core/pull/48833 +[#48836]: https://github.com/home-assistant/core/pull/48836 +[#48861]: https://github.com/home-assistant/core/pull/48861 +[#48865]: https://github.com/home-assistant/core/pull/48865 +[#48866]: https://github.com/home-assistant/core/pull/48866 +[#48867]: https://github.com/home-assistant/core/pull/48867 +[#48868]: https://github.com/home-assistant/core/pull/48868 +[#48888]: https://github.com/home-assistant/core/pull/48888 +[@JohNan]: https://github.com/JohNan +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@bramkragten]: https://github.com/bramkragten +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@nzapponi]: https://github.com/nzapponi +[@raman325]: https://github.com/raman325 +[@spacegaier]: https://github.com/spacegaier +[@starkillerOG]: https://github.com/starkillerOG +[frontend docs]: /integrations/frontend/ +[icloud docs]: /integrations/icloud/ +[light docs]: /integrations/light/ +[motion_blinds docs]: /integrations/motion_blinds/ +[mqtt docs]: /integrations/mqtt/ +[mysensors docs]: /integrations/mysensors/ +[prowl docs]: /integrations/prowl/ +[speedtestdotnet docs]: /integrations/speedtestdotnet/ +[stream docs]: /integrations/stream/ +[verisure docs]: /integrations/verisure/ +[zwave_js docs]: /integrations/zwave_js/ + +## Release 2021.4.2 - April 9 + +- Account for openweathermap 'dew_point' not always being present ([@hanskroner] - [#48826]) ([openweathermap docs]) +- Catch expected errors and log them in rituals perfume genie ([@milanmeu] - [#48870]) ([rituals_perfume_genie docs]) +- Extend media source URL expiry to 24h ([@emontnemery] - [#48912]) ([media_source docs]) +- Bump pykodi to 0.2.4 ([@cgtobi] - [#48913]) ([kodi docs]) +- Handle exceptions when looking for new version ([@ludeeus] - [#48922]) ([version docs]) +- Change discovery timeout from 10 to 60 ([@ludeeus] - [#48924]) ([hassio docs]) +- Fix "notify.events" trim() issue + add initial tests ([@spacegaier] - [#48928]) ([notify_events docs]) +- Bump pykodi to 0.2.5 ([@cgtobi] - [#48930]) ([kodi docs]) +- Bump ZHA quirks library ([@dmulcahey] - [#48931]) ([zha docs]) +- Extend Google Cast media source URL expiry to 24h ([@Ph-Wagner] - [#48937]) ([cast docs]) +- Fix Plex live TV handling ([@jjlawren] - [#48953]) ([plex docs]) + +[#48826]: https://github.com/home-assistant/core/pull/48826 +[#48870]: https://github.com/home-assistant/core/pull/48870 +[#48912]: https://github.com/home-assistant/core/pull/48912 +[#48913]: https://github.com/home-assistant/core/pull/48913 +[#48922]: https://github.com/home-assistant/core/pull/48922 +[#48924]: https://github.com/home-assistant/core/pull/48924 +[#48928]: https://github.com/home-assistant/core/pull/48928 +[#48930]: https://github.com/home-assistant/core/pull/48930 +[#48931]: https://github.com/home-assistant/core/pull/48931 +[#48937]: https://github.com/home-assistant/core/pull/48937 +[#48953]: https://github.com/home-assistant/core/pull/48953 +[@Ph-Wagner]: https://github.com/Ph-Wagner +[@cgtobi]: https://github.com/cgtobi +[@dmulcahey]: https://github.com/dmulcahey +[@emontnemery]: https://github.com/emontnemery +[@hanskroner]: https://github.com/hanskroner +[@jjlawren]: https://github.com/jjlawren +[@ludeeus]: https://github.com/ludeeus +[@milanmeu]: https://github.com/milanmeu +[@spacegaier]: https://github.com/spacegaier +[cast docs]: /integrations/cast/ +[hassio docs]: /integrations/hassio/ +[kodi docs]: /integrations/kodi/ +[media_source docs]: /integrations/media_source/ +[notify_events docs]: /integrations/notify_events/ +[openweathermap docs]: /integrations/openweathermap/ +[plex docs]: /integrations/plex/ +[rituals_perfume_genie docs]: /integrations/rituals_perfume_genie/ +[version docs]: /integrations/version/ +[zha docs]: /integrations/zha/ + +## Release 2021.4.3 - April 10 + +- Add TTS engines in config.components ([@ludeeus] - [#48939]) ([tts docs]) +- Implement percentage_step and preset_mode is not not speed fix for MQTT fan ([@jbouwh] - [#48951]) ([mqtt docs]) +- Bump devolo Home Control to support old websocket-client versions again ([@Shutgun] - [#48960]) ([devolo_home_control docs]) +- Fix config forwarding ([@balloob] - [#48967]) ([template docs]) +- Prevent ping id allocation conflict with device_tracker ([@bdraco] - [#48969]) ([ping docs]) +- Fix Shelly button device triggers ([@thecode] - [#48974]) ([shelly docs]) +- Update python-smarttub to 0.0.23 ([@mdz] - [#48978]) ([smarttub docs]) + +[#48939]: https://github.com/home-assistant/core/pull/48939 +[#48951]: https://github.com/home-assistant/core/pull/48951 +[#48960]: https://github.com/home-assistant/core/pull/48960 +[#48967]: https://github.com/home-assistant/core/pull/48967 +[#48969]: https://github.com/home-assistant/core/pull/48969 +[#48974]: https://github.com/home-assistant/core/pull/48974 +[@Shutgun]: https://github.com/Shutgun +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@jbouwh]: https://github.com/jbouwh +[@ludeeus]: https://github.com/ludeeus +[@thecode]: https://github.com/thecode +[devolo_home_control docs]: /integrations/devolo_home_control/ +[mqtt docs]: /integrations/mqtt/ +[ping docs]: /integrations/ping/ +[shelly docs]: /integrations/shelly/ +[template docs]: /integrations/template/ +[tts docs]: /integrations/tts/ +[#48978]: https://github.com/home-assistant/core/pull/48978 +[@mdz]: https://github.com/mdz +[smarttub docs]: /integrations/smarttub/ + +## Release 2021.4.4 - April 13 + +- Move cast config flow tests to test_config_flow ([@emontnemery] - [#48362]) ([cast docs]) +- Bump nexia to 0.9.6 ([@bdraco] - [#48982]) ([nexia docs]) +- Set Lyric hold time to use local time instead of utc ([@timmo001] - [#48994]) ([lyric docs]) +- Fix Shelly brightness offset ([@thecode] - [#49007]) ([shelly docs]) +- Bump ha-philipsjs to 2.7.0 ([@elupus] - [#49008]) ([philips_js docs]) +- Fix use search instead of match to filter logs ([@frenck] - [#49017]) ([logger docs]) +- Resolve potential roku setup memory leaks ([@ctalkington] - [#49025]) ([roku docs]) +- Bump aiohomekit to 0.2.61 ([@bdraco] - [#49044]) ([homekit_controller docs]) +- Fix cast options flow overwriting data ([@emontnemery] - [#49051]) ([cast docs]) +- Quote media_source paths ([@emontnemery] - [#49054]) ([http docs]) +- mqtt fan percentage to speed_range and received speed_state fix ([@jbouwh] - [#49060]) ([mqtt docs]) +- Catch unknown equipment values ([@dieselrabbit] - [#49073]) ([screenlogic docs]) +- Downgrade logger message about homekit id missing ([@bdraco] - [#49079]) ([homekit_controller docs]) +- Upgrade maxcube-api to 0.4.2 ([@unaiur] - [#49106]) ([maxcube docs]) +- Check all endpoints for zwave_js.climate hvac_action ([@jjlawren] - [#49115]) ([zwave_js docs]) + +[#48362]: https://github.com/home-assistant/core/pull/48362 +[#48982]: https://github.com/home-assistant/core/pull/48982 +[#48994]: https://github.com/home-assistant/core/pull/48994 +[#49007]: https://github.com/home-assistant/core/pull/49007 +[#49008]: https://github.com/home-assistant/core/pull/49008 +[#49017]: https://github.com/home-assistant/core/pull/49017 +[#49025]: https://github.com/home-assistant/core/pull/49025 +[#49044]: https://github.com/home-assistant/core/pull/49044 +[#49051]: https://github.com/home-assistant/core/pull/49051 +[#49054]: https://github.com/home-assistant/core/pull/49054 +[#49060]: https://github.com/home-assistant/core/pull/49060 +[#49073]: https://github.com/home-assistant/core/pull/49073 +[#49079]: https://github.com/home-assistant/core/pull/49079 +[#49106]: https://github.com/home-assistant/core/pull/49106 +[#49115]: https://github.com/home-assistant/core/pull/49115 +[@bdraco]: https://github.com/bdraco +[@ctalkington]: https://github.com/ctalkington +[@dieselrabbit]: https://github.com/dieselrabbit +[@elupus]: https://github.com/elupus +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@jbouwh]: https://github.com/jbouwh +[@jjlawren]: https://github.com/jjlawren +[@thecode]: https://github.com/thecode +[@timmo001]: https://github.com/timmo001 +[@unaiur]: https://github.com/unaiur +[cast docs]: /integrations/cast/ +[homekit_controller docs]: /integrations/homekit_controller/ +[http docs]: /integrations/http/ +[logger docs]: /integrations/logger/ +[lyric docs]: /integrations/lyric/ +[maxcube docs]: /integrations/maxcube/ +[mqtt docs]: /integrations/mqtt/ +[nexia docs]: /integrations/nexia/ +[philips_js docs]: /integrations/philips_js/ +[roku docs]: /integrations/roku/ +[screenlogic docs]: /integrations/screenlogic/ +[shelly docs]: /integrations/shelly/ +[zwave_js docs]: /integrations/zwave_js/ + ## 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). @@ -694,7 +880,7 @@ to adjust them to match this change. {% enddetails %} -{% details "MQTT" %} +{% details "MQTT Fan" %} The [fan entity model](https://developers.home-assistant.io/docs/core/entity/fan/) has been changed. This impacts the way the MQTT Fan supports speeds and the @@ -802,7 +988,7 @@ safely removed from your YAML configuration. {% enddetails %} -{% details "SolarEdge" %} +{% details "MQTT Light" %} MQTT JSON light now supports `color_mode` which should be used together with `supported_color_modes` to signal the light's features. diff --git a/source/_posts/2021-04-09-android-april-2021-release.markdown b/source/_posts/2021-04-09-android-april-2021-release.markdown new file mode 100644 index 00000000000..ab17c30f09c --- /dev/null +++ b/source/_posts/2021-04-09-android-april-2021-release.markdown @@ -0,0 +1,71 @@ +--- +title: "Home Assistant Companion Android App April 2021 Release" +description: "Search/Filter, In-App Log Viewer & Shortcuts in the April 2021 Android Release" +date: 2021-04-08 00:00:00 +date_formatted: "April 8, 2021" +comments: true +author: Daniel Shokouhi +categories: Release-Notes +og_image: /images/blog/2021-04-09-android-april-2021/Companion.png +--- + +Hey Everyone! It's time for the April 2021 Android release. Last month we wrote that we would be aligning our releases closer to Home Assistant core so here we are! Another month went by and the Android app has started to see more contributors coming along. Hopefully, you will join us next month as we can always use more contributors to move forward faster. + +## In-App Log Viewer + +This release has a new feature that will make viewing and sharing the logs MUCH easier. Some of you may recall the large number of steps needed to get Android logs when you open issues. This usually involved installing [Android Studio](https://developer.android.com/studio) or another app and having to plug your device into a computer to grant some special ADB permissions. This was very difficult to get set up for the average user and just wasn't user-friendly. + +We've added a new option to the App Configuration called "Show and Share Logs". It will show all the logs from our app, including debug logs to help troubleshoot issues such as when the location does not update or if the app is using the correct URL. You are not only able to view this log but also share and select from it so you can copy the logs to a [GitHub issue](https://github.com/home-assistant/android/issues/new?assignees=&labels=bug&template=Bug_report.md&title=) for our team to look into. + +

    +Screenshot of in-app log viewer +Screenshot of In-App Log Viewer +

    + +## Settings Improvements + +We have had several improvements made to the overall design of the App Configuration pages to make better use of the space and add some neat features. First and foremost, every setting screen now has a new help icon taking you to the proper place in the [documentation](https://companion.home-assistant.io/) like location settings or even notifications. Just look for the new help icon at the top right-hand corner, if the page does not offer enough information. + +As of this release the app now has a total of 71 sensors, given your device supports them all your number may be less. That is a lot of sensors and we don't expect a lot of users to actually use them all. We have added 2 new features to make this page easier to navigate. You can now filter by showing only the enabled sensors to get rid of the sensors you don't want to use, if you have all sensors enabled don't expect to see this filter. You can also perform a search against the list of sensors to find one quickly and manage it. + +Notification History now lets you search by the `message` that was sent to the device. Searching will bypass the filter options we have, which limits the view to the last 100 notifications. Filtering and delete options have been moved to the top right-hand corner to make better use of the space. + +

    +Screenshot of Sensor Search and Filter +Screenshot of Sensor Search & Filter. +

    + +## Shortcuts + +Sometimes when you open the app you may already know exactly where you want to go. You may find yourself on the same view often to see your cameras or give the nursery a quick look to make sure things are ok. You may even want to quickly see the history of an entity like when the door was last opened. In this release, we have introduced [Android Shortcuts](https://developer.android.com/guide/topics/ui/shortcuts) which will let you get to anywhere in the Home Assistant frontend quickly, directly from your home screen. Shortcuts will look like a separate app on the home screen allowing you to make them easily accessible and even place them into a folder for better organization. You can navigate to any Lovelace [view or dashboard](/lovelace/dashboards-and-views/) including other pages like the [Shopping List](/integrations/shopping_list/). You can also navigate to any entity directly to get more information like the history or see the graph. + +There are a few different shortcut types and in the nature of Home Assistant, we have opted not to add static shortcuts because they are static! We support dynamic shortcuts which will show up under the app long-press menu. Once you create a shortcut, you will be able to drag it onto your home screen. There is also support for pinned shortcuts that can be added automatically to your home screen without needing to drag the icon, given your device and launcher support pinned shortcuts. Check out the [documentation](https://companion.home-assistant.io/docs/integrations/android-shortcuts) for more details including known limitations. + +

    +Screenshot of Shortcuts +Screenshot of Shortcuts +

    + +## Other Changes + +Here is a list of the other changes you may notice: + +* [Battery Temperature Sensor](https://companion.home-assistant.io/docs/core/sensors#battery-sensors) +* Notification command to [turn on the screen](https://companion.home-assistant.io/docs/notifications/notification-commands#screen-on) +* [BLE Transmitter](https://companion.home-assistant.io/docs/core/sensors#bluetooth-sensors) has a new setting to enable/disable the transmitter so the sensor can remain enabled. This new setting will correspond to the existing notification command. +* High Accuracy mode has a new zone-based automation feature allowing you to trigger this mode faster. See the [documentation](https://companion.home-assistant.io/docs/core/location#high-accuracy-mode) for more details. + +

    +Screenshot of High Accuracy Zoning +Screenshot of High Accuracy Zoning. +

    + +* Long-pressing an entity in Android's Power Menu will now take you directly to the entity instead of the home page. +* Covers that support setting the position are also supported in Android's Power Menu. +* Lots of fixes and improvements in all other areas of the app. + +Big thank you to everyone involved. Please keep those bug reports and feature requests coming! + +## Changelog + +- 2021.4.1 - https://github.com/home-assistant/android/releases/tag/2021.4.1 diff --git a/source/_posts/2021-04-09-community-highlights.markdown b/source/_posts/2021-04-09-community-highlights.markdown new file mode 100644 index 00000000000..79e5fc07c6e --- /dev/null +++ b/source/_posts/2021-04-09-community-highlights.markdown @@ -0,0 +1,118 @@ +--- +title: "Community Highlights: 16th edition" +description: "Google Home custom integration so you can read timers and alarms, get started with the tempometer gauge card and a lot of new inspiration for your own Lovelace dashboard." +date: 2021-04-09 00:00:00 +date_formatted: "April 9, 2021" +author: Klaas Schoute +author_twitter: klaasnicolaas +categories: Community +og_image: /images/blog/2021-04-09-community-highlights/social.png +--- + +What did you think of [the release][release] last Wednesday? A +lot of cool things have been added! But there were also a lot of +great projects shared this week from the community and we have +selected the best for you. So here's the 16th edition of the Home +Assistant Community Highlights! + +Do you want to share something for the next edition? +Information on [how to share](#got-a-tip-for-the-next-edition). + +./Klaas + +## Blueprint of the week + +You're leaving home and oh dear! It turns out that one of your lights +is on 💡 What if you then receive a notification with an option to switch +off the light, without having to open the Home Assistant app first? + + + +With the blueprint from [vorion](https://community.home-assistant.io/u/vorion) +you can easily get started to create your own actionable notifications, give it +a try. Read more about it on the [community forum][week_blueprint] or install this +automation in your instance with a click on the my button! + +{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/actionable-notifications-for-android/256773" %} + +## Google Home + +Long ago it was possible to read the alarms and timers from your Google Home +in Home Assistant, due to a change in the API this was unfortunately no longer possible. + + + +But thanks to a new [custom integration](https://github.com/leikoilja/ha-google-home) +from [leikoilja](https://github.com/leikoilja), it’s now possible to integrate alarms +or timers that you have set up on a Google Home device. For example, you could switch +the lights automatically in the morning based on an alarm clock that you have set. + +## Tempometer Gauge Card + + + +Are you looking for a card to spice up your existing gauge card? +Then try the [tempometer gauge card](https://github.com/SNoof85/lovelace-tempometer-gauge-card) made by [SNoof85](https://github.com/SNoof85). + + + +## Lovelace Dashboard + +This week also a Lovelace dashboard and this time that of [agneevX](https://github.com/agneevX), +the nice thing about this dashboard is that it's designed from a mobile first principle. Which +means that you make a design / dashboard for the smallest screen (mobile) and then work out step +by step how it will look on a larger screen (desktop). + + + +You can find all his code in [this repository](https://github.com/agneevX/my-ha-setup) on Github. + +## Got a tip for the next edition? + +Have you seen (or made) something awesome, interesting, unique, amazing, +inspirational, unusual or funny, using Home Assistant? + +[Click here to send us your Community Highlight suggestion](/suggest-community-highlight). + +Also, don't forget to share your creations with us via Social Media: + +- Tweet it! Be sure to mention [@home_assistant][twitter] +- Share it on our [Facebook group][facebook-group] +- Post it to our [subreddit][reddit] +- Tag [@homeasssistant][instagram] on Instagram +- Or via chat, drop us a line in the [#lounge at Discord][chat] + +See you next edition! + +[chat]: https://www.home-assistant.io/join-chat +[facebook-group]: https://www.facebook.com/groups/HomeAssistant +[instagram]: https://www.instagram.com/homeassistant +[reddit]: https://www.reddit.com/r/homeassistant +[twitter]: https://www.twitter.com/home_assistant +[blueprints]: https://community.home-assistant.io/c/blueprints-exchange +[release]: https://www.home-assistant.io/blog/2021/04/07/release-20214/ +[week_blueprint]: https://community.home-assistant.io/t/actionable-notifications-for-android/256773 \ No newline at end of file diff --git a/source/_redirects b/source/_redirects index e86b089a5c2..f7972528b7a 100644 --- a/source/_redirects +++ b/source/_redirects @@ -2115,6 +2115,12 @@ /hassio/installation /installation /hassio/installing_third_party_addons /common-tasks/os#installing-third-party-add-ons /integrations/faadelays /integrations/faa_delays +/cookbook/notify.mqtt /examples#notifications +/cookbook/#example-configurationyaml /examples/#example-configurationyaml +/cookbook/#user-interface /examples/#user-interface +/cookbook/#infrastructure /examples/#infrastructure +/cookbook/#automation-examples /examples +/cookbook /examples # Migrated Community Guides /cookbook/apache_configuration https://community.home-assistant.io/t/reverse-proxy-with-apache/196942 diff --git a/source/addons/index.html b/source/addons/index.html index ea5b65dbc3f..763cbe26494 100644 --- a/source/addons/index.html +++ b/source/addons/index.html @@ -29,8 +29,9 @@ regenerate: false

    Add-ons are only available if you've used the Home Assistant installer. If you - installed Home Assistant using any other method then you cannot use add-ons - (but you can achieve the same result manually). + installed Home Assistant using any other method then you cannot use add-ons. + Often you can achieve the same manually, refer to the documentation by the + vendor of the application you'd like to install.

    diff --git a/source/blue/index.html b/source/blue/index.html index 788f710e76c..5e7b9802074 100644 --- a/source/blue/index.html +++ b/source/blue/index.html @@ -590,7 +590,7 @@ Or if you are still looking for a present for friends and family. {% details "What is limited about the bundle?" %} We have only created a limited amount of cases. Once they are sold out, -we don't currently have plans to make more. +we don't currently have plans to make more. All other parts of the bundle will remain available for purchase. {% enddetails %} @@ -662,7 +662,7 @@ Nope! We are committed to keep supporting all platforms that are currently avail

    @@ -739,7 +739,7 @@ Nope! We are committed to keep supporting all platforms that are currently avail /> BUY BLUE -
    +