From 341a27e56bc7f54524ec148beb5ebcd87c27ea57 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Sun, 6 Jan 2019 21:26:39 +0100 Subject: [PATCH] Update beta config (#305) * Update beta Hass.io add-on config * Add README --- esphomeyaml-beta/README.md | 109 +++++++++++++++++++++++++++++++++++ esphomeyaml-beta/config.json | 39 +++++++------ esphomeyaml-beta/logo.png | Bin 5605 -> 8763 bytes 3 files changed, 131 insertions(+), 17 deletions(-) create mode 100644 esphomeyaml-beta/README.md diff --git a/esphomeyaml-beta/README.md b/esphomeyaml-beta/README.md new file mode 100644 index 0000000000..1fb5d03ea8 --- /dev/null +++ b/esphomeyaml-beta/README.md @@ -0,0 +1,109 @@ +# Esphomeyaml Hass.io Add-On + +[![esphomeyaml logo](https://raw.githubusercontent.com/OttoWinter/esphomeyaml/dev/esphomeyaml-edge/logo.png)](https://esphomelib.com/esphomeyaml/index.html) + +[![GitHub stars](https://img.shields.io/github/stars/OttoWinter/esphomelib.svg?style=social&label=Star&maxAge=2592000)](https://github.com/OttoWinter/esphomelib) +[![GitHub Release][releases-shield]][releases] +[![Discord][discord-shield]][discord] + +## About + +This add-on allows you to manage and program your ESP8266 and ESP32 based microcontrollers +directly through Hass.io **with no programming experience required**. All you need to do +is write YAML configuration files; the rest (over-the-air updates, compiling) is all +handled by esphomeyaml. + +

+ +

+ +[_View the esphomeyaml documentation here_](https://esphomelib.com/esphomeyaml/index.html) + +## Example + +With esphomeyaml, you can go from a few lines of YAML straight to a custom-made +firmware. For example, to include a [DHT22][dht22]. +temperature and humidity sensor, you just need to include 8 lines of YAML +in your configuration file: + + + +Then just click UPLOAD and the sensor will magically appear in Home Assistant: + + + +## Installation + +To install this Hass.io add-on you need to add the esphomeyaml add-on repository +first: + +1. Add the epshomeyaml add-ons repository to your Hass.io instance. You can do this by navigating to the "Add-on Store" tab in the Hass.io panel and then entering https://github.com/OttoWinter/esphomeyaml in the "Add new repository by URL" field. +2. Now scroll down and select the "esphomeyaml" add-on. +3. Press install to download the add-on and unpack it on your machine. This can take some time. +4. Optional: If you're using SSL certificates and want to encrypt your communication to this add-on, please enter `true` into the `ssl` field and set the `fullchain` and `certfile` options accordingly. +5. Start the add-on, check the logs of the add-on to see if everything went well. +6. Click "OPEN WEB UI" to open the esphomeyaml dashboard. You will be asked for your Home Assistant credentials - esphomeyaml uses Hass.io's authentication system to log you in. + +**NOTE**: Installation on RPis running in 64-bit mode is currently not possible. Please use the 32-bit variant of HassOS instead. + +You can view the esphomeyaml docs here: https://esphomelib.com/esphomeyaml/index.html + +## Configuration + +**Note**: _Remember to restart the add-on when the configuration is changed._ + +Example add-on configuration: + +```json +{ + "ssl": false, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem", + "port": 6052 +} +``` + +### Option: `port` + +The port to start the dashboard server on. Default is 6052. + +### Option: `ssl` + +Enables/Disables encrypted SSL (HTTPS) connections to the web server of this add-on. +Set it to `true` to encrypt communications, `false` otherwise. +Please note that if you set this to `true` you must also generate the key and certificate +files for encryption. For example using [Let's Encrypt](https://www.home-assistant.io/addons/lets_encrypt/) +or [Self-signed certificates](https://www.home-assistant.io/docs/ecosystem/certificates/tls_self_signed_certificate/). + +### Option: `certfile` + +The certificate file to use for SSL. If this file doesn't exist, the add-on start will fail. + +**Note**: The file MUST be stored in `/ssl/`, which is the default for Hass.io + +### Option: `keyfile` + +The private key file to use for SSL. If this file doesn't exist, the add-on start will fail. + +**Note**: The file MUST be stored in `/ssl/`, which is the default for Hass.io + +### Option: `leave_front_door_open` + +Adding this option to the add-on configuration allows you to disable +authentication by setting it to `true`. + +### Option: `esphomeyaml_version` + +Manually override which esphomeyaml version to use in the addon. +For example to install the latest development version, use `"esphomeyaml_version": "dev"`, +or for version 1.10.0: `"esphomeyaml_version": "v1.10.0""`. + +Please note that this does not always work and is only meant for testing, usually the +esphomeyaml add-on and dashboard version must match to guarantee a working system. + +[discord-shield]: https://img.shields.io/discord/429907082951524364.svg +[dht22]: https://esphomelib.com/esphomeyaml/components/sensor/dht.html +[discord]: https://discord.me/KhAMKrd +[releases-shield]: https://img.shields.io/github/release/OttoWinter/esphomeyaml.svg +[releases]: https://esphomelib.com/esphomeyaml/changelog/index.html +[repository]: https://github.com/OttoWinter/esphomeyaml diff --git a/esphomeyaml-beta/config.json b/esphomeyaml-beta/config.json index deb720cc7e..bfba2f3a30 100644 --- a/esphomeyaml-beta/config.json +++ b/esphomeyaml-beta/config.json @@ -4,30 +4,35 @@ "slug": "esphomeyaml-beta", "description": "Beta version of esphomeyaml Hass.io add-on.", "url": "https://beta.esphomelib.com/esphomeyaml/index.html", - "startup": "application", "webui": "http://[HOST]:[PORT:6052]", - "boot": "auto", - "ports": { - "6052/tcp": 6052, - "6053/tcp": 6053 - }, - "auto_uart": true, - "map": [ - "config:rw" - ], + "startup": "application", "arch": [ "amd64", "armhf", "i386" ], - "environment": { - "ESPHOMEYAML_OTA_HOST_PORT": "6053" - }, + "hassio_api": true, + "auth_api": true, + "hassio_role": "default", + "homeassistant_api": false, + "host_network": true, + "boot": "auto", + "map": [ + "ssl", + "config:rw" + ], "options": { - "password": "" + "ssl": false, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem", + "port": 6052 }, "schema": { - "password": "str?" - }, - "image": "ottowinter/esphomeyaml-hassio-{arch}" + "ssl": "bool", + "certfile": "str", + "keyfile": "str", + "port": "int", + "leave_front_door_open": "bool?", + "esphomeyaml_version": "str?" + } } diff --git a/esphomeyaml-beta/logo.png b/esphomeyaml-beta/logo.png index a202ef0a28a0c097e95883599b51e2f733359936..cd37247307d32fce33fc7b6b1926d89b1316013a 100644 GIT binary patch literal 8763 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 JS?83{1OU#0>~{bF