Home Assistant Tags

five minutes reading time

Photo of a Tag Reader

RFID tags have been on my radar for home automation since @hoveeman published this video two years ago of him using RFID cards to play music in his house.

It has been my dream ever since to get this easily accessible to every Home Assistant user. It already got a lot more accessible when @maddox released Magic Cards. But this was still a separate application that you had to run besides Home Assistant, and it required a separate RFID reader.

Can we do better? Yes, we can. Today we are introducing Home Assistant Tags. A collaboration between our iOS, Android, frontend, core and hardware groups. With Home Assistant Tags, we’re making scannable tags (NFC/RFID) a first-class citizen in Home Assistant. Easy to read, write and automate!

The Apps

The official Home Assistant apps have been updated with NFC support. This dramatically lowers the bar for starting to automate your house with NFC tags. All you need now is tags!

From the apps you can now write a special Home Assistant URL to tags. Once you hover over one of these tags with your phone, they will trigger the Home Assistant app and send the identifier to your Home Assistant instance for processing. Tags are not bound to the phone that wrote them, any phone can scan them.

Thanks to @David-Development for the NFC support in the Android app and thanks to @zacwest for the NFC support in the iOS app.

Only iPhone XS, XR and iPhone 11 or later support background NFC tag reading.

Standalone Tag Reader

Having mobile tag readers is great, but there is more! The original RFID jukebox that peaked my interest worked with a dedicated RFID reader. This RFID reader was connected to a Raspberry Pi that was running a script to read the tags and send them to Home Assistant.

Photo of the old system Photo of the old system.

These solutions work great but were bulky and required hardware skills and technical skills to set up. The hardware cost for building a single reader could be around $30 (RFID reader + Raspberry Pi 0), but that’s just for 1 room. What if you want more rooms? That adds up quickly.

@adonno, with the help of @MagnusO, has been working on a smaller tag reader based on ESPHome. It’s powered by an ESP8266 chip and a PN532 NFC module. The case is 3D printed.

Because it’s powered by ESPHome, setting up is a breeze. Once powered on, it will create an access point that allows you to add your WiFi configuration. After that Home Assistant will pick it up and you can start scanning tags.

Photo of a tag reader with orange accents

The nice thing about standalone tag readers is that they are dedicated to a room. This means automations know in which room to act when a music card is scanned and can pick the right media player. This makes it easy to have cards that can work in every room.

The tag reader is open-source and available on GitHub. You can make one yourself or buy one of the pre-built ones or DIY kits that Adonno is selling.

Managing Tags in Home Assistant 0.115

Home Assistant 0.115 will contain a brand new tag manager, thanks to @bramkragten and @dmulcahey. On this screen you can create new tags, see the tags that have been scanned and can easily create automations for each tag. The new UI tightly integrates with the mobile apps, allowing you to write existing IDs to new tags with the tap of a button.

Tag user interface in Home Assistant

Building the RFID jukebox

All previous things put the pieces in place for us to be able to build our own jukebox. We can do this with just a few lines of YAML using some of the cool new features coming in Home Assistant 0.115:

# Note, this is using new automation features introduced in Home Assistant 0.115
- id: handle_tag_scan
  alias: "Handle Tag Scan"
  mode: single
  # Hide warnings when triggered while in delay.
  max_exceeded: silent
    # Map scanner device ID to media player entity ID
      0e19cd3cf2b311ea88f469a7512c307d: media_player.spotify_balloob
    # Map tag ID to content
        media_content_id: spotify:album:0h2knr6qpiAq0tV5ri5JMF
        media_content_type: album
        media_content_id: spotify:playlist:0OtWh3u6fZrBJTQtVBQWge
        media_content_type: playlist
    platform: event
    event_type: tag_scanned
    # Test that we support this device and tag
    - "{{ trigger.event.data.tag_id in tags }}"
    - "{{ trigger.event.data.device_id in media_players }}"
    - variables:
        media_player_entity_id: "{{ media_players[trigger.event.data.device_id] }}"
        media_content_id: "{{ tags[trigger.event.data.tag_id].media_content_id }}"
        media_content_type: "{{ tags[trigger.event.data.tag_id].media_content_type }}"
    - service: media_player.play_media
        entity_id: "{{ media_player_entity_id }}"
        media_content_id: "{{ media_content_id }}"
        media_content_type: "{{ media_content_type }}"
    - delay: 2 # timeout before we allow processing next scan

Photo of printed NFC cards Printed NFC cards. Learn how to make them

Time to get scanning!

With these new features, you will be able to do a lot of cool things. Get yourself some NFC tags or NFC cards to get going. Here is some inspiration:

  • NFC cards to play music
  • NFC stickers on books that play grandparents reading the book
  • NFC tags to activate scenes in the room
  • NFC cards to open recipes on screens in the kitchen
  • NFC tags to allow access to your home

Happy 7th birthday Home Assistant! 🎉

1 minute reading time

Celebration graphic

This week Home Assistant turns seven years old, wild! It all started with me automating my Hue lights when the sun was setting and someone was home, and now we’re here. 😎

It’s been a crazy busy year. We’ve seen our contributions increase since the pandemic started, and it hasn’t lowered. To give some numbers, in the last 4 weeks, we have merged more than 1400 contributions! The core of Home Assistant has seen contributions from over 2100 different people at this point. And that doesn’t include the work that is being done on our frontend, iOS app, Android app or any of the documentation websites.

All these people are working to make Home Assistant the best home automation software out there. For anyone to enjoy for free. With our focus on local control and privacy, we give people worldwide the ability to live their life. No fear that your smart home stops working when a manufacturer decides to pull the plug. No fear that your life is shared with third parties to improve the experience of a light bulb. Your home, your data, your life.

In the last year, we’ve seen Home Assistant get more user friendly, more powerful and receive significant performance improvements. We’re continuing to be able to give everyone a great experience, regardless of expertise level.

We’re going to celebrate it this year with not just one day, but with a whole week of daily announcements and various releases. 🎁 So check back each day this week to catch the latest!

Also, keep an eye out for the next episode of the Home Assistant Podcast this Thursday. I’ll be joining Phil and Rohan to discuss literally everything. It will be a great episode.

Happy birthday!


Home Assistant Companion Android App Release 2.4.0

four minutes reading time

