mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-04 00:51:49 +00:00 
			
		
		
		
	Merge branch 'beta'
This commit is contained in:
		
							
								
								
									
										49
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							@@ -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
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
								
							@@ -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
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/ISSUE_TEMPLATE/new-integration.md
									
									
									
									
										vendored
									
									
								
							@@ -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
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							@@ -3,8 +3,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
**Related issue (if applicable):** fixes <link to issue>
 | 
					**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 [esphome-docs](https://github.com/esphome/esphome-docs) with documentation (if applicable):** esphome/esphome-docs#<esphome-docs 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-core](https://github.com/esphome/esphome-core) with C++ framework changes (if applicable):** esphome/esphome-core#<esphome-core PR number goes here>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Checklist:
 | 
					## Checklist:
 | 
				
			||||||
  - [ ] The code change is tested and works locally.
 | 
					  - [ ] The code change is tested and works locally.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -105,4 +105,4 @@ venv.bak/
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config/
 | 
					config/
 | 
				
			||||||
tests/build/
 | 
					tests/build/
 | 
				
			||||||
tests/.esphomeyaml/
 | 
					tests/.esphome/
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										519
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										519
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							@@ -2,293 +2,126 @@
 | 
				
			|||||||
# Based on https://gitlab.com/hassio-addons/addon-node-red/blob/master/.gitlab-ci.yml
 | 
					# Based on https://gitlab.com/hassio-addons/addon-node-red/blob/master/.gitlab-ci.yml
 | 
				
			||||||
variables:
 | 
					variables:
 | 
				
			||||||
  DOCKER_DRIVER: overlay2
 | 
					  DOCKER_DRIVER: overlay2
 | 
				
			||||||
 | 
					  DOCKER_HOST: tcp://docker:2375/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
stages:
 | 
					stages:
 | 
				
			||||||
  - lint
 | 
					  - lint
 | 
				
			||||||
  - test
 | 
					  - test
 | 
				
			||||||
  - build
 | 
					 | 
				
			||||||
  - deploy
 | 
					  - deploy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.lint: &lint
 | 
					.lint: &lint
 | 
				
			||||||
 | 
					  image: esphome/esphome-base-amd64
 | 
				
			||||||
  stage: lint
 | 
					  stage: lint
 | 
				
			||||||
  before_script:
 | 
					  before_script:
 | 
				
			||||||
    - pip install -e .
 | 
					    - pip install -e .
 | 
				
			||||||
 | 
					    - pip install flake8==3.6.0 pylint==1.9.4 pillow
 | 
				
			||||||
  tags:
 | 
					  tags:
 | 
				
			||||||
    - python2.7
 | 
					    - docker
 | 
				
			||||||
    - esphomeyaml-lint
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
.test: &test
 | 
					.test: &test
 | 
				
			||||||
 | 
					  image: esphome/esphome-base-amd64
 | 
				
			||||||
  stage: test
 | 
					  stage: test
 | 
				
			||||||
  before_script:
 | 
					  before_script:
 | 
				
			||||||
    - pip install -e .
 | 
					    - pip install -e .
 | 
				
			||||||
  tags:
 | 
					  tags:
 | 
				
			||||||
    - python2.7
 | 
					    - docker
 | 
				
			||||||
    - esphomeyaml-test
 | 
					 | 
				
			||||||
  variables:
 | 
					  variables:
 | 
				
			||||||
    TZ: UTC
 | 
					    TZ: UTC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.docker-builder: &docker-builder
 | 
					.docker-base: &docker-base
 | 
				
			||||||
 | 
					  image: esphome/esphome-base-builder
 | 
				
			||||||
  before_script:
 | 
					  before_script:
 | 
				
			||||||
    - docker info
 | 
					    - docker info
 | 
				
			||||||
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
 | 
					    - docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
 | 
				
			||||||
 | 
					  script:
 | 
				
			||||||
 | 
					    - docker run --rm --privileged hassioaddons/qemu-user-static:latest
 | 
				
			||||||
 | 
					    - TAG="${CI_COMMIT_TAG#v}"
 | 
				
			||||||
 | 
					    - TAG="${TAG:-${CI_COMMIT_SHA:0:7}}"
 | 
				
			||||||
 | 
					    - echo "Tag ${TAG}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - |
 | 
				
			||||||
 | 
					      if [[ "${IS_HASSIO}" == "YES" ]]; then
 | 
				
			||||||
 | 
					        BUILD_FROM=esphome/esphome-hassio-base-${BUILD_ARCH}:1.2.1
 | 
				
			||||||
 | 
					        BUILD_TO=esphome/esphome-hassio-${BUILD_ARCH}
 | 
				
			||||||
 | 
					        DOCKERFILE=docker/Dockerfile.hassio
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        BUILD_FROM=esphome/esphome-base-${BUILD_ARCH}:1.2.1
 | 
				
			||||||
 | 
					        if [[ "${BUILD_ARCH}" == "amd64" ]]; then
 | 
				
			||||||
 | 
					          BUILD_TO=esphome/esphome
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          BUILD_TO=esphome/esphome-${BUILD_ARCH}
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        DOCKERFILE=docker/Dockerfile
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - |
 | 
				
			||||||
 | 
					      docker build \
 | 
				
			||||||
 | 
					        --build-arg "BUILD_FROM=${BUILD_FROM}" \
 | 
				
			||||||
 | 
					        --build-arg "BUILD_VERSION=${TAG}" \
 | 
				
			||||||
 | 
					        --tag "${BUILD_TO}:${TAG}" \
 | 
				
			||||||
 | 
					        --file "${DOCKERFILE}" \
 | 
				
			||||||
 | 
					        .
 | 
				
			||||||
 | 
					    - |
 | 
				
			||||||
 | 
					      if [[ "${RELEASE}" = "YES" ]]; then
 | 
				
			||||||
 | 
					        echo "Pushing to ${BUILD_TO}:${TAG}"
 | 
				
			||||||
 | 
					        docker push "${BUILD_TO}:${TAG}"
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    - |
 | 
				
			||||||
 | 
					      if [[ "${LATEST}" = "YES" ]]; then
 | 
				
			||||||
 | 
					        echo "Pushing to :latest"
 | 
				
			||||||
 | 
					        docker tag ${BUILD_TO}:${TAG} ${BUILD_TO}:latest
 | 
				
			||||||
 | 
					        docker push ${BUILD_TO}:latest
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    - |
 | 
				
			||||||
 | 
					      if [[ "${BETA}" = "YES" ]]; then
 | 
				
			||||||
 | 
					        echo "Pushing to :beta"
 | 
				
			||||||
 | 
					        docker tag \
 | 
				
			||||||
 | 
					          ${BUILD_TO}:${TAG} \
 | 
				
			||||||
 | 
					          ${BUILD_TO}:beta
 | 
				
			||||||
 | 
					        docker push ${BUILD_TO}:beta
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    - |
 | 
				
			||||||
 | 
					      if [[ "${DEV}" = "YES" ]]; then
 | 
				
			||||||
 | 
					        echo "Pushing to :dev"
 | 
				
			||||||
 | 
					        docker tag \
 | 
				
			||||||
 | 
					          ${BUILD_TO}:${TAG} \
 | 
				
			||||||
 | 
					          ${BUILD_TO}:dev
 | 
				
			||||||
 | 
					        docker push ${BUILD_TO}:dev
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
  services:
 | 
					  services:
 | 
				
			||||||
    - docker:dind
 | 
					    - docker:dind
 | 
				
			||||||
  tags:
 | 
					  tags:
 | 
				
			||||||
    - hassio-builder
 | 
					    - docker
 | 
				
			||||||
 | 
					  stage: deploy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
flake8:
 | 
					flake8:
 | 
				
			||||||
  <<: *lint
 | 
					  <<: *lint
 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
    - flake8 esphomeyaml
 | 
					    - flake8 esphome
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pylint:
 | 
					pylint:
 | 
				
			||||||
  <<: *lint
 | 
					  <<: *lint
 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
    - pylint esphomeyaml
 | 
					    - pylint esphome
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test1:
 | 
					test1:
 | 
				
			||||||
  <<: *test
 | 
					  <<: *test
 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
    - esphomeyaml tests/test1.yaml compile
 | 
					    - esphome tests/test1.yaml compile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test2:
 | 
					test2:
 | 
				
			||||||
  <<: *test
 | 
					  <<: *test
 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
    - esphomeyaml tests/test2.yaml compile
 | 
					    - esphome tests/test2.yaml compile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.build-hassio: &build-hassio
 | 
					test3:
 | 
				
			||||||
  <<: *docker-builder
 | 
					  <<: *test
 | 
				
			||||||
  stage: build
 | 
					 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
    - docker run --rm --privileged hassioaddons/qemu-user-static:latest
 | 
					    - esphome tests/test3.yaml compile
 | 
				
			||||||
    - BUILD_FROM=hassioaddons/ubuntu-base-${ADDON_ARCH}:2.2.0
 | 
					 | 
				
			||||||
    - 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
 | 
					 | 
				
			||||||
  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).+@/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# 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
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
.deploy-pypi: &deploy-pypi
 | 
					.deploy-pypi: &deploy-pypi
 | 
				
			||||||
  stage: deploy
 | 
					  stage: deploy
 | 
				
			||||||
 | 
					  image: python:2.7
 | 
				
			||||||
  before_script:
 | 
					  before_script:
 | 
				
			||||||
  - pip install -e .
 | 
					  - pip install -e .
 | 
				
			||||||
  - pip install twine
 | 
					  - pip install twine
 | 
				
			||||||
