We Have Apps Now

I have been working on a new subsystem to complement Home Assistant’s Automation and Scripting components. AppDaemon is a python daemon that consumes events from Home Assistant and feeds them to snippets of python code called “Apps”. An App is a Python class that is instantiated possibly multiple times from AppDaemon and registers callbacks for various system events. It is also able to inspect and set state and call services. The API provides a rich environment suited to home automation tasks that can also leverage all the power of Python.

Read on →

0.26: Foursquare, Fast.com, FFMPEG and GPSD

It’s time for 0.26 and it’s again full of new features and fixes. First I want to highlight that we are now having 500 000 monthly pageviews on the website. A big milestone for us! It’s been an amazing journey. Big thanks to the Home Assistant community for being such a delightful bunch.

This release includes code contributed by 31 different people. The biggest change in this release is a new unit system. Instead of picking Celsius or Fahrenheit you’ll have to pick imperial or metric now. This influences the units for your temperature, distance, and weight. This will simplify any platform or component that needs to know this information. Big thanks to @Teagan42 for her hard work on this!

Hotfix 0.26.1 - August 14

  • Fix serial_pm config validation (@open-homeautomation)
  • Check for existence of system mode on Honeywell thermostats (@mKeRix)
  • Fix unknown unit of measurement for hvac and thermostat component (@turbokongen)

Hotfix 0.26.2 - August 15

  • Fix Wemo: have PyWemo play nicely with the latest Requests (@pavoni)

Hotfix 0.26.3 - August 19

  • Media Player cover art would not work when an API password was set. Thanks to @maddox for reporting it and @balloob for the fix.

Breaking changes

  • A new unit system has superseded the temperature unit option in the core configuration. For now it is backwards compatible, but you should update soon:
# Configuration.yaml example
  # 'metric' for the metric system, 'imperial' for the imperial system
  unit_system: metric

Optimizing the Home Assistant mobile web app

This blog post will go into detail about the recent performance optimizations that went into the Home Assistant front end. For people not familiar with the app, check out the demo and the source.

TL; DR: Don’t hack the framework, separate responsibilities, ship less, use service workers, use (future) web standards.

This year at Google I/O I saw Monica from the Polymer team talk about web components and performance. In her talk she mentions a mantra that they use in the Polymer team to make things fast: Do less and be lazy.

Do less and be lazy. It sounds so obvious and it took a while before it started to dawn on me. I think most of the code I write is pretty fast, but I don’t often stop to take a harder look at how and when it runs in practice. When do we need the result, can it be postponed?

And thus started my journey to take a critical look at how the Home Assistant app was working and how to make things faster. Below is the list of the different things that I did to make it fast.

I hope this list can be useful to other people, as a guide for optimizing their own apps or for avoiding pitfalls when building a new one.

The first thing to do is to measure. The Home Assistant front end is a mobile web app, so we shouldn’t measure this on a machine with 8 cores and gigabytes of ram but instead measure on devices you expect a mobile web app to run: phones. Below are two timelines recorded with Home Assistant 0.18.2 (pre-optimizations) and Google Chrome 53. On my Mac the app starts in 1400 milliseconds and on my Nexus 5x in ~6500 milliseconds (~4.5 times slower!).

Timeline of loading the front end in Home Assistant 0.18.2

Although the app takes 6500 milliseconds to load on my phone, it would perform well afterwards. Still, that initial load is unacceptable. You expect to open an app on your phone and be able to use it, quickly. After I applied all the changes described below, I managed to reduce startup time to 900 milliseconds (-35%) on my Mac and 2400 milliseconds (-63%) on my Nexus 5x. Check out the demo here.

diagram showing old and new loading times next to one another Timeline of loading the front end in Home Assistant 0.26

Read on →

Laundry Sensors with NodeMCU and Home Assistant

This is a guest post by Home Assistant user and contributor Nolan Gilley.

Today I’ll show you how I used Home Assistant, a NodeMCU (ESP8266), and a couple of accelerometers to automate our laundry room. This is a rewrite of an old post where I did the same thing using a Moteino & Raspberry Pi. This version only requires a NodeMCU.

We have an older washer and dryer which doesn’t have any form of notification when cycles complete. Home Assistant was the obvious solution, I just needed to create sensors for the washer and dryer. I tried using sound sensors but found them unreliable. I ended up using an accelerometer attached to the back of each appliance. I also added magnetic reed switches on the doors of the washer and dryer to detect whether they’re open or closed. I connected the accelerometers and reed switches to an NodeMCU which will relay the data to my MQTT broker.

Block diagram of schematic

Read on →

0.25: Custom frontend panels, Jupyter notebooks, DirecTV.