Hey there, I hope everyone has been enjoying the last release of the Android app. We have another update coming up where we felt it’s time to give everyone a heads up before release. There are several new changes done that you will immediately notice after installing the update to 2.4.0, so we wanted to cover what’s new. You can expect this release to be available in the Google Play Store tomorrow.

Current and Future Breaking Changes

Sometimes when we move really fast, we may move a bit too fast. While we had fun adding all the new sensors, we didn’t stop to think about the new user experience and how we are making a burden on them by having non-static attributes for some of the sensors. In reality, these attributes are a state and we need to treat them as such. If we don’t, there will be a need to use templates that are not user-friendly. We wanted to fix this issue and be courteous to our current users, so we have made a few changes. Some of which take place in this release and some in the following release after 2.4.0.

The first major change in this release is that the app will no longer send needless updates to your Home Assistant instance when there is nothing new to report state-wise. This helps cut down on the amount of data that gets sent out. Some attributes attached to some sensors update outside of the state, to combat this change, we have split those attributes to become their own sensor. For example, the audio sensor had an attribute to tell if headphones were currently plugged into the device. This, by itself, is a state change and thus now a binary sensor.

We have opted to keep the existing attributes where they are for this release, this way they do not break existing templates. However, they may trigger slower until you move to the new sensor. All of the new sensors are also disabled by default (with the exception of battery), so you may want to enable the ones you care for. The following sensors have had their attributes split up:

  • Audio Sensor - All attributes. The sensor name for new users is changed to Ringer Mode to better align with what the state represents.
  • Battery State Sensor - All attributes.
  • Bluetooth Connection - Only is_bt_on now has its own binary sensor. The other attributes update with the state.
  • Storage Sensor - External storage attributes. The new sensor will behave the same as the current storage sensor, which is now labeled as Internal Storage.
  • WiFi Connection - All attributes with the exception of is_hidden.

These attributes mentioned above will be removed in the next release. Please make your switch to the new sensors now to avoid the breaking change then.

Attributes have also had a slight breaking change as we are now sending the correct data type for the attribute. Previously they were all sent as a string, which meant binary values needed to be wrapped in quotes.

The Geocoded location sensor also had its attribute of Location split into the attributes they reflect as latitude and longitude.

Foreground Service Worker

We have seen issues where some of the sensors do not update reliably; There were times when the sensor worker could not run. We have gone ahead and converted this to become a foreground service, which means from time to time, you will see a low priority notification when the sensors are updating. This low priority notification does not make a sound and just appears briefly in the status bar. We felt this to be a good compromise instead of having to use a persistent notification.

If you are on Android Oreo or later you can minimize or turn off the channel completely. Please keep in mind that doing that, may affect the update reliability. Google’s recommendation was to make it low priority and if you have seen recent updates to the Google Phone and Calendar apps you have already seen this described behavior.

Screenshot of Foreground Service Screenshot of the Foreground Service.

New Sensors

We have new sensors added this time around. All of the below sensors are disabled by default:

  • Doze mode - Android 6.0+ only, a binary sensor to represent the state of doze mode.

Screenshot of Doze Mode Screenshot of Doze Mode.

  • Interactive - A binary sensor that represents whether or not the device is being interacted with.
  • Power Save mode - A binary sensor that turns on when the device reports it’s in power-saving mode. Most manufacturers allow this to be user-configurable on the device.
  • Public IP - A sensor that shows the public IP address of the device.

Other Changes

We have also spent time making improvements in other areas of the application:

  • Several more location improvements have been made.
  • Sensors are hidden on devices that do not have them.
  • General improvements to the app architecture to help developers understand the flow.
  • More localization improvements.
  • General improvements to the settings screen.

Special thanks to JBassett, chriss158, anyuta1166 and skynetua for all of your contributions. So keep them bug reports and feature requests coming, we’ll chat again next time!

Home Assistant Companion Android App: New Features

three minutes reading time

Hey there, it’s been so long since we last gave an update on our mobile apps we thought it would be time to give you more updates! This time around we will focus on whats new in the Android app. There have been a few releases so were going to cover everything new up until version 2.3.0 which was just released to the Google Play Store.

Manage Sensors

Starting from version 2.2.0 there is a new Manage Sensors screen that you can find under App Configuration. Users can now disable sensors they don’t want while continuing to receive updates from the sensors they do care about. This includes turning off the Geocoded sensor while keeping location tracking on. Speaking of which the 2 location toggles that used to be found in App Configuration are now located in this new screen. You can expect to see the live data that was recently sent over to your Home Assistant instance as well as the attributes and other sensor details.

Screenshot of Manage Sensors Screenshot of the Manage Sensors.

Screenshot of Sensor Management Screenshot of Sensor Management.

New Sensors

We have had quite a bit of sensors get added since we last spoke so here’s whats new. Some of these sensors will update their state in your Home Assistant instance upon certain state changes. All of the sensors listed below will also update during the normal 15 minute update interval. To get more details about what to expect from each sensor check out the docs.

Available for Google Play Store version only:

  • Activity

Available for all users:

  • Audio
  • Bluetooth
  • Do Not Disturb
  • Last Reboot
  • Light
  • Phone
  • Pressure
  • Proximity
  • Next Alarm
  • Sim 1 & 2
  • Steps
  • Storage

Sensor Enhancements

In addition to all the new sensors mentioned above we also had some improvements to our existing set of sensors. The battery state sensor now includes the battery health as a attribute and will also issue a second update call a few seconds after being plugged in so the state can update faster. The WiFi connection sensor was also updated so the state and certain attributes will update upon any network detected change. This state change also means that if you have multiple access points you will be able to see the device switching in real time.


The app now supports reading and writing to NFC tags so you can build automations off scanning the tag. Home Assistant Core 0.114+ is required for this feature. Keep in mind that certain phones will require you to have your phone unlocked before it can read the tag. More details about how it works in the docs.

Screenshot of NFC Screenshot of NFC.

Template Widget

A new widget was added to give the user full control over creating a template widget with just about any data they want! Users will see the template rendering in real time as they build it. I personally recommend to start building your templates on a desktop as it can feel a bit cumbersome on a phone or tablet. This widget will update every 15 minutes or when it is tapped.

Screenshot of the Template Widget Screenshot of the Template Widget.


