diff --git a/source/_components/arduino.markdown b/source/_components/arduino.markdown index e961ab1514..d6f450c342 100644 --- a/source/_components/arduino.markdown +++ b/source/_components/arduino.markdown @@ -10,6 +10,7 @@ footer: true logo: arduino.png ha_category: DIY featured: true +ha_release: pre 0.7 --- The [Arduino](https://www.arduino.cc/) device family are microcontroller boards that are often based on the ATmega328 chip. They come with digital input/output pins (some can be used as PWM outputs), analog inputs, and a USB connection. The equipment depends on the [type](https://www.arduino.cc/en/Main/Products) of board. The most common ones are the Arduino Uno and the Arduino Leonardo with 14 digital input/output pins and 6 analog input pins. diff --git a/source/_components/binary_sensor.command_line.markdown b/source/_components/binary_sensor.command_line.markdown index f62784929c..56de407e4d 100644 --- a/source/_components/binary_sensor.command_line.markdown +++ b/source/_components/binary_sensor.command_line.markdown @@ -23,6 +23,7 @@ binary_sensor: platform: command_line command: cat /proc/sys/net/ipv4/ip_forward name: 'IP4 forwarding' + sensor_class: opening payload_on: "1" payload_off: "0" value_template: '{% raw %}{{ value.x }}{% endraw %}' @@ -32,6 +33,7 @@ Configuration variables: - **command** (*Required*): The action to take to get the value. - **name** (*Optional*): Let you overwrite the the name of the device. By default *name* from the device is used. +- **sensor_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. - **payload_on** (*Optional*): The payload that represents enabled state. Default is "ON". - **payload_off** (*Optional*): The payload that represents disabled state. Default is "OFF". - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. diff --git a/source/_components/binary_sensor.http.markdown b/source/_components/binary_sensor.http.markdown index 7e7dfe1e9a..aa279efb20 100644 --- a/source/_components/binary_sensor.http.markdown +++ b/source/_components/binary_sensor.http.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: http.png ha_category: Binary Sensor +ha_release: pre 0.7 --- The URL for a binary sensor looks like the example below: diff --git a/source/_components/binary_sensor.rpi_gpio.markdown b/source/_components/binary_sensor.rpi_gpio.markdown index dc2c0b8888..a75fce5c0c 100644 --- a/source/_components/binary_sensor.rpi_gpio.markdown +++ b/source/_components/binary_sensor.rpi_gpio.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: raspberry-pi.png ha_category: Sensor +ha_release: pre 0.7 --- diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index f325ba4de4..03af11a3a0 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -28,10 +28,9 @@ Configuration variables: - **sensors** array (*Required*): List of your sensors. - **friendly_name** (*Optional*): Name to use in the Frontend. - - **sensor_class** (*Optional*): Defines the class of the sensor (motion, heat, moisture, etc) + - **sensor_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. - ## {% linkable_title Examples %} In this section you find some real life examples of how to use this sensor. diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index 3d88569b68..8fa5522c65 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -8,6 +8,7 @@ comments: false sharing: true footer: true ha_category: Camera +ha_release: pre 0.7 --- diff --git a/source/_components/device_tracker.asuswrt.markdown b/source/_components/device_tracker.asuswrt.markdown index e1590a59c9..74e76adce4 100644 --- a/source/_components/device_tracker.asuswrt.markdown +++ b/source/_components/device_tracker.asuswrt.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: asus.png ha_category: Presence Detection +ha_release: pre 0.7 --- diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index 6fceeda380..9aab6a52b1 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -10,6 +10,7 @@ footer: true logo: owntracks.png ha_category: Presence Detection featured: true +ha_release: 0.7.4 --- diff --git a/source/_components/device_tracker.tplink.markdown b/source/_components/device_tracker.tplink.markdown index 50dbf15802..37fa0f80fd 100644 --- a/source/_components/device_tracker.tplink.markdown +++ b/source/_components/device_tracker.tplink.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: tp-link.png ha_category: Presence Detection +ha_release: pre 0.7 --- diff --git a/source/_components/downloader.markdown b/source/_components/downloader.markdown index 5b97207786..b667bfcc6c 100644 --- a/source/_components/downloader.markdown +++ b/source/_components/downloader.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Other +ha_release: pre 0.7 --- The `downloader` component provides a service to download files. It will raise an error and not continue to set itself up when the download directory does not exist. diff --git a/source/_components/isy994.markdown b/source/_components/isy994.markdown index eac00a8cc4..d3c28ba929 100644 --- a/source/_components/isy994.markdown +++ b/source/_components/isy994.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: universal_devices.png ha_category: Hub +ha_release: pre 0.7 --- The ISY994 is a home automation controller that is capable of controlling Insteon and X10 devices. The controller is also capable of controlling Z-Wave devices but that functionality has not yet been confirmed with Home Assistant. diff --git a/source/_components/light.limitlessled.markdown b/source/_components/light.limitlessled.markdown index 62b5c66f4d..d400635838 100644 --- a/source/_components/light.limitlessled.markdown +++ b/source/_components/light.limitlessled.markdown @@ -10,6 +10,7 @@ sharing: true footer: true ha_category: Light ha_iot_class: "Assumed State" +ha_release: pre 0.7 --- `limitlessled` can control your [LimitlessLED](http://www.limitlessled.com/) lights from within Home Assistant. The lights are also known as EasyBulb, AppLight, AppLamp, MiLight, LEDme, dekolight or iLight. diff --git a/source/_components/light.tellstick.markdown b/source/_components/light.tellstick.markdown index a6482c3bdc..a81d238464 100644 --- a/source/_components/light.tellstick.markdown +++ b/source/_components/light.tellstick.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Assumed State" This `tellstick` light platform allows you to control your [TellStick](http://www.telldus.se/products/tellstick) dimmers. -To use your TellStick device in your installation, add the following to your `configuration.yaml` file: +To use your TellStick device, you first have to set up your [Tellstick hub](https://home-assistant.io/components/tellstick/) and then add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/media_player.itunes.markdown b/source/_components/media_player.itunes.markdown index 3e77b6f862..625a46a59f 100644 --- a/source/_components/media_player.itunes.markdown +++ b/source/_components/media_player.itunes.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: itunes.png ha_category: Media Player +ha_release: 0.7.3 --- diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown index e18d1e7a82..8861c04c1d 100644 --- a/source/_components/media_player.kodi.markdown +++ b/source/_components/media_player.kodi.markdown @@ -10,6 +10,7 @@ footer: true logo: kodi.png ha_category: Media Player featured: true +ha_release: pre 0.7 --- diff --git a/source/_components/media_player.mpd.markdown b/source/_components/media_player.mpd.markdown index b600a2e415..449a597250 100644 --- a/source/_components/media_player.mpd.markdown +++ b/source/_components/media_player.mpd.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: mpd.png ha_category: Media Player +ha_release: pre 0.7 --- diff --git a/source/_components/media_player.plex.markdown b/source/_components/media_player.plex.markdown index 72b4787d81..a90abe77d8 100644 --- a/source/_components/media_player.plex.markdown +++ b/source/_components/media_player.plex.markdown @@ -10,10 +10,11 @@ footer: true logo: plex.png ha_category: Media Player featured: true +ha_release: 0.7.4 --- -The Plex platform allows you to connect a [Plex Media Server](https://plex.tv) to Home Assistant. It will allow you to control media playback and see the current playing item. The preferred way to setup the Plex platform is by enabling the the [the discovery component](/components/discovery/) and requires GDM to be enabled. +The `plex` platform allows you to connect a [Plex Media Server](https://plex.tv) to Home Assistant. It will allow you to control media playback and see the current playing item. The preferred way to setup the Plex platform is by enabling the the [the discovery component](/components/discovery/) and requires GDM to be enabled. If local authentication is enabled or multiple users are defined, HASS requires an authentication token to be entered in the webinterface. See [Finding your account token / X-Plex-Token](https://support.plex.tv/hc/en-us/articles/204059436). diff --git a/source/_components/media_player.sonos.markdown b/source/_components/media_player.sonos.markdown index ebea7c807d..b2db3341a4 100644 --- a/source/_components/media_player.sonos.markdown +++ b/source/_components/media_player.sonos.markdown @@ -10,6 +10,7 @@ footer: true logo: sonos.png ha_category: Media Player featured: true +ha_release: 0.7.3 --- diff --git a/source/_components/media_player.squeezebox.markdown b/source/_components/media_player.squeezebox.markdown index ba31bd2550..e819dba2bc 100644 --- a/source/_components/media_player.squeezebox.markdown +++ b/source/_components/media_player.squeezebox.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: logitech.png ha_category: Media Player +ha_release: pre 0.7 --- diff --git a/source/_components/modbus.markdown b/source/_components/modbus.markdown index d8e4a36daa..133e169209 100644 --- a/source/_components/modbus.markdown +++ b/source/_components/modbus.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: modbus.png ha_category: Hub +ha_release: pre 0.7 --- diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index 4a2a9a68d5..966b96ca45 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -10,6 +10,7 @@ footer: true logo: mqtt.png ha_category: Hub featured: true +ha_release: pre 0.7 --- MQTT (aka MQ Telemetry Transport) is a machine-to-machine or "Internet of Things" connectivity protocol on top of TCP/IP. It allows extremely lightweight publish/subscribe messaging transport. diff --git a/source/_components/notify.instapush.markdown b/source/_components/notify.instapush.markdown index 7fba31285d..aeed476d1d 100644 --- a/source/_components/notify.instapush.markdown +++ b/source/_components/notify.instapush.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: instapush.png ha_category: Notifications +ha_release: pre 0.7 --- diff --git a/source/_components/notify.nma.markdown b/source/_components/notify.nma.markdown index 9f22a757c5..7c548f7fb9 100644 --- a/source/_components/notify.nma.markdown +++ b/source/_components/notify.nma.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: nma.png ha_category: Notifications +ha_release: pre 0.7 --- diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index 9e7161e361..36d7c7e007 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: pushover.png ha_category: Notifications +ha_release: pre 0.7 --- diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index 7cb5219a74..54df112134 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: slack.png ha_category: Notifications +ha_release: pre 0.7 --- diff --git a/source/_components/notify.smtp.markdown b/source/_components/notify.smtp.markdown index 41b269159d..9b9c419e8f 100644 --- a/source/_components/notify.smtp.markdown +++ b/source/_components/notify.smtp.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: smtp.png ha_category: Notifications +ha_release: pre 0.7 --- diff --git a/source/_components/notify.syslog.markdown b/source/_components/notify.syslog.markdown index b6ed6338f3..89f7f3b224 100644 --- a/source/_components/notify.syslog.markdown +++ b/source/_components/notify.syslog.markdown @@ -8,6 +8,7 @@ comments: false sharing: true footer: true ha_category: Notifications +ha_release: pre 0.7 --- diff --git a/source/_components/notify.xmpp.markdown b/source/_components/notify.xmpp.markdown index 5fe7a01c4f..8d09f3e4b0 100644 --- a/source/_components/notify.xmpp.markdown +++ b/source/_components/notify.xmpp.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: xmpp.png ha_category: Notifications +ha_release: pre 0.7 --- diff --git a/source/_components/rfxtrx.markdown b/source/_components/rfxtrx.markdown index 57267db40c..bb4635fb6b 100644 --- a/source/_components/rfxtrx.markdown +++ b/source/_components/rfxtrx.markdown @@ -8,8 +8,10 @@ comments: false sharing: true footer: true ha_category: Hub +ha_release: pre 0.7 --- -The rfxtrx component supports RFXtrx devices by [RFXCOM](http://www.rfxcom.com) which communicate in the frequency range of 433.92 MHz. + +The `rfxtrx` component supports RFXtrx devices by [RFXCOM](http://www.rfxcom.com) which communicate in the frequency range of 433.92 MHz. To enable RFXtrx in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.arduino.markdown b/source/_components/sensor.arduino.markdown index f893a4ada0..fa4ce33841 100644 --- a/source/_components/sensor.arduino.markdown +++ b/source/_components/sensor.arduino.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: arduino.png ha_category: DIY +ha_release: pre 0.7 --- diff --git a/source/_components/sensor.bitcoin.markdown b/source/_components/sensor.bitcoin.markdown index e575411c0a..9b4525c9e3 100644 --- a/source/_components/sensor.bitcoin.markdown +++ b/source/_components/sensor.bitcoin.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: bitcoin.png ha_category: Sensor +ha_release: pre 0.7 --- diff --git a/source/_components/sensor.efergy.markdown b/source/_components/sensor.efergy.markdown index 15dc7f7fb7..a8030465fb 100644 --- a/source/_components/sensor.efergy.markdown +++ b/source/_components/sensor.efergy.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: efergy.png ha_category: Sensor +ha_release: pre 0.7 --- diff --git a/source/_components/sensor.forecast.markdown b/source/_components/sensor.forecast.markdown index adba318b9f..42bdc2beb2 100644 --- a/source/_components/sensor.forecast.markdown +++ b/source/_components/sensor.forecast.markdown @@ -10,6 +10,7 @@ footer: true logo: forecast.png ha_category: Weather featured: true +ha_release: pre 0.7 --- The `forecast` platform uses the [Forecast.io](https://forecast.io/) web service as a source of meteorological data for your location. The location is based on the `longitude` and `latitude` coordinates configured in `configuration.yaml`. The coordinates are auto-detected but to take advantage of the hyper-local weather reported by forecast.io, you can refine them down to your exact home address. GPS coordinates can be found by using Google Maps and clicking on your home. @@ -41,13 +42,16 @@ sensor: - pressure - visibility - ozone + - minutely_summary + - hourly_summary + - daily_summary ``` Configuration variables: - **api_key** (*Required*): Your API key for http://forecast.io/. - **monitored_conditions** array (*Required*): Conditions to display in the frontend. - - **summary**: A human-readable text summary. + - **summary**: A human-readable text summary of the current conditions. - **precip_type**: The type of precipitation occurring. - **precip_intensity**: The average expected intensity of precipitation occurring. - **precip_probability**: A value between 0 and 1 which is representing the probability of precipitation. @@ -61,6 +65,9 @@ Configuration variables: - **pressure**: The sea-level air pressure in millibars. - **visibility**: The average visibility. - **ozone**: The columnar density of total atmospheric ozone in Dobson. + - **minutely_summary**: A human-readable text summary for the next hour. + - **hourly_summary**: A human-readable text summary for the next 24 hours. + - **daily_summary**: A human-readable text summary for the next 7 days. - **units** (*Optional*): Specify the unit system. Default to `si` or `us` based on the temperature preference in Home Assistant. Other options are `auto`, `us`, `si`, `ca`, and `uk2`. `auto` will let forecast.io decide the unit system based on location. diff --git a/source/_components/sensor.http.markdown b/source/_components/sensor.http.markdown index 7d7bcb63eb..b9586d01fe 100644 --- a/source/_components/sensor.http.markdown +++ b/source/_components/sensor.http.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: http.png ha_category: Sensor +ha_release: pre 0.7 --- The URL for a sensor looks like the example below: diff --git a/source/_components/sensor.modbus.markdown b/source/_components/sensor.modbus.markdown index 99f85d03cc..a8f4acdc32 100644 --- a/source/_components/sensor.modbus.markdown +++ b/source/_components/sensor.modbus.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: modbus.png ha_category: Sensor +ha_release: pre 0.7 --- diff --git a/source/_components/sensor.openweathermap.markdown b/source/_components/sensor.openweathermap.markdown index 66e5e4f3d8..6c8a4f85c6 100644 --- a/source/_components/sensor.openweathermap.markdown +++ b/source/_components/sensor.openweathermap.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: openweathermap.png ha_category: Weather +ha_release: pre 0.7 --- diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 26c3203d47..aae1513a32 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -8,6 +8,7 @@ comments: false sharing: true footer: true ha_category: Sensor +ha_release: 0.7.4 --- diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index 984143da7f..68bdf6035a 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: sabnzbd.png ha_category: Sensor +ha_release: pre 0.7 --- diff --git a/source/_components/sensor.swiss_public_transport.markdown b/source/_components/sensor.swiss_public_transport.markdown index 3128c52758..d923a8ff4c 100644 --- a/source/_components/sensor.swiss_public_transport.markdown +++ b/source/_components/sensor.swiss_public_transport.markdown @@ -9,6 +9,7 @@ sharing: true footer: true ha_category: Sensor ha_iot_class: "Local Polling" +ha_release: pre 0.7 --- diff --git a/source/_components/sensor.systemmonitor.markdown b/source/_components/sensor.systemmonitor.markdown index e1fb58cd46..e47965cb18 100644 --- a/source/_components/sensor.systemmonitor.markdown +++ b/source/_components/sensor.systemmonitor.markdown @@ -8,6 +8,7 @@ comments: false sharing: true footer: true ha_category: Sensor +ha_release: pre 0.7 --- The `systemmonitor` sensor platform to allow you to monitor disk usage, memory usage, CPU usage, and running processes. This platform has superseded the process component which is now considered deprecated. diff --git a/source/_components/sensor.tellstick.markdown b/source/_components/sensor.tellstick.markdown index 8c7a244ebe..d4bbbdb841 100644 --- a/source/_components/sensor.tellstick.markdown +++ b/source/_components/sensor.tellstick.markdown @@ -14,7 +14,8 @@ ha_category: Sensor The `tellstick` sensor platform allows you to get current meteorological data from a [TellStick](http://www.telldus.se/products/tellstick) device. -To use your TellStick device in your installation, add the following to your `configuration.yaml` file: + +To use your TellStick device, you first have to set up your [Tellstick hub](https://home-assistant.io/components/tellstick/) and then add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/sensor.time_date.markdown b/source/_components/sensor.time_date.markdown index 614a6346c8..2ca3159d91 100644 --- a/source/_components/sensor.time_date.markdown +++ b/source/_components/sensor.time_date.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Sensor ha_iot_class: "Local Push" +ha_release: pre 0.7 --- diff --git a/source/_components/sensor.transmission.markdown b/source/_components/sensor.transmission.markdown index 52f82ad288..8346c80947 100644 --- a/source/_components/sensor.transmission.markdown +++ b/source/_components/sensor.transmission.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: transmission.png ha_category: Sensor +ha_release: pre 0.7 --- diff --git a/source/_components/sensor.worldclock.markdown b/source/_components/sensor.worldclock.markdown index 38e2aca0e3..3b63b96bf0 100644 --- a/source/_components/sensor.worldclock.markdown +++ b/source/_components/sensor.worldclock.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Sensor ha_iot_class: "Local Push" +ha_release: pre 0.7 --- diff --git a/source/_components/switch.arduino.markdown b/source/_components/switch.arduino.markdown index c888d85d71..e6426f688e 100644 --- a/source/_components/switch.arduino.markdown +++ b/source/_components/switch.arduino.markdown @@ -9,10 +9,11 @@ sharing: true footer: true logo: arduino.png ha_category: DIY +ha_release: pre 0.7 --- -The `arduino` switch platform allows you to control the digital pins of your [Arduino](https://www.arduino.cc/) board. Support for switching pins is limited to high/on and low/off of the digital pins. PWM (pin 3,5,6,9,10, and 11 on an Arduino Uno) is not supported yet. +The `arduino` switch platform allows you to control the digital pins of your [Arduino](https://www.arduino.cc/) board. Support for switching pins is limited to high/on and low/off of the digital pins. PWM (pin 3, 5, 6, 9, 10, and 11 on an Arduino Uno) is not supported yet. To enable the Arduino pins with Home Assistant, add the following section to your `configuration.yaml` file: diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index bc0e68ce23..d45f734179 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: command_line.png ha_category: Switch +ha_release: pre 0.7 --- @@ -91,10 +92,9 @@ switch: ### {% linkable_title Control Foscam Motion Sensor %} This switch will control the motion sensor of Foscam Webcams which Support CGI Commands ([Source](http://www.ipcamcontrol.net/files/Foscam%20IPCamera%20CGI%20User%20Guide-V1.0.4.pdf)). This switch supports statecmd, which checks the current state of motion detection. + ```yaml # Example configuration.yaml entry -# Replace admin and password with an "Admin" priviledged Foscam user -# Replace ipaddress with the local IP address of your Foscam switch: platform: command_line switches: @@ -102,5 +102,8 @@ switch: oncmd: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&usr=admin&pwd=password"' offcmd: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=0&usr=admin&pwd=password"' statecmd: 'curl -k --silent "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=admin&pwd=password" | grep -oP "(?<=isEnable>).*?(?=)"' - value_template: '{{ value == "1" }}' + value_template: {% raw %}'{{ value == "1" }}'{% endraw %} ``` + +- Replace admin and password with an "Admin" priviledged Foscam user +- Replace ipaddress with the local IP address of your Foscam diff --git a/source/_components/switch.edimax.markdown b/source/_components/switch.edimax.markdown index b0078775a0..8f6164d32b 100644 --- a/source/_components/switch.edimax.markdown +++ b/source/_components/switch.edimax.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: edimax.png ha_category: Switch +ha_release: pre 0.7 --- diff --git a/source/_components/switch.hikvision.markdown b/source/_components/switch.hikvision.markdown index 4665c48ef3..36f4581e40 100644 --- a/source/_components/switch.hikvision.markdown +++ b/source/_components/switch.hikvision.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: hikvision.png ha_category: Switch +ha_release: pre 0.7 --- diff --git a/source/_components/switch.modbus.markdown b/source/_components/switch.modbus.markdown index 667b5a3dc7..c351234570 100644 --- a/source/_components/switch.modbus.markdown +++ b/source/_components/switch.modbus.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: modbus.png ha_category: Switch +ha_release: pre 0.7 --- diff --git a/source/_components/switch.rpi_gpio.markdown b/source/_components/switch.rpi_gpio.markdown index 608ca7aa1a..81e0967020 100644 --- a/source/_components/switch.rpi_gpio.markdown +++ b/source/_components/switch.rpi_gpio.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: raspberry-pi.png ha_category: Switch +ha_release: pre 0.7 --- diff --git a/source/_components/switch.tellstick.markdown b/source/_components/switch.tellstick.markdown index c5d060f1ea..cb00059fc5 100644 --- a/source/_components/switch.tellstick.markdown +++ b/source/_components/switch.tellstick.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Assumed State" This `tellstick` switch platform allows you to control [TellStick](http://www.telldus.se/products/tellstick) devices. -To use your TellStick device in your installation, add the following to your `configuration.yaml` file: +To use your TellStick device, you first have to set up your [Tellstick hub](https://home-assistant.io/components/tellstick/) and then add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/switch.transmission.markdown b/source/_components/switch.transmission.markdown index e5a1e43512..3ffb614d96 100644 --- a/source/_components/switch.transmission.markdown +++ b/source/_components/switch.transmission.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: transmission.png ha_category: Switch +ha_release: pre 0.7 --- diff --git a/source/_components/thermostat.heat_control.markdown b/source/_components/thermostat.heat_control.markdown index 90fb0b6960..2b698f9cc1 100644 --- a/source/_components/thermostat.heat_control.markdown +++ b/source/_components/thermostat.heat_control.markdown @@ -32,4 +32,4 @@ Configuration variables: - **target_sensor** (*Required*): `entity_id` for a temperature sensor, target_sensor.state must be temperature. - **min_temp** (*Optional*): Set minimum set point available (default: 7) - **max_temp** (*Optional*): Set maximum set point available (default: 35) -- **target_temp** (*Required*): Set default target temperature. Failure to set this variable will result in target temperature being set to null on startup. +- **target_temp** (*Required*): Set intital target temperature. Failure to set this variable will result in target temperature being set to null on startup. diff --git a/source/_components/verisure.markdown b/source/_components/verisure.markdown index 29199cef7e..37a0948a91 100644 --- a/source/_components/verisure.markdown +++ b/source/_components/verisure.markdown @@ -9,19 +9,18 @@ sharing: true footer: true logo: verisure.png ha_category: Hub +ha_release: pre 0.7 --- - - Home Assistant has support to integrate your [Verisure](https://www.verisure.com/) devices. We support: - * Alarm - * Smartplugs - * Reading from thermometers and hygrometers integrated in various devices + * [Alarm](/components/alarm_control_panel.verisure/) + * [Smartplugs](/components/switch.verisure/) + * Reading from thermometers and hygrometers integrated in various [devices](/components/sensor.verisure/) * Mouse Detector - * Locks + * [Locks](/components/lock.verisure/) To integrate Verisure with Home Assistant, add the following section to your `configuration.yaml` file: diff --git a/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown b/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown index 59f5612873..2039dae874 100644 --- a/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown +++ b/source/_posts/2016-02-09-Smarter-Smart-Things-with-MQTT-and-Home-Assistant.markdown @@ -159,7 +159,7 @@ mqttbridge: - mqtt homeassistant: - image: balloob/home-assistant + image: homeassistant/home-assistant:latest ports: - 80:80 volumes: diff --git a/source/_posts/2016-05-06-open-iot-summit-talk.markdown b/source/_posts/2016-05-06-open-iot-summit-talk.markdown new file mode 100644 index 0000000000..a310d6624c --- /dev/null +++ b/source/_posts/2016-05-06-open-iot-summit-talk.markdown @@ -0,0 +1,22 @@ +--- +layout: post +title: "Talk: Automating your home with Home Assistant (OpenIoT Summit)" +description: "The video of Paulus giving a talk at the OpenIoT Summit at the beginning of April about how to automate your home with Home Assistant." +date: 2016-05-06 07:09:00 -0700 +date_formatted: "May 6, 2016" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Talks +og_image: /images/blog/2016-05-openiot/preview-video.png +--- + +At the beginning of April I gave a talk about Home Assistant at the OpenIoT summit in San Diego. I talk about the Home Assistant architecture and explain how to get started integrating your devices. Big thanks to my employer AppFolio ([we're hiring!]) for letting me attend. [Slides.] + +
+ +
+ + +[Slides.]: https://docs.google.com/presentation/d/1P2WsmwGSSni4gAriY5IA0-m-FUGO1kno3gIkRYz20Kw/edit#slide=id.p +[we're hiring!]: http://www.appfolioinc.com/jobs-openings diff --git a/source/demo/frontend.html b/source/demo/frontend.html index 55cf2ff772..e21fd54597 100644 --- a/source/demo/frontend.html +++ b/source/demo/frontend.html @@ -1,6654 +1,21 @@ \ No newline at end of file +case"touchend":return this.addPointerListenerEnd(t,e,i,n);case"touchmove":return this.addPointerListenerMove(t,e,i,n);default:throw"Unknown touch event type"}},addPointerListenerStart:function(t,i,n,s){var a="_leaflet_",r=this._pointers,h=function(t){"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&o.DomEvent.preventDefault(t);for(var e=!1,i=0;i1))&&(this._moved||(o.DomUtil.addClass(e._mapPane,"leaflet-touching"),e.fire("movestart").fire("zoomstart"),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),o.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,e=this._getScaleOrigin(),i=t.layerPointToLatLng(e),n=t.getScaleZoom(this._scale);t._animateZoom(i,n,this._startCenter,this._scale,this._delta,!1,!0)},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);var t=this._map;this._zooming=!1,o.DomUtil.removeClass(t._mapPane,"leaflet-touching"),o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var i=this._getScaleOrigin(),n=t.layerPointToLatLng(i),s=t.getZoom(),a=t.getScaleZoom(this._scale)-s,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(s+r),l=t.getZoomScale(h)/this._scale;t._animateZoom(n,h,i,l)},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),o.DomEvent.on(e,"touchmove",this._onMove,this).on(e,"touchend",this._onUp,this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,"touchmove",this._onMove,this).off(e,"touchend",this._onUp,this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._moved=!1},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown),this._moved=!1},moved:function(){return this._moved},_onMouseDown:function(t){return this._moved=!1,!t.shiftKey||1!==t.which&&1!==t.button?!1:(o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),void o.DomEvent.on(e,"mousemove",this._onMouseMove,this).on(e,"mouseup",this._onMouseUp,this).on(e,"keydown",this._onKeyDown,this))},_onMouseMove:function(t){this._moved||(this._box=o.DomUtil.create("div","leaflet-zoom-box",this._pane),o.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",this._map.fire("boxzoomstart"));var e=this._startLayerPoint,i=this._box,n=this._map.mouseEventToLayerPoint(t),s=n.subtract(e),a=new o.Point(Math.min(n.x,e.x),Math.min(n.y,e.y));o.DomUtil.setPosition(i,a),this._moved=!0,i.style.width=Math.max(0,Math.abs(s.x)-4)+"px",i.style.height=Math.max(0,Math.abs(s.y)-4)+"px"},_finish:function(){this._moved&&(this._pane.removeChild(this._box),this._container.style.cursor=""),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,"mousemove",this._onMouseMove).off(e,"mouseup",this._onMouseUp).off(e,"keydown",this._onKeyDown)},_onMouseUp:function(t){this._finish();var e=this._map,i=e.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(i)){var n=new o.LatLngBounds(e.layerPointToLatLng(this._startLayerPoint),e.layerPointToLatLng(i));e.fitBounds(n),e.fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),o.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;o.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var e=t.keyCode,i=this._map;if(e in this._panKeys){if(i._panAnim&&i._panAnim._inProgress)return;i.panBy(this._panKeys[e]),i.options.maxBounds&&i.panInsideBounds(i.options.maxBounds)}else{if(!(e in this._zoomKeys))return;i.setZoom(i.getZoom()+this._zoomKeys[e])}o.DomEvent.stop(t)}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t)),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this),this._draggable.enable(),o.DomUtil.addClass(this._marker._icon,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off("dragstart",this._onDragStart,this).off("drag",this._onDrag,this).off("dragend",this._onDragEnd,this),this._draggable.disable(),o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,e=t._shadow,i=o.DomUtil.getPosition(t._icon),n=t._map.layerPointToLatLng(i);e&&o.DomUtil.setPosition(e,i),t._latlng=n,t.fire("move",{latlng:n}).fire("drag")},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},removeFrom:function(t){var e=this.getPosition(),i=t._controlCorners[e];return i.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this},_refocusOnMap:function(){this._map&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,s){var a=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",a,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){this._container.removeChild(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar");return this._map=t,this._zoomInButton=this._createButton(this.options.zoomInText,this.options.zoomInTitle,e+"-in",i,this._zoomIn,this),this._zoomOutButton=this._createButton(this.options.zoomOutText,this.options.zoomOutTitle,e+"-out",i,this._zoomOut,this),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s,a){var r=o.DomUtil.create("a",i,n);r.innerHTML=t,r.href="#",r.title=e;var h=o.DomEvent.stopPropagation;return o.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",o.DomEvent.preventDefault).on(r,"click",s,a).on(r,"click",this._refocusOnMap,a),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),t._zoom===t.getMinZoom()&&o.DomUtil.addClass(this._zoomOutButton,e),t._zoom===t.getMaxZoom()&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):void 0},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):void 0},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e,i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e+"-line",i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e+"-line",i))},_update:function(){var t=this._map.getBounds(),e=t.getCenter().lat,i=6378137*Math.PI*Math.cos(e*Math.PI/180),n=i*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),s=this.options,a=0;o.x>0&&(a=n*(s.maxWidth/o.x)),this._updateScales(s,a)},_updateScales:function(t,e){t.metric&&e&&this._updateMetric(e),t.imperial&&e&&this._updateImperial(e)},_updateMetric:function(t){var e=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(e/t)+"px",this._mScale.innerHTML=1e3>e?e+" m":e/1e3+" km"},_updateImperial:function(t){var e,i,n,o=3.2808399*t,s=this._iScale;o>5280?(e=o/5280,i=this._getRoundNum(e),s.style.width=this._getScaleWidth(i/e)+"px",s.innerHTML=i+" mi"):(n=this._getRoundNum(o),s.style.width=this._getScaleWidth(n/o)+"px",s.innerHTML=n+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update(),this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update(),this},removeLayer:function(t){var e=o.stamp(t);return delete this._layers[e],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.Browser.touch?o.DomEvent.on(e,"click",o.DomEvent.stopPropagation):o.DomEvent.disableClickPropagation(e).disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,"mouseover",this._expand,this).on(e,"mouseout",this._collapse,this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t,e,i=!1,n=!1;for(t in this._layers)e=this._layers[t],this._addItem(e),n=n||e.overlay,i=i||!e.overlay;this._separator.style.display=n&&i?"":"none"}},_onLayerChange:function(t){var e=this._layers[o.stamp(t.layer)];if(e){this._handlingClick||this._update();var i=e.overlay?"layeradd"===t.type?"overlayadd":"overlayremove":"layeradd"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)}},_createRadioElement:function(t,i){var n='t;t++)e=n[t],i=this._layers[e.layerId],e.checked&&!this._map.hasLayer(i.layer)?this._map.addLayer(i.layer):!e.checked&&this._map.hasLayer(i.layer)&&this._map.removeLayer(i.layer);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Class.extend({includes:o.Mixin.Events,run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._newPos=e,this.fire("start"),t.style[o.DomUtil.TRANSITION]="all "+(i||.25)+"s cubic-bezier(0,0,"+(n||.5)+",1)",o.DomEvent.on(t,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),o.DomUtil.setPosition(t,e),o.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(o.bind(this._onStep,this),50)},stop:function(){this._inProgress&&(o.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),o.Util.falseFn(this._el.offsetWidth))},_onStep:function(){var t=this._getPos();return t?(this._el._leaflet_pos=t,void this.fire("step")):void this._onTransitionEnd()},_transformRe:/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,_getPos:function(){var e,i,n,s=this._el,a=t.getComputedStyle(s);if(o.Browser.any3d){if(n=a[o.DomUtil.TRANSFORM].match(this._transformRe),!n)return;e=parseFloat(n[1]),i=parseFloat(n[2])}else e=parseFloat(a.left),i=parseFloat(a.top);return new o.Point(e,i,!0)},_onTransitionEnd:function(){o.DomEvent.off(this._el,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[o.DomUtil.TRANSITION]="",this._el._leaflet_pos=this._newPos,clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this._panAnim&&this._panAnim.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.PosAnimation=o.DomUtil.TRANSITION?o.PosAnimation:o.PosAnimation.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,e=1e3*this._duration;e>t?this._runFrame(this._easeOut(t/e)):(this._runFrame(1),this._complete())},_runFrame:function(t){var e=this._startPos.add(this._offset.multiplyBy(t));o.DomUtil.setPosition(this._el,e),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4}),o.DomUtil.TRANSITION&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation&&o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.android23&&!o.Browser.mobileOpera,this._zoomAnimated&&o.DomEvent.on(this._mapPane,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),o.Map.include(o.DomUtil.TRANSITION?{_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n),s=this._getCenterLayerPoint()._add(o);return i.animate===!0||this.getSize().contains(o)?(this.fire("movestart").fire("zoomstart"),this._animateZoom(t,e,s,n,null,!0),!0):!1},_animateZoom:function(t,e,i,n,s,a,r){r||(this._animatingZoom=!0),o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this._animateToCenter=t,this._animateToZoom=e,o.Draggable&&(o.Draggable._disabled=!0),o.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:t,zoom:e,origin:i,scale:n,delta:s,backwards:a}),setTimeout(o.bind(this._onZoomTransitionEnd,this),250)},this)},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._animatingZoom=!1,o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),o.Util.requestAnimFrame(function(){this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),o.Draggable&&(o.Draggable._disabled=!1)},this))}}:{}),o.TileLayer.include({_animateZoom:function(t){this._animating||(this._animating=!0,this._prepareBgBuffer());var e=this._bgBuffer,i=o.DomUtil.TRANSFORM,n=t.delta?o.DomUtil.getTranslateString(t.delta):e.style[i],s=o.DomUtil.getScaleString(t.scale,t.origin);e.style[i]=t.backwards?s+" "+n:n+" "+s},_endZoomAnim:function(){var t=this._tileContainer,e=this._bgBuffer;t.style.visibility="",t.parentNode.appendChild(t),o.Util.falseFn(e.offsetWidth);var i=this._map.getZoom();(i>this.options.maxZoom||i.5&&.5>n?(t.style.visibility="hidden",void this._stopLoadingImages(t)):(e.style.visibility="hidden",e.style[o.DomUtil.TRANSFORM]="",this._tileContainer=e,e=this._bgBuffer=t,this._stopLoadingImages(e),void clearTimeout(this._clearBgBufferTimer))},_getLoadedTilesPercentage:function(t){var e,i,n=t.getElementsByTagName("img"),o=0;for(e=0,i=n.length;i>e;e++)n[e].complete&&o++;return o/i},_stopLoadingImages:function(t){var e,i,n,s=Array.prototype.slice.call(t.getElementsByTagName("img"));for(e=0,i=s.length;i>e;e++)n=s[e],n.complete||(n.onload=o.Util.falseFn,n.onerror=o.Util.falseFn,n.src=o.Util.emptyImageUrl,n.parentNode.removeChild(n))}}),o.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locateOptions=o.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=180*t.coords.accuracy/40075017,a=s/Math.cos(o.LatLng.DEG_TO_RAD*e),r=o.latLngBounds([e-s,i-a],[e+s,i+a]),h=this._locateOptions;if(h.setView){var l=Math.min(this.getBoundsZoom(r),h.maxZoom);this.setView(n,l)}var u={latlng:n,bounds:r,timestamp:t.timestamp};for(var c in t.coords)"number"==typeof t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,document)- \ No newline at end of file diff --git a/source/demo/index.html b/source/demo/index.html index 1120506038..91730aeb6e 100644 --- a/source/demo/index.html +++ b/source/demo/index.html @@ -31,14 +31,59 @@ left: 0; right: 0; bottom: 0; - margin-bottom: 123px; + margin-bottom: 97px; + font-family: Roboto, sans-serif; + font-size: 0pt; + transition: font-size 2s; + } + + #ha-init-skeleton paper-spinner { + height: 28px; + } + + #ha-init-skeleton a { + color: #03A9F4; + text-decoration: none; + font-weight: bold; + } + + #ha-init-skeleton.error { + font-size: 16px; + } + + #ha-init-skeleton.error img, + #ha-init-skeleton.error paper-spinner { + display: none; } + + -
- - +
+ + + Home Assistant had trouble
connecting to the server.

TRY AGAIN +
+