From d5c6a79d71923369eda8c48a319e26c9bf1788c0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Nov 2019 12:56:45 -0800 Subject: [PATCH] Add draft voice assistant --- ...0-privacy-focused-voice-assistant.markdown | 86 ++++++++++++++++++ source/_posts/2019-11-20-release-102.markdown | 53 ++++++----- .../blog/2019-voice-assistant/almond.png | Bin 0 -> 31657 bytes .../blog/2019-voice-assistant/overview.svg | 1 + 4 files changed, 116 insertions(+), 24 deletions(-) create mode 100644 source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown create mode 100644 source/images/blog/2019-voice-assistant/almond.png create mode 100644 source/images/blog/2019-voice-assistant/overview.svg diff --git a/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown new file mode 100644 index 00000000000..388562f5957 --- /dev/null +++ b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown @@ -0,0 +1,86 @@ +--- +layout: post +title: "Almond & Ada: Privacy focused voice assistant" +description: "Say Hi! to Almond, a privacy focused virtual assistant and Ada, a voice assistant powered by Home Assistant." +date: 2019-11-14 0:43:02 +date_formatted: "November 20, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcements +og_image: /images/blog/2019-voice-assistant/almond.png +--- + +TL; DR: + +- Teamed up with [Almond](https://almond.stanford.edu/), available in Home Assistant 0.102. +- Introducing [Ada](https://github.com/home-assistant/ada), voice assistant powered by Home Assistant integrations. Available as hass.io add-on. +- New beta speech-to-text and text-to-speech service for Home Assistant Cloud subscribers. + +--- + +Voice assistants are a great way to interact with your house, ask a quick question, set a timer or control your devices. The more an assistant know about you, your home and it's other inhabitants, the better it is able to help you. + +Todays available virtual assistants work great, but they have a big problem. They store your data in the cloud, don't provide APIs to allow other companies to build products on top and are run by companies whose core business is building profiles on their users to help serve ads and product suggestions. + +The backbone to our homes needs to be one that keeps data local and has APIs allowing other companies to build on top. Innovation happens when many different people, with many different backgrounds, do many different experiments until we find something that sticks. This cannot be left to a single company. + +Recently we got in touch with the [Open Virtual Assistant Lab at Stanford University](https://oval.cs.stanford.edu/). They have been working the last four years on a virtual assistant named Almond. And it's a perfect match for Home Assistant. + + + +## Almond + +[Almond](https://almond.stanford.edu/) is an open, privacy preserving virtual assistant that is open source. With Almond, you can run a virtual assistant at home that can tell you the news or control your house. It is powered by [LUInet](https://almond.stanford.edu/doc/genie-intro.md), a state-of-the-art neural network developed at Stanford. And it now works with Home Assistant. + +The Almond team has updated Almond to make it aware of all the different device types in Home Assistant and allow Almond to control them. In turn, we have upgraded the conversation integration in Home Assistant to support Almond, allowing users to converse with Almond via the frontend. + +

Screenshot showing Almond integration in Home Assistant.Screenshot showing Almond integration in Home Assistant.