You can now set the theme of the app independently from the device theme. This is useful for users who like a dark theme on their device but use a light theme for Home Assistant. In addition to this change we also had a few more fixes around themes.

Screenshot of App Theme selection Screenshot of App Theme selection.

Additional Improvements

  • Support for H265 videos was added
  • Entity state widget was enhanced to allow for multiple attributes and a custom separator
  • Widgets were enhanced overall to allow material icons
  • Notifications can now use :smiley: like you can in Discord
  • Lots of fixes across the board

Special thanks to chriss158, colincachia, David-Development, JBassett, klejejs, noam148, skynetua and uvjustin for all of your contributions. So keep them bug reports and feature requests coming, we’ll chat again soon!

The month of 'What the Heck?!'

three minutes reading time

Welcome to the month of “What the heck?!”

Home Assistant is now almost around for 7 years! During that time, it has grown into a big project, beloved by many of you. However, as the project grew, some things might not have turned out the way it should be, are missing or maybe even started annoying you. That is what this month is about.

We realize reporting bugs on our GitHub might be a steep hill. You’ll need a GitHub account, report an issue following the issue templates using Markdown and the report itself needs to be written in a way a developer can work with it. Furthermore, we use our issue tracker for tracking actual issues and bugs; not small feature requests or annoyances.

While this is a common and reasonable process to collect, track and process bugs, our issue tracking process might not be the ideal way to learn about annoyances or small tweaks and improvements that can make us all enjoy Home Assistant even more.

In May, of this year, the Ruby on Rails project had a similar month, which we have enjoyed watching. Now, we are going to do something similar.

Today, we have opened up a Community Forum category as a safe, lower barrier place to tell about your Home Assistant “What the heck?!” moments, and more importantly, discuss and vote on topics your fellow users have brought up.

Frenck recently tried something similar for Home Assistant on Twitter, by asking:

The responses to that question were amazing! Full of inspiration, recognition of stuff that annoyed us as well, but also some really really good suggestions. And this is not just about new tiny little things, examples may include:

  • I’d love to see some Home Assistant sensors with things like: The total automations, triggers processed this hour, the total number of integrations, entities, number of events fired.
  • I want to be able to upload a backup on the frontend on the first install.
  • Maybe you are annoyed by some logs that you need to refresh and scroll to see updates?
  • You have a lot of template entities that all do the same thing and maybe could be handled by Home Assistant automatically.
  • Always need a workaround to automate something the way you like and really wished Home Assistant provided a better trigger/condition for it?

These are the things we are looking for, the things we should share this month.

We are really looking forward to all the stuff that will be brought up! This will be interesting!

Join us on the forums!

Image of a person expressing a what the heck moment So, when does Home Assistant trigger this moment for you?


  • “I have multiple things! Should I put all my stuff in a single topic?!”

    No, please create multiple, smaller topics. Each topic can be voted on, picked up and resolved. Having multiple things stacked in a single forum topic, makes resolving, discussing and voting on them hard. There is no limitation on how many things one can suggest this month.

  • “Is everything reported going to be fixed/addressed?”

    There is no guarantee that will happen. The goal is to lower the barrier to reporting things for one month. Home Assistant still relies on contributors to address or improve the project. However, we do think collecting feedback this way can tremendously help with the upcoming Hacktoberfest.

  • “I really want this new integration to be implemented, so I can use my devices. Is this the right place for it?”

    No, this event is not for requesting new device or services integrations. Please use the “Feature Requests” forum category instead.

  • “I’ve found a bug and am comfortable with GitHub. Where should I report my issue now?”

    If you are comfortable with using GitHub, please, by all means, file an issue report on GitHub.

0.114: Dark mode, Open Z-Wave progress and more automation & scripts

37 minutes reading time

Ooh boy, time flew this release cycle; it is time for 0.114 already!

Personally, I’m hardly even done implementing all automation features added in the previous release. 😅

Ever since our Lovelace UI started as a beta, back in 2018, one of the most requested features - arguably - is a dark mode. No wonder, as a dark mode is added to software everywhere nowadays.

This release adds dark mode! @bramkragten didn’t stop there and added color pickers for the main theme colors as well. I looked forward having it, an easy way of having a bit of theming, without the need for themes.

This is by far the most noticeable feature of this release, mainly because it is immediately apparent after the upgrade.

Meanwhile, the beta Open Z-Wave integration picks up speed in terms of contributions, reports, fixes and improvements. I’ve been using it already, and I love it. My Z-Wave network has never been better and more stable. If you haven’t tried it yet, I would highly recommend doing so. There is a nice community guide on how to test it without switching over.

Besides the listing below, 0.114 may feel a bit “empty”, however, it isn’t. It is packed with little things and fixes. The “All changes” section is definitely worth a look this release.

Enjoy the release.


Dark mode and theme color pickers

We now have official support for dark mode. 🎉

We detect if your device is in dark mode; if that is the case, our default theme will go dark. You can override the automatic switching between dark and light theme in your profile.

Furthermore, you can now also select the primary and accent color for the default theme. We calculate all other colors to make sure everything matches and is readable.

Screenshot of the new dark mode theme settings Screenshot of the new dark mode and theme settings.

So if you upgrade to Home Assistant 0.114, you are using the default theme and your device is set to a dark mode; Please be aware that after upgrading, you will get a dark theme by default in that case.

Also, when picking colors, make sure you choose a primary color that is readable on both a light and dark background. For now, this is just a local setting and has to be applied to every device.

For custom themes, there is a new option on the set_theme service call, mode: 'dark'; this allows to set a theme that will be used when your device is in dark mode.

Lastly, when using the set_theme service, the settings are now persistent across restarts. So if you have an automation that calls set_theme on startup, you don’t need it anymore. 😉

Automation & Scripts updates

In Home Assistant 0.113 we added tons of new features to automations and scripts. This release contains some fixes for issues discovered and reported, but also adds some smaller new features to extend it even more.

First of all, the repeat and choose actions are now available when creating automations or scripts via the UI.

Screenshot of the new automation features available in the UI Screenshot of the new automation features available in the UI.

Sub-second precision has been extended and is now available in all time-related notations. For example, you can now use 2.5 seconds/hours/minutes or even use it in full time notations: 23:59:59.999.

The automation.turn_off service now accepts a stop_actions data parameter. By default, when turning off an automation, any currently running automation will be stopped. This new option allows you to turn off an automation and optionally leave any currently active actions running.