When Home Assistant started the focus has always been on making a great developer experience. Allowing anyone to add support for their favorite devices to Home Assistant easily. This focus has been a great success since we now have 339 components and platforms!

Starting with this release, we are extending our extensibility to the frontend. Starting this release, any component can add its own page to the frontend. Examples of this today are the map, logbook and history. We are looking forward to all the crazy panels you’ll come up with!

We have also seen an exciting trend of people starting to visualize their Internet of Things data using Jupyter Notebooks, which are a great way to create and share documents that contain code, visualizations, and explanatory text. In case you missed it, the blog post by @kireyeu shows an advanced usecase while our Notebooks in the Home Assistant Notebooks repository cover the basics.

This release also includes a bunch of new integrations, among others three new media player platforms. This means that today Home Assistant can talk to 26 different media players!

The brand-new iFrame panel component allows you to add other websites as pages in the Home Assistant frontend. They will show up in the sidebar and can be used the same way as you open the frontend in your browser but all within one view.

I would like to do a shoutout to @fabianhjr. He has started adding typing data (PEP484) to the Home Assistant core. This will help us identify issues before they are released.

Hotfix 0.25.1 - August 1

  • Light - Z-Wave: Bring back delayed value update behavior (@jnewland)
  • Recorder: Properly close session after execute (@kellerza)
  • Media Player - Kodi: No longer block startup if connecting to wrong port (@shoekstra)
  • Downgrade voluptuous to 0.8.9 as it blocked the upgrade for some (@balloob)

Hotfix 0.25.2 - August 2

  • Hotfix to make sure Z-Wave locks work again. Thanks to @tobiebooth for the quick fix.

Breaking changes

  • Google Voice SMS notification support was removed.

ESP8266 and MicroPython - Part 1

The first release of Micropython for ESP8266 was delivered a couple of weeks ago. The [documentation](http://docs.micropython.org/en/latest/) covers a lot of ground. This post is providing only a little summary which should get you started.

Until a couple of weeks ago, the pre-built MicroPython binary for the ESP8266 was only available to backers of the Kickstarter campaign. This has changed now and it is available to the public for download.

Read on →

IoT Data Exploration with Jupyter Notebooks

This is the first blog post by Anton Kireyeu. A new contributor to Home Assistant who will focus on exploring and visualizing Home Assistant data.

As we learned in the recent blog post by Fabian, all operational data of your Home Assistant application is stored locally and is available for exploration. Our first steps were querying data with the DB Browser for SQLite, exporting the data extract as a CSV file and graphing in LibreOffice. But what else can be done with this data and what tools are there available?

This post will help you get set up using a few popular data scientist tools to allow you to locally process your data:

  •  Pandas: an open source tool for data analysis for Python
  •  matplotlib: a Python plotting library
  •  Jupyter notebook: application for creation and sharing of documents containing live code, visualizations and explanatory text

One of the graphs created with this tutorial.

TL; DR: Use this Jupyter Notebook to visualize of your data

Read on →

Visualize your IoT data

The history component is tracking everything that is going on within Home Assistant. This means that you have access to all stored information about your home. Our history is not a full-fledged graphical processing and visualization component as you may know from systems and network monitoring tools. The current limitation is that you only can select a day for a visual output of your information and not a period. Also, there is no possibility to drill down on a specific entity.

This blog post will show you ways to export data for reporting, visualization, or further analysis of automation rules.

Read on →

0.24: SQLAlchemy, KNX, Join by Joaoapps, and SimpliSafe.

It’s time for Home Assistant 0.24 and it’s full of new integration for your Home. It contains some structural changes to our history which requires action from your end, so please keep reading.

MapQuest discontinued their free and direct tile access by Monday, July 11, 2016. With CARTO we found a very cool and suitable solution. They allow us to use their tile for the map. Thank you, CARTO.

Roy Hooper did an amazing job migrating the history support from being tied to SQLite to use the ORM SQLAlchemy instead. This means that you can now use any SQL backend for the history. So besides SQLite you can now databases like MySQL or PostgreSQL. However, this does require that you install SQLAlchemy and run a command to migrate your existing history over. We tried to make the process as seamless as possible by introducing a new command line script:

pip3 install SQLAlchemy
hass --script db_migrator --config /path/to/config

You can omit the --config option if you use the default configuration directory. Run the script with --help to get more options.

Hotfix 0.24.1 - July 21

Quick hot fix after we found a bug in the migrator where it wouldn’t work with a database in a non-standard location. Thanks to @n8henrie and @AlucardZero.

Breaking changes

  • Migrating existing databases (see above).
  • The APCUPSd Sensor was updated. This will need that you modify your configuration.yaml file.
  • Entity IDs of Verisure locks will change. This is a one time change but should improve readability.