diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 7b5a0f1980ff..b366e24b0379 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,3 +1,5 @@ +Feature requests should go in the forum: https://community.home-assistant.io/c/feature-requests + **Home Assistant release (`hass --version`):** diff --git a/.gitignore b/.gitignore index 1e79f07b6630..e7d64517e172 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ config/* !config/home-assistant.conf.default -homeassistant/components/frontend/www_static/polymer/bower_components/* # There is not a better solution afaik.. !config/custom_components diff --git a/config/configuration.yaml.example b/config/configuration.yaml.example index fae945b05e47..899134b71a74 100644 --- a/config/configuration.yaml.example +++ b/config/configuration.yaml.example @@ -1,9 +1,9 @@ homeassistant: - # Omitted values in this section will be auto detected using freegeoip.net + # Omitted values in this section will be auto detected using freegeoip.io # Location required to calculate the time the sun rises and sets. - # Cooridinates are also used for location for weather related components. - # Google Maps can be used to determine more precise GPS cooridinates. + # Coordinates are also used for location for weather related components. + # Google Maps can be used to determine more precise GPS coordinates. latitude: 32.87336 longitude: 117.22743 diff --git a/homeassistant/bootstrap.py b/homeassistant/bootstrap.py index a7476162265c..2ba0681c2d65 100644 --- a/homeassistant/bootstrap.py +++ b/homeassistant/bootstrap.py @@ -22,6 +22,7 @@ from homeassistant.const import ( CONF_CUSTOMIZE, CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, CONF_TEMPERATURE_UNIT, CONF_TIME_ZONE, EVENT_COMPONENT_LOADED, TEMP_CELCIUS, TEMP_FAHRENHEIT, PLATFORM_FORMAT, __version__) +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import ( event_decorators, service, config_per_platform, extract_domain_configs) from homeassistant.helpers.entity import Entity @@ -293,7 +294,10 @@ def from_config_file(config_path, hass=None, verbose=False, daemon=False, enable_logging(hass, verbose, daemon, log_rotate_days) - config_dict = config_util.load_yaml_config_file(config_path) + try: + config_dict = config_util.load_yaml_config_file(config_path) + except HomeAssistantError: + return None return from_config_dict(config_dict, hass, enable_log=False, skip_pip=skip_pip) diff --git a/homeassistant/components/alarm_control_panel/__init__.py b/homeassistant/components/alarm_control_panel/__init__.py index f70da3d54ecb..e3bde441211d 100644 --- a/homeassistant/components/alarm_control_panel/__init__.py +++ b/homeassistant/components/alarm_control_panel/__init__.py @@ -12,6 +12,7 @@ from homeassistant.const import ( ATTR_CODE, ATTR_CODE_FORMAT, ATTR_ENTITY_ID, SERVICE_ALARM_TRIGGER, SERVICE_ALARM_DISARM, SERVICE_ALARM_ARM_HOME, SERVICE_ALARM_ARM_AWAY) from homeassistant.config import load_yaml_config_file +from homeassistant.helpers.config_validation import PLATFORM_SCHEMA # noqa from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity_component import EntityComponent diff --git a/homeassistant/components/alarm_control_panel/mqtt.py b/homeassistant/components/alarm_control_panel/mqtt.py index 0e86e0df8757..3bc7b860869a 100644 --- a/homeassistant/components/alarm_control_panel/mqtt.py +++ b/homeassistant/components/alarm_control_panel/mqtt.py @@ -6,43 +6,55 @@ https://home-assistant.io/components/alarm_control_panel.mqtt/ """ import logging +import voluptuous as vol + import homeassistant.components.alarm_control_panel as alarm import homeassistant.components.mqtt as mqtt from homeassistant.const import ( STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED, - STATE_ALARM_PENDING, STATE_ALARM_TRIGGERED, STATE_UNKNOWN) + STATE_ALARM_PENDING, STATE_ALARM_TRIGGERED, STATE_UNKNOWN, + CONF_NAME) +from homeassistant.components.mqtt import ( + CONF_STATE_TOPIC, CONF_COMMAND_TOPIC, CONF_QOS) +import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -DEFAULT_NAME = "MQTT Alarm" -DEFAULT_QOS = 0 -DEFAULT_PAYLOAD_DISARM = "DISARM" -DEFAULT_PAYLOAD_ARM_HOME = "ARM_HOME" -DEFAULT_PAYLOAD_ARM_AWAY = "ARM_AWAY" - DEPENDENCIES = ['mqtt'] +CONF_PAYLOAD_DISARM = 'payload_disarm' +CONF_PAYLOAD_ARM_HOME = 'payload_arm_home' +CONF_PAYLOAD_ARM_AWAY = 'payload_arm_away' +CONF_CODE = 'code' + +DEFAULT_NAME = "MQTT Alarm" +DEFAULT_DISARM = "DISARM" +DEFAULT_ARM_HOME = "ARM_HOME" +DEFAULT_ARM_AWAY = "ARM_AWAY" + +PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({ + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Required(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Required(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic, + vol.Optional(CONF_PAYLOAD_DISARM, default=DEFAULT_DISARM): cv.string, + vol.Optional(CONF_PAYLOAD_ARM_HOME, default=DEFAULT_ARM_HOME): cv.string, + vol.Optional(CONF_PAYLOAD_ARM_AWAY, default=DEFAULT_ARM_AWAY): cv.string, + vol.Optional(CONF_CODE): cv.string, +}) + def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the MQTT platform.""" - if config.get('state_topic') is None: - _LOGGER.error("Missing required variable: state_topic") - return False - - if config.get('command_topic') is None: - _LOGGER.error("Missing required variable: command_topic") - return False - add_devices([MqttAlarm( hass, - config.get('name', DEFAULT_NAME), - config.get('state_topic'), - config.get('command_topic'), - config.get('qos', DEFAULT_QOS), - config.get('payload_disarm', DEFAULT_PAYLOAD_DISARM), - config.get('payload_arm_home', DEFAULT_PAYLOAD_ARM_HOME), - config.get('payload_arm_away', DEFAULT_PAYLOAD_ARM_AWAY), - config.get('code'))]) + config[CONF_NAME], + config[CONF_STATE_TOPIC], + config[CONF_COMMAND_TOPIC], + config[CONF_QOS], + config[CONF_PAYLOAD_DISARM], + config[CONF_PAYLOAD_ARM_HOME], + config[CONF_PAYLOAD_ARM_AWAY], + config.get(CONF_CODE))]) # pylint: disable=too-many-arguments, too-many-instance-attributes @@ -62,7 +74,7 @@ class MqttAlarm(alarm.AlarmControlPanel): self._payload_disarm = payload_disarm self._payload_arm_home = payload_arm_home self._payload_arm_away = payload_arm_away - self._code = str(code) if code else None + self._code = code def message_received(topic, payload, qos): """A new MQTT message has been received.""" diff --git a/homeassistant/components/automation/mqtt.py b/homeassistant/components/automation/mqtt.py index db63d81e54b3..db0c1be7c2a2 100644 --- a/homeassistant/components/automation/mqtt.py +++ b/homeassistant/components/automation/mqtt.py @@ -4,26 +4,29 @@ Offer MQTT listening automation rules. For more details about this automation rule, please refer to the documentation at https://home-assistant.io/components/automation/#mqtt-trigger """ -import logging +import voluptuous as vol import homeassistant.components.mqtt as mqtt +from homeassistant.const import CONF_PLATFORM +import homeassistant.helpers.config_validation as cv DEPENDENCIES = ['mqtt'] CONF_TOPIC = 'topic' CONF_PAYLOAD = 'payload' +TRIGGER_SCHEMA = vol.Schema({ + vol.Required(CONF_PLATFORM): mqtt.DOMAIN, + vol.Required(CONF_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_PAYLOAD): cv.string, +}) + def trigger(hass, config, action): """Listen for state changes based on configuration.""" - topic = config.get(CONF_TOPIC) + topic = config[CONF_TOPIC] payload = config.get(CONF_PAYLOAD) - if topic is None: - logging.getLogger(__name__).error( - "Missing configuration key %s", CONF_TOPIC) - return False - def mqtt_automation_listener(msg_topic, msg_payload, qos): """Listen for MQTT messages.""" if payload is None or payload == msg_payload: diff --git a/homeassistant/components/binary_sensor/mqtt.py b/homeassistant/components/binary_sensor/mqtt.py index 88cbceccc457..a381305691a5 100644 --- a/homeassistant/components/binary_sensor/mqtt.py +++ b/homeassistant/components/binary_sensor/mqtt.py @@ -6,43 +6,50 @@ https://home-assistant.io/components/binary_sensor.mqtt/ """ import logging +import voluptuous as vol + import homeassistant.components.mqtt as mqtt from homeassistant.components.binary_sensor import (BinarySensorDevice, SENSOR_CLASSES) -from homeassistant.const import CONF_VALUE_TEMPLATE +from homeassistant.const import CONF_NAME, CONF_VALUE_TEMPLATE +from homeassistant.components.mqtt import CONF_STATE_TOPIC, CONF_QOS from homeassistant.helpers import template +import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) +DEPENDENCIES = ['mqtt'] + +CONF_SENSOR_CLASS = 'sensor_class' +CONF_PAYLOAD_ON = 'payload_on' +CONF_PAYLOAD_OFF = 'payload_off' + DEFAULT_NAME = 'MQTT Binary sensor' -DEFAULT_QOS = 0 DEFAULT_PAYLOAD_ON = 'ON' DEFAULT_PAYLOAD_OFF = 'OFF' -DEPENDENCIES = ['mqtt'] +PLATFORM_SCHEMA = mqtt.MQTT_RO_PLATFORM_SCHEMA.extend({ + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_SENSOR_CLASS, default=None): + vol.Any(vol.In(SENSOR_CLASSES), vol.SetTo(None)), + vol.Optional(CONF_PAYLOAD_ON, default=DEFAULT_PAYLOAD_ON): cv.string, + vol.Optional(CONF_PAYLOAD_OFF, default=DEFAULT_PAYLOAD_OFF): cv.string, +}) # pylint: disable=unused-argument def setup_platform(hass, config, add_devices, discovery_info=None): """Add MQTT binary sensor.""" - if config.get('state_topic') is None: - _LOGGER.error('Missing required variable: state_topic') - return False - - sensor_class = config.get('sensor_class') - if sensor_class not in SENSOR_CLASSES: - _LOGGER.warning('Unknown sensor class: %s', sensor_class) - sensor_class = None - add_devices([MqttBinarySensor( hass, - config.get('name', DEFAULT_NAME), - config.get('state_topic', None), - sensor_class, - config.get('qos', DEFAULT_QOS), - config.get('payload_on', DEFAULT_PAYLOAD_ON), - config.get('payload_off', DEFAULT_PAYLOAD_OFF), - config.get(CONF_VALUE_TEMPLATE))]) + config[CONF_NAME], + config[CONF_STATE_TOPIC], + config[CONF_SENSOR_CLASS], + config[CONF_QOS], + config[CONF_PAYLOAD_ON], + config[CONF_PAYLOAD_OFF], + config.get(CONF_VALUE_TEMPLATE) + )]) # pylint: disable=too-many-arguments, too-many-instance-attributes diff --git a/homeassistant/components/demo.py b/homeassistant/components/demo.py index 1d3916844651..0570d20c262a 100644 --- a/homeassistant/components/demo.py +++ b/homeassistant/components/demo.py @@ -136,7 +136,7 @@ def setup(hass, config): 'Home Alone']}, 'who_cooks': {'icon': 'mdi:panda', 'initial': 'Anne Therese', - 'name': 'Who cooks today', + 'name': 'Cook today', 'options': ['Paulus', 'Anne Therese']}}}) # Set up input boolean bootstrap.setup_component( @@ -144,6 +144,11 @@ def setup(hass, config): {'input_boolean': {'notify': {'icon': 'mdi:car', 'initial': False, 'name': 'Notify Anne Therese is home'}}}) + # Set up weblink + bootstrap.setup_component( + hass, 'weblink', + {'weblink': {'entities': [{'name': 'Router', + 'url': 'http://192.168.1.1'}]}}) # Setup configurator configurator_ids = [] diff --git a/homeassistant/components/device_tracker/__init__.py b/homeassistant/components/device_tracker/__init__.py index 240ac532e5c8..1866e972e280 100644 --- a/homeassistant/components/device_tracker/__init__.py +++ b/homeassistant/components/device_tracker/__init__.py @@ -204,6 +204,7 @@ class DeviceTracker(object): return # If no device can be found, create it + dev_id = util.ensure_unique_string(dev_id, self.devices.keys()) device = Device( self.hass, self.consider_home, self.home_range, self.track_new, dev_id, mac, (host_name or dev_id).replace('_', ' ')) diff --git a/homeassistant/components/device_tracker/mqtt.py b/homeassistant/components/device_tracker/mqtt.py index d754156f2173..0998e2278577 100644 --- a/homeassistant/components/device_tracker/mqtt.py +++ b/homeassistant/components/device_tracker/mqtt.py @@ -6,28 +6,27 @@ https://home-assistant.io/components/device_tracker.mqtt/ """ import logging +import voluptuous as vol + import homeassistant.components.mqtt as mqtt -from homeassistant import util +from homeassistant.components.mqtt import CONF_QOS +import homeassistant.helpers.config_validation as cv DEPENDENCIES = ['mqtt'] -CONF_QOS = 'qos' CONF_DEVICES = 'devices' -DEFAULT_QOS = 0 - _LOGGER = logging.getLogger(__name__) +PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({ + vol.Required(CONF_DEVICES): {cv.string: mqtt.valid_subscribe_topic}, +}) + def setup_scanner(hass, config, see): """Setup the MQTT tracker.""" - devices = config.get(CONF_DEVICES) - qos = util.convert(config.get(CONF_QOS), int, DEFAULT_QOS) - - if not isinstance(devices, dict): - _LOGGER.error('Expected %s to be a dict, found %s', CONF_DEVICES, - devices) - return False + devices = config[CONF_DEVICES] + qos = config[CONF_QOS] dev_id_lookup = {} diff --git a/homeassistant/components/device_tracker/netgear.py b/homeassistant/components/device_tracker/netgear.py index 6b0cbc5f465f..b20e5aae60e6 100644 --- a/homeassistant/components/device_tracker/netgear.py +++ b/homeassistant/components/device_tracker/netgear.py @@ -9,14 +9,15 @@ import threading from datetime import timedelta from homeassistant.components.device_tracker import DOMAIN -from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME +from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, \ + CONF_PORT from homeassistant.util import Throttle # Return cached results if last scan was less then this time ago. MIN_TIME_BETWEEN_SCANS = timedelta(seconds=5) _LOGGER = logging.getLogger(__name__) -REQUIREMENTS = ['pynetgear==0.3.2'] +REQUIREMENTS = ['pynetgear==0.3.3'] def get_scanner(hass, config): @@ -25,12 +26,13 @@ def get_scanner(hass, config): host = info.get(CONF_HOST) username = info.get(CONF_USERNAME) password = info.get(CONF_PASSWORD) + port = info.get(CONF_PORT) if password is not None and host is None: _LOGGER.warning('Found username or password but no host') return None - scanner = NetgearDeviceScanner(host, username, password) + scanner = NetgearDeviceScanner(host, username, password, port) return scanner if scanner.success_init else None @@ -38,7 +40,7 @@ def get_scanner(hass, config): class NetgearDeviceScanner(object): """Queries a Netgear wireless router using the SOAP-API.""" - def __init__(self, host, username, password): + def __init__(self, host, username, password, port): """Initialize the scanner.""" import pynetgear @@ -49,8 +51,10 @@ class NetgearDeviceScanner(object): self._api = pynetgear.Netgear() elif username is None: self._api = pynetgear.Netgear(password, host) - else: + elif port is None: self._api = pynetgear.Netgear(password, host, username) + else: + self._api = pynetgear.Netgear(password, host, username, port) _LOGGER.info("Logging in") diff --git a/homeassistant/components/device_tracker/owntracks.py b/homeassistant/components/device_tracker/owntracks.py index 0c67bb123b0d..eb41aec1ebc7 100644 --- a/homeassistant/components/device_tracker/owntracks.py +++ b/homeassistant/components/device_tracker/owntracks.py @@ -80,6 +80,11 @@ def setup_scanner(hass, config, see): if not isinstance(data, dict) or data.get('_type') != 'transition': return + if data.get('desc') is None: + _LOGGER.error( + "Location missing from `enter/exit` message - " + "please turn `Share` on in OwnTracks app") + return # OwnTracks uses - at the start of a beacon zone # to switch on 'hold mode' - ignore this location = data['desc'].lstrip("-") diff --git a/homeassistant/components/discovery.py b/homeassistant/components/discovery.py index 7daf513316e9..f03fdf35929d 100644 --- a/homeassistant/components/discovery.py +++ b/homeassistant/components/discovery.py @@ -15,7 +15,7 @@ from homeassistant.const import ( EVENT_PLATFORM_DISCOVERED) DOMAIN = "discovery" -REQUIREMENTS = ['netdisco==0.6.1'] +REQUIREMENTS = ['netdisco==0.6.2'] SCAN_INTERVAL = 300 # seconds diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index 26b08432ae6f..f923e425cbef 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -1,2 +1,2 @@ """DO NOT MODIFY. Auto-generated by build_frontend script.""" -VERSION = "45956327284e66953bfbed5d172928b8" +VERSION = "7baf9a2bf8d94448eeaa6a1ceaf8464e" diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/COPYRIGHT.txt b/homeassistant/components/frontend/www_static/fonts/roboto/COPYRIGHT.txt new file mode 100644 index 000000000000..a7ef69930cbf --- /dev/null +++ b/homeassistant/components/frontend/www_static/fonts/roboto/COPYRIGHT.txt @@ -0,0 +1 @@ +Copyright 2011 Google Inc. All Rights Reserved. \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/DESCRIPTION.en_us.html b/homeassistant/components/frontend/www_static/fonts/roboto/DESCRIPTION.en_us.html new file mode 100644 index 000000000000..3a6834fd4c46 --- /dev/null +++ b/homeassistant/components/frontend/www_static/fonts/roboto/DESCRIPTION.en_us.html @@ -0,0 +1,17 @@ +