Lastly, a small shortcut has been added to the time trigger, which now accepts multiple time values.

  - alias: "Example with multiple time values in a single time trigger"
      - platform: time
          - "05:00:00"
          - "06:00:00"
          - "10:00:00"
      choose: ...

Open Z-Wave (beta)

The Open Z-Wave (beta) integration is coming along nicely and others are started helping out as well! A shout out to @firstof9, [@RobBie1221] and @tradiuz for jumping in and helping out this release.

Some additional information is added to the UI for Open Z-Wave, you can now see device information right from the device page and shows information like the Z-Wave Node ID and other information about your Z-Wave device.

Screenshot of Z-Wave device information available in the UI Screenshot of Z-Wave device information available in the UI.

Furthermore, RGB color support has been added to lights, and bugs have been fixed using color temperatures and dimming. 💡

Lastly, unnecessary polling of devices has been reduced.

Yet another round of performance improvements

Did we tell you that @bdraco is unstoppable in his saga to improve the performance and stability of Home Assistant? His train just keeps going!

0.114 is no exception and a lot of smaller performance and stability improvements are made again.

A bit technical, maybe, but here is a small overview of the changes:

  • The internal device & entity registries are now indexed, and thus faster.
  • Setting up groups at startup is more efficient.
  • Reloading YAML configurations or checking your configuration is now quicker.
  • A context accompanies every event in Home Assistant (every trigger, automation, … has a “triggered by what and who”). These contexts are now created faster, which makes everything faster.
  • Tracking time pattern triggers are now scheduled on our event loop, which is far more efficient.
  • Processing of system logs is taken out of the main program loop, so it doesn’t interfere with things Home Assistant does for you.

Finally, if, for any reason, corruption is detected in the Home Assistant recorder database (SQLite), the old database is moved and a new, fresh database is created. This prevents issues during startup.

Honestly, the above isn’t even complete. 😅 Thanks @bdraco!

Share Diagnostics & Crash reports

With Supervisor 231, shipped with Home Assistant 0.114, we added a new option on the System panel, to share diagnostics and crash reports with us anonymously. This will allow us to find and fix problems.

The shared information is only accessible to the Home Assistant Core team and will not be shared with others. The data does not include any private or sensitive information and you can disable it in settings at any time you want.

This option is by default, of course, disabled. So, if you want to help to project out, consider enabling this option in the Supervisor panel.

This service is sponsored by Sentry.io - Thanks a lot!

Other noteworthy changes

  • You can now move Lovelace cards to a different dashboard and add cards to other than the main dashboard from the device pages.
  • Add support for safe area insets; For example, iPhones with notches now cover the entire screen while having enough padding for home swipe action and the notch at the top of your display.
  • HomeKit has now support for doorbells (thanks @adrum) and @bdraco added support for multiple camera streams.
  • If you use light profiles, those now support a default transition value, thanks to @donkawechico.
  • @agners added IPv4 & IPv6 (dual-stack) support to the Home Assistant web server, allowing it to run simultaneously on both.

New Integrations

Six new integrations added this release:

New Platforms

The following integration got support for a new platform:

Integrations now available to set up from the UI

The following integrations are now available via the Home Assistant UI:

If you need help…

…don’t hesitate to use our very active forums or join us for a little chat.

Experiencing issues introduced by this release? Please report them in our issue tracker. Make sure to fill in all fields of the issue template.

Read on →

Home Assistant Companion Apps: New and Upcoming Features

11 minutes reading time

Hi, it’s been a while since we let you know about all the great things you can do with the Home Assistant Companion Apps for Android and iOS, so let’s rectify that now as there are so many exciting updates. Before we get started on that though, iOS users should take a moment to read this blog post which has some important information about a small change coming up.

A note on privacy

Currently we use Google’s Firebase notification service for sending notifications to your device and also for tracking crashes. We did this because of simplicity, due to how notifications work on iOS we can’t use just any server to send notifications, in fact there is a pretty narrow choice. Using Firebase allowed us to keep costs low, which Nabu Casa then covered so people are able to use it at no cost. However, many people were uncomfortable about this and would prefer an app that did not rely on Google’s servers. Well we hear you and we are actively looking at moving to other providers. While we have not completed this work yet, we just wanted to let you know it is something that is being actively developed and hopefully we will have more news very soon.

Android minimal app

On a related note, we are delighted to say we now offer a way to install a minimal version of the Android app that is completely free of any reliance on Google. This version of the app does not have location tracking or notifications. We hope that by providing this version of the app more developers will be excited about contributing to the app in general. You can find the APK on the release page up on GitHub starting from version 2.1.0.

What’s New(ish)

The short answer is lots! The Android and iOS apps are developed by separate teams so while the features are similar, they are not identical and do not follow a common road map. Android changes are up next, click here to jump to the iOS update


Notification Improvements

Throughout the past few releases Android notifications were greatly improved with new features and fixes.

Starting in 1.8.0 we enhanced our image notifications to allow for not only a relative path (i.e. storing in your www folder) but you can also request a snapshot using the Camera Proxy API. All authentication is handled via the app so you don’t need to worry about it. You can also use click action and actionable notifications to navigate to a specific lovelace view.

From 1.9.0 you can now create and remove notification channels on the fly. This is helpful so you can create channels that can override your do not disturb settings, specifically for notifications like the alarm while notifications for your laundry can continue to let you be undisturbed.

In 1.10.0 we further enhanced our notifications to allow for many new options. Users can now change the LED Color, vibration pattern and importance of a message. These options can also be used with a channel to help set defaults to allow you to further distinguish between notifications. You can now group your notifications to help declutter the notification pull down. Persistent notifications were also introduced so you can’t simply swipe away those important notifications, you can pair this with the sticky property so the notification does not disappear. The message now allows for HTML formatting so you can highlight the important parts. Users can also supply an icon much like they can with an image. For the unimportant notifications you can set a timeout so after x amount of seconds the notification is automatically dismissed.

  - alias: "Alarm triggered"
      platform: state
      entity_id: alarm_control_panel.home
      to: triggered
      service: notify.mobile_app_pixel_4_xl
        message: "Front alarm <b>triggered</b>"     # some HTML formatting to highlight the alert
          channel: Alarm             # creates a new channel called Alarm that you can manage from your device
          importance: high           # set the channel importance to high
          ledColor: red              # make the LED flash red for this notification
          vibrationPattern: "100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100"     # SOS vibration pattern
          persistent: true           # set to persistent
          sticky: true               # make sure it doesn't dismiss if selected
          clickAction: /lovelace/alarm    # navigate user to the lovelace alarm view
          icon: /local/alarm.jpg     # relative path to the icon
          color: red                 # set the color of the notification to red
          group: alarm               # the group name to group together notifications
          tag: alarm                 # tag is required in order to remove the persistent notification

