Merge branch 'current' into next

This commit is contained in:
Fabian Affolter 2018-12-13 13:33:41 +01:00
commit 8e8b55fe81
No known key found for this signature in database
GPG Key ID: E23CD2DD36A4397F
15 changed files with 1350 additions and 803 deletions

View File

@ -142,7 +142,7 @@ social:
# Home Assistant release details
current_major_version: 0
current_minor_version: 84
current_patch_version: 0
current_patch_version: 1
date_released: 2018-12-12
# Either # or the anchor link to latest release notes in the blog post.

View File

@ -1 +0,0 @@
.token

View File

@ -1,35 +0,0 @@
credits_generator
=================
This tool can be used to update the [Credits page for Home Assistant](https://home-assistant.io/developers/credits/).
Setup
-----
Fetch the dependencies with `npm`.
```bash
$ cd credits_generator
$ npm install
```
Usage
-----
Go to https://github.com/settings/tokens/new and generate a new GitHub personal access token.
Give the token any name and select the `public_repo` and `read:user` scopes.
Put the token in this repo in a file named `.token`.
Run the script.
```bash
$ node update_credits.js
```
Commit the changes (depending on our setup).
```bash
$ git commit ../source/developers/credits.markdown
$ git push upstream
```

View File

@ -1,27 +0,0 @@
---
layout: page
title: "Credits"
description: "Credits for the developers who contributed to Home Assistant."
date: {{ headerDate }}
sidebar: true
comments: false
sharing: true
footer: true
---
This page contains a list of people who have contributed in one way or another to Home Assistant. Hover over a username to see their contributions.
### {% linkable_title Author %}
- [{{fearlessLeader.info.name}} (@{{fearlessLeader.info.username}})](https://github.com/{{fearlessLeader.info.login}} "{{fearlessLeader.countString}}")
### {% linkable_title Contributors %}
(in alphabetical order)
{{#allUsers}}- [{{info.name}} (@{{info.username}})](https://github.com/{{info.username}} "{{countString}}")
{{/allUsers}}
This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know.
<i>This page was last updated {{ footerDate }}.</i>

View File

@ -1,116 +0,0 @@
{
"name": "credits_generator",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"agent-base": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
"integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
"requires": {
"extend": "3.0.2",
"semver": "5.0.3"
}
},
"async": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
"integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
"requires": {
"lodash": "4.17.10"
}
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"follow-redirects": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-0.0.7.tgz",
"integrity": "sha1-NLkLqyqRGqNHVx2pDyK9NuzYqRk=",
"requires": {
"debug": "2.6.9",
"stream-consume": "0.1.1"
}
},
"github": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/github/-/github-8.2.1.tgz",
"integrity": "sha1-YWsiEfvNHMhjFmmu1nZT5i61OBY=",
"requires": {
"follow-redirects": "0.0.7",
"https-proxy-agent": "1.0.0",
"mime": "1.6.0",
"netrc": "0.1.4"
}
},
"https-proxy-agent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
"integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
"requires": {
"agent-base": "2.1.1",
"debug": "2.6.9",
"extend": "3.0.2"
}
},
"lodash": {
"version": "4.17.10",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
"integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"moment": {
"version": "2.22.2",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
"integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
},
"moment-timezone": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz",
"integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==",
"requires": {
"moment": "2.22.2"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"mu2": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/mu2/-/mu2-0.5.21.tgz",
"integrity": "sha1-iIqPD9kOsc/anbgUdvbhmcyeWNM="
},
"netrc": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/netrc/-/netrc-0.1.4.tgz",
"integrity": "sha1-a+lPysqNd63gqWcNxGCRTJRHJEQ="
},
"semver": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
"integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no="
},
"stream-consume": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
"integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg=="
}
}
}

View File

@ -1,18 +0,0 @@
{
"name": "credits_generator",
"version": "1.0.0",
"private": true,
"description": "A tool to generate the Home Assistant credits page",
"main": "update_credits.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Home Assistant Community",
"license": "Apache-2.0",
"dependencies": {
"async": "^2.1.4",
"github": "^8.1.0",
"moment-timezone": "^0.5.11",
"mu2": "^0.5.21"
}
}

View File

