Browse Source

Rename esphomeyaml to esphome (#426)

* Rename

* Update

* Add migration

* Fix

* Fix dashboard

* Change test

* Fixes

* Code cleanup

* Fix import order

* Update

* Automate docker builds

* Shellcheck
pull/431/head
Otto Winter 3 years ago
committed by GitHub
parent
commit
3d9301a0f7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 49
      .github/ISSUE_TEMPLATE/bug_report.md
  2. 21
      .github/ISSUE_TEMPLATE/feature_request.md
  3. 13
      .github/ISSUE_TEMPLATE/new-integration.md
  4. 4
      .github/PULL_REQUEST_TEMPLATE.md
  5. 2
      .gitignore
  6. 241
      .gitlab-ci.yml
  7. 18
      .travis.yml
  8. 10
      CONTRIBUTING.md
  9. 28
      Dockerfile
  10. 32
      MANIFEST.in
  11. 39
      README.md
  12. 11
      docker/Dockerfile
  13. 30
      docker/Dockerfile.builder
  14. 76
      docker/Dockerfile.hassio
  15. 25
      docker/hooks/build
  16. 18
      docker/hooks/pre_build
  17. 35
      docker/rootfs/etc/cont-init.d/10-requirements.sh
  18. 28
      docker/rootfs/etc/cont-init.d/20-nginx.sh
  19. 12
      docker/rootfs/etc/cont-init.d/30-esphome.sh
  20. 13
      docker/rootfs/etc/cont-init.d/40-migrate.sh
  21. 62
      docker/rootfs/etc/nginx/nginx-ssl.conf
  22. 46
      docker/rootfs/etc/nginx/nginx.conf
  23. 4
      docker/rootfs/etc/services.d/esphome/finish
  24. 8
      docker/rootfs/etc/services.d/esphome/run
  25. 9
      docker/rootfs/etc/services.d/nginx/finish
  26. 10
      docker/rootfs/etc/services.d/nginx/run
  27. 0
      esphome/__init__.py
  28. 66
      esphome/__main__.py
  29. 0
      esphome/api/__init__.py
  30. 2
      esphome/api/api.proto
  31. 0
      esphome/api/api_pb2.py
  32. 24
      esphome/api/client.py
  33. 38
      esphome/automation.py
  34. 0
      esphome/components/__init__.py
  35. 12
      esphome/components/ads1115.py
  36. 12
      esphome/components/apds9960.py
  37. 18
      esphome/components/api.py
  38. 26
      esphome/components/binary_sensor/__init__.py
  39. 10
      esphome/components/binary_sensor/apds9960.py
  40. 10
      esphome/components/binary_sensor/custom.py
  41. 14
      esphome/components/binary_sensor/esp32_ble_tracker.py
  42. 14
      esphome/components/binary_sensor/esp32_touch.py
  43. 14
      esphome/components/binary_sensor/gpio.py
  44. 10
      esphome/components/binary_sensor/homeassistant.py
  45. 10
      esphome/components/binary_sensor/nextion.py
  46. 12
      esphome/components/binary_sensor/pn532.py
  47. 8
      esphome/components/binary_sensor/rdm6300.py
  48. 20
      esphome/components/binary_sensor/remote_receiver.py
  49. 12
      esphome/components/binary_sensor/status.py
  50. 14
      esphome/components/binary_sensor/template.py
  51. 18
      esphome/components/cover/__init__.py
  52. 20
      esphome/components/cover/template.py
  53. 12
      esphome/components/custom_component.py
  54. 14
      esphome/components/dallas.py
  55. 4
      esphome/components/debug.py
  56. 22
      esphome/components/deep_sleep.py
  57. 12
      esphome/components/display/__init__.py
  58. 14
      esphome/components/display/lcd_gpio.py
  59. 14
      esphome/components/display/lcd_pcf8574.py
  60. 16
      esphome/components/display/max7219.py
  61. 14
      esphome/components/display/nextion.py
  62. 16
      esphome/components/display/ssd1306_i2c.py
  63. 16
      esphome/components/display/ssd1306_spi.py
  64. 17
      esphome/components/display/waveshare_epaper.py
  65. 12
      esphome/components/esp32_ble_beacon.py
  66. 20
      esphome/components/esp32_ble_tracker.py
  67. 14
      esphome/components/esp32_touch.py
  68. 22
      esphome/components/ethernet.py
  69. 20
      esphome/components/fan/__init__.py
  70. 12
      esphome/components/fan/binary.py
  71. 10
      esphome/components/fan/speed.py
  72. 18
      esphome/components/font.py
  73. 12
      esphome/components/globals.py
  74. 14
      esphome/components/i2c.py
  75. 16
      esphome/components/image.py
  76. 14
      esphome/components/interval.py
  77. 20
      esphome/components/light/__init__.py
  78. 12
      esphome/components/light/binary.py
  79. 14
      esphome/components/light/cwww.py
  80. 16
      esphome/components/light/fastled_clockless.py
  81. 16
      esphome/components/light/fastled_spi.py
  82. 12
      esphome/components/light/monochromatic.py
  83. 20
      esphome/components/light/neopixelbus.py
  84. 12
      esphome/components/light/rgb.py
  85. 12
      esphome/components/light/rgbw.py
  86. 12
      esphome/components/light/rgbww.py
  87. 38
      esphome/components/logger.py
  88. 30
      esphome/components/mqtt.py
  89. 16
      esphome/components/my9231.py
  90. 12
      esphome/components/ota.py
  91. 17
      esphome/components/output/__init__.py
  92. 10
      esphome/components/output/custom.py
  93. 14
      esphome/components/output/esp8266_pwm.py
  94. 14
      esphome/components/output/gpio.py
  95. 14
      esphome/components/output/ledc.py
  96. 12
      esphome/components/output/my9231.py
  97. 10
      esphome/components/output/pca9685.py
  98. 12
      esphome/components/pca9685.py
  99. 12
      esphome/components/pcf8574.py
  100. 16
      esphome/components/pn532.py
  101. 16
      esphome/components/power_supply.py
  102. 12
      esphome/components/rdm6300.py
  103. 16
      esphome/components/remote_receiver.py
  104. 18
      esphome/components/remote_transmitter.py
  105. 20
      esphome/components/script.py
  106. 22
      esphome/components/sensor/__init__.py
  107. 14
      esphome/components/sensor/adc.py
  108. 12
      esphome/components/sensor/ads1115.py
  109. 10
      esphome/components/sensor/apds9960.py
  110. 12
      esphome/components/sensor/bh1750.py
  111. 14
      esphome/components/sensor/ble_rssi.py
  112. 12
      esphome/components/sensor/bme280.py
  113. 14
      esphome/components/sensor/bme680.py
  114. 12
      esphome/components/sensor/bmp085.py
  115. 12
      esphome/components/sensor/bmp280.py
  116. 14
      esphome/components/sensor/cse7766.py
  117. 10
      esphome/components/sensor/custom.py
  118. 10
      esphome/components/sensor/dallas.py
  119. 14
      esphome/components/sensor/dht.py
  120. 12
      esphome/components/sensor/dht12.py
  121. 14
      esphome/components/sensor/duty_cycle.py
  122. 12
      esphome/components/sensor/esp32_hall.py
  123. 12
      esphome/components/sensor/hdc1080.py
  124. 14
      esphome/components/sensor/hlw8012.py
  125. 13
      esphome/components/sensor/hmc5883l.py
  126. 10
      esphome/components/sensor/homeassistant.py
  127. 12
      esphome/components/sensor/htu21d.py
  128. 14
      esphome/components/sensor/hx711.py
  129. 12
      esphome/components/sensor/ina219.py
  130. 12
      esphome/components/sensor/ina3221.py
  131. 16
      esphome/components/sensor/max31855.py
  132. 16
      esphome/components/sensor/max6675.py
  133. 14
      esphome/components/sensor/mhz19.py
  134. 12
      esphome/components/sensor/mpu6050.py
  135. 12
      esphome/components/sensor/mqtt_subscribe.py
  136. 12
      esphome/components/sensor/ms5611.py
  137. 14
      esphome/components/sensor/pmsx003.py
  138. 16
      esphome/components/sensor/pulse_counter.py
  139. 14
      esphome/components/sensor/rotary_encoder.py
  140. 12
      esphome/components/sensor/sht3xd.py
  141. 12
      esphome/components/sensor/tcs34725.py
  142. 14
      esphome/components/sensor/template.py
  143. 12
      esphome/components/sensor/total_daily_energy.py
  144. 12
      esphome/components/sensor/tsl2561.py
  145. 14
      esphome/components/sensor/ultrasonic.py
  146. 12
      esphome/components/sensor/uptime.py
  147. 12
      esphome/components/sensor/wifi_signal.py
  148. 10
      esphome/components/sensor/xiaomi_miflora.py
  149. 10
      esphome/components/sensor/xiaomi_mijia.py
  150. 16
      esphome/components/spi.py
  151. 12
      esphome/components/status_led.py
  152. 14
      esphome/components/stepper/__init__.py
  153. 14
      esphome/components/stepper/a4988.py
  154. 14
      esphome/components/stepper/uln2003.py
  155. 12
      esphome/components/substitutions.py
  156. 23
      esphome/components/switch/__init__.py
  157. 10
      esphome/components/switch/custom.py
  158. 14
      esphome/components/switch/gpio.py
  159. 12
      esphome/components/switch/output.py
  160. 17
      esphome/components/switch/remote_transmitter.py
  161. 10
      esphome/components/switch/restart.py
  162. 10
      esphome/components/switch/shutdown.py
  163. 19
      esphome/components/switch/template.py
  164. 16
      esphome/components/switch/uart.py
  165. 18
      esphome/components/text_sensor/__init__.py
  166. 10
      esphome/components/text_sensor/custom.py
  167. 10
      esphome/components/text_sensor/homeassistant.py
  168. 12
      esphome/components/text_sensor/mqtt_subscribe.py
  169. 12
      esphome/components/text_sensor/template.py
  170. 12
      esphome/components/text_sensor/version.py
  171. 18
      esphome/components/time/__init__.py
  172. 13
      esphome/components/time/homeassistant.py
  173. 12
      esphome/components/time/sntp.py
  174. 18
      esphome/components/uart.py
  175. 16
      esphome/components/web_server.py
  176. 18
      esphome/components/wifi.py
  177. 40
      esphome/config.py
  178. 9
      esphome/config_validation.py
  179. 8
      esphome/const.py
  180. 42
      esphome/core.py
  181. 81
      esphome/core_config.py
  182. 10
      esphome/cpp_generator.py
  183. 12
      esphome/cpp_helpers.py
  184. 37
      esphome/cpp_types.py
  185. 0
      esphome/dashboard/__init__.py
  186. 86
      esphome/dashboard/dashboard.py
  187. 0
      esphome/dashboard/static/ace.js
  188. 0
      esphome/dashboard/static/esphome.css
  189. 0
      esphome/dashboard/static/esphome.js
  190. 0
      esphome/dashboard/static/ext-searchbox.js
  191. 0
      esphome/dashboard/static/favicon.ico
  192. 0
      esphome/dashboard/static/jquery-ui.min.js
  193. 0
      esphome/dashboard/static/jquery.min.js
  194. 0
      esphome/dashboard/static/jquery.validate.min.js
  195. 0
      esphome/dashboard/static/materialize-stepper.min.css
  196. 0
      esphome/dashboard/static/materialize-stepper.min.js
  197. 0
      esphome/dashboard/static/materialize.min.css
  198. 0
      esphome/dashboard/static/materialize.min.js
  199. 0
      esphome/dashboard/static/mode-yaml.js
  200. 0
      esphome/dashboard/static/theme-dreamweaver.js

49
.github/ISSUE_TEMPLATE/bug_report.md

@ -1,49 +0,0 @@
---
name: Bug report
about: Create a report to help esphomelib improve
---
<!-- Thanks for reporting a bug for this project. READ THIS FIRST:
- Please make sure to submit issues in the right GitHub repository, if unsure just post it here:
- esphomeyaml [here] - This is mostly for reporting bugs when compiling and when you get a long stack trace while compiling or if a configuration fails to validate.
- esphomelib [https://github.com/OttoWinter/esphomelib] - Report bugs there if the ESP is crashing or a feature is not working as expected.
- esphomedocs [https://github.com/OttoWinter/esphomedocs] - Report bugs there if the documentation is wrong/outdated.
- Provide as many details as possible. Paste logs, configuration sample and code into the backticks (```).
DO NOT DELETE ANY TEXT from this template! Otherwise the issue may be closed without a comment.
-->
**Operating environment (Hass.io/Docker/pip/etc.):**
<!--
Please provide details about your environment.
-->
**ESP (ESP32/ESP8266/Board/Sonoff):**
<!--
Please provide details about which ESP you're using.
-->
**Affected component:**
<!--
Please add the link to the documentation at https://esphomelib.com/esphomeyaml/index.html of the component in question.
-->
**Description of problem:**
**Problem-relevant YAML-configuration entries:**
```yaml
PASTE YAML FILE HERE
```
**Traceback (if applicable):**
<!--
Please copy the traceback here if compilation is failing. If possible, also connect to the ESP and copy its logs into the backticks.
-->
```
```
**Additional information:**

21
.github/ISSUE_TEMPLATE/feature_request.md

@ -1,21 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
---
<!-- READ THIS FIRST:
- This is for feature requests only, if you want to have a certain new sensor/module supported, please use the "new integration" template.
- Please be as descriptive as possible, especially use-cases that can otherwise not be solved boost the problem's priority.
DO NOT DELETE ANY TEXT from this template! Otherwise the issue may be closed without a comment.
-->
**Is your feature request related to a problem/use-case? Please describe.**
<!-- A clear and concise description of what the problem is. -->
**Describe the solution you'd like:**
<!-- A description of what you want to happen. -->
**Additional context:**
<!-- Add any other context about the feature request here. -->

13
.github/ISSUE_TEMPLATE/new-integration.md

@ -1,13 +0,0 @@
---
name: New integration
about: Suggest a new integration for esphomelib
---
DO NOT POST NEW INTEGRATION REQUESTS HERE!
Please post all new integration requests in the esphomelib repository:
https://github.com/OttoWinter/esphomelib/issues
Thank you!

4
.github/PULL_REQUEST_TEMPLATE.md

@ -3,8 +3,8 @@
**Related issue (if applicable):** fixes <link to issue>
**Pull request in [esphomedocs](https://github.com/OttoWinter/esphomedocs) with documentation (if applicable):** OttoWinter/esphomedocs#<esphomedocs PR number goes here>
**Pull request in [esphomelib](https://github.com/OttoWinter/esphomelib) with C++ framework changes (if applicable):** OttoWinter/esphomelib#<esphomelib PR number goes here>
**Pull request in [esphome-docs](https://github.com/esphome/esphome-docs) with documentation (if applicable):** esphome/esphome-docs#<esphome-docs PR number goes here>
**Pull request in [esphome-core](https://github.com/esphome/esphome-core) with C++ framework changes (if applicable):** esphome/esphome-core#<esphome-core PR number goes here>
## Checklist:
- [ ] The code change is tested and works locally.

2
.gitignore

@ -105,4 +105,4 @@ venv.bak/
config/
tests/build/
tests/.esphomeyaml/
tests/.esphome/

241
.gitlab-ci.yml

@ -15,7 +15,7 @@ stages:
- pip install -e .
tags:
- python2.7
- esphomeyaml-lint
- esphome-lint
.test: &test
stage: test
@ -23,7 +23,7 @@ stages:
- pip install -e .
tags:
- python2.7
- esphomeyaml-test
- esphome-test
variables:
TZ: UTC
@ -39,253 +39,34 @@ stages:
flake8:
<<: *lint
script:
- flake8 esphomeyaml
- flake8 esphome
pylint:
<<: *lint
script:
- pylint esphomeyaml
- pylint esphome
test1:
<<: *test
script:
- esphomeyaml tests/test1.yaml compile
- esphome tests/test1.yaml compile
test2:
<<: *test
script:
- esphomeyaml tests/test2.yaml compile
- esphome tests/test2.yaml compile
.build-hassio: &build-hassio
<<: *docker-builder
stage: build
script:
- docker run --rm --privileged hassioaddons/qemu-user-static:latest
- BUILD_FROM=hassioaddons/ubuntu-base-${ADDON_ARCH}:2.2.1
- ADDON_VERSION="${CI_COMMIT_TAG#v}"
- ADDON_VERSION="${ADDON_VERSION:-${CI_COMMIT_SHA:0:7}}"
- echo "Build from ${BUILD_FROM}"
- echo "Add-on version ${ADDON_VERSION}"
- echo "Tag ${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:dev"
- echo "Tag ${CI_REGISTRY}/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
- |
docker build \
--build-arg "BUILD_FROM=${BUILD_FROM}" \
--build-arg "BUILD_DATE=$(date +"%Y-%m-%dT%H:%M:%SZ")" \
--build-arg "BUILD_ARCH=${ADDON_ARCH}" \
--build-arg "BUILD_REF=${CI_COMMIT_SHA}" \
--build-arg "BUILD_VERSION=${ADDON_VERSION}" \
--tag "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:dev" \
--tag "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
--file "docker/Dockerfile.hassio" \
.
- |
if [ "${DO_PUSH:-true}" = true ]; then
echo "Pushing to CI registry"
docker push ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}
docker push ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:dev
fi
# Generic deploy template
.deploy-release: &deploy-release
<<: *docker-builder
stage: deploy
script:
- version="${CI_COMMIT_TAG#v}"
- echo "Publishing release version ${version}"
- docker pull "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
- docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
- echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- |
docker tag \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
- |
docker tag \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
- docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
- echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- |
docker tag \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- |
docker tag \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
"ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
- |
docker tag \
"ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \
"ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
- docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:latest"
- echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- |
docker tag \
"ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \
"ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
only:
- /^v\d+\.\d+\.\d+$/
except:
- /^(?!master).+@/
.deploy-beta: &deploy-beta
<<: *docker-builder
stage: deploy
test3:
<<: *test
script:
- version="${CI_COMMIT_TAG#v}"
- echo "Publishing beta version ${version}"
- docker pull "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}"
- docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
- echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- |
docker tag \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- echo "Tag ${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- |
docker tag \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- docker push "${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- |
docker tag \
"${CI_REGISTRY}/ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${CI_COMMIT_SHA}" \
"ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}"
- echo "Tag ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- |
docker tag \
"ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:${version}" \
"ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
- docker push "ottowinter/esphomeyaml-hassio-${ADDON_ARCH}:rc"
only:
- /^v\d+\.\d+\.\d+b\d+$/
except:
- /^(?!rc).+@/
- esphome tests/test3.yaml compile
# Build jobs
build:normal:
<<: *docker-builder
stage: build
script:
- docker build -t "${CI_REGISTRY}/ottowinter/esphomeyaml:dev" .
.build-hassio-edge: &build-hassio-edge
<<: *build-hassio
except:
- /^v\d+\.\d+\.\d+$/
- /^v\d+\.\d+\.\d+b\d+$/
.build-hassio-release: &build-hassio-release
<<: *build-hassio
only:
- /^v\d+\.\d+\.\d+$/
- /^v\d+\.\d+\.\d+b\d+$/
build:hassio-armhf-edge:
<<: *build-hassio-edge
variables:
ADDON_ARCH: armhf
DO_PUSH: "false"
build:hassio-armhf:
<<: *build-hassio-release
variables:
ADDON_ARCH: armhf
#build:hassio-aarch64-edge:
# <<: *build-hassio-edge
# variables:
# ADDON_ARCH: aarch64
# DO_PUSH: "false"
#build:hassio-aarch64:
# <<: *build-hassio-release
# variables:
# ADDON_ARCH: aarch64
build:hassio-i386-edge:
<<: *build-hassio-edge
variables:
ADDON_ARCH: i386
DO_PUSH: "false"
build:hassio-i386:
<<: *build-hassio-release
variables:
ADDON_ARCH: i386
build:hassio-amd64-edge:
<<: *build-hassio-edge
variables:
ADDON_ARCH: amd64
DO_PUSH: "false"
build:hassio-amd64:
<<: *build-hassio-release
variables:
ADDON_ARCH: amd64
# Deploy jobs
deploy-release:armhf:
<<: *deploy-release
variables:
ADDON_ARCH: armhf
deploy-beta:armhf:
<<: *deploy-beta
variables:
ADDON_ARCH: armhf
#deploy-release:aarch64:
# <<: *deploy-release
# variables:
# ADDON_ARCH: aarch64
#deploy-beta:aarch64:
# <<: *deploy-beta
# variables:
# ADDON_ARCH: aarch64
deploy-release:i386:
<<: *deploy-release
variables:
ADDON_ARCH: i386
deploy-beta:i386:
<<: *deploy-beta
variables:
ADDON_ARCH: i386
deploy-release:amd64:
<<: *deploy-release
variables:
ADDON_ARCH: amd64
deploy-beta:amd64:
<<: *deploy-beta
variables:
ADDON_ARCH: amd64
- docker build -t "${CI_REGISTRY}/esphome/esphome:dev" .
.deploy-pypi: &deploy-pypi
stage: deploy
@ -297,7 +78,7 @@ deploy-beta:amd64:
- twine upload dist/*
tags:
- python2.7
- esphomeyaml-test
- esphome-test
deploy-release:pypi:
<<: *deploy-pypi

18
.travis.yml

@ -8,24 +8,24 @@ matrix:
env: TARGET=Lint2.7
install: pip install -e . && pip install flake8==3.6.0 pylint==1.9.4 pillow
script:
- flake8 esphomeyaml
- pylint esphomeyaml
- flake8 esphome
- pylint esphome
- python: "3.5.3"
env: TARGET=Lint3.5
install: pip install -U https://github.com/platformio/platformio-core/archive/develop.zip && pip install -e . && pip install flake8==3.6.0 pylint==2.2.2 pillow
script:
- flake8 esphomeyaml
- pylint esphomeyaml
- flake8 esphome
- pylint esphome
- python: "2.7"
env: TARGET=Test2.7
install: pip install -e . && pip install flake8==3.6.0 pylint==1.9.4 pillow
script:
- esphomeyaml tests/test1.yaml compile
- esphomeyaml tests/test2.yaml compile
- esphomeyaml tests/test3.yaml compile
- esphome tests/test1.yaml compile
- esphome tests/test2.yaml compile
- esphome tests/test3.yaml compile
#- python: "3.5.3"
# env: TARGET=Test3.5
# install: pip install -U https://github.com/platformio/platformio-core/archive/develop.zip && pip install -e . && pip install flake8==3.6.0 pylint==2.2.2 pillow
# script:
# - esphomeyaml tests/test1.yaml compile
# - esphomeyaml tests/test2.yaml compile
# - esphome tests/test1.yaml compile
# - esphome tests/test2.yaml compile

10
CONTRIBUTING.md

@ -1,16 +1,16 @@
# Contributing to esphomeyaml
# Contributing to ESPHome
esphomeyaml is a part of esphomelib and is responsible for reading in YAML configuration files,
This python project is responsible for reading in YAML configuration files,
converting them to C++ code. This code is then converted to a platformio project and compiled
with [esphomelib](https://github.com/OttoWinter/esphomelib), the C++ framework behind the project.
with [esphome-core](https://github.com/esphome/esphome-core), the C++ framework behind the project.
For a detailed guide, please see https://esphomelib.com/esphomeyaml/guides/contributing.html#contributing-to-esphomeyaml
For a detailed guide, please see https://esphome.io/guides/contributing.html#contributing-to-esphomeyaml
Things to note when contributing:
- Please test your changes :)
- If a new feature is added or an existing user-facing feature is changed, you should also
update the [docs](https://github.com/OttoWinter/esphomedocs). See [contributing to esphomedocs](https://esphomelib.com/esphomeyaml/guides/contributing.html#contributing-to-esphomedocs)
update the [docs](https://github.com/esphome/esphome-docs). See [contributing to esphome-docs](https://esphome.io/guides/contributing.html#contributing-to-esphomedocs)
for more information.
- Please also update the tests in the `tests/` folder. You can do so by just adding a line in one of the YAML files
which checks if your new feature compiles correctly.

28
Dockerfile

@ -1,28 +0,0 @@
ARG BUILD_FROM=python:2.7
FROM ${BUILD_FROM}
MAINTAINER Otto Winter <contact@otto-winter.com>
RUN apt-get update && apt-get install -y \
git \
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* && \
pip install --no-cache-dir --no-binary :all: platformio && \
platformio settings set enable_telemetry No && \
platformio settings set check_libraries_interval 1000000 && \
platformio settings set check_platformio_interval 1000000 && \
platformio settings set check_platforms_interval 1000000
ENV ESPHOMEYAML_OTA_HOST_PORT=6123
EXPOSE 6123
VOLUME /config
WORKDIR /usr/src/app
COPY docker/platformio.ini /pio/platformio.ini
RUN platformio run -d /pio; rm -rf /pio
COPY . .
RUN pip install --no-cache-dir --no-binary :all: -e . && \
pip install --no-cache-dir pillow
WORKDIR /config
ENTRYPOINT ["esphomeyaml"]
CMD ["/config", "dashboard"]

32
MANIFEST.in

@ -1,17 +1,17 @@
include README.md
include esphomeyaml/dashboard/templates/index.html
include esphomeyaml/dashboard/templates/login.html
include esphomeyaml/dashboard/static/ace.js
include esphomeyaml/dashboard/static/esphomeyaml.css
include esphomeyaml/dashboard/static/esphomeyaml.js
include esphomeyaml/dashboard/static/favicon.ico
include esphomeyaml/dashboard/static/jquery.min.js
include esphomeyaml/dashboard/static/jquery.validate.min.js
include esphomeyaml/dashboard/static/jquery-ui.min.js
include esphomeyaml/dashboard/static/materialize.min.css
include esphomeyaml/dashboard/static/materialize.min.js
include esphomeyaml/dashboard/static/materialize-stepper.min.css
include esphomeyaml/dashboard/static/materialize-stepper.min.js
include esphomeyaml/dashboard/static/mode-yaml.js
include esphomeyaml/dashboard/static/theme-dreamweaver.js
include esphomeyaml/dashboard/static/ext-searchbox.js
include esphome/dashboard/templates/index.html
include esphome/dashboard/templates/login.html
include esphome/dashboard/static/ace.js
include esphome/dashboard/static/esphome.css
include esphome/dashboard/static/esphome.js
include esphome/dashboard/static/favicon.ico
include esphome/dashboard/static/jquery.min.js
include esphome/dashboard/static/jquery.validate.min.js
include esphome/dashboard/static/jquery-ui.min.js
include esphome/dashboard/static/materialize.min.css
include esphome/dashboard/static/materialize.min.js
include esphome/dashboard/static/materialize-stepper.min.css
include esphome/dashboard/static/materialize-stepper.min.js
include esphome/dashboard/static/mode-yaml.js
include esphome/dashboard/static/theme-dreamweaver.js
include esphome/dashboard/static/ext-searchbox.js

39
README.md

@ -1,38 +1,3 @@
# esphomeyaml for [esphomelib](https://github.com/OttoWinter/esphomelib)
# ESPHome
### Getting Started Guide: https://esphomelib.com/esphomeyaml/guides/getting_started_command_line.html
### Available Components: https://esphomelib.com/esphomeyaml/index.html
esphomeyaml is the solution for your ESP8266/ESP32 projects with Home Assistant. It allows you to create **custom firmwares** for your microcontrollers with no programming experience required. All you need to know is the YAML configuration format which is also used by [Home Assistant](https://www.home-assistant.io).
esphomeyaml will:
* Read your configuration file and warn you about potential errors (like using the invalid pins.)
* Create a custom C++ sketch file for you using esphomeyaml's powerful C++ generation engine.
* Compile the sketch file for you using [platformio](http://platformio.org/).
* Upload the binary to your ESP via Over the Air updates.
* Automatically start remote logs via MQTT.
And all of that with a single command ๐ŸŽ‰:
```bash
esphomeyaml configuration.yaml run
```
## Features
* **No programming experience required:** just edit YAML configuration
files like you're used to with Home Assistant.
* **Flexible:** Use [esphomelib](https://github.com/OttoWinter/esphomelib)'s powerful core to create custom sensors/outputs.
* **Fast and efficient:** Written in C++ and keeps memory consumption to a minimum.
* **Made for [Home Assistant](https://www.home-assistant.io):** Almost all [Home Assistant](https://www.home-assistant.io) features are supported out of the box. Including RGB lights and many more.
* **Easy reproducible configuration:** No need to go through a long setup process for every single node. Just copy a configuration file and run a single command.
* **Smart Over The Air Updates:** esphomeyaml has OTA updates deeply integrated into the system. It even automatically enters a recovery mode if a boot loop is detected.
* **Powerful logging engine:** View colorful logs and debug issues remotely.
* **Open Source**
* For me: Makes documenting esphomelib's features a lot easier.
## Special Thanks
Special Thanks to the Home Assistant project. Lots of the code base of esphomeyaml is based off of Home Assistant, for example the loading and config validation code.
# TODO

11
docker/Dockerfile

@ -0,0 +1,11 @@
ARG BUILD_FROM=esphome/esphome-base-amd64:1.0.0
FROM ${BUILD_FROM}
COPY . .
RUN \
pip install --no-cache-dir --no-binary :all: -e . && \
pip install --no-cache-dir pillow
WORKDIR /config
ENTRYPOINT ["esphome"]
CMD ["/config", "dashboard"]

30
docker/Dockerfile.builder

@ -1,30 +0,0 @@
FROM multiarch/ubuntu-core:amd64-xenial
# setup locals
RUN apt-get update && apt-get install -y \
jq \
git \
python3-setuptools \
&& rm -rf /var/lib/apt/lists/* \
ENV LANG C.UTF-8
# Install docker
# https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/
RUN apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common \
&& rm -rf /var/lib/apt/lists/* \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
&& add-apt-repository "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
&& apt-get update && apt-get install -y docker-ce \
&& rm -rf /var/lib/apt/lists/*
# setup arm binary support
RUN apt-get update && apt-get install -y \
qemu-user-static \
binfmt-support \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /data

76
docker/Dockerfile.hassio

@ -1,73 +1,29 @@
ARG BUILD_FROM=hassioaddons/ubuntu-base:2.2.1
# hadolint ignore=DL3006
ARG BUILD_FROM=esphome/esphome-hassio-base-amd64:1.0.0
FROM ${BUILD_FROM}
# Set shell
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# Copy root filesystem
COPY esphomeyaml-edge/rootfs /
COPY setup.py setup.cfg MANIFEST.in /opt/esphomeyaml/
COPY esphomeyaml /opt/esphomeyaml/esphomeyaml
RUN \
# Temporarily move nginx.conf (otherwise dpkg fails)
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bkp \
# Install add-on dependencies
&& apt-get update \
apt-get update \
&& apt-get install -y --no-install-recommends \
# Python for esphomeyaml
python \
python-pip \
python-setuptools \
# Python Pillow for display component
python-pil \
# Git for esphomelib downloads
git \
# NGINX proxy
nginx \
\
&& mv /etc/nginx/nginx.conf.bkp /etc/nginx/nginx.conf \
\
&& pip2 install --no-cache-dir --no-binary :all: -e /opt/esphomeyaml \
\
# Change some platformio settings
&& platformio settings set enable_telemetry No \
&& platformio settings set check_libraries_interval 1000000 \
&& platformio settings set check_platformio_interval 1000000 \
&& platformio settings set check_platforms_interval 1000000 \
\
# Build an empty platformio project to force platformio to install all fw build dependencies
# The return-code will be non-zero since there's nothing to build.
&& (platformio run -d /opt/pio; echo "Done") \
\
# Cleanup
&& rm -fr \
&& rm -rf \
/tmp/* \
/var/{cache,log}/* \
/var/lib/apt/lists/* \
/opt/pio/
/var/lib/apt/lists/*
# Copy root filesystem
COPY docker/rootfs/ /
COPY setup.py setup.cfg MANIFEST.in /opt/esphome/
COPY esphome /opt/esphome/esphome
RUN \
pip2 install --no-cache-dir --no-binary :all: -e /opt/esphome
# Build arugments
ARG BUILD_ARCH=amd64
ARG BUILD_DATE
ARG BUILD_REF
ARG BUILD_VERSION
# Build arguments
ARG BUILD_VERSION=dev
# Labels
LABEL \
io.hass.name="esphomeyaml" \
io.hass.name="ESPHome" \
io.hass.description="Manage and program ESP8266/ESP32 microcontrollers through YAML configuration files" \
io.hass.arch="${BUILD_ARCH}" \
io.hass.type="addon" \
io.hass.version=${BUILD_VERSION} \
maintainer="Otto Winter <contact@otto-winter.com>" \
org.label-schema.description="Manage and program ESP8266/ESP32 microcontrollers through YAML configuration files" \
org.label-schema.build-date=${BUILD_DATE} \
org.label-schema.name="esphomeyaml" \
org.label-schema.schema-version="1.0" \
org.label-schema.url="https://esphomelib.com" \
org.label-schema.usage="https://github.com/OttoWinter/esphomeyaml/tree/dev/esphomeyaml/README.md" \
org.label-schema.vcs-ref=${BUILD_REF} \
org.label-schema.vcs-url="https://github.com/OttoWinter/esphomeyaml" \
org.label-schema.vendor="esphomelib"
io.hass.version=${BUILD_VERSION}

25
docker/hooks/build

@ -0,0 +1,25 @@
#!/usr/bin/env bash
# the Docker repository tag being built.
declare CACHE_TAG
echo "CACHE_TAG: ${CACHE_TAG}"
# the name and tag of the Docker repository being built. (This variable is a combination of DOCKER_REPO:CACHE_TAG.)
declare IMAGE_NAME
echo "IMAGE_NAME: ${IMAGE_NAME}"
# the architecture to build
declare BUILD_ARCH
echo "BUILD_ARCH: ${BUILD_ARCH}"
# whether this is a hassio build
declare IS_HASSIO
echo "IS_HASSIO: ${IS_HASSIO}"
if [[ ${IS_HASSIO} = "YES" ]]; then
docker build \
--build-arg "BUILD_FROM=esphome/esphome-hassio-base-${BUILD_ARCH}:1.0.0" \
--build-arg "BUILD_VERSION=${CACHE_TAG}" \
-t "${IMAGE_NAME}" -f docker/Dockerfile.hassio .
else
docker build \
--build-arg "BUILD_FROM=esphome/esphome-base-${BUILD_ARCH}:1.0.0" \
-t "${IMAGE_NAME}" -f docker/Dockerfile .
fi

18
docker/hooks/pre_build

@ -0,0 +1,18 @@
#!/usr/bin/env bash
# the architecture to build
declare BUILD_ARCH
echo "BUILD_ARCH: ${BUILD_ARCH}"
if [[ ${BUILD_ARCH} = "amd64" ]]; then
echo "No qemu required..."
exit 0
fi
if [[ ${BUILD_ARCH} = "i386" ]]; then
echo "No qemu required..."
exit 0
fi
echo "Installing qemu..."
docker run --rm --privileged multiarch/qemu-user-static:register --reset

35
docker/rootfs/etc/cont-init.d/10-requirements.sh

@ -0,0 +1,35 @@
#!/usr/bin/with-contenv bash
# ==============================================================================
# Community Hass.io Add-ons: ESPHome
# This files check if all user configuration requirements are met
# ==============================================================================
# shellcheck disable=SC1091
source /usr/lib/hassio-addons/base.sh
# Check SSL requirements, if enabled
if hass.config.true 'ssl'; then
if ! hass.config.has_value 'certfile'; then
hass.die 'SSL is enabled, but no certfile was specified.'
fi
if ! hass.config.has_value 'keyfile'; then
hass.die 'SSL is enabled, but no keyfile was specified'
fi
if ! hass.file_exists "/ssl/$(hass.config.get 'certfile')"; then
if ! hass.file_exists "/ssl/$(hass.config.get 'keyfile')"; then
# Both files are missing, let's print a friendlier error message
text="You enabled encrypted connections using the \"ssl\": true option.
However, the SSL files \"$(hass.config.get 'certfile')\" and \"$(hass.config.get 'keyfile')\"
were not found. If you're using Hass.io on your local network and don't want
to encrypt connections to the ESPHome dashboard, you can manually disable
SSL by setting \"ssl\" to false."
hass.die "${text}"
fi
hass.die 'The configured certfile is not found'
fi
if ! hass.file_exists "/ssl/$(hass.config.get 'keyfile')"; then
hass.die 'The configured keyfile is not found'
fi
fi

28
docker/rootfs/etc/cont-init.d/20-nginx.sh

@ -0,0 +1,28 @@
#!/usr/bin/with-contenv bash
# ==============================================================================
# Community Hass.io Add-ons: ESPHome
# Configures NGINX for use with ESPHome
# ==============================================================================
# shellcheck disable=SC1091
source /usr/lib/hassio-addons/base.sh
declare certfile
declare keyfile
declare port
mkdir -p /var/log/nginx
# Enable SSL
if hass.config.true 'ssl'; then
rm /etc/nginx/nginx.conf
mv /etc/nginx/nginx-ssl.conf /etc/nginx/nginx.conf
certfile=$(hass.config.get 'certfile')
keyfile=$(hass.config.get 'keyfile')
sed -i "s/%%certfile%%/${certfile}/g" /etc/nginx/nginx.conf
sed -i "s/%%keyfile%%/${keyfile}/g" /etc/nginx/nginx.conf
fi
port=$(hass.config.get 'port')
sed -i "s/%%port%%/${port}/g" /etc/nginx/nginx.conf

12
esphomeyaml-edge/rootfs/etc/cont-init.d/30-esphomeyaml.sh → docker/rootfs/etc/cont-init.d/30-esphome.sh

@ -1,14 +1,14 @@
#!/usr/bin/with-contenv bash
# ==============================================================================
# Community Hass.io Add-ons: esphomeyaml
# This files installs the user esphomeyaml version if specified
# Community Hass.io Add-ons: ESPHome
# This files installs the user ESPHome version if specified
# ==============================================================================
# shellcheck disable=SC1091
source /usr/lib/hassio-addons/base.sh
declare esphomeyaml_version
declare esphome_version
if hass.config.has_value 'esphomeyaml_version'; then
esphomeyaml_version=$(hass.config.get 'esphomeyaml_version')
pip2 install --no-cache-dir --no-binary :all: "https://github.com/OttoWinter/esphomeyaml/archive/${esphomeyaml_version}.zip"
if hass.config.has_value 'esphome_version'; then
esphome_version=$(hass.config.get 'esphome_version')
pip2 install --no-cache-dir --no-binary :all: "https://github.com/esphome/esphome/archive/${esphome_version}.zip"
fi

13
docker/rootfs/etc/cont-init.d/40-migrate.sh

@ -0,0 +1,13 @@
#!/usr/bin/with-contenv bash
# ==============================================================================
# Community Hass.io Add-ons: ESPHome
# This files migrates the esphome config directory from the old path
# ==============================================================================
# shellcheck disable=SC1091
source /usr/lib/hassio-addons/base.sh
if [[ ! -d /config/esphome && -d /config/esphomeyaml ]]; then
echo "Moving config directory from /config/esphomeyaml to /config/esphome"
mv /config/esphomeyaml /config/esphome
mv /config/esphome/.esphomeyaml /config/esphome/.esphome
fi

62
docker/rootfs/etc/nginx/nginx-ssl.conf

@ -0,0 +1,62 @@
worker_processes 1;
pid /var/run/nginx.pid;
error_log stderr;
events {
worker_connections 1024;
}
http {
access_log stdout;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream esphome {
ip_hash;
server unix:/var/run/esphome.sock;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
server_name hassio.local;
listen %%port%% default_server ssl;
root /dev/null;
ssl_certificate /ssl/%%certfile%%;
ssl_certificate_key /ssl/%%keyfile%%;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
# Redirect http requests to https on the same port.
# https://rageagainstshell.com/2016/11/redirect-http-to-https-on-the-same-port-in-nginx/
error_page 497 https://$http_host$request_uri;
location / {
proxy_redirect off;
proxy_pass http://esphome;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Authorization "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
}

46
docker/rootfs/etc/nginx/nginx.conf

@ -0,0 +1,46 @@
worker_processes 1;
pid /var/run/nginx.pid;
error_log stderr;
events {
worker_connections 1024;
}
http {
access_log stdout;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream esphome {
ip_hash;
server unix:/var/run/esphome.sock;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
server_name hassio.local;
listen %%port%% default_server;
root /dev/null;
location / {
proxy_redirect off;
proxy_pass http://esphome;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Authorization "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
}

4
esphomeyaml-edge/rootfs/etc/services.d/esphomeyaml/finish → docker/rootfs/etc/services.d/esphome/finish

@ -1,7 +1,7 @@
#!/usr/bin/execlineb -S0
# ==============================================================================
# Community Hass.io Add-ons: esphomeyaml
# Take down the S6 supervision tree when esphomeyaml fails
# Community Hass.io Add-ons: ESPHome
# Take down the S6 supervision tree when ESPHome fails
# ==============================================================================
if -n { s6-test $# -ne 0 }
if -n { s6-test ${1} -eq 256 }

8
esphomeyaml-edge/rootfs/etc/services.d/esphomeyaml/run → docker/rootfs/etc/services.d/esphome/run

@ -1,7 +1,7 @@
#!/usr/bin/with-contenv bash
# ==============================================================================
# Community Hass.io Add-ons: esphomeyaml
# Runs the esphomeyaml dashboard
# Community Hass.io Add-ons: ESPHome
# Runs the ESPHome dashboard
# ==============================================================================
# shellcheck disable=SC1091
source /usr/lib/hassio-addons/base.sh
@ -10,5 +10,5 @@ if hass.config.true 'leave_front_door_open'; then
export DISABLE_HA_AUTHENTICATION=true
fi
hass.log.info "Starting esphomeyaml dashboard..."
exec esphomeyaml /config/esphomeyaml dashboard --socket /var/run/esphomeyaml.sock --hassio
hass.log.info "Starting ESPHome dashboard..."
exec esphome /config/esphome dashboard --socket /var/run/esphome.sock --hassio

9
docker/rootfs/etc/services.d/nginx/finish

@ -0,0 +1,9 @@
#!/usr/bin/execlineb -S0
# ==============================================================================
# Community Hass.io Add-ons: ESPHome
# Take down the S6 supervision tree when NGINX fails
# ==============================================================================
if -n { s6-test $# -ne 0 }
if -n { s6-test ${1} -eq 256 }
s6-svscanctl -t /var/run/s6/services

10
docker/rootfs/etc/services.d/nginx/run

@ -0,0 +1,10 @@
#!/usr/bin/with-contenv bash
# ==============================================================================
# Community Hass.io Add-ons: ESPHome
# Runs the NGINX proxy
# ==============================================================================
# shellcheck disable=SC1091
source /usr/lib/hassio-addons/base.sh
hass.log.info "Starting NGINX..."
exec nginx -g "daemon off;"

0
esphomeyaml/__init__.py → esphome/__init__.py

66
esphomeyaml/__main__.py → esphome/__main__.py

@ -8,22 +8,22 @@ import os
import random
import sys
from esphomeyaml import const, core_config, mqtt, platformio_api, wizard, writer, yaml_util
from esphomeyaml.api.client import run_logs
from esphomeyaml.config import get_component, iter_components, read_config, strip_default_ids
from esphomeyaml.const import CONF_BAUD_RATE, CONF_ESPHOMEYAML, CONF_LOGGER, CONF_USE_CUSTOM_CODE, \
CONF_BROKER
from esphomeyaml.core import CORE, EsphomeyamlError
from esphomeyaml.cpp_generator import Expression, RawStatement, add, statement
from esphomeyaml.helpers import color, indent
from esphomeyaml.py_compat import safe_input, text_type, IS_PY2
from esphomeyaml.storage_json import StorageJSON, esphomeyaml_storage_path, \
from esphome import const, core_config, mqtt, platformio_api, wizard, writer, yaml_util
from esphome.api.client import run_logs
from esphome.config import get_component, iter_components, read_config, strip_default_ids
from esphome.const import CONF_BAUD_RATE, CONF_BROKER, CONF_ESPHOME, CONF_LOGGER, \
CONF_USE_CUSTOM_CODE
from esphome.core import CORE, EsphomeError
from esphome.cpp_generator import Expression, RawStatement, add, statement
from esphome.helpers import color, indent
from esphome.py_compat import IS_PY2, safe_input, text_type
from esphome.storage_json import StorageJSON, esphome_storage_path, \
start_update_check_thread, storage_path
from esphomeyaml.util import run_external_command, run_external_process, safe_print
from esphome.util import run_external_command, run_external_process, safe_print
_LOGGER = logging.getLogger(__name__)
PRE_INITIALIZE = ['esphomeyaml', 'logger', 'wifi', 'ethernet', 'ota', 'mqtt', 'web_server', 'api',
PRE_INITIALIZE = ['esphome', 'logger', 'wifi', 'ethernet', 'ota', 'mqtt', 'web_server', 'api',
'i2c']
@ -127,9 +127,9 @@ def run_miniterm(config, port):
def write_cpp(config):
_LOGGER.info("Generating C++ source...")
CORE.add_job(core_config.to_code, config[CONF_ESPHOMEYAML], domain='esphomeyaml')
CORE.add_job(core_config.to_code, config[CONF_ESPHOME], domain='esphome')
for domain in PRE_INITIALIZE:
if domain == CONF_ESPHOMEYAML or domain not in config:
if domain == CONF_ESPHOME or domain not in config:
continue
CORE.add_job(get_component(domain).to_code, config[domain], domain=domain)
@ -143,7 +143,7 @@ def write_cpp(config):
add(RawStatement(''))
all_code = []
for exp in CORE.expressions:
if not config[CONF_ESPHOMEYAML][CONF_USE_CUSTOM_CODE]:
if not config[CONF_ESPHOME][CONF_USE_CUSTOM_CODE]:
if isinstance(exp, Expression) and not exp.required:
continue
all_code.append(text_type(statement(exp)))
@ -157,9 +157,9 @@ def write_cpp(config):
def compile_program(args, config):
_LOGGER.info("Compiling app...")
update_check = not os.getenv('ESPHOMEYAML_NO_UPDATE_CHECK', '')
update_check = not os.getenv('ESPHOME_NO_UPDATE_CHECK', '')
if update_check:
thread = start_update_check_thread(esphomeyaml_storage_path(CORE.config_dir))
thread = start_update_check_thread(esphome_storage_path(CORE.config_dir))
rc = platformio_api.run_compile(config, args.verbose)
if update_check:
thread.join()
@ -186,13 +186,13 @@ def upload_program(config, args, host):
return upload_using_esptool(config, host)
return platformio_api.run_upload(config, args.verbose, host)
from esphomeyaml.components import ota
from esphomeyaml import espota2
from esphome.components import ota
from esphome import espota2
if args.host_port is not None:
host_port = args.host_port
else:
host_port = int(os.getenv('ESPHOMEYAML_OTA_HOST_PORT', random.randint(10000, 60000)))
host_port = int(os.getenv('ESPHOME_OTA_HOST_PORT', random.randint(10000, 60000)))
verbose = args.verbose
remote_port = ota.get_port(config)
@ -215,7 +215,7 @@ def upload_program(config, args, host):
def show_logs(config, args, port):
if 'logger' not in config:
raise EsphomeyamlError("Logger is not configured!")
raise EsphomeError("Logger is not configured!")
if get_port_type(port) == 'SERIAL':
run_miniterm(config, port)
return 0
@ -345,7 +345,7 @@ def command_clean(args, config):
def command_hass_config(args, config):
from esphomeyaml.components import mqtt as mqtt_component
from esphome.components import mqtt as mqtt_component
_LOGGER.info("This is what you should put in your Home Assistant YAML configuration.")
_LOGGER.info("Please note this is only necessary if you're not using MQTT discovery.")
@ -367,7 +367,7 @@ def command_hass_config(args, config):
def command_dashboard(args):
from esphomeyaml.dashboard import dashboard
from esphome.dashboard import dashboard
return dashboard.start_web_server(args)
@ -392,8 +392,8 @@ POST_CONFIG_ACTIONS = {
def parse_args(argv):
parser = argparse.ArgumentParser(prog='esphomeyaml')
parser.add_argument('-v', '--verbose', help="Enable verbose esphomeyaml logs.",
parser = argparse.ArgumentParser(prog='esphome')
parser.add_argument('-v', '--verbose', help="Enable verbose esphome logs.",
action='store_true')
parser.add_argument('--dashboard', help="Internal flag to set if the command is run from the "
"dashboard.", action='store_true')
@ -444,11 +444,11 @@ def parse_args(argv):
parser_clean.add_argument('--client-id', help='Manually set the client id.')
subparsers.add_parser('wizard', help="A helpful setup wizard that will guide "
"you through setting up esphomeyaml.")
"you through setting up esphome.")
subparsers.add_parser('mqtt-fingerprint', help="Get the SSL fingerprint from a MQTT broker.")
subparsers.add_parser('version', help="Print the esphomeyaml version and exit.")
subparsers.add_parser('version', help="Print the esphome version and exit.")
subparsers.add_parser('clean', help="Delete all temporary build files.")
@ -461,7 +461,7 @@ def parse_args(argv):
dashboard.add_argument("--open-ui", help="Open the dashboard UI in a browser.",
action='store_true')
dashboard.add_argument("--hassio",
help="Internal flag used to tell esphomeyaml is started as a Hass.io "
help="Internal flag used to tell esphome is started as a Hass.io "
"add-on.",
action="store_true")
dashboard.add_argument("--socket",
@ -474,7 +474,7 @@ def parse_args(argv):
return parser.parse_args(argv[1:])
def run_esphomeyaml(argv):
def run_esphome(argv):
args = parse_args(argv)
CORE.dashboard = args.dashboard
@ -482,7 +482,7 @@ def run_esphomeyaml(argv):
if args.command in PRE_CONFIG_ACTIONS:
try:
return PRE_CONFIG_ACTIONS[args.command](args)
except EsphomeyamlError as e:
except EsphomeError as e:
_LOGGER.error(e)
return 1
@ -496,7 +496,7 @@ def run_esphomeyaml(argv):
if args.command in POST_CONFIG_ACTIONS:
try:
return POST_CONFIG_ACTIONS[args.command](args, config)
except EsphomeyamlError as e:
except EsphomeError as e:
_LOGGER.error(e)
return 1
safe_print(u"Unknown command {}".format(args.command))
@ -505,8 +505,8 @@ def run_esphomeyaml(argv):
def main():
try:
return run_esphomeyaml(sys.argv)
except EsphomeyamlError as e:
return run_esphome(sys.argv)
except EsphomeError as e:
_LOGGER.error(e)
return 1
except KeyboardInterrupt:

0
esphomeyaml/api/__init__.py → esphome/api/__init__.py

2
esphomeyaml/api/api.proto → esphome/api/api.proto

@ -92,7 +92,7 @@ message DeviceInfoResponse {
// A string describing the date of compilation, this is generated by the compiler
// and therefore may not be in the same format all the time.
// If the user isn't using esphomeyaml, this will also not be set.
// If the user isn't using esphome, this will also not be set.
string compilation_time = 5;
// The model of the board. For example NodeMCU

0
esphomeyaml/api/api_pb2.py → esphome/api/api_pb2.py

24
esphomeyaml/api/client.py → esphome/api/client.py

@ -9,18 +9,18 @@ import time
from typing import Optional # noqa
from google.protobuf import message # noqa
from esphomeyaml import const
import esphomeyaml.api.api_pb2 as pb
from esphomeyaml.const import CONF_PASSWORD, CONF_PORT
from esphomeyaml.core import EsphomeyamlError
from esphomeyaml.helpers import resolve_ip_address, indent, color
from esphomeyaml.py_compat import text_type, IS_PY2, byte_to_bytes, char_to_byte, format_bytes
from esphomeyaml.util import safe_print
from esphome import const
import esphome.api.api_pb2 as pb
from esphome.const import CONF_PASSWORD, CONF_PORT
from esphome.core import EsphomeError
from esphome.helpers import resolve_ip_address, indent, color
from esphome.py_compat import text_type, IS_PY2, byte_to_bytes, char_to_byte, format_bytes
from esphome.util import safe_print
_LOGGER = logging.getLogger(__name__)
class APIConnectionError(EsphomeyamlError):
class APIConnectionError(EsphomeError):
pass
@ -179,11 +179,11 @@ class APIClient(threading.Thread):
try:
ip = resolve_ip_address(self._address)
except EsphomeyamlError as err:
except EsphomeError as err:
_LOGGER.warning("Error resolving IP address of %s. Is it connected to WiFi?",
self._address)
_LOGGER.warning("(If this error persists, please set a static IP address: "
"https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips)")
"https://esphome.io/components/wifi.html#manual-ips)")
raise APIConnectionError(err)
_LOGGER.info("Connecting to %s:%s (%s)", self._address, self._port, ip)
@ -200,7 +200,7 @@ class APIClient(threading.Thread):
self._socket_open_event.set()
hello = pb.HelloRequest()
hello.client_info = 'esphomeyaml v{}'.format(const.__version__)
hello.client_info = 'ESPHome v{}'.format(const.__version__)
try:
resp = self._send_message_await_response(hello, pb.HelloResponse)
except APIConnectionError as err:
@ -423,7 +423,7 @@ def run_logs(config, address):
conf = config['api']
port = conf[CONF_PORT]
password = conf[CONF_PASSWORD]
_LOGGER.info("Starting log output from %s using esphomelib API", address)
_LOGGER.info("Starting log output from %s using esphome API", address)
cli = APIClient(address, port, password)
stopping = False

38
esphomeyaml/automation.py → esphome/automation.py

@ -2,16 +2,16 @@ import copy
import voluptuous as vol
import esphomeyaml.config_validation as cv
from esphomeyaml.const import CONF_ABOVE, CONF_ACTION_ID, CONF_AND, CONF_AUTOMATION_ID, \
import esphome.config_validation as cv
from esphome.const import CONF_ABOVE, CONF_ACTION_ID, CONF_AND, CONF_AUTOMATION_ID, \
CONF_BELOW, CONF_CONDITION, CONF_CONDITION_ID, CONF_DELAY, CONF_ELSE, CONF_ID, CONF_IF, \
CONF_LAMBDA, CONF_OR, CONF_RANGE, CONF_THEN, CONF_TRIGGER_ID, CONF_WHILE
from esphomeyaml.core import CORE
from esphomeyaml.cpp_generator import Pvariable, TemplateArguments, add, get_variable, \
from esphome.core import CORE
from esphome.cpp_generator import Pvariable, TemplateArguments, add, get_variable, \
process_lambda, templatable
from esphomeyaml.cpp_types import Action, App, Component, PollingComponent, Trigger, bool_, \
esphomelib_ns, float_, uint32, void
from esphomeyaml.util import ServiceRegistry
from esphome.cpp_types import Action, App, Component, PollingComponent, Trigger, bool_, \
esphome_ns, float_, uint32, void
from esphome.util import ServiceRegistry
def maybe_simple_id(*validators):
@ -98,18 +98,18 @@ ACTION_REGISTRY = ServiceRegistry()
CONDITION_REGISTRY = ServiceRegistry()
# pylint: disable=invalid-name
DelayAction = esphomelib_ns.class_('DelayAction', Action, Component)
LambdaAction = esphomelib_ns.class_('LambdaAction', Action)
IfAction = esphomelib_ns.class_('IfAction', Action)
WhileAction = esphomelib_ns.class_('WhileAction', Action)
UpdateComponentAction = esphomelib_ns.class_('UpdateComponentAction', Action)
Automation = esphomelib_ns.class_('Automation')
Condition = esphomelib_ns.class_('Condition')
AndCondition = esphomelib_ns.class_('AndCondition', Condition)
OrCondition = esphomelib_ns.class_('OrCondition', Condition)
RangeCondition = esphomelib_ns.class_('RangeCondition', Condition)
LambdaCondition = esphomelib_ns.class_('LambdaCondition', Condition)
DelayAction = esphome_ns.class_('DelayAction', Action, Component)
LambdaAction = esphome_ns.class_('LambdaAction', Action)
IfAction = esphome_ns.class_('IfAction', Action)
WhileAction = esphome_ns.class_('WhileAction', Action)
UpdateComponentAction = esphome_ns.class_('UpdateComponentAction', Action)
Automation = esphome_ns.class_('Automation')
Condition = esphome_ns.class_('Condition')
AndCondition = esphome_ns.class_('AndCondition', Condition)
OrCondition = esphome_ns.class_('OrCondition', Condition)
RangeCondition = esphome_ns.class_('RangeCondition', Condition)
LambdaCondition = esphome_ns.class_('LambdaCondition', Condition)
def validate_automation(extra_schema=None, extra_validators=None, single=False):

0
esphomeyaml/components/__init__.py → esphome/components/__init__.py

12
esphomeyaml/components/ads1115.py → esphome/components/ads1115.py

@ -1,11 +1,11 @@
import voluptuous as vol
from esphomeyaml.components import i2c, sensor
import esphomeyaml.config_validation as cv
from esphomeyaml.const import CONF_ADDRESS, CONF_ID
from esphomeyaml.cpp_generator import Pvariable
from esphomeyaml.cpp_helpers import setup_component
from esphomeyaml.cpp_types import App, Component
from esphome.components import i2c, sensor
import esphome.config_validation as cv
from esphome.const import CONF_ADDRESS, CONF_ID
from esphome.cpp_generator import Pvariable
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import App, Component
DEPENDENCIES = ['i2c']
MULTI_CONF = True

12
esphomeyaml/components/apds9960.py → esphome/components/apds9960.py

@ -1,11 +1,11 @@
import voluptuous as vol
from esphomeyaml.components import i2c, sensor
import esphomeyaml.config_validation as cv
from esphomeyaml.const import CONF_ADDRESS, CONF_ID, CONF_UPDATE_INTERVAL
from esphomeyaml.cpp_generator import Pvariable, add
from esphomeyaml.cpp_helpers import setup_component
from esphomeyaml.cpp_types import App, PollingComponent
from esphome.components import i2c, sensor
import esphome.config_validation as cv
from esphome.const import CONF_ADDRESS, CONF_ID, CONF_UPDATE_INTERVAL
from esphome.cpp_generator import Pvariable, add
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import App, PollingComponent
DEPENDENCIES = ['i2c']
MULTI_CONF = True

18
esphomeyaml/components/api.py → esphome/components/api.py

@ -1,15 +1,15 @@
import voluptuous as vol
from esphomeyaml.automation import ACTION_REGISTRY
import esphomeyaml.config_validation as cv
from esphomeyaml.const import CONF_DATA, CONF_DATA_TEMPLATE, CONF_ID, CONF_PASSWORD, CONF_PORT, \
CONF_SERVICE, CONF_VARIABLES, CONF_REBOOT_TIMEOUT
from esphomeyaml.core import CORE
from esphomeyaml.cpp_generator import Pvariable, add, get_variable, process_lambda
from esphomeyaml.cpp_helpers import setup_component
from esphomeyaml.cpp_types import Action, App, Component, StoringController, esphomelib_ns
from esphome.automation import ACTION_REGISTRY
import esphome.config_validation as cv
from esphome.const import CONF_DATA, CONF_DATA_TEMPLATE, CONF_ID, CONF_PASSWORD, CONF_PORT, \
CONF_REBOOT_TIMEOUT, CONF_SERVICE, CONF_VARIABLES
from esphome.core import CORE
from esphome.cpp_generator import Pvariable, add, get_variable, process_lambda
from esphome.cpp_helpers import setup_component
from esphome.cpp_types import Action, App, Component, StoringController, esphome_ns
api_ns = esphomelib_ns.namespace('api')
api_ns = esphome_ns.namespace('api')
APIServer = api_ns.class_('APIServer', Component, StoringController)
HomeAssistantServiceCallAction = api_ns.class_('HomeAssistantServiceCallAction', Action)
KeyValuePair = api_ns.class_('KeyValuePair')

26
esphomeyaml/components/binary_sensor/__init__.py → esphome/components/binary_sensor/__init__.py

@ -1,21 +1,19 @@
import voluptuous as vol
from esphomeyaml import automation, core
from esphomeyaml.automation import CONDITION_REGISTRY, Condition, maybe_simple_id
from esphomeyaml.components import mqtt
from esphomeyaml.components.mqtt import setup_mqtt_component
import esphomeyaml.config_validation as cv
from esphomeyaml.const import CONF_DELAYED_OFF, CONF_DELAYED_ON, CONF_DEVICE_CLASS, CONF_FILTERS, \
from esphome import automation, core
from esphome.automation import CONDITION_REGISTRY, Condition, maybe_simple_id
from esphome.components import mqtt
from esphome.components.mqtt import setup_mqtt_component
import esphome.config_validation as cv
from esphome.const import CONF_DELAYED_OFF, CONF_DELAYED_ON, CONF_DEVICE_CLASS, CONF_FILTERS, \
CONF_HEARTBEAT, CONF_ID, CONF_INTERNAL, CONF_INVALID_COOLDOWN, CONF_INVERT, CONF_INVERTED, \
CONF_LAMBDA, CONF_MAX_LENGTH, CONF_MIN_LENGTH, CONF_MQTT_ID, CONF_ON_CLICK, \
CONF_ON_DOUBLE_CLICK, CONF_ON_MULTI_CLICK, CONF_ON_PRESS, CONF_ON_RELEASE, CONF_ON_STATE, \
CONF_STATE, CONF_TIMING, CONF_TRIGGER_ID
from esphomeyaml.core import CORE
from esphomeyaml.