In the above automation example a new channel with the name Alarm will be created with a default setting for vibration, LED and importance. This notification will also be persistent and part of a group and tag along with an icon amongst other changes.


Starting with 1.8.0 we have introduced a new Geocoded sensor that helps translate your GPS location to an actual street address.

Screenshot of the Geocoded Sensor Screenshot of the Geocoded Sensor.

The battery level sensor was split in 1.9.0 to include a battery state sensor so you can see when your device is actively charging, not_charging, discharging and full. You can also distinguish whether it’s wireless, ac or usb. The state now updates immediately upon being plugged in and unplugged to allow for quicker automations.


Biometrics were introduced in 1.9.0 to allow the user to lock down the app when they are not using it. Upon launching the app you will see a lockscreen like below requesting for either your fingerprint or face to unlock the app. You can set this feature up by visiting the App Configuration screen inside the app.

Screenshot of Biometric Unlock Screenshot of Biometric Unlock.

Additional Improvements

We have also been hard at working making improvements in other areas of the app:

  • There are now 2 widgets that you can set up, with Entity State being the latest addition. The Entity State widget will display the state and any attribute of the selected entity. It will update once every 30 minutes or when tapped. The Service Call widget was also enhanced to allow you to select from a list of valid and available services along with the ability to add additional data fields that the service may require.
  • In App Configuration the Home Network WiFi SSID option now allows the user to select multiple SSIDs.
  • A Cookie Manager was added to our WebView that will allow you to save cookies from sites that you may use in the webpage card.
  • More descriptive SSL error messages were added to help users resolve local issues they may encounter while setting up the app.
  • Device ID is now sent with the event data for actionable notifications.


Firstly, we should say a hello to Zac (@zacwest) who has joined the iOS team and contributed a huge amount of code in the last couple of months. In fact, Zac has rewritten much of the underlying code of the app in that time, so while it may look much the same, behind the scenes it’s almost a new app! Some features that are now in the iOS app are:


Making the app reliable and eliminating bugs was a big focus. You won’t have to pull-to-refresh as often, sensors update more reliably, and editing things like actions and notifications won’t accidentally delete them.

Whether it is to turn on the lights when you get home at night, or send a someone a notification that you’re leaving work and how long the journey should take, we know that this is what a lot of people use the app for the most and we also know the performance has not been 100 % and that changes in recent versions of iOS seem to have made this work. There have been a huge number of changes to work around these issues (unfortunately Apple’s CoreLocation framework is something of a black box), we now sanity check the location data before sending it to Home Assistant, checking if the accuracy is acceptable or if an update from a minute ago has better accuracy. We also try and get a new update when accuracy is bad. While we still use significant location changes (such as changing cell tower) to wake the app up from the background, we now automatically discard the data they provide and attempt to get a higher accuracy GPS location.

Empowering Notifications

Notifications are some of the more powerful ways you can interact with the app, and they are now even more powerful. Camera notifications will now stream via HTTP Live Streaming (HLS) instead of the older MJPEG standard when you have the stream integration enabled, giving you a more live experience; camera notifications also show up in the right aspect ratio; you can add per-action URLs that should be launched for each action of a notification; relative URLs (like /lovelace-tacos/0) will now open within the app without kicking you out to Safari.

Screenshot of new notification example triggers and service calls Screenshot of example triggers and service calls for notifications.

More frequent sensor updates while using the app

A lot of people have asked for the sensors to be updated more frequently. The problem we have is while the app is in the background it is asleep as part of iOS’s efforts to preserve battery. However, while you’re using the app it should be able to send data frequently. You can now set a desired frequency of sensor updates while you have the app open. This can be as slow as every hour or as fast as every 20 seconds! Hopefully this will be a huge improvement for people using iPads as wall-mounted kiosks.

No more duplicate integrations

Previously when you removed and reinstalled the app you would get a new ..._2 integration in Home Assistant along with a new set of sensors like sensor.freds_iphone_2. This was a pain! Especially for our amazing beta testers who often went through the app’s onboarding process several times in a day to check for bugs (THANK YOU!). Now the app registers its unique ID with Home Assistant, this means in most cases when you reinstall or reset up the app it should just pick and use the old integration and entities.


Another avenue of improvement is making things a bit easier. You’ll now find example triggers and service calls when configuring notification categories and actions within the app; theme color choices should always come through; you can adjust things like the zoom factor of the pages or how often sensors update if the app remains open; and more! You will definitely want to dig into the releases or play around in the app’s settings.

A look ahead at iOS 14

Coming to iOS 14 is Widgets, and no doubt there’s some huge potential here. A good analogy for what they can do is to think of them as Apple Watch complications; relatively static displays that can be updated with a multitude of data. One thing we’d love is to get an idea of the information and displays you’re interested in seeing here as Widgets get built out over the next few months. Please let us know any ideas you have on this thread.

iOS 14 is also introducing Local Push Connectivity, which adds support for push notifications on your local network that do not require a trip to the cloud. This, like Critical Alerts, requires explicit approval from Apple, but we’re hopeful about improving the experience with your boats and RVs!

That’s it, almost

Wow, thanks for reading all the way down here! Everything you’ve read about wouldn’t be possible without a very dedicated team of volunteers. In addition to the highlights above, we’ve also fixed a good amount of bugs and made other improvements across the board. Thanks goes to JBassett, KBerstene, chriss158, timmmeeeh, timmoo001, craftykoala, jeroenseegers, yoxjames, and neopilou on the Android side and robbiet480 and zacwest on iOS.

Two last things, firstly a reminder that you can find our complete docs for the apps on their own site. Secondly, as you’re the kind of person that reads whole blog posts (well done again!) you might be the perfect beta tester for our apps, if you think you could help out, you can sign up for the Android app here or the iOS app here.