Roboto has a dual nature. It has a mechanical skeleton and the forms are +largely geometric. At the same time, the font features friendly and open +curves. While some grotesks distort their letterforms to force a rigid rhythm, +Roboto doesn’t compromise, allowing letters to be settled into their natural +width. This makes for a more natural reading rhythm more commonly found in +humanist and serif types.

+ +

This is the normal family, which can be used alongside the +Roboto Condensed family and the +Roboto Slab family.

+ +

+Updated January 14 2015: +Christian Robertson and the Material Design team unveiled the latest version of Roboto at Google I/O last year, and it is now available from Google Fonts. +Existing websites using Roboto via Google Fonts will start using the latest version automatically. +If you have installed the fonts on your computer, please download them again and re-install. +

\ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/LICENSE.txt b/homeassistant/components/frontend/www_static/fonts/roboto/LICENSE.txt new file mode 100644 index 000000000000..d64569567334 --- /dev/null +++ b/homeassistant/components/frontend/www_static/fonts/roboto/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/METADATA.json b/homeassistant/components/frontend/www_static/fonts/roboto/METADATA.json new file mode 100644 index 000000000000..061bc67688be --- /dev/null +++ b/homeassistant/components/frontend/www_static/fonts/roboto/METADATA.json @@ -0,0 +1,129 @@ +{ + "name": "Roboto", + "designer": "Christian Robertson", + "license": "Apache2", + "visibility": "External", + "category": "Sans Serif", + "size": 86523, + "fonts": [ + { + "name": "Roboto", + "style": "normal", + "weight": 100, + "filename": "Roboto-Thin.ttf", + "postScriptName": "Roboto-Thin", + "fullName": "Roboto Thin", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "italic", + "weight": 100, + "filename": "Roboto-ThinItalic.ttf", + "postScriptName": "Roboto-ThinItalic", + "fullName": "Roboto Thin Italic", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "normal", + "weight": 300, + "filename": "Roboto-Light.ttf", + "postScriptName": "Roboto-Light", + "fullName": "Roboto Light", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "italic", + "weight": 300, + "filename": "Roboto-LightItalic.ttf", + "postScriptName": "Roboto-LightItalic", + "fullName": "Roboto Light Italic", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "normal", + "weight": 400, + "filename": "Roboto-Regular.ttf", + "postScriptName": "Roboto-Regular", + "fullName": "Roboto", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "italic", + "weight": 400, + "filename": "Roboto-Italic.ttf", + "postScriptName": "Roboto-Italic", + "fullName": "Roboto Italic", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "normal", + "weight": 500, + "filename": "Roboto-Medium.ttf", + "postScriptName": "Roboto-Medium", + "fullName": "Roboto Medium", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "italic", + "weight": 500, + "filename": "Roboto-MediumItalic.ttf", + "postScriptName": "Roboto-MediumItalic", + "fullName": "Roboto Medium Italic", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "normal", + "weight": 700, + "filename": "Roboto-Bold.ttf", + "postScriptName": "Roboto-Bold", + "fullName": "Roboto Bold", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "italic", + "weight": 700, + "filename": "Roboto-BoldItalic.ttf", + "postScriptName": "Roboto-BoldItalic", + "fullName": "Roboto Bold Italic", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "normal", + "weight": 900, + "filename": "Roboto-Black.ttf", + "postScriptName": "Roboto-Black", + "fullName": "Roboto Black", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto", + "style": "italic", + "weight": 900, + "filename": "Roboto-BlackItalic.ttf", + "postScriptName": "Roboto-BlackItalic", + "fullName": "Roboto Black Italic", + "copyright": "Copyright 2011 Google Inc. All Rights Reserved." + } + ], + "subsets": [ + "cyrillic", + "cyrillic-ext", + "greek", + "greek-ext", + "latin", + "latin-ext", + "menu", + "vietnamese" + ], + "dateAdded": "2013-01-09" +} diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Black.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Black.ttf new file mode 100644 index 000000000000..fbde625d403c Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Black.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BlackItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BlackItalic.ttf new file mode 100644 index 000000000000..60f7782a2e4a Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BlackItalic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Bold.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Bold.ttf new file mode 100644 index 000000000000..a355c27cde02 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Bold.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BoldItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BoldItalic.ttf new file mode 100644 index 000000000000..3c9a7a37361b Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BoldItalic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Italic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Italic.ttf new file mode 100644 index 000000000000..ff6046d5bfa7 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Italic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Light.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Light.ttf new file mode 100644 index 000000000000..94c6bcc67e09 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Light.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-LightItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-LightItalic.ttf new file mode 100644 index 000000000000..04cc00230202 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-LightItalic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Medium.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Medium.ttf new file mode 100644 index 000000000000..39c63d746179 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Medium.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-MediumItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-MediumItalic.ttf new file mode 100644 index 000000000000..dc743f0a66cf Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-MediumItalic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Regular.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Regular.ttf new file mode 100644 index 000000000000..8c082c8de090 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Regular.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Thin.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Thin.ttf new file mode 100644 index 000000000000..d69555029c3e Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Thin.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-ThinItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-ThinItalic.ttf new file mode 100644 index 000000000000..07172ff666ad Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-ThinItalic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/DESCRIPTION.en_us.html b/homeassistant/components/frontend/www_static/fonts/robotomono/DESCRIPTION.en_us.html new file mode 100644 index 000000000000..eb6ba3a2e3cc --- /dev/null +++ b/homeassistant/components/frontend/www_static/fonts/robotomono/DESCRIPTION.en_us.html @@ -0,0 +1,17 @@ +

+Roboto Mono is a monospaced addition to the Roboto type family. +Like the other members of the Roboto family, the fonts are optimized for readability on screens across a wide variety of devices and reading environments. +While the monospaced version is related to its variable width cousin, it doesn’t hesitate to change forms to better fit the constraints of a monospaced environment. +For example, narrow glyphs like ‘I’, ‘l’ and ‘i’ have added serifs for more even texture while wider glyphs are adjusted for weight. +Curved caps like ‘C’ and ‘O’ take on the straighter sides from Roboto Condensed. +

+ +

+Special consideration is given to glyphs important for reading and writing software source code. +Letters with similar shapes are easy to tell apart. +Digit ‘1’, lowercase ‘l’ and capital ‘I’ are easily differentiated as are zero and the letter ‘O’. +Punctuation important for code has also been considered. +For example, the curly braces ‘{ }’ have exaggerated points to clearly differentiate them from parenthesis ‘( )’ and braces ‘[ ]’. +Periods and commas are also exaggerated to identify them more quickly. +The scale and weight of symbols commonly used as operators have also been optimized. +

diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/LICENSE.txt b/homeassistant/components/frontend/www_static/fonts/robotomono/LICENSE.txt new file mode 100644 index 000000000000..d64569567334 --- /dev/null +++ b/homeassistant/components/frontend/www_static/fonts/robotomono/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/METADATA.json b/homeassistant/components/frontend/www_static/fonts/robotomono/METADATA.json new file mode 100644 index 000000000000..a2a212bfa8f0 --- /dev/null +++ b/homeassistant/components/frontend/www_static/fonts/robotomono/METADATA.json @@ -0,0 +1,111 @@ +{ + "name": "Roboto Mono", + "designer": "Christian Robertson", + "license": "Apache2", + "visibility": "External", + "category": "Monospace", + "size": 51290, + "fonts": [ + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-Thin", + "fullName": "Roboto Mono Thin", + "style": "normal", + "weight": 100, + "filename": "RobotoMono-Thin.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-ThinItalic", + "fullName": "Roboto Mono Thin Italic", + "style": "italic", + "weight": 100, + "filename": "RobotoMono-ThinItalic.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-Light", + "fullName": "Roboto Mono Light", + "style": "normal", + "weight": 300, + "filename": "RobotoMono-Light.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-LightItalic", + "fullName": "Roboto Mono Light Italic", + "style": "italic", + "weight": 300, + "filename": "RobotoMono-LightItalic.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-Regular", + "fullName": "Roboto Mono", + "style": "normal", + "weight": 400, + "filename": "RobotoMono-Regular.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-Italic", + "fullName": "Roboto Mono Italic", + "style": "italic", + "weight": 400, + "filename": "RobotoMono-Italic.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-Medium", + "fullName": "Roboto Mono Medium", + "style": "normal", + "weight": 500, + "filename": "RobotoMono-Medium.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-MediumItalic", + "fullName": "Roboto Mono Medium Italic", + "style": "italic", + "weight": 500, + "filename": "RobotoMono-MediumItalic.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-Bold", + "fullName": "Roboto Mono Bold", + "style": "normal", + "weight": 700, + "filename": "RobotoMono-Bold.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + }, + { + "name": "Roboto Mono", + "postScriptName": "RobotoMono-BoldItalic", + "fullName": "Roboto Mono Bold Italic", + "style": "italic", + "weight": 700, + "filename": "RobotoMono-BoldItalic.ttf", + "copyright": "Copyright 2015 Google Inc. All Rights Reserved." + } + ], + "subsets": [ + "cyrillic", + "cyrillic-ext", + "greek", + "greek-ext", + "latin", + "latin-ext", + "menu", + "vietnamese" + ], + "dateAdded": "2015-05-13" +} diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Bold.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Bold.ttf new file mode 100644 index 000000000000..c6a81a570c20 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Bold.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-BoldItalic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-BoldItalic.ttf new file mode 100644 index 000000000000..b2261d6649a2 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-BoldItalic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Italic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Italic.ttf new file mode 100644 index 000000000000..6e4001e19678 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Italic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Light.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Light.ttf new file mode 100644 index 000000000000..5ca4889ebac1 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Light.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-LightItalic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-LightItalic.ttf new file mode 100644 index 000000000000..db7c368471cf Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-LightItalic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Medium.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Medium.ttf new file mode 100644 index 000000000000..0bcdc740c66c Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Medium.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-MediumItalic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-MediumItalic.ttf new file mode 100644 index 000000000000..b4f5e20e3d95 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-MediumItalic.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Regular.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Regular.ttf new file mode 100644 index 000000000000..495a82ce92ed Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Regular.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Thin.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Thin.ttf new file mode 100644 index 000000000000..1b5085eed8cc Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Thin.ttf differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-ThinItalic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-ThinItalic.ttf new file mode 100644 index 000000000000..dfa1d139ba84 Binary files /dev/null and b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-ThinItalic.ttf differ diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html index 9097e43785e3..c28377696654 100644 --- a/homeassistant/components/frontend/www_static/frontend.html +++ b/homeassistant/components/frontend/www_static/frontend.html @@ -1,7 +1,7 @@ -