Initial commit 🎉
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
_doxyxml
|
||||||
|
_build
|
||||||
|
|
||||||
|
.python-version
|
40
Makefile
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Minimal makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line.
|
||||||
|
SPHINXOPTS =
|
||||||
|
SPHINXBUILD = sphinx-build
|
||||||
|
SPHINXPROJ = esphomelib
|
||||||
|
SOURCEDIR = .
|
||||||
|
BUILDDIR = _build
|
||||||
|
ESPHOMELIB_PATH = ../esphomelib
|
||||||
|
|
||||||
|
|
||||||
|
html:
|
||||||
|
# ESPHOMELIB_PATH=$(ESPHOMELIB_PATH) doxygen Doxygen
|
||||||
|
$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|
||||||
|
cleanhtml:
|
||||||
|
rm -rf "$(BUILDDIR)/html/*" _doxyxml/
|
||||||
|
|
||||||
|
minifyhtml: html
|
||||||
|
./minify.sh
|
||||||
|
|
||||||
|
deploy: cleanhtml html minifyhtml
|
||||||
|
touch "$(BUILDDIR)/html/.nojekyll"
|
||||||
|
echo "esphomelib.com" >"$(BUILDDIR)/html/CNAME"
|
||||||
|
cd "$(BUILDDIR)/html" && git add --all && git commit -m "Deploy to gh-pages"
|
||||||
|
@printf "Run \033[0;36mcd $(BUILDDIR)/html && git push origin gh-pages\033[0m to deploy\n"
|
||||||
|
|
||||||
|
help:
|
||||||
|
$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||||
|
|
||||||
|
webserver: html
|
||||||
|
cd "$(BUILDDIR)/html" && python3 -m http.server
|
||||||
|
|
||||||
|
.PHONY: help Makefile
|
||||||
|
|
||||||
|
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||||
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||||
|
%: Makefile
|
||||||
|
$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
0
_static/.keep
Normal file
21
_static/custom.css
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
.row-odd {
|
||||||
|
background-color: #f3f6f6;
|
||||||
|
}
|
||||||
|
tr.row-even > td {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.component-image {
|
||||||
|
border: none;
|
||||||
|
vertical-align: middle;
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
width: 100%;
|
||||||
|
height: 85px;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.docutils {
|
||||||
|
width: 100%;
|
||||||
|
}
|
417
_static/webserver-v1.css
Normal file
@ -0,0 +1,417 @@
|
|||||||
|
/* Based off of https://github.com/sindresorhus/github-markdown-css */
|
||||||
|
|
||||||
|
.markdown-body {
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #24292e;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.5;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a:active,
|
||||||
|
.markdown-body a:hover {
|
||||||
|
outline-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body img {
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body pre {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
font: inherit;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body [type="checkbox"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body * {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a {
|
||||||
|
color: #0366d6;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body strong {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
height: 0;
|
||||||
|
margin: 15px 0;
|
||||||
|
overflow: hidden;
|
||||||
|
background: transparent;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid #dfe2e5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr::before {
|
||||||
|
display: table;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr::after {
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table {
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body td,
|
||||||
|
.markdown-body th {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1,
|
||||||
|
.markdown-body h2,
|
||||||
|
.markdown-body h3,
|
||||||
|
.markdown-body h4,
|
||||||
|
.markdown-body h5,
|
||||||
|
.markdown-body h6 {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 {
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h3 {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h4 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h5 {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h6 {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body blockquote {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul,
|
||||||
|
.markdown-body ol {
|
||||||
|
padding-left: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ol ol,
|
||||||
|
.markdown-body ul ol {
|
||||||
|
list-style-type: lower-roman;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul ul ol,
|
||||||
|
.markdown-body ul ol ol,
|
||||||
|
.markdown-body ol ul ol,
|
||||||
|
.markdown-body ol ol ol {
|
||||||
|
list-style-type: lower-alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dd {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body pre {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.markdown-body::before {
|
||||||
|
display: table;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body::after {
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body>*:first-child {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body>*:last-child {
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a:not([href]) {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body p,
|
||||||
|
.markdown-body blockquote,
|
||||||
|
.markdown-body ul,
|
||||||
|
.markdown-body ol,
|
||||||
|
.markdown-body dl,
|
||||||
|
.markdown-body table,
|
||||||
|
.markdown-body pre {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
height: 0.25em;
|
||||||
|
padding: 0;
|
||||||
|
margin: 24px 0;
|
||||||
|
background-color: #e1e4e8;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body blockquote {
|
||||||
|
padding: 0 1em;
|
||||||
|
color: #6a737d;
|
||||||
|
border-left: 0.25em solid #dfe2e5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body blockquote>:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body blockquote>:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1,
|
||||||
|
.markdown-body h2,
|
||||||
|
.markdown-body h3,
|
||||||
|
.markdown-body h4,
|
||||||
|
.markdown-body h5,
|
||||||
|
.markdown-body h6 {
|
||||||
|
margin-top: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 {
|
||||||
|
padding-bottom: 0.3em;
|
||||||
|
font-size: 2em;
|
||||||
|
border-bottom: 1px solid #eaecef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h2 {
|
||||||
|
padding-bottom: 0.3em;
|
||||||
|
font-size: 1.5em;
|
||||||
|
border-bottom: 1px solid #eaecef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h3 {
|
||||||
|
font-size: 1.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h4 {
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h5 {
|
||||||
|
font-size: 0.875em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h6 {
|
||||||
|
font-size: 0.85em;
|
||||||
|
color: #6a737d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul,
|
||||||
|
.markdown-body ol {
|
||||||
|
padding-left: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul ul,
|
||||||
|
.markdown-body ul ol,
|
||||||
|
.markdown-body ol ol,
|
||||||
|
.markdown-body ol ul {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body li {
|
||||||
|
word-wrap: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body li>p {
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body li+li {
|
||||||
|
margin-top: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dl {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dl dt {
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 16px;
|
||||||
|
font-size: 1em;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dl dd {
|
||||||
|
padding: 0 16px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table th {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table th,
|
||||||
|
.markdown-body table td {
|
||||||
|
padding: 6px 13px;
|
||||||
|
border: 1px solid #dfe2e5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table tr {
|
||||||
|
background-color: #fff;
|
||||||
|
border-top: 1px solid #c6cbd1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table tr:nth-child(2n) {
|
||||||
|
background-color: #f6f8fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body img {
|
||||||
|
max-width: 100%;
|
||||||
|
box-sizing: content-box;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body img[align=right] {
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body img[align=left] {
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body pre {
|
||||||
|
padding: 16px;
|
||||||
|
overflow: auto;
|
||||||
|
font-size: 85%;
|
||||||
|
line-height: 1.45;
|
||||||
|
background-color: #f6f8fa;
|
||||||
|
border-radius: 3px;
|
||||||
|
word-wrap: normal;
|
||||||
|
}
|
||||||
|
.markdown-body :checked+.radio-label {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
border-color: #0366d6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
border-bottom-color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
#log .v {
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
|
||||||
|
#log .d {
|
||||||
|
color: #00DDDD;
|
||||||
|
}
|
||||||
|
|
||||||
|
#log .c {
|
||||||
|
color: magenta;
|
||||||
|
}
|
||||||
|
|
||||||
|
#log .i {
|
||||||
|
color: limegreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
#log .w {
|
||||||
|
color: yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
#log .e {
|
||||||
|
color: red;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#log {
|
||||||
|
background-color: #1c1c1c;
|
||||||
|
}
|
59
_static/webserver-v1.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
const source = new EventSource("/events");
|
||||||
|
|
||||||
|
source.addEventListener('log', function (e) {
|
||||||
|
const log = document.getElementById("log");
|
||||||
|
let klass = '';
|
||||||
|
if (e.data.startsWith("[1;31m")) {
|
||||||
|
klass = 'e';
|
||||||
|
} else if (e.data.startsWith("[0;33m")) {
|
||||||
|
klass = 'w';
|
||||||
|
} else if (e.data.startsWith("[0;32m")) {
|
||||||
|
klass = 'i';
|
||||||
|
} else if (e.data.startsWith("[0;35m")) {
|
||||||
|
klass = 'c';
|
||||||
|
} else if (e.data.startsWith("[0;36m")) {
|
||||||
|
klass = 'd';
|
||||||
|
} else if (e.data.startsWith("[0;37m")) {
|
||||||
|
klass = 'v';
|
||||||
|
} else {
|
||||||
|
log.innerHTML += e.data + '\n';
|
||||||
|
}
|
||||||
|
log.innerHTML += '<span class="' + klass + '">' + e.data.substr(7, e.data.length - 10) + "</span>\n";
|
||||||
|
});
|
||||||
|
|
||||||
|
source.addEventListener('state', function (e) {
|
||||||
|
const data = JSON.parse(e.data);
|
||||||
|
document.getElementById(data.id).children[1].innerText = data.state;
|
||||||
|
});
|
||||||
|
|
||||||
|
const states = document.getElementById("states");
|
||||||
|
let i = 0, row;
|
||||||
|
for (; row = states.rows[i]; i++) {
|
||||||
|
if (row.classList.contains("switch")) {
|
||||||
|
(function(id) {
|
||||||
|
row.children[2].children[0].addEventListener('click', function (e) {
|
||||||
|
const xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("POST", '/switch/' + id.substr(7) + '/toggle', true);
|
||||||
|
xhr.send();
|
||||||
|
});
|
||||||
|
})(row.id);
|
||||||
|
}
|
||||||
|
if (row.classList.contains("fan")) {
|
||||||
|
(function(id) {
|
||||||
|
row.children[2].children[0].addEventListener('click', function (e) {
|
||||||
|
const xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("POST", '/fan/' + id.substr(4) + '/toggle', true);
|
||||||
|
xhr.send();
|
||||||
|
});
|
||||||
|
})(row.id);
|
||||||
|
}
|
||||||
|
if (row.classList.contains("light")) {
|
||||||
|
(function(id) {
|
||||||
|
row.children[2].children[0].addEventListener('click', function (e) {
|
||||||
|
const xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("POST", '/light/' + id.substr(6) + '/toggle', true);
|
||||||
|
xhr.send();
|
||||||
|
});
|
||||||
|
})(row.id);
|
||||||
|
}
|
||||||
|
}
|
2
_static/webserver-v1.min.css
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/* Based off of https://github.com/sindresorhus/github-markdown-css */
|
||||||
|
.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.5;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body a{background-color:transparent}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:bolder}.markdown-body h1{font-size:2em;margin:0.67em 0}.markdown-body img{border-style:none}.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{box-sizing:content-box;height:0;overflow:visible}.markdown-body input{font:inherit;margin:0}.markdown-body input{overflow:visible}.markdown-body [type="checkbox"]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border:0;border-bottom:1px solid #dfe2e5}.markdown-body hr::before{display:table;content:""}.markdown-body hr::after{display:table;clear:both;content:""}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ul,.markdown-body ol{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ul ul ol,.markdown-body ul ol ol,.markdown-body ol ul ol,.markdown-body ol ol ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body pre{margin-top:0;margin-bottom:0;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>*:first-child{margin-top:0!important}.markdown-body>*:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre{margin-top:0;margin-bottom:16px}.markdown-body hr{height:0.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:0.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1{padding-bottom:0.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:0.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:0.875em}.markdown-body h6{font-size:0.85em;color:#6a737d}.markdown-body ul,.markdown-body ol{padding-left:2em}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li{word-wrap:break-all}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:0.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px;word-wrap:normal}.markdown-body:checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body hr{border-bottom-color:#eee}#log .v{color:#888}#log .d{color:#0DD}#log .c{color:magenta}#log .i{color:limegreen}#log .w{color:yellow}#log .e{color:red;font-weight:bold}#log{background-color:#1c1c1c}
|
1
_static/webserver-v1.min.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
const source=new EventSource("/events");source.addEventListener("log",function(a){const b=document.getElementById("log");let c="";a.data.startsWith("\x1B[1;31m")?c="e":a.data.startsWith("\x1B[0;33m")?c="w":a.data.startsWith("\x1B[0;32m")?c="i":a.data.startsWith("\x1B[0;35m")?c="c":a.data.startsWith("\x1B[0;36m")?c="d":a.data.startsWith("\x1B[0;37m")?c="v":b.innerHTML+=a.data+"\n",b.innerHTML+="<span class=\""+c+"\">"+a.data.substr(7,a.data.length-10)+"</span>\n"}),source.addEventListener("state",function(a){const b=JSON.parse(a.data);document.getElementById(b.id).children[1].innerText=b.state});const states=document.getElementById("states");for(let a,b=0;a=states.rows[b];b++)a.classList.contains("switch")&&function(b){a.children[2].children[0].addEventListener("click",function(){const a=new XMLHttpRequest;a.open("POST","/switch/"+b.substr(7)+"/toggle",!0),a.send()})}(a.id),a.classList.contains("fan")&&function(b){a.children[2].children[0].addEventListener("click",function(){const a=new XMLHttpRequest;a.open("POST","/fan/"+b.substr(4)+"/toggle",!0),a.send()})}(a.id),a.classList.contains("light")&&function(b){a.children[2].children[0].addEventListener("click",function(){const a=new XMLHttpRequest;a.open("POST","/light/"+b.substr(6)+"/toggle",!0),a.send()})}(a.id);
|
31
api/binary_sensor/esp32_touch.rst
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
ESP32 Touch Binary Sensor
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
auto *touch = App.make_esp32_touch_component();
|
||||||
|
touch->set_setup_mode(true);
|
||||||
|
touch->set_iir_filter(1000);
|
||||||
|
App.register_binary_sensor(touch_hub->make_touch_pad("ESP32 Touch Pad 9", TOUCH_PAD_NUM9, 1000));
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_esp32_touch_component`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: binary_sensor::ESP32TouchComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: binary_sensor::ESP32TouchBinarySensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
26
api/binary_sensor/gpio.rst
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
GPIO Binary Sensor
|
||||||
|
==================
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
App.make_gpio_binary_sensor("Window Open", 36);
|
||||||
|
// Custom pinMode
|
||||||
|
App.make_gpio_binary_sensor("Window Open", GPIOInputPin(36, INPUT_PULLUP));
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_gpio_binary_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: binary_sensor::GPIOBinarySensorComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
56
api/binary_sensor/index.rst
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
Binary Sensor
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. cpp:namespace:: binary_sensor
|
||||||
|
|
||||||
|
In esphomelib, every component that exposes a binary state, is a :cpp:class:`BinarySensor`.
|
||||||
|
|
||||||
|
To create your own binary sensor, simply subclass :cpp:class:`BinarySensor` and call
|
||||||
|
:cpp:func:`BinarySensor::publish_state` to tell the frontend that you have a new state.
|
||||||
|
Inversion is automatically done for you when publishing state and can be changed by the
|
||||||
|
user with :cpp:func:`BinarySensor::set_inverted`.
|
||||||
|
|
||||||
|
Supported Binary Sensors
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
GPIO Binary Sensor <gpio>
|
||||||
|
Node Status Binary Sensor <status>
|
||||||
|
ESP32 Touch Binary Sensor <esp32_touch>
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
App.register_binary_sensor(custom_binary_sensor);
|
||||||
|
// GPIO Binary Sensor
|
||||||
|
App.make_gpio_binary_sensor("Window Open", 36);
|
||||||
|
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::register_binary_sensor` and :cpp:func:`Application::make_gpio_binary_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
BinarySensor
|
||||||
|
************
|
||||||
|
|
||||||
|
.. doxygenclass:: binary_sensor::BinarySensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
MQTTBinarySensorComponent
|
||||||
|
*************************
|
||||||
|
|
||||||
|
.. doxygenclass:: binary_sensor::MQTTBinarySensorComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
26
api/binary_sensor/status.rst
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Node Status Binary Sensor
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This binary sensor platform allows you to create a switch that uses the birth and last will
|
||||||
|
messages by the MQTT client to show an ON/OFF state of the node.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
App.make_status_binary_sensor("Livingroom Node Status");
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_status_binary_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: binary_sensor::StatusBinarySensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
38
api/core/application.rst
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
Application
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
The :cpp:class:`Application` class has two objectives: 1. handle all of
|
||||||
|
your :cpp:class:`Component`\ s and 2. provide helper methods to simplify creating a component.
|
||||||
|
|
||||||
|
.. cpp:namespace:: Application
|
||||||
|
|
||||||
|
In itself, an Application instance doesn't do and store very much. It mostly only keeps track of all Components
|
||||||
|
(using an internal :cpp:func:`std::vector` containing pointers), so that when the user calls the :cpp:func:`setup` or
|
||||||
|
:cpp:func:`loop` methods, it can relay those calls to the components.
|
||||||
|
|
||||||
|
In order for the Application to know about your components, each one of them should be registered using the
|
||||||
|
:cpp:func:`register_component` call. And for subclasses of MQTTComponent, :cpp:func:`register_mqtt_component`
|
||||||
|
shall be used.
|
||||||
|
|
||||||
|
Apart from the helpers, only one function is really necessary for setting up the Application instance:
|
||||||
|
:cpp:func:`set_name`. The name provided by this is used throughout the code base to construct various strings
|
||||||
|
such as MQTT topics or WiFi hostnames. Additionally, some one-time-setup components such as MQTT or WiFi can be
|
||||||
|
initialized with the `init_` calls. Next, this class provides a bunch of helper methods to create and
|
||||||
|
register components easily using the `make_` calls.
|
||||||
|
|
||||||
|
Each component can tell the Application with which *priority* it wishes to be called using the `get_loop_priority()`
|
||||||
|
and `get_setup_priority()` overrides. The Application will then automatically order the components before execution.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: Application
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenvariable:: App
|
34
api/core/component.rst
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
Component
|
||||||
|
=========
|
||||||
|
|
||||||
|
.. cpp:namespace:: Component
|
||||||
|
|
||||||
|
Every object that should be handled by the Application instance and receive :cpp:func:`setup` and
|
||||||
|
:cpp:func:`loop` calls must be a subclass of :cpp:class:`Component`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
Component
|
||||||
|
*********
|
||||||
|
|
||||||
|
.. doxygenclass:: Component
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
PollingComponent
|
||||||
|
****************
|
||||||
|
|
||||||
|
.. doxygenclass:: PollingComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
|
||||||
|
Setup Priorities
|
||||||
|
****************
|
||||||
|
|
||||||
|
.. doxygennamespace:: setup_priority
|
25
api/core/controller.rst
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
Controller
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. cpp:namespace:: Controller
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
Controller
|
||||||
|
**********
|
||||||
|
|
||||||
|
.. doxygenclass:: Component
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
StoringController
|
||||||
|
*****************
|
||||||
|
|
||||||
|
.. doxygenclass:: StoringController
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
17
api/core/deep-sleep.rst
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
Deep Sleep
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. cpp:namespace:: DeepSleepComponent
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
DeepSleepComponent
|
||||||
|
******************
|
||||||
|
|
||||||
|
.. doxygenclass:: DeepSleepComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
135
api/core/helpers.rst
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
Helpers
|
||||||
|
=======
|
||||||
|
|
||||||
|
esphomelib uses a bunch of helpers to make the library easier to use.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
helpers.h
|
||||||
|
*********
|
||||||
|
|
||||||
|
.. doxygentypedef:: json_parse_t
|
||||||
|
|
||||||
|
.. doxygentypedef:: json_build_t
|
||||||
|
|
||||||
|
.. doxygenvariable:: HOSTNAME_CHARACTER_WHITELIST
|
||||||
|
|
||||||
|
.. doxygenfunction:: get_mac_address
|
||||||
|
|
||||||
|
.. doxygenfunction:: generate_hostname
|
||||||
|
|
||||||
|
.. doxygenfunction:: sanitize_hostname
|
||||||
|
|
||||||
|
.. doxygenfunction:: truncate_string
|
||||||
|
|
||||||
|
.. doxygenfunction:: is_empty
|
||||||
|
|
||||||
|
.. doxygenfunction:: reboot
|
||||||
|
|
||||||
|
.. doxygenfunction:: add_shutdown_hook
|
||||||
|
|
||||||
|
.. doxygenfunction:: safe_reboot
|
||||||
|
|
||||||
|
.. doxygenfunction:: add_safe_shutdown_hook
|
||||||
|
|
||||||
|
.. doxygenfunction:: to_lowercase_underscore
|
||||||
|
|
||||||
|
.. doxygenfunction:: build_json
|
||||||
|
|
||||||
|
.. doxygenfunction:: parse_json
|
||||||
|
|
||||||
|
.. doxygenfunction:: clamp
|
||||||
|
|
||||||
|
.. doxygenfunction:: lerp
|
||||||
|
|
||||||
|
.. doxygenfunction:: make_unique
|
||||||
|
|
||||||
|
.. doxygenfunction:: random_uint32
|
||||||
|
|
||||||
|
.. doxygenfunction:: random_double
|
||||||
|
|
||||||
|
.. doxygenfunction:: random_float
|
||||||
|
|
||||||
|
.. doxygenfunction:: gamma_correct
|
||||||
|
|
||||||
|
.. doxygenfunction:: value_accuracy_to_string
|
||||||
|
|
||||||
|
.. doxygenfunction:: uint64_to_string
|
||||||
|
.. doxygenfunction:: uint32_to_string
|
||||||
|
|
||||||
|
.. doxygenfunction:: sanitize_string_whitelist
|
||||||
|
|
||||||
|
.. doxygenfunction:: disable_interrupts
|
||||||
|
.. doxygenfunction:: enable_interrupts
|
||||||
|
|
||||||
|
.. doxygenfunction:: crc8
|
||||||
|
|
||||||
|
.. doxygenclass:: Optional
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenfunction:: parse_on_off
|
||||||
|
|
||||||
|
.. doxygenclass:: SlidingWindowMovingAverage
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: ExponentialMovingAverage
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: CallbackManager
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
ESPPreferences
|
||||||
|
**************
|
||||||
|
|
||||||
|
.. doxygenclass:: ESPPreferences
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenvariable:: global_preferences
|
||||||
|
|
||||||
|
esphal.h
|
||||||
|
********
|
||||||
|
|
||||||
|
This header should be used whenever you want to access some `digitalRead`, `digitalWrite`, ... methods.
|
||||||
|
|
||||||
|
.. doxygenclass:: GPIOPin
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: GPIOOutputPin
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: GPIOInputPin
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
|
||||||
|
ESPOneWire
|
||||||
|
**********
|
||||||
|
|
||||||
|
esphomelib has its own implementation of OneWire, because the implementation in the Arduino libraries
|
||||||
|
seems to have lots of timing issues with the ESP8266/ESP32. That's why ESPOneWire was created.
|
||||||
|
|
||||||
|
.. doxygenclass:: ESPOneWire
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
defines.h
|
||||||
|
*********
|
||||||
|
|
||||||
|
.. doxygenfile:: esphomelib/defines.h
|
20
api/core/i2c.rst
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
I2CComponent
|
||||||
|
============
|
||||||
|
|
||||||
|
To make i2c devices easier to implement in esphomelib, there's a special I2CComponent implementing
|
||||||
|
a bunch of i2c helper functions on top of the Arduino Wire library. It is also the preferred way
|
||||||
|
of using i2c peripherals since it implements timeouts, verbose logs for debugging issues, and
|
||||||
|
for the ESP32 the ability to have multiple i2c busses in operation at the same time.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. doxygenclass:: I2CComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: I2CDevice
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
18
api/core/index.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Core
|
||||||
|
====
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
Application <application>
|
||||||
|
Component <component>
|
||||||
|
WiFi <wifi>
|
||||||
|
MQTT Client <mqtt>
|
||||||
|
Over-The-Air Updates <ota>
|
||||||
|
Helpers <helpers>
|
||||||
|
Logging Engine <log>
|
||||||
|
Power Supply <power-supply>
|
||||||
|
Controller <controller>
|
||||||
|
Web Server <web-server>
|
||||||
|
Deep Sleep <deep-sleep>
|
||||||
|
I2C <i2c>
|
23
api/core/log.rst
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
Logging Engine
|
||||||
|
==============
|
||||||
|
|
||||||
|
esphomelib will by default log to both Serial (with baudrate 115200).
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. doxygendefine:: ESPHOMELIB_LOG_LEVEL_NONE
|
||||||
|
.. doxygendefine:: ESPHOMELIB_LOG_LEVEL_ERROR
|
||||||
|
.. doxygendefine:: ESPHOMELIB_LOG_LEVEL_WARN
|
||||||
|
.. doxygendefine:: ESPHOMELIB_LOG_LEVEL_INFO
|
||||||
|
.. doxygendefine:: ESPHOMELIB_LOG_LEVEL_DEBUG
|
||||||
|
.. doxygendefine:: ESPHOMELIB_LOG_LEVEL_VERBOSE
|
||||||
|
.. doxygendefine:: ESPHOMELIB_LOG_LEVEL_VERY_VERBOSE
|
||||||
|
|
||||||
|
LogComponent
|
||||||
|
************
|
||||||
|
|
||||||
|
.. doxygenclass:: LogComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
60
api/core/mqtt.rst
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
MQTT Client
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. cpp:namespace:: mqtt
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
MQTTClientComponent
|
||||||
|
*******************
|
||||||
|
|
||||||
|
.. doxygenclass:: mqtt::MQTTClientComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygentypedef:: mqtt::mqtt_callback_t
|
||||||
|
|
||||||
|
.. doxygenstruct:: mqtt::MQTTMessage
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenstruct:: mqtt::MQTTSubscription
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenstruct:: mqtt::MQTTCredentials
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenstruct:: mqtt::Availability
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenstruct:: mqtt::MQTTDiscoveryInfo
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenvariable:: mqtt::global_mqtt_client
|
||||||
|
|
||||||
|
MQTTComponent
|
||||||
|
*************
|
||||||
|
|
||||||
|
.. doxygenclass:: mqtt::MQTTComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenstruct:: mqtt::SendDiscoveryConfig
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
34
api/core/ota.rst
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
Over-The-Air Updates
|
||||||
|
====================
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Setup basic OTA
|
||||||
|
App.init_ota();
|
||||||
|
// Enable safe mode.
|
||||||
|
App.init_ota()->start_safe_mode();
|
||||||
|
// OTA password
|
||||||
|
auto *ota = App.init_ota();
|
||||||
|
ota->set_auth_plaintext_password("VERY_SECURE");
|
||||||
|
ota->start_safe_mode();
|
||||||
|
// OTA MD5 password
|
||||||
|
auto *ota = App.init_ota();
|
||||||
|
ota->set_auth_password_hash("761d3a8c46989f1d357842e8dedf7712");
|
||||||
|
ota->start_safe_mode();
|
||||||
|
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
OTAComponent
|
||||||
|
************
|
||||||
|
|
||||||
|
.. doxygenclass:: OTAComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
25
api/core/power-supply.rst
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
Power Supply
|
||||||
|
============
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
auto *power_supply = App.make_power_supply(12);
|
||||||
|
// Inverted, for ATX
|
||||||
|
auto *atx = App.make_power_supply(GPIOOutputPin(12, OUTPUT, true));
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
PowerSupplyComponent
|
||||||
|
********************
|
||||||
|
|
||||||
|
.. doxygenclass:: PowerSupplyComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
17
api/core/web-server.rst
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
Web Server
|
||||||
|
==========
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: WebServer
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenstruct:: UrlMatch
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
37
api/core/wifi.rst
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
WiFi
|
||||||
|
====
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
App.init_wifi("YOUR_SSID", "YOUR_PASSWORD");
|
||||||
|
// Manual IP
|
||||||
|
auto *wifi = App.init_wifi("YOUR_SSID", "YOUR_PASSWORD");
|
||||||
|
wifi->set_sta_manual_ip(ManualIP{
|
||||||
|
.static_ip = IPAddress(192, 168, 178, 42),
|
||||||
|
.gateway = IPAddress(192, 168, 178, 1),
|
||||||
|
.subnet = IPAddress(255, 255, 255, 0)
|
||||||
|
});
|
||||||
|
// AP
|
||||||
|
wifi->set_ap("AP SSID", "Optional AP Password");
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
WiFiComponent
|
||||||
|
*************
|
||||||
|
|
||||||
|
.. doxygenclass:: WiFiComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenstruct:: ManualIP
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
65
api/fan/index.rst
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
Fan
|
||||||
|
====
|
||||||
|
|
||||||
|
.. cpp:namespace:: fan
|
||||||
|
|
||||||
|
Fans in esphomelib are implemented like lights. Both the hardware and the MQTT frontend
|
||||||
|
access a combined :cpp:class:`FanState` object and use only that to set state and receive
|
||||||
|
state updates.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
auto fan = App.make_fan("Fan");
|
||||||
|
fan.output->set_binary(App.make_gpio_output(34));
|
||||||
|
// Speed
|
||||||
|
auto speed_fan = App.make_fan("Speed Fan");
|
||||||
|
fan.output->set_speed(App.make_ledc_output(34));
|
||||||
|
// Oscillation
|
||||||
|
auto oscillating_fan = App.make_fan("Oscillating Fan");
|
||||||
|
oscillating_fan.output->set_binary(App.make_gpio_output(34));
|
||||||
|
oscillating_fan.output->set_oscillation(App.make_gpio_output(35));
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_fan`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
FanState
|
||||||
|
********
|
||||||
|
|
||||||
|
.. doxygenclass:: fan::FanState
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
FanTraits
|
||||||
|
*********
|
||||||
|
|
||||||
|
.. doxygenclass:: fan::FanTraits
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
BasicFanComponent
|
||||||
|
*****************
|
||||||
|
|
||||||
|
.. doxygenclass:: fan::BasicFanComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
MQTTFanComponent
|
||||||
|
****************
|
||||||
|
|
||||||
|
.. doxygenclass:: fan::MQTTFanComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
14
api/index.rst
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
API Reference
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
Core <core/index>
|
||||||
|
Sensor <sensor/index>
|
||||||
|
Binary Sensor <binary_sensor/index>
|
||||||
|
Output <output/index>
|
||||||
|
Fan <fan/index>
|
||||||
|
Light <light/index>
|
||||||
|
Switch <switch/index>
|
||||||
|
Miscellaneous <misc/index>
|
113
api/light/index.rst
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
Light
|
||||||
|
=====
|
||||||
|
|
||||||
|
.. cpp:namespace:: light
|
||||||
|
|
||||||
|
Lights in esphomelib are implemented like fans. Both the hardware and the MQTT frontend
|
||||||
|
access a combined :cpp:class:`LightState` object and use only that to set state and receive
|
||||||
|
state updates.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Binary
|
||||||
|
App.make_binary_light("Desk Lamp", App.make_gpio_output(15));
|
||||||
|
// Brightness-only
|
||||||
|
App.make_monochromatic_light("Kitchen Lights", App.make_ledc_output(16));
|
||||||
|
// RGB, see output for information how to setup individual channels.
|
||||||
|
App.make_rgb_light("RGB Lights", red, green, blue);
|
||||||
|
App.make_rgbw_light("RGBW Lights", red, green, blue, white);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_binary_light`, :cpp:func:`Application::make_monochromatic_light`,
|
||||||
|
:cpp:func:`Application::make_rgb_light`, :cpp:func:`Application::make_rgbw_light`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
LightColorValues
|
||||||
|
****************
|
||||||
|
|
||||||
|
.. doxygenclass:: light::LightColorValues
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
LightEffect
|
||||||
|
***********
|
||||||
|
|
||||||
|
.. doxygenclass:: light::LightEffect
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: light::NoneLightEffect
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: light::RandomLightEffect
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
LightOutput
|
||||||
|
***********
|
||||||
|
|
||||||
|
.. doxygenclass:: light::LightOutput
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: light::LinearLightOutputComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
LightState
|
||||||
|
**********
|
||||||
|
|
||||||
|
.. doxygenclass:: light::LightState
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
LightTraits
|
||||||
|
***********
|
||||||
|
|
||||||
|
.. doxygenclass:: light::LightTraits
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
|
||||||
|
LightTransformer
|
||||||
|
****************
|
||||||
|
|
||||||
|
.. doxygenclass:: light::LightTransformer
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: light::LightTransitionTransformer
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: light::LightFlashTransformer
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
MQTTJSONLightComponent
|
||||||
|
**********************
|
||||||
|
|
||||||
|
.. doxygenclass:: light::MQTTJSONLightComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
37
api/misc/esp32_ble_tracker.rst
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
ESP32 Bluetooth Low Energy Tracker
|
||||||
|
==================================
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
auto *tracker = App.make_esp32_ble_tracker();
|
||||||
|
// MAC address AC:37:43:77:5F:4C
|
||||||
|
App.register_binary_sensor(tracker->make_device("ESP32 Bluetooth Beacon", {
|
||||||
|
0xAC, 0x37, 0x43, 0x77, 0x5F, 0x4C
|
||||||
|
}));
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_esp32_ble_tracker`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenenum:: PCF8574GPIOMode
|
||||||
|
|
||||||
|
.. doxygenclass:: ESP32BLETracker
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: ESP32BLEDevice
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenvariable:: global_esp32_ble_tracker
|
||||||
|
.. doxygenvariable:: semaphore_scan_end
|
6
api/misc/index.rst
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Miscellaneous Components
|
||||||
|
========================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
PCF8574 <pcf8574>
|
||||||
|
ESP32 Bluetooth Low Energy Tracker <esp32_ble_tracker>
|
44
api/misc/pcf8574.rst
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
PCF8574 I/O Expander
|
||||||
|
====================
|
||||||
|
|
||||||
|
The PCF8574 component allows you to use PCF8574 and PCF8575 I/O port expanders with many of
|
||||||
|
esphomelib's components. With most components, you are able to specify GPIOOutputPin or
|
||||||
|
GPIOInputPin for internal pins. The PCF8574 component subclasses those types.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
auto *pcf8574 = App.make_pcf8574_component(0x21);
|
||||||
|
App.make_gpio_binary_sensor("PCF pin 0 sensor", pcf8574->make_input_pin(0, PCF8574_INPUT));
|
||||||
|
App.make_gpio_binary_sensor("PCF pin 0 sensor", 0);
|
||||||
|
App.make_gpio_switch("PCF pin 1 switch", pcf8574->make_output_pin(1));
|
||||||
|
auto *out = App.make_gpio_output(pcf8574->make_output_pin(2));
|
||||||
|
App.make_binary_light("PCF pin 2 light", out);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_pcf8574_component`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenenum:: PCF8574GPIOMode
|
||||||
|
|
||||||
|
.. doxygenclass:: io::PCF8574Component
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: io::PCF8574GPIOInputPin
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: io::PCF8574GPIOOutputPin
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
35
api/output/esp8266-pwm.rst
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
ESP8266 Software PWM
|
||||||
|
====================
|
||||||
|
|
||||||
|
Software PWM for the ESP8266. Warning: This is a *software* PWM and therefore can have noticeable flickering.
|
||||||
|
Additionally, this software PWM can't output values higher than 80%. That's a known limitation.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
auto *output = App.make_esp8266_pwm_output(D2);
|
||||||
|
// Create a brightness-only light with it:
|
||||||
|
App.make_monochromatic_light("Desk Lamp", output);
|
||||||
|
|
||||||
|
// Advanced: Setting a custom frequency globally
|
||||||
|
analogWriteFreq(500);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_esp8266_pwm_output`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
ESP8266PWMOutput
|
||||||
|
****************
|
||||||
|
|
||||||
|
.. doxygenclass:: output::ESP8266PWMOutput
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
29
api/output/gpio-binary.rst
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
GPIO Binary Output
|
||||||
|
==================
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Create a binary output, *not a switch*
|
||||||
|
App.make_gpio_output(33);
|
||||||
|
// Custom pinMode
|
||||||
|
App.make_gpio_output(GPIOOutputPin(33, OUTPUT_OPEN_DRAIN));
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_gpio_output` (and :cpp:func:`Application::make_gpio_switch`).
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
GPIOBinaryOutputComponent
|
||||||
|
*************************
|
||||||
|
|
||||||
|
.. doxygenclass:: output::GPIOBinaryOutputComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
31
api/output/index.rst
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
Output
|
||||||
|
======
|
||||||
|
|
||||||
|
The `output` namespace contains all peripheral output components.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
GPIO Binary Output <gpio-binary>
|
||||||
|
LEDC PWM Output <ledc>
|
||||||
|
PCA9685 Output <pca9685>
|
||||||
|
ESP8266 Software PWM <esp8266-pwm>
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
BinaryOutput
|
||||||
|
************
|
||||||
|
|
||||||
|
.. doxygenclass:: output::BinaryOutput
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
FloatOutput
|
||||||
|
***********
|
||||||
|
|
||||||
|
.. doxygenclass:: output::FloatOutput
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
31
api/output/ledc.rst
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
ESP32 LEDC Output
|
||||||
|
=================
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
App.make_ledc_output(33);
|
||||||
|
// Custom Frequency
|
||||||
|
App.make_ledc_output(33, 2000.0);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_ledc_output`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
LEDCOutputComponent
|
||||||
|
*******************
|
||||||
|
|
||||||
|
.. doxygenclass:: output::LEDCOutputComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenvariable:: output::next_ledc_channel
|
31
api/output/pca9685.rst
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
PCA9685 PWM
|
||||||
|
===========
|
||||||
|
|
||||||
|
FloatOutput support for an `PCA9695 16-Channel PWM Driver`_.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Create the PCA9685 Output hub with frequency 500Hz.
|
||||||
|
auto *pca9685 = App.make_pca9685_component(500.0f);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_pca9685_component`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
PCA9685OutputComponent
|
||||||
|
**********************
|
||||||
|
|
||||||
|
.. doxygenclass:: output::PCA9685OutputComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. _PCA9695 16-Channel PWM Driver: https://www.adafruit.com/product/815
|
31
api/sensor/adc-sensor.rst
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
ADC Sensor
|
||||||
|
==========
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
App.make_adc_sensor("Analog Voltage", 13);
|
||||||
|
// Custom update interval 30 seconds
|
||||||
|
App.make_adc_sensor("Analog Voltage", 13, 30000);
|
||||||
|
// Custom pinMode
|
||||||
|
App.make_adc_sensor("Analog Voltage", GPIOInputPin(13, INPUT_PULLUP));
|
||||||
|
// ESP32: Attenuation
|
||||||
|
auto adc = App.make_adc_sensor("Analog Voltage", 13);
|
||||||
|
adc.adc.set_attenuation(ADC_11db);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_adc_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::ADCSensorComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
59
api/sensor/ads1115.rst
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
ADS1115 ADC Component
|
||||||
|
=====================
|
||||||
|
|
||||||
|
.. warning:: This sensor is experimental has not been tested yet. If you can verify it works, notify me on discord.
|
||||||
|
|
||||||
|
.. cpp:namespace:: input
|
||||||
|
|
||||||
|
This class allows using ADS1115 Analog to Digital converters (`datasheet`_, `adafruit`_) devices with esphomelib.
|
||||||
|
Doing so requires some steps:
|
||||||
|
|
||||||
|
.. _datasheet: http://www.ti.com/lit/ds/symlink/ads1115.pdf
|
||||||
|
.. _adafruit: https://www.adafruit.com/product/1085
|
||||||
|
|
||||||
|
.. cpp:namespace:: sensor::ADS1115Component
|
||||||
|
|
||||||
|
1. Initialize the i2c bus with the pins you have SDA and SCL connected to:
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// inside setup()
|
||||||
|
App.init_i2c(SDA_PIN, SCL_PIN);
|
||||||
|
|
||||||
|
2. Create the "hub" or the ADS1115 device itself. The parameter you pass in here is the i2c
|
||||||
|
address of the ADS1115. See :cpp:func:`set_address` for possible other addresses.
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// after init_i2c
|
||||||
|
auto *ads1115 = App.make_ads1115_component(0x48);
|
||||||
|
|
||||||
|
This will create an ADS1115 component which you can now use to create individual sensors.
|
||||||
|
|
||||||
|
3. Create the sensors, you can have multiple of these. Do so by calling :cpp:func:`get_sensor` with
|
||||||
|
the multiplexer channel you want (essentially between which pins you want to measure voltage) and
|
||||||
|
the gain for that sensor and register that sensor.
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
auto *sensor = ads1115->get_sensor("ADS1115 Voltage #1", ADS1115_MUX_P0_N1, ADS1115_PGA_6P144);
|
||||||
|
App.register_sensor(sensor);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_ads1115_component`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::ADS1115Component
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::ADS1115Sensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
39
api/sensor/bh1750.rst
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
BH1750 Ambient Light Sensor
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
This sensor is experimental has not been tested yet. If you can verify it works (or if it doesn't),
|
||||||
|
notify me on discord.
|
||||||
|
|
||||||
|
The BH1750 sensor allows you to use your BH1750 i2c-enabled ambient light sensor with
|
||||||
|
esphomelib (`datasheet <http://www.mouser.com/ds/2/348/bh1750fvi-e-186247.pdf>`__).
|
||||||
|
It requires i2c to be setup to work.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
auto bh1750 = App.make_bh1750_sensor("BH1750 Illuminance");
|
||||||
|
|
||||||
|
// Advanced settings
|
||||||
|
// default resolution is 0.5 LX
|
||||||
|
bh1750.bh1750->set_resolution(sensor::BH1750_RESOLUTION_1P0_LX);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_bh1750_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::BH1750Sensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenenum:: sensor::BH1750Resolution
|
52
api/sensor/bme280.rst
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
BME280 Temperature/Pressure/Humidity Sensor
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
This sensor is experimental has not been tested yet. If you can verify it works (or if it doesn't),
|
||||||
|
notify me on discord.
|
||||||
|
|
||||||
|
The BME280 sensor allows you to use your BME280 i2c-enabled temperature+pressure+humidity sensor with
|
||||||
|
esphomelib (`datasheet <https://cdn-shop.adafruit.com/datasheets/BST-BME280_DS001-10.pdf>`__,
|
||||||
|
`adafruit <https://www.adafruit.com/product/2652>`__). It requires i2c to be setup to work.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
auto bme280 = App.make_bme280_sensor("BME280 Temperature", "BME280 Pressure", "BME280 Humidity");
|
||||||
|
|
||||||
|
// Advanced settings
|
||||||
|
// set infinite impulse response filter, default is OFF.
|
||||||
|
bme280.bme280->set_iir_filter(sensor::BME280_IIR_FILTER_4X);
|
||||||
|
// set over value sampling, default is 16x
|
||||||
|
bme280.bme280->set_temperature_oversampling(sensor::BME280_OVERSAMPLING_16X);
|
||||||
|
bme280.bme280->set_humidity_oversampling(sensor::BME280_OVERSAMPLING_4X);
|
||||||
|
bme280.bme280->set_pressure_oversampling(sensor::BME280_OVERSAMPLING_16X);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_bme280_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::BME280Component
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenenum:: sensor::BME280Oversampling
|
||||||
|
.. doxygenenum:: sensor::BME280IIRFilter
|
||||||
|
|
||||||
|
.. doxygentypdef:: sensor::BME280TemperatureSensor
|
||||||
|
.. doxygentypdef:: sensor::BME280PressureSensor
|
||||||
|
.. doxygentypdef:: sensor::BME280HumiditySensor
|
||||||
|
|
||||||
|
.. doxygenstruct:: sensor::BME280CalibrationData
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
After Width: | Height: | Size: 1.6 KiB |
53
api/sensor/bme680.rst
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
BME680 Temperature/Pressure/Humidity/Gas Sensor
|
||||||
|
===============================================
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
This sensor is experimental has not been tested yet. If you can verify it works (or if it doesn't),
|
||||||
|
notify me on discord.
|
||||||
|
|
||||||
|
The BME680 sensor allows you to use your BME680 i2c-enabled temperature+pressure+humidity+gas
|
||||||
|
sensor with esphomelib (`datasheet <https://cdn-shop.adafruit.com/product-files/3660/BME680.pdf>`__,
|
||||||
|
`adafruit <https://www.adafruit.com/product/3660>`__). It requires i2c to be setup to work.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
auto bme680 = App.make_bme680_sensor("BME680 Temperature",
|
||||||
|
"BME680 Pressure",
|
||||||
|
"BME680 Humidity",
|
||||||
|
"BME680 Gas Resistance");
|
||||||
|
|
||||||
|
// default is no iir filter
|
||||||
|
bme680.bme680->set_iir_filter(sensor::BME680_IIR_FILTER_15X);
|
||||||
|
// set heater to 200°C for 100ms, default is off
|
||||||
|
bme680.bme680->set_heater(200, 100);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_bme680_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::BME680Component
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenenum:: sensor::BME680Oversampling
|
||||||
|
.. doxygenenum:: sensor::BME680IIRFilter
|
||||||
|
|
||||||
|
.. doxygentypdef:: sensor::BME680TemperatureSensor
|
||||||
|
.. doxygentypdef:: sensor::BME680PressureSensor
|
||||||
|
.. doxygentypdef:: sensor::BME680HumiditySensor
|
||||||
|
.. doxygentypdef:: sensor::BME2680GasResistanceSensor
|
||||||
|
|
||||||
|
.. doxygenstruct:: sensor::BME680CalibrationData
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
After Width: | Height: | Size: 1.6 KiB |
36
api/sensor/bmp085.rst
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
BMP085 Pressure/Temperature Sensor
|
||||||
|
==================================
|
||||||
|
|
||||||
|
The BMP085 component allows you get the temperature and pressure from your BMP085
|
||||||
|
(`datasheet <https://www.sparkfun.com/datasheets/Components/General/BST-BMP085-DS000-05.pdf>`_,
|
||||||
|
`adafruit <https://www.adafruit.com/product/391>`_), BMP180
|
||||||
|
(`datasheet <https://cdn-shop.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf>`_,
|
||||||
|
`adafruit <https://www.adafruit.com/product/1603>`_) and BMP280
|
||||||
|
(`datasheet <https://cdn-shop.adafruit.com/datasheets/BST-BMP280-DS001-11.pdf>`_,
|
||||||
|
`adafruit <https://www.adafruit.com/product/2651>`_) sensors with esphomelib. To use these
|
||||||
|
i2c-based devices, first initialize the i2c bus using the pins you have for SDA and SCL and
|
||||||
|
then create the sensors themselves as in below example.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// inside setup()
|
||||||
|
App.init_i2c(SDA_PIN, SCL_PIN); // change these values for your pins.
|
||||||
|
// create sensors
|
||||||
|
App.make_bmp085_sensor("Outside Temperature", "Outside Pressure");
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_bmp085_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::BMP085Component
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
After Width: | Height: | Size: 1.2 KiB |
45
api/sensor/dallas.rst
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
Dallas Component
|
||||||
|
================
|
||||||
|
|
||||||
|
.. cpp:namespace:: input
|
||||||
|
|
||||||
|
This class allows using Dallas (DS18b20) devices with esphomelib. You first have to
|
||||||
|
create a hub or bus where all sensors are connected to (:cpp:class:`DallasComponent`).
|
||||||
|
|
||||||
|
.. cpp:namespace:: sensor::DallasComponent
|
||||||
|
|
||||||
|
Next, use :cpp:func:`get_sensor_by_address` and :cpp:func:`get_sensor_by_index` to get
|
||||||
|
individual sensors. You can get the addresses of dallas sensors by observing the log output
|
||||||
|
at startup time.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Bus setup
|
||||||
|
auto *dallas = App.make_dallas_component(15);
|
||||||
|
|
||||||
|
// By address
|
||||||
|
App.register_sensor(dallas->get_sensor_by_address("Ambient Temperature", 0xfe0000031f1eaf29));
|
||||||
|
// By index
|
||||||
|
App.register_sensor(dallas->get_sensor_by_index("Ambient Temperature", 0));
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_dallas_component` and :cpp:func:`Application::register_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::DallasComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::DallasTemperatureSensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
24
api/sensor/dht.rst
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
DHT Temperature/Humidity Sensor
|
||||||
|
===============================
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
App.make_dht_sensor("Outside Temperature", "Outside Humidity", 12);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_dht_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::DHTComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
32
api/sensor/hdc1080.rst
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
HDC1080 Temperature/Humidity Sensor
|
||||||
|
===================================
|
||||||
|
|
||||||
|
The HDC1080 component allows you get accurate temperature and humidity readings from your HDC1080
|
||||||
|
(`datasheet <http://www.ti.com/lit/ds/symlink/hdc1080.pdf>`_,
|
||||||
|
`adafruit <https://www.adafruit.com/product/2635>`_) sensors with esphomelib. To use these
|
||||||
|
i2c-based devices, first initialize the i2c bus using the pins you have for SDA and SCL and
|
||||||
|
then create the sensors themselves as in below example.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// inside setup()
|
||||||
|
App.init_i2c(SDA_PIN, SCL_PIN); // change these values for your pins.
|
||||||
|
// create sensors
|
||||||
|
App.make_hdc1080_sensor("Outside Temperature", "Outside Humidity");
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_hdc1080_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::HDC1080Component
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
32
api/sensor/htu21d.rst
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
HTU21D Temperature/Humidity Sensor
|
||||||
|
==================================
|
||||||
|
|
||||||
|
The HTU21D component allows you get accurate temperature and humidity readings from your HTU21D
|
||||||
|
(`datasheet <https://cdn-shop.adafruit.com/datasheets/1899_HTU21D.pdf>`_,
|
||||||
|
`adafruit <https://www.adafruit.com/product/1899>`_) sensors with esphomelib. To use these
|
||||||
|
i2c-based devices, first initialize the i2c bus using the pins you have for SDA and SCL and
|
||||||
|
then create the sensors themselves as in below example.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// inside setup()
|
||||||
|
App.init_i2c(SDA_PIN, SCL_PIN); // change these values for your pins.
|
||||||
|
// create sensors
|
||||||
|
App.make_htu21d_sensor("Outside Temperature", "Outside Humidity");
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_htu21d_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::HTU21DComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
126
api/sensor/index.rst
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
Sensor
|
||||||
|
======
|
||||||
|
|
||||||
|
The `sensor` namespace contains all sensors.
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::register_sensor`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
adc-sensor.rst
|
||||||
|
dallas.rst
|
||||||
|
dht.rst
|
||||||
|
pulse-counter.rst
|
||||||
|
ultrasonic.rst
|
||||||
|
ads1115.rst
|
||||||
|
bmp085.rst
|
||||||
|
htu21d.rst
|
||||||
|
hdc1080.rst
|
||||||
|
mpu6050.rst
|
||||||
|
tsl2561.rst
|
||||||
|
bht1750.rst
|
||||||
|
bme280.rst
|
||||||
|
bme680.rst
|
||||||
|
sht3xd.rst
|
||||||
|
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
Sensor
|
||||||
|
******
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::Sensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygentypedef:: sensor::sensor_callback_t
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::PollingSensorComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::EmptySensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::EmptyPollingParentSensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenvariable:: sensor::ICON_EMPTY
|
||||||
|
.. doxygenvariable:: sensor::ICON_WATER_PERCENT
|
||||||
|
.. doxygenvariable:: sensor::ICON_GAUGE
|
||||||
|
.. doxygenvariable:: sensor::ICON_FLASH
|
||||||
|
.. doxygenvariable:: sensor::ICON_SCREEN_ROTATION
|
||||||
|
.. doxygenvariable:: sensor::ICON_BRIEFCASE_DOWNLOAD
|
||||||
|
|
||||||
|
.. doxygenvariable:: sensor::UNIT_C
|
||||||
|
.. doxygenvariable:: sensor::UNIT_PERCENT
|
||||||
|
.. doxygenvariable:: sensor::UNIT_HPA
|
||||||
|
.. doxygenvariable:: sensor::UNIT_V
|
||||||
|
.. doxygenvariable:: sensor::UNIT_DEGREES_PER_SECOND
|
||||||
|
.. doxygenvariable:: sensor::UNIT_M_PER_S_SQUARED
|
||||||
|
|
||||||
|
|
||||||
|
Filter
|
||||||
|
******
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::Filter
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::SlidingWindowMovingAverageFilter
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::ExponentialMovingAverageFilter
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygentypedef:: sensor::lambda_filter_t
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::LambdaFilter
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::OffsetFilter
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::MultiplyFilter
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::FilterOutValueFilter
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::FilterOutNANFilter
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
MQTTSensorComponent
|
||||||
|
*******************
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::MQTTSensorComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
43
api/sensor/mpu6050.rst
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
MPU6050 Accelerometer/Gyroscope Component
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
The MPU6050 allows you to use your MPU6050 i2c-enabled accelerometers/gyroscopes with
|
||||||
|
esphomelib (`datasheet <https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf>`__,
|
||||||
|
`Sparkfun <https://www.sparkfun.com/products/11028>`__). It requires i2c to be setup to work.
|
||||||
|
|
||||||
|
This component only supports reading in the measurements directly from the registers of the chip
|
||||||
|
at the moment. If you do need some more complicated signal processing and/or configuration options,
|
||||||
|
I would recommend copying the code over and creating your own custom component, as supporting every
|
||||||
|
single possible configuration is not esphomelib's ultimate goal with a chip that supports such a
|
||||||
|
variety of options.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// inside setup()
|
||||||
|
App.init_i2c(SDA_PIN, SCL_PIN); // change these values for your pins.
|
||||||
|
// create sensors
|
||||||
|
auto *mpu6050 = App.make_mpu6050_sensor();
|
||||||
|
App.register_sensor(mpu6050->make_accel_x_sensor("MPU6050 Accel X"));
|
||||||
|
App.register_sensor(mpu6050->make_accel_y_sensor("MPU6050 Accel Y"));
|
||||||
|
App.register_sensor(mpu6050->make_accel_z_sensor("MPU6050 Accel Z"));
|
||||||
|
App.register_sensor(mpu6050->make_gyro_x_sensor("MPU6050 Gyro X"));
|
||||||
|
App.register_sensor(mpu6050->make_gyro_y_sensor("MPU6050 Gyro Y"));
|
||||||
|
App.register_sensor(mpu6050->make_gyro_z_sensor("MPU6050 Gyro Z"));
|
||||||
|
App.register_sensor(mpu6050->make_temperature_sensor("MPU6050 Temperature"));
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_mpu6050_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::MPU6050Component
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
34
api/sensor/pulse-counter.rst
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
ESP32 Pulse Counter Sensor
|
||||||
|
==========================
|
||||||
|
|
||||||
|
This component allows you to count pulses on a PIN using the internal
|
||||||
|
`pulse counter <http://esp-idf.readthedocs.io/en/latest/api-reference/peripherals/pcnt.html>`_ peripheral of
|
||||||
|
the ESP32. By default, the values by this sensor are reported in "pulses/min". You can convert
|
||||||
|
that to your own unit like in below example.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
App.make_pulse_counter_sensor("Stromverbrauch Wärmepumpe", 13);
|
||||||
|
// Unit conversion
|
||||||
|
auto strom_warme = App.make_pulse_counter_sensor("Stromverbrauch Wärmepumpe", 13);
|
||||||
|
strom_warme.mqtt->set_unit_of_measurement("kW");
|
||||||
|
strom_warme.mqtt->clear_filters();
|
||||||
|
strom_warme.mqtt->add_multiply_filter(0.06f); // convert from Wh pulse to kW
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_pulse_counter_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::PulseCounterSensorComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
48
api/sensor/sht3xd.rst
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
SHT3XD Temperature/Humidity Sensor
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
This sensor is experimental has not been tested yet. If you can verify it works (or if it doesn't),
|
||||||
|
notify me on discord.
|
||||||
|
|
||||||
|
The SHT3XD component allows you to use your SHT3x-DIS i2c-enabled temperature+humidity+gas
|
||||||
|
sensor with esphomelib (`datasheet <https://cdn-shop.adafruit.com/product-files/2857/Sensirion_Humidity_SHT3x_Datasheet_digital-767294.pdf>`__,
|
||||||
|
`adafruit <https://www.adafruit.com/product/2857>`__). It requires i2c to be setup to work.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
auto sht3xd = App.make_sht3xd_sensor("SHT31D Temperature", "SHT31D Humidity");
|
||||||
|
|
||||||
|
// Advanced
|
||||||
|
// default accuracy is high
|
||||||
|
sht3xd.sht3xd->set_accuracy(sensor::SHT3XD_ACCURACY_LOW);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_sht3xd_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::SHT3XDComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenenum:: sensor::SHT3XDAccuracy
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::SHT3XDTemperatureSensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::SHT3XDHumiditySensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
42
api/sensor/tsl2561.rst
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
TSL2561 Ambient Light Sensor
|
||||||
|
============================
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
This sensor is experimental has not been tested yet. If you can verify it works (or if it doesn't),
|
||||||
|
notify me on discord.
|
||||||
|
|
||||||
|
The TSL2561 sensor allows you to use your TSL2561 i2c-enabled ambient light sensor with
|
||||||
|
esphomelib (`datasheet <https://cdn-shop.adafruit.com/datasheets/TSL2561.pdf>`__,
|
||||||
|
`Adafruit <https://www.adafruit.com/product/439>`__). It requires i2c to be setup to work.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
auto tsl2561 = App.make_tsl2561_sensor("TSL2561 Illuminance Sensor");
|
||||||
|
|
||||||
|
// Advanced settings
|
||||||
|
// set the time the sensor will take for value accumulation, default: 402 ms
|
||||||
|
tsl2561.tsl2561->set_integration_time(sensor::TSL2561_INTEGRATION_14MS);
|
||||||
|
// set a higher gain for low light conditions, default: 1x
|
||||||
|
tsl2561.tsl2561->set_gain(sensor::TSL2561_GAIN_16X);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_tsl2561_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::TSL2561Sensor
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenenum:: sensor::TSL2561IntegrationTime
|
||||||
|
.. doxygenenum:: sensor::TSL2561Gain
|
31
api/sensor/ultrasonic.rst
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
Ultrasonic Sensor
|
||||||
|
=================
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// Basic
|
||||||
|
App.make_ultrasonic("Ultrasonic", 12, 13); // trigger pin: 12, echo pin: 13
|
||||||
|
// Filter out timeouts
|
||||||
|
auto ultrasonic = App.make_ultrasonic("Ultrasonic", 12, 13);
|
||||||
|
ultrasonic.mqtt->set_filters({
|
||||||
|
new sensor::FilterOutNANFilter(), // filter out timeouts
|
||||||
|
});
|
||||||
|
// Set timeout, 4 meters
|
||||||
|
ultrasonic.sensor->set_timeout_m(4.0f);
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_ultrasonic_sensor`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: sensor::UltrasonicSensorComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
39
api/switch/index.rst
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
Switch
|
||||||
|
======
|
||||||
|
|
||||||
|
The `switch_` namespace contains all switch helpers.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
IR Transmitter <ir-transmitter>
|
||||||
|
Restart Switch <restart>
|
||||||
|
Shutdown Switch <shutdown>
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
Switch
|
||||||
|
******
|
||||||
|
|
||||||
|
.. doxygenclass:: switch_::Switch
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
SimpleSwitch
|
||||||
|
************
|
||||||
|
|
||||||
|
.. doxygenclass:: switch_::SimpleSwitch
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
MQTTSwitchComponent
|
||||||
|
*******************
|
||||||
|
|
||||||
|
.. doxygenclass:: switch_::MQTTSwitchComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
44
api/switch/ir-transmitter.rst
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
IR Transmitter
|
||||||
|
==============
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
// at the top of your file:
|
||||||
|
using namespace switch_::ir_;
|
||||||
|
|
||||||
|
// Create the hub
|
||||||
|
auto *ir = App.make_ir_transmitter(32);
|
||||||
|
// Create switches
|
||||||
|
auto *panasonic_on = ir->create_transmitter("Panasonic TV On", SendData::from_panasonic(0x4004, 0x100BCBD).repeat(25));
|
||||||
|
App.register_switch(panasonic_on);
|
||||||
|
App.register_switch(ir->create_transmitter("Panasonic TV Volume Up", SendData::from_panasonic(0x4004, 0x1000405)));
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_ir_transmitter` and :cpp:func:`Application::register_switch`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
IRTransmitterComponent
|
||||||
|
**********************
|
||||||
|
|
||||||
|
.. doxygenclass:: switch_::IRTransmitterComponent
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
||||||
|
|
||||||
|
.. doxygenvariable:: switch_::next_rmt_channel
|
||||||
|
|
||||||
|
SendData
|
||||||
|
********
|
||||||
|
|
||||||
|
.. doxygennamespace:: switch_::ir
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
25
api/switch/restart.rst
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
Restart Switch
|
||||||
|
==============
|
||||||
|
|
||||||
|
This platform allows you to restart your ESP8266/ESP32 with a simple MQTT message.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
App.make_restart_switch("Livingroom Restart");
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_restart_switch`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: switch_::RestartSwitch
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
29
api/switch/shutdown.rst
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
Shutdown Switch
|
||||||
|
===============
|
||||||
|
|
||||||
|
This platform allows you to put your ESP8266/ESP32 to sleep until it is manually restarted
|
||||||
|
by either pressing the reset button or toggling the power supply.
|
||||||
|
|
||||||
|
It is especially useful if you're using esphomelib with battery cells that must not
|
||||||
|
be discharged too much.
|
||||||
|
|
||||||
|
Example Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
App.make_shutdown_switch("Livingroom Shutdown");
|
||||||
|
|
||||||
|
.. cpp:namespace:: esphomelib
|
||||||
|
|
||||||
|
See :cpp:func:`Application::make_shutdown_switch`.
|
||||||
|
|
||||||
|
API Reference
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. cpp:namespace:: nullptr
|
||||||
|
|
||||||
|
.. doxygenclass:: switch_::ShutdownSwitch
|
||||||
|
:members:
|
||||||
|
:protected-members:
|
||||||
|
:undoc-members:
|
191
conf.py
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# esphomelib documentation build configuration file, created by
|
||||||
|
# sphinx-quickstart on Mon Jan 22 21:44:07 2018.
|
||||||
|
#
|
||||||
|
# This file is execfile()d with the current directory set to its
|
||||||
|
# containing dir.
|
||||||
|
#
|
||||||
|
# Note that not all possible configuration values are present in this
|
||||||
|
# autogenerated file.
|
||||||
|
#
|
||||||
|
# All configuration values have a default; values that are commented out
|
||||||
|
# serve to show the default.
|
||||||
|
|
||||||
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
|
#
|
||||||
|
# import os
|
||||||
|
# import sys
|
||||||
|
# sys.path.insert(0, os.path.abspath('.'))
|
||||||
|
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
|
||||||
|
|
||||||
|
if on_rtd:
|
||||||
|
subprocess.call('doxygen', shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
|
#
|
||||||
|
# needs_sphinx = '1.0'
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
# ones.
|
||||||
|
extensions = [
|
||||||
|
'breathe',
|
||||||
|
]
|
||||||
|
|
||||||
|
breathe_projects = {"esphomelib": "./_doxyxml/"}
|
||||||
|
breathe_default_project = "esphomelib"
|
||||||
|
breathe_domain_by_extension = {"h" : "cpp"}
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
templates_path = ['_templates']
|
||||||
|
|
||||||
|
# The suffix(es) of source filenames.
|
||||||
|
# You can specify multiple suffix as a list of string:
|
||||||
|
#
|
||||||
|
# source_suffix = ['.rst', '.md']
|
||||||
|
source_suffix = '.rst'
|
||||||
|
|
||||||
|
# The master toctree document.
|
||||||
|
master_doc = 'index'
|
||||||
|
|
||||||
|
# General information about the project.
|
||||||
|
project = 'esphomelib'
|
||||||
|
copyright = '2018, Otto Winter'
|
||||||
|
author = 'Otto Winter'
|
||||||
|
|
||||||
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
# |version| and |release|, also used in various other places throughout the
|
||||||
|
# built documents.
|
||||||
|
#
|
||||||
|
# The short X.Y version.
|
||||||
|
version = '1.4'
|
||||||
|
# The full version, including alpha/beta/rc tags.
|
||||||
|
release = '1.4.0'
|
||||||
|
|
||||||
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
|
# for a list of supported languages.
|
||||||
|
#
|
||||||
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
|
# Usually you set "language" from the command line for these cases.
|
||||||
|
language = None
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
# This patterns also effect to html_static_path and html_extra_path
|
||||||
|
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||||
|
|
||||||
|
# The reST default role (used for this markup: `text`) to use for all documents.
|
||||||
|
# default_role = 'cpp:any'
|
||||||
|
|
||||||
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
|
# highlight_language = 'yaml'
|
||||||
|
|
||||||
|
primary_domain = None
|
||||||
|
|
||||||
|
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||||
|
todo_include_todos = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
|
||||||
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
|
# a list of builtin themes.
|
||||||
|
#
|
||||||
|
html_theme = 'alabaster'
|
||||||
|
|
||||||
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
|
# further. For a list of options available for each theme, see the
|
||||||
|
# documentation.
|
||||||
|
#
|
||||||
|
html_theme_options = {
|
||||||
|
'github_user': 'OttoWinter',
|
||||||
|
'github_repo': 'esphomelib',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
html_static_path = ['_static']
|
||||||
|
|
||||||
|
# Custom sidebar templates, must be a dictionary that maps document names
|
||||||
|
# to template names.
|
||||||
|
#
|
||||||
|
# This is required for the alabaster theme
|
||||||
|
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
|
||||||
|
html_sidebars = {
|
||||||
|
'**': [
|
||||||
|
'relations.html', # needs 'show_related': True theme option to display
|
||||||
|
'searchbox.html',
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTMLHelp output ------------------------------------------
|
||||||
|
|
||||||
|
# Output file base name for HTML help builder.
|
||||||
|
htmlhelp_basename = 'esphomelibdoc'
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
|
latex_elements = {
|
||||||
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
|
#
|
||||||
|
# 'papersize': 'letterpaper',
|
||||||
|
|
||||||
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
|
#
|
||||||
|
# 'pointsize': '10pt',
|
||||||
|
|
||||||
|
# Additional stuff for the LaTeX preamble.
|
||||||
|
#
|
||||||
|
# 'preamble': '',
|
||||||
|
|
||||||
|
# Latex figure (float) alignment
|
||||||
|
#
|
||||||
|
# 'figure_align': 'htbp',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
|
# (source start file, target name, title,
|
||||||
|
# author, documentclass [howto, manual, or own class]).
|
||||||
|
latex_documents = [
|
||||||
|
(master_doc, 'esphomelib.tex', 'esphomelib Documentation',
|
||||||
|
'Otto Winter', 'manual'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for manual page output ---------------------------------------
|
||||||
|
|
||||||
|
# One entry per manual page. List of tuples
|
||||||
|
# (source start file, name, description, authors, manual section).
|
||||||
|
man_pages = [
|
||||||
|
(master_doc, 'esphomelib', 'esphomelib Documentation',
|
||||||
|
[author], 1)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Texinfo output -------------------------------------------
|
||||||
|
|
||||||
|
# Grouping the document tree into Texinfo files. List of tuples
|
||||||
|
# (source start file, target name, title, author,
|
||||||
|
# dir menu entry, description, category)
|
||||||
|
texinfo_documents = [
|
||||||
|
(master_doc, 'esphomelib', 'esphomelib Documentation',
|
||||||
|
author, 'esphomelib', 'One line description of project.',
|
||||||
|
'Miscellaneous'),
|
||||||
|
]
|
||||||
|
|
BIN
esphomeyaml/ads1115.jpg
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
esphomeyaml/bmp180.jpg
Normal file
After Width: | Height: | Size: 143 KiB |
4
esphomeyaml/brightness-medium.svg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<path d="M20 15.31L23.31 12 20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69zM12 18V6c3.31 0 6 2.69 6 6s-2.69 6-6 6z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 309 B |
4
esphomeyaml/bug-report.svg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 538 B |
1
esphomeyaml/cloud-circle.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M16.5,16H8A3,3 0 0,1 5,13A3,3 0 0,1 8,10C8.05,10 8.09,10 8.14,10C8.58,8.28 10.13,7 12,7A4,4 0 0,1 16,11H16.5A2.5,2.5 0 0,1 19,13.5A2.5,2.5 0 0,1 16.5,16M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" /></svg>
|
After Width: | Height: | Size: 523 B |
47
esphomeyaml/components/ads1115.rst
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
ADS1115 Hub
|
||||||
|
===========
|
||||||
|
|
||||||
|
The ``ads1115`` domain creates a global hub so that you can later create
|
||||||
|
individual sensors using the `ADS1115 Sensor
|
||||||
|
Platform </esphomeyaml/components/sensor/ads1115.html>`__. To use this
|
||||||
|
hub, first setup the `I²C Bus </esphomeyaml/components/i2c.html>`__ and
|
||||||
|
connect the sensor to the pins specified there.
|
||||||
|
|
||||||
|
.. figure:: /esphomeyaml/components/sensor/ads1115-full.jpg
|
||||||
|
:align: center
|
||||||
|
:target: `Adafruit`_
|
||||||
|
:width: 50.0%
|
||||||
|
|
||||||
|
ADS1115 16-Bit ADC. Image by `Adafruit`_.
|
||||||
|
|
||||||
|
.. _Adafruit: https://www.adafruit.com/product/1085
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
ads1115:
|
||||||
|
- address: 0x48
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **address** (**Required**, int): The i²c address of the sensor. See
|
||||||
|
`I²C Addresses <#i2c-addresses>`__ for more information.
|
||||||
|
- **rate** (*Optional*, int): The internal rate the sensor is using for
|
||||||
|
its conversions in the unit samples per second. One of ``8``, ``16``,
|
||||||
|
``32``, ``64``, ``128``, ``250``, ``475``, ``860``. Defaults to
|
||||||
|
``128``.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify the ID for this ADS1115 Hub. Use this if you want to use multiple ADS1115 hubs at once.
|
||||||
|
|
||||||
|
I²C Addresses
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
In order to allow multiple sensors to be connected to the same i²c bus,
|
||||||
|
the creators of this sensor hardware have included some options to
|
||||||
|
change the i²c address.
|
||||||
|
|
||||||
|
- If the address pin is pulled to GND, the address is ``0x48``
|
||||||
|
(Default).
|
||||||
|
- If the address pin is pulled to VCC, the address is ``0x49``.
|
||||||
|
- If the address pin is tied to SDA, the address is ``0x4a``.
|
||||||
|
- If the address pin is tied to SCL, the address is ``0x4B``.
|
BIN
esphomeyaml/components/binary_sensor/gpio.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
35
esphomeyaml/components/binary_sensor/gpio.rst
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
GPIO Binary Sensor
|
||||||
|
==================
|
||||||
|
|
||||||
|
The GPIO Binary Sensor platform allows you to use any input pin on your
|
||||||
|
device as a binary sensor.
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
binary_sensor:
|
||||||
|
- platform: gpio
|
||||||
|
pin: D2
|
||||||
|
name: "Living Room Window"
|
||||||
|
device_class: window
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **pin** (**Required**, `Pin
|
||||||
|
Schema </esphomeyaml/configuration-types.html#pin-schema>`__): The
|
||||||
|
pin to periodically check.
|
||||||
|
- **name** (**Required**, string): The name of the binary sensor.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
- All other options from `Binary
|
||||||
|
Sensor </esphomeyaml/components/binary_sensor/index.html#base-binary-sensor-configuration>`__
|
||||||
|
and `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__.
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/binary_sensor/gpio.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 80.0%
|
47
esphomeyaml/components/binary_sensor/index.rst
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
Binary Sensor Component
|
||||||
|
=======================
|
||||||
|
|
||||||
|
With esphomelib you can use different types of binary sensors. They will
|
||||||
|
automatically appear in the Home Assistant front-end and have several
|
||||||
|
configuration options.
|
||||||
|
|
||||||
|
Currently supported binary sensor platforms:
|
||||||
|
|
||||||
|
====================== ====================== ======================
|
||||||
|
|GPIO|_ |Status|_
|
||||||
|
---------------------- ---------------------- ----------------------
|
||||||
|
`GPIO`_ `Status`_
|
||||||
|
====================== ====================== ======================
|
||||||
|
|
||||||
|
.. |GPIO| image:: /esphomeyaml/pin.svg
|
||||||
|
:class: component-image
|
||||||
|
.. _GPIO: /esphomeyaml/components/binary_sensor/gpio.html
|
||||||
|
|
||||||
|
.. |Status| image:: /esphomeyaml/server-network.svg
|
||||||
|
:class: component-image
|
||||||
|
.. _Status: /esphomeyaml/components/binary_sensor/status.html
|
||||||
|
|
||||||
|
|
||||||
|
Base Binary Sensor Configuration
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
All binary sensors have a platform and an optional device class. By
|
||||||
|
default, the binary will chose the appropriate device class itself, but
|
||||||
|
you can always override it.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
binary_sensor:
|
||||||
|
- platform: ...
|
||||||
|
device_class: Device Class
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
|
||||||
|
- **device_class** (*Optional*, string): The device class for the
|
||||||
|
sensor. See https://www.home-assistant.io/components/binary_sensor/
|
||||||
|
for a list of available options.
|
||||||
|
- **inverted** (*Optional*, boolean): Whether to invert the binary
|
||||||
|
sensor output, i.e. report ON states as OFF and vice versa. Defaults
|
||||||
|
to ``False``.
|
||||||
|
- All other options from `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__.
|
BIN
esphomeyaml/components/binary_sensor/status.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
33
esphomeyaml/components/binary_sensor/status.rst
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
Status Binary Sensor
|
||||||
|
====================
|
||||||
|
|
||||||
|
The Status Binary Sensor exposes the node state (if it’s connected to
|
||||||
|
MQTT or not) for Home Assistant. It uses the `MQTT birth and last will
|
||||||
|
messages </esphomeyaml/components/mqtt.html#last-will-and-birth-messages>`__
|
||||||
|
to do this.
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
binary_sensor:
|
||||||
|
- platform: status
|
||||||
|
name: "Living Room Status"
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **name** (**Required**, string): The name of the binary sensor.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
- All other options from `Binary
|
||||||
|
Sensor </esphomeyaml/components/binary_sensor/index.html#base-binary-sensor-configuration>`__
|
||||||
|
and `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__.
|
||||||
|
Inverted is not supported.
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/binary_sensor/status.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 80.0%
|
38
esphomeyaml/components/dallas.rst
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
Dallas Temperature Component
|
||||||
|
============================
|
||||||
|
|
||||||
|
The ``dallas`` component allows you to use your
|
||||||
|
`DS18b20 <https://www.adafruit.com/product/374>`__
|
||||||
|
(`datasheet <https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf>`__)
|
||||||
|
and similar temperature sensors.
|
||||||
|
|
||||||
|
To use your dallas sensor, first define a dallas “hub” with a pin and
|
||||||
|
id, which you will later use to create the sensors. The 1-Wire bus the
|
||||||
|
sensors are connected to should have an external pullup resistor of
|
||||||
|
about 4.7KΩ.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
dallas:
|
||||||
|
- id: dallas_hub1
|
||||||
|
pin: 23
|
||||||
|
|
||||||
|
# Individual sensors
|
||||||
|
sensor:
|
||||||
|
- platform: dallas
|
||||||
|
dallas_id: "dallas_hub1"
|
||||||
|
address: 0x1c0000031edd2a28
|
||||||
|
name: "Livingroom Temperature"
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **pin** (**Required**, number): The pin the sensor bus is connected
|
||||||
|
to.
|
||||||
|
- **update_interval** (*Optional*,
|
||||||
|
`time </esphomeyaml/configuration-types.html#time>`__): The interval
|
||||||
|
that the sensors should be checked. Defaults to 15 seconds.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
BIN
esphomeyaml/components/debug.png
Normal file
After Width: | Height: | Size: 52 KiB |
21
esphomeyaml/components/debug.rst
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Debug Component
|
||||||
|
===============
|
||||||
|
|
||||||
|
The ``debug`` component can be used to debug problems with esphomelib. At startup, it prints
|
||||||
|
a bunch of useful information like reset reason, free heap size, esphomelib version and so on.
|
||||||
|
|
||||||
|
.. figure:: /esphomeyaml/components/debug.png
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
Example debug component output.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
debug:
|
||||||
|
|
||||||
|
# Logger must be at least debug (default)
|
||||||
|
logger:
|
||||||
|
level: debug
|
||||||
|
|
||||||
|
There are no configuration variables for this component.
|
42
esphomeyaml/components/deep_sleep.rst
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
Deep Sleep Component
|
||||||
|
====================
|
||||||
|
|
||||||
|
The ``deep_sleep`` component can be used to automatically enter a deep sleep mode on the
|
||||||
|
ESP8266/ESP32 after a certain amount of time. This is especially useful with nodes that operate
|
||||||
|
on batteries and therefore need to conserve as much energy as possible.
|
||||||
|
|
||||||
|
To use ``deep_sleep`` first specify how long the node should be active, i.e. how long it should
|
||||||
|
check sensor values and report them, using the ``run_duration`` and ``run_cycles`` options. If you
|
||||||
|
use both in your configuration, any time either one of them is finished, the node will go into deep
|
||||||
|
sleep mode.
|
||||||
|
|
||||||
|
Next, tell the node how it should wakeup. On the ESP8266, you can only put the node into deep sleep
|
||||||
|
for a duration using ``sleep_duration``, note that on the ESP8266 ``GPIO16`` must be connected to
|
||||||
|
the ``RST`` pin so that it will wake up again. On the ESP32, you additionally have the option
|
||||||
|
to wake up on any RTC pin (0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32, 39).
|
||||||
|
|
||||||
|
While in deep sleep mode, the node will not do any work and not respond to any network traffic,
|
||||||
|
even Over The Air updates.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
deep_sleep:
|
||||||
|
run_duration: 10s
|
||||||
|
sleep_duration: 10min
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **run_duration** (*Optional*, `time </esphomeyaml/configuration-types.html#time>`__):
|
||||||
|
The time duration the node should be active, i.e. run code.
|
||||||
|
- **run_cycles** (*Optional*, int): The number of ``loop()`` cycles to go through before
|
||||||
|
entering deep sleep mode.
|
||||||
|
- **sleep_duration** (*Optional*, `time </esphomeyaml/configuration-types.html#time>`__):
|
||||||
|
The time duration to stay in deep sleep mode.
|
||||||
|
- **wakeup_pin** (*Optional*, `Pin Schema </esphomeyaml/configuration-types.html#pin-schema>`__):
|
||||||
|
Only on ESP32. A pin to wake up to once in deep sleep mode. Use the inverted property to wake up
|
||||||
|
to LOW signals.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
46
esphomeyaml/components/esphomeyaml.rst
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
esphomeyaml Core Configuration
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Here you specify some core information that esphomeyaml needs to create
|
||||||
|
firmwares. Most importantly, this is the section of the configuration
|
||||||
|
where you specify the **name** of the node, the **platform** and
|
||||||
|
**board** you’re using.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
esphomeyaml:
|
||||||
|
name: livingroom
|
||||||
|
platform: ESP32
|
||||||
|
board: nodemcu-32s
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **name** (**Required**, string): This is the name of the node. It
|
||||||
|
should always be unique to the node and no other node in your system
|
||||||
|
can use the same name. It can also only contain upper/lowercase
|
||||||
|
characters, digits and underscores.
|
||||||
|
- **platform** (**Required**, string): The platform your board is on,
|
||||||
|
either ``ESP32`` or ``ESP8266``.
|
||||||
|
- **board** (**Required**, string): The board esphomeyaml should
|
||||||
|
specify for platformio. For the ESP32, choose the appropriate one
|
||||||
|
from `this
|
||||||
|
list <http://docs.platformio.org/en/latest/platforms/espressif32.html#boards>`__
|
||||||
|
and use `this
|
||||||
|
list <http://docs.platformio.org/en/latest/platforms/espressif8266.html#boards>`__
|
||||||
|
for ESP8266-based boards.
|
||||||
|
- **library_uri** (*Optional*, string): You can manually specify the
|
||||||
|
`version of
|
||||||
|
esphomelib <https://github.com/OttoWinter/esphomelib/releases>`__ to
|
||||||
|
use here. Accepts all parameters of `platformio lib
|
||||||
|
install <http://docs.platformio.org/en/latest/userguide/lib/cmd_install.html#id2>`__.
|
||||||
|
Use ``https://github.com/OttoWinter/esphomelib.git`` for the latest
|
||||||
|
(unstable) build. Defaults to ``esphomelib``.
|
||||||
|
- **simplify** (*Optional*, boolean): Whether to simplify the
|
||||||
|
auto-generated code, i.e. whether to remove unused variables, use
|
||||||
|
``auto`` types and so on. Defaults to ``true``.
|
||||||
|
- **use_build_flags** (*Optional*, boolean): If esphomeyaml should manually set
|
||||||
|
build flags that specifically set what should be included in the binary. Most of
|
||||||
|
this is already done automatically by the linker but this option can help with
|
||||||
|
shrinking the firmware size while slowing down compilation. Defaults to ``false``.
|
37
esphomeyaml/components/fan/binary.rst
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
Binary Fan
|
||||||
|
==========
|
||||||
|
|
||||||
|
The ``binary`` fan platform lets you represent any binary `ouput
|
||||||
|
component </esphomeyaml/components/output/index.html>`__ as a fan.
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
fan:
|
||||||
|
- platform: binary
|
||||||
|
output: myoutput_1
|
||||||
|
name: "Living Room Fan"
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **output** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
binary output component to use for this fan.
|
||||||
|
- **name** (**Required**, string): The name for this fan.
|
||||||
|
- **oscillation_output** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The output to use
|
||||||
|
for the oscillation state of this fan. Default is empty.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
- All other options from `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__
|
||||||
|
and `Fan
|
||||||
|
Component </esphomeyaml/components/fan/index.html#base-fan-configuration>`__.
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/fan/fan.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 80.0%
|
BIN
esphomeyaml/components/fan/fan.png
Normal file
After Width: | Height: | Size: 12 KiB |
52
esphomeyaml/components/fan/index.rst
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
Fan Component
|
||||||
|
=============
|
||||||
|
|
||||||
|
With the ``fan`` domain you can create components that appear as fans in
|
||||||
|
the Home Assistant frontend. A fan can be switched ON or OFF, optionally
|
||||||
|
has a speed setting (``LOW``, ``MEDIUM``, ``HIGH``) and can have an
|
||||||
|
oscillate output.
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
Currently supported fan platforms:
|
||||||
|
|
||||||
|
======================== ======================== ========================
|
||||||
|
|Binary Fan|_ |Speed Fan|_
|
||||||
|
------------------------ ------------------------ ------------------------
|
||||||
|
`Binary Fan`_ `Speed Fan`_
|
||||||
|
======================== ======================== ========================
|
||||||
|
|
||||||
|
.. |Binary Fan| image:: /esphomeyaml/fan.svg
|
||||||
|
:class: component-image
|
||||||
|
.. _Binary Fan: /esphomeyaml/components/fan/binary.html
|
||||||
|
|
||||||
|
.. |Speed Fan| image:: /esphomeyaml/fan.svg
|
||||||
|
:class: component-image
|
||||||
|
.. _Speed Fan: /esphomeyaml/components/fan/speed.html
|
||||||
|
|
||||||
|
Base Fan Configuration
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
fan:
|
||||||
|
- platform: ...
|
||||||
|
name: ...
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
|
||||||
|
- **name** (**Required**, string): The name of the fan.
|
||||||
|
- **oscillation_state_topic** (*Optional*, string): The topic to
|
||||||
|
publish fan oscillaiton state changes to.
|
||||||
|
- **oscillation_command_topic** (*Optional*, string): The topic to
|
||||||
|
receive oscillation commands on.
|
||||||
|
- **speed_state_topic** (*Optional*, string): The topic to publish fan
|
||||||
|
speed state changes to.
|
||||||
|
- **speed_command_topic** (*Optional*, string): The topic to receive
|
||||||
|
speedcommands on.
|
||||||
|
- All other options from `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__.
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/fan/fan.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 70.0%
|
47
esphomeyaml/components/fan/speed.rst
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
Speed Fan
|
||||||
|
=========
|
||||||
|
|
||||||
|
The ``speed`` fan platform lets you represent any float `ouput
|
||||||
|
component </esphomeyaml/components/output/index.html>`__ as a fan that
|
||||||
|
supports speed settings.
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
fan:
|
||||||
|
- platform: speed
|
||||||
|
output: myoutput_1
|
||||||
|
name: "Living Room Fan"
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **output** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
binary output component to use for this fan.
|
||||||
|
- **name** (**Required**, string): The name for this fan.
|
||||||
|
- **oscillation_output** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The output to use
|
||||||
|
for the oscillation state of this fan. Default is empty.
|
||||||
|
- **speed** (*Optional*): Set the float values for each speed setting:
|
||||||
|
|
||||||
|
- **low** (*Required*, float): Set the value for the low speed
|
||||||
|
setting. Must be in range 0 to 1. Defaults to 0.33.
|
||||||
|
- **medium** (*Required*, float): Set the value for the medium speed
|
||||||
|
setting. Must be in range 0 to 1. Defaults to 0.66.
|
||||||
|
- **high** (*Required*, float): Set the value for the high speed
|
||||||
|
setting. Must be in range 0 to 1. Defaults to 1.
|
||||||
|
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
- All other options from `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__
|
||||||
|
and `Fan
|
||||||
|
Component </esphomeyaml/components/fan/index.html#base-fan-configuration>`__.
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/fan/fan.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 80.0%
|
66
esphomeyaml/components/i2c.rst
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
I²C Bus
|
||||||
|
=======
|
||||||
|
|
||||||
|
This component sets up the i²c bus for your ESP32 or ESP8266. It’s used
|
||||||
|
for several other components:
|
||||||
|
|
||||||
|
======================= ======================= =======================
|
||||||
|
|PCA9685 PWM|_ |ADS1115|_ |BMP085|_
|
||||||
|
----------------------- ----------------------- -----------------------
|
||||||
|
`PCA9685 PWM`_ `ADS1115`_ `BMP085`_
|
||||||
|
----------------------- ----------------------- -----------------------
|
||||||
|
|HDC1080|_ |HTU21D|_ |MPU6050|_
|
||||||
|
----------------------- ----------------------- -----------------------
|
||||||
|
`HDC1080`_ `HTU21D`_ `MPU6050`_
|
||||||
|
======================= ======================= =======================
|
||||||
|
|
||||||
|
.. |PCA9685 PWM| image:: /esphomeyaml/pca9685.jpg
|
||||||
|
:class: component-image
|
||||||
|
.. _PCA9685 PWM: /esphomeyaml/components/output/pca9685.html
|
||||||
|
|
||||||
|
.. |ADS1115| image:: /esphomeyaml/ads1115.jpg
|
||||||
|
:class: component-image
|
||||||
|
.. _ADS1115: /esphomeyaml/components/sensor/ads1115.html
|
||||||
|
|
||||||
|
.. |BMP085| image:: /esphomeyaml/bmp180.jpg
|
||||||
|
:class: component-image
|
||||||
|
.. _BMP085: /esphomeyaml/components/sensor/bmp085.html
|
||||||
|
|
||||||
|
.. |HDC1080| image:: /esphomeyaml/HDC1080.jpg
|
||||||
|
:class: component-image
|
||||||
|
.. _HDC1080: /esphomeyaml/components/sensor/hdc1080.html
|
||||||
|
|
||||||
|
.. |HTU21D| image:: /esphomeyaml/htu21d.jpg
|
||||||
|
:class: component-image
|
||||||
|
.. _HTU21D: /esphomeyaml/components/sensor/htu21d.html
|
||||||
|
|
||||||
|
.. |MPU6050| image:: /esphomeyaml/mpu6050.jpg
|
||||||
|
:class: component-image
|
||||||
|
.. _MPU6050: /esphomeyaml/components/sensor/mpu6050.html
|
||||||
|
|
||||||
|
In order for those components to work correctly, you need to define the
|
||||||
|
i²c bus in your configuration.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
i2c:
|
||||||
|
sda: 21
|
||||||
|
scl: 22
|
||||||
|
scan: False
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **sda** (*Optional*, `pin </esphomeyaml/configuration-types.html#pin>`__): The pin for the data line of the i²c bus.
|
||||||
|
Defaults to the default of your board (usually GPIO21 for ESP32 and
|
||||||
|
GPIO4 for ESP8266).
|
||||||
|
- **sdc** (*Optional*, `pin </esphomeyaml/configuration-types.html#pin>`__): The pin for the clock line of the i²c bus.
|
||||||
|
Defaults to the default of your board (usually GPIO22 for ESP32 and
|
||||||
|
GPIO5 for ESP8266).
|
||||||
|
- **scan** (*Optional*, boolean): If esphomelib should do a search of the i2c address space on startup.
|
||||||
|
Note that this can slow down startup and is only recommended for when setting up new sensors. Defaults to
|
||||||
|
``False``.
|
||||||
|
- **frequency** (*Optional*, float): Only on ESP32. Set the frequency
|
||||||
|
the i²c bus should operate on. Defaults to “100kHz”. Accepts most
|
||||||
|
metric suffixes.
|
40
esphomeyaml/components/ir_transmitter.rst
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
ESP32 IR Transmitter Component
|
||||||
|
==============================
|
||||||
|
|
||||||
|
The IR transmitter component lets you use the `remote
|
||||||
|
peripheral <https://esp-idf.readthedocs.io/en/latest/api-reference/peripherals/rmt.html>`__
|
||||||
|
on your ESP32 to send infrared messages to control devices in your home.
|
||||||
|
First, you need to setup a global hub that specifies which pin your IR
|
||||||
|
led is connected to. Afterwards you can create `individual
|
||||||
|
switches </esphomeyaml/components/switch/ir_transmitter.html>`__ that
|
||||||
|
each send a pre-defined IR code to a device.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
ir_transmitter:
|
||||||
|
- id: 'ir_hub1'
|
||||||
|
pin: 32
|
||||||
|
|
||||||
|
# Individual switches
|
||||||
|
switch:
|
||||||
|
- platform: ir_transmitter
|
||||||
|
ir_transmitter_id: 'ir_hub1'
|
||||||
|
name: "Panasonic TV Off"
|
||||||
|
panasonic:
|
||||||
|
address: 0x4004
|
||||||
|
command: 0x100BCBD
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **pin** (**Required**,
|
||||||
|
`pin </esphomeyaml/configuration-types.html#pin>`__): The pin of the
|
||||||
|
IR LED.
|
||||||
|
- **carrier_duty_percent** (*Optional*, int): The duty percentage of
|
||||||
|
the carrier. 50 for example means that the LED will be on 50% of the
|
||||||
|
time. Must be in range from 0 to 100. Defaults to 50.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation. Use this if you have multiple IR
|
||||||
|
transmitters.
|
BIN
esphomeyaml/components/light/binary-light.png
Normal file
After Width: | Height: | Size: 13 KiB |
35
esphomeyaml/components/light/binary.rst
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
Binary Light
|
||||||
|
============
|
||||||
|
|
||||||
|
The ``binary`` light platform creates a simple light from an `output
|
||||||
|
component </esphomeyaml/components/output/index.html>`__ and can only be
|
||||||
|
turned ON or OFF.
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
light:
|
||||||
|
- platform: binary
|
||||||
|
name: "Desk Lamp"
|
||||||
|
output: output_component1
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **name** (**Required**, string): The name of the light.
|
||||||
|
- **output** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
binary `output
|
||||||
|
component </esphomeyaml/components/output/index.html>`__ to use for
|
||||||
|
this light.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
- All other options from `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__.
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/light/binary-light.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 80.0%
|
41
esphomeyaml/components/light/index.rst
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Light Component
|
||||||
|
===============
|
||||||
|
|
||||||
|
The ``light`` domain in esphomeyaml lets you create lights that will
|
||||||
|
automatically be shown in Home Assistant’s frontend and have many
|
||||||
|
features such as RGB colors, transitions, flashing and effects.
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
Currently supported light platforms:
|
||||||
|
|
||||||
|
======================== ======================== ========================
|
||||||
|
|Binary Light|_ |Monochromatic Light|_ |RGB Light|_
|
||||||
|
------------------------ ------------------------ ------------------------
|
||||||
|
`Binary Light`_ `Monochromatic Light`_ `RGB Light`_
|
||||||
|
------------------------ ------------------------ ------------------------
|
||||||
|
|RGBW Light|_
|
||||||
|
------------------------ ------------------------ ------------------------
|
||||||
|
`RGBW Light`_
|
||||||
|
======================== ======================== ========================
|
||||||
|
|
||||||
|
|
||||||
|
.. |Binary Light| image:: /esphomeyaml/lightbulb.svg
|
||||||
|
:class: component-image
|
||||||
|
.. _Binary Light: /esphomeyaml/components/light/binary.html
|
||||||
|
|
||||||
|
.. |Monochromatic Light| image:: /esphomeyaml/brightness-medium.svg
|
||||||
|
:class: component-image
|
||||||
|
.. _Monochromatic Light: /esphomeyaml/components/light/monochromatic.html
|
||||||
|
|
||||||
|
.. |RGB Light| image:: /esphomeyaml/rgb.png
|
||||||
|
:class: component-image
|
||||||
|
.. _RGB Light: /esphomeyaml/components/light/rgb.html
|
||||||
|
|
||||||
|
.. |RGBW Light| image:: /esphomeyaml/rgbw.png
|
||||||
|
:class: component-image
|
||||||
|
.. _RGBW Light: /esphomeyaml/components/light/rgbw.html
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/light/light-rgb.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 30.0%
|
BIN
esphomeyaml/components/light/kitchen-lights.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
esphomeyaml/components/light/light-rgb.png
Normal file
After Width: | Height: | Size: 34 KiB |
41
esphomeyaml/components/light/monochromatic.rst
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Monochromatic Light
|
||||||
|
===================
|
||||||
|
|
||||||
|
The ``monochromatic`` light platform creates a simple light
|
||||||
|
brightness-only from an `output
|
||||||
|
component </esphomeyaml/components/output/index.html>`__.
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
light:
|
||||||
|
- platform: monochromatic
|
||||||
|
name: "Kitchen Lights"
|
||||||
|
output: output_component1
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **name** (**Required**, string): The name of the light.
|
||||||
|
- **output** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
float `output component </esphomeyaml/components/output/index.html>`__
|
||||||
|
to use for this light.
|
||||||
|
- **gamma_correct** (*Optional*, float): The `gamma correction
|
||||||
|
factor <https://en.wikipedia.org/wiki/Gamma_correction>`__ for the
|
||||||
|
light. Defaults to ``2.8``.
|
||||||
|
- **default_transition_length** (*Optional*,
|
||||||
|
`time </esphomeyaml/configuration-types.html#time>`__): The length of
|
||||||
|
the transition if no transition parameter is provided by Home
|
||||||
|
Assistant. Defaults to ``1s``.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
- All other options from `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__.
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/light/kitchen-lights.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 80.0%
|
BIN
esphomeyaml/components/light/rgb-light.png
Normal file
After Width: | Height: | Size: 45 KiB |
51
esphomeyaml/components/light/rgb.rst
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
RGB Light
|
||||||
|
=========
|
||||||
|
|
||||||
|
The ``rgb`` light platform creates an RGB light from 3 `output
|
||||||
|
components </esphomeyaml/components/output/index.html>`__ (one for each
|
||||||
|
color channel).
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
light:
|
||||||
|
- platform: rgb
|
||||||
|
name: "Living Room Lights"
|
||||||
|
red: output_component1
|
||||||
|
green: output_component2
|
||||||
|
blue: output_component3
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **name** (**Required**, string): The name of the light.
|
||||||
|
- **red** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
float `output component </esphomeyaml/components/output/index.html>`__
|
||||||
|
to use for the red channel.
|
||||||
|
- **green** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
float `output component </esphomeyaml/components/output/index.html>`__
|
||||||
|
to use for the green channel.
|
||||||
|
- **blue** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
float `output component </esphomeyaml/components/output/index.html>`__
|
||||||
|
to use for the blue channel.
|
||||||
|
- **gamma_correct** (*Optional*, float): The `gamma correction
|
||||||
|
factor <https://en.wikipedia.org/wiki/Gamma_correction>`__ for the
|
||||||
|
light. Defaults to ``2.8``.
|
||||||
|
- **default_transition_length** (*Optional*,
|
||||||
|
`time </esphomeyaml/configuration-types.html#time>`__): The length of
|
||||||
|
the transition if no transition parameter is provided by Home
|
||||||
|
Assistant. Defaults to ``1s``.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
- All other options from `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__.
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/light/rgb-light.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 40.0%
|
50
esphomeyaml/components/light/rgbw.rst
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
RGBW Light
|
||||||
|
==========
|
||||||
|
|
||||||
|
The ``rgbw`` light platform creates an RGBW light from 4 `output
|
||||||
|
components </esphomeyaml/components/output/index.html>`__ (one for each
|
||||||
|
channel).
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
light:
|
||||||
|
- platform: rgb
|
||||||
|
name: "Livingroom Lights"
|
||||||
|
red: output_component1
|
||||||
|
green: output_component2
|
||||||
|
blue: output_component3
|
||||||
|
white: output_component4
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **name** (**Required**, string): The name of the light.
|
||||||
|
- **red** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
float `output component </esphomeyaml/components/output/index.html>`__
|
||||||
|
to use for the red channel.
|
||||||
|
- **green** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
float `output component </esphomeyaml/components/output/index.html>`__
|
||||||
|
to use for the green channel.
|
||||||
|
- **blue** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
float `output component </esphomeyaml/components/output/index.html>`__
|
||||||
|
to use for the blue channel.
|
||||||
|
- **white** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id of the
|
||||||
|
float `output component </esphomeyaml/components/output/index.html>`__
|
||||||
|
to use for the white channel.
|
||||||
|
- **gamma_correct** (*Optional*, float): The `gamma correction
|
||||||
|
factor <https://en.wikipedia.org/wiki/Gamma_correction>`__ for the
|
||||||
|
light. Defaults to ``2.8``.
|
||||||
|
- **default_transition_length** (*Optional*,
|
||||||
|
`time </esphomeyaml/configuration-types.html#time>`__): The length of
|
||||||
|
the transition if no transition parameter is provided by Home
|
||||||
|
Assistant. Defaults to ``1s``.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
- All other options from `MQTT
|
||||||
|
Component </esphomeyaml/components/mqtt.html#mqtt-component-base-configuration>`__.
|
BIN
esphomeyaml/components/logger-manual-log-level.png
Normal file
After Width: | Height: | Size: 124 KiB |
78
esphomeyaml/components/logger.rst
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
Logger Component
|
||||||
|
================
|
||||||
|
|
||||||
|
The logger component automatically logs all log messages through the
|
||||||
|
serial port and through MQTT topics. By default, all logs with a
|
||||||
|
severity higher than ``DEBUG`` will be shown. Decreasing the log level
|
||||||
|
can help with the performance of the application and memory size.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
logger:
|
||||||
|
level: DEBUG
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **baud_rate** (*Optional*, int): The baud rate to use for the serial
|
||||||
|
UART port. Defaults to 115200.
|
||||||
|
- **log_topic** (*Optional*, string): The MQTT topic to write log
|
||||||
|
messages to. Defaults to ``<MQTT_TOPIC_PREFIX>/debug``. Empty string
|
||||||
|
disables MQTT logging.
|
||||||
|
- **tx_buffer_size** (*Optional*, string): The size of the buffer used
|
||||||
|
for log messages. Decrease this if you’re having memory problems.
|
||||||
|
Defaults to 512.
|
||||||
|
- **level** (*Optional*, string): The global log level. Any log message
|
||||||
|
with a lower severity will not be shown. Defaults to DEBUG.
|
||||||
|
- **logs** (*Optional*, mapping): Manually set the log level for a
|
||||||
|
specific component or tag. See `Manual Log Levels for more
|
||||||
|
information <#manual-tag-specific-log-levels>`__.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
|
||||||
|
Log Levels
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
Possible log levels are (sorted by severity):
|
||||||
|
|
||||||
|
- ``NONE``
|
||||||
|
- ``ERROR``
|
||||||
|
- ``WARN``
|
||||||
|
- ``INFO``
|
||||||
|
- ``DEBUG``
|
||||||
|
- ``VERBOSE``
|
||||||
|
|
||||||
|
Manual Tag-Specific Log Levels
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If some component is spamming the logs and you want to manually set the
|
||||||
|
log level for it, first identify the tag of the log messages in question
|
||||||
|
and then disable them in your configuration.
|
||||||
|
|
||||||
|
Suppose we want to have verbose log messages globally, but the MQTT
|
||||||
|
client spams too much. In the following example, we’d first see that the
|
||||||
|
tag of the MQTT client is ``mqtt.client`` (before the first colon) and
|
||||||
|
the tag for MQTT components is ``mqtt.component``.
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
Next, we can manually set the log levels in the configuration like this:
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
logger:
|
||||||
|
level: VERBOSE
|
||||||
|
logs:
|
||||||
|
mqtt.component: DEBUG
|
||||||
|
mqtt.client: ERROR
|
||||||
|
|
||||||
|
Please note that the global log level determines what log messages are
|
||||||
|
saved in the binary. So for example a ``INFO`` global log message will
|
||||||
|
purge all ``DEBUG`` log statements from the binary in order to conserve
|
||||||
|
space. This however means that you cannot set tag-specific log levels
|
||||||
|
that have a lower severity than the global log level.
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/logger-manual-log-level.png
|
||||||
|
|
BIN
esphomeyaml/components/mqtt-availability.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
248
esphomeyaml/components/mqtt.rst
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
MQTT Client Component
|
||||||
|
=====================
|
||||||
|
|
||||||
|
The MQTT Client Component sets up the MQTT connection to your broker and
|
||||||
|
is currently required for esphomelib to work. In most cases, you will
|
||||||
|
just be able to copy over the `MQTT
|
||||||
|
section <https://www.home-assistant.io/components/mqtt/>`__ of your Home
|
||||||
|
Assistant configuration.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
mqtt:
|
||||||
|
broker: 10.0.0.2
|
||||||
|
username: livingroom
|
||||||
|
password: MyMQTTPassword
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **broker** (**Required**, string): The host of your MQTT broker.
|
||||||
|
- **port** (*Optional*, int): The port to connect to. Defaults to 1883.
|
||||||
|
- **username** (*Optional*, string): The username to use for
|
||||||
|
authentication. Empty (the default) means no authentication.
|
||||||
|
- **password** (*Optional*, string): The password to use for
|
||||||
|
authentication. Empty (the default) means no authentication.
|
||||||
|
- **client_id** (*Optional*, string): The client id to use for opening
|
||||||
|
connections. See `Defaults <#defaults>`__ for more information.
|
||||||
|
- **discovery** (*Optional*, boolean): If Home Assistant automatic
|
||||||
|
discovery should be enabled. Defaults to ``True``.
|
||||||
|
- **discovery_retain** (*Optional*, boolean): Whether to retain MQTT
|
||||||
|
discovery messages so that entities are added automatically on Home
|
||||||
|
Assistant restart. Defaults to ``True``.
|
||||||
|
- **discovery_prefix** (*Optional*, string): The prefix to use for Home
|
||||||
|
Assistant’s MQTT discovery. Should not contain trailing slash.
|
||||||
|
Defaults to ``homeassistant``.
|
||||||
|
- **topic_prefix** (*Optional*, string): The prefix used for all MQTT
|
||||||
|
messages. Should not contain trailing slash. Defaults to
|
||||||
|
``<APP_NAME>``.
|
||||||
|
- **log_topic** (*Optional*, `MQTTMessage <#mqttmessage>`__) The topic to send MQTT log
|
||||||
|
messages to.
|
||||||
|
- **birth_message** (*Optional*, `MQTTMessage <#mqttmessage>`__): The message to send when
|
||||||
|
a connection to the broker is established. See `Last Will And Birth
|
||||||
|
Messages <#last-will-and-birth-messages>`__ for more information.
|
||||||
|
- **will_message** (*Optional*, `MQTTMessage <#mqttmessage>`__): The message to send when
|
||||||
|
the MQTT connection is dropped. See `Last Will And Birth
|
||||||
|
Messages <#last-will-and-birth-messages>`__ for more information.
|
||||||
|
- **ssl_fingerprints** (*Optional*, list): Only on ESP8266. A list of SHA1 hashes used
|
||||||
|
for verifying SSL connections. See `SSL Fingerprints <#ssl-fingerprints>`__
|
||||||
|
for more information.
|
||||||
|
- **keepalive** (*Optional*, `time </esphomeyaml/configuration-types.html#time>`__): The time
|
||||||
|
to keep the MQTT socket alive, decreasing this can help with overall stability due to more
|
||||||
|
WiFi traffic with more pings. Defaults to 15 seconds.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
||||||
|
|
||||||
|
MQTTMessage
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
With the MQTT Message schema you can tell esphomeyaml how a specific MQTT message should be sent.
|
||||||
|
It is used in several places like last will and birth messages or MQTT log options.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Simple:
|
||||||
|
some_option: topic/to/send/to
|
||||||
|
|
||||||
|
# Disable:
|
||||||
|
some_option:
|
||||||
|
|
||||||
|
# Advanced:
|
||||||
|
some_option:
|
||||||
|
topic: topic/to/send/to
|
||||||
|
payload: online
|
||||||
|
qos: 0
|
||||||
|
retain: True
|
||||||
|
|
||||||
|
|
||||||
|
Configuration options:
|
||||||
|
|
||||||
|
- **topic** (*Required*, string): The MQTT topic to publish the message.
|
||||||
|
- **payload** (*Required*, string): The message content. Will be filled by the actual payload with some
|
||||||
|
options, like log_topic.
|
||||||
|
- **qos** (*Optional*, int): The `Quality of
|
||||||
|
Service <https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels>`__
|
||||||
|
level of the topic. Defaults to 0.
|
||||||
|
- **retain** (*Optional*, boolean): If the published message should
|
||||||
|
have a retain flag on or not. Defaults to ``True``.
|
||||||
|
|
||||||
|
|
||||||
|
Using with Home Assistant
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Using esphomelib with Home Assistant is easy, simply setup an MQTT
|
||||||
|
broker (like `mosquitto <https://mosquitto.org/>`__) and point both your
|
||||||
|
Home Assistant installation and esphomelib to that broker. Next, enable
|
||||||
|
discovery in your Home Assistant configuration with the following:
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example Home Assistant configuration.yaml entry
|
||||||
|
mqtt:
|
||||||
|
broker: ...
|
||||||
|
discovery: True
|
||||||
|
|
||||||
|
And that should already be it 🎉 All devices defined through
|
||||||
|
esphomelib/esphomeyaml should show up automatically in the entities
|
||||||
|
section of Home Assistant.
|
||||||
|
|
||||||
|
When adding new entities, you might run into trouble with old entities
|
||||||
|
still appearing in Home Assistant’s front-end. This is because in order
|
||||||
|
to have Home Assistant “discover” your devices on restart, all discovery
|
||||||
|
MQTT messages need to be retained. Therefore the old entities will also
|
||||||
|
re-appear on every Home Assistant restart even though they’re in
|
||||||
|
eshomeyaml anymore.
|
||||||
|
|
||||||
|
To fix this, esphomeyaml has a simple helper script that purges stale
|
||||||
|
retained messages for you:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
esphomeyaml configuration.yaml clean-mqtt
|
||||||
|
|
||||||
|
This will remove all retained messages with the topic
|
||||||
|
``<DISCOVERY_PREFIX>/+/NODE_NAME/#``. If you want to purge on another
|
||||||
|
topic, simply add ``--topic <your_topic>`` to the command.
|
||||||
|
|
||||||
|
Defaults
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
By default, esphomelib will prefix all messages with your node name or
|
||||||
|
``topic_prefix`` if you have specified it manually. The client id will
|
||||||
|
automatically be generated by using your node name and adding the MAC
|
||||||
|
address of your device to it. Next, discovery is enabled by default with
|
||||||
|
Home Assistant’s default prefix ``homeassistant``.
|
||||||
|
|
||||||
|
If you want to prefix all MQTT messages with a different prefix, like
|
||||||
|
``home/living_room``, you can specify a custom ``topic_prefix`` in the
|
||||||
|
configuration. That way, you can use your existing wildcards like
|
||||||
|
``home/+/#`` together with esphomelib. All other features of esphomelib
|
||||||
|
(like availabilty) should still work correctly.
|
||||||
|
|
||||||
|
Last Will And Birth Messages
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
esphomelib (and esphomeyaml) uses the `last will
|
||||||
|
testament <https://www.hivemq.com/blog/mqtt-essentials-part-9-last-will-and-testament>`__
|
||||||
|
and birth message feature of MQTT to achieve availabilty reporting for
|
||||||
|
Home Assistant. If the node is not connected to MQTT, Home Assistant
|
||||||
|
will show all its entities as unavailable (a feature 😉).
|
||||||
|
|
||||||
|
|image0|
|
||||||
|
|
||||||
|
By default, esphomelib will send a retained MQTT message to
|
||||||
|
``<TOPIC_PREFIX>/status`` with payload ``online``, and will tell the
|
||||||
|
broker to send a message ``<TOPIC_PREFIX>/status`` with payload
|
||||||
|
``offline`` if the connection drops.
|
||||||
|
|
||||||
|
You can change these messages by overriding the ``birth_message`` and
|
||||||
|
``will_message`` with the following options.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
mqtt:
|
||||||
|
# ...
|
||||||
|
birth_message:
|
||||||
|
topic: myavailability/topic
|
||||||
|
payload: online
|
||||||
|
will_message:
|
||||||
|
topic: myavailability/topic
|
||||||
|
payload: offline
|
||||||
|
|
||||||
|
- **birth_message** (*Optional*, `MQTTMessage <#mqttmessage>`__)
|
||||||
|
- **will_message** (*Optional*, `MQTTMessage <#mqttmessage>`__)
|
||||||
|
|
||||||
|
If the birth message and last will message have empty topics or topics
|
||||||
|
that are different from each other, availabilty reporting will be
|
||||||
|
disabled.
|
||||||
|
|
||||||
|
SSL Fingerprints
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
On the ESP8266 you have the option to use SSL connections for MQTT. This feature
|
||||||
|
will get expanded to the ESP32 once the base library, AsyncTCP, supports it. Please
|
||||||
|
note that the SSL feature only checks the SHA1 hash of the SSL certificate to verify
|
||||||
|
the integrity of the connection, so every time the certificate changes, you'll have to
|
||||||
|
update the fingerprints variable. Additionally, SHA1 is known to be partially insecure
|
||||||
|
and with some computing power the fingerprint can be faked.
|
||||||
|
|
||||||
|
To get this fingerprint, first put the broker and port options in the configuration and
|
||||||
|
then run the ``mqtt-fingerprint`` script of esphomeyaml to get the certificate:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
esphomeyaml livingroom.yaml mqtt-fingerprint
|
||||||
|
> SHA1 Fingerprint: a502ff13999f8b398ef1834f1123650b3236fc07
|
||||||
|
> Copy above string into mqtt.ssl_fingerprints section of livingroom.yaml
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
mqtt:
|
||||||
|
# ...
|
||||||
|
ssl_fingerprints:
|
||||||
|
- a502ff13999f8b398ef1834f1123650b3236fc07
|
||||||
|
|
||||||
|
MQTT Component Base Configuration
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
All components in esphomelib that do some sort of communication through
|
||||||
|
MQTT can have some overrides for specific options.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
name: "Component Name"
|
||||||
|
# Optional variables:
|
||||||
|
retain: True
|
||||||
|
discovery: True
|
||||||
|
availabilty:
|
||||||
|
topic: livingroom/status
|
||||||
|
payload_available: online
|
||||||
|
payload_not_available: offline
|
||||||
|
state_topic: livingroom/custom_state_topic
|
||||||
|
command_topic: livingroom/custom_command_topic
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
|
||||||
|
- **name** (**Required**, string): The name to use for the MQTT
|
||||||
|
Component.
|
||||||
|
- **retain** (*Optional*, boolean): If all MQTT state messages should
|
||||||
|
be retained. Defaults to ``True``.
|
||||||
|
- **discovery** (*Optional*, boolean): Manually enable/disable
|
||||||
|
discovery for a component. Defaults to the global default.
|
||||||
|
- **availabilty** (*Optional*): Manually set what should be sent to
|
||||||
|
Home Assistant for showing entity availabilty. Default derived from
|
||||||
|
`global birth/last will message <#last-will-and-birth-messages>`__.
|
||||||
|
- **state_topic** (*Optional*, string): The topic to publish state
|
||||||
|
updates to. Defaults to
|
||||||
|
``<TOPIC_PREFIX>/<COMPONENT_TYPE>/<COMPONENT_NAME>/state``
|
||||||
|
(non-alphanumeric characters from the name are removed).
|
||||||
|
- **command_topic** (*Optional*, string): The topic to subscribe to for
|
||||||
|
commands from the remote. Defaults to
|
||||||
|
``<TOPIC_PREFIX>/<COMPONENT_TYPE>/<COMPONENT_NAME>/command``
|
||||||
|
(non-alphanumeric characters from the name are removed).
|
||||||
|
|
||||||
|
.. |image0| image:: /esphomeyaml/components/mqtt-availability.png
|
||||||
|
:class: align-center
|
||||||
|
:width: 50.0%
|
38
esphomeyaml/components/ota.rst
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
OTA Update Component
|
||||||
|
====================
|
||||||
|
|
||||||
|
With the OTA (Over The Air) update component you can upload your
|
||||||
|
firmware binaries to your node without having to use an USB cable for
|
||||||
|
uploads. esphomeyaml natively supports this through its ``run`` and
|
||||||
|
``upload`` helper scripts.
|
||||||
|
|
||||||
|
Optionally, you can also define a password to use for OTA updates so
|
||||||
|
that an intruder isn’t able to upload any firmware to the ESP without
|
||||||
|
having hardware access to it. This password is also hashed
|
||||||
|
automatically, so an intruder can’t extract the password from the
|
||||||
|
binary.
|
||||||
|
|
||||||
|
esphomelib also supports an “OTA safe mode”. If for some reason your
|
||||||
|
node gets into a boot loop, esphomelib will automatically try to detect
|
||||||
|
this and will go over into a safe mode after 10 unsuccessful boot
|
||||||
|
attempts. In that mode, all components are disabled and only Serial
|
||||||
|
Logging+WiFi+OTA are initialized, so that you can upload a new binary.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
ota:
|
||||||
|
safe_mode: True
|
||||||
|
password: VERYSECURE
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **safe_mode** (*Optional*, boolean): Whether to enable safe mode.
|
||||||
|
Defaults to ``True``.
|
||||||
|
- **password** (*Optional*, string): The password to use for updates.
|
||||||
|
- **port** (*Optional*, int): The port to use for OTA updates. Defaults
|
||||||
|
to ``3232`` for the ESP32 and ``8266`` for the ESP8266.
|
||||||
|
- **id** (*Optional*,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): Manually specify
|
||||||
|
the ID used for code generation.
|
39
esphomeyaml/components/output/esp8266_pwm.rst
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
ESP8266 Software PWM Output
|
||||||
|
===========================
|
||||||
|
|
||||||
|
The ESP8266 Software PWM platform allows you to use a software PWM on
|
||||||
|
the pins GPIO0-GPIO16 on your ESP8266. As this is only a software PWM
|
||||||
|
and not a hardware PWM (like the `ESP32 LEDC
|
||||||
|
PWM </esphomeyaml/components/output/ledc.html>`__) and has a few
|
||||||
|
limitations.
|
||||||
|
|
||||||
|
- There can be a noticeable amount of flickering with increased WiFi
|
||||||
|
activity.
|
||||||
|
- The output range only goes up to about 80%.
|
||||||
|
- It’s mostly fixed to a frequency of 1kHz, you can `increase this a
|
||||||
|
bit manually </api/output/esp8266-pwm.html#example-usage>`__ in code
|
||||||
|
though.
|
||||||
|
|
||||||
|
If you need a stable PWM signal, it’s definitely recommended to use the
|
||||||
|
successor of the ESP8266, the ESP32, and its `LEDC
|
||||||
|
peripheral </esphomeyaml/components/output/ledc.html>`__ instead.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
output:
|
||||||
|
- platform: esp8266_pwm
|
||||||
|
pin: D1
|
||||||
|
id: pwm-output
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **pin** (**Required**, `Pin
|
||||||
|
Schema </esphomeyaml/configuration-types.html#pin-schema>`__): The
|
||||||
|
pin to use PWM on.
|
||||||
|
- **id** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id to use for
|
||||||
|
this output component.
|
||||||
|
- All other options from
|
||||||
|
`Output </esphomeyaml/components/output/index.html#base-output-configuration>`__.
|
26
esphomeyaml/components/output/gpio.rst
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
GPIO Output
|
||||||
|
===========
|
||||||
|
|
||||||
|
The GPIO output component is quite simple: It exposes a single GPIO pin
|
||||||
|
as an output component. Note that output components are **not** switches and
|
||||||
|
will not show up in Home Assistant. See `GPIO Switch </esphomeyaml/components/switch/gpio.html>`__.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
output:
|
||||||
|
- platform: gpio
|
||||||
|
pin: D1
|
||||||
|
id: gpio-d1
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **pin** (**Required**, `Pin
|
||||||
|
Schema </esphomeyaml/configuration-types.html#pin-schema>`__): The
|
||||||
|
pin to use PWM on.
|
||||||
|
- **id** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id to use for
|
||||||
|
this output component.
|
||||||
|
- All other options from
|
||||||
|
`Output </esphomeyaml/components/output/index.html#base-output-configuration>`__.
|
62
esphomeyaml/components/output/index.rst
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
Output Component
|
||||||
|
================
|
||||||
|
|
||||||
|
Each platform of the ``output`` domain exposes some output to
|
||||||
|
esphomelib. These are grouped into two categories: ``binary`` outputs
|
||||||
|
(that can only be ON/OFF) and ``float`` outputs (like PWM, can output
|
||||||
|
any rational value between 0 and 1).
|
||||||
|
|
||||||
|
======================== ======================== ========================
|
||||||
|
|ESP8266 Software PWM|_ |GPIO Output|_ |ESP32 LEDC|_
|
||||||
|
------------------------ ------------------------ ------------------------
|
||||||
|
`ESP8266 Software PWM`_ `GPIO Output`_ `ESP32 LEDC`_
|
||||||
|
------------------------ ------------------------ ------------------------
|
||||||
|
|PCA9685|_
|
||||||
|
------------------------ ------------------------ ------------------------
|
||||||
|
`PCA9685`_
|
||||||
|
======================== ======================== ========================
|
||||||
|
|
||||||
|
.. |ESP8266 Software PWM| image:: /esphomeyaml/pwm.png
|
||||||
|
:class: component-image
|
||||||
|
.. _ESP8266 Software PWM: /esphomeyaml/components/output/esp8266_pwm.html
|
||||||
|
|
||||||
|
.. |GPIO Output| image:: /esphomeyaml/pin.svg
|
||||||
|
:class: component-image
|
||||||
|
.. _GPIO Output: /esphomeyaml/components/output/gpio.html
|
||||||
|
|
||||||
|
.. |ESP32 LEDC| image:: /esphomeyaml/pwm.png
|
||||||
|
:class: component-image
|
||||||
|
.. _ESP32 LEDC: /esphomeyaml/components/output/ledc.html
|
||||||
|
|
||||||
|
.. |PCA9685| image:: /esphomeyaml/pca9685.jpg
|
||||||
|
:class: component-image
|
||||||
|
.. _PCA9685: /esphomeyaml/components/output/pca9685.html
|
||||||
|
|
||||||
|
|
||||||
|
Base Output Configuration
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Each output platform extends this configuration schema.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
output:
|
||||||
|
- platform: ...
|
||||||
|
id: myoutput_id
|
||||||
|
power_supply: power_supply_id
|
||||||
|
inverted: False
|
||||||
|
max_power: 0.75
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
|
||||||
|
- **id** (**Required**, `id </esphomeyaml/configuration-types.html#id>`__): The id to use for this output component.
|
||||||
|
- **power_supply** (*Optional*, `id </esphomeyaml/configuration-types.html#id>`__): The `power
|
||||||
|
supply </esphomeyaml/components/power_supply.html>`__ to connect to
|
||||||
|
this output. When the output is enabled, the power supply will
|
||||||
|
automatically be switched on too.
|
||||||
|
- **inverted** (*Optional*, boolean): If the output should be treated
|
||||||
|
as inverted. Defaults to ``False``.
|
||||||
|
- **max_power** (*Optional*, float): Only for float outputs. Sets the
|
||||||
|
maximum output value of this output platform. Each value will be
|
||||||
|
multiplied by this. Must be in range from 0 to 1. Defaults to 1.
|
34
esphomeyaml/components/output/ledc.rst
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
ESP32 LEDC Output
|
||||||
|
=================
|
||||||
|
|
||||||
|
The LEDC output component exposes a `LEDC PWM
|
||||||
|
channel <https://esp-idf.readthedocs.io/en/latest/api-reference/peripherals/ledc.html>`__
|
||||||
|
of the ESP32 as an output component.
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
output:
|
||||||
|
- platform: ledc
|
||||||
|
pin: 19
|
||||||
|
id: gpio-d1
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **pin** (**Required**,
|
||||||
|
`pin </esphomeyaml/configuration-types.html#pin>`__): The pin to use
|
||||||
|
LEDC on. Can only be GPIO0-GPIO33.
|
||||||
|
- **id** (**Required**,
|
||||||
|
`id </esphomeyaml/configuration-types.html#id>`__): The id to use for
|
||||||
|
this output component.
|
||||||
|
- **frequency** (*Optional*, float): At which frequency to run the LEDC
|
||||||
|
channel’s timer. Two LEDC channels always share the same timer and
|
||||||
|
therefore also the same frequency. Defaults to 1000Hz.
|
||||||
|
- **bit_depth** (*Optional*, int): The bit depth to use for the LEDC
|
||||||
|
channel. Defaults to 12.
|
||||||
|
- **channel** (*Optional*, int): Manually set the `LEDC
|
||||||
|
channel <https://esp-idf.readthedocs.io/en/latest/api-reference/peripherals/ledc.html#configure-channel>`__
|
||||||
|
to use. Two adjacent channels share the same timer.
|
||||||
|
- All other options from
|
||||||
|
`Output </esphomeyaml/components/output/index.html#base-output-configuration>`__.
|
BIN
esphomeyaml/components/output/pca9685-full.jpg
Normal file
After Width: | Height: | Size: 199 KiB |
39
esphomeyaml/components/output/pca9685.rst
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
PCA9685 PWM Output
|
||||||
|
==================
|
||||||
|
|
||||||
|
The PCA9685 output component exposes a PCA9685 PWM channel of a global
|
||||||
|
`PCA9685 hub </esphomeyaml/components/pca9685.html>`__ as a float
|
||||||
|
output.
|
||||||
|
|
||||||
|
.. figure:: /esphomeyaml/components/output/pca9685-full.jpg
|
||||||
|
:align: center
|
||||||
|
:target: `Adafruit`_
|
||||||
|
:width: 50.0%
|
||||||
|
|
||||||
|
PCA9685 16-Channel PWM Driver. Image by `Adafruit`_.
|
||||||
|
|
||||||
|
.. _Adafruit: https://www.adafruit.com/product/815
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
# Example configuration entry
|
||||||
|
pca9685:
|
||||||
|
- id: 'pca9685_hub1'
|
||||||
|
frequency: 500
|
||||||
|
|
||||||
|
# Individual outputs
|
||||||
|
output:
|
||||||
|
- platform: pca9685
|
||||||
|
id: 'pca9685_output1'
|
||||||
|
pca9685_id: 'pca9685_hub1'
|
||||||
|
channel: 0
|
||||||
|
|
||||||
|
Configuration variables:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
- **id** (**Required**, `id </esphomeyaml/configuration-types.html#id>`__): The id to use for this output component.
|
||||||
|
- **channel** (**Required**, int): Chose the channel of the PCA9685 of
|
||||||
|
this output component. Must be in range from 0 to 15.
|
||||||
|
- All other options from
|
||||||
|
`Output </esphomeyaml/components/output/index.html#base-output-configuration>`__.
|
||||||
|
- **pca9685_id** (*Optional* `id </esphomeyaml/configuration-types.html#id>`__): Manually specify the ID of the `PCA9685 hub </esphomeyaml/components/pca9685.html`__. Use this if you have multiple PCA9685s you want to use at the same time.
|