Migrating the iOS Companion App to Nabu Casa

three minutes reading time

Hi there, your friend and pal, Robbie the iOS developer here with an important update about a change to the Home Assistant Companion App for iOS and a few steps you, the user, will need to take.

What’s changing?

Recently, I transferred the Home Assistant app from my personal Apple Developer account to a new Apple Developer account owned by Nabu Casa, Inc. Why? Because Apple has silly limits on individual accounts that have made collaboration with others near impossible for the entire lifespan of the app (please don’t tell Tim or Craig I called their limits silly). This meant that during times when my work or personal life have been very busy, app updates have been far less frequent than I wanted. These limits also make it such that, if I were to be hit by a bus tomorrow, the app couldn’t be easily updated on the App Store by others. The business account does not have these limits. Anyone on the account can update the app anytime without relying on me, Robbie, to push buttons. This will make collaboration easier and ensure the app will be available forever and ever, long after I’m gone.

Why Nabu Casa?

Why did we transfer it to Nabu Casa, Inc.? Why not Home Assistant, Inc.? The short answer is there is no Home Assistant, Inc. Apple requires that business accounts are owned by… businesses. Real businesses. Which Home Assistant is not. Nabu Casa was the best option. To be very clear, Nabu Casa does not own the app now. The copyright and license has not changed. It’s still entirely open source. I am not stopping my work on the app, neither are others. Nabu Casa is simply the account under which the app is published. The same rock solid privacy guarantees apply just as before. The only change visible to you will be the name shown as the author in the App Store (Nabu Casa, Inc instead of Robert Trencheny).

Does this mean there will be a charge for the app?


What do you need to do?

Right now, we are waiting for Apple to approve the entitlement to send Critical Notifications for the new account. When that is done we will release an update (version 2020.5) from the new business account. Due to Apple limits, after updating you are going to need to re-authenticate one time to continue using the app. After that (assuming everything works) you are all done and the app will keep functioning as normal. No integration changes, no push notification changes, your actions are still there, etc etc. Remember that depending on your device settings, this update may well happen automatically, that’s why we’re telling you all about this in advance.

When is this happening?

We’re not quite sure about this sadly, currently we don’t expect it to be before August 10th. As I mentioned, we are waiting for the new business account to be granted the critical notification entitlement. The time frame for this is entirely governed by Apple and beyond our control. We will be sure to keep you updated via Twitter and Facebook so make sure you follow us! The current version of the app will also send a push notification closer to the time. We are currently working with our awesome team of translators to get this translated along with the in-app instructions that will be included in the 2020.5 update.

Thanks as always for being a Home Assistant Companion user. Please leave a review if you appreciate the app, it’s the fuel that keeps the fire burning.

0.113: Automations & Scripts, and even more performance!

49 minutes reading time

Another special, themed, release inbound!

It seems like @bdraco is unstoppable; he just keeps going on improving the performance of the Core. I truly admire him for the work he has been delivering the past months, however, that is not the point of this release. Sorry, @bdraco!

This release is about: Automations & Scripts! Yes!!!

A long, long time bug with automation triggering has been resolved, but not only that, @pnbruckner went all-in by extending the automation/script engine even more.

Adding repeat, a chooser and running modes (with cool down possibilities as a side-effect).

I’ve been playing with these features on my home already and I’ve changed/improved quite a few things. For real, @pnbruckner, thank you!

Enjoy the release!


Ludeeus joins Nabu Casa

Today we’re happy to announce that @ludeeus is joining Nabu Casa to work full-time on Home Assistant!

Ludeeus has been a core contributor for a long time working on the Supervisor panel and different bits of the frontend. He is, however, mainly known as the creator of the Home Assistant Community Store (HACS).

We’re looking forward to seeing what he can do now that he is able to focus full-time on Home Assistant.

Welcome @ludeeus!

Automations & Scripts

This release brings changes to our automations and scripts. Before we start with this all, please note, that the action part of an automation is a script sequence.

So, all discussed below, apply to both scripts and automations.

Before diving in: All automation and script changes, have been driven by @pnbruckner! It is awesome! Thanks!

Automations & Scripts: Bug fix

There has been an issue with our automations for a long time already, which you actually might have never noticed. It is kinda hard to explain, so this needs an example.

Consider the following automation:

  - alias: "Example"
    description: "On button press, turn on the light bulb for 10 seconds."
      - platform: state
        entity_id: binary_sensor.button
        to: "on"
      - service: light.turn_on
          entity_id: light.bulb
      - delay:
          seconds: 10
      - service: light.turn_off
          entity_id: light.bulb

This automation turns on a light bulb when the button is pressed, and after 10 seconds, it turns off the light bulb again. A fairly basic automation, which does exactly what one would expect, except when a button is pressed twice.

So it takes 10 seconds for the bulb to turn off, what if you press the button again after 5 seconds?

Please, think about this for a moment…

What actually happened before 0.113, is that the light bulb would turn off immediately! Chances are, you didn’t expect that.

Let’s explain this: So the first button push, turns on the light, and the delay is active for 10 seconds. The second button push, done after 5 seconds, is actually not handled, however, it does cause the delay of the first run to cancel itself and continues to run the rest of the actions/sequence, causing the light to turn off immediately!

That bug, has been fixed. As of this release, the second button press wouldn’t do anything and the light will now turn off after 10 seconds, which the first button push has triggered.

Automations & Scripts: Running modes

With the above-mentioned bug fix, it now becomes possible to introduce new running modes for both scripts and automations. It allows you to control what happens if actions of a previous trigger are still running.

Considering the light bulb example in the bug fix paraph above, it shows the default mode: single, which means: Do not run and ignore the trigger if a previous action of the same automation is still running.

Besides the default single mode, the following modes are now available:

Mode Description
single Do not start a new run, if running already.
restart Start a new run, after stopping the previous run.
queued Start a new run after all previous runs complete.
parallel Start a new, independent, run in parallel with previous runs.

Automation/script running modes visual explained. Automation/script running modes visual explained.

For the queued and parallel modes, an additional parameter max is available to control the maximum number of runs that are awaiting each other. When omitting this setting, it would default to 10.

To clarify a little more, remember the first example in the bug fix paragraph where the light bulb would turn on for 10 seconds after a button press?