@ -1,164 +0,0 @@
var fs = require('fs')
, async = require('async')
, GitHubApi = require('github')
, mu = require('mu2')
, moment = require('moment-timezone');
let token;
try {
token = fs.readFileSync('.token', 'utf-8').trim();
} catch (err) {
console.error('You must create a .token file that contains a GitHub token.');
return;
}
var organizationName = process.env.GITHUB_ORGANIZATION_NAME || 'home-assistant';
mu.root = __dirname;
var github = new GitHubApi({
headers: { 'user-agent': 'Home Assistant Contributors List Updater <hello@home-assistant.io>' }
});
github.authenticate({ type: 'oauth', token: token });
var usersMap = {};
github.repos.getForOrg({
org: organizationName,
type: 'public',
per_page: 100
}, function(err, repos){
var headerSource = (err && err.headers) ? err.headers : repos.meta;
var ratelimitLimit = Number(headerSource['x-ratelimit-limit']);
var ratelimitRemaining = Number(headerSource['x-ratelimit-remaining']);
console.log('Rate limits: '+ratelimitRemaining+'/'+ratelimitLimit, '(remaining/limit)');
if(err) {
if(err.code == 403 && ratelimitRemaining == 0) {
var resetUnixTime = moment.unix(err.headers['x-ratelimit-reset']);
var resetTimeFormatted = resetUnixTime.format();
var resetAt = moment().to(resetUnixTime);
console.error('Error when getting list of repos in org, because rate limits are exhausted. Rate limits reset', resetAt, 'from now ('+resetTimeFormatted+')');
} else {
console.error('Error when attempting to get a list of all repos in org...', err.message);
}
return;
}
async.each(repos, function(repo, cb){
github.repos.getContributors({ owner: organizationName, repo: repo.name, per_page: 100 }, function(err, contributors){
getContributors(err, contributors, repo, cb);
});
}, function(err){
if(err){
console.error('Error when iterating organization repos', err);
return;
}
console.log('Done getting contributors for '+repos.length+' found organization repos...');
async.each(Object.keys(usersMap), function(login, cb){
github.users.getForUser({username: login}, function(err, userInfo){
if(err){
console.error('Got error when get user details for', login, err);
cb(err);
return;
}
if (userInfo.name) {
userInfo.name = userInfo.name.replace(/^@/, '')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/[\\`*_{}[\]()#+-.!~|]/g, '\\$&');
}
usersMap[login].info.name = userInfo.name || userInfo.login;
usersMap[login].info.username = userInfo.login;
cb();
});
}, function(err){
if(err){
console.error('Got error when running', err);
return;
} else {
console.log('Building contributors!!!');
buildContributors();
}
});
});
});
function getContributors(err, res, repo, callback){
if(err) {
console.error('Error when getting contributors', err);
callback(err);
return
} else {
console.log('Processing the '+res.length+' contributors to '+repo.name);
async.each(res, function(contributor, cb){
if(!usersMap[contributor.login]) {
usersMap[contributor.login] = {
counts: {},
info: {login: contributor.login, id: contributor.id}
};
}
usersMap[contributor.login].counts[repo.name] = contributor.contributions;
cb(null);
}, function(){
if (github.hasNextPage(res)) {
github.getNextPage(res, function(newErr, newContributors){
getContributors(newErr, newContributors, repo, callback);
});
} else {
callback(null);
}
});
}
}
function buildContributors(){
var fearlessLeader = usersMap['balloob'];
fearlessLeader.countString = buildCountString(fearlessLeader.counts);
delete usersMap['balloob'];
var users = Object.keys(usersMap).map(function (key) {
var obj = usersMap[key];
obj.countString = buildCountString(obj.counts);
return obj;
}).sort(function(a, b){
var nameA = a.info.name.toLowerCase();
var nameB = b.info.name.toLowerCase();
if (nameA < nameB) { return -1; }
if (nameA > nameB) { return 1; }
return 0;
});
var headerDate = moment().tz('UTC').format('YYYY-MM-DD HH:mm:ss ZZ');
var footerDate = moment().tz('UTC').format('dddd, MMMM Do YYYY, h:mm:ss a zz');
var output = '';
mu.compileAndRender('credits.mustache', {
allUsers: users,
fearlessLeader: fearlessLeader,
headerDate: headerDate,
footerDate: footerDate
}).on('data', function (data) {
output += data.toString();
}).on('end', function(){
fs.writeFile('../source/developers/credits.markdown', output, function (writeErr) {
if (writeErr) {
console.log('Error when writing credits.markdown', writeErr);
} else {
console.log('Done getting user info, wrote credits.markdown file!');
}
});
});
}
function buildCountString(counts){
var totalCommits = 0;
var countStrings = [];
Object.keys(counts).sort(function(a, b){
return counts[b] - counts[a];
}).forEach(function (countKey) {
var count = counts[countKey];
var word = (count > 1) ? 'commits' : 'commit';
totalCommits = totalCommits+count;
countStrings.push(count+' '+word+' to '+countKey);
});
countStrings.unshift(totalCommits+' total commits to the home-assistant organization');
return countStrings.join(', ');
}

View File

@ -17,10 +17,20 @@ The `radiotherm` climate platform let you control a thermostat from [Radio Therm
The underlying library supports:
- CT30 v1.75
- CT30 v1.92
- CT30 v1.94
- CT30 v1.99
- CT50 V1.09
- CT50 V1.88
- CT50 V1.92
- CT50 V1.94 (also known as Filtrete 3M50)
- CT80 Rev B1 V1.00
- CT80 Rev B2 V1.00
- CT80 Rev B2 V1.03
- CT80 Rev B2 V1.09
New models that are derivatives of the CT30 or CT80 should be detected automatically and basic functionality should work.
To set it up, add the following information to your `configuration.yaml` file:

View File

@ -335,7 +335,7 @@ Optimistic mode can be forced, even if state topic is available. Try enabling it
```yaml
# Example configuration.yaml entry
light:
- platform: json
- platform: mqtt
schema: json
command_topic: "home/rgb1/set"
```
@ -742,4 +742,4 @@ light:
### {% linkable_title Template schema - No brightness or color support %}
If you don't want brightness, color or effect support, just omit the corresponding configuration sections.
If you don't want brightness, color or effect support, just omit the corresponding configuration sections.

View File

@ -81,6 +81,7 @@ Currently known supported models:
- KS7502 (port must be set to 8001, and `pip3 install websocket-client` must be executed, turn on doesn't work, turn off works fine)
- KS8000 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
- KS8005 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
- KS8500 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
- KU6020 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
- KU6100 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
- KU6290 (port must be set to 8001)

View File

@ -27,7 +27,7 @@ sensor:
region_name: Hansestadt Hamburg
```
<p class='important'>
<p class="note">
As it suggests the region name is not the city or nearest city you want to get the warnings for but the next higher level of the governmental district called "Kreis" in German.
Be aware, to get the region name you need to use the following link by replacing `Hamburg` with your city:
@ -36,12 +36,6 @@ Be aware, to get the region name you need to use the following link by replacing
- Verify if you find any warning for your region here. Your region ("Kreis") will appear only if warnings exist: `https://www.dwd.de/DWD/warnungen/warnapp_landkreise/json/warnings.json?jsonp=loadWarnings`
</p>
The warning level is between 0 (no danger) and 4 (extreme weather conditions):
- Warnungen vor extremem Unwetter (Stufe 4)
- Unwetterwarnungen (Stufe 3)
- Warnungen vor markantem Wetter (Stufe 2)
- Wetterwarnungen (Stufe 1)
{% configuration %}
region_name:
required: false
@ -54,3 +48,25 @@ name:
type: string
default: DWD-Weather-Warnings
{% endconfiguration %}
### {% linkable_title Attributes %}
| Attribute | Description |
| ------------ | -------------------------------------- |
| `last_updated` | Information last update from DWD service. |
| `region_name` | Requested region name. This should be the same as the region name in the configuration. |
| `region_state` | State (Bundesland) in abriviated form the requested region is located, eg. "HE" for "Hessen". |
| `region_id` | Region ID assigned by DWD. |
| `warning_count` | *(int)* Number of issued warnings. There can be more than one warning issued at once. |
| `warning_<x>_level` | *(int)* Issued warning level between 0 and 4. <br/>0 == Keine Warnungen, <br/>1 == Wetterwarnungen, <br/>2 == Warnungen vor markantem Wetter, <br/>3 == Unwetterwarnungen, <br/>4 == Warnungen vor extremem Unwetter |
| `warning_<x>_type` | *(int)* Issued warning type. <br/>0 == ?, <br/>1 == ?, <br/>2 == ?, <br/>3 == ?, <br/>4 == ?,<br/>5 == Frost, <br/>6 == Glätte |
| `warning_<x>_name` | This name correlates with the warning type and indicates it in short as a string. |
| `warning_<x>_headline` | Official headline the weather warning. |
| `warning_<x>_start` | Starting time and date of the issued warning. |
| `warning_<x>_end` | Ending time and date of the issued warning. |
| `warning_<x>_description` | Details for the issued warning. |
| `warning_<x>_instruction` | The DWD is sometimes providing helpful information about precautions to take for the issued warning. |
<p class="note">
In the attribute name `x` is the counter of the warning starting from `1`.
</p>

View File

@ -88,7 +88,7 @@ sensor:
value_template: '{{ states.switch.my_tp_switch.attributes["voltage"] | float }}'
unit_of_measurement: 'V'
my_tp_switch_today_kwh:
friendly_name_template: "{{ states.switch.my_tp_switch.name}} Today's Consuption"
friendly_name_template: "{{ states.switch.my_tp_switch.name}} Today's Consumption"
value_template: '{{ states.switch.my_tp_switch.attributes["today_energy_kwh"] | float }}'
unit_of_measurement: 'kWh'
```

View File

@ -27,6 +27,12 @@ This release introduces a new Home Assistant Cloud feature available: cloud webh
This means that you can send any data back to your instance for OwnTracks, IFTTT or an automation with a webhook-trigger. Check the cloud page in the configuration panel to get started or read more about the new functionality at [the Nabu Casa website](https://www.nabucasa.com/config/webhooks/).
## {% linkable_title Improved state restoring %}
We have a new more reliable way of state restoration introduced by [@armills]. Instead of relying on the database it will now leverage the storage helper to keep track of states that need to be tracked. This should improve reliability and startup speed.
This comes with a downside: we will be unable to restore states the first time you start 0.84.
## {% linkable_title Improved service calling %}
We have improved how we call services with better validation checks. This means that if you have an automation or a script that sends invalid data, we will now stop the execution and be better able to point out where your incorrect calls are coming from.
@ -39,7 +45,7 @@ So if you were using Lovelace before 0.84, you now have two options. Option one
If you want to continue managing a YAML file, [check here how to enable the YAML mode](/lovelace/yaml-mode/). The file `ui-lovelace.yaml` will now follow the same options as `configuration.yaml`. This means that the Lovelace YAML config is now parsed with YAML 1.1 instead of YAML 1.2. Major change is that you need to make sure that you wrap `on` and `off` with quotes in your configs!
We have also aligned the configuration of all the cards, causing breaking changes. Changes are especially focused around how we define actions for short and long presses. See [the docs][/lovelace/] for more info.
We have also aligned the configuration of all the cards, causing breaking changes. Changes are especially focused around how we define actions for short and long presses. See [the docs][/lovelace/changelog/] for more info.
Editor UI is now further processed. You can manage your Lovelace UI without leaving your browser! It is possible to add, edit and delete views. It is possible to add, edit, move and delete cards, including custom cards!
@ -56,6 +62,19 @@ Editor UI is now further processed. You can manage your Lovelace UI without leav
- Initial hlk-sw16 relay switch support ([@jameshilliard] - [#17855]) ([hlk_sw16 docs]) ([switch.hlk_sw16 docs]) (new-platform)
- Initial scene support for Fibaro hubs ([@pbalogh77] - [#18779]) ([fibaro docs]) ([scene.fibaro docs]) (new-platform)
## {% linkable_title Release 0.84.1 - December 12 %}
- Add automation and script events to logbook event types ([@hunterjm] - [#19219]) ([logbook docs])
- Fix owntracks topic in encrypted ios ([@balloob] - [#19220]) ([device_tracker docs]) ([owntracks docs])
[#19219]: https://github.com/home-assistant/home-assistant/pull/19219
[#19220]: https://github.com/home-assistant/home-assistant/pull/19220
[@balloob]: https://github.com/balloob
[@hunterjm]: https://github.com/hunterjm
[device_tracker docs]: /components/device_tracker/
[logbook docs]: /components/logbook/
[owntracks docs]: /components/owntracks/
## {% linkable_title If you need help... %}
...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks.
@ -68,6 +87,7 @@ Experiencing issues introduced by this release? Please report them in our [issue
## {% linkable_title Breaking Changes %}
- State restoration will not work the first time you start 0.84. ([@armills] - [#17270]) ([history docs])
- Support for multiple IHC controllers added. Manual IHC device configuration must be moved from platform sections to controller configuration section under the ihc component section. ([@mopolus] - [#18058]) ([ihc docs]) ([binary_sensor.ihc docs]) ([light.ihc docs]) ([switch.ihc docs]) (breaking change)
- Lutron: Change device_state_attributes() to use lowercase snakecase (Rename 'Lutron Integration ID' to 'lutron_integration_id') ([@cdheiser] - [#18650]) ([light.lutron docs]) (breaking change)
- Remove "since last boot" from systemmonitor sensor, use `last_boot` instead. ([@balloob] - [#18644]) ([sensor.systemmonitor docs]) (breaking change)

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,6 @@ sharing: true
footer: true
---
## {% linkable_title Changes in 0.84.0 %}
- 📣 Lovelace is now the default UI
### Breaking Changes
- ⚠️ [sensor card]: Removed configs `height`, `line_color` and `line_width`