+ +Almond will be available to users today in the Home Assistant 0.102 release. It requires Almond Server, which you can either install yourself, use the new Almond hass.io add-on or rely on Almond Web, a cloud version hosted by Stanford. By default, Almond Server will rely on a cloud version of LUInet, but it is possible to run it locally. + +Almond is set up in a way such that your privacy is still partially preserved even with LUInet running in the cloud. This is made possible because LUInet is only responsible for converting the text into a program, whose details are filled in locally by the Almond Server. For example, LUInet will convert "turn on the lights" into code that Almond Server understands. Only Almond Server will know which lights the user has, how to control them and the context of how the text was received. + +### Almond vs … + +You're probably wondering if Almond is as good as Alexa or Google. And it's not yet. However, it doesn't matter. + +If you want to have an assistant in your home that is to know everything about you, it needs to be one that cares about privacy. It needs to be one that is open. That's not negotionable. + +Almond has room for improvement. But it's open source, and with the Home Assistant community we'll work with the Almond team on making it better. And you can start helping right now: + +Almond is gathering sentences that you want to use to control the devices in your home. We already have a basic set of sentences, but the more the better. You can submit those sentences [here](https://docs.google.com/forms/d/e/1FAIpQLSeStJfjvueNAiueRVmP47XALRaJlx7tttzJjRfVjX4J546-uA/viewform). + +You are also able to help train LUInet directly by teaching it how to interpretet sentences [here](https://almond.stanford.edu/developers/train). + +## Ada + +Almond is not the full story. Almond only works with text input, and generates text as output. It doesn't handle speech-to-text to receive input nor text-to-speech to speak answers. Those technologies are out of scope for Almond. However, not out of scope for Home Assistant! Home Assistant already has a text-to-speech integration with different backends. In Home Assistant 0.102 we're introducing a new speech-to-text integration to complement this. + +Now we almost have all the pieces for a voice assistant built-in to Home Assistant, and so we decided to finish it off by introducing a new project called [Ada](https://github.com/home-assistant/ada). Ada integrates hotword detection and will route all data to the various integrations to provide a full voice assistant experience. + +Architectural overview of how all pieces fit together. + +Ada is still very much in the beginning. We'll be working on improving it. If you have expertise in this area and want to help, please get in touch. + +Ada will also be available as a [Hass.io](http://hass.io) add-on. This means that you can plug a microphone and speakers into your Raspberry Pi and turn Hass.io into a full, privacy focused, voice assistant. + +To make it easier to add speech-to-text and text-to-speech integrations to your system, Nabu Casa is introducing a new beta service offering speech-to-text and text-to-speech services to Home Assistant Cloud subscribers powered by Azure Cognitive Services. + +
+ +
+ +## Can a virtual assistant still be private if parts run in the cloud? + +With Home Assistant we care about privacy and local control. We want to be able to offer home automation that keeps working if there is no internet. Home automation that is fast and reliable. + +But we also want privacy to be accessible. A user should be able to get a private solution without running a big server at home. Privacy should not be something that is reserved for the rich. + +With the current approach, some things will still run in the cloud, but the home data and control stays local. We will bring more things local when faster technology becomes more accessible and/or new projects emerge that can help with this. + +We cannot wait until all the pieces are in place to run 100% locally. We need to help build the future we want to see. + +## What's next? + +With Almond and Ada we've put the building blocks in place to create voice assistants. It's now time to use it, improve it and surprise us by sharing the things you'll use it for. diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index 712645ee0ff..74a8ff711da 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -70,6 +70,8 @@ scene: !include scenes.yaml https://github.com/tuanha2000vn/hasskit/ +https://www.reddit.com/r/homeassistant/comments/dz1qsi/picture_elements_are_so_fun_i_made_a_bad_video/ + ## New Integrations - Add Unifi Led ([@florisvdk] - [#27475]) ([unifiled docs]) (new-integration) @@ -103,34 +105,36 @@ Experiencing issues introduced by this release? Please report them in our [issue ## Breaking Changes -- __Huawei LTE__ - Configuration has been consolidated below `huawei_lte`. Device tracker no longer uses known_devices.yaml but entity registry. - ([@scop] - [#26675]) ([huawei_lte docs]) - +- **Huawei LTE** - Configuration has been consolidated below `huawei_lte`. Device tracker no longer uses known_devices.yaml but entity registry. - ([@scop] - [#26675]) ([huawei_lte docs]) + Example configuration yaml: + ```yaml huawei_lte: - url: http://192.168.100.1/ username: admin password: something ``` - -- __Ikea Tradfri__ - This removes the battery sensor that was created for the signal repeater. The sensor would never have a state, and after some inspection, it does not look like that device present any valuable metrics. - ([@ludeeus] - [#28181]) ([tradfri docs]) -- __UPNP/IGD__ - All UPNP/IGD sensors are now in one device. You have to remove and re-add the integration to get rid of the previous devices. ([@escoand] - [#27517]) ([upnp docs]) +- **Ikea Tradfri** - This removes the battery sensor that was created for the signal repeater. The sensor would never have a state, and after some inspection, it does not look like that device present any valuable metrics. - ([@ludeeus] - [#28181]) ([tradfri docs]) -- __PS4__ - State `off` is now State `standby`. Affects user defined scripts, automations, etc. ([@ktnrg45] - [#28261]) ([ps4 docs]) +- **UPNP/IGD** - All UPNP/IGD sensors are now in one device. You have to remove and re-add the integration to get rid of the previous devices. ([@escoand] - [#27517]) ([upnp docs]) -- __SSDP__ - `ssdp` in manifest.json has changed; it is now a list of dicts, and as we now match using the UPnP device description fields directly, `device_type` has to be renamed to `deviceType`. No included integrations use it at the moment, nor are they broken by this change. If any custom integrations are using it, they need to adjust accordingly. ([@scop] - [#28285]) ([ssdp docs]) +- **PS4** - State `off` is now State `standby`. Affects user defined scripts, automations, etc. ([@ktnrg45] - [#28261]) ([ps4 docs]) -- __HomematicIP Cloud__ - The attribute naming between Homematic IP `HmIP-BSM` (light) and `HmIP-FSM/HmIP-PSM` (switch) was different and in case of light not correct. The attributes for `HmIP-BSM` have been renamed: - - * energy_counter_kwh --> today_energy_kwh - * power_consumption --> current_power_w +- **SSDP** - `ssdp` in manifest.json has changed; it is now a list of dicts, and as we now match using the UPnP device description fields directly, `device_type` has to be renamed to `deviceType`. No included integrations use it at the moment, nor are they broken by this change. If any custom integrations are using it, they need to adjust accordingly. ([@scop] - [#28285]) ([ssdp docs]) + +- **HomematicIP Cloud** - The attribute naming between Homematic IP `HmIP-BSM` (light) and `HmIP-FSM/HmIP-PSM` (switch) was different and in case of light not correct. The attributes for `HmIP-BSM` have been renamed: + + - energy_counter_kwh --> today_energy_kwh + - power_consumption --> current_power_w Please check your automations, scripts, scenes, etc., if you are using the old attributes in templates, and replace them with the new ones. - ([@SukramJ] - [#28271]) ([homematicip_cloud docs]) -- __Plugwise__ - Detection of a legacy Anna (firmware 1.8.x) is no longer automatic: owners of a legacy Anna have to provide info in configuration.yaml, the last line. This change was needed to be able to fix issue #26520. - ([@bouwew] - [#28237]) ([plugwise docs]) +- **Plugwise** - Detection of a legacy Anna (firmware 1.8.x) is no longer automatic: owners of a legacy Anna have to provide info in configuration.yaml, the last line. This change was needed to be able to fix issue #26520. - ([@bouwew] - [#28237]) ([plugwise docs]) Example configuration yaml: + ```yaml climate: - platform: plugwise @@ -138,19 +142,20 @@ Experiencing issues introduced by this release? Please report them in our [issue password: your_password host: your_anna_ip legacy_anna: true - ``` - -- __Android TV__ - The `source` and `sources_list` attributes for Fire TV devices will use friendly app names instead of app IDs (e.g., "Netflix" instead of "com.netflix.ninja"). If you are using these attributes in automations, sensors, etc., you will need to update them. - * If you are currently checking that the `source` attribute of a Fire TV device is a particular app ID, you have two options: - * Check the `app_id` attribute instead - * Replace that app ID with the friendly name for the app. - * If you are currently checking the `sources_list` attribute, then you will need to check for friendly app names instead of app IDs. - - You can still use app IDs for the media_player.select_source service. - ([@JeffLIrion] - [#28417]) ([androidtv docs]) - -- __Homekit__ - Thermostats supported by the Homekit Controller component were reporting "off" for the running status when the HVAC was powered on but not actively heating or cooling. This `hvac_action` attribute will now properly return "idle" instead of off. Any logic that tests for the `hvac_action` condition of `off` will need to change to `idle`. There is no change to any other states. - ([@GaryOkie] - [#28625]) ([homekit_controller docs]) + ``` -- __OpenALPR local__ - The "alp_bin" option has been corrected to "alpr_bin" as is outlined in the documentation. Users should check their config and update if necessary. ([@HexF] - [#28746]) ([openalpr_local docs]) +- **Android TV** - The `source` and `sources_list` attributes for Fire TV devices will use friendly app names instead of app IDs (e.g., "Netflix" instead of "com.netflix.ninja"). If you are using these attributes in automations, sensors, etc., you will need to update them. + + - If you are currently checking that the `source` attribute of a Fire TV device is a particular app ID, you have two options: + - Check the `app_id` attribute instead + - Replace that app ID with the friendly name for the app. + - If you are currently checking the `sources_list` attribute, then you will need to check for friendly app names instead of app IDs. + + You can still use app IDs for the media_player.select_source service. - ([@JeffLIrion] - [#28417]) ([androidtv docs]) + +- **Homekit** - Thermostats supported by the Homekit Controller component were reporting "off" for the running status when the HVAC was powered on but not actively heating or cooling. This `hvac_action` attribute will now properly return "idle" instead of off. Any logic that tests for the `hvac_action` condition of `off` will need to change to `idle`. There is no change to any other states. - ([@GaryOkie] - [#28625]) ([homekit_controller docs]) + +- **OpenALPR local** - The "alp_bin" option has been corrected to "alpr_bin" as is outlined in the documentation. Users should check their config and update if necessary. ([@HexF] - [#28746]) ([openalpr_local docs]) ## Beta Fixes diff --git a/source/images/blog/2019-voice-assistant/almond.png b/source/images/blog/2019-voice-assistant/almond.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6fe69d02cc2bc8dd0f5f8b2b7f956695021297 GIT binary patch literal 31657 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 X^TS4yN6Y=+f!m6*sxswLrl0>0fc3=! literal 0 HcmV?d00001 diff --git a/source/images/blog/2019-voice-assistant/overview.svg b/source/images/blog/2019-voice-assistant/overview.svg new file mode 100644 index 00000000000..9862215b052 --- /dev/null +++ b/source/images/blog/2019-voice-assistant/overview.svg @@ -0,0 +1 @@ +