This would make every button press within the 10 seconds, restart the countdown again:

  - trigger:
      - ...
    mode: restart
      - ...

And this example, would turn on/off the light, for 10 seconds twice, if the button was pressed after 5 seconds.

  - trigger:
      - ...
    mode: queued
      - ...

The modes are also available for automations and scripts in the frontend UI:

Screenshot of running modes in the frontend Screenshot of running modes in the frontend.

This is a powerful feature, which allows you to control how automations and scripts are run in ways you could not do before.

More information about the running mode can be found in the automations and scripts documentation.

Automations & Scripts: Repeats

A brand new action is made to allow for repeating (also called loops) part of your automations or scripts.

The new repeat feature can be used in three different ways:

  • Counted repeat: Control how many times to repeat a sequence.
  • While loop: Keep repeating as long the condition(s) is/are met.
  • Repeat until: Runs at least once, and decides after that to repeat until the condition(s) is/are met.

For example, this would spam your phone with the same message 10 times:

# Send notification spam to phone
        count: 10
          - service: notify.frenck
              message: Ding dong! Someone is at the door!

More information about repeats can be found in the documentation.

Automations & Scripts: Chooser

Got multiple automations for that single light to turn it on/off? Or multiple automations/scripts to handle the different buttons on some remote?

You can now combine them using a chooser. The chooser is able to pick the first sequence that matches a condition, or if none match, run a default sequence.

This means each individual sequence in the chooser is paired with its own set of conditions.

  - alias: "Example"
    description: "On button press, choose the right thing to run."
      - platform: state
          - binary_sensor.button1
          - binary_sensor.button2
          - binary_sensor.button3
      - choose:
          - conditions:
              - condition: state
                entity_id: binary_sensor.button1
                state: "on"
              - service: light.turn_on
                  entity_id: light.bulb
          - conditions:
              - condition: state
                entity_id: binary_sensor.button2
                state: "on"
              - service: light.turn_off
                  entity_id: light.bulb
          - service: notify.frenck
              message: Some other unknown button was pressed!

In the above example, pushing button1, turns on the bulb; while button2 turns it off again. The third button isn’t handled by any of the conditions in the chooser and the (optional) default is run instead.

The chooser can be used as an if/else statement, where the default acts as the else. Or even as if/else if/else statement as shown in the YAML example above.

More information about the chooser can be found in the documentation.

Automations & Scripts: Sub-second precision

Thanks to a bunch of optimizations done this release, which is discussed later in this blog post, we now have sub-second precision available to our delays.

This precision is helpful in case you want a delay that is less than a second, for example, 500 milliseconds.

An example script that toggles the light every 500 milliseconds 10 times.

        count: 10
          - service: light.toggle
              entity_id: light.bulb
          - delay:
              milliseconds: 500

Automations & Scripts: Bonus! Cool down

An often requested feature is to allow for a cool down time on an automation. What that entails is setting a limit on the run of an automation or script to a certain time frame.

While this is not a feature specifically added or build, it can be achieved now using the new run modes.

  - alias: "Doorbell cool down"
    description: "Prevent multiple message being send when spamming the doorbell."
    mode: single # Which is the default
      - platform: state
        state: binary_sensor.doorbell
        to: "on"
      - service: notify.frenck
          message: Ding dong! Someone is at the door!
      - delay:
          seconds: 10

The single run mode of this automation, combined with the last delay of 10 seconds, prevents this automation from being ran more often than only once every 10 seconds. This is ideal for things like a doorbell.

MDI icons updated

It has taken some time for us to upgrade to the newest version of Material Design Icons, 5.3.45, there was a reason for that, version 5.0.45 contains a lot of breaking changes.

We wanted to handle these well, so it took some time.

A lot of icons are renamed, and some are removed. In this release, we included all new, and all removed icons and we made sure the new and the old name work.

If you use an icon that is renamed or removed we will show a warning in the log, in version 0.115, this conversion path will be removed and removed icons and old names will no longer work.

So make sure to check your logs if you need to adjust any of your used MDI icons.

Most of the removed MDI icons can be found in Simple icons, which is available as a custom integration.

Please note: It is possible that custom integrations (also known as custom components) use deprecated icons. These can throw warnings that need to be addressed in the custom integration.

Script and Scene editor updates

The UI to edit or create a script has been updated, besides support for the new running mode, you can now give your scripts a custom icon and ID from the UI.

Especially the ID is helpful, you no longer have to search your states for a long numeric entity id that matches your script.

Screenshot of a script name, icon and run mode. Screenshot of a script ID, icon and run mode.

The support for setting a custom icon, is also added to the scenes editor.

More speed optimizations

After, the well-received, speed optimization done in the 0.111 & 0.112 releases, the saga towards improving resource usage and responsiveness of the platform continues.

This time we have both @bdraco and @pvizeli to thank for some great optimizations that will reduce the CPU usage of Home Assistant.

First of all, if you are running a Home Assistant OS, Container or Supervised installation, then your Home Assistant instance will run on Python 3.8. No action from your end is needed for this.

It is not just a normal Python version, but @pvizeli has worked on a highly optimized Python version for Home Assistant, hitting performance improvements that can reach up to 40%! He wrote a more technical article about this on our developers blog.

Then @bdraco did his part on adding some improvements to the Core. He changed a lot of handling around event & state listeners, in such a way less things trigger unneeded, which reduces processing when states change.

This lowers CPU usage and improves response speed when you have many state changes happening in a short time span, or when having a lot of automations.

Also, all time listeners now have microsecond precision as they are scheduled on the internal event loop, instead of the previous situation when it relied on the internal clock that triggered every second.

This release should drastically lower the CPU usage of Home Assistant for most installations.

Other noteworthy changes

  • Philips Hue groups can now be turned on/off in the integration options via the UI.
  • The OpenZWave (beta) got 3 new services. Two of those are for setting user codes on locks. The other allows for setting device-specific configuration parameters.
  • After a moment of absence, @yosilevy is back! He has been the one fixing all kinds of RTL issues we had in Home Assistant, with his return, this release is full of RTL tweaks again!

New Integrations

Three new integration added this release:

New Platforms

The following integration got support for a new platform:

  • OpenZWave has now support for window covers, added by [@Michsior14]

Integrations now available to set up from the UI