@@ -296,8 +129,7 @@ deploy-beta:amd64:
 | 
				
			|||||||
  - python setup.py sdist
 | 
					  - python setup.py sdist
 | 
				
			||||||
  - twine upload dist/*
 | 
					  - twine upload dist/*
 | 
				
			||||||
  tags:
 | 
					  tags:
 | 
				
			||||||
  - python2.7
 | 
					  - docker
 | 
				
			||||||
  - esphomeyaml-test
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
deploy-release:pypi:
 | 
					deploy-release:pypi:
 | 
				
			||||||
  <<: *deploy-pypi
 | 
					  <<: *deploy-pypi
 | 
				
			||||||
@@ -312,3 +144,204 @@ deploy-beta:pypi:
 | 
				
			|||||||
    - /^v\d+\.\d+\.\d+b\d+$/
 | 
					    - /^v\d+\.\d+\.\d+b\d+$/
 | 
				
			||||||
  except:
 | 
					  except:
 | 
				
			||||||
    - /^(?!rc).+@/
 | 
					    - /^(?!rc).+@/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.latest: &latest
 | 
				
			||||||
 | 
					  <<: *docker-base
 | 
				
			||||||
 | 
					  only:
 | 
				
			||||||
 | 
					  - /^v([0-9\.]+)$/
 | 
				
			||||||
 | 
					  except:
 | 
				
			||||||
 | 
					  - branches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.latest-vars: &latest-vars
 | 
				
			||||||
 | 
					  RELEASE: YES
 | 
				
			||||||
 | 
					  LATEST: YES
 | 
				
			||||||
 | 
					  # Also push to beta tag
 | 
				
			||||||
 | 
					  BETA: YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.beta: &beta
 | 
				
			||||||
 | 
					  <<: *docker-base
 | 
				
			||||||
 | 
					  only:
 | 
				
			||||||
 | 
					  - /^v([0-9\.]+b\d+)$/
 | 
				
			||||||
 | 
					  except:
 | 
				
			||||||
 | 
					  - branches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.beta-vars: &beta-vars
 | 
				
			||||||
 | 
					  RELEASE: YES
 | 
				
			||||||
 | 
					  BETA: YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.dev: &dev
 | 
				
			||||||
 | 
					  <<: *docker-base
 | 
				
			||||||
 | 
					  only:
 | 
				
			||||||
 | 
					  - dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.dev-vars: &dev-vars
 | 
				
			||||||
 | 
					  DEV: YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					aarch64-beta-docker:
 | 
				
			||||||
 | 
					  <<: *beta
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: aarch64
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					aarch64-beta-hassio:
 | 
				
			||||||
 | 
					  <<: *beta
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: aarch64
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					aarch64-dev-docker:
 | 
				
			||||||
 | 
					  <<: *dev
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BUILD_ARCH: aarch64
 | 
				
			||||||
 | 
					    DEV: "YES"
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					aarch64-dev-hassio:
 | 
				
			||||||
 | 
					  <<: *dev
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BUILD_ARCH: aarch64
 | 
				
			||||||
 | 
					    DEV: "YES"
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					aarch64-latest-docker:
 | 
				
			||||||
 | 
					  <<: *latest
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: aarch64
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					    LATEST: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					aarch64-latest-hassio:
 | 
				
			||||||
 | 
					  <<: *latest
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: aarch64
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					    LATEST: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					amd64-beta-docker:
 | 
				
			||||||
 | 
					  <<: *beta
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: amd64
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					amd64-beta-hassio:
 | 
				
			||||||
 | 
					  <<: *beta
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: amd64
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					amd64-dev-docker:
 | 
				
			||||||
 | 
					  <<: *dev
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BUILD_ARCH: amd64
 | 
				
			||||||
 | 
					    DEV: "YES"
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					amd64-dev-hassio:
 | 
				
			||||||
 | 
					  <<: *dev
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BUILD_ARCH: amd64
 | 
				
			||||||
 | 
					    DEV: "YES"
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					amd64-latest-docker:
 | 
				
			||||||
 | 
					  <<: *latest
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: amd64
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					    LATEST: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					amd64-latest-hassio:
 | 
				
			||||||
 | 
					  <<: *latest
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: amd64
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					    LATEST: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					armhf-beta-docker:
 | 
				
			||||||
 | 
					  <<: *beta
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: armhf
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					armhf-beta-hassio:
 | 
				
			||||||
 | 
					  <<: *beta
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: armhf
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					armhf-dev-docker:
 | 
				
			||||||
 | 
					  <<: *dev
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BUILD_ARCH: armhf
 | 
				
			||||||
 | 
					    DEV: "YES"
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					armhf-dev-hassio:
 | 
				
			||||||
 | 
					  <<: *dev
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BUILD_ARCH: armhf
 | 
				
			||||||
 | 
					    DEV: "YES"
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					armhf-latest-docker:
 | 
				
			||||||
 | 
					  <<: *latest
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: armhf
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					    LATEST: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					armhf-latest-hassio:
 | 
				
			||||||
 | 
					  <<: *latest
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: armhf
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					    LATEST: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					i386-beta-docker:
 | 
				
			||||||
 | 
					  <<: *beta
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: i386
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					i386-beta-hassio:
 | 
				
			||||||
 | 
					  <<: *beta
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: i386
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					i386-dev-docker:
 | 
				
			||||||
 | 
					  <<: *dev
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BUILD_ARCH: i386
 | 
				
			||||||
 | 
					    DEV: "YES"
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					i386-dev-hassio:
 | 
				
			||||||
 | 
					  <<: *dev
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BUILD_ARCH: i386
 | 
				
			||||||
 | 
					    DEV: "YES"
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					i386-latest-docker:
 | 
				
			||||||
 | 
					  <<: *latest
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: i386
 | 
				
			||||||
 | 
					    IS_HASSIO: "NO"
 | 
				
			||||||
 | 
					    LATEST: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 | 
					i386-latest-hassio:
 | 
				
			||||||
 | 
					  <<: *latest
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    BETA: "YES"
 | 
				
			||||||
 | 
					    BUILD_ARCH: i386
 | 
				
			||||||
 | 
					    IS_HASSIO: "YES"
 | 
				
			||||||
 | 
					    LATEST: "YES"
 | 
				
			||||||
 | 
					    RELEASE: "YES"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -8,23 +8,24 @@ matrix:
 | 
				
			|||||||
      env: TARGET=Lint2.7
 | 
					      env: TARGET=Lint2.7
 | 
				
			||||||
      install: pip install -e . && pip install flake8==3.6.0 pylint==1.9.4 pillow
 | 
					      install: pip install -e . && pip install flake8==3.6.0 pylint==1.9.4 pillow
 | 
				
			||||||
      script:
 | 
					      script:
 | 
				
			||||||
        - flake8 esphomeyaml
 | 
					        - flake8 esphome
 | 
				
			||||||
        - pylint esphomeyaml
 | 
					        - pylint esphome
 | 
				
			||||||
    - python: "3.5.3"
 | 
					    - python: "3.5.3"
 | 
				
			||||||
      env: TARGET=Lint3.5
 | 
					      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
 | 
					      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:
 | 
					      script:
 | 
				
			||||||
        - flake8 esphomeyaml
 | 
					        - flake8 esphome
 | 
				
			||||||
        - pylint esphomeyaml
 | 
					        - pylint esphome
 | 
				
			||||||
    - python: "2.7"
 | 
					    - python: "2.7"
 | 
				
			||||||
      env: TARGET=Test2.7
 | 
					      env: TARGET=Test2.7
 | 
				
			||||||
      install: pip install -e . && pip install flake8==3.6.0 pylint==1.9.4 pillow
 | 
					      install: pip install -e . && pip install flake8==3.6.0 pylint==1.9.4 pillow
 | 
				
			||||||
      script:
 | 
					      script:
 | 
				
			||||||
        - esphomeyaml tests/test1.yaml compile
 | 
					        - esphome tests/test1.yaml compile
 | 
				
			||||||
        - esphomeyaml tests/test2.yaml compile
 | 
					        - esphome tests/test2.yaml compile
 | 
				
			||||||
    - python: "3.5.3"
 | 
					        - esphome tests/test3.yaml compile
 | 
				
			||||||
      env: TARGET=Test3.5
 | 
					    #- python: "3.5.3"
 | 
				
			||||||
      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
 | 
					    #  env: TARGET=Test3.5
 | 
				
			||||||
      script:
 | 
					    #  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
 | 
				
			||||||
        - esphomeyaml tests/test1.yaml compile
 | 
					    #  script:
 | 
				
			||||||
        - esphomeyaml tests/test2.yaml compile
 | 
					    #    - esphome tests/test1.yaml compile
 | 
				
			||||||
 | 
					    #    - esphome tests/test2.yaml compile
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
					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:
 | 
					Things to note when contributing:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 - Please test your changes :)
 | 
					 - Please test your changes :)
 | 
				
			||||||
 - If a new feature is added or an existing user-facing feature is changed, you should also 
 | 
					 - 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.
 | 
					   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
 | 
					 - 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.
 | 
					   which checks if your new feature compiles correctly.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										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 \
 | 
					 | 
				
			||||||
        python-pil \
 | 
					 | 
				
			||||||
        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 .
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
WORKDIR /config
 | 
					 | 
				
			||||||
ENTRYPOINT ["esphomeyaml"]
 | 
					 | 
				
			||||||
CMD ["/config", "dashboard"]
 | 
					 | 
				
			||||||
							
								
								
									
										32
									
								
								MANIFEST.in
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								MANIFEST.in
									
									
									
									
									
								
							@@ -1,17 +1,17 @@
 | 
				
			|||||||
include README.md
 | 
					include README.md
 | 
				
			||||||
include esphomeyaml/dashboard/templates/index.html
 | 
					include esphome/dashboard/templates/index.html
 | 
				
			||||||
include esphomeyaml/dashboard/templates/login.html
 | 
					include esphome/dashboard/templates/login.html
 | 
				
			||||||
include esphomeyaml/dashboard/static/ace.js
 | 
					include esphome/dashboard/static/ace.js
 | 
				
			||||||
include esphomeyaml/dashboard/static/esphomeyaml.css
 | 
					include esphome/dashboard/static/esphome.css
 | 
				
			||||||
include esphomeyaml/dashboard/static/esphomeyaml.js
 | 
					include esphome/dashboard/static/esphome.js
 | 
				
			||||||
include esphomeyaml/dashboard/static/favicon.ico
 | 
					include esphome/dashboard/static/favicon.ico
 | 
				
			||||||
include esphomeyaml/dashboard/static/jquery.min.js
 | 
					include esphome/dashboard/static/jquery.min.js
 | 
				
			||||||
include esphomeyaml/dashboard/static/jquery.validate.min.js
 | 
					include esphome/dashboard/static/jquery.validate.min.js
 | 
				
			||||||
include esphomeyaml/dashboard/static/jquery-ui.min.js
 | 
					include esphome/dashboard/static/jquery-ui.min.js
 | 
				
			||||||
include esphomeyaml/dashboard/static/materialize.min.css
 | 
					include esphome/dashboard/static/materialize.min.css
 | 
				
			||||||
include esphomeyaml/dashboard/static/materialize.min.js
 | 
					include esphome/dashboard/static/materialize.min.js
 | 
				
			||||||
include esphomeyaml/dashboard/static/materialize-stepper.min.css
 | 
					include esphome/dashboard/static/materialize-stepper.min.css
 | 
				
			||||||
include esphomeyaml/dashboard/static/materialize-stepper.min.js
 | 
					include esphome/dashboard/static/materialize-stepper.min.js
 | 
				
			||||||
include esphomeyaml/dashboard/static/mode-yaml.js
 | 
					include esphome/dashboard/static/mode-yaml.js
 | 
				
			||||||
include esphomeyaml/dashboard/static/theme-dreamweaver.js
 | 
					include esphome/dashboard/static/theme-dreamweaver.js
 | 
				
			||||||
include esphomeyaml/dashboard/static/ext-searchbox.js
 | 
					include esphome/dashboard/static/ext-searchbox.js
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								README.md
									
									
									
									
									
								
							@@ -1,38 +1,9 @@
 | 
				
			|||||||
# esphomeyaml for [esphomelib](https://github.com/OttoWinter/esphomelib)
 | 
					# ESPHome [](https://travis-ci.org/esphome/esphome) [](https://discord.gg/KhAMKrd) [](https://GitHub.com/esphome/esphome/releases/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Getting Started Guide: https://esphomelib.com/esphomeyaml/guides/getting_started_command_line.html
 | 
					[](https://esphome.io/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Available Components: https://esphomelib.com/esphomeyaml/index.html
 | 
					**Documentation:** https://esphome.io/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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).
 | 
					For issues, please go to [the issue tracker](https://github.com/esphome/issues/issues).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esphomeyaml will:
 | 
					For feature requests, please see [feature requests](https://github.com/esphome/feature-requests/issues).
 | 
				
			||||||
 | 
					 | 
				
			||||||
 * 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.
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								docker/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docker/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					ARG BUILD_FROM=esphome/esphome-base-amd64:1.2.1
 | 
				
			||||||
 | 
					FROM ${BUILD_FROM}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY . .
 | 
				
			||||||
 | 
					RUN \
 | 
				
			||||||
 | 
					    pip2 install --no-cache-dir --no-binary :all: -e .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WORKDIR /config
 | 
				
			||||||
 | 
					ENTRYPOINT ["esphome"]
 | 
				
			||||||
 | 
					CMD ["/config", "dashboard"]
 | 
				
			||||||
@@ -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
 | 
					 | 
				
			||||||
@@ -1,75 +1,20 @@
 | 
				
			|||||||
ARG BUILD_FROM=hassioaddons/ubuntu-base:2.2.0
 | 
					ARG BUILD_FROM=esphome/esphome-hassio-base-amd64:1.2.1
 | 
				
			||||||
# hadolint ignore=DL3006
 | 
					 | 
				
			||||||
FROM ${BUILD_FROM}
 | 
					FROM ${BUILD_FROM}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set shell
 | 
					 | 
				
			||||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Copy root filesystem
 | 
					# Copy root filesystem
 | 
				
			||||||
COPY esphomeyaml-edge/rootfs /
 | 
					COPY docker/rootfs/ /
 | 
				
			||||||
COPY setup.py setup.cfg MANIFEST.in /opt/esphomeyaml/
 | 
					COPY setup.py setup.cfg MANIFEST.in /opt/esphome/
 | 
				
			||||||
COPY esphomeyaml /opt/esphomeyaml/esphomeyaml
 | 
					COPY esphome /opt/esphome/esphome
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RUN \
 | 
					RUN \
 | 
				
			||||||
    # Temporarily move nginx.conf (otherwise dpkg fails)
 | 
					    pip2 install --no-cache-dir --no-binary :all: -e /opt/esphome
 | 
				
			||||||
    mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bkp \
 | 
					 | 
				
			||||||
    # Install add-on dependencies
 | 
					 | 
				
			||||||
    && 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 \
 | 
					 | 
				
			||||||
        # Ping for dashboard online/offline status
 | 
					 | 
				
			||||||
        iputils-ping \
 | 
					 | 
				
			||||||
        # 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 \
 | 
					 | 
				
			||||||
        /tmp/* \
 | 
					 | 
				
			||||||
        /var/{cache,log}/* \
 | 
					 | 
				
			||||||
        /var/lib/apt/lists/* \
 | 
					 | 
				
			||||||
        /opt/pio/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Build arugments
 | 
					# Build arguments
 | 
				
			||||||
ARG BUILD_ARCH=amd64
 | 
					ARG BUILD_VERSION=dev
 | 
				
			||||||
ARG BUILD_DATE
 | 
					 | 
				
			||||||
ARG BUILD_REF
 | 
					 | 
				
			||||||
ARG BUILD_VERSION
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Labels
 | 
					# Labels
 | 
				
			||||||
LABEL \
 | 
					LABEL \
 | 
				
			||||||
    io.hass.name="esphomeyaml" \
 | 
					    io.hass.name="ESPHome" \
 | 
				
			||||||
    io.hass.description="Manage and program ESP8266/ESP32 microcontrollers through YAML configuration files" \
 | 
					    io.hass.description="Manage and program ESP8266/ESP32 microcontrollers through YAML configuration files" \
 | 
				
			||||||
    io.hass.arch="${BUILD_ARCH}" \
 | 
					 | 
				
			||||||
    io.hass.type="addon" \
 | 
					    io.hass.type="addon" \
 | 
				
			||||||
    io.hass.version=${BUILD_VERSION} \
 | 
					    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"
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								docker/hooks/build
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								docker/hooks/build
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					#!/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}"
 | 
				
			||||||
 | 
					echo "PWD: $PWD"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ ${IS_HASSIO} = "YES" ]]; then
 | 
				
			||||||
 | 
					    docker build \
 | 
				
			||||||
 | 
					      --build-arg "BUILD_FROM=esphome/esphome-hassio-base-${BUILD_ARCH}:1.2.1" \
 | 
				
			||||||
 | 
					      --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.2.1" \
 | 
				
			||||||
 | 
					      -t "${IMAGE_NAME}" -f ../docker/Dockerfile ..
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
							
								
								
									
										18
									
								
								docker/hooks/pre_build
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								docker/hooks/pre_build
									
									
									
									
									
										Executable file
									
								
							@@ -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
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
#!/usr/bin/with-contenv bash
 | 
					#!/usr/bin/with-contenv bash
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# Community Hass.io Add-ons: esphomeyaml
 | 
					# Community Hass.io Add-ons: ESPHome
 | 
				
			||||||
# This files check if all user configuration requirements are met
 | 
					# This files check if all user configuration requirements are met
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
@@ -22,7 +22,7 @@ if hass.config.true 'ssl'; then
 | 
				
			|||||||
            text="You enabled encrypted connections using the \"ssl\": true option.
 | 
					            text="You enabled encrypted connections using the \"ssl\": true option.
 | 
				
			||||||
            However, the SSL files \"$(hass.config.get 'certfile')\" and \"$(hass.config.get 'keyfile')\"
 | 
					            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
 | 
					            were not found. If you're using Hass.io on your local network and don't want
 | 
				
			||||||
            to encrypt connections to the esphomeyaml dashboard, you can manually disable
 | 
					            to encrypt connections to the ESPHome dashboard, you can manually disable
 | 
				
			||||||
            SSL by setting \"ssl\" to false."
 | 
					            SSL by setting \"ssl\" to false."
 | 
				
			||||||
            hass.die "${text}"
 | 
					            hass.die "${text}"
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/usr/bin/with-contenv bash
 | 
					#!/usr/bin/with-contenv bash
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# Community Hass.io Add-ons: esphomeyaml
 | 
					# Community Hass.io Add-ons: ESPHome
 | 
				
			||||||
# Configures NGINX for use with esphomeyaml
 | 
					# Configures NGINX for use with ESPHome
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
source /usr/lib/hassio-addons/base.sh
 | 
					source /usr/lib/hassio-addons/base.sh
 | 
				
			||||||
@@ -1,14 +1,14 @@
 | 
				
			|||||||
#!/usr/bin/with-contenv bash
 | 
					#!/usr/bin/with-contenv bash
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# Community Hass.io Add-ons: esphomeyaml
 | 
					# Community Hass.io Add-ons: ESPHome
 | 
				
			||||||
# This files installs the user esphomeyaml version if specified
 | 
					# This files installs the user ESPHome version if specified
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
source /usr/lib/hassio-addons/base.sh
 | 
					source /usr/lib/hassio-addons/base.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
declare esphomeyaml_version
 | 
					declare esphome_version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if hass.config.has_value 'esphomeyaml_version'; then
 | 
					if hass.config.has_value 'esphome_version'; then
 | 
				
			||||||
    esphomeyaml_version=$(hass.config.get 'esphomeyaml_version')
 | 
					    esphome_version=$(hass.config.get 'esphome_version')
 | 
				
			||||||
    pip2 install --no-cache-dir --no-binary :all: "https://github.com/OttoWinter/esphomeyaml/archive/${esphomeyaml_version}.zip"
 | 
					    pip2 install --no-cache-dir --no-binary :all: "https://github.com/esphome/esphome/archive/${esphome_version}.zip"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
							
								
								
									
										13
									
								
								docker/rootfs/etc/cont-init.d/40-migrate.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								docker/rootfs/etc/cont-init.d/40-migrate.sh
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
@@ -13,9 +13,9 @@ http {
 | 
				
			|||||||
    sendfile           on;
 | 
					    sendfile           on;
 | 
				
			||||||
    keepalive_timeout  65;
 | 
					    keepalive_timeout  65;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    upstream esphomeyaml {
 | 
					    upstream esphome {
 | 
				
			||||||
        ip_hash;
 | 
					        ip_hash;
 | 
				
			||||||
        server unix:/var/run/esphomeyaml.sock;
 | 
					        server unix:/var/run/esphome.sock;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    map $http_upgrade $connection_upgrade {
 | 
					    map $http_upgrade $connection_upgrade {
 | 
				
			||||||
        default upgrade;
 | 
					        default upgrade;
 | 
				
			||||||
@@ -45,7 +45,7 @@ http {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        location / {
 | 
					        location / {
 | 
				
			||||||
            proxy_redirect off;
 | 
					            proxy_redirect off;
 | 
				
			||||||
            proxy_pass http://esphomeyaml;
 | 
					            proxy_pass http://esphome;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            proxy_http_version 1.1;
 | 
					            proxy_http_version 1.1;
 | 
				
			||||||
            proxy_set_header Upgrade $http_upgrade;
 | 
					            proxy_set_header Upgrade $http_upgrade;
 | 
				
			||||||
@@ -13,9 +13,9 @@ http {
 | 
				
			|||||||
    sendfile           on;
 | 
					    sendfile           on;
 | 
				
			||||||
    keepalive_timeout  65;
 | 
					    keepalive_timeout  65;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    upstream esphomeyaml {
 | 
					    upstream esphome {
 | 
				
			||||||
        ip_hash;
 | 
					        ip_hash;
 | 
				
			||||||
        server unix:/var/run/esphomeyaml.sock;
 | 
					        server unix:/var/run/esphome.sock;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    map $http_upgrade $connection_upgrade {
 | 
					    map $http_upgrade $connection_upgrade {
 | 
				
			||||||
        default upgrade;
 | 
					        default upgrade;
 | 
				
			||||||
@@ -29,7 +29,7 @@ http {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        location / {
 | 
					        location / {
 | 
				
			||||||
            proxy_redirect off;
 | 
					            proxy_redirect off;
 | 
				
			||||||
            proxy_pass http://esphomeyaml;
 | 
					            proxy_pass http://esphome;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            proxy_http_version 1.1;
 | 
					            proxy_http_version 1.1;
 | 
				
			||||||
            proxy_set_header Upgrade $http_upgrade;
 | 
					            proxy_set_header Upgrade $http_upgrade;
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/usr/bin/execlineb -S0
 | 
					#!/usr/bin/execlineb -S0
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# Community Hass.io Add-ons: esphomeyaml
 | 
					# Community Hass.io Add-ons: ESPHome
 | 
				
			||||||
# Take down the S6 supervision tree when esphomeyaml fails
 | 
					# Take down the S6 supervision tree when ESPHome fails
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
if -n { s6-test $# -ne 0 }
 | 
					if -n { s6-test $# -ne 0 }
 | 
				
			||||||
if -n { s6-test ${1} -eq 256 }
 | 
					if -n { s6-test ${1} -eq 256 }
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/usr/bin/with-contenv bash
 | 
					#!/usr/bin/with-contenv bash
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# Community Hass.io Add-ons: esphomeyaml
 | 
					# Community Hass.io Add-ons: ESPHome
 | 
				
			||||||
# Runs the esphomeyaml dashboard
 | 
					# Runs the ESPHome dashboard
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
source /usr/lib/hassio-addons/base.sh
 | 
					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
 | 
					    export DISABLE_HA_AUTHENTICATION=true
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
hass.log.info "Starting esphomeyaml dashboard..."
 | 
					hass.log.info "Starting ESPHome dashboard..."
 | 
				
			||||||
exec esphomeyaml /config/esphomeyaml dashboard --socket /var/run/esphomeyaml.sock --hassio
 | 
					exec esphome /config/esphome dashboard --socket /var/run/esphome.sock --hassio
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
#!/usr/bin/execlineb -S0
 | 
					#!/usr/bin/execlineb -S0
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# Community Hass.io Add-ons: esphomeyaml
 | 
					# Community Hass.io Add-ons: ESPHome
 | 
				
			||||||
# Take down the S6 supervision tree when NGINX fails
 | 
					# Take down the S6 supervision tree when NGINX fails
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
if -n { s6-test $# -ne 0 }
 | 
					if -n { s6-test $# -ne 0 }
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
#!/usr/bin/with-contenv bash
 | 
					#!/usr/bin/with-contenv bash
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# Community Hass.io Add-ons: esphomeyaml
 | 
					# Community Hass.io Add-ons: ESPHome
 | 
				
			||||||
# Runs the NGINX proxy
 | 
					# Runs the NGINX proxy
 | 
				
			||||||
# ==============================================================================
 | 
					# ==============================================================================
 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
@@ -8,22 +8,22 @@ import os
 | 
				
			|||||||
import random
 | 
					import random
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import const, core_config, mqtt, platformio_api, wizard, writer, yaml_util
 | 
					from esphome import const, core_config, mqtt, platformio_api, wizard, writer, yaml_util
 | 
				
			||||||
from esphomeyaml.api.client import run_logs
 | 
					from esphome.api.client import run_logs
 | 
				
			||||||
from esphomeyaml.config import get_component, iter_components, read_config, strip_default_ids
 | 
					from esphome.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, \
 | 
					from esphome.const import CONF_BAUD_RATE, CONF_BROKER, CONF_ESPHOME, CONF_LOGGER, \
 | 
				
			||||||
    CONF_BROKER
 | 
					    CONF_USE_CUSTOM_CODE
 | 
				
			||||||
from esphomeyaml.core import CORE, EsphomeyamlError
 | 
					from esphome.core import CORE, EsphomeError
 | 
				
			||||||
from esphomeyaml.cpp_generator import Expression, RawStatement, add, statement
 | 
					from esphome.cpp_generator import Expression, RawStatement, add, statement
 | 
				
			||||||
from esphomeyaml.helpers import color, indent
 | 
					from esphome.helpers import color, indent
 | 
				
			||||||
from esphomeyaml.py_compat import safe_input, text_type, IS_PY2
 | 
					from esphome.py_compat import IS_PY2, safe_input, text_type
 | 
				
			||||||
from esphomeyaml.storage_json import StorageJSON, esphomeyaml_storage_path, \
 | 
					from esphome.storage_json import StorageJSON, esphome_storage_path, \
 | 
				
			||||||
    start_update_check_thread, storage_path
 | 
					    start_update_check_thread, storage_path
 | 
				
			||||||
from esphomeyaml.util import run_external_command, safe_print
 | 
					from esphome.util import run_external_command, run_external_process, safe_print
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_LOGGER = logging.getLogger(__name__)
 | 
					_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']
 | 
					                  'i2c']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -127,9 +127,9 @@ def run_miniterm(config, port):
 | 
				
			|||||||
def write_cpp(config):
 | 
					def write_cpp(config):
 | 
				
			||||||
    _LOGGER.info("Generating C++ source...")
 | 
					    _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:
 | 
					    for domain in PRE_INITIALIZE:
 | 
				
			||||||
        if domain == CONF_ESPHOMEYAML or domain not in config:
 | 
					        if domain == CONF_ESPHOME or domain not in config:
 | 
				
			||||||
            continue
 | 
					            continue
 | 
				
			||||||
        CORE.add_job(get_component(domain).to_code, config[domain], domain=domain)
 | 
					        CORE.add_job(get_component(domain).to_code, config[domain], domain=domain)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -143,7 +143,7 @@ def write_cpp(config):
 | 
				
			|||||||
    add(RawStatement(''))
 | 
					    add(RawStatement(''))
 | 
				
			||||||
    all_code = []
 | 
					    all_code = []
 | 
				
			||||||
    for exp in CORE.expressions:
 | 
					    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:
 | 
					            if isinstance(exp, Expression) and not exp.required:
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
        all_code.append(text_type(statement(exp)))
 | 
					        all_code.append(text_type(statement(exp)))
 | 
				
			||||||
@@ -157,9 +157,9 @@ def write_cpp(config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def compile_program(args, config):
 | 
					def compile_program(args, config):
 | 
				
			||||||
    _LOGGER.info("Compiling app...")
 | 
					    _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:
 | 
					    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)
 | 
					    rc = platformio_api.run_compile(config, args.verbose)
 | 
				
			||||||
    if update_check:
 | 
					    if update_check:
 | 
				
			||||||
        thread.join()
 | 
					        thread.join()
 | 
				
			||||||
@@ -167,14 +167,17 @@ def compile_program(args, config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def upload_using_esptool(config, port):
 | 
					def upload_using_esptool(config, port):
 | 
				
			||||||
    import esptool
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    path = os.path.join(CORE.build_path, '.pioenvs', CORE.name, 'firmware.bin')
 | 
					    path = os.path.join(CORE.build_path, '.pioenvs', CORE.name, 'firmware.bin')
 | 
				
			||||||
    cmd = ['esptool.py', '--before', 'default_reset', '--after', 'hard_reset',
 | 
					    cmd = ['esptool.py', '--before', 'default_reset', '--after', 'hard_reset',
 | 
				
			||||||
           '--chip', 'esp8266', '--port', port, 'write_flash', '0x0', path]
 | 
					           '--chip', 'esp8266', '--port', port, 'write_flash', '0x0', path]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if os.environ.get('ESPHOME_USE_SUBPROCESS') is None:
 | 
				
			||||||
 | 
					        import esptool
 | 
				
			||||||
        # pylint: disable=protected-access
 | 
					        # pylint: disable=protected-access
 | 
				
			||||||
        return run_external_command(esptool._main, *cmd)
 | 
					        return run_external_command(esptool._main, *cmd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return run_external_process(*cmd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def upload_program(config, args, host):
 | 
					def upload_program(config, args, host):
 | 
				
			||||||
    # if upload is to a serial port use platformio, otherwise assume ota
 | 
					    # if upload is to a serial port use platformio, otherwise assume ota
 | 
				
			||||||
@@ -183,13 +186,13 @@ def upload_program(config, args, host):
 | 
				
			|||||||
            return upload_using_esptool(config, host)
 | 
					            return upload_using_esptool(config, host)
 | 
				
			||||||
        return platformio_api.run_upload(config, args.verbose, host)
 | 
					        return platformio_api.run_upload(config, args.verbose, host)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from esphomeyaml.components import ota
 | 
					    from esphome.components import ota
 | 
				
			||||||
    from esphomeyaml import espota2
 | 
					    from esphome import espota2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if args.host_port is not None:
 | 
					    if args.host_port is not None:
 | 
				
			||||||
        host_port = args.host_port
 | 
					        host_port = args.host_port
 | 
				
			||||||
    else:
 | 
					    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
 | 
					    verbose = args.verbose
 | 
				
			||||||
    remote_port = ota.get_port(config)
 | 
					    remote_port = ota.get_port(config)
 | 
				
			||||||
@@ -212,7 +215,7 @@ def upload_program(config, args, host):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def show_logs(config, args, port):
 | 
					def show_logs(config, args, port):
 | 
				
			||||||
    if 'logger' not in config:
 | 
					    if 'logger' not in config:
 | 
				
			||||||
        raise EsphomeyamlError("Logger is not configured!")
 | 
					        raise EsphomeError("Logger is not configured!")
 | 
				
			||||||
    if get_port_type(port) == 'SERIAL':
 | 
					    if get_port_type(port) == 'SERIAL':
 | 
				
			||||||
        run_miniterm(config, port)
 | 
					        run_miniterm(config, port)
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
@@ -342,7 +345,7 @@ def command_clean(args, config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def command_hass_config(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("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.")
 | 
					    _LOGGER.info("Please note this is only necessary if you're not using MQTT discovery.")
 | 
				
			||||||
@@ -364,7 +367,7 @@ def command_hass_config(args, config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def command_dashboard(args):
 | 
					def command_dashboard(args):
 | 
				
			||||||
    from esphomeyaml.dashboard import dashboard
 | 
					    from esphome.dashboard import dashboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return dashboard.start_web_server(args)
 | 
					    return dashboard.start_web_server(args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -389,8 +392,8 @@ POST_CONFIG_ACTIONS = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def parse_args(argv):
 | 
					def parse_args(argv):
 | 
				
			||||||
    parser = argparse.ArgumentParser(prog='esphomeyaml')
 | 
					    parser = argparse.ArgumentParser(prog='esphome')
 | 
				
			||||||
    parser.add_argument('-v', '--verbose', help="Enable verbose esphomeyaml logs.",
 | 
					    parser.add_argument('-v', '--verbose', help="Enable verbose esphome logs.",
 | 
				
			||||||
                        action='store_true')
 | 
					                        action='store_true')
 | 
				
			||||||
    parser.add_argument('--dashboard', help="Internal flag to set if the command is run from the "
 | 
					    parser.add_argument('--dashboard', help="Internal flag to set if the command is run from the "
 | 
				
			||||||
                                            "dashboard.", action='store_true')
 | 
					                                            "dashboard.", action='store_true')
 | 
				
			||||||
@@ -441,11 +444,11 @@ def parse_args(argv):
 | 
				
			|||||||
    parser_clean.add_argument('--client-id', help='Manually set the client id.')
 | 
					    parser_clean.add_argument('--client-id', help='Manually set the client id.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    subparsers.add_parser('wizard', help="A helpful setup wizard that will guide "
 | 
					    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('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.")
 | 
					    subparsers.add_parser('clean', help="Delete all temporary build files.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -458,7 +461,7 @@ def parse_args(argv):
 | 
				
			|||||||
    dashboard.add_argument("--open-ui", help="Open the dashboard UI in a browser.",
 | 
					    dashboard.add_argument("--open-ui", help="Open the dashboard UI in a browser.",
 | 
				
			||||||
                           action='store_true')
 | 
					                           action='store_true')
 | 
				
			||||||
    dashboard.add_argument("--hassio",
 | 
					    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.",
 | 
					                                "add-on.",
 | 
				
			||||||
                           action="store_true")
 | 
					                           action="store_true")
 | 
				
			||||||
    dashboard.add_argument("--socket",
 | 
					    dashboard.add_argument("--socket",
 | 
				
			||||||
@@ -471,7 +474,7 @@ def parse_args(argv):
 | 
				
			|||||||
    return parser.parse_args(argv[1:])
 | 
					    return parser.parse_args(argv[1:])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def run_esphomeyaml(argv):
 | 
					def run_esphome(argv):
 | 
				
			||||||
    args = parse_args(argv)
 | 
					    args = parse_args(argv)
 | 
				
			||||||
    CORE.dashboard = args.dashboard
 | 
					    CORE.dashboard = args.dashboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -479,7 +482,7 @@ def run_esphomeyaml(argv):
 | 
				
			|||||||
    if args.command in PRE_CONFIG_ACTIONS:
 | 
					    if args.command in PRE_CONFIG_ACTIONS:
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            return PRE_CONFIG_ACTIONS[args.command](args)
 | 
					            return PRE_CONFIG_ACTIONS[args.command](args)
 | 
				
			||||||
        except EsphomeyamlError as e:
 | 
					        except EsphomeError as e:
 | 
				
			||||||
            _LOGGER.error(e)
 | 
					            _LOGGER.error(e)
 | 
				
			||||||
            return 1
 | 
					            return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -493,7 +496,7 @@ def run_esphomeyaml(argv):
 | 
				
			|||||||
    if args.command in POST_CONFIG_ACTIONS:
 | 
					    if args.command in POST_CONFIG_ACTIONS:
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            return POST_CONFIG_ACTIONS[args.command](args, config)
 | 
					            return POST_CONFIG_ACTIONS[args.command](args, config)
 | 
				
			||||||
        except EsphomeyamlError as e:
 | 
					        except EsphomeError as e:
 | 
				
			||||||
            _LOGGER.error(e)
 | 
					            _LOGGER.error(e)
 | 
				
			||||||
            return 1
 | 
					            return 1
 | 
				
			||||||
    safe_print(u"Unknown command {}".format(args.command))
 | 
					    safe_print(u"Unknown command {}".format(args.command))
 | 
				
			||||||
@@ -502,8 +505,8 @@ def run_esphomeyaml(argv):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        return run_esphomeyaml(sys.argv)
 | 
					        return run_esphome(sys.argv)
 | 
				
			||||||
    except EsphomeyamlError as e:
 | 
					    except EsphomeError as e:
 | 
				
			||||||
        _LOGGER.error(e)
 | 
					        _LOGGER.error(e)
 | 
				
			||||||
        return 1
 | 
					        return 1
 | 
				
			||||||
    except KeyboardInterrupt:
 | 
					    except KeyboardInterrupt:
 | 
				
			||||||
@@ -92,7 +92,7 @@ message DeviceInfoResponse {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // A string describing the date of compilation, this is generated by the compiler
 | 
					  // 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.
 | 
					  // 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;
 | 
					  string compilation_time = 5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // The model of the board. For example NodeMCU
 | 
					  // The model of the board. For example NodeMCU
 | 
				
			||||||
@@ -9,18 +9,18 @@ import time
 | 
				
			|||||||
from typing import Optional  # noqa
 | 
					from typing import Optional  # noqa
 | 
				
			||||||
from google.protobuf import message  # noqa
 | 
					from google.protobuf import message  # noqa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import const
 | 
					from esphome import const
 | 
				
			||||||
import esphomeyaml.api.api_pb2 as pb
 | 
					import esphome.api.api_pb2 as pb
 | 
				
			||||||
from esphomeyaml.const import CONF_PASSWORD, CONF_PORT
 | 
					from esphome.const import CONF_PASSWORD, CONF_PORT
 | 
				
			||||||
from esphomeyaml.core import EsphomeyamlError
 | 
					from esphome.core import EsphomeError
 | 
				
			||||||
from esphomeyaml.helpers import resolve_ip_address, indent, color
 | 
					from esphome.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 esphome.py_compat import text_type, IS_PY2, byte_to_bytes, char_to_byte, format_bytes
 | 
				
			||||||
from esphomeyaml.util import safe_print
 | 
					from esphome.util import safe_print
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_LOGGER = logging.getLogger(__name__)
 | 
					_LOGGER = logging.getLogger(__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class APIConnectionError(EsphomeyamlError):
 | 
					class APIConnectionError(EsphomeError):
 | 
				
			||||||
    pass
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -179,11 +179,11 @@ class APIClient(threading.Thread):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            ip = resolve_ip_address(self._address)
 | 
					            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?",
 | 
					            _LOGGER.warning("Error resolving IP address of %s. Is it connected to WiFi?",
 | 
				
			||||||
                            self._address)
 | 
					                            self._address)
 | 
				
			||||||
            _LOGGER.warning("(If this error persists, please set a static IP 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)
 | 
					            raise APIConnectionError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _LOGGER.info("Connecting to %s:%s (%s)", self._address, self._port, ip)
 | 
					        _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()
 | 
					        self._socket_open_event.set()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        hello = pb.HelloRequest()
 | 
					        hello = pb.HelloRequest()
 | 
				
			||||||
        hello.client_info = 'esphomeyaml v{}'.format(const.__version__)
 | 
					        hello.client_info = 'ESPHome v{}'.format(const.__version__)
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            resp = self._send_message_await_response(hello, pb.HelloResponse)
 | 
					            resp = self._send_message_await_response(hello, pb.HelloResponse)
 | 
				
			||||||
        except APIConnectionError as err:
 | 
					        except APIConnectionError as err:
 | 
				
			||||||
@@ -423,12 +423,14 @@ def run_logs(config, address):
 | 
				
			|||||||
    conf = config['api']
 | 
					    conf = config['api']
 | 
				
			||||||
    port = conf[CONF_PORT]
 | 
					    port = conf[CONF_PORT]
 | 
				
			||||||
    password = conf[CONF_PASSWORD]
 | 
					    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)
 | 
					    cli = APIClient(address, port, password)
 | 
				
			||||||
    stopping = False
 | 
					    stopping = False
 | 
				
			||||||
    retry_timer = []
 | 
					    retry_timer = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    has_connects = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def try_connect(tries=0, is_disconnect=True):
 | 
					    def try_connect(tries=0, is_disconnect=True):
 | 
				
			||||||
        if stopping:
 | 
					        if stopping:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
@@ -451,6 +453,11 @@ def run_logs(config, address):
 | 
				
			|||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        wait_time = min(2**tries, 300)
 | 
					        wait_time = min(2**tries, 300)
 | 
				
			||||||
 | 
					        if not has_connects:
 | 
				
			||||||
 | 
					            _LOGGER.warning(u"Initial connection failed. The ESP might not be connected "
 | 
				
			||||||
 | 
					                            u"to WiFi yet (%s). Re-Trying in %s seconds",
 | 
				
			||||||
 | 
					                            error, wait_time)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
            _LOGGER.warning(u"Couldn't connect to API (%s). Trying to reconnect in %s seconds",
 | 
					            _LOGGER.warning(u"Couldn't connect to API (%s). Trying to reconnect in %s seconds",
 | 
				
			||||||
                            error, wait_time)
 | 
					                            error, wait_time)
 | 
				
			||||||
        timer = threading.Timer(wait_time, functools.partial(try_connect, tries + 1, is_disconnect))
 | 
					        timer = threading.Timer(wait_time, functools.partial(try_connect, tries + 1, is_disconnect))
 | 
				
			||||||
@@ -465,8 +472,6 @@ def run_logs(config, address):
 | 
				
			|||||||
                                  'TCP buffer - This is only cosmetic)')
 | 
					                                  'TCP buffer - This is only cosmetic)')
 | 
				
			||||||
        safe_print(time_ + text)
 | 
					        safe_print(time_ + text)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    has_connects = []
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def on_login():
 | 
					    def on_login():
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            cli.subscribe_logs(on_log, dump_config=not has_connects)
 | 
					            cli.subscribe_logs(on_log, dump_config=not has_connects)
 | 
				
			||||||
@@ -2,16 +2,16 @@ import copy
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ABOVE, CONF_ACTION_ID, CONF_AND, CONF_AUTOMATION_ID, \
 | 
					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_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
 | 
					    CONF_LAMBDA, CONF_OR, CONF_RANGE, CONF_THEN, CONF_TRIGGER_ID, CONF_WHILE, CONF_WAIT_UNTIL
 | 
				
			||||||
from esphomeyaml.core import CORE
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.cpp_generator import ArrayInitializer, Pvariable, TemplateArguments, add, \
 | 
					from esphome.cpp_generator import Pvariable, TemplateArguments, add, get_variable, \
 | 
				
			||||||
    get_variable, process_lambda, templatable
 | 
					    process_lambda, templatable
 | 
				
			||||||
from esphomeyaml.cpp_types import Action, App, Component, PollingComponent, Trigger, \
 | 
					from esphome.cpp_types import Action, App, Component, PollingComponent, Trigger, bool_, \
 | 
				
			||||||
    esphomelib_ns, float_, uint32, void, bool_
 | 
					    esphome_ns, float_, uint32, void
 | 
				
			||||||
from esphomeyaml.util import ServiceRegistry
 | 
					from esphome.util import ServiceRegistry
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def maybe_simple_id(*validators):
 | 
					def maybe_simple_id(*validators):
 | 
				
			||||||
@@ -98,18 +98,19 @@ ACTION_REGISTRY = ServiceRegistry()
 | 
				
			|||||||
CONDITION_REGISTRY = ServiceRegistry()
 | 
					CONDITION_REGISTRY = ServiceRegistry()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# pylint: disable=invalid-name
 | 
					# pylint: disable=invalid-name
 | 
				
			||||||
DelayAction = esphomelib_ns.class_('DelayAction', Action, Component)
 | 
					DelayAction = esphome_ns.class_('DelayAction', Action, Component)
 | 
				
			||||||
LambdaAction = esphomelib_ns.class_('LambdaAction', Action)
 | 
					LambdaAction = esphome_ns.class_('LambdaAction', Action)
 | 
				
			||||||
IfAction = esphomelib_ns.class_('IfAction', Action)
 | 
					IfAction = esphome_ns.class_('IfAction', Action)
 | 
				
			||||||
WhileAction = esphomelib_ns.class_('WhileAction', Action)
 | 
					WhileAction = esphome_ns.class_('WhileAction', Action)
 | 
				
			||||||
UpdateComponentAction = esphomelib_ns.class_('UpdateComponentAction', Action)
 | 
					WaitUntilAction = esphome_ns.class_('WaitUntilAction', Action, Component)
 | 
				
			||||||
Automation = esphomelib_ns.class_('Automation')
 | 
					UpdateComponentAction = esphome_ns.class_('UpdateComponentAction', Action)
 | 
				
			||||||
 | 
					Automation = esphome_ns.class_('Automation')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Condition = esphomelib_ns.class_('Condition')
 | 
					Condition = esphome_ns.class_('Condition')
 | 
				
			||||||
AndCondition = esphomelib_ns.class_('AndCondition', Condition)
 | 
					AndCondition = esphome_ns.class_('AndCondition', Condition)
 | 
				
			||||||
OrCondition = esphomelib_ns.class_('OrCondition', Condition)
 | 
					OrCondition = esphome_ns.class_('OrCondition', Condition)
 | 
				
			||||||
RangeCondition = esphomelib_ns.class_('RangeCondition', Condition)
 | 
					RangeCondition = esphome_ns.class_('RangeCondition', Condition)
 | 
				
			||||||
LambdaCondition = esphomelib_ns.class_('LambdaCondition', Condition)
 | 
					LambdaCondition = esphome_ns.class_('LambdaCondition', Condition)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def validate_automation(extra_schema=None, extra_validators=None, single=False):
 | 
					def validate_automation(extra_schema=None, extra_validators=None, single=False):
 | 
				
			||||||
@@ -125,6 +126,9 @@ def validate_automation(extra_schema=None, extra_validators=None, single=False):
 | 
				
			|||||||
                # First try as a sequence of actions
 | 
					                # First try as a sequence of actions
 | 
				
			||||||
                return [schema({CONF_THEN: value})]
 | 
					                return [schema({CONF_THEN: value})]
 | 
				
			||||||
            except vol.Invalid as err:
 | 
					            except vol.Invalid as err:
 | 
				
			||||||
 | 
					                if err.path and err.path[0] == CONF_THEN:
 | 
				
			||||||
 | 
					                    err.path.pop(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                # Next try as a sequence of automations
 | 
					                # Next try as a sequence of automations
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    return vol.Schema([schema])(value)
 | 
					                    return vol.Schema([schema])(value)
 | 
				
			||||||
@@ -265,6 +269,29 @@ def while_action_to_code(config, action_id, arg_type, template_arg):
 | 
				
			|||||||
    yield action
 | 
					    yield action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def validate_wait_until(value):
 | 
				
			||||||
 | 
					    schema = vol.Schema({
 | 
				
			||||||
 | 
					        vol.Required(CONF_CONDITION): validate_recursive_condition
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    if isinstance(value, dict) and CONF_CONDITION in value:
 | 
				
			||||||
 | 
					        return schema(value)
 | 
				
			||||||
 | 
					    return validate_wait_until({CONF_CONDITION: value})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WAIT_UNTIL_ACTION_SCHEMA = validate_wait_until
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@ACTION_REGISTRY.register(CONF_WAIT_UNTIL, WAIT_UNTIL_ACTION_SCHEMA)
 | 
				
			||||||
 | 
					def wait_until_action_to_code(config, action_id, arg_type, template_arg):
 | 
				
			||||||
 | 
					    for conditions in build_conditions(config[CONF_CONDITION], arg_type):
 | 
				
			||||||
 | 
					        yield None
 | 
				
			||||||
 | 
					    rhs = WaitUntilAction.new(template_arg, conditions)
 | 
				
			||||||
 | 
					    type = WaitUntilAction.template(template_arg)
 | 
				
			||||||
 | 
					    action = Pvariable(action_id, rhs, type=type)
 | 
				
			||||||
 | 
					    add(App.register_component(action))
 | 
				
			||||||
 | 
					    yield action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LAMBDA_ACTION_SCHEMA = cv.lambda_
 | 
					LAMBDA_ACTION_SCHEMA = cv.lambda_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -318,11 +345,10 @@ def build_action(full_config, arg_type):
 | 
				
			|||||||
def build_actions(config, arg_type):
 | 
					def build_actions(config, arg_type):
 | 
				
			||||||
    actions = []
 | 
					    actions = []
 | 
				
			||||||
    for conf in config:
 | 
					    for conf in config:
 | 
				
			||||||
        action = None
 | 
					 | 
				
			||||||
        for action in build_action(conf, arg_type):
 | 
					        for action in build_action(conf, arg_type):
 | 
				
			||||||
            yield None
 | 
					            yield None
 | 
				
			||||||
        actions.append(action)
 | 
					        actions.append(action)
 | 
				
			||||||
    yield ArrayInitializer(*actions, multiline=False)
 | 
					    yield actions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def build_condition(full_config, arg_type):
 | 
					def build_condition(full_config, arg_type):
 | 
				
			||||||
@@ -342,7 +368,7 @@ def build_conditions(config, arg_type):
 | 
				
			|||||||
        for condition in build_condition(conf, arg_type):
 | 
					        for condition in build_condition(conf, arg_type):
 | 
				
			||||||
            yield None
 | 
					            yield None
 | 
				
			||||||
        conditions.append(condition)
 | 
					        conditions.append(condition)
 | 
				
			||||||
    yield ArrayInitializer(*conditions, multiline=False)
 | 
					    yield conditions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def build_automation_(trigger, arg_type, config):
 | 
					def build_automation_(trigger, arg_type, config):
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import i2c, sensor
 | 
					from esphome.components import i2c, sensor
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ADDRESS, CONF_ID
 | 
					from esphome.const import CONF_ADDRESS, CONF_ID
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable
 | 
					from esphome.cpp_generator import Pvariable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component
 | 
					from esphome.cpp_types import App, Component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['i2c']
 | 
					DEPENDENCIES = ['i2c']
 | 
				
			||||||
MULTI_CONF = True
 | 
					MULTI_CONF = True
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import i2c, sensor
 | 
					from esphome.components import i2c, sensor
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ADDRESS, CONF_ID, CONF_UPDATE_INTERVAL
 | 
					from esphome.const import CONF_ADDRESS, CONF_ID, CONF_UPDATE_INTERVAL
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, PollingComponent
 | 
					from esphome.cpp_types import App, PollingComponent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['i2c']
 | 
					DEPENDENCIES = ['i2c']
 | 
				
			||||||
MULTI_CONF = True
 | 
					MULTI_CONF = True
 | 
				
			||||||
@@ -1,15 +1,15 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.automation import ACTION_REGISTRY
 | 
					from esphome.automation import ACTION_REGISTRY
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_DATA, CONF_DATA_TEMPLATE, CONF_ID, CONF_PASSWORD, CONF_PORT, \
 | 
					from esphome.const import CONF_DATA, CONF_DATA_TEMPLATE, CONF_ID, CONF_PASSWORD, CONF_PORT, \
 | 
				
			||||||
    CONF_SERVICE, CONF_VARIABLES, CONF_REBOOT_TIMEOUT
 | 
					    CONF_REBOOT_TIMEOUT, CONF_SERVICE, CONF_VARIABLES
 | 
				
			||||||
from esphomeyaml.core import CORE
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.cpp_generator import ArrayInitializer, Pvariable, add, get_variable, process_lambda
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable, process_lambda
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import Action, App, Component, StoringController, esphomelib_ns
 | 
					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)
 | 
					APIServer = api_ns.class_('APIServer', Component, StoringController)
 | 
				
			||||||
HomeAssistantServiceCallAction = api_ns.class_('HomeAssistantServiceCallAction', Action)
 | 
					HomeAssistantServiceCallAction = api_ns.class_('HomeAssistantServiceCallAction', Action)
 | 
				
			||||||
KeyValuePair = api_ns.class_('KeyValuePair')
 | 
					KeyValuePair = api_ns.class_('KeyValuePair')
 | 
				
			||||||
@@ -74,15 +74,15 @@ def homeassistant_service_to_code(config, action_id, arg_type, template_arg):
 | 
				
			|||||||
    add(act.set_service(config[CONF_SERVICE]))
 | 
					    add(act.set_service(config[CONF_SERVICE]))
 | 
				
			||||||
    if CONF_DATA in config:
 | 
					    if CONF_DATA in config:
 | 
				
			||||||
        datas = [KeyValuePair(k, v) for k, v in config[CONF_DATA].items()]
 | 
					        datas = [KeyValuePair(k, v) for k, v in config[CONF_DATA].items()]
 | 
				
			||||||
        add(act.set_data(ArrayInitializer(*datas)))
 | 
					        add(act.set_data(datas))
 | 
				
			||||||
    if CONF_DATA_TEMPLATE in config:
 | 
					    if CONF_DATA_TEMPLATE in config:
 | 
				
			||||||
        datas = [KeyValuePair(k, v) for k, v in config[CONF_DATA_TEMPLATE].items()]
 | 
					        datas = [KeyValuePair(k, v) for k, v in config[CONF_DATA_TEMPLATE].items()]
 | 
				
			||||||
        add(act.set_data_template(ArrayInitializer(*datas)))
 | 
					        add(act.set_data_template(datas))
 | 
				
			||||||
    if CONF_VARIABLES in config:
 | 
					    if CONF_VARIABLES in config:
 | 
				
			||||||
        datas = []
 | 
					        datas = []
 | 
				
			||||||
        for key, value in config[CONF_VARIABLES].items():
 | 
					        for key, value in config[CONF_VARIABLES].items():
 | 
				
			||||||
            for value_ in process_lambda(value, []):
 | 
					            for value_ in process_lambda(value, []):
 | 
				
			||||||
                yield None
 | 
					                yield None
 | 
				
			||||||
            datas.append(TemplatableKeyValuePair(key, value_))
 | 
					            datas.append(TemplatableKeyValuePair(key, value_))
 | 
				
			||||||
        add(act.set_variables(ArrayInitializer(*datas)))
 | 
					        add(act.set_variables(datas))
 | 
				
			||||||
    yield act
 | 
					    yield act
 | 
				
			||||||
@@ -1,21 +1,19 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import automation, core
 | 
					from esphome import automation, core
 | 
				
			||||||
from esphomeyaml.automation import maybe_simple_id, CONDITION_REGISTRY, Condition
 | 
					from esphome.automation import CONDITION_REGISTRY, Condition, maybe_simple_id
 | 
				
			||||||
from esphomeyaml.components import mqtt
 | 
					from esphome.components import mqtt
 | 
				
			||||||
from esphomeyaml.components.mqtt import setup_mqtt_component
 | 
					from esphome.components.mqtt import setup_mqtt_component
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_DELAYED_OFF, CONF_DELAYED_ON, CONF_DEVICE_CLASS, CONF_FILTERS, \
 | 
					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_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_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_STATE, \
 | 
					    CONF_ON_DOUBLE_CLICK, CONF_ON_MULTI_CLICK, CONF_ON_PRESS, CONF_ON_RELEASE, CONF_ON_STATE, \
 | 
				
			||||||
    CONF_TIMING, CONF_TRIGGER_ID, CONF_ON_STATE
 | 
					    CONF_STATE, CONF_TIMING, CONF_TRIGGER_ID
 | 
				
			||||||
from esphomeyaml.core import CORE
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.cpp_generator import process_lambda, ArrayInitializer, add, Pvariable, \
 | 
					from esphome.cpp_generator import Pvariable, StructInitializer, add, get_variable, process_lambda
 | 
				
			||||||
    StructInitializer, get_variable
 | 
					from esphome.cpp_types import App, Component, Nameable, NoArg, Trigger, bool_, esphome_ns, optional
 | 
				
			||||||
from esphomeyaml.cpp_types import esphomelib_ns, Nameable, Trigger, NoArg, Component, App, bool_, \
 | 
					from esphome.py_compat import string_types
 | 
				
			||||||
    optional
 | 
					 | 
				
			||||||
from esphomeyaml.py_compat import string_types
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEVICE_CLASSES = [
 | 
					DEVICE_CLASSES = [
 | 
				
			||||||
    '', 'battery', 'cold', 'connectivity', 'door', 'garage_door', 'gas',
 | 
					    '', 'battery', 'cold', 'connectivity', 'door', 'garage_door', 'gas',
 | 
				
			||||||
@@ -28,7 +26,7 @@ PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
binary_sensor_ns = esphomelib_ns.namespace('binary_sensor')
 | 
					binary_sensor_ns = esphome_ns.namespace('binary_sensor')
 | 
				
			||||||
BinarySensor = binary_sensor_ns.class_('BinarySensor', Nameable)
 | 
					BinarySensor = binary_sensor_ns.class_('BinarySensor', Nameable)
 | 
				
			||||||
BinarySensorPtr = BinarySensor.operator('ptr')
 | 
					BinarySensorPtr = BinarySensor.operator('ptr')
 | 
				
			||||||
MQTTBinarySensorComponent = binary_sensor_ns.class_('MQTTBinarySensorComponent', mqtt.MQTTComponent)
 | 
					MQTTBinarySensorComponent = binary_sensor_ns.class_('MQTTBinarySensorComponent', mqtt.MQTTComponent)
 | 
				
			||||||
@@ -53,15 +51,15 @@ HeartbeatFilter = binary_sensor_ns.class_('HeartbeatFilter', Filter, Component)
 | 
				
			|||||||
InvertFilter = binary_sensor_ns.class_('InvertFilter', Filter)
 | 
					InvertFilter = binary_sensor_ns.class_('InvertFilter', Filter)
 | 
				
			||||||
LambdaFilter = binary_sensor_ns.class_('LambdaFilter', Filter)
 | 
					LambdaFilter = binary_sensor_ns.class_('LambdaFilter', Filter)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
FILTER_KEYS = [CONF_INVERT, CONF_DELAYED_ON, CONF_DELAYED_OFF, CONF_LAMBDA, CONF_HEARTBEAT]
 | 
					FILTER_KEYS = [CONF_INVERT, CONF_DELAYED_ON, CONF_DELAYED_OFF, CONF_LAMBDA, CONF_HEARTBEAT]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FILTERS_SCHEMA = cv.ensure_list({
 | 
					FILTERS_SCHEMA = cv.ensure_list({
 | 
				
			||||||
    vol.Optional(CONF_INVERT): None,
 | 
					    vol.Optional(CONF_INVERT): None,
 | 
				
			||||||
    vol.Optional(CONF_DELAYED_ON): cv.positive_time_period_milliseconds,
 | 
					    vol.Optional(CONF_DELAYED_ON): cv.positive_time_period_milliseconds,
 | 
				
			||||||
    vol.Optional(CONF_DELAYED_OFF): cv.positive_time_period_milliseconds,
 | 
					    vol.Optional(CONF_DELAYED_OFF): cv.positive_time_period_milliseconds,
 | 
				
			||||||
    vol.Optional(CONF_HEARTBEAT): cv.positive_time_period_milliseconds,
 | 
					 | 
				
			||||||
    vol.Optional(CONF_LAMBDA): cv.lambda_,
 | 
					    vol.Optional(CONF_LAMBDA): cv.lambda_,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vol.Optional(CONF_HEARTBEAT): cv.invalid("The heartbeat filter has been removed in 1.11.0"),
 | 
				
			||||||
}, cv.has_exactly_one_key(*FILTER_KEYS))
 | 
					}, cv.has_exactly_one_key(*FILTER_KEYS))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MULTI_CLICK_TIMING_SCHEMA = vol.Schema({
 | 
					MULTI_CLICK_TIMING_SCHEMA = vol.Schema({
 | 
				
			||||||
@@ -191,7 +189,7 @@ BINARY_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({
 | 
				
			|||||||
    vol.Optional(CONF_INVERTED): cv.invalid(
 | 
					    vol.Optional(CONF_INVERTED): cv.invalid(
 | 
				
			||||||
        "The inverted binary_sensor property has been replaced by the "
 | 
					        "The inverted binary_sensor property has been replaced by the "
 | 
				
			||||||
        "new 'invert' binary  sensor filter. Please see "
 | 
					        "new 'invert' binary  sensor filter. Please see "
 | 
				
			||||||
        "https://esphomelib.com/esphomeyaml/components/binary_sensor/index.html."
 | 
					        "https://esphome.io/components/binary_sensor/index.html."
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -205,8 +203,6 @@ def setup_filter(config):
 | 
				
			|||||||
        yield App.register_component(DelayedOffFilter.new(config[CONF_DELAYED_OFF]))
 | 
					        yield App.register_component(DelayedOffFilter.new(config[CONF_DELAYED_OFF]))
 | 
				
			||||||
    elif CONF_DELAYED_ON in config:
 | 
					    elif CONF_DELAYED_ON in config:
 | 
				
			||||||
        yield App.register_component(DelayedOnFilter.new(config[CONF_DELAYED_ON]))
 | 
					        yield App.register_component(DelayedOnFilter.new(config[CONF_DELAYED_ON]))
 | 
				
			||||||
    elif CONF_HEARTBEAT in config:
 | 
					 | 
				
			||||||
        yield App.register_component(HeartbeatFilter.new(config[CONF_HEARTBEAT]))
 | 
					 | 
				
			||||||
    elif CONF_LAMBDA in config:
 | 
					    elif CONF_LAMBDA in config:
 | 
				
			||||||
        for lambda_ in process_lambda(config[CONF_LAMBDA], [(bool_, 'x')],
 | 
					        for lambda_ in process_lambda(config[CONF_LAMBDA], [(bool_, 'x')],
 | 
				
			||||||
                                      return_type=optional.template(bool_)):
 | 
					                                      return_type=optional.template(bool_)):
 | 
				
			||||||
@@ -217,14 +213,13 @@ def setup_filter(config):
 | 
				
			|||||||
def setup_filters(config):
 | 
					def setup_filters(config):
 | 
				
			||||||
    filters = []
 | 
					    filters = []
 | 
				
			||||||
    for conf in config:
 | 
					    for conf in config:
 | 
				
			||||||
        filter = None
 | 
					 | 
				
			||||||
        for filter in setup_filter(conf):
 | 
					        for filter in setup_filter(conf):
 | 
				
			||||||
            yield None
 | 
					            yield None
 | 
				
			||||||
        filters.append(filter)
 | 
					        filters.append(filter)
 | 
				
			||||||
    yield ArrayInitializer(*filters)
 | 
					    yield filters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setup_binary_sensor_core_(binary_sensor_var, mqtt_var, config):
 | 
					def setup_binary_sensor_core_(binary_sensor_var, config):
 | 
				
			||||||
    if CONF_INTERNAL in config:
 | 
					    if CONF_INTERNAL in config:
 | 
				
			||||||
        add(binary_sensor_var.set_internal(CONF_INTERNAL))
 | 
					        add(binary_sensor_var.set_internal(CONF_INTERNAL))
 | 
				
			||||||
    if CONF_DEVICE_CLASS in config:
 | 
					    if CONF_DEVICE_CLASS in config:
 | 
				
			||||||
@@ -232,7 +227,6 @@ def setup_binary_sensor_core_(binary_sensor_var, mqtt_var, config):
 | 
				
			|||||||
    if CONF_INVERTED in config:
 | 
					    if CONF_INVERTED in config:
 | 
				
			||||||
        add(binary_sensor_var.set_inverted(config[CONF_INVERTED]))
 | 
					        add(binary_sensor_var.set_inverted(config[CONF_INVERTED]))
 | 
				
			||||||
    if CONF_FILTERS in config:
 | 
					    if CONF_FILTERS in config:
 | 
				
			||||||
        filters = None
 | 
					 | 
				
			||||||
        for filters in setup_filters(config[CONF_FILTERS]):
 | 
					        for filters in setup_filters(config[CONF_FILTERS]):
 | 
				
			||||||
            yield
 | 
					            yield
 | 
				
			||||||
        add(binary_sensor_var.add_filters(filters))
 | 
					        add(binary_sensor_var.add_filters(filters))
 | 
				
			||||||
@@ -267,7 +261,6 @@ def setup_binary_sensor_core_(binary_sensor_var, mqtt_var, config):
 | 
				
			|||||||
                ('min_length', tim[CONF_MIN_LENGTH]),
 | 
					                ('min_length', tim[CONF_MIN_LENGTH]),
 | 
				
			||||||
                ('max_length', tim.get(CONF_MAX_LENGTH, 4294967294)),
 | 
					                ('max_length', tim.get(CONF_MAX_LENGTH, 4294967294)),
 | 
				
			||||||
            ))
 | 
					            ))
 | 
				
			||||||
        timings = ArrayInitializer(*timings, multiline=False)
 | 
					 | 
				
			||||||
        rhs = App.register_component(binary_sensor_var.make_multi_click_trigger(timings))
 | 
					        rhs = App.register_component(binary_sensor_var.make_multi_click_trigger(timings))
 | 
				
			||||||
        trigger = Pvariable(conf[CONF_TRIGGER_ID], rhs)
 | 
					        trigger = Pvariable(conf[CONF_TRIGGER_ID], rhs)
 | 
				
			||||||
        if CONF_INVALID_COOLDOWN in conf:
 | 
					        if CONF_INVALID_COOLDOWN in conf:
 | 
				
			||||||
@@ -279,22 +272,19 @@ def setup_binary_sensor_core_(binary_sensor_var, mqtt_var, config):
 | 
				
			|||||||
        trigger = Pvariable(conf[CONF_TRIGGER_ID], rhs)
 | 
					        trigger = Pvariable(conf[CONF_TRIGGER_ID], rhs)
 | 
				
			||||||
        automation.build_automation(trigger, bool_, conf)
 | 
					        automation.build_automation(trigger, bool_, conf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setup_mqtt_component(mqtt_var, config)
 | 
					    setup_mqtt_component(binary_sensor_var.Pget_mqtt(), config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setup_binary_sensor(binary_sensor_obj, mqtt_obj, config):
 | 
					def setup_binary_sensor(binary_sensor_obj, config):
 | 
				
			||||||
    binary_sensor_var = Pvariable(config[CONF_ID], binary_sensor_obj,
 | 
					    if not CORE.has_id(config[CONF_ID]):
 | 
				
			||||||
                                  has_side_effects=False)
 | 
					        binary_sensor_obj = Pvariable(config[CONF_ID], binary_sensor_obj, has_side_effects=True)
 | 
				
			||||||
    mqtt_var = Pvariable(config[CONF_MQTT_ID], mqtt_obj,
 | 
					    CORE.add_job(setup_binary_sensor_core_, binary_sensor_obj, config)
 | 
				
			||||||
                         has_side_effects=False)
 | 
					 | 
				
			||||||
    CORE.add_job(setup_binary_sensor_core_, binary_sensor_var, mqtt_var, config)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def register_binary_sensor(var, config):
 | 
					def register_binary_sensor(var, config):
 | 
				
			||||||
    binary_sensor_var = Pvariable(config[CONF_ID], var, has_side_effects=True)
 | 
					    binary_sensor_var = Pvariable(config[CONF_ID], var, has_side_effects=True)
 | 
				
			||||||
    rhs = App.register_binary_sensor(binary_sensor_var)
 | 
					    add(App.register_binary_sensor(binary_sensor_var))
 | 
				
			||||||
    mqtt_var = Pvariable(config[CONF_MQTT_ID], rhs, has_side_effects=True)
 | 
					    CORE.add_job(setup_binary_sensor_core_, binary_sensor_var, config)
 | 
				
			||||||
    CORE.add_job(setup_binary_sensor_core_, binary_sensor_var, mqtt_var, config)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def core_to_hass_config(data, config):
 | 
					def core_to_hass_config(data, config):
 | 
				
			||||||
@@ -309,7 +299,6 @@ def core_to_hass_config(data, config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_BINARY_SENSOR'
 | 
					BUILD_FLAGS = '-DUSE_BINARY_SENSOR'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
CONF_BINARY_SENSOR_IS_ON = 'binary_sensor.is_on'
 | 
					CONF_BINARY_SENSOR_IS_ON = 'binary_sensor.is_on'
 | 
				
			||||||
BINARY_SENSOR_IS_ON_CONDITION_SCHEMA = maybe_simple_id({
 | 
					BINARY_SENSOR_IS_ON_CONDITION_SCHEMA = maybe_simple_id({
 | 
				
			||||||
    vol.Required(CONF_ID): cv.use_variable_id(BinarySensor),
 | 
					    vol.Required(CONF_ID): cv.use_variable_id(BinarySensor),
 | 
				
			||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import binary_sensor, sensor
 | 
					from esphome.components import binary_sensor, sensor
 | 
				
			||||||
from esphomeyaml.components.apds9960 import APDS9960, CONF_APDS9960_ID
 | 
					from esphome.components.apds9960 import APDS9960, CONF_APDS9960_ID
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_DIRECTION, CONF_NAME
 | 
					from esphome.const import CONF_DIRECTION, CONF_NAME
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable
 | 
					from esphome.cpp_generator import get_variable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['apds9960']
 | 
					DEPENDENCIES = ['apds9960']
 | 
				
			||||||
APDS9960GestureDirectionBinarySensor = sensor.sensor_ns.class_(
 | 
					APDS9960GestureDirectionBinarySensor = sensor.sensor_ns.class_(
 | 
				
			||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import binary_sensor
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_BINARY_SENSORS, CONF_ID, CONF_LAMBDA
 | 
					from esphome.const import CONF_BINARY_SENSORS, CONF_ID, CONF_LAMBDA, CONF_NAME
 | 
				
			||||||
from esphomeyaml.cpp_generator import process_lambda, variable
 | 
					from esphome.cpp_generator import add, process_lambda, variable
 | 
				
			||||||
from esphomeyaml.cpp_types import std_vector
 | 
					from esphome.cpp_types import std_vector
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CustomBinarySensorConstructor = binary_sensor.binary_sensor_ns.class_(
 | 
					CustomBinarySensorConstructor = binary_sensor.binary_sensor_ns.class_(
 | 
				
			||||||
    'CustomBinarySensorConstructor')
 | 
					    'CustomBinarySensorConstructor')
 | 
				
			||||||
@@ -26,8 +26,10 @@ def to_code(config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    rhs = CustomBinarySensorConstructor(template_)
 | 
					    rhs = CustomBinarySensorConstructor(template_)
 | 
				
			||||||
    custom = variable(config[CONF_ID], rhs)
 | 
					    custom = variable(config[CONF_ID], rhs)
 | 
				
			||||||
    for i, sens in enumerate(config[CONF_BINARY_SENSORS]):
 | 
					    for i, conf in enumerate(config[CONF_BINARY_SENSORS]):
 | 
				
			||||||
        binary_sensor.register_binary_sensor(custom.get_binary_sensor(i), sens)
 | 
					        rhs = custom.Pget_binary_sensor(i)
 | 
				
			||||||
 | 
					        add(rhs.set_name(conf[CONF_NAME]))
 | 
				
			||||||
 | 
					        binary_sensor.register_binary_sensor(rhs, conf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_CUSTOM_BINARY_SENSOR'
 | 
					BUILD_FLAGS = '-DUSE_CUSTOM_BINARY_SENSOR'
 | 
				
			||||||
@@ -1,15 +1,15 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import binary_sensor
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
from esphomeyaml.components.esp32_ble_tracker import CONF_ESP32_BLE_ID, ESP32BLETracker, \
 | 
					from esphome.components.esp32_ble_tracker import CONF_ESP32_BLE_ID, ESP32BLETracker, \
 | 
				
			||||||
    make_address_array
 | 
					    make_address_array
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_MAC_ADDRESS, CONF_NAME
 | 
					from esphome.const import CONF_MAC_ADDRESS, CONF_NAME
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable
 | 
					from esphome.cpp_generator import get_variable
 | 
				
			||||||
from esphomeyaml.cpp_types import esphomelib_ns
 | 
					from esphome.cpp_types import esphome_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['esp32_ble_tracker']
 | 
					DEPENDENCIES = ['esp32_ble_tracker']
 | 
				
			||||||
ESP32BLEPresenceDevice = esphomelib_ns.class_('ESP32BLEPresenceDevice', binary_sensor.BinarySensor)
 | 
					ESP32BLEPresenceDevice = esphome_ns.class_('ESP32BLEPresenceDevice', binary_sensor.BinarySensor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(ESP32BLEPresenceDevice),
 | 
					    cv.GenerateID(): cv.declare_variable_id(ESP32BLEPresenceDevice),
 | 
				
			||||||
@@ -19,7 +19,6 @@ PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def to_code(config):
 | 
					def to_code(config):
 | 
				
			||||||
    hub = None
 | 
					 | 
				
			||||||
    for hub in get_variable(config[CONF_ESP32_BLE_ID]):
 | 
					    for hub in get_variable(config[CONF_ESP32_BLE_ID]):
 | 
				
			||||||
        yield
 | 
					        yield
 | 
				
			||||||
    rhs = hub.make_presence_sensor(config[CONF_NAME], make_address_array(config[CONF_MAC_ADDRESS]))
 | 
					    rhs = hub.make_presence_sensor(config[CONF_NAME], make_address_array(config[CONF_MAC_ADDRESS]))
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
from esphomeyaml.components import binary_sensor
 | 
					from esphome.components.esp32_touch import ESP32TouchComponent
 | 
				
			||||||
from esphomeyaml.components.esp32_touch import ESP32TouchComponent
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_NAME, CONF_PIN, CONF_THRESHOLD, ESP_PLATFORM_ESP32
 | 
					from esphome.const import CONF_NAME, CONF_PIN, CONF_THRESHOLD, ESP_PLATFORM_ESP32
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable
 | 
					from esphome.cpp_generator import get_variable
 | 
				
			||||||
from esphomeyaml.cpp_types import global_ns
 | 
					from esphome.cpp_types import global_ns
 | 
				
			||||||
from esphomeyaml.pins import validate_gpio_pin
 | 
					from esphome.pins import validate_gpio_pin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
					ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,21 +1,19 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
from esphomeyaml.components import binary_sensor
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_PIN
 | 
					from esphome.const import CONF_ID, CONF_NAME, CONF_PIN
 | 
				
			||||||
from esphomeyaml.cpp_generator import variable
 | 
					from esphome.cpp_generator import Pvariable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_input_pin_expression, setup_component
 | 
					from esphome.cpp_helpers import gpio_input_pin_expression, setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import Application, Component, App
 | 
					from esphome.cpp_types import App, Component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MakeGPIOBinarySensor = Application.struct('MakeGPIOBinarySensor')
 | 
					 | 
				
			||||||
GPIOBinarySensorComponent = binary_sensor.binary_sensor_ns.class_('GPIOBinarySensorComponent',
 | 
					GPIOBinarySensorComponent = binary_sensor.binary_sensor_ns.class_('GPIOBinarySensorComponent',
 | 
				
			||||||
                                                                  binary_sensor.BinarySensor,
 | 
					                                                                  binary_sensor.BinarySensor,
 | 
				
			||||||
                                                                  Component)
 | 
					                                                                  Component)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(GPIOBinarySensorComponent),
 | 
					    cv.GenerateID(): cv.declare_variable_id(GPIOBinarySensorComponent),
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeGPIOBinarySensor),
 | 
					 | 
				
			||||||
    vol.Required(CONF_PIN): pins.gpio_input_pin_schema
 | 
					    vol.Required(CONF_PIN): pins.gpio_input_pin_schema
 | 
				
			||||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,9 +23,9 @@ def to_code(config):
 | 
				
			|||||||
    for pin in gpio_input_pin_expression(config[CONF_PIN]):
 | 
					    for pin in gpio_input_pin_expression(config[CONF_PIN]):
 | 
				
			||||||
        yield
 | 
					        yield
 | 
				
			||||||
    rhs = App.make_gpio_binary_sensor(config[CONF_NAME], pin)
 | 
					    rhs = App.make_gpio_binary_sensor(config[CONF_NAME], pin)
 | 
				
			||||||
    gpio = variable(config[CONF_MAKE_ID], rhs)
 | 
					    gpio = Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
    binary_sensor.setup_binary_sensor(gpio.Pgpio, gpio.Pmqtt, config)
 | 
					    binary_sensor.setup_binary_sensor(gpio, config)
 | 
				
			||||||
    setup_component(gpio.Pgpio, config)
 | 
					    setup_component(gpio, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_GPIO_BINARY_SENSOR'
 | 
					BUILD_FLAGS = '-DUSE_GPIO_BINARY_SENSOR'
 | 
				
			||||||
							
								
								
									
										30
									
								
								esphome/components/binary_sensor/homeassistant.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								esphome/components/binary_sensor/homeassistant.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
 | 
					from esphome.const import CONF_ENTITY_ID, CONF_ID, CONF_NAME
 | 
				
			||||||
 | 
					from esphome.cpp_generator import Pvariable
 | 
				
			||||||
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEPENDENCIES = ['api']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HomeassistantBinarySensor = binary_sensor.binary_sensor_ns.class_('HomeassistantBinarySensor',
 | 
				
			||||||
 | 
					                                                                  binary_sensor.BinarySensor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.declare_variable_id(HomeassistantBinarySensor),
 | 
				
			||||||
 | 
					    vol.Required(CONF_ENTITY_ID): cv.entity_id,
 | 
				
			||||||
 | 
					}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def to_code(config):
 | 
				
			||||||
 | 
					    rhs = App.make_homeassistant_binary_sensor(config[CONF_NAME], config[CONF_ENTITY_ID])
 | 
				
			||||||
 | 
					    subs = Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
 | 
					    binary_sensor.setup_binary_sensor(subs, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BUILD_FLAGS = '-DUSE_HOMEASSISTANT_BINARY_SENSOR'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def to_hass_config(data, config):
 | 
				
			||||||
 | 
					    return binary_sensor.core_to_hass_config(data, config)
 | 
				
			||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import binary_sensor, display
 | 
					from esphome.components import binary_sensor, display
 | 
				
			||||||
from esphomeyaml.components.display.nextion import Nextion
 | 
					from esphome.components.display.nextion import Nextion
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_COMPONENT_ID, CONF_NAME, CONF_PAGE_ID
 | 
					from esphome.const import CONF_COMPONENT_ID, CONF_NAME, CONF_PAGE_ID
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable
 | 
					from esphome.cpp_generator import get_variable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['display']
 | 
					DEPENDENCIES = ['display']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
from esphomeyaml.components import binary_sensor
 | 
					from esphome.components.pn532 import PN532Component
 | 
				
			||||||
from esphomeyaml.components.pn532 import PN532Component
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_NAME, CONF_UID
 | 
					from esphome.const import CONF_NAME, CONF_UID
 | 
				
			||||||
from esphomeyaml.core import HexInt
 | 
					from esphome.core import HexInt
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, ArrayInitializer
 | 
					from esphome.cpp_generator import get_variable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['pn532']
 | 
					DEPENDENCIES = ['pn532']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,7 +41,7 @@ def to_code(config):
 | 
				
			|||||||
    for hub in get_variable(config[CONF_PN532_ID]):
 | 
					    for hub in get_variable(config[CONF_PN532_ID]):
 | 
				
			||||||
        yield
 | 
					        yield
 | 
				
			||||||
    addr = [HexInt(int(x, 16)) for x in config[CONF_UID].split('-')]
 | 
					    addr = [HexInt(int(x, 16)) for x in config[CONF_UID].split('-')]
 | 
				
			||||||
    rhs = hub.make_tag(config[CONF_NAME], ArrayInitializer(*addr, multiline=False))
 | 
					    rhs = hub.make_tag(config[CONF_NAME], addr)
 | 
				
			||||||
    binary_sensor.register_binary_sensor(rhs, config)
 | 
					    binary_sensor.register_binary_sensor(rhs, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome.components import binary_sensor, rdm6300
 | 
				
			||||||
from esphomeyaml.components import binary_sensor, rdm6300
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_NAME, CONF_UID
 | 
					from esphome.const import CONF_NAME, CONF_UID
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable
 | 
					from esphome.cpp_generator import get_variable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['rdm6300']
 | 
					DEPENDENCIES = ['rdm6300']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,42 +1,60 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
from esphomeyaml.components import binary_sensor
 | 
					from esphome.components.remote_receiver import RemoteReceiverComponent, remote_ns
 | 
				
			||||||
from esphomeyaml.components.remote_receiver import RemoteReceiverComponent, remote_ns
 | 
					from esphome.components.remote_transmitter import RC_SWITCH_RAW_SCHEMA, \
 | 
				
			||||||
from esphomeyaml.components.remote_transmitter import RC_SWITCH_RAW_SCHEMA, \
 | 
					 | 
				
			||||||
    RC_SWITCH_TYPE_A_SCHEMA, RC_SWITCH_TYPE_B_SCHEMA, RC_SWITCH_TYPE_C_SCHEMA, \
 | 
					    RC_SWITCH_TYPE_A_SCHEMA, RC_SWITCH_TYPE_B_SCHEMA, RC_SWITCH_TYPE_C_SCHEMA, \
 | 
				
			||||||
    RC_SWITCH_TYPE_D_SCHEMA, binary_code, build_rc_switch_protocol
 | 
					    RC_SWITCH_TYPE_D_SCHEMA, binary_code, build_rc_switch_protocol
 | 
				
			||||||
from esphomeyaml.const import CONF_ADDRESS, CONF_CHANNEL, CONF_CODE, CONF_COMMAND, CONF_DATA, \
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
    CONF_DEVICE, CONF_FAMILY, CONF_GROUP, CONF_LG, CONF_NAME, CONF_NBITS, CONF_NEC, \
 | 
					from esphome.const import CONF_ADDRESS, CONF_CHANNEL, CONF_CODE, CONF_COMMAND, CONF_DATA, \
 | 
				
			||||||
    CONF_PANASONIC, CONF_PROTOCOL, CONF_RAW, CONF_RC_SWITCH_RAW, CONF_RC_SWITCH_TYPE_A, \
 | 
					    CONF_DEVICE, CONF_FAMILY, CONF_GROUP, CONF_ID, CONF_JVC, CONF_LG, CONF_NAME, CONF_NBITS, \
 | 
				
			||||||
 | 
					    CONF_NEC, CONF_PANASONIC, CONF_PROTOCOL, CONF_RAW, CONF_RC_SWITCH_RAW, CONF_RC_SWITCH_TYPE_A, \
 | 
				
			||||||
    CONF_RC_SWITCH_TYPE_B, CONF_RC_SWITCH_TYPE_C, CONF_RC_SWITCH_TYPE_D, CONF_SAMSUNG, CONF_SONY, \
 | 
					    CONF_RC_SWITCH_TYPE_B, CONF_RC_SWITCH_TYPE_C, CONF_RC_SWITCH_TYPE_D, CONF_SAMSUNG, CONF_SONY, \
 | 
				
			||||||
    CONF_STATE
 | 
					    CONF_STATE, CONF_RC5
 | 
				
			||||||
from esphomeyaml.cpp_generator import ArrayInitializer, get_variable, Pvariable
 | 
					from esphome.cpp_generator import Pvariable, get_variable, progmem_array
 | 
				
			||||||
 | 
					from esphome.cpp_types import int32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['remote_receiver']
 | 
					DEPENDENCIES = ['remote_receiver']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
REMOTE_KEYS = [CONF_NEC, CONF_LG, CONF_SONY, CONF_PANASONIC, CONF_SAMSUNG, CONF_RAW,
 | 
					REMOTE_KEYS = [CONF_JVC, CONF_NEC, CONF_LG, CONF_SONY, CONF_PANASONIC, CONF_SAMSUNG, CONF_RAW,
 | 
				
			||||||
               CONF_RC_SWITCH_RAW, CONF_RC_SWITCH_TYPE_A, CONF_RC_SWITCH_TYPE_B,
 | 
					               CONF_RC_SWITCH_RAW, CONF_RC_SWITCH_TYPE_A, CONF_RC_SWITCH_TYPE_B,
 | 
				
			||||||
               CONF_RC_SWITCH_TYPE_C, CONF_RC_SWITCH_TYPE_D]
 | 
					               CONF_RC_SWITCH_TYPE_C, CONF_RC_SWITCH_TYPE_D, CONF_RC5]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONF_REMOTE_RECEIVER_ID = 'remote_receiver_id'
 | 
					CONF_REMOTE_RECEIVER_ID = 'remote_receiver_id'
 | 
				
			||||||
CONF_RECEIVER_ID = 'receiver_id'
 | 
					CONF_RECEIVER_ID = 'receiver_id'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RemoteReceiver = remote_ns.class_('RemoteReceiver', binary_sensor.BinarySensor)
 | 
					RemoteReceiver = remote_ns.class_('RemoteReceiver', binary_sensor.BinarySensor)
 | 
				
			||||||
 | 
					JVCReceiver = remote_ns.class_('JVCReceiver', RemoteReceiver)
 | 
				
			||||||
LGReceiver = remote_ns.class_('LGReceiver', RemoteReceiver)
 | 
					LGReceiver = remote_ns.class_('LGReceiver', RemoteReceiver)
 | 
				
			||||||
NECReceiver = remote_ns.class_('NECReceiver', RemoteReceiver)
 | 
					NECReceiver = remote_ns.class_('NECReceiver', RemoteReceiver)
 | 
				
			||||||
PanasonicReceiver = remote_ns.class_('PanasonicReceiver', RemoteReceiver)
 | 
					PanasonicReceiver = remote_ns.class_('PanasonicReceiver', RemoteReceiver)
 | 
				
			||||||
RawReceiver = remote_ns.class_('RawReceiver', RemoteReceiver)
 | 
					RawReceiver = remote_ns.class_('RawReceiver', RemoteReceiver)
 | 
				
			||||||
SamsungReceiver = remote_ns.class_('SamsungReceiver', RemoteReceiver)
 | 
					SamsungReceiver = remote_ns.class_('SamsungReceiver', RemoteReceiver)
 | 
				
			||||||
SonyReceiver = remote_ns.class_('SonyReceiver', RemoteReceiver)
 | 
					SonyReceiver = remote_ns.class_('SonyReceiver', RemoteReceiver)
 | 
				
			||||||
 | 
					RC5Receiver = remote_ns.class_('RC5Receiver', RemoteReceiver)
 | 
				
			||||||
RCSwitchRawReceiver = remote_ns.class_('RCSwitchRawReceiver', RemoteReceiver)
 | 
					RCSwitchRawReceiver = remote_ns.class_('RCSwitchRawReceiver', RemoteReceiver)
 | 
				
			||||||
RCSwitchTypeAReceiver = remote_ns.class_('RCSwitchTypeAReceiver', RCSwitchRawReceiver)
 | 
					RCSwitchTypeAReceiver = remote_ns.class_('RCSwitchTypeAReceiver', RCSwitchRawReceiver)
 | 
				
			||||||
RCSwitchTypeBReceiver = remote_ns.class_('RCSwitchTypeBReceiver', RCSwitchRawReceiver)
 | 
					RCSwitchTypeBReceiver = remote_ns.class_('RCSwitchTypeBReceiver', RCSwitchRawReceiver)
 | 
				
			||||||
RCSwitchTypeCReceiver = remote_ns.class_('RCSwitchTypeCReceiver', RCSwitchRawReceiver)
 | 
					RCSwitchTypeCReceiver = remote_ns.class_('RCSwitchTypeCReceiver', RCSwitchRawReceiver)
 | 
				
			||||||
RCSwitchTypeDReceiver = remote_ns.class_('RCSwitchTypeDReceiver', RCSwitchRawReceiver)
 | 
					RCSwitchTypeDReceiver = remote_ns.class_('RCSwitchTypeDReceiver', RCSwitchRawReceiver)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def validate_raw(value):
 | 
				
			||||||
 | 
					    if isinstance(value, dict):
 | 
				
			||||||
 | 
					        return vol.Schema({
 | 
				
			||||||
 | 
					            cv.GenerateID(): cv.declare_variable_id(int32),
 | 
				
			||||||
 | 
					            vol.Required(CONF_DATA): [vol.Any(vol.Coerce(int), cv.time_period_microseconds)],
 | 
				
			||||||
 | 
					        })(value)
 | 
				
			||||||
 | 
					    return validate_raw({
 | 
				
			||||||
 | 
					        CONF_DATA: value
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(RemoteReceiver),
 | 
					    cv.GenerateID(): cv.declare_variable_id(RemoteReceiver),
 | 
				
			||||||
 | 
					    vol.Optional(CONF_JVC): vol.Schema({
 | 
				
			||||||
 | 
					        vol.Required(CONF_DATA): cv.hex_uint32_t,
 | 
				
			||||||
 | 
					    }),
 | 
				
			||||||
    vol.Optional(CONF_LG): vol.Schema({
 | 
					    vol.Optional(CONF_LG): vol.Schema({
 | 
				
			||||||
        vol.Required(CONF_DATA): cv.hex_uint32_t,
 | 
					        vol.Required(CONF_DATA): cv.hex_uint32_t,
 | 
				
			||||||
        vol.Optional(CONF_NBITS, default=28): cv.one_of(28, 32, int=True),
 | 
					        vol.Optional(CONF_NBITS, default=28): cv.one_of(28, 32, int=True),
 | 
				
			||||||
@@ -56,7 +74,11 @@ PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend
 | 
				
			|||||||
        vol.Required(CONF_ADDRESS): cv.hex_uint16_t,
 | 
					        vol.Required(CONF_ADDRESS): cv.hex_uint16_t,
 | 
				
			||||||
        vol.Required(CONF_COMMAND): cv.hex_uint32_t,
 | 
					        vol.Required(CONF_COMMAND): cv.hex_uint32_t,
 | 
				
			||||||
    }),
 | 
					    }),
 | 
				
			||||||
    vol.Optional(CONF_RAW): [vol.Any(vol.Coerce(int), cv.time_period_microseconds)],
 | 
					    vol.Optional(CONF_RC5): vol.Schema({
 | 
				
			||||||
 | 
					        vol.Required(CONF_ADDRESS): vol.All(cv.hex_int, vol.Range(min=0, max=0x1F)),
 | 
				
			||||||
 | 
					        vol.Required(CONF_COMMAND): vol.All(cv.hex_int, vol.Range(min=0, max=0x3F)),
 | 
				
			||||||
 | 
					    }),
 | 
				
			||||||
 | 
					    vol.Optional(CONF_RAW): validate_raw,
 | 
				
			||||||
    vol.Optional(CONF_RC_SWITCH_RAW): RC_SWITCH_RAW_SCHEMA,
 | 
					    vol.Optional(CONF_RC_SWITCH_RAW): RC_SWITCH_RAW_SCHEMA,
 | 
				
			||||||
    vol.Optional(CONF_RC_SWITCH_TYPE_A): RC_SWITCH_TYPE_A_SCHEMA,
 | 
					    vol.Optional(CONF_RC_SWITCH_TYPE_A): RC_SWITCH_TYPE_A_SCHEMA,
 | 
				
			||||||
    vol.Optional(CONF_RC_SWITCH_TYPE_B): RC_SWITCH_TYPE_B_SCHEMA,
 | 
					    vol.Optional(CONF_RC_SWITCH_TYPE_B): RC_SWITCH_TYPE_B_SCHEMA,
 | 
				
			||||||
@@ -71,6 +93,8 @@ PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend
 | 
				
			|||||||
def receiver_base(full_config):
 | 
					def receiver_base(full_config):
 | 
				
			||||||
    name = full_config[CONF_NAME]
 | 
					    name = full_config[CONF_NAME]
 | 
				
			||||||
    key, config = next((k, v) for k, v in full_config.items() if k in REMOTE_KEYS)
 | 
					    key, config = next((k, v) for k, v in full_config.items() if k in REMOTE_KEYS)
 | 
				
			||||||
 | 
					    if key == CONF_JVC:
 | 
				
			||||||
 | 
					        return JVCReceiver.new(name, config[CONF_DATA])
 | 
				
			||||||
    if key == CONF_LG:
 | 
					    if key == CONF_LG:
 | 
				
			||||||
        return LGReceiver.new(name, config[CONF_DATA], config[CONF_NBITS])
 | 
					        return LGReceiver.new(name, config[CONF_DATA], config[CONF_NBITS])
 | 
				
			||||||
    if key == CONF_NEC:
 | 
					    if key == CONF_NEC:
 | 
				
			||||||
@@ -81,9 +105,11 @@ def receiver_base(full_config):
 | 
				
			|||||||
        return SamsungReceiver.new(name, config[CONF_DATA])
 | 
					        return SamsungReceiver.new(name, config[CONF_DATA])
 | 
				
			||||||
    if key == CONF_SONY:
 | 
					    if key == CONF_SONY:
 | 
				
			||||||
        return SonyReceiver.new(name, config[CONF_DATA], config[CONF_NBITS])
 | 
					        return SonyReceiver.new(name, config[CONF_DATA], config[CONF_NBITS])
 | 
				
			||||||
 | 
					    if key == CONF_RC5:
 | 
				
			||||||
 | 
					        return RC5Receiver.new(name, config[CONF_ADDRESS], config[CONF_COMMAND])
 | 
				
			||||||
    if key == CONF_RAW:
 | 
					    if key == CONF_RAW:
 | 
				
			||||||
        data = ArrayInitializer(*config, multiline=False)
 | 
					        arr = progmem_array(config[CONF_ID], config[CONF_DATA])
 | 
				
			||||||
        return RawReceiver.new(name, data)
 | 
					        return RawReceiver.new(name, arr, len(config[CONF_DATA]))
 | 
				
			||||||
    if key == CONF_RC_SWITCH_RAW:
 | 
					    if key == CONF_RC_SWITCH_RAW:
 | 
				
			||||||
        return RCSwitchRawReceiver.new(name, build_rc_switch_protocol(config[CONF_PROTOCOL]),
 | 
					        return RCSwitchRawReceiver.new(name, build_rc_switch_protocol(config[CONF_PROTOCOL]),
 | 
				
			||||||
                                       binary_code(config[CONF_CODE]), len(config[CONF_CODE]))
 | 
					                                       binary_code(config[CONF_CODE]), len(config[CONF_CODE]))
 | 
				
			||||||
@@ -1,27 +1,24 @@
 | 
				
			|||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
from esphomeyaml.components import binary_sensor
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME
 | 
					from esphome.const import CONF_ID, CONF_NAME
 | 
				
			||||||
from esphomeyaml.cpp_generator import variable
 | 
					from esphome.cpp_generator import Pvariable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import Application, Component, App
 | 
					from esphome.cpp_types import App, Component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
MakeStatusBinarySensor = Application.struct('MakeStatusBinarySensor')
 | 
					 | 
				
			||||||
StatusBinarySensor = binary_sensor.binary_sensor_ns.class_('StatusBinarySensor',
 | 
					StatusBinarySensor = binary_sensor.binary_sensor_ns.class_('StatusBinarySensor',
 | 
				
			||||||
                                                           binary_sensor.BinarySensor,
 | 
					                                                           binary_sensor.BinarySensor,
 | 
				
			||||||
                                                           Component)
 | 
					                                                           Component)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeStatusBinarySensor),
 | 
					 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(StatusBinarySensor),
 | 
					    cv.GenerateID(): cv.declare_variable_id(StatusBinarySensor),
 | 
				
			||||||
}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def to_code(config):
 | 
					def to_code(config):
 | 
				
			||||||
    rhs = App.make_status_binary_sensor(config[CONF_NAME])
 | 
					    rhs = App.make_status_binary_sensor(config[CONF_NAME])
 | 
				
			||||||
    status = variable(config[CONF_MAKE_ID], rhs)
 | 
					    status = Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
    binary_sensor.setup_binary_sensor(status.Pstatus, status.Pmqtt, config)
 | 
					    binary_sensor.setup_binary_sensor(status, config)
 | 
				
			||||||
    setup_component(status.Pstatus, config)
 | 
					    setup_component(status, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_STATUS_BINARY_SENSOR'
 | 
					BUILD_FLAGS = '-DUSE_STATUS_BINARY_SENSOR'
 | 
				
			||||||
							
								
								
									
										60
									
								
								esphome/components/binary_sensor/template.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								esphome/components/binary_sensor/template.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from esphome.automation import ACTION_REGISTRY
 | 
				
			||||||
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
 | 
					from esphome.const import CONF_ID, CONF_LAMBDA, CONF_NAME, CONF_STATE
 | 
				
			||||||
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable, process_lambda, templatable
 | 
				
			||||||
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
 | 
					from esphome.cpp_types import Action, App, Component, bool_, optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TemplateBinarySensor = binary_sensor.binary_sensor_ns.class_('TemplateBinarySensor',
 | 
				
			||||||
 | 
					                                                             binary_sensor.BinarySensor,
 | 
				
			||||||
 | 
					                                                             Component)
 | 
				
			||||||
 | 
					BinarySensorPublishAction = binary_sensor.binary_sensor_ns.class_('BinarySensorPublishAction',
 | 
				
			||||||
 | 
					                                                                  Action)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.declare_variable_id(TemplateBinarySensor),
 | 
				
			||||||
 | 
					    vol.Optional(CONF_LAMBDA): cv.lambda_,
 | 
				
			||||||
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def to_code(config):
 | 
				
			||||||
 | 
					    rhs = App.make_template_binary_sensor(config[CONF_NAME])
 | 
				
			||||||
 | 
					    var = Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
 | 
					    binary_sensor.setup_binary_sensor(var, config)
 | 
				
			||||||
 | 
					    setup_component(var, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if CONF_LAMBDA in config:
 | 
				
			||||||
 | 
					        for template_ in process_lambda(config[CONF_LAMBDA], [],
 | 
				
			||||||
 | 
					                                        return_type=optional.template(bool_)):
 | 
				
			||||||
 | 
					            yield
 | 
				
			||||||
 | 
					        add(var.set_template(template_))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BUILD_FLAGS = '-DUSE_TEMPLATE_BINARY_SENSOR'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONF_BINARY_SENSOR_TEMPLATE_PUBLISH = 'binary_sensor.template.publish'
 | 
				
			||||||
 | 
					BINARY_SENSOR_TEMPLATE_PUBLISH_ACTION_SCHEMA = vol.Schema({
 | 
				
			||||||
 | 
					    vol.Required(CONF_ID): cv.use_variable_id(binary_sensor.BinarySensor),
 | 
				
			||||||
 | 
					    vol.Required(CONF_STATE): cv.templatable(cv.boolean),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@ACTION_REGISTRY.register(CONF_BINARY_SENSOR_TEMPLATE_PUBLISH,
 | 
				
			||||||
 | 
					                          BINARY_SENSOR_TEMPLATE_PUBLISH_ACTION_SCHEMA)
 | 
				
			||||||
 | 
					def binary_sensor_template_publish_to_code(config, action_id, arg_type, template_arg):
 | 
				
			||||||
 | 
					    for var in get_variable(config[CONF_ID]):
 | 
				
			||||||
 | 
					        yield None
 | 
				
			||||||
 | 
					    rhs = var.make_binary_sensor_publish_action(template_arg)
 | 
				
			||||||
 | 
					    type = BinarySensorPublishAction.template(arg_type)
 | 
				
			||||||
 | 
					    action = Pvariable(action_id, rhs, type=type)
 | 
				
			||||||
 | 
					    for template_ in templatable(config[CONF_STATE], arg_type, bool_):
 | 
				
			||||||
 | 
					        yield None
 | 
				
			||||||
 | 
					    add(action.set_state(template_))
 | 
				
			||||||
 | 
					    yield action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def to_hass_config(data, config):
 | 
				
			||||||
 | 
					    return binary_sensor.core_to_hass_config(data, config)
 | 
				
			||||||
@@ -1,18 +1,19 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.automation import ACTION_REGISTRY, maybe_simple_id
 | 
					from esphome.automation import ACTION_REGISTRY, maybe_simple_id
 | 
				
			||||||
from esphomeyaml.components import mqtt
 | 
					from esphome.components import mqtt
 | 
				
			||||||
from esphomeyaml.components.mqtt import setup_mqtt_component
 | 
					from esphome.components.mqtt import setup_mqtt_component
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_INTERNAL, CONF_MQTT_ID
 | 
					from esphome.const import CONF_ID, CONF_INTERNAL, CONF_MQTT_ID
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add, get_variable
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.cpp_types import Action, Nameable, esphomelib_ns
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable
 | 
				
			||||||
 | 
					from esphome.cpp_types import Action, Nameable, esphome_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cover_ns = esphomelib_ns.namespace('cover')
 | 
					cover_ns = esphome_ns.namespace('cover')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Cover = cover_ns.class_('Cover', Nameable)
 | 
					Cover = cover_ns.class_('Cover', Nameable)
 | 
				
			||||||
MQTTCoverComponent = cover_ns.class_('MQTTCoverComponent', mqtt.MQTTComponent)
 | 
					MQTTCoverComponent = cover_ns.class_('MQTTCoverComponent', mqtt.MQTTComponent)
 | 
				
			||||||
@@ -21,6 +22,12 @@ CoverState = cover_ns.class_('CoverState')
 | 
				
			|||||||
COVER_OPEN = cover_ns.COVER_OPEN
 | 
					COVER_OPEN = cover_ns.COVER_OPEN
 | 
				
			||||||
COVER_CLOSED = cover_ns.COVER_CLOSED
 | 
					COVER_CLOSED = cover_ns.COVER_CLOSED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					validate_cover_state = cv.one_of('OPEN', 'CLOSED', upper=True)
 | 
				
			||||||
 | 
					COVER_STATES = {
 | 
				
			||||||
 | 
					    'OPEN': COVER_OPEN,
 | 
				
			||||||
 | 
					    'CLOSED': COVER_CLOSED,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Actions
 | 
					# Actions
 | 
				
			||||||
OpenAction = cover_ns.class_('OpenAction', Action)
 | 
					OpenAction = cover_ns.class_('OpenAction', Action)
 | 
				
			||||||
CloseAction = cover_ns.class_('CloseAction', Action)
 | 
					CloseAction = cover_ns.class_('CloseAction', Action)
 | 
				
			||||||
@@ -34,16 +41,14 @@ COVER_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend({
 | 
				
			|||||||
COVER_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(COVER_SCHEMA.schema)
 | 
					COVER_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(COVER_SCHEMA.schema)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setup_cover_core_(cover_var, mqtt_var, config):
 | 
					def setup_cover_core_(cover_var, config):
 | 
				
			||||||
    if CONF_INTERNAL in config:
 | 
					    if CONF_INTERNAL in config:
 | 
				
			||||||
        add(cover_var.set_internal(config[CONF_INTERNAL]))
 | 
					        add(cover_var.set_internal(config[CONF_INTERNAL]))
 | 
				
			||||||
    setup_mqtt_component(mqtt_var, config)
 | 
					    setup_mqtt_component(cover_var.Pget_mqtt(), config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setup_cover(cover_obj, mqtt_obj, config):
 | 
					def setup_cover(cover_obj, config):
 | 
				
			||||||
    cover_var = Pvariable(config[CONF_ID], cover_obj, has_side_effects=False)
 | 
					    CORE.add_job(setup_cover_core_, cover_obj, config)
 | 
				
			||||||
    mqtt_var = Pvariable(config[CONF_MQTT_ID], mqtt_obj, has_side_effects=False)
 | 
					 | 
				
			||||||
    setup_cover_core_(cover_var, mqtt_var, config)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_COVER'
 | 
					BUILD_FLAGS = '-DUSE_COVER'
 | 
				
			||||||
							
								
								
									
										88
									
								
								esphome/components/cover/template.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								esphome/components/cover/template.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
				
			|||||||
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from esphome import automation
 | 
				
			||||||
 | 
					from esphome.automation import ACTION_REGISTRY
 | 
				
			||||||
 | 
					from esphome.components import cover
 | 
				
			||||||
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
 | 
					from esphome.const import CONF_ASSUMED_STATE, CONF_CLOSE_ACTION, CONF_ID, CONF_LAMBDA, CONF_NAME, \
 | 
				
			||||||
 | 
					    CONF_OPEN_ACTION, CONF_OPTIMISTIC, CONF_STATE, CONF_STOP_ACTION
 | 
				
			||||||
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable, process_lambda, templatable
 | 
				
			||||||
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
 | 
					from esphome.cpp_types import Action, App, NoArg, optional
 | 
				
			||||||
 | 
					from esphome.py_compat import string_types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TemplateCover = cover.cover_ns.class_('TemplateCover', cover.Cover)
 | 
				
			||||||
 | 
					CoverPublishAction = cover.cover_ns.class_('CoverPublishAction', Action)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PLATFORM_SCHEMA = cv.nameable(cover.COVER_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.declare_variable_id(TemplateCover),
 | 
				
			||||||
 | 
					    vol.Optional(CONF_LAMBDA): cv.lambda_,
 | 
				
			||||||
 | 
					    vol.Optional(CONF_OPTIMISTIC): cv.boolean,
 | 
				
			||||||
 | 
					    vol.Optional(CONF_ASSUMED_STATE): cv.boolean,
 | 
				
			||||||
 | 
					    vol.Optional(CONF_OPEN_ACTION): automation.validate_automation(single=True),
 | 
				
			||||||
 | 
					    vol.Optional(CONF_CLOSE_ACTION): automation.validate_automation(single=True),
 | 
				
			||||||
 | 
					    vol.Optional(CONF_STOP_ACTION): automation.validate_automation(single=True),
 | 
				
			||||||
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def to_code(config):
 | 
				
			||||||
 | 
					    rhs = App.make_template_cover(config[CONF_NAME])
 | 
				
			||||||
 | 
					    var = Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cover.setup_cover(var, config)
 | 
				
			||||||
 | 
					    setup_component(var, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if CONF_LAMBDA in config:
 | 
				
			||||||
 | 
					        for template_ in process_lambda(config[CONF_LAMBDA], [],
 | 
				
			||||||
 | 
					                                        return_type=optional.template(cover.CoverState)):
 | 
				
			||||||
 | 
					            yield
 | 
				
			||||||
 | 
					        add(var.set_state_lambda(template_))
 | 
				
			||||||
 | 
					    if CONF_OPEN_ACTION in config:
 | 
				
			||||||
 | 
					        automation.build_automation(var.get_open_trigger(), NoArg,
 | 
				
			||||||
 | 
					                                    config[CONF_OPEN_ACTION])
 | 
				
			||||||
 | 
					    if CONF_CLOSE_ACTION in config:
 | 
				
			||||||
 | 
					        automation.build_automation(var.get_close_trigger(), NoArg,
 | 
				
			||||||
 | 
					                                    config[CONF_CLOSE_ACTION])
 | 
				
			||||||
 | 
					    if CONF_STOP_ACTION in config:
 | 
				
			||||||
 | 
					        automation.build_automation(var.get_stop_trigger(), NoArg,
 | 
				
			||||||
 | 
					                                    config[CONF_STOP_ACTION])
 | 
				
			||||||
 | 
					    if CONF_OPTIMISTIC in config:
 | 
				
			||||||
 | 
					        add(var.set_optimistic(config[CONF_OPTIMISTIC]))
 | 
				
			||||||
 | 
					    if CONF_ASSUMED_STATE in config:
 | 
				
			||||||
 | 
					        add(var.set_assumed_state(config[CONF_ASSUMED_STATE]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BUILD_FLAGS = '-DUSE_TEMPLATE_COVER'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONF_COVER_TEMPLATE_PUBLISH = 'cover.template.publish'
 | 
				
			||||||
 | 
					COVER_TEMPLATE_PUBLISH_ACTION_SCHEMA = vol.Schema({
 | 
				
			||||||
 | 
					    vol.Required(CONF_ID): cv.use_variable_id(cover.Cover),
 | 
				
			||||||
 | 
					    vol.Required(CONF_STATE): cv.templatable(cover.validate_cover_state),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@ACTION_REGISTRY.register(CONF_COVER_TEMPLATE_PUBLISH,
 | 
				
			||||||
 | 
					                          COVER_TEMPLATE_PUBLISH_ACTION_SCHEMA)
 | 
				
			||||||
 | 
					def cover_template_publish_to_code(config, action_id, arg_type, template_arg):
 | 
				
			||||||
 | 
					    for var in get_variable(config[CONF_ID]):
 | 
				
			||||||
 | 
					        yield None
 | 
				
			||||||
 | 
					    rhs = var.make_cover_publish_action(template_arg)
 | 
				
			||||||
 | 
					    type = CoverPublishAction.template(arg_type)
 | 
				
			||||||
 | 
					    action = Pvariable(action_id, rhs, type=type)
 | 
				
			||||||
 | 
					    state = config[CONF_STATE]
 | 
				
			||||||
 | 
					    if isinstance(state, string_types):
 | 
				
			||||||
 | 
					        template_ = cover.COVER_STATES[state]
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        for template_ in templatable(state, arg_type, cover.CoverState):
 | 
				
			||||||
 | 
					            yield None
 | 
				
			||||||
 | 
					    add(action.set_state(template_))
 | 
				
			||||||
 | 
					    yield action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def to_hass_config(data, config):
 | 
				
			||||||
 | 
					    ret = cover.core_to_hass_config(data, config)
 | 
				
			||||||
 | 
					    if ret is None:
 | 
				
			||||||
 | 
					        return None
 | 
				
			||||||
 | 
					    if CONF_OPTIMISTIC in config:
 | 
				
			||||||
 | 
					        ret['optimistic'] = config[CONF_OPTIMISTIC]
 | 
				
			||||||
 | 
					    return ret
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_LAMBDA, CONF_COMPONENTS
 | 
					from esphome.const import CONF_COMPONENTS, CONF_ID, CONF_LAMBDA
 | 
				
			||||||
from esphomeyaml.cpp_generator import process_lambda, variable
 | 
					from esphome.cpp_generator import Pvariable, process_lambda, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import Component, ComponentPtr, esphomelib_ns, std_vector
 | 
					from esphome.cpp_types import Component, ComponentPtr, esphome_ns, std_vector
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CustomComponentConstructor = esphomelib_ns.class_('CustomComponentConstructor')
 | 
					CustomComponentConstructor = esphome_ns.class_('CustomComponentConstructor')
 | 
				
			||||||
MULTI_CONF = True
 | 
					MULTI_CONF = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_SCHEMA = vol.Schema({
 | 
					CONFIG_SCHEMA = vol.Schema({
 | 
				
			||||||
@@ -25,8 +25,9 @@ def to_code(config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    rhs = CustomComponentConstructor(template_)
 | 
					    rhs = CustomComponentConstructor(template_)
 | 
				
			||||||
    custom = variable(config[CONF_ID], rhs)
 | 
					    custom = variable(config[CONF_ID], rhs)
 | 
				
			||||||
    for i, comp in enumerate(config.get(CONF_COMPONENTS, [])):
 | 
					    for i, comp_config in enumerate(config.get(CONF_COMPONENTS, [])):
 | 
				
			||||||
        setup_component(custom.get_component(i), comp)
 | 
					        comp = Pvariable(comp_config[CONF_ID], custom.get_component(i))
 | 
				
			||||||
 | 
					        setup_component(comp, comp_config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_CUSTOM_COMPONENT'
 | 
					BUILD_FLAGS = '-DUSE_CUSTOM_COMPONENT'
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import sensor
 | 
					from esphome.components import sensor
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_PIN, CONF_UPDATE_INTERVAL
 | 
					from esphome.const import CONF_ID, CONF_PIN, CONF_UPDATE_INTERVAL
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable
 | 
					from esphome.cpp_generator import Pvariable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, PollingComponent
 | 
					from esphome.cpp_types import App, PollingComponent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DallasComponent = sensor.sensor_ns.class_('DallasComponent', PollingComponent)
 | 
					DallasComponent = sensor.sensor_ns.class_('DallasComponent', PollingComponent)
 | 
				
			||||||
MULTI_CONF = True
 | 
					MULTI_CONF = True
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.cpp_generator import add
 | 
					from esphome.cpp_generator import add
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['logger']
 | 
					DEPENDENCIES = ['logger']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import config_validation as cv, pins
 | 
					from esphome import config_validation as cv, pins
 | 
				
			||||||
from esphomeyaml.automation import ACTION_REGISTRY, maybe_simple_id
 | 
					from esphome.automation import ACTION_REGISTRY, maybe_simple_id
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_MODE, CONF_NUMBER, CONF_PINS, CONF_RUN_CYCLES, \
 | 
					from esphome.const import CONF_ID, CONF_MODE, CONF_NUMBER, CONF_PINS, CONF_RUN_CYCLES, \
 | 
				
			||||||
    CONF_RUN_DURATION, CONF_SLEEP_DURATION, CONF_WAKEUP_PIN
 | 
					    CONF_RUN_DURATION, CONF_SLEEP_DURATION, CONF_WAKEUP_PIN
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, StructInitializer, add, get_variable
 | 
					from esphome.cpp_generator import Pvariable, StructInitializer, add, get_variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_input_pin_expression, setup_component
 | 
					from esphome.cpp_helpers import gpio_input_pin_expression, setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import Action, App, Component, esphomelib_ns, global_ns
 | 
					from esphome.cpp_types import Action, App, Component, esphome_ns, global_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def validate_pin_number(value):
 | 
					def validate_pin_number(value):
 | 
				
			||||||
@@ -17,11 +17,11 @@ def validate_pin_number(value):
 | 
				
			|||||||
    return value
 | 
					    return value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DeepSleepComponent = esphomelib_ns.class_('DeepSleepComponent', Component)
 | 
					DeepSleepComponent = esphome_ns.class_('DeepSleepComponent', Component)
 | 
				
			||||||
EnterDeepSleepAction = esphomelib_ns.class_('EnterDeepSleepAction', Action)
 | 
					EnterDeepSleepAction = esphome_ns.class_('EnterDeepSleepAction', Action)
 | 
				
			||||||
PreventDeepSleepAction = esphomelib_ns.class_('PreventDeepSleepAction', Action)
 | 
					PreventDeepSleepAction = esphome_ns.class_('PreventDeepSleepAction', Action)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WakeupPinMode = esphomelib_ns.enum('WakeupPinMode')
 | 
					WakeupPinMode = esphome_ns.enum('WakeupPinMode')
 | 
				
			||||||
WAKEUP_PIN_MODES = {
 | 
					WAKEUP_PIN_MODES = {
 | 
				
			||||||
    'IGNORE': WakeupPinMode.WAKEUP_PIN_MODE_IGNORE,
 | 
					    'IGNORE': WakeupPinMode.WAKEUP_PIN_MODE_IGNORE,
 | 
				
			||||||
    'KEEP_AWAKE': WakeupPinMode.WAKEUP_PIN_MODE_KEEP_AWAKE,
 | 
					    'KEEP_AWAKE': WakeupPinMode.WAKEUP_PIN_MODE_KEEP_AWAKE,
 | 
				
			||||||
@@ -29,7 +29,7 @@ WAKEUP_PIN_MODES = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
esp_sleep_ext1_wakeup_mode_t = global_ns.enum('esp_sleep_ext1_wakeup_mode_t')
 | 
					esp_sleep_ext1_wakeup_mode_t = global_ns.enum('esp_sleep_ext1_wakeup_mode_t')
 | 
				
			||||||
Ext1Wakeup = esphomelib_ns.struct('Ext1Wakeup')
 | 
					Ext1Wakeup = esphome_ns.struct('Ext1Wakeup')
 | 
				
			||||||
EXT1_WAKEUP_MODES = {
 | 
					EXT1_WAKEUP_MODES = {
 | 
				
			||||||
    'ALL_LOW': esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ALL_LOW,
 | 
					    'ALL_LOW': esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ALL_LOW,
 | 
				
			||||||
    'ANY_HIGH': esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ANY_HIGH,
 | 
					    'ANY_HIGH': esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ANY_HIGH,
 | 
				
			||||||
@@ -49,8 +49,11 @@ CONFIG_SCHEMA = vol.Schema({
 | 
				
			|||||||
        vol.Required(CONF_PINS): cv.ensure_list(pins.shorthand_input_pin, validate_pin_number),
 | 
					        vol.Required(CONF_PINS): cv.ensure_list(pins.shorthand_input_pin, validate_pin_number),
 | 
				
			||||||
        vol.Required(CONF_MODE): cv.one_of(*EXT1_WAKEUP_MODES, upper=True),
 | 
					        vol.Required(CONF_MODE): cv.one_of(*EXT1_WAKEUP_MODES, upper=True),
 | 
				
			||||||
    })),
 | 
					    })),
 | 
				
			||||||
    vol.Optional(CONF_RUN_CYCLES): cv.positive_int,
 | 
					 | 
				
			||||||
    vol.Optional(CONF_RUN_DURATION): cv.positive_time_period_milliseconds,
 | 
					    vol.Optional(CONF_RUN_DURATION): cv.positive_time_period_milliseconds,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vol.Optional(CONF_RUN_CYCLES): cv.invalid("The run_cycles option has been removed in 1.11.0 as "
 | 
				
			||||||
 | 
					                                              "it was essentially the same as a run_duration of 0s."
 | 
				
			||||||
 | 
					                                              "Please use run_duration now.")
 | 
				
			||||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -65,8 +68,6 @@ def to_code(config):
 | 
				
			|||||||
        add(deep_sleep.set_wakeup_pin(pin))
 | 
					        add(deep_sleep.set_wakeup_pin(pin))
 | 
				
			||||||
    if CONF_WAKEUP_PIN_MODE in config:
 | 
					    if CONF_WAKEUP_PIN_MODE in config:
 | 
				
			||||||
        add(deep_sleep.set_wakeup_pin_mode(WAKEUP_PIN_MODES[config[CONF_WAKEUP_PIN_MODE]]))
 | 
					        add(deep_sleep.set_wakeup_pin_mode(WAKEUP_PIN_MODES[config[CONF_WAKEUP_PIN_MODE]]))
 | 
				
			||||||
    if CONF_RUN_CYCLES in config:
 | 
					 | 
				
			||||||
        add(deep_sleep.set_run_cycles(config[CONF_RUN_CYCLES]))
 | 
					 | 
				
			||||||
    if CONF_RUN_DURATION in config:
 | 
					    if CONF_RUN_DURATION in config:
 | 
				
			||||||
        add(deep_sleep.set_run_duration(config[CONF_RUN_DURATION]))
 | 
					        add(deep_sleep.set_run_duration(config[CONF_RUN_DURATION]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										127
									
								
								esphome/components/display/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								esphome/components/display/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,127 @@
 | 
				
			|||||||
 | 
					# coding=utf-8
 | 
				
			||||||
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from esphome import core
 | 
				
			||||||
 | 
					from esphome.automation import ACTION_REGISTRY, maybe_simple_id
 | 
				
			||||||
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
 | 
					from esphome.const import CONF_LAMBDA, CONF_ROTATION, CONF_UPDATE_INTERVAL, CONF_PAGES, CONF_ID
 | 
				
			||||||
 | 
					from esphome.core import CORE
 | 
				
			||||||
 | 
					from esphome.cpp_generator import add, process_lambda, Pvariable, templatable, get_variable
 | 
				
			||||||
 | 
					from esphome.cpp_types import esphome_ns, void, Action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					display_ns = esphome_ns.namespace('display')
 | 
				
			||||||
 | 
					DisplayBuffer = display_ns.class_('DisplayBuffer')
 | 
				
			||||||
 | 
					DisplayPage = display_ns.class_('DisplayPage')
 | 
				
			||||||
 | 
					DisplayPagePtr = DisplayPage.operator('ptr')
 | 
				
			||||||
 | 
					DisplayBufferRef = DisplayBuffer.operator('ref')
 | 
				
			||||||
 | 
					DisplayPageShowAction = display_ns.class_('DisplayPageShowAction', Action)
 | 
				
			||||||
 | 
					DisplayPageShowNextAction = display_ns.class_('DisplayPageShowNextAction', Action)
 | 
				
			||||||
 | 
					DisplayPageShowPrevAction = display_ns.class_('DisplayPageShowPrevAction', Action)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DISPLAY_ROTATIONS = {
 | 
				
			||||||
 | 
					    0: display_ns.DISPLAY_ROTATION_0_DEGREES,
 | 
				
			||||||
 | 
					    90: display_ns.DISPLAY_ROTATION_90_DEGREES,
 | 
				
			||||||
 | 
					    180: display_ns.DISPLAY_ROTATION_180_DEGREES,
 | 
				
			||||||
 | 
					    270: display_ns.DISPLAY_ROTATION_270_DEGREES,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def validate_rotation(value):
 | 
				
			||||||
 | 
					    value = cv.string(value)
 | 
				
			||||||
 | 
					    if value.endswith(u"°"):
 | 
				
			||||||
 | 
					        value = value[:-1]
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        value = int(value)
 | 
				
			||||||
 | 
					    except ValueError:
 | 
				
			||||||
 | 
					        raise vol.Invalid(u"Expected integer for rotation")
 | 
				
			||||||
 | 
					    return cv.one_of(*DISPLAY_ROTATIONS)(value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BASIC_DISPLAY_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					    vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
 | 
				
			||||||
 | 
					    vol.Optional(CONF_LAMBDA): cv.lambda_,
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FULL_DISPLAY_PLATFORM_SCHEMA = BASIC_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					    vol.Optional(CONF_ROTATION): validate_rotation,
 | 
				
			||||||
 | 
					    vol.Optional(CONF_PAGES): vol.All(cv.ensure_list({
 | 
				
			||||||
 | 
					        cv.GenerateID(): cv.declare_variable_id(DisplayPage),
 | 
				
			||||||
 | 
					        vol.Required(CONF_LAMBDA): cv.lambda_,
 | 
				
			||||||
 | 
					    }), vol.Length(min=1)),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def setup_display_core_(display_var, config):
 | 
				
			||||||
 | 
					    if CONF_UPDATE_INTERVAL in config:
 | 
				
			||||||
 | 
					        add(display_var.set_update_interval(config[CONF_UPDATE_INTERVAL]))
 | 
				
			||||||
 | 
					    if CONF_ROTATION in config:
 | 
				
			||||||
 | 
					        add(display_var.set_rotation(DISPLAY_ROTATIONS[config[CONF_ROTATION]]))
 | 
				
			||||||
 | 
					    if CONF_PAGES in config:
 | 
				
			||||||
 | 
					        pages = []
 | 
				
			||||||
 | 
					        for conf in config[CONF_PAGES]:
 | 
				
			||||||
 | 
					            for lambda_ in process_lambda(conf[CONF_LAMBDA], [(DisplayBufferRef, 'it')],
 | 
				
			||||||
 | 
					                                          return_type=void):
 | 
				
			||||||
 | 
					                yield
 | 
				
			||||||
 | 
					            var = Pvariable(conf[CONF_ID], DisplayPage.new(lambda_))
 | 
				
			||||||
 | 
					            pages.append(var)
 | 
				
			||||||
 | 
					        add(display_var.set_pages(pages))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONF_DISPLAY_PAGE_SHOW = 'display.page.show'
 | 
				
			||||||
 | 
					DISPLAY_PAGE_SHOW_ACTION_SCHEMA = maybe_simple_id({
 | 
				
			||||||
 | 
					    vol.Required(CONF_ID): cv.templatable(cv.use_variable_id(DisplayPage)),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@ACTION_REGISTRY.register(CONF_DISPLAY_PAGE_SHOW, DISPLAY_PAGE_SHOW_ACTION_SCHEMA)
 | 
				
			||||||
 | 
					def display_page_show_to_code(config, action_id, arg_type, template_arg):
 | 
				
			||||||
 | 
					    type = DisplayPageShowAction.template(arg_type)
 | 
				
			||||||
 | 
					    action = Pvariable(action_id, type.new(), type=type)
 | 
				
			||||||
 | 
					    if isinstance(config[CONF_ID], core.Lambda):
 | 
				
			||||||
 | 
					        for template_ in templatable(config[CONF_ID], arg_type, DisplayPagePtr):
 | 
				
			||||||
 | 
					            yield None
 | 
				
			||||||
 | 
					        add(action.set_page(template_))
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        for var in get_variable(config[CONF_ID]):
 | 
				
			||||||
 | 
					            yield None
 | 
				
			||||||
 | 
					        add(action.set_page(var))
 | 
				
			||||||
 | 
					    yield action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONF_DISPLAY_PAGE_SHOW_NEXT = 'display.page.show_next'
 | 
				
			||||||
 | 
					DISPLAY_PAGE_SHOW_NEXT_ACTION_SCHEMA = maybe_simple_id({
 | 
				
			||||||
 | 
					    vol.Required(CONF_ID): cv.templatable(cv.use_variable_id(DisplayBuffer)),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@ACTION_REGISTRY.register(CONF_DISPLAY_PAGE_SHOW_NEXT, DISPLAY_PAGE_SHOW_NEXT_ACTION_SCHEMA)
 | 
				
			||||||
 | 
					def display_page_show_next_to_code(config, action_id, arg_type, template_arg):
 | 
				
			||||||
 | 
					    for var in get_variable(config[CONF_ID]):
 | 
				
			||||||
 | 
					        yield None
 | 
				
			||||||
 | 
					    type = DisplayPageShowNextAction.template(arg_type)
 | 
				
			||||||
 | 
					    yield Pvariable(action_id, type.new(var), type=type)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONF_DISPLAY_PAGE_SHOW_PREVIOUS = 'display.page.show_previous'
 | 
				
			||||||
 | 
					DISPLAY_PAGE_SHOW_PREVIOUS_ACTION_SCHEMA = maybe_simple_id({
 | 
				
			||||||
 | 
					    vol.Required(CONF_ID): cv.templatable(cv.use_variable_id(DisplayBuffer)),
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@ACTION_REGISTRY.register(CONF_DISPLAY_PAGE_SHOW_PREVIOUS, DISPLAY_PAGE_SHOW_PREVIOUS_ACTION_SCHEMA)
 | 
				
			||||||
 | 
					def display_page_show_previous_to_code(config, action_id, arg_type, template_arg):
 | 
				
			||||||
 | 
					    for var in get_variable(config[CONF_ID]):
 | 
				
			||||||
 | 
					        yield None
 | 
				
			||||||
 | 
					    type = DisplayPageShowPrevAction.template(arg_type)
 | 
				
			||||||
 | 
					    yield Pvariable(action_id, type.new(var), type=type)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def setup_display(display_var, config):
 | 
				
			||||||
 | 
					    CORE.add_job(setup_display_core_, display_var, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BUILD_FLAGS = '-DUSE_DISPLAY'
 | 
				
			||||||
@@ -1,13 +1,13 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import display
 | 
					from esphome.components import display
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_DATA_PINS, CONF_DIMENSIONS, CONF_ENABLE_PIN, CONF_ID, \
 | 
					from esphome.const import CONF_DATA_PINS, CONF_DIMENSIONS, CONF_ENABLE_PIN, CONF_ID, \
 | 
				
			||||||
    CONF_LAMBDA, CONF_RS_PIN, CONF_RW_PIN
 | 
					    CONF_LAMBDA, CONF_RS_PIN, CONF_RW_PIN
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add, process_lambda
 | 
					from esphome.cpp_generator import Pvariable, add, process_lambda
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
					from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, PollingComponent, void
 | 
					from esphome.cpp_types import App, PollingComponent, void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LCDDisplay = display.display_ns.class_('LCDDisplay', PollingComponent)
 | 
					LCDDisplay = display.display_ns.class_('LCDDisplay', PollingComponent)
 | 
				
			||||||
LCDDisplayRef = LCDDisplay.operator('ref')
 | 
					LCDDisplayRef = LCDDisplay.operator('ref')
 | 
				
			||||||
@@ -1,13 +1,13 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import display, i2c
 | 
					from esphome.components import display, i2c
 | 
				
			||||||
from esphomeyaml.components.display.lcd_gpio import LCDDisplay, LCDDisplayRef, \
 | 
					from esphome.components.display.lcd_gpio import LCDDisplay, LCDDisplayRef, \
 | 
				
			||||||
    validate_lcd_dimensions
 | 
					    validate_lcd_dimensions
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ADDRESS, CONF_DIMENSIONS, CONF_ID, CONF_LAMBDA
 | 
					from esphome.const import CONF_ADDRESS, CONF_DIMENSIONS, CONF_ID, CONF_LAMBDA
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add, process_lambda
 | 
					from esphome.cpp_generator import Pvariable, add, process_lambda
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, void
 | 
					from esphome.cpp_types import App, void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['i2c']
 | 
					DEPENDENCIES = ['i2c']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,14 +1,14 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import display, spi
 | 
					from esphome.components import display, spi
 | 
				
			||||||
from esphomeyaml.components.spi import SPIComponent
 | 
					from esphome.components.spi import SPIComponent
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_CS_PIN, CONF_ID, CONF_INTENSITY, CONF_LAMBDA, CONF_NUM_CHIPS, \
 | 
					from esphome.const import CONF_CS_PIN, CONF_ID, CONF_INTENSITY, CONF_LAMBDA, CONF_NUM_CHIPS, \
 | 
				
			||||||
    CONF_SPI_ID
 | 
					    CONF_SPI_ID
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add, get_variable, process_lambda
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable, process_lambda
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
					from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, PollingComponent, void
 | 
					from esphome.cpp_types import App, PollingComponent, void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['spi']
 | 
					DEPENDENCIES = ['spi']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
from esphomeyaml.components import display, uart
 | 
					from esphome.components import display, uart
 | 
				
			||||||
from esphomeyaml.components.uart import UARTComponent
 | 
					from esphome.components.uart import UARTComponent
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_LAMBDA, CONF_UART_ID
 | 
					from esphome.const import CONF_ID, CONF_LAMBDA, CONF_UART_ID
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add, get_variable, process_lambda
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable, process_lambda
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, PollingComponent, void
 | 
					from esphome.cpp_types import App, PollingComponent, void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['uart']
 | 
					DEPENDENCIES = ['uart']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,26 +1,26 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import display
 | 
					from esphome.components import display
 | 
				
			||||||
from esphomeyaml.components.display import ssd1306_spi
 | 
					from esphome.components.display import ssd1306_spi
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ADDRESS, CONF_EXTERNAL_VCC, CONF_ID, CONF_LAMBDA, CONF_MODEL, \
 | 
					from esphome.const import CONF_ADDRESS, CONF_EXTERNAL_VCC, CONF_ID, CONF_LAMBDA, CONF_MODEL, \
 | 
				
			||||||
    CONF_RESET_PIN
 | 
					    CONF_PAGES, CONF_RESET_PIN
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add, process_lambda
 | 
					from esphome.cpp_generator import Pvariable, add, process_lambda
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
					from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, void
 | 
					from esphome.cpp_types import App, void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['i2c']
 | 
					DEPENDENCIES = ['i2c']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I2CSSD1306 = display.display_ns.class_('I2CSSD1306', ssd1306_spi.SSD1306)
 | 
					I2CSSD1306 = display.display_ns.class_('I2CSSD1306', ssd1306_spi.SSD1306)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = vol.All(display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(I2CSSD1306),
 | 
					    cv.GenerateID(): cv.declare_variable_id(I2CSSD1306),
 | 
				
			||||||
    vol.Required(CONF_MODEL): ssd1306_spi.SSD1306_MODEL,
 | 
					    vol.Required(CONF_MODEL): ssd1306_spi.SSD1306_MODEL,
 | 
				
			||||||
    vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
 | 
					    vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
 | 
				
			||||||
    vol.Optional(CONF_EXTERNAL_VCC): cv.boolean,
 | 
					    vol.Optional(CONF_EXTERNAL_VCC): cv.boolean,
 | 
				
			||||||
    vol.Optional(CONF_ADDRESS): cv.i2c_address,
 | 
					    vol.Optional(CONF_ADDRESS): cv.i2c_address,
 | 
				
			||||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_most_one_key(CONF_PAGES, CONF_LAMBDA))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def to_code(config):
 | 
					def to_code(config):
 | 
				
			||||||
@@ -1,14 +1,14 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import display, spi
 | 
					from esphome.components import display, spi
 | 
				
			||||||
from esphomeyaml.components.spi import SPIComponent
 | 
					from esphome.components.spi import SPIComponent
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_CS_PIN, CONF_DC_PIN, CONF_EXTERNAL_VCC, CONF_ID, CONF_LAMBDA, \
 | 
					from esphome.const import CONF_CS_PIN, CONF_DC_PIN, CONF_EXTERNAL_VCC, CONF_ID, CONF_LAMBDA, \
 | 
				
			||||||
    CONF_MODEL, CONF_RESET_PIN, CONF_SPI_ID
 | 
					    CONF_MODEL, CONF_RESET_PIN, CONF_SPI_ID, CONF_PAGES
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add, get_variable, process_lambda
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable, process_lambda
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
					from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, PollingComponent, void
 | 
					from esphome.cpp_types import App, PollingComponent, void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['spi']
 | 
					DEPENDENCIES = ['spi']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,7 +29,7 @@ MODELS = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SSD1306_MODEL = cv.one_of(*MODELS, upper=True, space="_")
 | 
					SSD1306_MODEL = cv.one_of(*MODELS, upper=True, space="_")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = vol.All(display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(SPISSD1306),
 | 
					    cv.GenerateID(): cv.declare_variable_id(SPISSD1306),
 | 
				
			||||||
    cv.GenerateID(CONF_SPI_ID): cv.use_variable_id(SPIComponent),
 | 
					    cv.GenerateID(CONF_SPI_ID): cv.use_variable_id(SPIComponent),
 | 
				
			||||||
    vol.Required(CONF_CS_PIN): pins.gpio_output_pin_schema,
 | 
					    vol.Required(CONF_CS_PIN): pins.gpio_output_pin_schema,
 | 
				
			||||||
@@ -37,7 +37,7 @@ PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
				
			|||||||
    vol.Required(CONF_MODEL): SSD1306_MODEL,
 | 
					    vol.Required(CONF_MODEL): SSD1306_MODEL,
 | 
				
			||||||
    vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
 | 
					    vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
 | 
				
			||||||
    vol.Optional(CONF_EXTERNAL_VCC): cv.boolean,
 | 
					    vol.Optional(CONF_EXTERNAL_VCC): cv.boolean,
 | 
				
			||||||
}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_most_one_key(CONF_PAGES, CONF_LAMBDA))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def to_code(config):
 | 
					def to_code(config):
 | 
				
			||||||
@@ -1,15 +1,15 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome.components import display, spi
 | 
				
			||||||
from esphomeyaml.components import display, spi
 | 
					from esphome.components.spi import SPIComponent
 | 
				
			||||||
from esphomeyaml.components.spi import SPIComponent
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_BUSY_PIN, CONF_CS_PIN, CONF_DC_PIN, CONF_FULL_UPDATE_EVERY, \
 | 
					from esphome.const import CONF_BUSY_PIN, CONF_CS_PIN, CONF_DC_PIN, CONF_FULL_UPDATE_EVERY, \
 | 
				
			||||||
    CONF_ID, CONF_LAMBDA, CONF_MODEL, CONF_RESET_PIN, CONF_SPI_ID
 | 
					    CONF_ID, CONF_LAMBDA, CONF_MODEL, CONF_PAGES, CONF_RESET_PIN, CONF_SPI_ID
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, Pvariable, process_lambda, add
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable, process_lambda
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_output_pin_expression, gpio_input_pin_expression, \
 | 
					from esphome.cpp_helpers import gpio_input_pin_expression, gpio_output_pin_expression, \
 | 
				
			||||||
    setup_component
 | 
					    setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import PollingComponent, App, void
 | 
					from esphome.cpp_types import App, PollingComponent, void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['spi']
 | 
					DEPENDENCIES = ['spi']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -17,7 +17,6 @@ WaveshareEPaperTypeA = display.display_ns.WaveshareEPaperTypeA
 | 
				
			|||||||
WaveshareEPaper = display.display_ns.class_('WaveshareEPaper',
 | 
					WaveshareEPaper = display.display_ns.class_('WaveshareEPaper',
 | 
				
			||||||
                                            PollingComponent, spi.SPIDevice, display.DisplayBuffer)
 | 
					                                            PollingComponent, spi.SPIDevice, display.DisplayBuffer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
WaveshareEPaperTypeAModel = display.display_ns.enum('WaveshareEPaperTypeAModel')
 | 
					WaveshareEPaperTypeAModel = display.display_ns.enum('WaveshareEPaperTypeAModel')
 | 
				
			||||||
WaveshareEPaperTypeBModel = display.display_ns.enum('WaveshareEPaperTypeBModel')
 | 
					WaveshareEPaperTypeBModel = display.display_ns.enum('WaveshareEPaperTypeBModel')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,7 +48,8 @@ PLATFORM_SCHEMA = vol.All(display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({
 | 
				
			|||||||
    vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
 | 
					    vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
 | 
				
			||||||
    vol.Optional(CONF_BUSY_PIN): pins.gpio_input_pin_schema,
 | 
					    vol.Optional(CONF_BUSY_PIN): pins.gpio_input_pin_schema,
 | 
				
			||||||
    vol.Optional(CONF_FULL_UPDATE_EVERY): cv.uint32_t,
 | 
					    vol.Optional(CONF_FULL_UPDATE_EVERY): cv.uint32_t,
 | 
				
			||||||
}).extend(cv.COMPONENT_SCHEMA.schema), validate_full_update_every_only_type_a)
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema), validate_full_update_every_only_type_a,
 | 
				
			||||||
 | 
					                          cv.has_at_most_one_key(CONF_PAGES, CONF_LAMBDA))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def to_code(config):
 | 
					def to_code(config):
 | 
				
			||||||
@@ -1,14 +1,14 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import config_validation as cv
 | 
					from esphome import config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_SCAN_INTERVAL, CONF_TYPE, CONF_UUID, ESP_PLATFORM_ESP32
 | 
					from esphome.const import CONF_ID, CONF_SCAN_INTERVAL, CONF_TYPE, CONF_UUID, ESP_PLATFORM_ESP32
 | 
				
			||||||
from esphomeyaml.cpp_generator import ArrayInitializer, Pvariable, RawExpression, add
 | 
					from esphome.cpp_generator import Pvariable, RawExpression, add
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component, esphomelib_ns
 | 
					from esphome.cpp_types import App, Component, esphome_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
					ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ESP32BLEBeacon = esphomelib_ns.class_('ESP32BLEBeacon', Component)
 | 
					ESP32BLEBeacon = esphome_ns.class_('ESP32BLEBeacon', Component)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONF_MAJOR = 'major'
 | 
					CONF_MAJOR = 'major'
 | 
				
			||||||
CONF_MINOR = 'minor'
 | 
					CONF_MINOR = 'minor'
 | 
				
			||||||
@@ -26,7 +26,7 @@ CONFIG_SCHEMA = vol.Schema({
 | 
				
			|||||||
def to_code(config):
 | 
					def to_code(config):
 | 
				
			||||||
    uuid = config[CONF_UUID].hex
 | 
					    uuid = config[CONF_UUID].hex
 | 
				
			||||||
    uuid_arr = [RawExpression('0x{}'.format(uuid[i:i + 2])) for i in range(0, len(uuid), 2)]
 | 
					    uuid_arr = [RawExpression('0x{}'.format(uuid[i:i + 2])) for i in range(0, len(uuid), 2)]
 | 
				
			||||||
    rhs = App.make_esp32_ble_beacon(ArrayInitializer(*uuid_arr, multiline=False))
 | 
					    rhs = App.make_esp32_ble_beacon(uuid_arr)
 | 
				
			||||||
    ble = Pvariable(config[CONF_ID], rhs)
 | 
					    ble = Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
    if CONF_MAJOR in config:
 | 
					    if CONF_MAJOR in config:
 | 
				
			||||||
        add(ble.set_major(config[CONF_MAJOR]))
 | 
					        add(ble.set_major(config[CONF_MAJOR]))
 | 
				
			||||||
							
								
								
									
										40
									
								
								esphome/components/esp32_ble_tracker.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								esphome/components/esp32_ble_tracker.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from esphome import config_validation as cv
 | 
				
			||||||
 | 
					from esphome.components import sensor
 | 
				
			||||||
 | 
					from esphome.const import CONF_ID, CONF_SCAN_INTERVAL, ESP_PLATFORM_ESP32
 | 
				
			||||||
 | 
					from esphome.core import HexInt
 | 
				
			||||||
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
 | 
					from esphome.cpp_types import App, Component, esphome_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONF_ESP32_BLE_ID = 'esp32_ble_id'
 | 
				
			||||||
 | 
					ESP32BLETracker = esphome_ns.class_('ESP32BLETracker', Component)
 | 
				
			||||||
 | 
					XiaomiSensor = esphome_ns.class_('XiaomiSensor', sensor.Sensor)
 | 
				
			||||||
 | 
					XiaomiDevice = esphome_ns.class_('XiaomiDevice')
 | 
				
			||||||
 | 
					XIAOMI_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.declare_variable_id(XiaomiSensor)
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONFIG_SCHEMA = vol.Schema({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.declare_variable_id(ESP32BLETracker),
 | 
				
			||||||
 | 
					    vol.Optional(CONF_SCAN_INTERVAL): cv.positive_time_period_seconds,
 | 
				
			||||||
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def make_address_array(address):
 | 
				
			||||||
 | 
					    return [HexInt(i) for i in address.parts]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def to_code(config):
 | 
				
			||||||
 | 
					    rhs = App.make_esp32_ble_tracker()
 | 
				
			||||||
 | 
					    ble = Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
 | 
					    if CONF_SCAN_INTERVAL in config:
 | 
				
			||||||
 | 
					        add(ble.set_scan_interval(config[CONF_SCAN_INTERVAL]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setup_component(ble, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BUILD_FLAGS = '-DUSE_ESP32_BLE_TRACKER'
 | 
				
			||||||
@@ -1,14 +1,14 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import config_validation as cv
 | 
					from esphome import config_validation as cv
 | 
				
			||||||
from esphomeyaml.components import binary_sensor
 | 
					from esphome.components import binary_sensor
 | 
				
			||||||
from esphomeyaml.const import CONF_HIGH_VOLTAGE_REFERENCE, CONF_ID, CONF_IIR_FILTER, \
 | 
					from esphome.const import CONF_HIGH_VOLTAGE_REFERENCE, CONF_ID, CONF_IIR_FILTER, \
 | 
				
			||||||
    CONF_LOW_VOLTAGE_REFERENCE, CONF_MEASUREMENT_DURATION, CONF_SETUP_MODE, CONF_SLEEP_DURATION, \
 | 
					    CONF_LOW_VOLTAGE_REFERENCE, CONF_MEASUREMENT_DURATION, CONF_SETUP_MODE, CONF_SLEEP_DURATION, \
 | 
				
			||||||
    CONF_VOLTAGE_ATTENUATION, ESP_PLATFORM_ESP32
 | 
					    CONF_VOLTAGE_ATTENUATION, ESP_PLATFORM_ESP32
 | 
				
			||||||
from esphomeyaml.core import TimePeriod
 | 
					from esphome.core import TimePeriod
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component, global_ns
 | 
					from esphome.cpp_types import App, Component, global_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
					ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,13 +1,14 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import wifi
 | 
					from esphome.components import wifi
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_DOMAIN, CONF_HOSTNAME, CONF_ID, CONF_MANUAL_IP, CONF_TYPE, \
 | 
					from esphome.const import CONF_DOMAIN, CONF_ID, CONF_MANUAL_IP, CONF_STATIC_IP, CONF_TYPE, \
 | 
				
			||||||
    ESP_PLATFORM_ESP32
 | 
					    CONF_USE_ADDRESS, ESP_PLATFORM_ESP32
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_output_pin_expression
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component, esphomelib_ns, global_ns
 | 
					from esphome.cpp_helpers import gpio_output_pin_expression
 | 
				
			||||||
 | 
					from esphome.cpp_types import App, Component, esphome_ns, global_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFLICTS_WITH = ['wifi']
 | 
					CONFLICTS_WITH = ['wifi']
 | 
				
			||||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
					ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
				
			||||||
@@ -18,7 +19,7 @@ CONF_MDIO_PIN = 'mdio_pin'
 | 
				
			|||||||
CONF_CLK_MODE = 'clk_mode'
 | 
					CONF_CLK_MODE = 'clk_mode'
 | 
				
			||||||
CONF_POWER_PIN = 'power_pin'
 | 
					CONF_POWER_PIN = 'power_pin'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EthernetType = esphomelib_ns.enum('EthernetType')
 | 
					EthernetType = esphome_ns.enum('EthernetType')
 | 
				
			||||||
ETHERNET_TYPES = {
 | 
					ETHERNET_TYPES = {
 | 
				
			||||||
    'LAN8720': EthernetType.ETHERNET_TYPE_LAN8720,
 | 
					    'LAN8720': EthernetType.ETHERNET_TYPE_LAN8720,
 | 
				
			||||||
    'TLK110': EthernetType.ETHERNET_TYPE_TLK110,
 | 
					    'TLK110': EthernetType.ETHERNET_TYPE_TLK110,
 | 
				
			||||||
@@ -32,9 +33,20 @@ CLK_MODES = {
 | 
				
			|||||||
    'GPIO17_OUT': eth_clock_mode_t.ETH_CLOCK_GPIO17_OUT,
 | 
					    'GPIO17_OUT': eth_clock_mode_t.ETH_CLOCK_GPIO17_OUT,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EthernetComponent = esphomelib_ns.class_('EthernetComponent', Component)
 | 
					EthernetComponent = esphome_ns.class_('EthernetComponent', Component)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_SCHEMA = vol.Schema({
 | 
					
 | 
				
			||||||
 | 
					def validate(config):
 | 
				
			||||||
 | 
					    if CONF_USE_ADDRESS not in config:
 | 
				
			||||||
 | 
					        if CONF_MANUAL_IP in config:
 | 
				
			||||||
 | 
					            use_address = str(config[CONF_MANUAL_IP][CONF_STATIC_IP])
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            use_address = CORE.name + config[CONF_DOMAIN]
 | 
				
			||||||
 | 
					        config[CONF_USE_ADDRESS] = use_address
 | 
				
			||||||
 | 
					    return config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONFIG_SCHEMA = vol.All(vol.Schema({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(EthernetComponent),
 | 
					    cv.GenerateID(): cv.declare_variable_id(EthernetComponent),
 | 
				
			||||||
    vol.Required(CONF_TYPE): cv.one_of(*ETHERNET_TYPES, upper=True),
 | 
					    vol.Required(CONF_TYPE): cv.one_of(*ETHERNET_TYPES, upper=True),
 | 
				
			||||||
    vol.Required(CONF_MDC_PIN): pins.output_pin,
 | 
					    vol.Required(CONF_MDC_PIN): pins.output_pin,
 | 
				
			||||||
@@ -43,9 +55,11 @@ CONFIG_SCHEMA = vol.Schema({
 | 
				
			|||||||
    vol.Optional(CONF_PHY_ADDR, default=0): vol.All(cv.int_, vol.Range(min=0, max=31)),
 | 
					    vol.Optional(CONF_PHY_ADDR, default=0): vol.All(cv.int_, vol.Range(min=0, max=31)),
 | 
				
			||||||
    vol.Optional(CONF_POWER_PIN): pins.gpio_output_pin_schema,
 | 
					    vol.Optional(CONF_POWER_PIN): pins.gpio_output_pin_schema,
 | 
				
			||||||
    vol.Optional(CONF_MANUAL_IP): wifi.STA_MANUAL_IP_SCHEMA,
 | 
					    vol.Optional(CONF_MANUAL_IP): wifi.STA_MANUAL_IP_SCHEMA,
 | 
				
			||||||
    vol.Optional(CONF_HOSTNAME): cv.hostname,
 | 
					 | 
				
			||||||
    vol.Optional(CONF_DOMAIN, default='.local'): cv.domain_name,
 | 
					    vol.Optional(CONF_DOMAIN, default='.local'): cv.domain_name,
 | 
				
			||||||
})
 | 
					    vol.Optional(CONF_USE_ADDRESS): cv.string_strict,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vol.Optional('hostname'): cv.invalid("The hostname option has been removed in 1.11.0"),
 | 
				
			||||||
 | 
					}), validate)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def to_code(config):
 | 
					def to_code(config):
 | 
				
			||||||
@@ -57,15 +71,13 @@ def to_code(config):
 | 
				
			|||||||
    add(eth.set_mdio_pin(config[CONF_MDIO_PIN]))
 | 
					    add(eth.set_mdio_pin(config[CONF_MDIO_PIN]))
 | 
				
			||||||
    add(eth.set_type(ETHERNET_TYPES[config[CONF_TYPE]]))
 | 
					    add(eth.set_type(ETHERNET_TYPES[config[CONF_TYPE]]))
 | 
				
			||||||
    add(eth.set_clk_mode(CLK_MODES[config[CONF_CLK_MODE]]))
 | 
					    add(eth.set_clk_mode(CLK_MODES[config[CONF_CLK_MODE]]))
 | 
				
			||||||
 | 
					    add(eth.set_use_address(config[CONF_USE_ADDRESS]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if CONF_POWER_PIN in config:
 | 
					    if CONF_POWER_PIN in config:
 | 
				
			||||||
        for pin in gpio_output_pin_expression(config[CONF_POWER_PIN]):
 | 
					        for pin in gpio_output_pin_expression(config[CONF_POWER_PIN]):
 | 
				
			||||||
            yield
 | 
					            yield
 | 
				
			||||||
        add(eth.set_power_pin(pin))
 | 
					        add(eth.set_power_pin(pin))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if CONF_HOSTNAME in config:
 | 
					 | 
				
			||||||
        add(eth.set_hostname(config[CONF_HOSTNAME]))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if CONF_MANUAL_IP in config:
 | 
					    if CONF_MANUAL_IP in config:
 | 
				
			||||||
        add(eth.set_manual_ip(wifi.manual_ip(config[CONF_MANUAL_IP])))
 | 
					        add(eth.set_manual_ip(wifi.manual_ip(config[CONF_MANUAL_IP])))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,20 +1,22 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.automation import ACTION_REGISTRY, maybe_simple_id
 | 
					from esphome.automation import ACTION_REGISTRY, maybe_simple_id
 | 
				
			||||||
from esphomeyaml.components import mqtt
 | 
					from esphome.components import mqtt
 | 
				
			||||||
from esphomeyaml.components.mqtt import setup_mqtt_component
 | 
					from esphome.components.mqtt import setup_mqtt_component
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_INTERNAL, CONF_MQTT_ID, CONF_NAME, CONF_OSCILLATING, \
 | 
					from esphome.const import CONF_ID, CONF_INTERNAL, CONF_MQTT_ID, CONF_NAME, CONF_OSCILLATING, \
 | 
				
			||||||
    CONF_OSCILLATION_COMMAND_TOPIC, CONF_OSCILLATION_OUTPUT, CONF_OSCILLATION_STATE_TOPIC, \
 | 
					    CONF_OSCILLATION_COMMAND_TOPIC, CONF_OSCILLATION_OUTPUT, CONF_OSCILLATION_STATE_TOPIC, \
 | 
				
			||||||
    CONF_SPEED, CONF_SPEED_COMMAND_TOPIC, CONF_SPEED_STATE_TOPIC
 | 
					    CONF_SPEED, CONF_SPEED_COMMAND_TOPIC, CONF_SPEED_STATE_TOPIC
 | 
				
			||||||
from esphomeyaml.cpp_generator import add, Pvariable, get_variable, templatable
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.cpp_types import Application, Component, Nameable, esphomelib_ns, Action, bool_
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable, templatable
 | 
				
			||||||
 | 
					from esphome.cpp_types import Action, Application, Component, Nameable, bool_, esphome_ns
 | 
				
			||||||
 | 
					from esphome.py_compat import string_types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fan_ns = esphomelib_ns.namespace('fan')
 | 
					fan_ns = esphome_ns.namespace('fan')
 | 
				
			||||||
FanState = fan_ns.class_('FanState', Nameable, Component)
 | 
					FanState = fan_ns.class_('FanState', Nameable, Component)
 | 
				
			||||||
MQTTFanComponent = fan_ns.class_('MQTTFanComponent', mqtt.MQTTComponent)
 | 
					MQTTFanComponent = fan_ns.class_('MQTTFanComponent', mqtt.MQTTComponent)
 | 
				
			||||||
MakeFan = Application.struct('MakeFan')
 | 
					MakeFan = Application.struct('MakeFan')
 | 
				
			||||||
@@ -49,25 +51,25 @@ FAN_SPEEDS = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setup_fan_core_(fan_var, mqtt_var, config):
 | 
					def setup_fan_core_(fan_var, config):
 | 
				
			||||||
    if CONF_INTERNAL in config:
 | 
					    if CONF_INTERNAL in config:
 | 
				
			||||||
        add(fan_var.set_internal(config[CONF_INTERNAL]))
 | 
					        add(fan_var.set_internal(config[CONF_INTERNAL]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mqtt_ = fan_var.Pget_mqtt()
 | 
				
			||||||
    if CONF_OSCILLATION_STATE_TOPIC in config:
 | 
					    if CONF_OSCILLATION_STATE_TOPIC in config:
 | 
				
			||||||
        add(mqtt_var.set_custom_oscillation_state_topic(config[CONF_OSCILLATION_STATE_TOPIC]))
 | 
					        add(mqtt_.set_custom_oscillation_state_topic(config[CONF_OSCILLATION_STATE_TOPIC]))
 | 
				
			||||||
    if CONF_OSCILLATION_COMMAND_TOPIC in config:
 | 
					    if CONF_OSCILLATION_COMMAND_TOPIC in config:
 | 
				
			||||||
        add(mqtt_var.set_custom_oscillation_command_topic(config[CONF_OSCILLATION_COMMAND_TOPIC]))
 | 
					        add(mqtt_.set_custom_oscillation_command_topic(config[CONF_OSCILLATION_COMMAND_TOPIC]))
 | 
				
			||||||
    if CONF_SPEED_STATE_TOPIC in config:
 | 
					    if CONF_SPEED_STATE_TOPIC in config:
 | 
				
			||||||
        add(mqtt_var.set_custom_speed_state_topic(config[CONF_SPEED_STATE_TOPIC]))
 | 
					        add(mqtt_.set_custom_speed_state_topic(config[CONF_SPEED_STATE_TOPIC]))
 | 
				
			||||||
    if CONF_SPEED_COMMAND_TOPIC in config:
 | 
					    if CONF_SPEED_COMMAND_TOPIC in config:
 | 
				
			||||||
        add(mqtt_var.set_custom_speed_command_topic(config[CONF_SPEED_COMMAND_TOPIC]))
 | 
					        add(mqtt_.set_custom_speed_command_topic(config[CONF_SPEED_COMMAND_TOPIC]))
 | 
				
			||||||
    setup_mqtt_component(mqtt_var, config)
 | 
					    setup_mqtt_component(mqtt_, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setup_fan(fan_obj, mqtt_obj, config):
 | 
					def setup_fan(fan_obj, config):
 | 
				
			||||||
    fan_var = Pvariable(config[CONF_ID], fan_obj, has_side_effects=False)
 | 
					    fan_var = Pvariable(config[CONF_ID], fan_obj, has_side_effects=False)
 | 
				
			||||||
    mqtt_var = Pvariable(config[CONF_MQTT_ID], mqtt_obj, has_side_effects=False)
 | 
					    CORE.add_job(setup_fan_core_, fan_var, config)
 | 
				
			||||||
    setup_fan_core_(fan_var, mqtt_var, config)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_FAN'
 | 
					BUILD_FLAGS = '-DUSE_FAN'
 | 
				
			||||||
@@ -124,6 +126,8 @@ def fan_turn_on_to_code(config, action_id, arg_type, template_arg):
 | 
				
			|||||||
    if CONF_SPEED in config:
 | 
					    if CONF_SPEED in config:
 | 
				
			||||||
        for template_ in templatable(config[CONF_SPEED], arg_type, FanSpeed):
 | 
					        for template_ in templatable(config[CONF_SPEED], arg_type, FanSpeed):
 | 
				
			||||||
            yield None
 | 
					            yield None
 | 
				
			||||||
 | 
					        if isinstance(template_, string_types):
 | 
				
			||||||
 | 
					            template_ = FAN_SPEEDS[template_]
 | 
				
			||||||
        add(action.set_speed(template_))
 | 
					        add(action.set_speed(template_))
 | 
				
			||||||
    yield action
 | 
					    yield action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome.components import fan, output
 | 
				
			||||||
from esphomeyaml.components import fan, output
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_OSCILLATION_OUTPUT, CONF_OUTPUT
 | 
					from esphome.const import CONF_MAKE_ID, CONF_NAME, CONF_OSCILLATION_OUTPUT, CONF_OUTPUT
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, variable, add
 | 
					from esphome.cpp_generator import add, get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(fan.FAN_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(fan.FAN_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(fan.MakeFan),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(fan.MakeFan),
 | 
				
			||||||
@@ -26,7 +26,7 @@ def to_code(config):
 | 
				
			|||||||
            yield
 | 
					            yield
 | 
				
			||||||
        add(fan_struct.Poutput.set_oscillation(oscillation_output))
 | 
					        add(fan_struct.Poutput.set_oscillation(oscillation_output))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fan.setup_fan(fan_struct.Pstate, fan_struct.Pmqtt, config)
 | 
					    fan.setup_fan(fan_struct.Pstate, config)
 | 
				
			||||||
    setup_component(fan_struct.Poutput, config)
 | 
					    setup_component(fan_struct.Poutput, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome.components import fan, mqtt, output
 | 
				
			||||||
from esphomeyaml.components import fan, mqtt, output
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_HIGH, CONF_LOW, CONF_MAKE_ID, CONF_MEDIUM, CONF_NAME, \
 | 
					from esphome.const import CONF_HIGH, CONF_LOW, CONF_MAKE_ID, CONF_MEDIUM, CONF_NAME, \
 | 
				
			||||||
    CONF_OSCILLATION_OUTPUT, CONF_OUTPUT, CONF_SPEED, CONF_SPEED_COMMAND_TOPIC, \
 | 
					    CONF_OSCILLATION_OUTPUT, CONF_OUTPUT, CONF_SPEED, CONF_SPEED_COMMAND_TOPIC, \
 | 
				
			||||||
    CONF_SPEED_STATE_TOPIC
 | 
					    CONF_SPEED_STATE_TOPIC
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, variable, add
 | 
					from esphome.cpp_generator import add, get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(fan.FAN_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(fan.FAN_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(fan.MakeFan),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(fan.MakeFan),
 | 
				
			||||||
@@ -41,7 +41,7 @@ def to_code(config):
 | 
				
			|||||||
            yield
 | 
					            yield
 | 
				
			||||||
        add(fan_struct.Poutput.set_oscillation(oscillation_output))
 | 
					        add(fan_struct.Poutput.set_oscillation(oscillation_output))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fan.setup_fan(fan_struct.Pstate, fan_struct.Pmqtt, config)
 | 
					    fan.setup_fan(fan_struct.Pstate, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def to_hass_config(data, config):
 | 
					def to_hass_config(data, config):
 | 
				
			||||||
@@ -1,14 +1,14 @@
 | 
				
			|||||||
# coding=utf-8
 | 
					# coding=utf-8
 | 
				
			||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import core
 | 
					from esphome import core
 | 
				
			||||||
from esphomeyaml.components import display
 | 
					from esphome.components import display
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_FILE, CONF_GLYPHS, CONF_ID, CONF_SIZE
 | 
					from esphome.const import CONF_FILE, CONF_GLYPHS, CONF_ID, CONF_SIZE
 | 
				
			||||||
from esphomeyaml.core import CORE, HexInt
 | 
					from esphome.core import CORE, HexInt
 | 
				
			||||||
from esphomeyaml.cpp_generator import ArrayInitializer, MockObj, Pvariable, RawExpression, add
 | 
					from esphome.cpp_generator import Pvariable, progmem_array, safe_exp
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App, uint8
 | 
				
			||||||
from esphomeyaml.py_compat import sort_by_cmp
 | 
					from esphome.py_compat import sort_by_cmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['display']
 | 
					DEPENDENCIES = ['display']
 | 
				
			||||||
MULTI_CONF = True
 | 
					MULTI_CONF = True
 | 
				
			||||||
@@ -74,7 +74,7 @@ FONT_SCHEMA = vol.Schema({
 | 
				
			|||||||
    vol.Required(CONF_FILE): validate_truetype_file,
 | 
					    vol.Required(CONF_FILE): validate_truetype_file,
 | 
				
			||||||
    vol.Optional(CONF_GLYPHS, default=DEFAULT_GLYPHS): validate_glyphs,
 | 
					    vol.Optional(CONF_GLYPHS, default=DEFAULT_GLYPHS): validate_glyphs,
 | 
				
			||||||
    vol.Optional(CONF_SIZE, default=20): vol.All(cv.int_, vol.Range(min=1)),
 | 
					    vol.Optional(CONF_SIZE, default=20): vol.All(cv.int_, vol.Range(min=1)),
 | 
				
			||||||
    cv.GenerateID(CONF_RAW_DATA_ID): cv.declare_variable_id(None),
 | 
					    cv.GenerateID(CONF_RAW_DATA_ID): cv.declare_variable_id(uint8),
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_SCHEMA = vol.All(validate_pillow_installed, FONT_SCHEMA)
 | 
					CONFIG_SCHEMA = vol.All(validate_pillow_installed, FONT_SCHEMA)
 | 
				
			||||||
@@ -87,7 +87,7 @@ def to_code(config):
 | 
				
			|||||||
    try:
 | 
					    try:
 | 
				
			||||||
        font = ImageFont.truetype(path, config[CONF_SIZE])
 | 
					        font = ImageFont.truetype(path, config[CONF_SIZE])
 | 
				
			||||||
    except Exception as e:
 | 
					    except Exception as e:
 | 
				
			||||||
        raise core.EsphomeyamlError(u"Could not load truetype file {}: {}".format(path, e))
 | 
					        raise core.EsphomeError(u"Could not load truetype file {}: {}".format(path, e))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ascent, descent = font.getmetrics()
 | 
					    ascent, descent = font.getmetrics()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -108,14 +108,12 @@ def to_code(config):
 | 
				
			|||||||
        glyph_args[glyph] = (len(data), offset_x, offset_y, width, height)
 | 
					        glyph_args[glyph] = (len(data), offset_x, offset_y, width, height)
 | 
				
			||||||
        data += glyph_data
 | 
					        data += glyph_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    raw_data = MockObj(config[CONF_RAW_DATA_ID])
 | 
					    rhs = safe_exp([HexInt(x) for x in data])
 | 
				
			||||||
    add(RawExpression('static const uint8_t {}[{}] PROGMEM = {}'.format(
 | 
					    prog_arr = progmem_array(config[CONF_RAW_DATA_ID], rhs)
 | 
				
			||||||
        raw_data, len(data),
 | 
					 | 
				
			||||||
        ArrayInitializer(*[HexInt(x) for x in data], multiline=False))))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glyphs = []
 | 
					    glyphs = []
 | 
				
			||||||
    for glyph in config[CONF_GLYPHS]:
 | 
					    for glyph in config[CONF_GLYPHS]:
 | 
				
			||||||
        glyphs.append(Glyph(glyph, raw_data, *glyph_args[glyph]))
 | 
					        glyphs.append(Glyph(glyph, prog_arr, *glyph_args[glyph]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rhs = App.make_font(ArrayInitializer(*glyphs), ascent, ascent + descent)
 | 
					    rhs = App.make_font(glyphs, ascent, ascent + descent)
 | 
				
			||||||
    Pvariable(config[CONF_ID], rhs)
 | 
					    Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import config_validation as cv
 | 
					from esphome import config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_INITIAL_VALUE, CONF_RESTORE_VALUE, CONF_TYPE
 | 
					from esphome.const import CONF_ID, CONF_INITIAL_VALUE, CONF_RESTORE_VALUE, CONF_TYPE
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, RawExpression, TemplateArguments, add
 | 
					from esphome.cpp_generator import Pvariable, RawExpression, TemplateArguments, add
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component, esphomelib_ns
 | 
					from esphome.cpp_types import App, Component, esphome_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GlobalVariableComponent = esphomelib_ns.class_('GlobalVariableComponent', Component)
 | 
					GlobalVariableComponent = esphome_ns.class_('GlobalVariableComponent', Component)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MULTI_CONF = True
 | 
					MULTI_CONF = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,20 +1,20 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_FREQUENCY, CONF_ID, CONF_RECEIVE_TIMEOUT, CONF_SCAN, CONF_SCL, \
 | 
					from esphome.const import CONF_FREQUENCY, CONF_ID, CONF_RECEIVE_TIMEOUT, CONF_SCAN, CONF_SCL, \
 | 
				
			||||||
    CONF_SDA
 | 
					    CONF_SDA
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component, esphomelib_ns
 | 
					from esphome.cpp_types import App, Component, esphome_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I2CComponent = esphomelib_ns.class_('I2CComponent', Component)
 | 
					I2CComponent = esphome_ns.class_('I2CComponent', Component)
 | 
				
			||||||
I2CDevice = pins.I2CDevice
 | 
					I2CDevice = pins.I2CDevice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_SCHEMA = vol.Schema({
 | 
					CONFIG_SCHEMA = vol.Schema({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(I2CComponent),
 | 
					    cv.GenerateID(): cv.declare_variable_id(I2CComponent),
 | 
				
			||||||
    vol.Optional(CONF_SDA, default='SDA'): pins.input_pullup_pin,
 | 
					    vol.Optional(CONF_SDA, default='SDA'): pins.input_pin,
 | 
				
			||||||
    vol.Optional(CONF_SCL, default='SCL'): pins.input_pullup_pin,
 | 
					    vol.Optional(CONF_SCL, default='SCL'): pins.input_pin,
 | 
				
			||||||
    vol.Optional(CONF_FREQUENCY): vol.All(cv.frequency, vol.Range(min=0, min_included=False)),
 | 
					    vol.Optional(CONF_FREQUENCY): vol.All(cv.frequency, vol.Range(min=0, min_included=False)),
 | 
				
			||||||
    vol.Optional(CONF_SCAN): cv.boolean,
 | 
					    vol.Optional(CONF_SCAN): cv.boolean,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3,13 +3,13 @@ import logging
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import core
 | 
					from esphome import core
 | 
				
			||||||
from esphomeyaml.components import display, font
 | 
					from esphome.components import display, font
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_FILE, CONF_ID, CONF_RESIZE
 | 
					from esphome.const import CONF_FILE, CONF_ID, CONF_RESIZE
 | 
				
			||||||
from esphomeyaml.core import CORE, HexInt
 | 
					from esphome.core import CORE, HexInt
 | 
				
			||||||
from esphomeyaml.cpp_generator import ArrayInitializer, MockObj, Pvariable, RawExpression, add
 | 
					from esphome.cpp_generator import Pvariable, progmem_array, safe_exp
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App, uint8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_LOGGER = logging.getLogger(__name__)
 | 
					_LOGGER = logging.getLogger(__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,7 +24,7 @@ IMAGE_SCHEMA = vol.Schema({
 | 
				
			|||||||
    vol.Required(CONF_ID): cv.declare_variable_id(Image_),
 | 
					    vol.Required(CONF_ID): cv.declare_variable_id(Image_),
 | 
				
			||||||
    vol.Required(CONF_FILE): cv.file_,
 | 
					    vol.Required(CONF_FILE): cv.file_,
 | 
				
			||||||
    vol.Optional(CONF_RESIZE): cv.dimensions,
 | 
					    vol.Optional(CONF_RESIZE): cv.dimensions,
 | 
				
			||||||
    cv.GenerateID(CONF_RAW_DATA_ID): cv.declare_variable_id(None),
 | 
					    cv.GenerateID(CONF_RAW_DATA_ID): cv.declare_variable_id(uint8),
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_SCHEMA = vol.All(font.validate_pillow_installed, IMAGE_SCHEMA)
 | 
					CONFIG_SCHEMA = vol.All(font.validate_pillow_installed, IMAGE_SCHEMA)
 | 
				
			||||||
@@ -37,7 +37,7 @@ def to_code(config):
 | 
				
			|||||||
    try:
 | 
					    try:
 | 
				
			||||||
        image = Image.open(path)
 | 
					        image = Image.open(path)
 | 
				
			||||||
    except Exception as e:
 | 
					    except Exception as e:
 | 
				
			||||||
        raise core.EsphomeyamlError(u"Could not load image file {}: {}".format(path, e))
 | 
					        raise core.EsphomeError(u"Could not load image file {}: {}".format(path, e))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if CONF_RESIZE in config:
 | 
					    if CONF_RESIZE in config:
 | 
				
			||||||
        image.thumbnail(config[CONF_RESIZE])
 | 
					        image.thumbnail(config[CONF_RESIZE])
 | 
				
			||||||
@@ -56,10 +56,8 @@ def to_code(config):
 | 
				
			|||||||
            pos = x + y * width8
 | 
					            pos = x + y * width8
 | 
				
			||||||
            data[pos // 8] |= 0x80 >> (pos % 8)
 | 
					            data[pos // 8] |= 0x80 >> (pos % 8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    raw_data = MockObj(config[CONF_RAW_DATA_ID])
 | 
					    rhs = safe_exp([HexInt(x) for x in data])
 | 
				
			||||||
    add(RawExpression('static const uint8_t {}[{}] PROGMEM = {}'.format(
 | 
					    prog_arr = progmem_array(config[CONF_RAW_DATA_ID], rhs)
 | 
				
			||||||
        raw_data, len(data),
 | 
					 | 
				
			||||||
        ArrayInitializer(*[HexInt(x) for x in data], multiline=False))))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rhs = App.make_image(raw_data, width, height)
 | 
					    rhs = App.make_image(prog_arr, width, height)
 | 
				
			||||||
    Pvariable(config[CONF_ID], rhs)
 | 
					    Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
@@ -1,13 +1,13 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import automation
 | 
					from esphome import automation
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_INTERVAL
 | 
					from esphome.const import CONF_ID, CONF_INTERVAL
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable
 | 
					from esphome.cpp_generator import Pvariable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, NoArg, PollingComponent, Trigger, esphomelib_ns
 | 
					from esphome.cpp_types import App, NoArg, PollingComponent, Trigger, esphome_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IntervalTrigger = esphomelib_ns.class_('IntervalTrigger', Trigger.template(NoArg), PollingComponent)
 | 
					IntervalTrigger = esphome_ns.class_('IntervalTrigger', Trigger.template(NoArg), PollingComponent)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_SCHEMA = automation.validate_automation(vol.Schema({
 | 
					CONFIG_SCHEMA = automation.validate_automation(vol.Schema({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(IntervalTrigger),
 | 
					    cv.GenerateID(): cv.declare_variable_id(IntervalTrigger),
 | 
				
			||||||
@@ -1,28 +1,29 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.automation import ACTION_REGISTRY, maybe_simple_id
 | 
					from esphome.automation import ACTION_REGISTRY, maybe_simple_id
 | 
				
			||||||
from esphomeyaml.components import mqtt
 | 
					from esphome.components import mqtt
 | 
				
			||||||
from esphomeyaml.components.mqtt import setup_mqtt_component
 | 
					from esphome.components.mqtt import setup_mqtt_component
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ALPHA, CONF_BLUE, CONF_BRIGHTNESS, CONF_COLORS, \
 | 
					from esphome.const import CONF_ALPHA, CONF_BLUE, CONF_BRIGHTNESS, CONF_COLORS, \
 | 
				
			||||||
    CONF_DEFAULT_TRANSITION_LENGTH, CONF_DURATION, CONF_EFFECTS, CONF_EFFECT_ID, \
 | 
					    CONF_COLOR_TEMPERATURE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_DURATION, CONF_EFFECT, \
 | 
				
			||||||
    CONF_GAMMA_CORRECT, CONF_GREEN, CONF_ID, CONF_INTERNAL, CONF_LAMBDA, CONF_MQTT_ID, CONF_NAME, \
 | 
					    CONF_EFFECTS, CONF_EFFECT_ID, CONF_FLASH_LENGTH, CONF_GAMMA_CORRECT, CONF_GREEN, CONF_ID, \
 | 
				
			||||||
    CONF_NUM_LEDS, CONF_RANDOM, CONF_RED, CONF_SPEED, CONF_STATE, CONF_TRANSITION_LENGTH, \
 | 
					    CONF_INTERNAL, CONF_LAMBDA, CONF_MQTT_ID, CONF_NAME, CONF_NUM_LEDS, CONF_RANDOM, CONF_RED, \
 | 
				
			||||||
    CONF_UPDATE_INTERVAL, CONF_WHITE, CONF_WIDTH, CONF_FLASH_LENGTH, CONF_COLOR_TEMPERATURE, \
 | 
					    CONF_SPEED, CONF_STATE, CONF_TRANSITION_LENGTH, CONF_UPDATE_INTERVAL, CONF_WHITE, CONF_WIDTH
 | 
				
			||||||
    CONF_EFFECT
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.core import CORE
 | 
					from esphome.cpp_generator import Pvariable, StructInitializer, add, get_variable, process_lambda, \
 | 
				
			||||||
from esphomeyaml.cpp_generator import process_lambda, Pvariable, add, StructInitializer, \
 | 
					    templatable
 | 
				
			||||||
    ArrayInitializer, get_variable, templatable
 | 
					from esphome.cpp_types import Action, Application, Component, Nameable, esphome_ns, float_, \
 | 
				
			||||||
from esphomeyaml.cpp_types import esphomelib_ns, Application, Component, Nameable, Action, uint32, \
 | 
					    std_string, uint32, void
 | 
				
			||||||
    float_, std_string, void
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Base
 | 
					# Base
 | 
				
			||||||
light_ns = esphomelib_ns.namespace('light')
 | 
					light_ns = esphome_ns.namespace('light')
 | 
				
			||||||
LightState = light_ns.class_('LightState', Nameable, Component)
 | 
					LightState = light_ns.class_('LightState', Nameable, Component)
 | 
				
			||||||
 | 
					# Fake class for addressable lights
 | 
				
			||||||
 | 
					AddressableLightState = light_ns.class_('LightState', LightState)
 | 
				
			||||||
MakeLight = Application.struct('MakeLight')
 | 
					MakeLight = Application.struct('MakeLight')
 | 
				
			||||||
LightOutput = light_ns.class_('LightOutput')
 | 
					LightOutput = light_ns.class_('LightOutput')
 | 
				
			||||||
AddressableLight = light_ns.class_('AddressableLight')
 | 
					AddressableLight = light_ns.class_('AddressableLight')
 | 
				
			||||||
@@ -279,7 +280,7 @@ def build_effect(full_config):
 | 
				
			|||||||
                ('duration', color[CONF_DURATION]),
 | 
					                ('duration', color[CONF_DURATION]),
 | 
				
			||||||
            ))
 | 
					            ))
 | 
				
			||||||
        if colors:
 | 
					        if colors:
 | 
				
			||||||
            add(effect.set_colors(ArrayInitializer(*colors)))
 | 
					            add(effect.set_colors(colors))
 | 
				
			||||||
        yield effect
 | 
					        yield effect
 | 
				
			||||||
    elif key == CONF_FLICKER:
 | 
					    elif key == CONF_FLICKER:
 | 
				
			||||||
        rhs = FlickerLightEffect.new(config[CONF_NAME])
 | 
					        rhs = FlickerLightEffect.new(config[CONF_NAME])
 | 
				
			||||||
@@ -322,7 +323,7 @@ def build_effect(full_config):
 | 
				
			|||||||
                ('num_leds', color[CONF_NUM_LEDS]),
 | 
					                ('num_leds', color[CONF_NUM_LEDS]),
 | 
				
			||||||
            ))
 | 
					            ))
 | 
				
			||||||
        if colors:
 | 
					        if colors:
 | 
				
			||||||
            add(effect.set_colors(ArrayInitializer(*colors)))
 | 
					            add(effect.set_colors(colors))
 | 
				
			||||||
        yield effect
 | 
					        yield effect
 | 
				
			||||||
    elif key == CONF_ADDRESSABLE_SCAN:
 | 
					    elif key == CONF_ADDRESSABLE_SCAN:
 | 
				
			||||||
        rhs = AddressableScanEffect.new(config[CONF_NAME])
 | 
					        rhs = AddressableScanEffect.new(config[CONF_NAME])
 | 
				
			||||||
@@ -370,7 +371,7 @@ def build_effect(full_config):
 | 
				
			|||||||
        raise NotImplementedError("Effect {} not implemented".format(next(config.keys())))
 | 
					        raise NotImplementedError("Effect {} not implemented".format(next(config.keys())))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setup_light_core_(light_var, mqtt_var, config):
 | 
					def setup_light_core_(light_var, config):
 | 
				
			||||||
    if CONF_INTERNAL in config:
 | 
					    if CONF_INTERNAL in config:
 | 
				
			||||||
        add(light_var.set_internal(config[CONF_INTERNAL]))
 | 
					        add(light_var.set_internal(config[CONF_INTERNAL]))
 | 
				
			||||||
    if CONF_DEFAULT_TRANSITION_LENGTH in config:
 | 
					    if CONF_DEFAULT_TRANSITION_LENGTH in config:
 | 
				
			||||||
@@ -383,15 +384,14 @@ def setup_light_core_(light_var, mqtt_var, config):
 | 
				
			|||||||
            yield
 | 
					            yield
 | 
				
			||||||
        effects.append(effect)
 | 
					        effects.append(effect)
 | 
				
			||||||
    if effects:
 | 
					    if effects:
 | 
				
			||||||
        add(light_var.add_effects(ArrayInitializer(*effects)))
 | 
					        add(light_var.add_effects(effects))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setup_mqtt_component(mqtt_var, config)
 | 
					    setup_mqtt_component(light_var.Pget_mqtt(), config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setup_light(light_obj, mqtt_obj, config):
 | 
					def setup_light(light_obj, config):
 | 
				
			||||||
    light_var = Pvariable(config[CONF_ID], light_obj, has_side_effects=False)
 | 
					    light_var = Pvariable(config[CONF_ID], light_obj, has_side_effects=False)
 | 
				
			||||||
    mqtt_var = Pvariable(config[CONF_MQTT_ID], mqtt_obj, has_side_effects=False)
 | 
					    CORE.add_job(setup_light_core_, light_var, config)
 | 
				
			||||||
    CORE.add_job(setup_light_core_, light_var, mqtt_var, config)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_LIGHT'
 | 
					BUILD_FLAGS = '-DUSE_LIGHT'
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import light, output
 | 
					from esphome.components import light, output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_EFFECTS, CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT
 | 
					from esphome.const import CONF_EFFECTS, CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, variable
 | 
					from esphome.cpp_generator import get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
				
			||||||
@@ -19,7 +19,7 @@ def to_code(config):
 | 
				
			|||||||
        yield
 | 
					        yield
 | 
				
			||||||
    rhs = App.make_binary_light(config[CONF_NAME], output_)
 | 
					    rhs = App.make_binary_light(config[CONF_NAME], output_)
 | 
				
			||||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
					    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
				
			||||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
					    light.setup_light(light_struct.Pstate, config)
 | 
				
			||||||
    setup_component(light_struct.Pstate, config)
 | 
					    setup_component(light_struct.Pstate, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,15 +1,15 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome.components import light, output
 | 
				
			||||||
from esphomeyaml.components import light, output
 | 
					from esphome.components.light.rgbww import validate_cold_white_colder, \
 | 
				
			||||||
from esphomeyaml.components.light.rgbww import validate_cold_white_colder, \
 | 
					 | 
				
			||||||
    validate_color_temperature
 | 
					    validate_color_temperature
 | 
				
			||||||
from esphomeyaml.const import CONF_COLD_WHITE, CONF_COLD_WHITE_COLOR_TEMPERATURE, \
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
 | 
					from esphome.const import CONF_COLD_WHITE, CONF_COLD_WHITE_COLOR_TEMPERATURE, \
 | 
				
			||||||
    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, \
 | 
					    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, \
 | 
				
			||||||
    CONF_NAME, CONF_WARM_WHITE, CONF_WARM_WHITE_COLOR_TEMPERATURE
 | 
					    CONF_NAME, CONF_WARM_WHITE, CONF_WARM_WHITE_COLOR_TEMPERATURE
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, variable
 | 
					from esphome.cpp_generator import get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
				
			||||||
@@ -33,7 +33,7 @@ def to_code(config):
 | 
				
			|||||||
                              config[CONF_WARM_WHITE_COLOR_TEMPERATURE],
 | 
					                              config[CONF_WARM_WHITE_COLOR_TEMPERATURE],
 | 
				
			||||||
                              cold_white, warm_white)
 | 
					                              cold_white, warm_white)
 | 
				
			||||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
					    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
				
			||||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
					    light.setup_light(light_struct.Pstate, config)
 | 
				
			||||||
    setup_component(light_struct.Pstate, config)
 | 
					    setup_component(light_struct.Pstate, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,15 +1,15 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import light
 | 
					from esphome.components import light
 | 
				
			||||||
from esphomeyaml.components.power_supply import PowerSupplyComponent
 | 
					from esphome.components.power_supply import PowerSupplyComponent
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_CHIPSET, CONF_COLOR_CORRECT, CONF_DEFAULT_TRANSITION_LENGTH, \
 | 
					from esphome.const import CONF_CHIPSET, CONF_COLOR_CORRECT, CONF_DEFAULT_TRANSITION_LENGTH, \
 | 
				
			||||||
    CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, CONF_MAX_REFRESH_RATE, CONF_NAME, \
 | 
					    CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, CONF_MAX_REFRESH_RATE, CONF_NAME, \
 | 
				
			||||||
    CONF_NUM_LEDS, CONF_PIN, CONF_POWER_SUPPLY, CONF_RGB_ORDER
 | 
					    CONF_NUM_LEDS, CONF_PIN, CONF_POWER_SUPPLY, CONF_RGB_ORDER
 | 
				
			||||||
from esphomeyaml.cpp_generator import RawExpression, TemplateArguments, add, get_variable, variable
 | 
					from esphome.cpp_generator import RawExpression, TemplateArguments, add, get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Application
 | 
					from esphome.cpp_types import App, Application
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TYPES = [
 | 
					TYPES = [
 | 
				
			||||||
    'NEOPIXEL',
 | 
					    'NEOPIXEL',
 | 
				
			||||||
@@ -57,6 +57,7 @@ def validate(value):
 | 
				
			|||||||
MakeFastLEDLight = Application.struct('MakeFastLEDLight')
 | 
					MakeFastLEDLight = Application.struct('MakeFastLEDLight')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.declare_variable_id(light.AddressableLightState),
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vol.Required(CONF_CHIPSET): cv.one_of(*TYPES, upper=True),
 | 
					    vol.Required(CONF_CHIPSET): cv.one_of(*TYPES, upper=True),
 | 
				
			||||||
@@ -98,11 +99,13 @@ def to_code(config):
 | 
				
			|||||||
        r, g, b = config[CONF_COLOR_CORRECT]
 | 
					        r, g, b = config[CONF_COLOR_CORRECT]
 | 
				
			||||||
        add(fast_led.set_correction(r, g, b))
 | 
					        add(fast_led.set_correction(r, g, b))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    light.setup_light(make.Pstate, make.Pmqtt, config)
 | 
					    light.setup_light(make.Pstate, config)
 | 
				
			||||||
    setup_component(fast_led, config)
 | 
					    setup_component(fast_led, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_FAST_LED_LIGHT'
 | 
					REQUIRED_BUILD_FLAGS = '-DUSE_FAST_LED_LIGHT'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LIB_DEPS = 'FastLED@3.2.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB_DEPS = 'FastLED@3.2.0'
 | 
					LIB_DEPS = 'FastLED@3.2.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,15 +1,15 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import light
 | 
					from esphome.components import light
 | 
				
			||||||
from esphomeyaml.components.power_supply import PowerSupplyComponent
 | 
					from esphome.components.power_supply import PowerSupplyComponent
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_CHIPSET, CONF_CLOCK_PIN, CONF_COLOR_CORRECT, CONF_DATA_PIN, \
 | 
					from esphome.const import CONF_CHIPSET, CONF_CLOCK_PIN, CONF_COLOR_CORRECT, CONF_DATA_PIN, \
 | 
				
			||||||
    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, \
 | 
					    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, \
 | 
				
			||||||
    CONF_MAX_REFRESH_RATE, CONF_NAME, CONF_NUM_LEDS, CONF_POWER_SUPPLY, CONF_RGB_ORDER
 | 
					    CONF_MAX_REFRESH_RATE, CONF_NAME, CONF_NUM_LEDS, CONF_POWER_SUPPLY, CONF_RGB_ORDER
 | 
				
			||||||
from esphomeyaml.cpp_generator import RawExpression, TemplateArguments, add, get_variable, variable
 | 
					from esphome.cpp_generator import RawExpression, TemplateArguments, add, get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Application
 | 
					from esphome.cpp_types import App, Application
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CHIPSETS = [
 | 
					CHIPSETS = [
 | 
				
			||||||
    'LPD8806',
 | 
					    'LPD8806',
 | 
				
			||||||
@@ -34,6 +34,7 @@ RGB_ORDERS = [
 | 
				
			|||||||
MakeFastLEDLight = Application.struct('MakeFastLEDLight')
 | 
					MakeFastLEDLight = Application.struct('MakeFastLEDLight')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.declare_variable_id(light.AddressableLightState),
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vol.Required(CONF_CHIPSET): cv.one_of(*CHIPSETS, upper=True),
 | 
					    vol.Required(CONF_CHIPSET): cv.one_of(*CHIPSETS, upper=True),
 | 
				
			||||||
@@ -78,11 +79,13 @@ def to_code(config):
 | 
				
			|||||||
        r, g, b = config[CONF_COLOR_CORRECT]
 | 
					        r, g, b = config[CONF_COLOR_CORRECT]
 | 
				
			||||||
        add(fast_led.set_correction(r, g, b))
 | 
					        add(fast_led.set_correction(r, g, b))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    light.setup_light(make.Pstate, make.Pmqtt, config)
 | 
					    light.setup_light(make.Pstate, config)
 | 
				
			||||||
    setup_component(fast_led, config)
 | 
					    setup_component(fast_led, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_FAST_LED_LIGHT'
 | 
					REQUIRED_BUILD_FLAGS = '-DUSE_FAST_LED_LIGHT'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LIB_DEPS = 'FastLED@3.2.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB_DEPS = 'FastLED@3.2.0'
 | 
					LIB_DEPS = 'FastLED@3.2.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import light, output
 | 
					from esphome.components import light, output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, \
 | 
					from esphome.const import CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, \
 | 
				
			||||||
    CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT
 | 
					    CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, variable
 | 
					from esphome.cpp_generator import get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
				
			||||||
@@ -22,7 +22,7 @@ def to_code(config):
 | 
				
			|||||||
        yield
 | 
					        yield
 | 
				
			||||||
    rhs = App.make_monochromatic_light(config[CONF_NAME], output_)
 | 
					    rhs = App.make_monochromatic_light(config[CONF_NAME], output_)
 | 
				
			||||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
					    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
				
			||||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
					    light.setup_light(light_struct.Pstate, config)
 | 
				
			||||||
    setup_component(light_struct.Pstate, config)
 | 
					    setup_component(light_struct.Pstate, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,17 +1,17 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import light
 | 
					from esphome.components import light
 | 
				
			||||||
from esphomeyaml.components.light import AddressableLight
 | 
					from esphome.components.light import AddressableLight
 | 
				
			||||||
from esphomeyaml.components.power_supply import PowerSupplyComponent
 | 
					from esphome.components.power_supply import PowerSupplyComponent
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_CLOCK_PIN, CONF_COLOR_CORRECT, CONF_DATA_PIN, \
 | 
					from esphome.const import CONF_CLOCK_PIN, CONF_COLOR_CORRECT, CONF_DATA_PIN, \
 | 
				
			||||||
    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, CONF_METHOD, \
 | 
					    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, CONF_METHOD, \
 | 
				
			||||||
    CONF_NAME, CONF_NUM_LEDS, CONF_PIN, CONF_POWER_SUPPLY, CONF_TYPE, CONF_VARIANT
 | 
					    CONF_NAME, CONF_NUM_LEDS, CONF_PIN, CONF_POWER_SUPPLY, CONF_TYPE, CONF_VARIANT
 | 
				
			||||||
from esphomeyaml.core import CORE
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.cpp_generator import TemplateArguments, add, get_variable, variable
 | 
					from esphome.cpp_generator import TemplateArguments, add, get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Application, Component, global_ns
 | 
					from esphome.cpp_types import App, Application, Component, global_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NeoPixelBusLightOutputBase = light.light_ns.class_('NeoPixelBusLightOutputBase', Component,
 | 
					NeoPixelBusLightOutputBase = light.light_ns.class_('NeoPixelBusLightOutputBase', Component,
 | 
				
			||||||
                                                   AddressableLight)
 | 
					                                                   AddressableLight)
 | 
				
			||||||
@@ -60,6 +60,30 @@ def validate_method(value):
 | 
				
			|||||||
    raise NotImplementedError
 | 
					    raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def validate_method_pin(value):
 | 
				
			||||||
 | 
					    method = value[CONF_METHOD]
 | 
				
			||||||
 | 
					    method_pins = {
 | 
				
			||||||
 | 
					        'ESP8266_DMA': [3],
 | 
				
			||||||
 | 
					        'ESP8266_UART0': [1],
 | 
				
			||||||
 | 
					        'ESP8266_ASYNC_UART0': [1],
 | 
				
			||||||
 | 
					        'ESP8266_UART1': [2],
 | 
				
			||||||
 | 
					        'ESP8266_ASYNC_UART1': [2],
 | 
				
			||||||
 | 
					        'ESP32_I2S_0': list(range(0, 32)),
 | 
				
			||||||
 | 
					        'ESP32_I2S_1': list(range(0, 32)),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if CORE.is_esp8266:
 | 
				
			||||||
 | 
					        method_pins['BIT_BANG'] = list(range(0, 16))
 | 
				
			||||||
 | 
					    elif CORE.is_esp32:
 | 
				
			||||||
 | 
					        method_pins['BIT_BANG'] = list(range(0, 32))
 | 
				
			||||||
 | 
					    pins_ = method_pins[method]
 | 
				
			||||||
 | 
					    for opt in (CONF_PIN, CONF_CLOCK_PIN, CONF_DATA_PIN):
 | 
				
			||||||
 | 
					        if opt in value and value[opt] not in pins_:
 | 
				
			||||||
 | 
					            raise vol.Invalid("Method {} only supports pin(s) {}".format(
 | 
				
			||||||
 | 
					                method, ', '.join('GPIO{}'.format(x) for x in pins_)
 | 
				
			||||||
 | 
					            ), path=[CONF_METHOD])
 | 
				
			||||||
 | 
					    return value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VARIANTS = {
 | 
					VARIANTS = {
 | 
				
			||||||
    'WS2812X': 'Ws2812x',
 | 
					    'WS2812X': 'Ws2812x',
 | 
				
			||||||
    'SK6812': 'Sk6812',
 | 
					    'SK6812': 'Sk6812',
 | 
				
			||||||
@@ -107,6 +131,7 @@ def validate(config):
 | 
				
			|||||||
MakeNeoPixelBusLight = Application.struct('MakeNeoPixelBusLight')
 | 
					MakeNeoPixelBusLight = Application.struct('MakeNeoPixelBusLight')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.declare_variable_id(light.AddressableLightState),
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeNeoPixelBusLight),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeNeoPixelBusLight),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vol.Optional(CONF_TYPE, default='GRB'): validate_type,
 | 
					    vol.Optional(CONF_TYPE, default='GRB'): validate_type,
 | 
				
			||||||
@@ -123,7 +148,7 @@ PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			|||||||
    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
					    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
				
			||||||
    vol.Optional(CONF_POWER_SUPPLY): cv.use_variable_id(PowerSupplyComponent),
 | 
					    vol.Optional(CONF_POWER_SUPPLY): cv.use_variable_id(PowerSupplyComponent),
 | 
				
			||||||
    vol.Optional(CONF_EFFECTS): light.validate_effects(light.ADDRESSABLE_EFFECTS),
 | 
					    vol.Optional(CONF_EFFECTS): light.validate_effects(light.ADDRESSABLE_EFFECTS),
 | 
				
			||||||
}).extend(cv.COMPONENT_SCHEMA.schema), validate)
 | 
					}).extend(cv.COMPONENT_SCHEMA.schema), validate, validate_method_pin)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def to_code(config):
 | 
					def to_code(config):
 | 
				
			||||||
@@ -156,11 +181,11 @@ def to_code(config):
 | 
				
			|||||||
    if CONF_COLOR_CORRECT in config:
 | 
					    if CONF_COLOR_CORRECT in config:
 | 
				
			||||||
        add(output.set_correction(*config[CONF_COLOR_CORRECT]))
 | 
					        add(output.set_correction(*config[CONF_COLOR_CORRECT]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    light.setup_light(make.Pstate, make.Pmqtt, config)
 | 
					    light.setup_light(make.Pstate, config)
 | 
				
			||||||
    setup_component(output, config)
 | 
					    setup_component(output, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_NEO_PIXEL_BUS_LIGHT'
 | 
					REQUIRED_BUILD_FLAGS = '-DUSE_NEO_PIXEL_BUS_LIGHT'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIB_DEPS = 'NeoPixelBus@2.4.1'
 | 
					LIB_DEPS = 'NeoPixelBus@2.4.1'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										52
									
								
								esphome/components/light/partition.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								esphome/components/light/partition.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from esphome.components import light
 | 
				
			||||||
 | 
					from esphome.components.light import AddressableLight
 | 
				
			||||||
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
 | 
					from esphome.const import CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_FROM, CONF_ID, \
 | 
				
			||||||
 | 
					    CONF_MAKE_ID, CONF_NAME, CONF_SEGMENTS, CONF_TO
 | 
				
			||||||
 | 
					from esphome.cpp_generator import get_variable, variable
 | 
				
			||||||
 | 
					from esphome.cpp_types import App, Application
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AddressableSegment = light.light_ns.class_('AddressableSegment')
 | 
				
			||||||
 | 
					PartitionLightOutput = light.light_ns.class_('PartitionLightOutput', AddressableLight)
 | 
				
			||||||
 | 
					MakePartitionLight = Application.struct('MakePartitionLight')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def validate_from_to(value):
 | 
				
			||||||
 | 
					    if value[CONF_FROM] > value[CONF_TO]:
 | 
				
			||||||
 | 
					        raise vol.Invalid(u"From ({}) must not be larger than to ({})"
 | 
				
			||||||
 | 
					                          u"".format(value[CONF_FROM], value[CONF_TO]))
 | 
				
			||||||
 | 
					    return value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.declare_variable_id(light.AddressableLightState),
 | 
				
			||||||
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakePartitionLight),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vol.Required(CONF_SEGMENTS): vol.All(cv.ensure_list({
 | 
				
			||||||
 | 
					        vol.Required(CONF_ID): cv.use_variable_id(light.AddressableLightState),
 | 
				
			||||||
 | 
					        vol.Required(CONF_FROM): cv.positive_int,
 | 
				
			||||||
 | 
					        vol.Required(CONF_TO): cv.positive_int,
 | 
				
			||||||
 | 
					    }, validate_from_to), vol.Length(min=1)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds,
 | 
				
			||||||
 | 
					    vol.Optional(CONF_EFFECTS): light.validate_effects(light.ADDRESSABLE_EFFECTS),
 | 
				
			||||||
 | 
					}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def to_code(config):
 | 
				
			||||||
 | 
					    segments = []
 | 
				
			||||||
 | 
					    for conf in config[CONF_SEGMENTS]:
 | 
				
			||||||
 | 
					        for var in get_variable(conf[CONF_ID]):
 | 
				
			||||||
 | 
					            yield
 | 
				
			||||||
 | 
					        segments.append(AddressableSegment(var, conf[CONF_FROM],
 | 
				
			||||||
 | 
					                                           conf[CONF_TO] - conf[CONF_FROM] + 1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rhs = App.make_partition_light(config[CONF_NAME], segments)
 | 
				
			||||||
 | 
					    make = variable(config[CONF_MAKE_ID], rhs)
 | 
				
			||||||
 | 
					    light.setup_light(make.Pstate, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def to_hass_config(data, config):
 | 
				
			||||||
 | 
					    return light.core_to_hass_config(data, config, brightness=True, rgb=True, color_temp=False)
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import light, output
 | 
					from esphome.components import light, output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_BLUE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, \
 | 
					from esphome.const import CONF_BLUE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, \
 | 
				
			||||||
    CONF_GAMMA_CORRECT, CONF_GREEN, CONF_MAKE_ID, CONF_NAME, CONF_RED
 | 
					    CONF_GAMMA_CORRECT, CONF_GREEN, CONF_MAKE_ID, CONF_NAME, CONF_RED
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, variable
 | 
					from esphome.cpp_generator import get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
				
			||||||
@@ -28,7 +28,7 @@ def to_code(config):
 | 
				
			|||||||
        yield
 | 
					        yield
 | 
				
			||||||
    rhs = App.make_rgb_light(config[CONF_NAME], red, green, blue)
 | 
					    rhs = App.make_rgb_light(config[CONF_NAME], red, green, blue)
 | 
				
			||||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
					    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
				
			||||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
					    light.setup_light(light_struct.Pstate, config)
 | 
				
			||||||
    setup_component(light_struct.Pstate, config)
 | 
					    setup_component(light_struct.Pstate, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import light, output
 | 
					from esphome.components import light, output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_BLUE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, \
 | 
					from esphome.const import CONF_BLUE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, \
 | 
				
			||||||
    CONF_GAMMA_CORRECT, CONF_GREEN, CONF_MAKE_ID, CONF_NAME, CONF_RED, CONF_WHITE
 | 
					    CONF_GAMMA_CORRECT, CONF_GREEN, CONF_MAKE_ID, CONF_NAME, CONF_RED, CONF_WHITE
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, variable
 | 
					from esphome.cpp_generator import get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
					    cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight),
 | 
				
			||||||
@@ -31,7 +31,7 @@ def to_code(config):
 | 
				
			|||||||
        yield
 | 
					        yield
 | 
				
			||||||
    rhs = App.make_rgbw_light(config[CONF_NAME], red, green, blue, white)
 | 
					    rhs = App.make_rgbw_light(config[CONF_NAME], red, green, blue, white)
 | 
				
			||||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
					    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
				
			||||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
					    light.setup_light(light_struct.Pstate, config)
 | 
				
			||||||
    setup_component(light_struct.Pstate, config)
 | 
					    setup_component(light_struct.Pstate, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,13 +1,13 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import light, output
 | 
					from esphome.components import light, output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_BLUE, CONF_COLD_WHITE, CONF_COLD_WHITE_COLOR_TEMPERATURE, \
 | 
					from esphome.const import CONF_BLUE, CONF_COLD_WHITE, CONF_COLD_WHITE_COLOR_TEMPERATURE, \
 | 
				
			||||||
    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_GREEN, CONF_MAKE_ID, \
 | 
					    CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_GREEN, CONF_MAKE_ID, \
 | 
				
			||||||
    CONF_NAME, CONF_RED, CONF_WARM_WHITE, CONF_WARM_WHITE_COLOR_TEMPERATURE
 | 
					    CONF_NAME, CONF_RED, CONF_WARM_WHITE, CONF_WARM_WHITE_COLOR_TEMPERATURE
 | 
				
			||||||
from esphomeyaml.cpp_generator import get_variable, variable
 | 
					from esphome.cpp_generator import get_variable, variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App
 | 
					from esphome.cpp_types import App
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def validate_color_temperature(value):
 | 
					def validate_color_temperature(value):
 | 
				
			||||||
@@ -61,7 +61,7 @@ def to_code(config):
 | 
				
			|||||||
                               config[CONF_WARM_WHITE_COLOR_TEMPERATURE],
 | 
					                               config[CONF_WARM_WHITE_COLOR_TEMPERATURE],
 | 
				
			||||||
                               red, green, blue, cold_white, warm_white)
 | 
					                               red, green, blue, cold_white, warm_white)
 | 
				
			||||||
    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
					    light_struct = variable(config[CONF_MAKE_ID], rhs)
 | 
				
			||||||
    light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config)
 | 
					    light.setup_light(light_struct.Pstate, config)
 | 
				
			||||||
    setup_component(light_struct.Pstate, config)
 | 
					    setup_component(light_struct.Pstate, config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2,24 +2,23 @@ import re
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.automation import ACTION_REGISTRY, LambdaAction
 | 
					from esphome.automation import ACTION_REGISTRY, LambdaAction
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ARGS, CONF_BAUD_RATE, CONF_FORMAT, CONF_ID, CONF_LEVEL, \
 | 
					from esphome.const import CONF_ARGS, CONF_BAUD_RATE, CONF_FORMAT, CONF_HARDWARE_UART, CONF_ID, \
 | 
				
			||||||
    CONF_LOGS, CONF_TAG, CONF_TX_BUFFER_SIZE
 | 
					    CONF_LEVEL, CONF_LOGS, CONF_TAG, CONF_TX_BUFFER_SIZE
 | 
				
			||||||
from esphomeyaml.core import EsphomeyamlError, Lambda, CORE
 | 
					from esphome.core import CORE, EsphomeError, Lambda
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, RawExpression, add, process_lambda, statement
 | 
					from esphome.cpp_generator import Pvariable, RawExpression, add, process_lambda, statement
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component, esphomelib_ns, global_ns, void
 | 
					from esphome.cpp_types import App, Component, esphome_ns, global_ns, void
 | 
				
			||||||
 | 
					from esphome.py_compat import text_type
 | 
				
			||||||
from esphomeyaml.py_compat import text_type
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
LOG_LEVELS = {
 | 
					LOG_LEVELS = {
 | 
				
			||||||
    'NONE': global_ns.ESPHOMELIB_LOG_LEVEL_NONE,
 | 
					    'NONE': global_ns.ESPHOME_LOG_LEVEL_NONE,
 | 
				
			||||||
    'ERROR': global_ns.ESPHOMELIB_LOG_LEVEL_ERROR,
 | 
					    'ERROR': global_ns.ESPHOME_LOG_LEVEL_ERROR,
 | 
				
			||||||
    'WARN': global_ns.ESPHOMELIB_LOG_LEVEL_WARN,
 | 
					    'WARN': global_ns.ESPHOME_LOG_LEVEL_WARN,
 | 
				
			||||||
    'INFO': global_ns.ESPHOMELIB_LOG_LEVEL_INFO,
 | 
					    'INFO': global_ns.ESPHOME_LOG_LEVEL_INFO,
 | 
				
			||||||
    'DEBUG': global_ns.ESPHOMELIB_LOG_LEVEL_DEBUG,
 | 
					    'DEBUG': global_ns.ESPHOME_LOG_LEVEL_DEBUG,
 | 
				
			||||||
    'VERBOSE': global_ns.ESPHOMELIB_LOG_LEVEL_VERBOSE,
 | 
					    'VERBOSE': global_ns.ESPHOME_LOG_LEVEL_VERBOSE,
 | 
				
			||||||
    'VERY_VERBOSE': global_ns.ESPHOMELIB_LOG_LEVEL_VERY_VERBOSE,
 | 
					    'VERY_VERBOSE': global_ns.ESPHOME_LOG_LEVEL_VERY_VERBOSE,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LOG_LEVEL_TO_ESP_LOG = {
 | 
					LOG_LEVEL_TO_ESP_LOG = {
 | 
				
			||||||
@@ -33,25 +32,52 @@ LOG_LEVEL_TO_ESP_LOG = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
LOG_LEVEL_SEVERITY = ['NONE', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'VERBOSE', 'VERY_VERBOSE']
 | 
					LOG_LEVEL_SEVERITY = ['NONE', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'VERBOSE', 'VERY_VERBOSE']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UART_SELECTION_ESP32 = ['UART0', 'UART1', 'UART2']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UART_SELECTION_ESP8266 = ['UART0', 'UART0_SWAP', 'UART1']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HARDWARE_UART_TO_UART_SELECTION = {
 | 
				
			||||||
 | 
					    'UART0': global_ns.UART_SELECTION_UART0,
 | 
				
			||||||
 | 
					    'UART0_SWAP': global_ns.UART_SELECTION_UART0_SWAP,
 | 
				
			||||||
 | 
					    'UART1': global_ns.UART_SELECTION_UART1,
 | 
				
			||||||
 | 
					    'UART2': global_ns.UART_SELECTION_UART2,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HARDWARE_UART_TO_SERIAL = {
 | 
				
			||||||
 | 
					    'UART0': 'Serial',
 | 
				
			||||||
 | 
					    'UART0_SWAP': 'Serial',
 | 
				
			||||||
 | 
					    'UART1': 'Serial1',
 | 
				
			||||||
 | 
					    'UART2': 'Serial2',
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# pylint: disable=invalid-name
 | 
					# pylint: disable=invalid-name
 | 
				
			||||||
is_log_level = cv.one_of(*LOG_LEVELS, upper=True)
 | 
					is_log_level = cv.one_of(*LOG_LEVELS, upper=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def uart_selection(value):
 | 
				
			||||||
 | 
					    if CORE.is_esp32:
 | 
				
			||||||
 | 
					        return cv.one_of(*UART_SELECTION_ESP32, upper=True)(value)
 | 
				
			||||||
 | 
					    if CORE.is_esp8266:
 | 
				
			||||||
 | 
					        return cv.one_of(*UART_SELECTION_ESP8266, upper=True)(value)
 | 
				
			||||||
 | 
					    raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def validate_local_no_higher_than_global(value):
 | 
					def validate_local_no_higher_than_global(value):
 | 
				
			||||||
    global_level = value.get(CONF_LEVEL, 'DEBUG')
 | 
					    global_level = value.get(CONF_LEVEL, 'DEBUG')
 | 
				
			||||||
    for tag, level in value.get(CONF_LOGS, {}).items():
 | 
					    for tag, level in value.get(CONF_LOGS, {}).items():
 | 
				
			||||||
        if LOG_LEVEL_SEVERITY.index(level) > LOG_LEVEL_SEVERITY.index(global_level):
 | 
					        if LOG_LEVEL_SEVERITY.index(level) > LOG_LEVEL_SEVERITY.index(global_level):
 | 
				
			||||||
            raise EsphomeyamlError(u"The local log level {} for {} must be less severe than the "
 | 
					            raise EsphomeError(u"The local log level {} for {} must be less severe than the "
 | 
				
			||||||
                               u"global log level {}.".format(level, tag, global_level))
 | 
					                               u"global log level {}.".format(level, tag, global_level))
 | 
				
			||||||
    return value
 | 
					    return value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LogComponent = esphomelib_ns.class_('LogComponent', Component)
 | 
					LogComponent = esphome_ns.class_('LogComponent', Component)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_SCHEMA = vol.All(vol.Schema({
 | 
					CONFIG_SCHEMA = vol.All(vol.Schema({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(LogComponent),
 | 
					    cv.GenerateID(): cv.declare_variable_id(LogComponent),
 | 
				
			||||||
    vol.Optional(CONF_BAUD_RATE, default=115200): cv.positive_int,
 | 
					    vol.Optional(CONF_BAUD_RATE, default=115200): cv.positive_int,
 | 
				
			||||||
    vol.Optional(CONF_TX_BUFFER_SIZE): cv.validate_bytes,
 | 
					    vol.Optional(CONF_TX_BUFFER_SIZE, default=512): cv.validate_bytes,
 | 
				
			||||||
 | 
					    vol.Optional(CONF_HARDWARE_UART, default='UART0'): uart_selection,
 | 
				
			||||||
    vol.Optional(CONF_LEVEL): is_log_level,
 | 
					    vol.Optional(CONF_LEVEL): is_log_level,
 | 
				
			||||||
    vol.Optional(CONF_LOGS): vol.Schema({
 | 
					    vol.Optional(CONF_LOGS): vol.Schema({
 | 
				
			||||||
        cv.string: is_log_level,
 | 
					        cv.string: is_log_level,
 | 
				
			||||||
@@ -60,10 +86,10 @@ CONFIG_SCHEMA = vol.All(vol.Schema({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def to_code(config):
 | 
					def to_code(config):
 | 
				
			||||||
    rhs = App.init_log(config.get(CONF_BAUD_RATE))
 | 
					    rhs = App.init_log(config.get(CONF_BAUD_RATE),
 | 
				
			||||||
 | 
					                       config.get(CONF_TX_BUFFER_SIZE),
 | 
				
			||||||
 | 
					                       HARDWARE_UART_TO_UART_SELECTION[config.get(CONF_HARDWARE_UART)])
 | 
				
			||||||
    log = Pvariable(config[CONF_ID], rhs)
 | 
					    log = Pvariable(config[CONF_ID], rhs)
 | 
				
			||||||
    if CONF_TX_BUFFER_SIZE in config:
 | 
					 | 
				
			||||||
        add(log.set_tx_buffer_size(config[CONF_TX_BUFFER_SIZE]))
 | 
					 | 
				
			||||||
    if CONF_LEVEL in config:
 | 
					    if CONF_LEVEL in config:
 | 
				
			||||||
        add(log.set_global_log_level(LOG_LEVELS[config[CONF_LEVEL]]))
 | 
					        add(log.set_global_log_level(LOG_LEVELS[config[CONF_LEVEL]]))
 | 
				
			||||||
    for tag, level in config.get(CONF_LOGS, {}).items():
 | 
					    for tag, level in config.get(CONF_LOGS, {}).items():
 | 
				
			||||||
@@ -73,13 +99,14 @@ def to_code(config):
 | 
				
			|||||||
def required_build_flags(config):
 | 
					def required_build_flags(config):
 | 
				
			||||||
    flags = []
 | 
					    flags = []
 | 
				
			||||||
    if CONF_LEVEL in config:
 | 
					    if CONF_LEVEL in config:
 | 
				
			||||||
        flags.append(u'-DESPHOMELIB_LOG_LEVEL={}'.format(str(LOG_LEVELS[config[CONF_LEVEL]])))
 | 
					        flags.append(u'-DESPHOME_LOG_LEVEL={}'.format(str(LOG_LEVELS[config[CONF_LEVEL]])))
 | 
				
			||||||
        this_severity = LOG_LEVEL_SEVERITY.index(config[CONF_LEVEL])
 | 
					        this_severity = LOG_LEVEL_SEVERITY.index(config[CONF_LEVEL])
 | 
				
			||||||
        verbose_severity = LOG_LEVEL_SEVERITY.index('VERBOSE')
 | 
					        verbose_severity = LOG_LEVEL_SEVERITY.index('VERBOSE')
 | 
				
			||||||
        is_at_least_verbose = this_severity >= verbose_severity
 | 
					        is_at_least_verbose = this_severity >= verbose_severity
 | 
				
			||||||
        has_serial_logging = config.get(CONF_BAUD_RATE) != 0
 | 
					        has_serial_logging = config.get(CONF_BAUD_RATE) != 0
 | 
				
			||||||
        if CORE.is_esp8266 and has_serial_logging and is_at_least_verbose:
 | 
					        if CORE.is_esp8266 and has_serial_logging and is_at_least_verbose:
 | 
				
			||||||
            flags.append(u"-DDEBUG_ESP_PORT=Serial")
 | 
					            debug_serial_port = HARDWARE_UART_TO_SERIAL[config.get(CONF_HARDWARE_UART)]
 | 
				
			||||||
 | 
					            flags.append(u"-DDEBUG_ESP_PORT={}".format(debug_serial_port))
 | 
				
			||||||
            flags.append(u"-DLWIP_DEBUG")
 | 
					            flags.append(u"-DLWIP_DEBUG")
 | 
				
			||||||
            DEBUG_COMPONENTS = {
 | 
					            DEBUG_COMPONENTS = {
 | 
				
			||||||
                'HTTP_CLIENT',
 | 
					                'HTTP_CLIENT',
 | 
				
			||||||
@@ -3,22 +3,22 @@ import re
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import automation
 | 
					from esphome import automation
 | 
				
			||||||
from esphomeyaml.automation import ACTION_REGISTRY
 | 
					from esphome.automation import ACTION_REGISTRY
 | 
				
			||||||
from esphomeyaml.components import logger
 | 
					from esphome.components import logger
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_AVAILABILITY, CONF_BIRTH_MESSAGE, CONF_BROKER, CONF_CLIENT_ID, \
 | 
					from esphome.const import CONF_AVAILABILITY, CONF_BIRTH_MESSAGE, CONF_BROKER, CONF_CLIENT_ID, \
 | 
				
			||||||
    CONF_COMMAND_TOPIC, CONF_DISCOVERY, CONF_DISCOVERY_PREFIX, CONF_DISCOVERY_RETAIN, \
 | 
					    CONF_COMMAND_TOPIC, CONF_DISCOVERY, CONF_DISCOVERY_PREFIX, CONF_DISCOVERY_RETAIN, \
 | 
				
			||||||
    CONF_ESPHOMEYAML, CONF_ID, CONF_INTERNAL, CONF_KEEPALIVE, CONF_LEVEL, CONF_LOG_TOPIC, \
 | 
					    CONF_ESPHOME, CONF_ID, CONF_INTERNAL, CONF_KEEPALIVE, CONF_LEVEL, CONF_LOG_TOPIC, \
 | 
				
			||||||
    CONF_MQTT, CONF_NAME, CONF_ON_JSON_MESSAGE, CONF_ON_MESSAGE, CONF_PASSWORD, CONF_PAYLOAD, \
 | 
					    CONF_MQTT, CONF_NAME, CONF_ON_JSON_MESSAGE, CONF_ON_MESSAGE, CONF_PASSWORD, CONF_PAYLOAD, \
 | 
				
			||||||
    CONF_PAYLOAD_AVAILABLE, CONF_PAYLOAD_NOT_AVAILABLE, CONF_PORT, CONF_QOS, CONF_REBOOT_TIMEOUT, \
 | 
					    CONF_PAYLOAD_AVAILABLE, CONF_PAYLOAD_NOT_AVAILABLE, CONF_PORT, CONF_QOS, CONF_REBOOT_TIMEOUT, \
 | 
				
			||||||
    CONF_RETAIN, CONF_SHUTDOWN_MESSAGE, CONF_SSL_FINGERPRINTS, CONF_STATE_TOPIC, CONF_TOPIC, \
 | 
					    CONF_RETAIN, CONF_SHUTDOWN_MESSAGE, CONF_SSL_FINGERPRINTS, CONF_STATE_TOPIC, CONF_TOPIC, \
 | 
				
			||||||
    CONF_TOPIC_PREFIX, CONF_TRIGGER_ID, CONF_USERNAME, CONF_WILL_MESSAGE
 | 
					    CONF_TOPIC_PREFIX, CONF_TRIGGER_ID, CONF_USERNAME, CONF_WILL_MESSAGE
 | 
				
			||||||
from esphomeyaml.core import EsphomeyamlError
 | 
					from esphome.core import EsphomeError
 | 
				
			||||||
from esphomeyaml.cpp_generator import ArrayInitializer, Pvariable, RawExpression, \
 | 
					from esphome.cpp_generator import Pvariable, RawExpression, StructInitializer, TemplateArguments, \
 | 
				
			||||||
    StructInitializer, TemplateArguments, add, process_lambda, templatable
 | 
					    add, get_variable, process_lambda, templatable
 | 
				
			||||||
from esphomeyaml.cpp_types import Action, App, Component, JsonObjectConstRef, JsonObjectRef, \
 | 
					from esphome.cpp_types import Action, App, Component, JsonObjectConstRef, JsonObjectRef, \
 | 
				
			||||||
    Trigger, bool_, esphomelib_ns, optional, std_string, uint8, void
 | 
					    Trigger, bool_, esphome_ns, optional, std_string, uint8, void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def validate_message_just_topic(value):
 | 
					def validate_message_just_topic(value):
 | 
				
			||||||
@@ -38,7 +38,7 @@ MQTT_MESSAGE_SCHEMA = vol.Any(None, MQTT_MESSAGE_BASE.extend({
 | 
				
			|||||||
    vol.Required(CONF_PAYLOAD): cv.mqtt_payload,
 | 
					    vol.Required(CONF_PAYLOAD): cv.mqtt_payload,
 | 
				
			||||||
}))
 | 
					}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mqtt_ns = esphomelib_ns.namespace('mqtt')
 | 
					mqtt_ns = esphome_ns.namespace('mqtt')
 | 
				
			||||||
MQTTMessage = mqtt_ns.struct('MQTTMessage')
 | 
					MQTTMessage = mqtt_ns.struct('MQTTMessage')
 | 
				
			||||||
MQTTClientComponent = mqtt_ns.class_('MQTTClientComponent', Component)
 | 
					MQTTClientComponent = mqtt_ns.class_('MQTTClientComponent', Component)
 | 
				
			||||||
MQTTPublishAction = mqtt_ns.class_('MQTTPublishAction', Action)
 | 
					MQTTPublishAction = mqtt_ns.class_('MQTTPublishAction', Action)
 | 
				
			||||||
@@ -163,13 +163,13 @@ def to_code(config):
 | 
				
			|||||||
        else:
 | 
					        else:
 | 
				
			||||||
            add(mqtt.set_log_message_template(exp_mqtt_message(log_topic)))
 | 
					            add(mqtt.set_log_message_template(exp_mqtt_message(log_topic)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if CONF_LEVEL in config:
 | 
					            if CONF_LEVEL in log_topic:
 | 
				
			||||||
                add(mqtt.set_log_level(logger.LOG_LEVELS[config[CONF_LEVEL]]))
 | 
					                add(mqtt.set_log_level(logger.LOG_LEVELS[log_topic[CONF_LEVEL]]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if CONF_SSL_FINGERPRINTS in config:
 | 
					    if CONF_SSL_FINGERPRINTS in config:
 | 
				
			||||||
        for fingerprint in config[CONF_SSL_FINGERPRINTS]:
 | 
					        for fingerprint in config[CONF_SSL_FINGERPRINTS]:
 | 
				
			||||||
            arr = [RawExpression("0x{}".format(fingerprint[i:i + 2])) for i in range(0, 40, 2)]
 | 
					            arr = [RawExpression("0x{}".format(fingerprint[i:i + 2])) for i in range(0, 40, 2)]
 | 
				
			||||||
            add(mqtt.add_ssl_fingerprint(ArrayInitializer(*arr, multiline=False)))
 | 
					            add(mqtt.add_ssl_fingerprint(arr))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if CONF_KEEPALIVE in config:
 | 
					    if CONF_KEEPALIVE in config:
 | 
				
			||||||
        add(mqtt.set_keep_alive(config[CONF_KEEPALIVE]))
 | 
					        add(mqtt.set_keep_alive(config[CONF_KEEPALIVE]))
 | 
				
			||||||
@@ -194,6 +194,7 @@ def to_code(config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CONF_MQTT_PUBLISH = 'mqtt.publish'
 | 
					CONF_MQTT_PUBLISH = 'mqtt.publish'
 | 
				
			||||||
MQTT_PUBLISH_ACTION_SCHEMA = vol.Schema({
 | 
					MQTT_PUBLISH_ACTION_SCHEMA = vol.Schema({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.use_variable_id(MQTTClientComponent),
 | 
				
			||||||
    vol.Required(CONF_TOPIC): cv.templatable(cv.publish_topic),
 | 
					    vol.Required(CONF_TOPIC): cv.templatable(cv.publish_topic),
 | 
				
			||||||
    vol.Required(CONF_PAYLOAD): cv.templatable(cv.mqtt_payload),
 | 
					    vol.Required(CONF_PAYLOAD): cv.templatable(cv.mqtt_payload),
 | 
				
			||||||
    vol.Optional(CONF_QOS): cv.templatable(cv.mqtt_qos),
 | 
					    vol.Optional(CONF_QOS): cv.templatable(cv.mqtt_qos),
 | 
				
			||||||
@@ -203,7 +204,9 @@ MQTT_PUBLISH_ACTION_SCHEMA = vol.Schema({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@ACTION_REGISTRY.register(CONF_MQTT_PUBLISH, MQTT_PUBLISH_ACTION_SCHEMA)
 | 
					@ACTION_REGISTRY.register(CONF_MQTT_PUBLISH, MQTT_PUBLISH_ACTION_SCHEMA)
 | 
				
			||||||
def mqtt_publish_action_to_code(config, action_id, arg_type, template_arg):
 | 
					def mqtt_publish_action_to_code(config, action_id, arg_type, template_arg):
 | 
				
			||||||
    rhs = App.Pget_mqtt_client().Pmake_publish_action(template_arg)
 | 
					    for var in get_variable(config[CONF_ID]):
 | 
				
			||||||
 | 
					        yield None
 | 
				
			||||||
 | 
					    rhs = var.make_publish_action(template_arg)
 | 
				
			||||||
    type = MQTTPublishAction.template(template_arg)
 | 
					    type = MQTTPublishAction.template(template_arg)
 | 
				
			||||||
    action = Pvariable(action_id, rhs, type=type)
 | 
					    action = Pvariable(action_id, rhs, type=type)
 | 
				
			||||||
    for template_ in templatable(config[CONF_TOPIC], arg_type, std_string):
 | 
					    for template_ in templatable(config[CONF_TOPIC], arg_type, std_string):
 | 
				
			||||||
@@ -226,6 +229,7 @@ def mqtt_publish_action_to_code(config, action_id, arg_type, template_arg):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CONF_MQTT_PUBLISH_JSON = 'mqtt.publish_json'
 | 
					CONF_MQTT_PUBLISH_JSON = 'mqtt.publish_json'
 | 
				
			||||||
MQTT_PUBLISH_JSON_ACTION_SCHEMA = vol.Schema({
 | 
					MQTT_PUBLISH_JSON_ACTION_SCHEMA = vol.Schema({
 | 
				
			||||||
 | 
					    cv.GenerateID(): cv.use_variable_id(MQTTClientComponent),
 | 
				
			||||||
    vol.Required(CONF_TOPIC): cv.templatable(cv.publish_topic),
 | 
					    vol.Required(CONF_TOPIC): cv.templatable(cv.publish_topic),
 | 
				
			||||||
    vol.Required(CONF_PAYLOAD): cv.lambda_,
 | 
					    vol.Required(CONF_PAYLOAD): cv.lambda_,
 | 
				
			||||||
    vol.Optional(CONF_QOS): cv.mqtt_qos,
 | 
					    vol.Optional(CONF_QOS): cv.mqtt_qos,
 | 
				
			||||||
@@ -235,7 +239,9 @@ MQTT_PUBLISH_JSON_ACTION_SCHEMA = vol.Schema({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@ACTION_REGISTRY.register(CONF_MQTT_PUBLISH_JSON, MQTT_PUBLISH_JSON_ACTION_SCHEMA)
 | 
					@ACTION_REGISTRY.register(CONF_MQTT_PUBLISH_JSON, MQTT_PUBLISH_JSON_ACTION_SCHEMA)
 | 
				
			||||||
def mqtt_publish_json_action_to_code(config, action_id, arg_type, template_arg):
 | 
					def mqtt_publish_json_action_to_code(config, action_id, arg_type, template_arg):
 | 
				
			||||||
    rhs = App.Pget_mqtt_client().Pmake_publish_json_action(template_arg)
 | 
					    for var in get_variable(config[CONF_ID]):
 | 
				
			||||||
 | 
					        yield None
 | 
				
			||||||
 | 
					    rhs = var.make_publish_json_action(template_arg)
 | 
				
			||||||
    type = MQTTPublishJsonAction.template(template_arg)
 | 
					    type = MQTTPublishJsonAction.template(template_arg)
 | 
				
			||||||
    action = Pvariable(action_id, rhs, type=type)
 | 
					    action = Pvariable(action_id, rhs, type=type)
 | 
				
			||||||
    for template_ in templatable(config[CONF_TOPIC], arg_type, std_string):
 | 
					    for template_ in templatable(config[CONF_TOPIC], arg_type, std_string):
 | 
				
			||||||
@@ -293,10 +299,10 @@ def build_hass_config(data, component_type, config, include_state=True, include_
 | 
				
			|||||||
class GenerateHassConfigData(object):
 | 
					class GenerateHassConfigData(object):
 | 
				
			||||||
    def __init__(self, config):
 | 
					    def __init__(self, config):
 | 
				
			||||||
        if 'mqtt' not in config:
 | 
					        if 'mqtt' not in config:
 | 
				
			||||||
            raise EsphomeyamlError("Cannot generate Home Assistant MQTT config if MQTT is not "
 | 
					            raise EsphomeError("Cannot generate Home Assistant MQTT config if MQTT is not "
 | 
				
			||||||
                               "used!")
 | 
					                               "used!")
 | 
				
			||||||
        mqtt = config[CONF_MQTT]
 | 
					        mqtt = config[CONF_MQTT]
 | 
				
			||||||
        self.topic_prefix = mqtt.get(CONF_TOPIC_PREFIX, config[CONF_ESPHOMEYAML][CONF_NAME])
 | 
					        self.topic_prefix = mqtt.get(CONF_TOPIC_PREFIX, config[CONF_ESPHOME][CONF_NAME])
 | 
				
			||||||
        birth_message = mqtt.get(CONF_BIRTH_MESSAGE)
 | 
					        birth_message = mqtt.get(CONF_BIRTH_MESSAGE)
 | 
				
			||||||
        if CONF_BIRTH_MESSAGE not in mqtt:
 | 
					        if CONF_BIRTH_MESSAGE not in mqtt:
 | 
				
			||||||
            birth_message = {
 | 
					            birth_message = {
 | 
				
			||||||
@@ -337,3 +343,7 @@ def setup_mqtt_component(obj, config):
 | 
				
			|||||||
        else:
 | 
					        else:
 | 
				
			||||||
            add(obj.set_availability(availability[CONF_TOPIC], availability[CONF_PAYLOAD_AVAILABLE],
 | 
					            add(obj.set_availability(availability[CONF_TOPIC], availability[CONF_PAYLOAD_AVAILABLE],
 | 
				
			||||||
                                     availability[CONF_PAYLOAD_NOT_AVAILABLE]))
 | 
					                                     availability[CONF_PAYLOAD_NOT_AVAILABLE]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LIB_DEPS = 'AsyncMqttClient@0.8.2'
 | 
				
			||||||
 | 
					BUILD_FLAGS = '-DUSE_MQTT'
 | 
				
			||||||
@@ -1,13 +1,13 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import output
 | 
					from esphome.components import output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import (CONF_BIT_DEPTH, CONF_CLOCK_PIN, CONF_DATA_PIN, CONF_ID,
 | 
					from esphome.const import (CONF_BIT_DEPTH, CONF_CLOCK_PIN, CONF_DATA_PIN, CONF_ID,
 | 
				
			||||||
                           CONF_NUM_CHANNELS, CONF_NUM_CHIPS, CONF_UPDATE_ON_BOOT)
 | 
					                           CONF_NUM_CHANNELS, CONF_NUM_CHIPS, CONF_UPDATE_ON_BOOT)
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
					from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component
 | 
					from esphome.cpp_types import App, Component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MY9231OutputComponent = output.output_ns.class_('MY9231OutputComponent', Component)
 | 
					MY9231OutputComponent = output.output_ns.class_('MY9231OutputComponent', Component)
 | 
				
			||||||
MULTI_CONF = True
 | 
					MULTI_CONF = True
 | 
				
			||||||
@@ -2,15 +2,15 @@ import logging
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_OTA, CONF_PASSWORD, CONF_PORT, CONF_SAFE_MODE
 | 
					from esphome.const import CONF_ID, CONF_OTA, CONF_PASSWORD, CONF_PORT, CONF_SAFE_MODE
 | 
				
			||||||
from esphomeyaml.core import CORE
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component, esphomelib_ns
 | 
					from esphome.cpp_types import App, Component, esphome_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_LOGGER = logging.getLogger(__name__)
 | 
					_LOGGER = logging.getLogger(__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OTAComponent = esphomelib_ns.class_('OTAComponent', Component)
 | 
					OTAComponent = esphome_ns.class_('OTAComponent', Component)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_SCHEMA = vol.Schema({
 | 
					CONFIG_SCHEMA = vol.Schema({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(OTAComponent),
 | 
					    cv.GenerateID(): cv.declare_variable_id(OTAComponent),
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.automation import maybe_simple_id, ACTION_REGISTRY
 | 
					from esphome.automation import ACTION_REGISTRY, maybe_simple_id
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					from esphome.components.power_supply import PowerSupplyComponent
 | 
				
			||||||
from esphomeyaml.components.power_supply import PowerSupplyComponent
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_INVERTED, CONF_MAX_POWER, CONF_POWER_SUPPLY, CONF_ID, CONF_LEVEL
 | 
					from esphome.const import CONF_ID, CONF_INVERTED, CONF_LEVEL, CONF_MAX_POWER, CONF_POWER_SUPPLY
 | 
				
			||||||
from esphomeyaml.core import CORE
 | 
					from esphome.core import CORE
 | 
				
			||||||
from esphomeyaml.cpp_generator import add, get_variable, Pvariable, templatable
 | 
					from esphome.cpp_generator import Pvariable, add, get_variable, templatable
 | 
				
			||||||
from esphomeyaml.cpp_types import esphomelib_ns, Action, float_
 | 
					from esphome.cpp_types import Action, esphome_ns, float_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
					PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,7 +25,7 @@ FLOAT_OUTPUT_SCHEMA = BINARY_OUTPUT_SCHEMA.extend({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
FLOAT_OUTPUT_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(FLOAT_OUTPUT_SCHEMA.schema)
 | 
					FLOAT_OUTPUT_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(FLOAT_OUTPUT_SCHEMA.schema)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
output_ns = esphomelib_ns.namespace('output')
 | 
					output_ns = esphome_ns.namespace('output')
 | 
				
			||||||
BinaryOutput = output_ns.class_('BinaryOutput')
 | 
					BinaryOutput = output_ns.class_('BinaryOutput')
 | 
				
			||||||
BinaryOutputPtr = BinaryOutput.operator('ptr')
 | 
					BinaryOutputPtr = BinaryOutput.operator('ptr')
 | 
				
			||||||
FloatOutput = output_ns.class_('FloatOutput', BinaryOutput)
 | 
					FloatOutput = output_ns.class_('FloatOutput', BinaryOutput)
 | 
				
			||||||
@@ -60,7 +60,6 @@ def register_output(var, config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_OUTPUT'
 | 
					BUILD_FLAGS = '-DUSE_OUTPUT'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
CONF_OUTPUT_TURN_ON = 'output.turn_on'
 | 
					CONF_OUTPUT_TURN_ON = 'output.turn_on'
 | 
				
			||||||
OUTPUT_TURN_ON_ACTION = maybe_simple_id({
 | 
					OUTPUT_TURN_ON_ACTION = maybe_simple_id({
 | 
				
			||||||
    vol.Required(CONF_ID): cv.use_variable_id(BinaryOutput),
 | 
					    vol.Required(CONF_ID): cv.use_variable_id(BinaryOutput),
 | 
				
			||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import output
 | 
					from esphome.components import output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_LAMBDA, CONF_OUTPUTS, CONF_TYPE
 | 
					from esphome.const import CONF_ID, CONF_LAMBDA, CONF_OUTPUTS, CONF_TYPE
 | 
				
			||||||
from esphomeyaml.cpp_generator import process_lambda, variable
 | 
					from esphome.cpp_generator import process_lambda, variable
 | 
				
			||||||
from esphomeyaml.cpp_types import std_vector
 | 
					from esphome.cpp_types import std_vector
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CustomBinaryOutputConstructor = output.output_ns.class_('CustomBinaryOutputConstructor')
 | 
					CustomBinaryOutputConstructor = output.output_ns.class_('CustomBinaryOutputConstructor')
 | 
				
			||||||
CustomFloatOutputConstructor = output.output_ns.class_('CustomFloatOutputConstructor')
 | 
					CustomFloatOutputConstructor = output.output_ns.class_('CustomFloatOutputConstructor')
 | 
				
			||||||
@@ -12,6 +12,7 @@ CustomFloatOutputConstructor = output.output_ns.class_('CustomFloatOutputConstru
 | 
				
			|||||||
BINARY_SCHEMA = output.PLATFORM_SCHEMA.extend({
 | 
					BINARY_SCHEMA = output.PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(CustomBinaryOutputConstructor),
 | 
					    cv.GenerateID(): cv.declare_variable_id(CustomBinaryOutputConstructor),
 | 
				
			||||||
    vol.Required(CONF_LAMBDA): cv.lambda_,
 | 
					    vol.Required(CONF_LAMBDA): cv.lambda_,
 | 
				
			||||||
 | 
					    vol.Required(CONF_TYPE): 'binary',
 | 
				
			||||||
    vol.Required(CONF_OUTPUTS):
 | 
					    vol.Required(CONF_OUTPUTS):
 | 
				
			||||||
        cv.ensure_list(output.BINARY_OUTPUT_SCHEMA.extend({
 | 
					        cv.ensure_list(output.BINARY_OUTPUT_SCHEMA.extend({
 | 
				
			||||||
            cv.GenerateID(): cv.declare_variable_id(output.BinaryOutput),
 | 
					            cv.GenerateID(): cv.declare_variable_id(output.BinaryOutput),
 | 
				
			||||||
@@ -21,8 +22,9 @@ BINARY_SCHEMA = output.PLATFORM_SCHEMA.extend({
 | 
				
			|||||||
FLOAT_SCHEMA = output.PLATFORM_SCHEMA.extend({
 | 
					FLOAT_SCHEMA = output.PLATFORM_SCHEMA.extend({
 | 
				
			||||||
    cv.GenerateID(): cv.declare_variable_id(CustomFloatOutputConstructor),
 | 
					    cv.GenerateID(): cv.declare_variable_id(CustomFloatOutputConstructor),
 | 
				
			||||||
    vol.Required(CONF_LAMBDA): cv.lambda_,
 | 
					    vol.Required(CONF_LAMBDA): cv.lambda_,
 | 
				
			||||||
 | 
					    vol.Required(CONF_TYPE): 'float',
 | 
				
			||||||
    vol.Required(CONF_OUTPUTS):
 | 
					    vol.Required(CONF_OUTPUTS):
 | 
				
			||||||
        cv.ensure_list(output.FLOAT_OUTPUT_PLATFORM_SCHEMA.extend({
 | 
					        cv.ensure_list(output.FLOAT_OUTPUT_SCHEMA.extend({
 | 
				
			||||||
            cv.GenerateID(): cv.declare_variable_id(output.FloatOutput),
 | 
					            cv.GenerateID(): cv.declare_variable_id(output.FloatOutput),
 | 
				
			||||||
        })),
 | 
					        })),
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@@ -59,8 +61,8 @@ def to_code(config):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    rhs = klass(template_)
 | 
					    rhs = klass(template_)
 | 
				
			||||||
    custom = variable(config[CONF_ID], rhs)
 | 
					    custom = variable(config[CONF_ID], rhs)
 | 
				
			||||||
    for i, sens in enumerate(config[CONF_OUTPUTS]):
 | 
					    for i, conf in enumerate(config[CONF_OUTPUTS]):
 | 
				
			||||||
        output.register_output(custom.get_output(i), sens)
 | 
					        output.register_output(custom.get_output(i), conf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILD_FLAGS = '-DUSE_CUSTOM_OUTPUT'
 | 
					BUILD_FLAGS = '-DUSE_CUSTOM_OUTPUT'
 | 
				
			||||||
@@ -1,19 +1,19 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import output
 | 
					from esphome.components import output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_FREQUENCY, CONF_ID, CONF_NUMBER, CONF_PIN, ESP_PLATFORM_ESP8266
 | 
					from esphome.const import CONF_FREQUENCY, CONF_ID, CONF_NUMBER, CONF_PIN, ESP_PLATFORM_ESP8266
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
					from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component
 | 
					from esphome.cpp_types import App, Component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP8266]
 | 
					ESP_PLATFORMS = [ESP_PLATFORM_ESP8266]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def valid_pwm_pin(value):
 | 
					def valid_pwm_pin(value):
 | 
				
			||||||
    num = value[CONF_NUMBER]
 | 
					    num = value[CONF_NUMBER]
 | 
				
			||||||
    cv.one_of(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16)(num)
 | 
					    cv.one_of(0, 1, 2, 3, 4, 5, 9, 10, 12, 13, 14, 15, 16)(num)
 | 
				
			||||||
    return value
 | 
					    return value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import output
 | 
					from esphome.components import output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ID, CONF_PIN
 | 
					from esphome.const import CONF_ID, CONF_PIN
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable
 | 
					from esphome.cpp_generator import Pvariable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
					from esphome.cpp_helpers import gpio_output_pin_expression, setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component
 | 
					from esphome.cpp_types import App, Component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GPIOBinaryOutputComponent = output.output_ns.class_('GPIOBinaryOutputComponent',
 | 
					GPIOBinaryOutputComponent = output.output_ns.class_('GPIOBinaryOutputComponent',
 | 
				
			||||||
                                                    output.BinaryOutput, Component)
 | 
					                                                    output.BinaryOutput, Component)
 | 
				
			||||||
@@ -1,13 +1,13 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
from esphomeyaml.components import output
 | 
					from esphome.components import output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import APB_CLOCK_FREQ, CONF_BIT_DEPTH, CONF_CHANNEL, CONF_FREQUENCY, \
 | 
					from esphome.const import APB_CLOCK_FREQ, CONF_BIT_DEPTH, CONF_CHANNEL, CONF_FREQUENCY, \
 | 
				
			||||||
    CONF_ID, CONF_PIN, ESP_PLATFORM_ESP32
 | 
					    CONF_ID, CONF_PIN, ESP_PLATFORM_ESP32
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component
 | 
					from esphome.cpp_types import App, Component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
					ESP_PLATFORMS = [ESP_PLATFORM_ESP32]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import output
 | 
					from esphome.components import output
 | 
				
			||||||
from esphomeyaml.components.my9231 import MY9231OutputComponent
 | 
					from esphome.components.my9231 import MY9231OutputComponent
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_CHANNEL, CONF_ID, CONF_MY9231_ID, CONF_POWER_SUPPLY
 | 
					from esphome.const import CONF_CHANNEL, CONF_ID, CONF_MY9231_ID, CONF_POWER_SUPPLY
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, get_variable
 | 
					from esphome.cpp_generator import Pvariable, get_variable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['my9231']
 | 
					DEPENDENCIES = ['my9231']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import output
 | 
					from esphome.components import output
 | 
				
			||||||
from esphomeyaml.components.pca9685 import PCA9685OutputComponent
 | 
					from esphome.components.pca9685 import PCA9685OutputComponent
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_CHANNEL, CONF_ID, CONF_PCA9685_ID, CONF_POWER_SUPPLY
 | 
					from esphome.const import CONF_CHANNEL, CONF_ID, CONF_PCA9685_ID, CONF_POWER_SUPPLY
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, get_variable
 | 
					from esphome.cpp_generator import Pvariable, get_variable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['pca9685']
 | 
					DEPENDENCIES = ['pca9685']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml.components import i2c, output
 | 
					from esphome.components import i2c, output
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ADDRESS, CONF_FREQUENCY, CONF_ID
 | 
					from esphome.const import CONF_ADDRESS, CONF_FREQUENCY, CONF_ID
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable, add
 | 
					from esphome.cpp_generator import Pvariable, add
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, Component
 | 
					from esphome.cpp_types import App, Component
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['i2c']
 | 
					DEPENDENCIES = ['i2c']
 | 
				
			||||||
MULTI_CONF = True
 | 
					MULTI_CONF = True
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
import voluptuous as vol
 | 
					import voluptuous as vol
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from esphomeyaml import pins
 | 
					from esphome import pins
 | 
				
			||||||
import esphomeyaml.config_validation as cv
 | 
					import esphome.config_validation as cv
 | 
				
			||||||
from esphomeyaml.const import CONF_ADDRESS, CONF_ID, CONF_PCF8575
 | 
					from esphome.const import CONF_ADDRESS, CONF_ID, CONF_PCF8575
 | 
				
			||||||
from esphomeyaml.cpp_generator import Pvariable
 | 
					from esphome.cpp_generator import Pvariable
 | 
				
			||||||
from esphomeyaml.cpp_helpers import setup_component
 | 
					from esphome.cpp_helpers import setup_component
 | 
				
			||||||
from esphomeyaml.cpp_types import App, GPIOInputPin, GPIOOutputPin, io_ns
 | 
					from esphome.cpp_types import App, GPIOInputPin, GPIOOutputPin, io_ns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES = ['i2c']
 | 
					DEPENDENCIES = ['i2c']
 | 
				
			||||||
MULTI_CONF = True
 | 
					MULTI_CONF = True
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user