The following integrations are now available via the Home Assistant UI:

If you need help…

…don’t hesitate to use our very active forums or join us for a little chat.

Experiencing issues introduced by this release? Please report them in our issue tracker. Make sure to fill in all fields of the issue template.

Read on →

0.112: Making things faster; Logbook & History

47 minutes reading time

And another three weeks passed! Home Assistant Core 0.112!

At this point, I almost feel like “Making things easier” as the motto for our current development is replaced by: Making things faster! 🚀

The last couple of releases, tons of performance improvements where made, most notably the frontend starting sooner in the previous 0.111 release.

This release is no exception, bringing absolutely game-changing performance improvements to the logbook and history panels. Honestly, I avoided using the logbook in the past because of the slowness it had.

Personally, I feel like Home Assistant is growing up. Slowly things become more reliable, faster, easier to use, slick, more fine-grained? I might be biased a bit… What do you think? What is your favorite improvement that was made lately?

Enjoy the release!


Important upgrade notice!

Let’s start with an important notice for upgrading to Home Assistant Core 0.112.

This release has changes to the database format of Home Assistant. On upgrade, it will be migrated to the new format.

Depending on the size of your database and the performance of the hardware you run Home Assistant on, this migration process could add additional time to the first time starting after the upgrade. For most of us, this adds just a couple of minutes, but if you have an enormous database (for example, 30+ GiB), it might take an hour or maybe even two.

So, don’t panic if Home Assistant doesn’t come up immediately.

Logbook and History 🚀

The reason for the above-mentioned database change can be found in the Logbook & History. Thanks to @bdraco, who has been improving this part of Home Assistant the past weeks.

As a result of his effort, the History & Logbook are now lightning fast. ⚡️

Not a tiny bit faster, but a whole new experience compared to how it used to be. Fantastic work there @bdraco!

Logbook and History now have a date/time range picker

So, @bramkragten stepped on the Logbook & History train and made the logbook and history panels a lot more flexible.

You no longer have to choose between a fixed period to show, but can define the period you want to see data for yourself.

Select a start and end date and time window and it will show just that data.

Screenshot of the new date/time picker Screenshot of the new date/time picker.

By default it no longer shows a full day of data, but just a couple of hours so it is even quicker to load. As most of the time, one would look at recent events anyways.

The user that made a change visible in the logbook

Talking about the logbook, you can now also see who made a change in the logbook! No more discussion about who changed the temperature!

Screenshot of the logbook showing who made the change Screenshot of the logbook showing who made the change.

Multiple entities and states in YAML automations

Are you writing your automations in YAML? You might appreciate this one:

A single condition rule can now test if multiple entities match the condition. Furthermore, states and zones now also accept a list in a condition. That helps testing if the entity matches any of the ones listed.

So this:

  - condition: state
    entity_id: light.kitchen
    state: "on"
  - condition: state
    entity_id: light.living_room
    state: "on"
  - condition: state
    entity_id: light.office
    state: "on"

Can now be shortened to this:

  - condition: state
      - light.kitchen
      - light.living_room
      - light.office
    state: "on"

An example that tests if the alarm is in any of the specified states:

  - condition: state
    entity_id: alarm_control_panel.home
      - armed_home
      - armed_away

And this condition is now also passing when Frenck is at home or at work (fake, of course, since Frenck works from his home).

  - condition: zone
    entity_id: device_tracker.frenck
      - zone.home
      - zone.work

Or combine! The following condition would pass if both Frenck and Daphne are either at home or in the work zone.

  platform: zone
    - device_tracker.frenck
    - device_tracker.daphne
    - zone.home
    - zone.work

Integration specific panels are now on the integrations page

Some integrations, like ZHA, Z-Wave and MQTT have their own panels or dev tools. For things like pairing devices or publishing MQTT messages.

These used to be on the configuration page or development tools, which was weird because the integration settings would be on the integrations page. ZHA also had a lot of device settings in its own panel, resulting in a lot of duplicate functionality spread across the Home Assistant interface.

These panels and tools are now moved to the integrations pages, directly within the integration that provides those. You can find them on the card of the integration at the Configure button.

Screenshot of the MQTT configure button Screenshot of the MQTT configure button.

The device-specific settings are now available on the device page, so we now have 1 place to go for information and settings for devices.

Screenshot of a ZHA device Screenshot of a ZHA device.

In the process, we also cleaned some things ups, like adding a device in ZHA. If you change the name of the device while adding it, the entities and entity IDs are named accordingly.

New home for the logs and information pages

More moving this release, the logs and information pages used to be in the development tools panel, but they didn’t really belong there. They aren’t really tools for developing, they provide information on your set up.

We moved them to the configuration page where they are joined with server management and the general configuration.

Screenshot of the new home for logs & information Screenshot of the new home for logs & information.

Automatically disconnect if a tab has been hidden for 5 minutes

An improvement in the battery of your device and your data cap are going to like:

When the Home Assistant UI is not visible for longer than 5 minutes, it disconnects from your Home Assistant instance. This means you no longer get data or camera streams and your device can optimize resource and power consumption.

Of course, when showing the browser (or browser tab) again, it will automatically reconnect.

We now show all automation/scenes/scripts

Automations, scenes and scripts in the configuration panel are no longer hidden when they have the hidden attribute. This was erroneously added in the past and has now been undone.

Talking about the old hidden attributes. They have been slowly deprecated over time, as they originate from the previous Home Assistant UI. As of this release, this attribute has been completely removed from the system.

Other noteworthy changes

  • @balloob has shaved of a couple of seconds from the Home Assistant startup again.
  • Entities that originate from MQTT will now become “unavailable” when the integration is not connected to the MQTT broker. Thanks @elupus!
  • If you have a Xiaomi vacuum cleaner, @jthure added a service to send it to specific places using a new goto service.
  • The Smappee integration has been fully rewritten, by @bsmappee themselves!
  • Auto discovery has been added to the NUT integration. Please note that some NAS devices might be discovered as they support adding an external battery.

New Integrations

New Platforms

Integrations now available to set up from the UI

The following integrations are now available via the Home Assistant UI:

If you need help…

…don’t hesitate to use our very active forums or join us for a little chat.

Experiencing issues introduced by this release? Please report them in our issue tracker. Make sure to fill in all fields of the issue template.

Read on →