2
Doxygen
@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome"
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = 1.15.3
|
||||
PROJECT_NUMBER = 1.16.0
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer a
|
||||
|
2
Makefile
@ -1,5 +1,5 @@
|
||||
ESPHOME_PATH = ../esphome
|
||||
ESPHOME_REF = v1.15.3
|
||||
ESPHOME_REF = v1.16.0
|
||||
|
||||
.PHONY: html html-strict cleanhtml deploy help webserver Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png
|
||||
|
||||
|
BIN
_static/changelog-1.16.0.png
Normal file
After Width: | Height: | Size: 168 KiB |
@ -1 +1 @@
|
||||
1.15.3
|
||||
1.16.0
|
@ -2,7 +2,7 @@ Changelog
|
||||
=========
|
||||
|
||||
.. redirect::
|
||||
:url: /changelog/v1.15.0.html
|
||||
:url: /changelog/v1.16.0.html
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
|
@ -33,6 +33,7 @@ Changelog - Version 1.15.0 - September 13, 2020
|
||||
TM1637, components/display/tm1637, tm1637.jpg
|
||||
SSD1351, components/display/ssd1351, ssd1351.jpg
|
||||
ST7789V, components/display/st7789v, st7789v.jpg
|
||||
ILI9341, components/display/ili9341, ili9341.jpg
|
||||
PCD8544 (Nokia 5110/ 3310), components/display/pcd8544, pcd8544.jpg
|
||||
BLE Scanner, components/text_sensor/ble_scanner, bluetooth.svg
|
||||
Custom UART Text Sensor, components/text_sensor/uart, language-cpp.svg
|
||||
@ -40,7 +41,7 @@ Changelog - Version 1.15.0 - September 13, 2020
|
||||
PID Controller, components/climate/pid, function.svg
|
||||
IR Remote Climate, components/climate/ir_climate, air-conditioner-ir.svg
|
||||
HTTP Request, components/http_request, connection.svg
|
||||
MCP3008 8-Channel 10-Bit A/D Converter, components/mcp3008, mcp3008.png
|
||||
MCP3008 8-Channel 10-Bit A/D Converter, components/mcp3008, mcp3008.jpg
|
||||
SN74HC595 I/O Expander, components/sn74hc595, sn74hc595.jpg
|
||||
TM1651 Battery Display, components/tm1651, tm1651_battery_display.jpg
|
||||
RF Bridge, components/rf_bridge, rf_bridge.jpg
|
||||
|
365
changelog/v1.16.0.rst
Normal file
@ -0,0 +1,365 @@
|
||||
Changelog - Version 1.16.0 - February 3, 2021
|
||||
===============================================
|
||||
|
||||
.. seo::
|
||||
:description: Changelog for ESPHome version 1.16.0.
|
||||
:image: /_static/changelog-1.16.0.png
|
||||
:author: Otto Winter
|
||||
:author_twitter: @OttoWinter_
|
||||
|
||||
.. imgtable::
|
||||
:columns: 5
|
||||
|
||||
TMP102, components/sensor/tmp102, tmp102.jpg
|
||||
MCP9808, components/sensor/mcp9808, mcp9808.jpg
|
||||
RC522, components/binary_sensor/rc522, rc522.jpg
|
||||
H-bridge Light, components/light/hbridge, brightness-medium.svg
|
||||
ILI9341, components/display/ili9341, ili9341.jpg
|
||||
Teleinfo, components/sensor/teleinfo, teleinfo.jpg
|
||||
EZO sensor circuits, components/sensor/ezo, ezo-ph-circuit.png
|
||||
SSD1322, components/display/ssd1322, ssd1322.jpg
|
||||
SSD1327, components/display/ssd1327, ssd1327.jpg
|
||||
SSD1331, components/display/ssd1331, ssd1331.jpg
|
||||
ST7735, components/display/st7735, st7735.jpg
|
||||
MCP23SXX I/O Expander - SPI Bus, components/mcp23Sxx, mcp230xx.svg
|
||||
CAN Bus, components/canbus, canbus.svg
|
||||
Inkplate 6, components/display/Inkplate, Inkplate.jpg
|
||||
|
||||
Hello, hello. Jesse Hills (:ghuser:`jesserockz`) here. Yet another new name doing the next release.
|
||||
|
||||
Hopefully from this point forward, we are looking at releasing monthly on the first Wednesday of each month,
|
||||
we got the idea from Home Assistant! Thanks guys!
|
||||
|
||||
There are a few new components in this release, but there was a lot of bugfixing and improvements overall and
|
||||
we have a lot of PRs to go through for new features for next months release.
|
||||
|
||||
Thank you to all contributors, bug reporters and patrons! Without you this project would not be possible!
|
||||
|
||||
Until next month.
|
||||
|
||||
New Features
|
||||
------------
|
||||
|
||||
- esphome: Enable reverse display of the Max7219 digit :esphomepr:`1234` by :ghuser:`rspaargaren` (new-feature)
|
||||
- esphome: Pulse_counter measure total pulses :esphomepr:`1173` by :ghuser:`FrankBakkerNl` (new-feature)
|
||||
- esphome: Support I2C transactions with combined reads and writes :esphomepr:`996` by :ghuser:`la7dja` (new-feature)
|
||||
|
||||
New Integrations
|
||||
----------------
|
||||
|
||||
- esphome: Added tmp102 temperature sensor support :esphomepr:`929` by :ghuser:`timsavage` (new-integration)
|
||||
- esphome: Add MCP9808 temperature sensor :esphomepr:`1169` by :ghuser:`k7hpn` (new-integration)
|
||||
- esphome: Add rc522 :esphomepr:`1298` by :ghuser:`glmnet` (new-integration)
|
||||
- esphome: Pn532 upgrades :esphomepr:`1302` by :ghuser:`jesserockz` (breaking-change) (new-integration)
|
||||
- esphome: Add support for ATC_MiThermometer :esphomepr:`1291` by :ghuser:`ahpohl` (new-integration)
|
||||
- esphome: Hbridge christmas light :esphomepr:`1251` by :ghuser:`DotNetDann` (new-integration)
|
||||
- esphome: add Ili9341 display :esphomepr:`1233` by :ghuser:`Valcob` (new-integration)
|
||||
- esphome: components: teleinfo: electrical counter information. :esphomepr:`1108` by :ghuser:`0hax` (new-integration)
|
||||
- esphome: add support for EZO sensor circuits :esphomepr:`1239` by :ghuser:`ssieb` (new-integration)
|
||||
- esphome: Add climate.hitachi_ac344 :esphomepr:`1336` by :ghuser:`honomoa` (new-integration)
|
||||
- esphome: SSD1331 display support :esphomepr:`1244` by :ghuser:`kbx81` (new-integration)
|
||||
- esphome: New display ST7735 :esphomepr:`1066` by :ghuser:`SenexCrenshaw` (new-integration)
|
||||
- esphome: MCP23SXX I/O Expander - SPI :esphomepr:`1068` by :ghuser:`SenexCrenshaw` (new-integration)
|
||||
- esphome: Add GIF Animation Support :esphomepr:`1378` by :ghuser:`Syndlex` (new-integration)
|
||||
- esphome: Canbus + MCP2515 including ExtID support :esphomepr:`1384` by :ghuser:`danielschramm` (new-integration)
|
||||
- esphome: Add full SSD1327 display support :esphomepr:`1406` by :ghuser:`kbx81` (new-integration)
|
||||
- esphome: SSD1322 display support :esphomepr:`1405` by :ghuser:`kbx81` (new-integration)
|
||||
- esphome: DS1307 real time clock component :esphomepr:`1441` by :ghuser:`badbadc0ffee` (cherry-picked) (new-integration)
|
||||
- esphome: Add rc522 i2c :esphomepr:`1432` by :ghuser:`glmnet` (cherry-picked) (new-integration)
|
||||
- esphome: Add NDEF reading and writing to PN532 :esphomepr:`1351` by :ghuser:`jesserockz` (cherry-picked) (new-integration)
|
||||
- esphome: Inkplate 6 support for ESPHome :esphomepr:`1283` by :ghuser:`davidzovko` (cherry-picked) (new-integration)
|
||||
- esphome: Support for MHO-C401 (fix) :esphomepr:`1486` by :ghuser:`nikito7` (cherry-picked) (new-integration)
|
||||
|
||||
Breaking Changes
|
||||
----------------
|
||||
|
||||
- esphome: Replace CENTER_LEFT with TOP_LEFT to match other printf function :esphomepr:`1295` by :ghuser:`TheZoker` (breaking-change)
|
||||
- esphome: Float output: Fix min_power and max_power adjusting when output is inverted :esphomepr:`1250` by :ghuser:`dubit0` (breaking-change)
|
||||
- esphome: Pn532 upgrades :esphomepr:`1302` by :ghuser:`jesserockz` (breaking-change) (new-integration)
|
||||
- esphome: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler :esphomepr:`1387` by :ghuser:`SenexCrenshaw` (breaking-change) (cherry-picked)
|
||||
|
||||
Beta Fixes
|
||||
----------
|
||||
|
||||
- esphome: fix safe_mode :esphomepr:`1421` by :ghuser:`alexyao2015` (cherry-picked)
|
||||
- esphome: DS1307 real time clock component :esphomepr:`1441` by :ghuser:`badbadc0ffee` (cherry-picked) (new-integration)
|
||||
- docs: DS1307 real time clock component :docspr:`910` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- esphome: Add encode_uint32 method, similar to encode_uint16 :esphomepr:`1427` by :ghuser:`e28eta` (cherry-picked)
|
||||
- esphome: Rotary Encoder: Don't call callbacks in the isr :esphomepr:`1456` by :ghuser:`mknjc` (cherry-picked)
|
||||
- esphome: API: copy the data to send into the tcp internal buffer :esphomepr:`1455` by :ghuser:`mknjc` (cherry-picked)
|
||||
- esphome: Revert esptool to 2.8 :esphomepr:`1460` by :ghuser:`glmnet` (cherry-picked)
|
||||
- esphome: Whirlpool ac :esphomepr:`1467` by :ghuser:`mmanza` (cherry-picked)
|
||||
- esphome: Bump pytest-mock from 3.3.1 to 3.5.1 :esphomepr:`1458` by :ghuser:`dependabot[bot]` (cherry-picked)
|
||||
- esphome: Add rc522 i2c :esphomepr:`1432` by :ghuser:`glmnet` (cherry-picked) (new-integration)
|
||||
- docs: add rc522 i2c config variant :docspr:`933` by :ghuser:`glmnet` (cherry-picked)
|
||||
- esphome: make time components polling components :esphomepr:`1443` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- esphome: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler :esphomepr:`1387` by :ghuser:`SenexCrenshaw` (breaking-change) (cherry-picked)
|
||||
- docs: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler :docspr:`874` by :ghuser:`SenexCrenshaw` (cherry-picked)
|
||||
- esphome: Add NDEF reading and writing to PN532 :esphomepr:`1351` by :ghuser:`jesserockz` (cherry-picked) (new-integration)
|
||||
- docs: Add docs for pn532 NDEF functionality :docspr:`936` by :ghuser:`jesserockz` (cherry-picked)
|
||||
- esphome: Inkplate 6 support for ESPHome :esphomepr:`1283` by :ghuser:`davidzovko` (cherry-picked) (new-integration)
|
||||
- docs: Adding Inkplate 6 docs :docspr:`778` by :ghuser:`nitko12` (cherry-picked)
|
||||
- esphome: time sync notification :esphomepr:`1442` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- docs: update time (sync) documentation :docspr:`924` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- esphome: rename read/write to read/time/write_time :esphomepr:`1468` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- esphome: Improve ccs811 precision :esphomepr:`1428` by :ghuser:`TheNetAdmin` (cherry-picked)
|
||||
- esphome: make fade_to*, lighten, and darken const :esphomepr:`1450` by :ghuser:`toelke` (cherry-picked)
|
||||
- esphome: SPI wasnt being disabled after display update :esphomepr:`1493` by :ghuser:`SenexCrenshaw` (cherry-picked)
|
||||
- esphome: Add support for string-type Tuya datapoints :esphomepr:`1488` by :ghuser:`pauln` (cherry-picked)
|
||||
- esphome: Add healthcheck :esphomepr:`1492` by :ghuser:`Klarstein` (cherry-picked)
|
||||
- esphome: Support for MHO-C401 (fix) :esphomepr:`1486` by :ghuser:`nikito7` (cherry-picked) (new-integration)
|
||||
- docs: Add MHO-C401 :docspr:`957` by :ghuser:`nikito7` (cherry-picked)
|
||||
- esphome: Allow SCD30 sensors to be optional :esphomepr:`1502` by :ghuser:`jesserockz` (cherry-picked)
|
||||
- docs: Update scd30 docs to show sensors are optional :docspr:`970` by :ghuser:`jesserockz` (cherry-picked)
|
||||
- esphome: fix esp8266 remote_transmitter using incorrect timings :esphomepr:`1465` by :ghuser:`hcoohb` (cherry-picked)
|
||||
- esphome: rc522 increased retry loop count :esphomepr:`1506` by :ghuser:`glmnet` (cherry-picked)
|
||||
|
||||
All changes
|
||||
-----------
|
||||
|
||||
- docs: Update bang_bang doc, changelog fix :docspr:`667` by :ghuser:`kbx81`
|
||||
- esphome: Update cryptography requirement from <3,>=2.0.0 to >=2.0.0,<4 :esphomepr:`1206` by :ghuser:`dependabot[bot]`
|
||||
- esphome: fix dashboard select drop down :esphomepr:`1205` by :ghuser:`glmnet`
|
||||
- docs: New prometheus configuration :docspr:`713`
|
||||
- esphome: Cleanup web server prometheus integration :esphomepr:`1192`
|
||||
- esphome: Remove overview job from CI :esphomepr:`1216`
|
||||
- esphome: Bump pytest from 5.4.3 to 6.0.0 :esphomepr:`1220` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Fix ci-custom.py const.py ordered check and improve code :esphomepr:`1222`
|
||||
- esphome: Add hyphen to supported name characters :esphomepr:`1223` by :ghuser:`ianleeder`
|
||||
- docs: Add hyphen to supported name characters :docspr:`719` by :ghuser:`ianleeder`
|
||||
- esphome: Bump protobuf from 3.12.2 to 3.12.4 :esphomepr:`1230` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Clean up ALLOWED_CHARS :esphomepr:`1235` by :ghuser:`ianleeder`
|
||||
- esphome: Bump pytest from 6.0.0 to 6.0.1 :esphomepr:`1236` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump pytest-mock from 3.2.0 to 3.3.1 :esphomepr:`1263` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump protobuf from 3.12.4 to 3.13.0 :esphomepr:`1254` by :ghuser:`dependabot[bot]`
|
||||
- docs: Update diy.rst :docspr:`760` by :ghuser:`kquinsland`
|
||||
- esphome: Bump pylint from 2.5.3 to 2.6.0 :esphomepr:`1262` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump pytest from 6.0.1 to 6.0.2 :esphomepr:`1280` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump platformio from 4.3.4 to 5.0.1 :esphomepr:`1275` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Update max31855.cpp :esphomepr:`1273` by :ghuser:`EmbeddedDevver`
|
||||
- esphome: Add Fan and Swing Support to fujitsu-general Component :esphomepr:`1287` by :ghuser:`kpelzel`
|
||||
- esphome: Replace CENTER_LEFT with TOP_LEFT to match other printf function :esphomepr:`1295` by :ghuser:`TheZoker` (breaking-change)
|
||||
- esphome: Enable reverse display of the Max7219 digit :esphomepr:`1234` by :ghuser:`rspaargaren` (new-feature)
|
||||
- docs: update Max7219 digit with reverse option :docspr:`726` by :ghuser:`rspaargaren`
|
||||
- esphome: Bump paho-mqtt from 1.5.0 to 1.5.1 :esphomepr:`1297` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump pytest-cov from 2.10.0 to 2.10.1 :esphomepr:`1253` by :ghuser:`dependabot[bot]`
|
||||
- esphome: CI - Don't fast fail testing so results are not hidden in matrix builds :esphomepr:`1286` by :ghuser:`jesserockz`
|
||||
- esphome: Support Daikin horizontal swing in climate_ir :esphomepr:`1247` by :ghuser:`buxtronix`
|
||||
- esphome: Table row wasn't closed :esphomepr:`1310` by :ghuser:`Ivo-tje`
|
||||
- esphome: Typo in the pm2.5 grid :esphomepr:`1311` by :ghuser:`jamesgao`
|
||||
- esphome: Float output: Fix min_power and max_power adjusting when output is inverted :esphomepr:`1250` by :ghuser:`dubit0` (breaking-change)
|
||||
- esphome: Add new time.has_time condition :esphomepr:`1255` by :ghuser:`ashmckenzie`
|
||||
- docs: Add time.has_time documentation :docspr:`782` by :ghuser:`ashmckenzie`
|
||||
- esphome: handle windows filenames :esphomepr:`1307` by :ghuser:`glmnet`
|
||||
- esphome: Bump flake8 from 3.8.3 to 3.8.4 :esphomepr:`1319` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump pytest from 6.0.2 to 6.1.1 :esphomepr:`1320` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump colorlog from 4.2.1 to 4.4.0 :esphomepr:`1323` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Add LYWSD02 battery sensor :esphomepr:`1334` by :ghuser:`Alex9779`
|
||||
- docs: add battery sensor for lywsd02 :docspr:`821` by :ghuser:`sermayoral`
|
||||
- docs: Small typo fixes for Sonoff T1 UK 3 Gang :docspr:`815` by :ghuser:`r15ch13`
|
||||
- esphome: Added tmp102 temperature sensor support :esphomepr:`929` by :ghuser:`timsavage` (new-integration)
|
||||
- docs: Added tmp102 Temperature sensor docs :docspr:`451` by :ghuser:`timsavage`
|
||||
- esphome: Add MCP9808 temperature sensor :esphomepr:`1169` by :ghuser:`k7hpn` (new-integration)
|
||||
- docs: Add documentation for MCP9808 sensor :docspr:`691` by :ghuser:`k7hpn`
|
||||
- esphome: Add rc522 :esphomepr:`1298` by :ghuser:`glmnet` (new-integration)
|
||||
- docs: add rc522 docs :docspr:`810` by :ghuser:`glmnet`
|
||||
- esphome: Add new codeowners :esphomepr:`1335` by :ghuser:`jesserockz`
|
||||
- esphome: Pn532 upgrades :esphomepr:`1302` by :ghuser:`jesserockz` (breaking-change) (new-integration)
|
||||
- docs: Update PN532 docs to add I2C :docspr:`798` by :ghuser:`jesserockz`
|
||||
- esphome: Fixed CLIMATE_SWING_HORIZONTAL typo :esphomepr:`1340` by :ghuser:`rob-deutsch`
|
||||
- esphome: add illuminance for xiaomi_mjyd02yla :esphomepr:`1299` by :ghuser:`al-one`
|
||||
- docs: add illuminance for xiaomi_mjyd02yla :docspr:`779` by :ghuser:`al-one`
|
||||
- esphome: Add support for WPA2-EAP enterprise WiFi to ESP8266s. :esphomepr:`1332` by :ghuser:`tomtom5152`
|
||||
- docs: Update enterprise authentication docs to indicate support for ESP8266s :docspr:`814` by :ghuser:`tomtom5152`
|
||||
- esphome: Pulse_counter measure total pulses :esphomepr:`1173` by :ghuser:`FrankBakkerNl` (new-feature)
|
||||
- docs: Added docs for pulse_counter total :docspr:`705` by :ghuser:`FrankBakkerNl`
|
||||
- esphome: Add on_clockwise and on_anticlockwise triggers to rotary encoder :esphomepr:`1330` by :ghuser:`jesserockz`
|
||||
- docs: Add docs for rotary encoder on_clockwise and on_anticlockwise triggers :docspr:`807` by :ghuser:`jesserockz`
|
||||
- esphome: FastLED: Add YAML option for data rate :esphomepr:`1338` by :ghuser:`youknow0`
|
||||
- docs: FastLED: Add docs for new YAML option data_rate :docspr:`824` by :ghuser:`youknow0`
|
||||
- esphome: [Image] add dither option for image processing :esphomepr:`1317` by :ghuser:`zhujunsan`
|
||||
- docs: [Image] add dither option for image processing :docspr:`796` by :ghuser:`zhujunsan`
|
||||
- esphome: Update actions to move away from set-env :esphomepr:`1349` by :ghuser:`jesserockz`
|
||||
- esphome: Move CONF_CONTRAST to const.py :esphomepr:`1352` by :ghuser:`jesserockz`
|
||||
- esphome: Bump platformio from 5.0.1 to 5.0.2 :esphomepr:`1355` by :ghuser:`dependabot[bot]`
|
||||
- docs: Fix connection typo in FAQ :docspr:`831` by :ghuser:`KTibow`
|
||||
- docs: Add TuyaMCU sample config for WF-DS01 :docspr:`829` by :ghuser:`davet2001`
|
||||
- docs: Link to Winsen ZE08-CH2O custom component :docspr:`833` by :ghuser:`cretep`
|
||||
- esphome: Adds support for RF Bridge advanced codes :esphomepr:`1246` by :ghuser:`jesserockz`
|
||||
- docs: Update RF Bridge documentation for advanced codes :docspr:`731` by :ghuser:`jesserockz`
|
||||
- esphome: Add contrast option to PCD8544 :esphomepr:`1348` by :ghuser:`dzervas`
|
||||
- docs: Add contrast option docs to PCD8544 :docspr:`834` by :ghuser:`dzervas`
|
||||
- esphome: Add support for ATC_MiThermometer :esphomepr:`1291` by :ghuser:`ahpohl` (new-integration)
|
||||
- docs: Add support for ATC_MiThermometer, update bindkey generation procedure :docspr:`777` by :ghuser:`ahpohl`
|
||||
- esphome: Bump pytest from 6.1.1 to 6.1.2 :esphomepr:`1342` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump voluptuous from 0.11.7 to 0.12.0 :esphomepr:`1296` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump pytz from 2020.1 to 2020.4 :esphomepr:`1354` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Add a datapoint to sync the Tuya MCU minimum brightness :esphomepr:`1347` by :ghuser:`cprussin`
|
||||
- docs: Document tuya dimmer min_value_datapoint :docspr:`832` by :ghuser:`cprussin`
|
||||
- esphome: Support I2C transactions with combined reads and writes :esphomepr:`996` by :ghuser:`la7dja` (new-feature)
|
||||
- esphome: Hbridge christmas light :esphomepr:`1251` by :ghuser:`DotNetDann` (new-integration)
|
||||
- docs: Hbridge christmas light :docspr:`733` by :ghuser:`DotNetDann`
|
||||
- docs: Add a note about INPUT_PULLUP :docspr:`830` by :ghuser:`wodor`
|
||||
- docs: Update waveshare_epaper.rst :docspr:`813` by :ghuser:`thedexboy`
|
||||
- docs: added warning to waveshare 2.7 inch display :docspr:`818` by :ghuser:`damanti-me`
|
||||
- docs: Update to I2C docs to explain I2C daisy chaining :docspr:`812` by :ghuser:`the-impaler`
|
||||
- docs: I2c text update :docspr:`839` by :ghuser:`jesserockz`
|
||||
- esphome: add Ili9341 display :esphomepr:`1233` by :ghuser:`Valcob` (new-integration)
|
||||
- esphome: Correcting Hertz symbol :esphomepr:`1364` by :ghuser:`robdejonge`
|
||||
- docs: remove use_custom_code :docspr:`841` by :ghuser:`glmnet`
|
||||
- esphome: Bump colorlog from 4.4.0 to 4.6.2 :esphomepr:`1367` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Add support for Tuya MCU 0x1C (obtain local time) :esphomepr:`1344` by :ghuser:`Yarikx`
|
||||
- docs: Specify clock to be used in Tuya MCU :docspr:`827` by :ghuser:`Yarikx`
|
||||
- esphome: Separate Tuya climate temperature_multiplier to current/target multiplier :esphomepr:`1345` by :ghuser:`Yarikx`
|
||||
- docs: Add separate current/target Tuya Climate multipliers :docspr:`828` by :ghuser:`Yarikx`
|
||||
- esphome: Add bounds check for X :esphomepr:`1371` by :ghuser:`ssieb`
|
||||
- esphome: scd30: Allow setting ambient pressure compensation :esphomepr:`1365` by :ghuser:`matoxp`
|
||||
- docs: scd30: Add missing configuration variables :docspr:`842` by :ghuser:`matoxp`
|
||||
- esphome: components: teleinfo: electrical counter information. :esphomepr:`1108` by :ghuser:`0hax` (new-integration)
|
||||
- docs: Teleinfo :docspr:`666` by :ghuser:`0hax`
|
||||
- esphome: Adding ADE7953 irq_pin :esphomepr:`1359` by :ghuser:`djwmarcx`
|
||||
- docs: Adding ADE7953 irq_pin :docspr:`848` by :ghuser:`djwmarcx`
|
||||
- docs: Fix MCP23008 example :docspr:`845` by :ghuser:`djtef`
|
||||
- esphome: add support for EZO sensor circuits :esphomepr:`1239` by :ghuser:`ssieb` (new-integration)
|
||||
- docs: add docs for new EZO sensor circuits :docspr:`727` by :ghuser:`ssieb`
|
||||
- esphome: Bump platformio from 5.0.2 to 5.0.3 :esphomepr:`1372` by :ghuser:`dependabot[bot]`
|
||||
- docs: Add Hitachi AC344 IR Climate documentation :docspr:`822` by :ghuser:`honomoa`
|
||||
- esphome: Add climate.hitachi_ac344 :esphomepr:`1336` by :ghuser:`honomoa` (new-integration)
|
||||
- esphome: add CODEOWNER for new ezo component :esphomepr:`1379` by :ghuser:`ssieb`
|
||||
- esphome: SSD1331 display support :esphomepr:`1244` by :ghuser:`kbx81` (new-integration)
|
||||
- docs: Add SSD1331 docs :docspr:`729` by :ghuser:`kbx81`
|
||||
- esphome: Add kbx81 to CODEOWNERS :esphomepr:`1380` by :ghuser:`kbx81`
|
||||
- esphome: Added 332 color conversion and RGB/BGR/GRB formats :esphomepr:`1381` by :ghuser:`SenexCrenshaw`
|
||||
- esphome: Fixed logger broken by colorama :esphomepr:`1385` by :ghuser:`Anonym-tsk`
|
||||
- esphome: Formatted test yaml files :esphomepr:`1382` by :ghuser:`SenexCrenshaw`
|
||||
- docs: Updated link to ble_monitor (previous mitemp_bt) :docspr:`849` by :ghuser:`Ernst79`
|
||||
- docs: Fix ac dimmer example code :docspr:`852` by :ghuser:`rradar`
|
||||
- docs: DIY: Add Blogpost for SP501E as WS2812 LED Controller :docspr:`854` by :ghuser:`margau`
|
||||
- docs: Replace Hass.io :docspr:`853` by :ghuser:`fabaff`
|
||||
- docs: Update deep_sleep.rst :docspr:`850` by :ghuser:`anekinloewe`
|
||||
- docs: Adding IAQ board in cookbook section :docspr:`844` by :ghuser:`nkitanov`
|
||||
- esphome: New display ST7735 :esphomepr:`1066` by :ghuser:`SenexCrenshaw` (new-integration)
|
||||
- docs: Fix broken YAML in MQTT on_json_message example :docspr:`620` by :ghuser:`napieraj`
|
||||
- esphome: Configurable OTA Safe Mode :esphomepr:`1393` by :ghuser:`alexyao2015`
|
||||
- docs: Update docs for Configurable OTA Safe Mode :docspr:`859` by :ghuser:`alexyao2015`
|
||||
- docs: Update ethernet.rst :docspr:`863` by :ghuser:`adezerega`
|
||||
- esphome: Add option to suppress embedded MCU updates on certain datapoints :esphomepr:`1396` by :ghuser:`stubs12`
|
||||
- docs: Documentation for tuya ignore_mcu_update_on_datapoints setting :docspr:`868` by :ghuser:`stubs12`
|
||||
- esphome: scd30: Allow setting temperature offset :esphomepr:`1400` by :ghuser:`matoxp`
|
||||
- docs: scd30: Document temperature_offset setting :docspr:`864` by :ghuser:`matoxp`
|
||||
- esphome: fix HTTP Request reusing connections with different hosts :esphomepr:`1383` by :ghuser:`Anonym-tsk`
|
||||
- docs: Ili9341 doc update :docspr:`870` by :ghuser:`kbx81`
|
||||
- esphome: MCP23SXX I/O Expander - SPI :esphomepr:`1068` by :ghuser:`SenexCrenshaw` (new-integration)
|
||||
- docs: MCP23S08-Docs :docspr:`613` by :ghuser:`SenexCrenshaw`
|
||||
- esphome: Bump pyserial from 3.4 to 3.5 :esphomepr:`1394` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Fix Tuya initialisation regression :esphomepr:`1408` by :ghuser:`rmounce`
|
||||
- docs: Update max31856.rst :docspr:`883` by :ghuser:`emuehlstein`
|
||||
- docs: Fix one of the commens in code block :docspr:`881` by :ghuser:`HepoH3`
|
||||
- docs: Update wifi.rst :docspr:`873` by :ghuser:`Pack3tL0ss`
|
||||
- docs: Update mirabella-genio-bulb.rst :docspr:`857` by :ghuser:`kalebzettl`
|
||||
- docs: Update teckin sb50 entry as they cannot be flashed anymore :docspr:`878` by :ghuser:`justyns`
|
||||
- docs: Change all instances of travis to github actions :docspr:`860` by :ghuser:`alexyao2015`
|
||||
- docs: Improve obtaining bind key :docspr:`843` by :ghuser:`abelmatser`
|
||||
- docs: Add clarification about "update_interval" to SDS011 sensor documentation :docspr:`770` by :ghuser:`maurice-schleussinger`
|
||||
- docs: Cookbook: Light Strip :docspr:`805` by :ghuser:`lein1013`
|
||||
- docs: Optimize images :docspr:`799` by :ghuser:`JeffResc`
|
||||
- docs: Add troubleshooting help with light partition :docspr:`851` by :ghuser:`TheLastGimbus`
|
||||
- docs: Update bang_bang.rst :docspr:`524` by :ghuser:`xheronimo`
|
||||
- docs: Fixed docs to match xiaomi rename :docspr:`606` by :ghuser:`WoLpH`
|
||||
- docs: add another example without MQTT :docspr:`573` by :ghuser:`adonno`
|
||||
- docs: Show example of calling HA script :docspr:`688` by :ghuser:`glmnet`
|
||||
- docs: Update pulse_counter.rst :docspr:`689` by :ghuser:`neographikal`
|
||||
- docs: More descriptive information for noobs :docspr:`658` by :ghuser:`haryadoon`
|
||||
- esphome: Run task for VS Code :esphomepr:`1361` by :ghuser:`gitolicious`
|
||||
- docs: esp32_dac.rst - Add light component to example :docspr:`885` by :ghuser:`ferbar`
|
||||
- docs: Update ethernet.rst :docspr:`887` by :ghuser:`dziobson`
|
||||
- docs: Adding gif animation docs :docspr:`856` by :ghuser:`Syndlex`
|
||||
- esphome: Add GIF Animation Support :esphomepr:`1378` by :ghuser:`Syndlex` (new-integration)
|
||||
- docs: Update diy.rst :docspr:`888` by :ghuser:`pieterbrink123`
|
||||
- esphome: Bump tornado from 6.0.4 to 6.1 :esphomepr:`1353` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Fix mDNS webserver port and expose prometheus service :esphomepr:`1389` by :ghuser:`richardweinberger`
|
||||
- esphome: Bump esptool from 2.8 to 3.0 :esphomepr:`1357` by :ghuser:`dependabot[bot]`
|
||||
- docs: Update diy.rst :docspr:`891` by :ghuser:`lairsdragon`
|
||||
- docs: Update sim800l.rst :docspr:`893` by :ghuser:`tyomikh`
|
||||
- docs: docs: necessary registration of node in HA :docspr:`741` by :ghuser:`torwag`
|
||||
- docs: display: st7789v: Set GPIO0 as INPUT_PULLUP :docspr:`759` by :ghuser:`kylemanna`
|
||||
- docs: clarify VCC, wrt #1452 :docspr:`753` by :ghuser:`pille`
|
||||
- docs: Update docs about MQTT lambdas :docspr:`809` by :ghuser:`matikij`
|
||||
- docs: Add manual for Sonoff T3 EU 3 Gang :docspr:`816` by :ghuser:`r15ch13`
|
||||
- docs: Add get_setup_priority() to Custom sensor docs :docspr:`819` by :ghuser:`mjkl-gh`
|
||||
- docs: Change on_message topics into a yaml list for deep_sleep docs :docspr:`867` by :ghuser:`mrrsm`
|
||||
- docs: Update pzem Example configuration entry (bad stop bit) :docspr:`872` by :ghuser:`Francis-labo`
|
||||
- docs: Update next from current 20201221 :docspr:`894` by :ghuser:`jesserockz`
|
||||
- docs: Update sonof_basic.rst - incorrect example :docspr:`892` by :ghuser:`bvansambeek`
|
||||
- docs: Update apds9960.rst :docspr:`895` by :ghuser:`DrRob`
|
||||
- esphome: Canbus + MCP2515 including ExtID support :esphomepr:`1384` by :ghuser:`danielschramm` (new-integration)
|
||||
- docs: Canbus + MCP2515 :docspr:`823` by :ghuser:`danielschramm`
|
||||
- esphome: Add "ESPHOME_NOGITIGNORE" env var to prevent .gitignore creation :esphomepr:`1425` by :ghuser:`acshef`
|
||||
- esphome: Add full SSD1327 display support :esphomepr:`1406` by :ghuser:`kbx81` (new-integration)
|
||||
- docs: Add SSD1327 display docs :docspr:`875` by :ghuser:`kbx81`
|
||||
- esphome: SSD1322 display support :esphomepr:`1405` by :ghuser:`kbx81` (new-integration)
|
||||
- docs: Add SSD1322 doc :docspr:`869` by :ghuser:`kbx81`
|
||||
- esphome: Expose port 6052 to make reverse proxy work :esphomepr:`1437` by :ghuser:`Klarstein`
|
||||
- esphome: rc_switch: Fix Sync signal sent after the code :esphomepr:`1426` by :ghuser:`M95D`
|
||||
- docs: added slow mode and detach time to servo :docspr:`896` by :ghuser:`andreashergert1984`
|
||||
- esphome: added slow mode and detach time to servo :esphomepr:`1413` by :ghuser:`andreashergert1984`
|
||||
- esphome: Bump pytz from 2020.4 to 2020.5 :esphomepr:`1430` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Bump pytest from 6.1.2 to 6.2.1 :esphomepr:`1422` by :ghuser:`dependabot[bot]`
|
||||
- docs: Update diy.rst :docspr:`913` by :ghuser:`mikosoft83`
|
||||
- docs: Add note about default settings in remote transmitter :docspr:`901` by :ghuser:`darthsebulba04`
|
||||
- docs: st7735 Docs :docspr:`608` by :ghuser:`SenexCrenshaw`
|
||||
- esphome: Bump platformio from 5.0.3 to 5.0.4 :esphomepr:`1444` by :ghuser:`dependabot[bot]`
|
||||
- esphome: Fix SN74HC595 with optional OE pin :esphomepr:`1454` by :ghuser:`rradar`
|
||||
- esphome: Fix stepper half half step mode :esphomepr:`1397` by :ghuser:`Fractal147`
|
||||
- esphome: fix safe_mode :esphomepr:`1421` by :ghuser:`alexyao2015` (cherry-picked)
|
||||
- esphome: DS1307 real time clock component :esphomepr:`1441` by :ghuser:`badbadc0ffee` (cherry-picked) (new-integration)
|
||||
- docs: DS1307 real time clock component :docspr:`910` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- esphome: Add encode_uint32 method, similar to encode_uint16 :esphomepr:`1427` by :ghuser:`e28eta` (cherry-picked)
|
||||
- esphome: Rotary Encoder: Don't call callbacks in the isr :esphomepr:`1456` by :ghuser:`mknjc` (cherry-picked)
|
||||
- esphome: API: copy the data to send into the tcp internal buffer :esphomepr:`1455` by :ghuser:`mknjc` (cherry-picked)
|
||||
- esphome: Revert esptool to 2.8 :esphomepr:`1460` by :ghuser:`glmnet` (cherry-picked)
|
||||
- docs: fixed duplicate id in example for dac output :docspr:`909` by :ghuser:`dmannock`
|
||||
- docs: Add example for human readable uptime sensor :docspr:`923` by :ghuser:`fredrike`
|
||||
- docs: Update diy.rst :docspr:`922` by :ghuser:`omarghader`
|
||||
- docs: Spelling and grammar fixes :docspr:`928` by :ghuser:`scop`
|
||||
- docs: Fix duplicated "on_ble" in on_ble_service_data_advertise heading :docspr:`927` by :ghuser:`scop`
|
||||
- docs: Add hint for swapped data and clock pin :docspr:`914` by :ghuser:`DirkHeinke`
|
||||
- docs: Update nextion.rst :docspr:`912` by :ghuser:`wernight`
|
||||
- docs: Update mirabella-genio-bulb.rst to show potential use of GPIO14 instead of GPIO13 for specific monochromatic dimmable globes :docspr:`911` by :ghuser:`imeekle`
|
||||
- esphome: Whirlpool ac :esphomepr:`1467` by :ghuser:`mmanza` (cherry-picked)
|
||||
- esphome: Bump pytest-mock from 3.3.1 to 3.5.1 :esphomepr:`1458` by :ghuser:`dependabot[bot]` (cherry-picked)
|
||||
- esphome: Add rc522 i2c :esphomepr:`1432` by :ghuser:`glmnet` (cherry-picked) (new-integration)
|
||||
- docs: add rc522 i2c config variant :docspr:`933` by :ghuser:`glmnet` (cherry-picked)
|
||||
- esphome: make time components polling components :esphomepr:`1443` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- docs: add cli link :docspr:`937` by :ghuser:`glmnet`
|
||||
- esphome: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler :esphomepr:`1387` by :ghuser:`SenexCrenshaw` (breaking-change) (cherry-picked)
|
||||
- docs: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler :docspr:`874` by :ghuser:`SenexCrenshaw` (cherry-picked)
|
||||
- docs: cli.rst add --help :docspr:`939` by :ghuser:`foxsam21`
|
||||
- esphome: Add NDEF reading and writing to PN532 :esphomepr:`1351` by :ghuser:`jesserockz` (cherry-picked) (new-integration)
|
||||
- docs: Add docs for pn532 NDEF functionality :docspr:`936` by :ghuser:`jesserockz` (cherry-picked)
|
||||
- esphome: Inkplate 6 support for ESPHome :esphomepr:`1283` by :ghuser:`davidzovko` (cherry-picked) (new-integration)
|
||||
- docs: Adding Inkplate 6 docs :docspr:`778` by :ghuser:`nitko12` (cherry-picked)
|
||||
- esphome: time sync notification :esphomepr:`1442` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- docs: update time (sync) documentation :docspr:`924` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- esphome: rename read/write to read/time/write_time :esphomepr:`1468` by :ghuser:`badbadc0ffee` (cherry-picked)
|
||||
- docs: Add directions for handling text strings :docspr:`955` by :ghuser:`poldim`
|
||||
- esphome: Improve ccs811 precision :esphomepr:`1428` by :ghuser:`TheNetAdmin` (cherry-picked)
|
||||
- esphome: make fade_to*, lighten, and darken const :esphomepr:`1450` by :ghuser:`toelke` (cherry-picked)
|
||||
- docs: fix typo 5062 => 6052 :docspr:`956` by :ghuser:`Scarbous`
|
||||
- docs: Fix of typo in documentation of SPS30 :docspr:`954` by :ghuser:`teffcz`
|
||||
- docs: Remove reference to measuring humidity :docspr:`953` by :ghuser:`tomlut`
|
||||
- docs: Fix human-readable uptime example so it compiles :docspr:`949` by :ghuser:`oddsockmachine`
|
||||
- esphome: SPI wasnt being disabled after display update :esphomepr:`1493` by :ghuser:`SenexCrenshaw` (cherry-picked)
|
||||
- esphome: Add support for string-type Tuya datapoints :esphomepr:`1488` by :ghuser:`pauln` (cherry-picked)
|
||||
- esphome: Add healthcheck :esphomepr:`1492` by :ghuser:`Klarstein` (cherry-picked)
|
||||
- docs: Add link to baseboard thermostat by rjmurph2241 :docspr:`958` by :ghuser:`rjmurph2241`
|
||||
- docs: Document color_temp :docspr:`951` by :ghuser:`alexyao2015`
|
||||
- docs: Update tuya.rst :docspr:`950` by :ghuser:`ricovangenugten`
|
||||
- docs: Minor uptime docs fixes :docspr:`948` by :ghuser:`foxsam21`
|
||||
- esphome: Support for MHO-C401 (fix) :esphomepr:`1486` by :ghuser:`nikito7` (cherry-picked) (new-integration)
|
||||
- docs: Update image type for st7789 display :docspr:`945` by :ghuser:`gerard33`
|
||||
- docs: Add MHO-C401 :docspr:`957` by :ghuser:`nikito7` (cherry-picked)
|
||||
- esphome: Allow SCD30 sensors to be optional :esphomepr:`1502` by :ghuser:`jesserockz` (cherry-picked)
|
||||
- docs: Update scd30 docs to show sensors are optional :docspr:`970` by :ghuser:`jesserockz` (cherry-picked)
|
||||
- esphome: fix esp8266 remote_transmitter using incorrect timings :esphomepr:`1465` by :ghuser:`hcoohb` (cherry-picked)
|
||||
- esphome: rc522 increased retry loop count :esphomepr:`1506` by :ghuser:`glmnet` (cherry-picked)
|
BIN
components/binary_sensor/images/rc522-full.jpg
Normal file
After Width: | Height: | Size: 83 KiB |
@ -45,7 +45,7 @@ The configuration is made up of two parts: The central component, and individual
|
||||
|
||||
Base Configuration:
|
||||
|
||||
- **address** (*Optional*, integer): The I^2C address of the sensor. Defaults to ``0x5A``.
|
||||
- **address** (*Optional*, integer): The I²C address of the sensor. Defaults to ``0x5A``.
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor.
|
||||
- **touch_debounce** (*Optional*, integer): The minimum length before a touch is recognized. Range is from 0 to 7.
|
||||
Defaults to 0.
|
||||
|
@ -13,7 +13,7 @@ Component/Hub
|
||||
|
||||
The ``pn532`` component allows you to use PN532 NFC/RFID controllers
|
||||
(`datasheet <https://cdn-shop.adafruit.com/datasheets/pn532ds.pdf>`__, `Adafruit <https://www.adafruit.com/product/364>`__)
|
||||
with ESPHome. This component is a global hub that establishes the connection to the PN532 via :ref:`SPI <spi>` and
|
||||
with ESPHome. This component is a global hub that establishes the connection to the PN532 via :ref:`SPI <spi>` or :ref:`I²C <i2c>` and
|
||||
outputs its data. Using the :ref:`PN532 binary sensors <pn532-tag>` you can then
|
||||
create individual binary sensors that track if an NFC/RFID tag is currently detected by the PN532.
|
||||
|
||||
@ -23,22 +23,22 @@ create individual binary sensors that track if an NFC/RFID tag is currently dete
|
||||
|
||||
See :ref:`pn532-setting_up_tags` for information on how to setup individual binary sensors for this component.
|
||||
|
||||
As the communication with the PN532 is done using SPI for this integration, you need to set the two switches on
|
||||
the board to the SPI mode (usually by setting the first one to OFF and the second one to ON). Additionally, you need
|
||||
to have an :ref:`SPI bus <spi>` in your configuration with both the **miso_pin** and **mosi_pin** set.
|
||||
The PN532 can be configured to use either the SPI **or** I²C protocol for data communication.
|
||||
You will need to switch the dip switches located on the module according to the table printed on the board.
|
||||
SPI is usually switch 1 OFF and switch 2 ON and I²C is usually switch 1 ON and switch 2 OFF.
|
||||
You will need to have the :ref:`SPI Bus <spi>` or the :ref:`I²C Bus <i2c>` configured depending on your choice.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
spi:
|
||||
clk_pin: D0
|
||||
miso_pin: D1
|
||||
mosi_pin: D2
|
||||
|
||||
pn532:
|
||||
# Example configuration for SPI (choose which one!)
|
||||
pn532_spi:
|
||||
cs_pin: D3
|
||||
update_interval: 1s
|
||||
|
||||
# Example configuration for I²C (choose which one!)
|
||||
pn532_i2c:
|
||||
update_interval: 1s
|
||||
|
||||
binary_sensor:
|
||||
- platform: pn532
|
||||
uid: 74-10-37-94
|
||||
@ -47,7 +47,7 @@ to have an :ref:`SPI bus <spi>` in your configuration with both the **miso_pin**
|
||||
Configuration variables:
|
||||
************************
|
||||
|
||||
- **cs_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The pin on the ESP that the chip select line
|
||||
- **cs_pin** (**Required for SPI**, :ref:`Pin Schema <config-pin_schema>`): The pin on the ESP that the chip select line
|
||||
is connected to.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The duration of each scan on the PN532. This affects the
|
||||
duration that the individual binary sensors stay active when they're found.
|
||||
@ -56,6 +56,8 @@ Configuration variables:
|
||||
when a tag is read. See :ref:`pn532-on_tag`.
|
||||
- **spi_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`SPI Component <spi>` if you want
|
||||
to use multiple SPI buses.
|
||||
- **i2c_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`I²C Component <spi>` if you want
|
||||
to use multiple I²C buses.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this component.
|
||||
|
||||
.. figure:: images/pn532-spi.jpg
|
||||
@ -69,16 +71,17 @@ Configuration variables:
|
||||
``on_tag``
|
||||
----------
|
||||
|
||||
This automation will be triggered when the PN532 module responds with a tag. Please note that this
|
||||
can be called quite often (with an interval of ``update_interval``) as it's triggered repeatedly
|
||||
if the tag is re-read many times.
|
||||
This automation will be triggered when the PN532 module responds with a tag. This will only be triggered
|
||||
if the tag is changed or goes away for one cycle of ``update_interval``.
|
||||
|
||||
The parameter ``x`` this trigger provides is of type ``std::string`` and is the tag UID in the format
|
||||
``74-10-37-94``. The configuration below will for example publish the tag ID on the MQTT topic ``pn532/tag``.
|
||||
|
||||
See :ref:`pn532-ndef_reading` below for how to use the second ``tag`` parameter that is provided to this trigger.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
pn532:
|
||||
pn532_...:
|
||||
# ...
|
||||
on_tag:
|
||||
then:
|
||||
@ -91,7 +94,7 @@ using :ref:`api-homeassistant_tag_scanned_action`.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
pn532:
|
||||
pn532_...:
|
||||
# ...
|
||||
on_tag:
|
||||
then:
|
||||
@ -102,7 +105,7 @@ Alternatively you could also send the value directly to Home Assistant via a
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
pn532:
|
||||
pn532_...:
|
||||
# ...
|
||||
on_tag:
|
||||
then:
|
||||
@ -131,7 +134,7 @@ unique id (``uid``) is currently being detected by the PN532 or not.
|
||||
miso_pin: D1
|
||||
mosi_pin: D2
|
||||
|
||||
pn532:
|
||||
pn532_spi:
|
||||
cs_pin: D3
|
||||
update_interval: 1s
|
||||
|
||||
@ -166,10 +169,82 @@ When your code is running and you approach the PN532 with an NFC Tag, you should
|
||||
Then copy this id and create a ``binary_sensor`` entry as in the configuration example. Repeat this process for
|
||||
each tag.
|
||||
|
||||
.. _pn532-ndef:
|
||||
|
||||
NDEF
|
||||
====
|
||||
|
||||
The PN532 supports reading and writing NDEF formatted data into the cards.
|
||||
|
||||
.. _pn532-ndef_reading:
|
||||
|
||||
NDEF reading
|
||||
------------
|
||||
|
||||
The following example will read an NFC tag that has been formatted and written using the Home Assistant Companion
|
||||
App and send it to Home Assistant using the :ref:`api-homeassistant_tag_scanned_action`. The ``tag`` variable is
|
||||
supplied to the ``on_tag`` trigger and any actions that run and can be used as below.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
pn532_...:
|
||||
# ...
|
||||
on_tag:
|
||||
then:
|
||||
- homeassistant.tag_scanned: !lambda |
|
||||
if (!tag.has_ndef_message()) {
|
||||
return x;
|
||||
}
|
||||
auto message = tag.get_ndef_message();
|
||||
auto records = message->get_records();
|
||||
for (auto &record : records) {
|
||||
std::string payload = record->get_payload();
|
||||
size_t pos = payload.find("https://www.home-assistant.io/tag/");
|
||||
if (pos != std::string::npos) {
|
||||
return payload.substr(pos + 34);
|
||||
}
|
||||
}
|
||||
return x;
|
||||
|
||||
.. _pn532-ndef_writing:
|
||||
|
||||
NDEF Writing
|
||||
------------
|
||||
|
||||
The following example can be used to write a (pseudo) random UUID to the tag in the same format as the
|
||||
Home Assistant Companion App does.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_...
|
||||
then:
|
||||
- lambda: |-
|
||||
static const char alphanum[] = "0123456789abcdef";
|
||||
std::string uri = "https://www.home-assistant.io/tag/";
|
||||
for (int i = 0; i < 8; i++)
|
||||
uri += alphanum[random_uint32() % (sizeof(alphanum) - 1)];
|
||||
uri += "-";
|
||||
for (int j = 0; j < 3; j++) {
|
||||
for (int i = 0; i < 4; i++)
|
||||
uri += alphanum[random_uint32() % (sizeof(alphanum) - 1)];
|
||||
uri += "-";
|
||||
}
|
||||
for (int i = 0; i < 12; i++)
|
||||
uri += alphanum[random_uint32() % (sizeof(alphanum) - 1)];
|
||||
auto message = new nfc::NdefMessage();
|
||||
message->add_uri_record(uri);
|
||||
ESP_LOGD("ndef", "Writing payload: %s", uri.c_str());
|
||||
id(pn532_board).write_mode(message);
|
||||
- wait_until:
|
||||
not:
|
||||
pn532.is_writing:
|
||||
- logger.log: "Finished writing tag"
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`index`
|
||||
- :doc:`rdm6300`
|
||||
- :doc:`rc522`
|
||||
- :apiref:`pn532/pn532.h`
|
||||
- :ghedit:`Edit`
|
||||
|
183
components/binary_sensor/rc522.rst
Normal file
@ -0,0 +1,183 @@
|
||||
RC522 RFID
|
||||
==========
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up RC522 RFID tag readers and tags in ESPHome
|
||||
:image: rc522.jpg
|
||||
:keywords: RC522, RFID
|
||||
|
||||
.. _rc522-component:
|
||||
|
||||
Component/Hub
|
||||
-------------
|
||||
|
||||
The ``rc522`` component allows you to use RC522 RFID controllers
|
||||
(`datasheet <hthttps://www.nxp.com/docs/en/data-sheet/MFRC522.pdff>`__, `Ali Express <https://es.aliexpress.com/item/1260729519.html>`__)
|
||||
with ESPHome. This component is a global hub that establishes the connection to the RC522 via either :ref:`SPI <spi>` or
|
||||
:ref:`I²C <i2c>` and outputs its data. Using the :ref:`RC522 binary sensors <rc522-tag>` you can then
|
||||
create individual binary sensors that track if an RFID tag is currently detected by the RC522.
|
||||
|
||||
.. figure:: images/rc522-full.jpg
|
||||
:align: center
|
||||
:width: 60.0%
|
||||
|
||||
See :ref:`rc522-setting_up_tags` for information on how to setup individual binary sensors for this component.
|
||||
|
||||
The RC522 supports SPI, I²C and UART communication protocols, ESPHome can use either SPI or I²C.
|
||||
|
||||
* If you have a module like the image above, it can only be used in SPI mode (`unless hacked <https://forum.arduino.cc/index.php?topic=442750.0>`__)
|
||||
and you need to have an :ref:`SPI bus <spi>` in your configuration with both the **miso_pin** and **mosi_pin** set.
|
||||
|
||||
* If you have a RC522 which communicates via I²C like in the M5 Stack then you need to have an :ref:`I²C <i2c>` bus configured.
|
||||
|
||||
SPI Option
|
||||
**********
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
spi:
|
||||
|
||||
rc522_spi:
|
||||
cs_pin: GPIO15
|
||||
|
||||
binary_sensor:
|
||||
- platform: rc522
|
||||
uid: 74-10-37-94
|
||||
name: "RC522 RFID Tag"
|
||||
|
||||
I²C Option
|
||||
**********
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
i2c:
|
||||
|
||||
rc522_i2c:
|
||||
cs_pin: GPIO2
|
||||
|
||||
binary_sensor:
|
||||
- platform: rc522
|
||||
uid: 74-10-37-94
|
||||
name: "RC522 RFID Tag"
|
||||
|
||||
Configuration variables:
|
||||
************************
|
||||
|
||||
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the RST line. Some tests
|
||||
shows the RC522 working okay without this.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The duration of each scan on the RC522. This affects the
|
||||
duration that the individual binary sensors stay active when they're found.
|
||||
If a device is not found within this time window, it will be marked as not present. Defaults to ``1s``.
|
||||
- **on_tag** (*Optional*, :ref:`Automation <automation>`): An automation to perform when a tag is read. See
|
||||
:ref:`rc522-on_tag`.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this component.
|
||||
|
||||
SPI Only:
|
||||
^^^^^^^^^
|
||||
|
||||
- **cs_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The pin on the ESP that the chip select line
|
||||
is connected to.
|
||||
- **spi_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`SPI Component <spi>` if you want
|
||||
to use multiple SPI buses.
|
||||
|
||||
|
||||
I²C Only:
|
||||
^^^^^^^^^
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x28``.
|
||||
- **i2c_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`I²C Component <i2c>` if you want
|
||||
to use multiple I²C buses.
|
||||
|
||||
|
||||
.. _rc522-on_tag:
|
||||
|
||||
``on_tag``
|
||||
----------
|
||||
|
||||
This automation will be triggered when the RC522 module responds with a tag. Please note that this
|
||||
can be called quite often (with an interval of ``update_interval``) as it's triggered repeatedly
|
||||
if the tag is re-read many times.
|
||||
|
||||
The parameter ``x`` this trigger provides is of type ``std::string`` and is the tag UID in the format
|
||||
``74-10-37-94``. The configuration below will for example publish the tag ID on the MQTT topic ``rc522/tag``.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
rc522_spi: # or rc522_i2c
|
||||
# ...
|
||||
on_tag:
|
||||
then:
|
||||
- mqtt.publish:
|
||||
topic: rc522/tag
|
||||
payload: !lambda 'return x;'
|
||||
|
||||
A tag scanned event can also be sent to the Home Assistant tag component
|
||||
using :ref:`api-homeassistant_tag_scanned_action`.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
rc522_spi: # or rc522_i2c
|
||||
# ...
|
||||
on_tag:
|
||||
then:
|
||||
- homeassistant.tag_scanned: !lambda 'return x;'
|
||||
|
||||
.. _rc522-tag:
|
||||
|
||||
RFID Tag
|
||||
--------
|
||||
|
||||
The ``rc522`` binary sensor platform lets you track if an RFID tag with a given
|
||||
unique id (``uid``) is currently being detected by the RC522 or not.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
spi:
|
||||
clk_pin: D0
|
||||
miso_pin: D1
|
||||
mosi_pin: D2
|
||||
|
||||
rc522_spi: # or rc522_i2c
|
||||
cs_pin: D3
|
||||
update_interval: 1s
|
||||
|
||||
binary_sensor:
|
||||
- platform: rc522
|
||||
uid: 74-10-37-94
|
||||
name: "RC522 RFID Tag"
|
||||
|
||||
Configuration variables:
|
||||
************************
|
||||
|
||||
- **uid** (**Required**, string): The unique ID of the RFID tag. This is a hyphen-separated list
|
||||
of hexadecimal values. For example ``74-10-37-94``.
|
||||
- **name** (**Required**, string): The name of the binary sensor.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- All other options from :ref:`Binary Sensor <config-binary_sensor>`.
|
||||
|
||||
.. _rc522-setting_up_tags:
|
||||
|
||||
Setting Up Tags
|
||||
---------------
|
||||
|
||||
To set up binary sensors for specific RFID tags you first have to know their unique IDs. To obtain this
|
||||
id, first set up a simple RC522 configuration without any binary sensors like above.
|
||||
|
||||
When your code is running and you approach the RC522 with an RFID Tag, you should see a message like this:
|
||||
|
||||
.. code::
|
||||
|
||||
Found new tag '74-10-37-94'
|
||||
|
||||
Then copy this id and create a ``binary_sensor`` entry as in the configuration example. Repeat this process for
|
||||
each tag.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`index`
|
||||
- :doc:`rdm6300`
|
||||
- :doc:`pn532`
|
||||
- :apiref:`rc522/rc522.h`
|
||||
- :ghedit:`Edit`
|
369
components/canbus.rst
Normal file
@ -0,0 +1,369 @@
|
||||
.. _canbus:
|
||||
|
||||
CAN bus
|
||||
=======
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up an CAN bus in ESPHome
|
||||
:image: canbus.png
|
||||
:keywords: CAN
|
||||
|
||||
Controller Area Network (CAN bus) is a serial bus protocol to connect individual systems and sensors
|
||||
as an alternative to conventional multi-wire looms.
|
||||
It allows automotive components to communicate on a single or dual-wire networked data bus up to 1Mbps.
|
||||
CAN is an International Standardization Organization (ISO) defined serial communications bus originally
|
||||
developed for the automotive industry to replace the complex wiring harness with a two-wire bus. The
|
||||
specification calls for high immunity to electrical interference and the ability to self-diagnose and repair
|
||||
data errors. These features have led to CAN’s popularity in a variety of industries including building
|
||||
automation, medical, and manufacturing.
|
||||
|
||||
The current ESPHome implementation supports single frame data transfer. In this way you may send and
|
||||
receive data frames up to 8 bytes.
|
||||
With this you can transmit the press of a button or the feedback from a sensor on the bus.
|
||||
All other devices on the bus will be able to get this data to switch on/off a light or display the
|
||||
transmitted data.
|
||||
|
||||
The CAN bus itself has only two wires named Can High and Can Low or CanH and CanL. For the ESPHome
|
||||
CAN bus to work you need to select the device that has the physical CAN bus implemented.
|
||||
At this moment only the MCP2515 driver is supported. You can configure multiple busses.
|
||||
|
||||
Any can bus node can transmit data at any time, and any node can send any ``can_id`` value and any
|
||||
node can receive any can_id too. Is up to you how to organize the can_id values. You can setup a can
|
||||
bus network where each node has a can id which will use to broadcast data about itself, if a node
|
||||
should, e.g. turn on a light, it can listen for can messages with the can id assigned to it.
|
||||
So you can have several nodes being able to control a light in e.g. node 20.
|
||||
|
||||
Base CAN Bus Configuration
|
||||
--------------------------
|
||||
|
||||
Each canbus platform extends this configuration schema.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
canbus:
|
||||
- platform: ...
|
||||
can_id: 4
|
||||
on_frame:
|
||||
- can_id: 500
|
||||
use_extended_id: False
|
||||
then:
|
||||
- lambda: |-
|
||||
std::string b(x.begin(), x.end());
|
||||
ESP_LOGD("can id 500", "%s", &b[0] );
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **can_id** (**Required**, integer): default *can id* used for transmitting frames.
|
||||
- **use_extended_id** (*Optional*, boolean): default *False* identifies the type of *can_id*:
|
||||
*False*: Standard 11 bits IDs, *True*: Extended 29 bits ID
|
||||
- **bit_rate** (*Optional*, one of the supported bitrates= defaults to ``125KBPS``.
|
||||
|
||||
- 5KBPS
|
||||
- 10KBPS
|
||||
- 20KBPS
|
||||
- 31K25BPS
|
||||
- 33KBPS
|
||||
- 40KBPS
|
||||
- 50KBPS
|
||||
- 80KBPS
|
||||
- 83K3BPS
|
||||
- 95KBPS
|
||||
- 100KBPS
|
||||
- 125KBPS
|
||||
- 200KBPS
|
||||
- 250KBPS
|
||||
- 500KBPS
|
||||
- 1000KBPS
|
||||
|
||||
Automations:
|
||||
|
||||
- **on_frame** (*Optional*, :ref:`Automation <automation>`): An automation to perform when ability
|
||||
CAN Frame is received. See below.
|
||||
|
||||
.. _canbus-on-frame:
|
||||
|
||||
``on_frame``
|
||||
************
|
||||
|
||||
This automation will be triggered when a can frame is received. A variable ``x`` of type
|
||||
``std::vector<uint8_t>`` is passed to the automation for use in lambdas.
|
||||
|
||||
.. note::
|
||||
|
||||
Messeges this node sends to te same ID will not show up as reveived messages.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
canbus:
|
||||
- platform: ...
|
||||
on_frame:
|
||||
- can_id: 43 # the received can_id
|
||||
then:
|
||||
- if:
|
||||
condition:
|
||||
lambda: 'return (x.size() > 0) ? x[0] == 0x11 : false;'
|
||||
then:
|
||||
light.toggle: light1
|
||||
|
||||
Transmit Frame Action
|
||||
*********************
|
||||
|
||||
The can bus can transmit frames by means of the ``canbus.send`` action.
|
||||
There are several forms to use it:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_...:
|
||||
- canbus.send:
|
||||
data: [ 0x10, 0x20, 0x30 ]
|
||||
canbus_id: my_mcp2515 # optional if you only have 1 canbus device
|
||||
can_id: 23 # override the can_id configured in the can bus
|
||||
|
||||
on_...:
|
||||
- canbus.send: [ 0x11, 0x22, 0x33 ]
|
||||
|
||||
- canbus.send: 'hello'
|
||||
|
||||
# Templated, return type is std::vector<uint8_t>
|
||||
- canbus.send: !lambda
|
||||
return {0x00, 0x20, 0x42};
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **data** (*Required*, binary data): Data to transmit, up to 8 bytes or
|
||||
characters are supported by can bus per frame.
|
||||
- **canbus_id** (*Optional*): Optionally set the can bus id to use for transmitting
|
||||
the frame. Not needed if you are using only 1 can bus.
|
||||
- **can_id** (*Optional*, int): Allows to override the can id configured in
|
||||
the can bus device.
|
||||
- **use_extended_id** (*Optional*, boolean): default *False* identifies the type of *can_id*:
|
||||
*False*: Standard 11 Bit IDs, *True*: Extended 29Bit ID
|
||||
|
||||
MCP2515
|
||||
-------
|
||||
|
||||
The MCP2515 is a spi device and therfore you must first add the configuration for the spi bus to your file.
|
||||
You need to have an :ref:`SPI bus <spi>` in your configuration with both the **mosi_pin** and **miso_pin** set.
|
||||
|
||||
For wireing up the MSP2515 please refer to the section below.
|
||||
|
||||
- **cs_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): Is used to tell the receiving SPI device
|
||||
when it should listen for data on the SPI bus. Each device has an individual ``CS`` line.
|
||||
Sometimes also called ``SS``.
|
||||
- **clock** (*Optional*): One of ``8MHZ``, ``16MHZ`` or ``20MHZ``. Clock crystal used on the MCP2515 device.
|
||||
Defaults to ``8MHZ``.
|
||||
- **mode** (*Optional*): Operation mode. Default ot ``NORMAL``
|
||||
|
||||
- NORMAL: Normal operation
|
||||
- LOOPBACK: Loopback mode can be used to just test you spi connections to the device
|
||||
- LISTENONLY: only receive data
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
canbus:
|
||||
- platform: mcp2515
|
||||
cs_pin: D5
|
||||
can_id: 4
|
||||
bit_rate: 50kbps
|
||||
on_frame:
|
||||
- can_id: 500
|
||||
then:
|
||||
- lambda: |-
|
||||
std::string b(x.begin(), x.end());
|
||||
ESP_LOGD("canid 500", "%s", &b[0] );
|
||||
- light.turn_off: light_1
|
||||
- can_id: 501
|
||||
then:
|
||||
- light.turn_on:
|
||||
id: light_1
|
||||
brightness: !lambda "return (x.size() > 0) ? (float) x[0]/255 : 0;"
|
||||
|
||||
Wiring options
|
||||
---------------
|
||||
Easiest approach is to just use fully assembled boards and just add one resistor in the MISO line.
|
||||
This runs MOSI, SCK and CS out of specification which is nearly never a problem.
|
||||
|
||||
.. figure:: images/canbus_mcp2515_resistor.png
|
||||
:align: center
|
||||
:target: ../_images/canbus_mcp2515_resistor.png
|
||||
|
||||
A more advanced option is to fully convert the 5V and 3.3V logic levels with a level shifter.
|
||||
|
||||
.. figure:: images/canbus_mcp2515_txs0108e.png
|
||||
:align: center
|
||||
:target: ../_images/canbus_mcp2515_txs0108e.png
|
||||
|
||||
Extended ID
|
||||
-----------
|
||||
Standard IDs and Extended IDs can coexist on the same segment.
|
||||
|
||||
.. note::
|
||||
|
||||
It is important to know that for example Standard 0x123 and Extended 0x123 are different addesses.
|
||||
This example shows how the different ID types are used in the configuration for transmission and receiving.
|
||||
For the IDs decimal or hexadecimal notation is possible:
|
||||
0x000 - 0x7ff / 0-2047 for Standard IDs only.
|
||||
0x00000000 - 0x1fffffff / 0-536870911 for Extended IDs.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Transmission of extended and standard ID 0x100 every second
|
||||
time:
|
||||
- platform: sntp
|
||||
on_time:
|
||||
- seconds: /1
|
||||
then:
|
||||
- canbus.send:
|
||||
# Extended ID explicit
|
||||
use_extended_id: True
|
||||
can_id: 0x100
|
||||
data: [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]
|
||||
- canbus.send:
|
||||
# Standard ID by default
|
||||
can_id: 0y100
|
||||
data: [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]
|
||||
|
||||
canbus:
|
||||
- platform: mcp2515
|
||||
id: my_mcp2515
|
||||
spi_id: McpSpi
|
||||
cs_pin: GPIO14
|
||||
can_id: 0x1fff
|
||||
use_extended_id: True
|
||||
bit_rate: 125kbps
|
||||
on_frame:
|
||||
- can_id: 0x123
|
||||
use_extended_id: True
|
||||
then:
|
||||
- lambda: |-
|
||||
std::string b(x.begin(), x.end());
|
||||
ESP_LOGD("can extended id 0x123", "%s", &b[0] );
|
||||
- can_id: 0x123
|
||||
then:
|
||||
- lambda: |-
|
||||
std::string b(x.begin(), x.end());
|
||||
ESP_LOGD("can standard id 0x123", "%s", &b[0] );
|
||||
|
||||
Binary Sensor Example
|
||||
---------------------
|
||||
Example for the following application:
|
||||
Button is connected on a can node which sends an A message on ID 0x100 with payload 0x01 for contact closed and 0x00 for contact open.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
spi:
|
||||
id: McpSpi
|
||||
clk_pin: GPIO16
|
||||
mosi_pin: GPIO5
|
||||
miso_pin: GPIO4
|
||||
|
||||
binary_sensor:
|
||||
- platform: template
|
||||
name: "CAN Bus Button"
|
||||
id: "can_bus_button"
|
||||
|
||||
canbus:
|
||||
- platform: mcp2515
|
||||
id: my_mcp2515
|
||||
spi_id: McpSpi
|
||||
cs_pin: GPIO14
|
||||
can_id: 4
|
||||
bit_rate: 125kbps
|
||||
on_frame:
|
||||
- can_id: ${0x100}
|
||||
then:
|
||||
- lambda: |-
|
||||
if(x.size() > 0) {
|
||||
switch(x[0]) {
|
||||
case 0x0: id(can_bus_button).publish_state(false); break; // button release
|
||||
case 0x1: id(can_bus_button).publish_state(true); break; // button down
|
||||
}
|
||||
}
|
||||
|
||||
Cover Example
|
||||
-------------
|
||||
Example for following application:
|
||||
Buttons are connected on the CAN-Node and also the motor is connected via CAN.
|
||||
|
||||
.. epigraph::
|
||||
|
||||
| **Button 1:** ID 0x50B - 1 byte payload
|
||||
| (0: Button release, 1: Button down, 2: long down, 3: long release, 4 double click)
|
||||
| **Button 2:** ID 0x50C - 1 byte payload
|
||||
| (0: Button release, 1: Button down, 2: long down, 3: long release, 4 double click)
|
||||
| **Motor:** ID 0x51A - 1 byte payload
|
||||
| (0: off, 1: open, 2: close)
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
spi:
|
||||
id: McpSpi
|
||||
clk_pin: GPIO16
|
||||
mosi_pin: GPIO5
|
||||
miso_pin: GPIO4
|
||||
|
||||
canbus:
|
||||
- platform: mcp2515
|
||||
id: my_mcp2515
|
||||
spi_id: McpSpi
|
||||
cs_pin: GPIO14
|
||||
can_id: 4
|
||||
bit_rate: 125kbps
|
||||
on_frame:
|
||||
- can_id: 0x50c
|
||||
then:
|
||||
- lambda: |-
|
||||
if(x.size() > 0) {
|
||||
auto call = id(TestCover).make_call();
|
||||
switch(x[0]) {
|
||||
case 0x2: call.set_command_open(); call.perform(); break; // long pressed
|
||||
case 0x1: // button down
|
||||
case 0x3: call.set_command_stop(); call.perform(); break; // long released
|
||||
case 0x4: call.set_position(1.0); call.perform(); break; // double click
|
||||
}
|
||||
}
|
||||
- can_id: 0x50b
|
||||
then:
|
||||
- lambda: |-
|
||||
if(x.size() > 0) {
|
||||
auto call = id(TestCover).make_call();
|
||||
switch(x[0]) {
|
||||
case 0x2: call.set_command_close(); call.perform(); break; // long pressed
|
||||
case 0x1: // button down
|
||||
case 0x3: call.set_command_stop(); call.perform(); break; // long released
|
||||
case 0x4: call.set_position(0.0); call.perform(); break; // double click
|
||||
}
|
||||
}
|
||||
|
||||
cover:
|
||||
- platform: time_based
|
||||
name: "MyCanbusTestCover"
|
||||
id: TestCover
|
||||
device_class: shutter
|
||||
has_built_in_endstop: true
|
||||
open_action:
|
||||
- canbus.send:
|
||||
data: [ 0x01 ]
|
||||
canbus_id: my_mcp2515
|
||||
can_id: 0x51A
|
||||
open_duration: 2min
|
||||
close_action:
|
||||
- canbus.send:
|
||||
data: [ 0x02 ]
|
||||
canbus_id: my_mcp2515
|
||||
can_id: 0x51A
|
||||
close_duration: 2min
|
||||
stop_action:
|
||||
- canbus.send:
|
||||
data: [ 0x00 ]
|
||||
canbus_id: my_mcp2515
|
||||
can_id: 0x51A
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :apiref:`spi/spi.h`
|
||||
- :ghedit:`Edit`
|
3
components/climate/ir_climate.rst
Normal file → Executable file
@ -37,6 +37,8 @@ request so it will be added (see FAQ).
|
||||
+------------------------+---------------------+----------------------+------------------------------------+
|
||||
| LG | ``climate_ir_lg`` | yes | |
|
||||
+------------------------+---------------------+----------------------+------------------------------------+
|
||||
| Hitachi | ``hitachi_ac344`` | yes | |
|
||||
+------------------------+---------------------+----------------------+------------------------------------+
|
||||
|
||||
This component requires that you have setup a :doc:`/components/remote_transmitter`.
|
||||
|
||||
@ -129,6 +131,7 @@ See Also
|
||||
- :apiref:`coolix.h <coolix/coolix.h>`,
|
||||
:apiref:`daikin.h <daikin/daikin.h>`
|
||||
:apiref:`fujitsu_general.h <fujitsu_general/fujitsu_general.h>`,
|
||||
:apiref:`hitachi_ac344.h <hitachi_ac344/hitachi_ac344.h>`,
|
||||
:apiref:`mitsubishi.h <mitsubishi/mitsubishi.h>`,
|
||||
:apiref:`tcl112.h <tcl112/tcl112.h>`,
|
||||
:apiref:`yashima.h <yashima/yashima.h>`
|
||||
|
@ -49,6 +49,10 @@ Configuration variables:
|
||||
- **target_temperature_datapoint** (**Required**, int): The datapoint id number of the target temperature.
|
||||
- **current_temperature_datapoint** (**Required**, int): The datapoint id number of the current temperature.
|
||||
- **temperature_multiplier** (**Optional**, float): A multiplier to modify the incoming and outgoing temperature values - :ref:`see below <temperature-multiplier>`.
|
||||
If the device has different multipliers for current and target temperatures, **temperature_multiplier** can be replaced with both of:
|
||||
|
||||
- **current_temperature_multiplier** (**Optional**, float): A multiplier to modify the current temperature value.
|
||||
- **target_temperature_multiplier** (**Optional**, float): A multiplier to modify the target temperature value.
|
||||
- All other options from :ref:`Climate <config-climate>`.
|
||||
|
||||
.. _temperature-multiplier:
|
||||
|
277
components/display/Inkplate.rst
Normal file
@ -0,0 +1,277 @@
|
||||
Inkplate 6
|
||||
==========
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up Inkplate E-Paper displays in ESPHome.
|
||||
:image: Inkplate.jpg
|
||||
|
||||
All-in-one e-paper display ``Inkplate 6``
|
||||
Inkplate 6 is a powerful, Wi-Fi enabled ESP32 based six-inch e-paper display – recycled from a Kindle e-reader. Its main feature is simplicity.
|
||||
Learn more at `Inkplate's website <https://inkplate.io/>`__
|
||||
|
||||
.. figure:: images/Inkplate.jpg
|
||||
:align: center
|
||||
:width: 75.0%
|
||||
|
||||
Inkplate 6
|
||||
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example minimal configuration entry
|
||||
|
||||
mcp23017:
|
||||
- id: mcp23017_hub
|
||||
address: 0x20
|
||||
|
||||
display:
|
||||
- platform: inkplate
|
||||
id: inkplate_display
|
||||
greyscale: false
|
||||
partial_updating: false
|
||||
update_interval: 60s
|
||||
|
||||
ckv_pin: 32
|
||||
sph_pin: 33
|
||||
gmod_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 1
|
||||
gpio0_enable_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 8
|
||||
oe_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 0
|
||||
spv_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 2
|
||||
powerup_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 4
|
||||
wakeup_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 3
|
||||
vcom_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 5
|
||||
|
||||
.. warning::
|
||||
|
||||
When using the Inkplate epaper module, the GPIO pin numbers above *cannot be changed* as they are
|
||||
hardwired within the module/PCB.
|
||||
|
||||
.. warning::
|
||||
|
||||
Inkplate module cannot perform partial update if 3 bit mode is on.
|
||||
It just ignores the function call in that case.
|
||||
|
||||
|
||||
Configuration variables
|
||||
***********************
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **greyscale** (*Optional*, boolean): Makes the screen display 3 bit colors. Defaults to ``False``
|
||||
- **partial_updating** (*Optional*, boolean): Makes the screen update partially, which is faster, but leaves burnin. Defaults to ``False``
|
||||
- **full_update_every** (*Optional*, int): When partial updating is enabled, forces a full screen update after chosen number of updates. Defaults to ``10``
|
||||
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
|
||||
See :ref:`display-engine` for more information.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``.
|
||||
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
|
||||
|
||||
- **ckv_pin** (**Required**, :ref:`config-pin`): The CKV pin for the Inkplate display.
|
||||
- **gmod_pin** (**Required**, :ref:`config-pin`): The GMOD pin for the Inkplate display.
|
||||
- **gpio0_enable_pin** (**Required**, :ref:`config-pin`): The GPIO0 Enable pin for the Inkplate display.
|
||||
- **oe_pin** (**Required**, :ref:`config-pin`): The OE pin for the Inkplate display.
|
||||
- **powerup_pin** (**Required**, :ref:`config-pin`): The Powerup pin for the Inkplate display.
|
||||
- **sph_pin** (**Required**, :ref:`config-pin`): The SPH pin for the Inkplate display.
|
||||
- **spv_pin** (**Required**, :ref:`config-pin`): The SPV pin for the Inkplate display.
|
||||
- **vcom_pin** (**Required**, :ref:`config-pin`): The VCOM pin for the Inkplate display.
|
||||
- **cl_pin** (*Optional*, :ref:`config-pin`): The CL pin for the Inkplate display.
|
||||
Defaults to GPIO0.
|
||||
- **le_pin** (*Optional*, :ref:`config-pin`): The LE pin for the Inkplate display.
|
||||
Defaults to GPIO2.
|
||||
|
||||
- **display_data_0_pin** (*Optional*, :ref:`config-pin`): The Data 0 pin for the Inkplate display.
|
||||
Defaults to GPIO4.
|
||||
- **display_data_1_pin** (*Optional*, :ref:`config-pin`): The Data 1 pin for the Inkplate display.
|
||||
Defaults to GPIO5.
|
||||
- **display_data_2_pin** (*Optional*, :ref:`config-pin`): The Data 2 pin for the Inkplate display.
|
||||
Defaults to GPIO18.
|
||||
- **display_data_3_pin** (*Optional*, :ref:`config-pin`): The Data 3 pin for the Inkplate display.
|
||||
Defaults to GPIO19.
|
||||
- **display_data_4_pin** (*Optional*, :ref:`config-pin`): The Data 4 pin for the Inkplate display.
|
||||
Defaults to GPIO23.
|
||||
- **display_data_5_pin** (*Optional*, :ref:`config-pin`): The Data 5 pin for the Inkplate display.
|
||||
Defaults to GPIO25.
|
||||
- **display_data_6_pin** (*Optional*, :ref:`config-pin`): The Data 6 pin for the Inkplate display.
|
||||
Defaults to GPIO26.
|
||||
- **display_data_7_pin** (*Optional*, :ref:`config-pin`): The Data 7 pin for the Inkplate display.
|
||||
Defaults to GPIO27.
|
||||
|
||||
|
||||
Complete example
|
||||
****************
|
||||
|
||||
The following is a complete example YAML configuration that does a few things beyond the usual
|
||||
Wi-Fi, API, and OTA configuration.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
esphome:
|
||||
name: inkplate
|
||||
platform: ESP32
|
||||
board: esp-wrover-kit
|
||||
|
||||
logger:
|
||||
|
||||
wifi:
|
||||
ssid: <YOUR WIFI SSID>
|
||||
password: <YOUR WIFI PASSWORD>
|
||||
ap:
|
||||
ssid: Inkplate-AP
|
||||
password: '12345678'
|
||||
|
||||
captive_portal:
|
||||
|
||||
ota:
|
||||
|
||||
api:
|
||||
|
||||
switch:
|
||||
- platform: restart
|
||||
name: "Inkplate Reboot"
|
||||
id: reboot
|
||||
|
||||
- platform: gpio
|
||||
id: battery_read_mosfet
|
||||
pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 9
|
||||
inverted: true
|
||||
|
||||
- platform: template
|
||||
name: "Inkplate Greyscale mode"
|
||||
lambda: return id(inkplate_display).get_greyscale();
|
||||
turn_on_action:
|
||||
- lambda: id(inkplate_display).set_greyscale(true);
|
||||
turn_off_action:
|
||||
- lambda: id(inkplate_display).set_greyscale(false);
|
||||
|
||||
- platform: template
|
||||
name: "Inkplate Partial Updating"
|
||||
lambda: return id(inkplate_display).get_partial_updating();
|
||||
turn_on_action:
|
||||
- lambda: id(inkplate_display).set_partial_updating(true);
|
||||
turn_off_action:
|
||||
- lambda: id(inkplate_display).set_partial_updating(false);
|
||||
|
||||
sensor:
|
||||
- platform: adc
|
||||
id: battery_voltage
|
||||
update_interval: never
|
||||
attenuation: 11db
|
||||
pin: 35
|
||||
- platform: template
|
||||
name: "Inkplate Battery Voltage"
|
||||
lambda: |-
|
||||
id(battery_read_mosfet).turn_on();
|
||||
delay(1);
|
||||
float adc = id(battery_voltage).sample();
|
||||
id(battery_read_mosfet).turn_off();
|
||||
return adc;
|
||||
filters:
|
||||
- multiply: 2
|
||||
|
||||
i2c:
|
||||
|
||||
mcp23017:
|
||||
- id: mcp23017_hub
|
||||
address: 0x20
|
||||
|
||||
binary_sensor:
|
||||
- platform: status
|
||||
name: "Inkplate Status"
|
||||
id: system_status
|
||||
|
||||
- platform: gpio
|
||||
name: "Inkplate Touch Pad 1"
|
||||
pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 10
|
||||
- platform: gpio
|
||||
name: "Inkplate Touch Pad 2"
|
||||
pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 11
|
||||
- platform: gpio
|
||||
name: "Inkplate Touch Pad 3"
|
||||
pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 12
|
||||
|
||||
time:
|
||||
- platform: sntp
|
||||
id: esptime
|
||||
|
||||
font:
|
||||
- file: "Helvetica.ttf"
|
||||
id: helvetica_96
|
||||
size: 96
|
||||
- file: "Helvetica.ttf"
|
||||
id: helvetica_48
|
||||
size: 48
|
||||
|
||||
|
||||
display:
|
||||
- platform: inkplate
|
||||
id: inkplate_display
|
||||
greyscale: false
|
||||
partial_updating: false
|
||||
update_interval: 60s
|
||||
|
||||
ckv_pin: 32
|
||||
sph_pin: 33
|
||||
gmod_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 1
|
||||
gpio0_enable_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 8
|
||||
oe_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 0
|
||||
spv_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 2
|
||||
powerup_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 4
|
||||
wakeup_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 3
|
||||
vcom_pin:
|
||||
mcp23017: mcp23017_hub
|
||||
number: 5
|
||||
|
||||
lambda: |-
|
||||
it.fill(COLOR_ON);
|
||||
|
||||
it.print(100, 100, id(helvetica_48), COLOR_OFF, TextAlign::TOP_LEFT, "ESPHome");
|
||||
|
||||
it.strftime(400, 300, id(helvetica_48), COLOR_OFF, TextAlign::CENTER, "%Y-%m-%d", id(esptime).now());
|
||||
it.strftime(400, 400, id(helvetica_96), COLOR_OFF, TextAlign::CENTER, "%H:%M", id(esptime).now());
|
||||
|
||||
if (id(system_status).state) {
|
||||
it.print(700, 100, id(helvetica_48), COLOR_OFF, TextAlign::TOP_RIGHT, "Online");
|
||||
} else {
|
||||
it.print(700, 100, id(helvetica_48), COLOR_OFF, TextAlign::TOP_RIGHT, "Offline");
|
||||
}
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`index`
|
||||
- `Arduino Inkplate 6 library <https://github.com/e-radionicacom/Inkplate-6-Arduino-library>`__ by `E-radionica.com <https://e-radionica.com/>`__
|
||||
- :ghedit:`Edit`
|
127
components/display/ili9341.rst
Normal file
@ -0,0 +1,127 @@
|
||||
ILI9341 TFT LCD
|
||||
===============
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up ILI9341 TFT LCD display drivers.
|
||||
:image: ili9341-full.jpg
|
||||
|
||||
.. _ili9341:
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
The ``ili9341`` display platform allows you to use
|
||||
ILI9341 (`datasheet <https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf>`__,
|
||||
`Aliexpress <https://s.click.aliexpress.com/e/_dTKH6Mt>`__)
|
||||
displays with ESPHome. As this is a somewhat higher resolution display and may require pins
|
||||
beyond the typical SPI connections, it is better suited for use with the ESP32.
|
||||
|
||||
.. figure:: images/ili9341-full.jpg
|
||||
:align: center
|
||||
:width: 75.0%
|
||||
|
||||
ILI9341 display
|
||||
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example minimal configuration entry
|
||||
display:
|
||||
- platform: ili9341
|
||||
model: TFT 2.4
|
||||
cs_pin: 14
|
||||
dc_pin: 27
|
||||
led_pin: 32 ### see note below ###
|
||||
reset_pin: 33
|
||||
|
||||
lambda: |-
|
||||
it.fill(COLOR_BLACK);
|
||||
it.print(0, 0, id(my_font), id(my_red), TextAlign::TOP_LEFT, "Hello World!");
|
||||
|
||||
Configuration variables
|
||||
***********************
|
||||
|
||||
- **model** (**Required**): The model of the display. Options are:
|
||||
|
||||
- ``M5STACK``
|
||||
- ``TFT 2.4``
|
||||
|
||||
- **cs_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The CS pin.
|
||||
- **dc_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The DC pin.
|
||||
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The RESET pin.
|
||||
- **led_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The display's backlight pin. **Note:** Connect to a
|
||||
PWM-capable pin to switch/dim the display's backlight **or** save a pin by connecting it through a 3.3K resistor to the +3V supply.
|
||||
- **rotation** (*Optional*): Set the rotation of the display. Everything drawn in the ``lambda:`` will be rotated
|
||||
per this option. One of ``0°`` (default), ``90°``, ``180°``, or ``270°``.
|
||||
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
|
||||
See :ref:`display-engine` for more information.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``.
|
||||
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
|
||||
Configuration examples
|
||||
**********************
|
||||
|
||||
To utilize the color capabilities of this display module, you'll likely want to add a ``color:`` section to your
|
||||
YAML configuration; please see :ref:`color <config-color>` for more detail on this configuration section.
|
||||
|
||||
To use colors in your lambada:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
color:
|
||||
- id: my_red
|
||||
red: 100%
|
||||
green: 3%
|
||||
blue: 5%
|
||||
|
||||
...
|
||||
|
||||
display:
|
||||
...
|
||||
lambda: |-
|
||||
it.rectangle(0, 0, it.get_width(), it.get_height(), id(my_red));
|
||||
|
||||
|
||||
To bring in color images:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
image:
|
||||
- file: "image.jpg"
|
||||
id: my_image
|
||||
resize: 200x200
|
||||
type: RGB24
|
||||
|
||||
...
|
||||
|
||||
display:
|
||||
...
|
||||
lambda: |-
|
||||
it.image(0, 0, id(my_image));
|
||||
|
||||
|
||||
To configure a dimmable backlight:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Define a PWM output on the ESP32
|
||||
output:
|
||||
- platform: ledc
|
||||
pin: 32
|
||||
id: gpio_32_backlight_pwm
|
||||
|
||||
# Define a monochromatic, dimmable light for the backlight
|
||||
light:
|
||||
- platform: monochromatic
|
||||
output: gpio_32_backlight_pwm
|
||||
name: "ILI9341 Display Backlight"
|
||||
id: back_light
|
||||
restore_mode: ALWAYS_ON
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`index`
|
||||
- :apiref:`ili9341/ili9341.h`
|
||||
- :ghedit:`Edit`
|
BIN
components/display/images/Inkplate.jpg
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
components/display/images/ili9341-full.jpg
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
components/display/images/ssd1322-full.jpg
Normal file
After Width: | Height: | Size: 216 KiB |
BIN
components/display/images/ssd1327-full.jpg
Normal file
After Width: | Height: | Size: 206 KiB |
BIN
components/display/images/ssd1331-full.jpg
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
components/display/images/st7735.jpg
Normal file
After Width: | Height: | Size: 194 KiB |
@ -347,6 +347,11 @@ Configuration variables:
|
||||
- ``GREYSCALE``: Full scale grey. Uses 8 bits per pixel, 1 pixel per byte.
|
||||
- ``RGB24``: Full RGB color stored. Uses 3 bytes per pixel.
|
||||
|
||||
- **dither** (*Optional*): Specifies which dither method used to process the image, only used in GREYSCALE and BINARY type image. Defaults to ``NONE``. You can read more about it `here <https://pillow.readthedocs.io/en/stable/reference/Image.html?highlight=Dither#PIL.Image.Image.convert>`__ and `here <https://en.wikipedia.org/wiki/Dither>`__.
|
||||
|
||||
- ``NONE``: Every pixel convert to its nearest color.
|
||||
- ``FLOYDSTEINBERG``: Uses Floyd-Steinberg dither to approximate the original image luminosity levels.
|
||||
|
||||
.. note::
|
||||
|
||||
To use images you will need to have the python ``pillow`` package installed.
|
||||
@ -380,6 +385,47 @@ be supplied to modify the color used to represent the on and off bits respective
|
||||
You can also use this to invert images in two colors display, use ``COLOR_OFF`` then ``COLOR_ON``
|
||||
as the additional parameters.
|
||||
|
||||
Animation
|
||||
*********
|
||||
|
||||
Animation inherits all options from the image component.
|
||||
It adds an additional method to change the shown picture of a gif.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
animation:
|
||||
- file: "animation.gif"
|
||||
id: my_animation
|
||||
resize: 100x100
|
||||
|
||||
The animation can be rendered just like the image component with the ``image()`` function of the display component.
|
||||
|
||||
To show the next frame of the animation call ``id(my_animation).next_frame()``
|
||||
This can be combined with all Lambdas:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
display:
|
||||
- platform: ...
|
||||
# ...
|
||||
lambda: |-
|
||||
//Ingress shown animation Frame.
|
||||
id(my_animation).next_frame();
|
||||
// Draw the animation my_animation at position [x=0,y=0]
|
||||
it.image(0, 0, id(my_animation), COLOR_ON, COLOR_OFF);
|
||||
|
||||
.. note::
|
||||
|
||||
To draw the next animation independent of Display draw cycle use an interval:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
interval:
|
||||
- interval: 5s
|
||||
then:
|
||||
lambda: |-
|
||||
id(my_animation).next_frame();
|
||||
|
||||
.. _display-pages:
|
||||
|
||||
Display Pages
|
||||
|
@ -57,6 +57,7 @@ Configuration variables:
|
||||
- **scroll_delay** (*Optional*, :ref:`config-time`): Set delay time before scroll starts. Defaults to ``1s``.
|
||||
- **scroll_dwell** (*Optional*, :ref:`config-time`): Sets the wait time at the end of the scroll before starting
|
||||
over. This is only used in mode ``STOP``. Defaults to ``1s``.
|
||||
- **reverse_enable** (*Optional*, boolean): For some displays the order of the displays is reversed ("DCBA"). This option will reverse the display to ("ABCD") again. Defaults to ``False``.
|
||||
- **intensity** (*Optional*, integer): The intensity with which the MAX7219 should drive the outputs. Range is
|
||||
from ``0``, least intense to ``15`` the brightest. Defaults to ``15``.
|
||||
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the
|
||||
|
@ -39,6 +39,7 @@ VCC to 3.3V and GND to GND.
|
||||
reset_pin: D0
|
||||
cs_pin: D8
|
||||
dc_pin: D1
|
||||
contrast: 0x7f
|
||||
lambda: |-
|
||||
it.print(0, 0, id(font), "Hello World!");
|
||||
|
||||
@ -60,6 +61,7 @@ Configuration variables:
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``.
|
||||
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **contrast** (*Optional*, int): Set screen contrast (0-255). Defaults to ``0x7f``.
|
||||
|
||||
|
||||
See Also
|
||||
|
65
components/display/ssd1322.rst
Normal file
@ -0,0 +1,65 @@
|
||||
SSD1322 OLED Display
|
||||
====================
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up SSD1322 OLED display drivers.
|
||||
:image: ssd1322.jpg
|
||||
|
||||
.. _ssd1322-spi:
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
The ``ssd1322_spi`` display platform allows you to use
|
||||
SSD1322 (`datasheet <https://www.newhavendisplay.com/specs/NHD-3.12-25664UCW2.pdf>`__,
|
||||
`Newhaven Display <https://www.newhavendisplay.com/nhd31225664ucw2-p-9583.html>`__)
|
||||
displays with ESPHome. Note that this component is for displays that are connected via the 4-Wire :ref:`SPI bus <spi>`.
|
||||
|
||||
.. figure:: images/ssd1322-full.jpg
|
||||
:align: center
|
||||
:width: 75.0%
|
||||
|
||||
SSD1322 OLED Display
|
||||
|
||||
Connect CLK, DIN, CS, DC, and RST to pins on your ESP. For power, connect
|
||||
VCC to 3.3V and GND to GND.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
spi:
|
||||
clk_pin: D5
|
||||
mosi_pin: D7
|
||||
|
||||
display:
|
||||
- platform: ssd1322_spi
|
||||
model: "SSD1322 256x64"
|
||||
reset_pin: D0
|
||||
cs_pin: D8
|
||||
dc_pin: D1
|
||||
lambda: |-
|
||||
it.print(0, 0, id(font), "Hello World!");
|
||||
|
||||
Configuration variables:
|
||||
************************
|
||||
|
||||
- **model** (**Required**): The model of the display. At present, only one option is available:
|
||||
|
||||
- ``SSD1322 256x64``
|
||||
|
||||
- **reset_pin** (:ref:`Pin Schema <config-pin_schema>`): The RESET pin.
|
||||
- **cs_pin** (:ref:`Pin Schema <config-pin_schema>`): The CS pin.
|
||||
- **dc_pin** (:ref:`Pin Schema <config-pin_schema>`): The DC pin.
|
||||
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
|
||||
See :ref:`display-engine` for more information.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``.
|
||||
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`index`
|
||||
- :apiref:`ssd1322_base/ssd1322_base.h`
|
||||
- `SSD1322 Display documentation <https://www.newhavendisplay.com/specs/NHD-3.12-25664UCW2.pdf>`__ at `Newhaven Display <https://www.newhavendisplay.com/nhd31225664ucw2-p-9583.html>`__
|
||||
- :ghedit:`Edit`
|
@ -12,9 +12,8 @@ Usage
|
||||
|
||||
The ``ssd1325_spi`` display platform allows you to use
|
||||
SSD1325 (`datasheet <https://cdn-shop.adafruit.com/datasheets/SSD1325.pdf>`__,
|
||||
`Adafruit <https://www.adafruit.com/product/2674>`__) and SSD1327 (`datasheet <https://www.waveshare.com/w/upload/a/ac/SSD1327-datasheet.pdf>`__,
|
||||
`Waveshare <https://www.waveshare.com/1.5inch-oled-module.htm>`__)
|
||||
displays with ESPHome. Note that this component is for displays that are connected via the 4-Wire :ref:`SPI bus <spi>`.
|
||||
`Adafruit <https://www.adafruit.com/product/2674>`__) displays with ESPHome. Note that this
|
||||
component is for displays that are connected via the 4-Wire :ref:`SPI bus <spi>`.
|
||||
|
||||
.. figure:: images/ssd1325-full.jpg
|
||||
:align: center
|
||||
@ -52,10 +51,8 @@ Configuration Variables
|
||||
|
||||
- ``SSD1325 128x32`` (SSD1325 with 128 columns and 32 rows)
|
||||
- ``SSD1325 128x64``
|
||||
- ``SSD1327 128x128`` (note SSD1327 instead of SSD1325)
|
||||
- ``SSD1325 96x16``
|
||||
- ``SSD1325 64x48``
|
||||
- ``SSD1327 128x128`` **# Note the number seven!**
|
||||
|
||||
- **reset_pin** (:ref:`Pin Schema <config-pin_schema>`): The RESET pin.
|
||||
- **cs_pin** (:ref:`Pin Schema <config-pin_schema>`): The pin on the ESP that that the CS line is connected to.
|
||||
|
207
components/display/ssd1327.rst
Normal file
@ -0,0 +1,207 @@
|
||||
SSD1327 OLED Display
|
||||
====================
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up SSD1327 OLED display drivers.
|
||||
:image: ssd1327.jpg
|
||||
|
||||
.. _ssd1327-i2c:
|
||||
|
||||
Over I²C
|
||||
--------
|
||||
|
||||
The ``ssd1327_i2c`` display platform allows you to use
|
||||
SSD1327 (`datasheet <https://www.generationrobots.com/media/Ecran_OLED_0_96/SSD1327_datasheet.pdf>`__,
|
||||
`Waveshare <https://www.waveshare.com/1.5inch-oled-module.htm>`__) displays with ESPHome. Note that this component is for
|
||||
displays that are connected via the :ref:`I²C Bus <i2c>`. If your SSD1327 is connected via the 4-Wire
|
||||
:ref:`SPI bus <spi>`, see :ref:`ssd1327-spi`.
|
||||
|
||||
.. figure:: images/ssd1327-full.jpg
|
||||
:align: center
|
||||
:width: 75.0%
|
||||
|
||||
SSD1327 OLED Display
|
||||
|
||||
Connect CLK to the SCL (clock) pin you chose for the :ref:`I²C Bus <i2c>` and connect DIN to the SDA (data) pin.
|
||||
For power, connect VCC to 3.3V and GND to GND. You may also connect the ``RESET`` pin to an available pin on the
|
||||
ESP; this is recommended as it improves reliability.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
i2c:
|
||||
sda: D1
|
||||
scl: D2
|
||||
|
||||
display:
|
||||
- platform: ssd1327_i2c
|
||||
model: "SSD1327 128x128"
|
||||
reset_pin: D0
|
||||
address: 0x3D
|
||||
lambda: |-
|
||||
it.print(0, 0, id(font), "Hello World!");
|
||||
|
||||
Configuration variables
|
||||
***********************
|
||||
|
||||
- **model** (**Required**): The model of the display. At present, only one option is available:
|
||||
|
||||
- ``SSD1327 128x128``
|
||||
|
||||
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The RESET pin. Defaults to not connected.
|
||||
- **address** (*Optional*, int): Manually specify the :ref:`I²C <i2c>` address of the display. Defaults to 0x3D.
|
||||
- **rotation** (*Optional*): Set the rotation of the display. Everything you draw in ``lambda:`` will be rotated
|
||||
by this option. One of ``0°`` (default), ``90°``, ``180°``, ``270°``.
|
||||
- **brightness** (*Optional*): Set the screen brightness in percents 0.0-1.0. Defaults to `1.0` that corresponds to 100%.
|
||||
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
|
||||
See :ref:`display-engine` for more information.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``.
|
||||
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **brightness** (*Optional*, float): Manually override display brightness in %. Defaults to ``100%``
|
||||
|
||||
.. note::
|
||||
|
||||
To speed up the display update process you can select higher I²C frequencies.
|
||||
|
||||
.. _ssd1327-spi:
|
||||
|
||||
Over SPI
|
||||
--------
|
||||
|
||||
The ``ssd1327_spi`` display platform allows you to use
|
||||
SSD1327 (`datasheet <https://cdn-shop.adafruit.com/datasheets/SSD1327.pdf>`__, `Adafruit <https://www.adafruit.com/product/326>`__)
|
||||
displays with ESPHome. Note that this component is for displays that are connected via the 4-Wire :ref:`SPI bus <spi>`.
|
||||
If your SSD1327 is connected via the :ref:`I²C Bus <i2c>`, see :ref:`ssd1327-i2c`.
|
||||
|
||||
.. figure:: images/ssd1327-full.jpg
|
||||
:align: center
|
||||
:width: 75.0%
|
||||
|
||||
SSD1327 OLED Display
|
||||
|
||||
Connect CLK to the SCK (clock) pin you chose for the :ref:`SPI bus <spi>`, connect DIN to the MOSI/SDO pin, and connect ``DC``
|
||||
to another pin of your choosing. ``CS`` may connect to a pin on the ESP or it may connect to ground if the display is the only
|
||||
device connected to the SPI bus. For power, connect VCC to 3.3V and GND to GND. You may also connect the ``RESET`` pin to an
|
||||
available pin on the ESP; this is recommended as it improves reliability.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
spi:
|
||||
clk_pin: D0
|
||||
mosi_pin: D1
|
||||
|
||||
display:
|
||||
- platform: ssd1327_spi
|
||||
model: "SSD1327 128x128"
|
||||
cs_pin: D2
|
||||
dc_pin: D3
|
||||
reset_pin: D4
|
||||
lambda: |-
|
||||
it.print(0, 0, id(font), "Hello World!");
|
||||
|
||||
Configuration variables
|
||||
***********************
|
||||
|
||||
- **model** (**Required**): The model of the display. At present, only one option is available:
|
||||
|
||||
- ``SSD1327 128x128``
|
||||
|
||||
- **cs_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The Chip Select (CS) pin.
|
||||
- **dc_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The DC pin.
|
||||
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The RESET pin. Defaults to not connected.
|
||||
- **rotation** (*Optional*): Set the rotation of the display. Everything you draw in ``lambda:`` will be rotated
|
||||
by this option. One of ``0°`` (default), ``90°``, ``180°``, ``270°``.
|
||||
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
|
||||
See :ref:`display-engine` for more information.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``.
|
||||
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
|
||||
- **spi_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`SPI Component <spi>` if you want
|
||||
to use multiple SPI buses.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **brightness** (*Optional*, float): Manually override display brightness in %. Defaults to ``100%``
|
||||
|
||||
Configuration examples
|
||||
**********************
|
||||
|
||||
To utilize the grayscale capabilities of this display module, add a ``color:`` section to your YAML configuration;
|
||||
please see :ref:`color <config-color>` for more details. As this is a grayscale display, it only uses the white color
|
||||
element as shown below.
|
||||
|
||||
To use grayscale in your lambada:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
color:
|
||||
- id: medium_gray
|
||||
white: 50%
|
||||
|
||||
...
|
||||
|
||||
display:
|
||||
...
|
||||
lambda: |-
|
||||
it.rectangle(0, 0, it.get_width(), it.get_height(), id(medium_gray));
|
||||
|
||||
|
||||
To bring in grayscale images:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
image:
|
||||
- file: "image.jpg"
|
||||
id: my_image
|
||||
resize: 120x120
|
||||
type: GRAYSCALE
|
||||
|
||||
...
|
||||
|
||||
display:
|
||||
...
|
||||
lambda: |-
|
||||
it.image(0, 0, id(my_image));
|
||||
|
||||
In this case, the image will be converted to grayscale (regardless of its original format) and rendered as such
|
||||
when drawn on the display. Note that the original image may require some adjustment as not all images immediately
|
||||
convert nicely to the 4-bit grayscale format this display supports.
|
||||
|
||||
Note that if ``type: GRAYSCALE`` is omitted, the image will render as a binary image (no grayscale); in this
|
||||
case, a color attribute may be passed to the ``image()`` method as follows:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
image:
|
||||
- file: "image.jpg"
|
||||
id: my_image
|
||||
resize: 120x120
|
||||
|
||||
...
|
||||
|
||||
display:
|
||||
...
|
||||
lambda: |-
|
||||
it.image(0, 0, id(medium_gray), id(my_image));
|
||||
|
||||
This will draw the complete image with the given shade of gray.
|
||||
|
||||
To create a new color as needed in code:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
display:
|
||||
...
|
||||
lambda: |-
|
||||
float white_intensity = 0.5;
|
||||
Color variable_gray(0, 0, 0, white_intensity);
|
||||
it.rectangle(0, 0, it.get_width(), it.get_height(), variable_gray);
|
||||
|
||||
The last argument of the ``Color`` constructor is the intensity of the white element; it is a percentage
|
||||
(value of range 0 to 1). It may be defined by another variable so it is adjustable in code.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`index`
|
||||
- :apiref:`ssd1327_base/ssd1327_base.h`
|
||||
- :ghedit:`Edit`
|
100
components/display/ssd1331.rst
Normal file
@ -0,0 +1,100 @@
|
||||
SSD1331 OLED Display
|
||||
====================
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up SSD1331 OLED display drivers.
|
||||
:image: ssd1331.jpg
|
||||
|
||||
.. _ssd1331-spi:
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
The ``ssd1331_spi`` display platform allows you to use
|
||||
SSD1331 (`datasheet <https://cdn-shop.adafruit.com/datasheets/SSD1331_1.2.pdf>`__,
|
||||
`Adafruit <https://www.adafruit.com/product/684>`__)
|
||||
displays with ESPHome. This component is for displays that are connected via the 4-Wire :ref:`SPI bus <spi>`.
|
||||
|
||||
.. figure:: images/ssd1331-full.jpg
|
||||
:align: center
|
||||
:width: 75.0%
|
||||
|
||||
SSD1331 96x64 OLED Display
|
||||
|
||||
Connect CLK (CK), MOSI (SI), CS (OC), DC, and RST (R) to pins on your ESP. For power, the Adafruit modules
|
||||
require 5 volts connected to their ``+`` pin. Connect the GND or G pin to ground.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
spi:
|
||||
clk_pin: D5
|
||||
mosi_pin: D7
|
||||
|
||||
display:
|
||||
- platform: ssd1331_spi
|
||||
reset_pin: D0
|
||||
cs_pin: D8
|
||||
dc_pin: D1
|
||||
lambda: |-
|
||||
it.print(0, 0, id(font), "Hello World!");
|
||||
|
||||
Configuration variables
|
||||
***********************
|
||||
|
||||
- **reset_pin** (:ref:`Pin Schema <config-pin_schema>`): The RESET pin.
|
||||
- **cs_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The pin on the ESP that that the CS line is connected to.
|
||||
The CS line can be connected to GND if this is the only device on the SPI bus.
|
||||
- **dc_pin** (:ref:`Pin Schema <config-pin_schema>`): The DC pin.
|
||||
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
|
||||
See :ref:`display-engine` for more information.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``.
|
||||
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
|
||||
Configuration examples
|
||||
**********************
|
||||
|
||||
You may wish to add a ``color:`` section to your YAML configuration to make using colors easier; please see
|
||||
:ref:`color <config-color>` for more detail on this optional configuration section.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
color:
|
||||
- id: my_red
|
||||
red: 100%
|
||||
green: 3%
|
||||
blue: 5%
|
||||
|
||||
...
|
||||
|
||||
display:
|
||||
...
|
||||
lambda: |-
|
||||
it.rectangle(0, 0, it.get_width(), it.get_height(), id(my_red));
|
||||
|
||||
|
||||
To bring in color images:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
image:
|
||||
- file: "image.jpg"
|
||||
id: my_image
|
||||
resize: 96x64
|
||||
type: RGB
|
||||
|
||||
...
|
||||
|
||||
display:
|
||||
...
|
||||
lambda: |-
|
||||
it.image(0, 0, id(my_image));
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`index`
|
||||
- :apiref:`ssd1331_base/ssd1331_base.h`
|
||||
- `SSD1331 Library <https://github.com/adafruit/Adafruit-SSD1331-OLED-Driver-Library-for-Arduino>`__ by `Adafruit <https://www.adafruit.com/>`__
|
||||
- :ghedit:`Edit`
|
81
components/display/st7735.rst
Normal file
@ -0,0 +1,81 @@
|
||||
ST7735 Display
|
||||
==============
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up a ST7735 display drivers.
|
||||
:keywords: ST7735
|
||||
:image: ST7735.png
|
||||
|
||||
ST7735 Display Driver.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
The ST7735 component allows you to use a ST7735 display
|
||||
(`datasheet and information <https://learn.adafruit.com/1-8-tft-display/downloads>`__,
|
||||
`Adafruit <https://www.adafruit.com/product/358>`__) in ESPHome.
|
||||
It uses the :ref:`SPI Bus <spi>` for communication.
|
||||
|
||||
.. figure:: images/st7735.jpg
|
||||
:align: center
|
||||
:width: 75.0%
|
||||
|
||||
ST7735 Display
|
||||
|
||||
There are numerous board types out there. Some initialize differently as well. This driver will take a few options to narrow down the right settings.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
display:
|
||||
- platform: st7735
|
||||
model: "INITR_18BLACKTAB"
|
||||
reset_pin: D4
|
||||
cs_pin: D1
|
||||
dc_pin: D2
|
||||
rotation: 0
|
||||
devicewidth: 128
|
||||
deviceheight: 160
|
||||
colstart: 0
|
||||
rowstart: 0
|
||||
eightbitcolor: true
|
||||
update_interval: 5s
|
||||
|
||||
Configuration variables:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- **model** (**Required**, "See Models Below"): This the model to use. INITR_BLACKTAB is the default
|
||||
- **reset_pin** (:ref:`Pin Schema <config-pin_schema>`): The RESET pin.
|
||||
- **cs_pin** (:ref:`Pin Schema <config-pin_schema>`): The CS pin.
|
||||
- **dc_pin** (:ref:`Pin Schema <config-pin_schema>`): The DC pin.
|
||||
- **devicewidth** (**Required**, int): The device width. 128 is default
|
||||
- **deviceheight** (**Required**, int): The device height. 160 is default
|
||||
- **colstart** (**Required**, int): The device height. 160 is default
|
||||
- **rowstart** (**Required**, int): The device height. 160 is default
|
||||
- **eightbitcolor** (*Optional*, "True/False" ): 8bit mode. Default is False. This saves 50% of the buffer required for the display.
|
||||
|
||||
Memory notes:
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
- 8Bit color saves 50% of the buffer required.
|
||||
- eightbitcolor: True 160x128 = 20480 *Important for memory constrained devices*
|
||||
- eightbitcolor: False 160x128x2 = 40960
|
||||
|
||||
|
||||
Models:
|
||||
~~~~~~~
|
||||
|
||||
- INITR_GREENTAB
|
||||
- INITR_REDTAB
|
||||
- INITR_BLACKTAB
|
||||
- INITR_MIN_I160X80
|
||||
- INITR_18BLACKTAB
|
||||
- INITR_18REDTAB
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :ref:`spi`
|
||||
- :apiref:`st7735/st7735.h`
|
||||
- :ghedit:`Edit`
|
@ -45,10 +45,10 @@ Connection Options:
|
||||
- **frequency** (*Optional*, float): The frequency of the external clock, must be either 20MHz
|
||||
or 10MHz. Defaults to ``20MHz``.
|
||||
|
||||
- **i2c_pins** (**Required**): The I^2C control pins of the camera.
|
||||
- **i2c_pins** (**Required**): The I²C control pins of the camera.
|
||||
|
||||
- **sda** (**Required**, pin): The SDA pin of the I^2C interface. Also called ``SIOD``.
|
||||
- **scl** (**Required**, pin): The SCL pin of the I^2C interface. Also called ``SIOC``.
|
||||
- **sda** (**Required**, pin): The SDA pin of the I²C interface. Also called ``SIOD``.
|
||||
- **scl** (**Required**, pin): The SCL pin of the I²C interface. Also called ``SIOC``.
|
||||
|
||||
- **reset_pin** (*Optional*, pin): The ESP pin the reset pin of the camera is connected to.
|
||||
If set, this will reset the camera before the ESP boots.
|
||||
|
@ -24,7 +24,7 @@ Configuration variables:
|
||||
|
||||
- **name** (**Required**, string): This is the name of the node. It
|
||||
should always be unique in your ESPhome network. May only contain lowercase
|
||||
characters, digits and underscores. See :ref:`esphome-changing_node_name`.
|
||||
characters, digits, underscores and hyphens. See :ref:`esphome-changing_node_name`.
|
||||
- **platform** (**Required**, string): The platform your board is on,
|
||||
either ``ESP32`` or ``ESP8266``. See :ref:`esphome-arduino_version`.
|
||||
- **board** (**Required**, string): The board ESPHome should
|
||||
|
BIN
components/images/canbus_mcp2515_resistor.png
Normal file
After Width: | Height: | Size: 168 KiB |
BIN
components/images/canbus_mcp2515_txs0108e.png
Normal file
After Width: | Height: | Size: 208 KiB |
@ -123,6 +123,8 @@ Configuration variables:
|
||||
- **max_refresh_rate** (*Optional*, :ref:`config-time`):
|
||||
A time interval used to limit the number of commands a light can handle per second. For example
|
||||
16ms will limit the light to a refresh rate of about 60Hz. Defaults to the default value for the used chipset.
|
||||
- **data_rate** (*Optional*, frequency): The data rate to use for shifting data to the light. Can help if you
|
||||
have long cables or slow level-shifters.
|
||||
- **effects** (*Optional*, list): A list of :ref:`light effects <light-effects>` to use for this light.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- All other options from :ref:`Light <config-light>`.
|
||||
|
59
components/light/hbridge.rst
Normal file
@ -0,0 +1,59 @@
|
||||
H-bridge Light
|
||||
==============
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up a hbridge light.
|
||||
:image: brightness-medium.png
|
||||
|
||||
The ``hbridge`` light platform creates a dual color brightness controlled light from two
|
||||
:ref:`float output component <output>`.
|
||||
|
||||
.. figure:: images/hbridge-ui.png
|
||||
:align: center
|
||||
:width: 40.0%
|
||||
|
||||
H-bridge lights are very common for Christmas lighting and they use 2 wires for a bunch of LEDs.
|
||||
The pins are switched alternatively to allow two sets of lights to operate.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
|
||||
# Specify the two pins of the h-bridge as PWM pins
|
||||
output:
|
||||
- platform: esp8266_pwm
|
||||
id: pina
|
||||
pin: GPIO12
|
||||
- platform: esp8266_pwm
|
||||
id: pinb
|
||||
pin: GPIO14
|
||||
|
||||
# Create a light using the hbridge
|
||||
light:
|
||||
- platform: hbridge
|
||||
id: mainlight
|
||||
name: "Hbridge Lights"
|
||||
pin_a: pina
|
||||
pin_b: pinb
|
||||
|
||||
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **name** (**Required**, string): The name of the light.
|
||||
- **pin_a** (**Required**, :ref:`config-id`): The id of the first float :ref:`output` to use for this light.
|
||||
- **pin_b** (**Required**, :ref:`config-id`): The id of the second float :ref:`output` to use for this light.
|
||||
- All other options from :ref:`Light <config-light>`.
|
||||
|
||||
.. note::
|
||||
|
||||
As we are switching the h-bridge in software, the light may glitch every so often when other tasks run on the MCU.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`/components/light/index`
|
||||
- :doc:`/components/output/esp8266_pwm`
|
||||
- :apiref:`hbridge/light/hbridge_light.h`
|
||||
- :ghedit:`Edit`
|
BIN
components/light/images/hbridge-ui.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
@ -65,6 +65,7 @@ Now you can create the light.
|
||||
- platform: "tuya"
|
||||
name: "dim1"
|
||||
dimmer_datapoint: 3
|
||||
min_value_datapoint: 2
|
||||
switch_datapoint: 1
|
||||
|
||||
Configuration variables:
|
||||
@ -73,6 +74,8 @@ Configuration variables:
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **name** (**Required**, string): The name of the light.
|
||||
- **dimmer_datapoint** (*Optional*, int): The datapoint id number of the dimmer value.
|
||||
- **min_value_datapoint** (*Optional*, int): The datapoint id number of the MCU minimum value
|
||||
setting. If this is set then ESPHome will sync the **min_value** to the MCU on startup.
|
||||
- **switch_datapoint** (*Optional*, int): The datapoint id number of the power switch. My dimmer
|
||||
required this to be able to turn the light on and off. Without this you would only be able to
|
||||
change the brightness and would have to toggle the light using the physical buttons.
|
||||
|
@ -94,7 +94,7 @@ Possible log levels are (sorted by severity):
|
||||
- ``VERY_VERBOSE``
|
||||
|
||||
- All internal messages are logged. Including all the data flowing through data buses like
|
||||
I2C, SPI or UART. Warning: May cause the device to slow down and have trouble staying
|
||||
I²C, SPI or UART. Warning: May cause the device to slow down and have trouble staying
|
||||
connecting due to amount of generated messages. Color: white
|
||||
|
||||
.. _logger-manual_tag_specific_levels:
|
||||
|
128
components/mcp23Sxx.rst
Normal file
@ -0,0 +1,128 @@
|
||||
MCP23Sxx I/O Expander
|
||||
=====================
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up MCP23S08, MCP23S16 or MCP23S17 digital port expander in ESPHome. This is exactly the same API as the MCP23SXX I/O Expander except talks on the SPI bus
|
||||
:image: mcp23Sxx.png
|
||||
|
||||
The Microchip MCP23Sxx series of general purpose, parallel I/O expansion for SPI bus applications.
|
||||
This is exactly the same API as the MCP23SXX I/O Expander except talks on the SPI bus
|
||||
|
||||
**Supported Variants :**
|
||||
|
||||
- :ref:`mcp23S08-label`
|
||||
- :ref:`mcp23S17-label`
|
||||
|
||||
.. _mcp23S08-label:
|
||||
|
||||
MCP23S08
|
||||
--------
|
||||
|
||||
The MCP23S08 component (`datasheet <http://ww1.microchip.com/downloads/en/DeviceDoc/MCP23008-MCP23S08-Data-Sheet-20001919F.pdf>`__,
|
||||
`Digi-Key <https://www.digikey.com/product-detail/en/microchip-technology/MCP23S08-E-P/MCP23S08-E-P-ND/735954>`__) has 8 GPIOs that can be configured independently.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
mcp23s08:
|
||||
- id: 'mcp23s08_hub'
|
||||
cs_pin: D8
|
||||
deviceaddress: 0
|
||||
|
||||
# Individual outputs
|
||||
switch:
|
||||
- platform: gpio
|
||||
name: "MCP23S08 Pin #0"
|
||||
pin:
|
||||
mcp23s08_id: mcp23s08_hub
|
||||
# Use pin number 0
|
||||
number: 0
|
||||
# One of INPUT, INPUT_PULLUP or OUTPUT
|
||||
mode: OUTPUT
|
||||
inverted: False
|
||||
|
||||
# Individual inputs
|
||||
binary_sensor:
|
||||
- platform: gpio
|
||||
name: "MCP23S08 Pin #1"
|
||||
pin:
|
||||
mcp23s08_id: mcp23s08_hub
|
||||
# Use pin number 1
|
||||
number: 1
|
||||
# One of INPUT or INPUT_PULLUP
|
||||
mode: INPUT
|
||||
inverted: False
|
||||
|
||||
Configuration variables:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- **id** (**Required**, :ref:`config-id`): The id to use for this MCP23S08 component.
|
||||
- **cs_pin** (*Required*, int): The SPI chip select pin to use
|
||||
- **deviceaddress** (*Optional*, int): The address of the chip.
|
||||
Defaults to ``0``.
|
||||
|
||||
|
||||
.. _mcp23S17-label:
|
||||
|
||||
MCP23S17
|
||||
--------
|
||||
|
||||
The MCP23S17 component allows you to use MCP23S17 I/O expanders
|
||||
(`datasheet <http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf>`__,
|
||||
`Digi-Key <https://www.digikey.com/product-detail/en/microchip-technology/MCP23S17-E-SP/MCP23S17-E-SP-ND/894276>`__) in ESPHome.
|
||||
It uses the :ref:`SPI Bus <spi>` for communication.
|
||||
|
||||
Once configured, you can use any of the 16 pins as
|
||||
pins for your projects. Within ESPHome they emulate a real internal GPIO pin
|
||||
and can therefore be used with many of ESPHome's components such as the GPIO
|
||||
binary sensor or GPIO switch.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
mcp23s17:
|
||||
- id: 'mcp23s17_hub'
|
||||
cs_pin: D8
|
||||
deviceaddress: 0
|
||||
|
||||
# Individual outputs
|
||||
switch:
|
||||
- platform: gpio
|
||||
name: "MCP23S17 Pin #0"
|
||||
pin:
|
||||
mcp23s17_id: mcp23s17_hub
|
||||
# Use pin number 0
|
||||
number: 0
|
||||
mode: OUTPUT
|
||||
inverted: False
|
||||
|
||||
# Individual inputs
|
||||
binary_sensor:
|
||||
- platform: gpio
|
||||
name: "MCP23S17 Pin #1"
|
||||
pin:
|
||||
mcp23s17_id: mcp23s17_hub
|
||||
# Use pin number 1
|
||||
number: 1
|
||||
# One of INPUT or INPUT_PULLUP
|
||||
mode: INPUT_PULLUP
|
||||
inverted: False
|
||||
|
||||
Configuration variables:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- **id** (**Required**, :ref:`config-id`): The id to use for this MCP23S17 component.
|
||||
- **cs_pin** (*Required*, int): The SPI chip select pin to use.
|
||||
- **deviceaddress** (*Optional*, int): The address of the chip.
|
||||
Defaults to ``0``.
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :ref:`spi`
|
||||
- :doc:`switch/gpio`
|
||||
- :doc:`binary_sensor/gpio`
|
||||
- :apiref:`API Reference (MCP23S08) <mcp23S08/mcp23S08.h>`
|
||||
- :apiref:`API Reference (MCP23S17) <mcp23S17/mcp23S17.h>`
|
||||
- :ghedit:`Edit`
|
@ -13,8 +13,8 @@ uploads. ESPHome natively supports this through its ``run`` and
|
||||
|
||||
ESPHome also has an "OTA safe mode". If for some reason your
|
||||
node gets into a boot loop, ESPHome 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
|
||||
this and will go over into a safe mode after the configured unsuccessful boot
|
||||
attempts (Defaults to ``10``). In that mode, all components are disabled and only Serial
|
||||
Logging+WiFi+OTA are initialized, so that you can upload a new binary.
|
||||
|
||||
.. code-block:: yaml
|
||||
@ -33,6 +33,9 @@ Configuration variables:
|
||||
- **port** (*Optional*, int): The port to use for OTA updates. Defaults
|
||||
to ``3232`` for the ESP32 and ``8266`` for the ESP8266.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **reboot_timeout** (*Optional*, :ref:`time <config-time>`): The amount of time to wait before rebooting when in
|
||||
safe mode. Defaults to ``5min``.
|
||||
- **num_attempts** (*Optional*, int): The number of attempts to wait before entering safe mode. Defaults to ``10``.
|
||||
|
||||
.. note::
|
||||
|
||||
|
@ -101,6 +101,34 @@ Configuration options:
|
||||
id(rf_bridge).send_code(0x700, 0x800, 0x1000, 0xABC123);
|
||||
|
||||
|
||||
.. _rf_bridge-send_raw_action:
|
||||
|
||||
``rf_bridge.send_raw`` Action
|
||||
-----------------------------
|
||||
|
||||
Send a raw RF code using this action in automations.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_...:
|
||||
then:
|
||||
- rf_bridge.send_code:
|
||||
raw: AAA5070008001000ABC12355
|
||||
|
||||
Configuration options:
|
||||
|
||||
- **raw** (**Required**, string, :ref:`templatable <config-templatable>`): RF raw string
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID of the RF Bridge if you have multiple components.
|
||||
|
||||
.. note::
|
||||
|
||||
This action can also be written in :ref:`lambdas <config-lambda>`:
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
id(rf_bridge).send_raw("AAA5070008001000ABC12355");
|
||||
|
||||
|
||||
.. _rf_bridge-learn_action:
|
||||
|
||||
``rf_bridge.learn`` Action
|
||||
@ -128,6 +156,118 @@ Configuration options:
|
||||
id(rf_bridge).learn();
|
||||
|
||||
|
||||
Portisch firmware
|
||||
-----------------
|
||||
|
||||
If you have flashed the secondary MCU with the `"Portisch firmware" <https://github.com/Portisch/RF-Bridge-EFM8BB1>`,
|
||||
ESPHome is able to receive the extra protocols that can be decoded as well as activate the other modes supported.
|
||||
|
||||
|
||||
.. _rf_bridge-on_advanced_code_received:
|
||||
|
||||
``on_advanced_code_received`` Trigger
|
||||
-------------------------------------
|
||||
|
||||
Similar to :ref:`rf_bridge-on_code_received`, this trigger receives the codes after advanced sniffing is started.
|
||||
To use the code, use a :ref:`lambda <config-lambda>` template, the code and the corresponding protocol and length
|
||||
are available inside that lambda under the variables named ``code``, ``protocol`` and ``length``.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_advanced_code_received:
|
||||
- homeassistant.event:
|
||||
event: esphome.rf_advanced_code_received
|
||||
data:
|
||||
length: !lambda 'char buffer [10];return itoa(data.length,buffer,16);'
|
||||
protocol: !lambda 'char buffer [10];return itoa(data.protocol,buffer,16);'
|
||||
code: !lambda 'return data.code;'
|
||||
|
||||
|
||||
.. _rf_bridge-send_advanced_code_action:
|
||||
|
||||
``rf_bridge.send_advanced_code`` Action
|
||||
---------------------------------------
|
||||
|
||||
Send an RF code using this action in automations.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_...:
|
||||
then:
|
||||
- rf_bridge.send_advanced_code:
|
||||
length: 0x04
|
||||
protocol: 0x01
|
||||
code: "ABC123"
|
||||
|
||||
Configuration options:
|
||||
|
||||
- **length** (**Required**, int, :ref:`templatable <config-templatable>`): Length of code plus protocol
|
||||
- **protocol** (**Required**, int, :ref:`templatable <config-templatable>`): RF Protocol
|
||||
- **code** (**Required**, string, :ref:`templatable <config-templatable>`): RF code
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID of the RF Bridge if you have multiple components.
|
||||
|
||||
.. note::
|
||||
|
||||
This action can also be written in :ref:`lambdas <config-lambda>`:
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
id(rf_bridge).send_advanced_code(0x04, 0x01, "ABC123");
|
||||
|
||||
|
||||
.. _rf_bridge-start_advanced_sniffing_action:
|
||||
|
||||
``rf_bridge.start_advanced_sniffing`` Action
|
||||
--------------------------------------------
|
||||
|
||||
Tell the RF Bridge to listen for the advanced/extra protocols defined in the portisch firmware.
|
||||
The decoded codes with length and protocol will be returned to :ref:`rf_bridge-on_advanced_code_received`
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_...:
|
||||
then:
|
||||
- rf_bridge.start_advanced_sniffing
|
||||
|
||||
Configuration options:
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID of the RF Bridge if you have multiple components.
|
||||
|
||||
.. note::
|
||||
|
||||
This action can also be written in :ref:`lambdas <config-lambda>`:
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
id(rf_bridge).start_advanced_sniffing();
|
||||
|
||||
|
||||
.. _rf_bridge-stop_advanced_sniffing_action:
|
||||
|
||||
``rf_bridge.stop_advanced_sniffing`` Action
|
||||
-------------------------------------------
|
||||
|
||||
Tell the RF Bridge to stop listening for the advanced/extra protocols defined in the portisch firmware.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_...:
|
||||
then:
|
||||
- rf_bridge.stop_advanced_sniffing
|
||||
|
||||
Configuration options:
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID of the RF Bridge if you have multiple components.
|
||||
|
||||
.. note::
|
||||
|
||||
This action can also be written in :ref:`lambdas <config-lambda>`:
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
id(rf_bridge).stop_advanced_sniffing();
|
||||
|
||||
|
||||
Getting started with Home Assistant
|
||||
-----------------------------------
|
||||
|
||||
|
@ -27,6 +27,7 @@ required to be set up in your configuration for this sensor to work.
|
||||
# Example configuration entry
|
||||
sensor:
|
||||
- platform: ade7953
|
||||
irq_pin: GPIO16
|
||||
voltage:
|
||||
name: ADE7953 Voltage
|
||||
current_a:
|
||||
@ -42,7 +43,8 @@ required to be set up in your configuration for this sensor to work.
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor. Defaults to ``0x38``.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x38``.
|
||||
- **irq_pin** (*Optional*, :ref:`config-pin`): The pin connected to the ADE7935 IRQ line (if connected)
|
||||
- **voltage** (*Optional*): Use the voltage value of the sensor in volt. All options from
|
||||
:ref:`Sensor <config-sensor>`.
|
||||
- **current_a** (*Optional*): Use the current value of the A channel in amperes. All options from
|
||||
@ -61,12 +63,13 @@ Use with Shelly 2.5
|
||||
The Shelly 2.5 device contains this sensor for power monitoring. An example config for the Shelly 2.5
|
||||
is given below.
|
||||
|
||||
There are two oddities with the Shelly 2.5:
|
||||
There are three oddities with the Shelly 2.5:
|
||||
|
||||
- First, the A and B channels are mixed up - the chip's A channel is label B on the outside and
|
||||
vice versa. Probably to make the PCB easier to manufacture.
|
||||
- Secondly, due to the first point the active_power values are inverted. This is fixed by
|
||||
using a multiply filter as seen in the config below.
|
||||
- Lastly, the ADE7953 IRQ line is connected to the GPIO16. The irq_pin MUST be set to GPIO16 to prevent device overheat (>70ºC idling).
|
||||
|
||||
Additionally, the device has an ::doc:`NTC temperature sensor <ntc>`.
|
||||
|
||||
@ -78,6 +81,7 @@ Additionally, the device has an ::doc:`NTC temperature sensor <ntc>`.
|
||||
|
||||
sensor:
|
||||
- platform: ade7953
|
||||
irq_pin: GPIO16
|
||||
voltage:
|
||||
name: Shelly Voltage
|
||||
current_a:
|
||||
|
@ -7,7 +7,7 @@ AM2320 Temperature+Humidity Sensor
|
||||
:keywords: am2320
|
||||
|
||||
The ``am2320`` Temperature+Humidity sensor allows you to use your AM2320
|
||||
(`datasheet <https://akizukidenshi.com/download/ds/aosong/AM2320.pdf>`__) I^2C-based sensor with ESPHome.
|
||||
(`datasheet <https://akizukidenshi.com/download/ds/aosong/AM2320.pdf>`__) I²C-based sensor with ESPHome.
|
||||
|
||||
.. figure:: images/am2320-full.jpg
|
||||
:align: center
|
||||
|
@ -45,7 +45,7 @@ and direction binary sensors.
|
||||
|
||||
Base Configuration:
|
||||
|
||||
- **address** (*Optional*, integer): The I2C address of the sensor. Defaults to ``0x39``.
|
||||
- **address** (*Optional*, integer): The I²C address of the sensor. Defaults to ``0x39``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval
|
||||
to check the sensor. Defaults to ``60s``.
|
||||
|
||||
|
@ -14,7 +14,7 @@ The AS3935 can detect the presence of lightning activity and provide an estimati
|
||||
on the distance to the head of the storm. The chip issues a notification through an interrupt
|
||||
pin.
|
||||
|
||||
The AS3935 can be configured to use either the SPI **or** I^2C protocol for data communication.
|
||||
The AS3935 can be configured to use either the SPI **or** I²C protocol for data communication.
|
||||
First choose which communication method you want to use for the sensor, set the SI pin for the appropriate
|
||||
level and set up the ESPhome integration for the chosen communication method.
|
||||
|
||||
@ -52,7 +52,7 @@ A1 I²C address selection MSB
|
||||
as3935_spi:
|
||||
cs_pin: GPIO12
|
||||
irq_pin: GPIO13
|
||||
# Example configuration for I2C (decide for one!)
|
||||
# Example configuration for I²C (decide for one!)
|
||||
as3935_i2c:
|
||||
irq_pin: GPIO12
|
||||
|
||||
@ -114,14 +114,14 @@ Sensor entries:
|
||||
the ID used for code generation.
|
||||
- All other options from :ref:`Binary Sensor <config-binary_sensor>`.
|
||||
|
||||
Configuration variables (I^2C):
|
||||
Configuration variables (I²C):
|
||||
-------------------------------
|
||||
|
||||
Use this if you want to use your AS3935 in I^2C mode.
|
||||
Use this if you want to use your AS3935 in I²C mode.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration for I2C (decide for one!)
|
||||
# Example configuration for I²C (decide for one!)
|
||||
as3935_i2c:
|
||||
irq_pin: GPIO12
|
||||
# Example shared configuration
|
||||
@ -135,7 +135,7 @@ Use this if you want to use your AS3935 in I^2C mode.
|
||||
- platform: as3935
|
||||
name: "Storm Alert"
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of
|
||||
the sensor. Defaults to ``0x03`` (``A0` and ``A1`` pins pulled low).
|
||||
Another address can be ``0x02``.
|
||||
|
||||
|
@ -41,7 +41,7 @@ Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **name** (**Required**, string): The name for the sensor.
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
|
||||
Defaults to ``0x23`` (address if address pin is pulled low). If the address pin is pulled high,
|
||||
the address is ``0x5C``.
|
||||
- **measurement_time** (*Optional*, int): Manually specify the measurement time between ``31``
|
||||
|
@ -63,7 +63,7 @@ Configuration variables:
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of
|
||||
the sensor. Defaults to ``0x77``. Another address can be ``0x76``.
|
||||
- **iir_filter** (*Optional*): Set up an Infinite Impulse Response filter to increase accuracy. One of
|
||||
``OFF``, ``2x``, ``4x``, ``16x``. Defaults to ``OFF``.
|
||||
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
@ -69,7 +69,7 @@ Configuration variables:
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of
|
||||
the sensor. Defaults to ``0x76``. Another address can be ``0x77``.
|
||||
- **iir_filter** (*Optional*): Set up an Infinite Impulse Response filter to increase accuracy. One of
|
||||
``OFF``, ``1x``, ``3x``, ``7x``, ``15x``, ``31x``, ``63x`` and ``127x``. Defaults to ``OFF``.
|
||||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
@ -53,7 +53,7 @@ Configuration variables:
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of
|
||||
the sensor. Defaults to ``0x77``. Another address can be ``0x76``.
|
||||
- **iir_filter** (*Optional*): Set up an Infinite Impulse Response filter to increase accuracy. One of
|
||||
``OFF``, ``2x``, ``4x``, ``16x``. Defaults to ``OFF``.
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
@ -8,7 +8,7 @@ DHT12 Temperature+Humidity Sensor
|
||||
|
||||
The ``dht12`` Temperature+Humidity sensor allows you to use your DHT12
|
||||
(`datasheet <http://www.robototehnika.ru/file/DHT12.pdf>`__,
|
||||
`electrodragon`_) I^2C-based sensor with ESPHome. This sensor is also called AM2320 by some sellers.
|
||||
`electrodragon`_) I²C-based sensor with ESPHome. This sensor is also called AM2320 by some sellers.
|
||||
|
||||
.. figure:: images/dht12-full.jpg
|
||||
:align: center
|
||||
|
65
components/sensor/ezo.rst
Normal file
@ -0,0 +1,65 @@
|
||||
EZO sensor circuits
|
||||
===================
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up EZO sensor circuits in esphome
|
||||
:image: ezo-ph-circuit.png
|
||||
:keywords: ezo ph ec rtd sensor circuit esphome
|
||||
|
||||
The ``ezo`` sensor platform allows you to use your EZO sensor circuits with
|
||||
ESPHome. The :ref:`I²C Bus <i2c>` is
|
||||
required to be set up in your configuration for this sensor to work.
|
||||
|
||||
.. figure:: images/ezo-ph-circuit.png
|
||||
:align: center
|
||||
:width: 80.0%
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
sensor:
|
||||
|
||||
- platform: ezo
|
||||
id: ph_ezo
|
||||
address: 99
|
||||
unit_of_measurement: "pH"
|
||||
update_interval: 10s
|
||||
|
||||
- platform: ezo
|
||||
id: rtd_ezo
|
||||
name: "RTD Temperature"
|
||||
address: 102
|
||||
accuracy_decimals: 2
|
||||
unit_of_measurement: "°C"
|
||||
update_interval: 10s
|
||||
|
||||
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **address** (**Required**, int): Specify the I²C address of the sensor.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
sensor. Defaults to ``60s``.
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
lambda calls
|
||||
------------
|
||||
|
||||
From :ref:`lambdas <config-lambda>`, you can set the temperature compensation for the
|
||||
sensors that support that option.
|
||||
|
||||
- ``set_tempcomp_value()``: Send the given temperature to the sensor.
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
// Within a lambda, set the temperature compensation value from the temperature sensor
|
||||
id(ph_ezo).set_tempcomp_value(id(rtd_ezo).state);
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :ref:`sensor-filters`
|
||||
- :apiref:`ezo/ezo.h`
|
||||
- :ghedit:`Edit`
|
@ -9,7 +9,7 @@ The ``HM3301`` sensor platform allows you to use your HM3301 particulate matter
|
||||
(`more info <http://wiki.seeedstudio.com/Grove-Laser_PM2.5_Sensor-HM3301>`__)
|
||||
sensors with ESPHome.
|
||||
|
||||
The sensor communicate with board by ``I2C`` protocol, and requires 3.3v.
|
||||
The sensor communicate with board by :ref:`I²C <i2c>` protocol, and requires 3.3v.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
|
@ -42,7 +42,7 @@ for this sensor to work.
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor. Defaults to ``0x1E``.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x1E``.
|
||||
- **field_strength_x** (*Optional*): The field strength in microtesla along the X-Axis. All options from
|
||||
:ref:`Sensor <config-sensor>`.
|
||||
- **field_strength_y** (*Optional*): The field strength in microtesla along the Y-Axis. All options from
|
||||
|
BIN
components/sensor/images/ezo-ph-circuit.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
components/sensor/images/mcp3008.jpg
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
components/sensor/images/mcp9808-full.jpg
Normal file
After Width: | Height: | Size: 208 KiB |
BIN
components/sensor/images/teleinfo-full.jpg
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
components/sensor/images/teleinfo-historical.jpg
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
components/sensor/images/teleinfo-standard.jpg
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
components/sensor/images/telink_flasher.jpg
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
components/sensor/images/tmp102-full.jpg
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
components/sensor/images/xiaomi_mhoc401.jpg
Normal file
After Width: | Height: | Size: 35 KiB |
@ -47,7 +47,7 @@ required to be set up in your configuration for this sensor to work.
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor. Defaults to ``0x40``.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x40``.
|
||||
- **shunt_resistance** (*Optional*, float): The value of the shunt resistor on the board for current calculation.
|
||||
Defaults to ``0.1 ohm``.
|
||||
- **max_voltage** (*Optional*, float): The maximum bus voltage you are expecting. ESPHome will use this to
|
||||
|
@ -42,7 +42,7 @@ required to be set up in your configuration for this sensor to work.
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the i^2c address of the sensor. Defaults to ``0x40``.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x40``.
|
||||
- **shunt_resistance** (*Optional*, float): The value of the shunt resistor on the board for current calculation.
|
||||
Defaults to ``0.1 ohm``.
|
||||
- **max_current** (*Optional*, float): The maximum current you are expecting. ESPHome will use this to
|
||||
|
@ -50,7 +50,7 @@ required to be set up in your configuration for this sensor to work.
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor. Defaults to ``0x40``.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x40``.
|
||||
- **channel_1** (*Optional*): The configuration options for the 1st channel.
|
||||
|
||||
- **shunt_resistance** (*Optional*, float): The value of the shunt resistor on this channel for current calculation.
|
||||
|
@ -3,20 +3,17 @@ MCP3008 I/O Expander
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up MCP3008 10 Bit Analog to Digital Converter in ESPHome.
|
||||
:image: mcp3008.png
|
||||
|
||||
.. note::
|
||||
|
||||
This page is incomplete and could some work. If you want to contribute, please read the
|
||||
:doc:`contributing guide </guides/contributing>`. This page is missing:
|
||||
|
||||
- An image for the front page.
|
||||
- Formal documentation of the mcp3008 sensor entry (parent, update_interval, number, etc.)
|
||||
- See Dallas sensor for reference model
|
||||
:keywords: MCP3008
|
||||
:image: images/mcp3008.jpg
|
||||
|
||||
The Microchip Technology Inc. MCP3008
|
||||
devices are successive approximation 10-bit Analogto-Digital (A/D) converters with on-board sample and
|
||||
hold circuitry. Each pin will respond with a 0-1023 result depending on the voltage it is reading
|
||||
hold circuitry.
|
||||
|
||||
.. figure:: images/mcp3008.jpg
|
||||
:align: center
|
||||
:width: 50.0%
|
||||
|
||||
|
||||
MCP3008
|
||||
-------
|
||||
@ -29,6 +26,14 @@ It uses the :ref:`SPI Bus <spi>` for communication.
|
||||
Once configured, you can use any of the 8 pins as
|
||||
sensors for your projects.
|
||||
|
||||
Each pin will respond with a voltage calculated off of the reference_voltage (default is 3.3v).
|
||||
It calculates the voltage by multplying the reference_voltage * value on the pin (basically the percentage of VREF)
|
||||
|
||||
Most configurations will set the reference_voltage = VREF (pin 13 on the chip)
|
||||
|
||||
If you want just the scaled value you can use the read_data function
|
||||
``float MCP3008::read_data(uint8_t pin)``
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
@ -41,10 +46,10 @@ sensors for your projects.
|
||||
# See `resistance` and `ntc` platorms for other options
|
||||
sensor:
|
||||
- platform: mcp3008 # Attached to pin 0 of the MCP3008.
|
||||
# The result will be a reading from 0-1023
|
||||
reference_voltage: 3.19
|
||||
update_interval: 1s
|
||||
id: freezer_temp_source
|
||||
number: 0 # pin number
|
||||
number: 0 # MCP3008 pin number
|
||||
- platform: resistance
|
||||
id: freezer_resistance_sensor
|
||||
sensor: freezer_temp_source
|
||||
@ -61,14 +66,21 @@ sensors for your projects.
|
||||
|
||||
Configuration variables:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
MCP3008 Component
|
||||
*****************
|
||||
- **id** (**Required**, :ref:`config-id`): The id to use for this MCP3008 component.
|
||||
- **cs_pin** (**Required**, int): The SPI cable select pin to use
|
||||
|
||||
MCP3008 Sensor Component
|
||||
************************
|
||||
- **id** (**Required**, :ref:`config-id`): The id of the parent MCP3008 component.
|
||||
- **number** (**Required**, int): The pin number of the MCP3008
|
||||
- **reference_voltage** (*Optional*, float): The reference voltage. Defaults to ``3.3V``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``1s``.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :ref:`spi`
|
||||
- :apiref:`mcp3008/mcp3008.h`
|
||||
- :ghedit:`Edit`
|
||||
|
56
components/sensor/mcp9808.rst
Normal file
@ -0,0 +1,56 @@
|
||||
MCP9808 Temperature Sensor
|
||||
==========================
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up MCP9808 temperature sensor.
|
||||
:image: mcp9808.jpg
|
||||
:keywords: MCP9808
|
||||
|
||||
The MCP9808 Temperature sensor allows you to use your MCP9808
|
||||
(`datasheet <http://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf>`__,
|
||||
`Adafruit <https://www.adafruit.com/product/1782>`__) sensors with
|
||||
ESPHome. The :ref:`I²C Bus <i2c>` is
|
||||
required to be set up in your configuration for this sensor to work.
|
||||
|
||||
.. figure:: images/mcp9808-full.jpg
|
||||
:align: center
|
||||
:target: `Adafruit`_
|
||||
:width: 50.0%
|
||||
|
||||
MCP9808 Temperature Sensor. Image by `Adafruit`_.
|
||||
|
||||
.. _Adafruit: https://www.adafruit.com/product/1782
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
sensor:
|
||||
- platform: mcp9808
|
||||
name: "Living Room Temperature"
|
||||
update_interval: 60s
|
||||
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **temperature** (**Required**): The information for the temperature sensor.
|
||||
|
||||
- **name** (**Required**, string): The name for the temperature sensor.
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x18``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``.
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :ref:`sensor-filters`
|
||||
- :doc:`dht`
|
||||
- :doc:`dht12`
|
||||
- :doc:`htu21d`
|
||||
- :doc:`sht3xd`
|
||||
- :doc:`hdc1080`
|
||||
- :apiref:`mcp9808/mcp9808.h`
|
||||
- `MCP9808 Library <https://github.com/adafruit/Adafruit_MCP9808_Library>`__ by `AdaFruit <https://www.adafruit.com/>`__
|
||||
- :ghedit:`Edit`
|
@ -53,7 +53,7 @@ new feature. Supporting all possible use-cases would be quite hard.
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor. Defaults to ``0x68``.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x68``.
|
||||
- **accel_x** (*Optional*): Use the X-Axis of the Accelerometer. All options from
|
||||
:ref:`Sensor <config-sensor>`.
|
||||
- **accel_y** (*Optional*): Use the Y-Axis of the Accelerometer. All options from
|
||||
|
@ -51,7 +51,7 @@ Configuration variables:
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of
|
||||
the sensor. Defaults to ``0x77``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
sensor. Defaults to ``60s``.
|
||||
|
@ -47,6 +47,10 @@ Configuration variables:
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``.
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
|
||||
- **total** (*Optional*): Report the total number of pulses
|
||||
All options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
.. note::
|
||||
@ -73,6 +77,31 @@ count the light pulses on a power meter, you can do the following:
|
||||
filters:
|
||||
- multiply: 0.06
|
||||
|
||||
|
||||
Counting total pulses
|
||||
---------------------
|
||||
|
||||
When the total sensor is configured, the pulse_counter also reports the total
|
||||
number of pulses measured. When used on a power meter, this can be used to
|
||||
measure the total consumed energy in kWh.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
sensor:
|
||||
- platform: pulse_counter
|
||||
pin: 12
|
||||
unit_of_measurement: 'kW'
|
||||
name: 'Power Meter House'
|
||||
filters:
|
||||
- multiply: 0.06
|
||||
|
||||
total:
|
||||
unit_of_measurement: 'kWh'
|
||||
name: 'Energy Meter House'
|
||||
filters:
|
||||
- multiply: 0.001
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
|
@ -59,6 +59,10 @@ Configuration variables:
|
||||
the knob further will not decrease the number. Defaults to no minimum.
|
||||
- **max_value** (*Optional*, int): The maximum value this rotary encoder will go to, turning
|
||||
the knob further will not increase the number. Defaults to no maximum.
|
||||
- **on_clockwise** (*Optional*, :ref:`Automation <automation>`): Actions to be performed when
|
||||
the knob is turned clockwise. See :ref:`sensor-rotary_encoder-triggers`.
|
||||
- **on_anticlockwise** (*Optional*, :ref:`Automation <automation>`): Actions to be performed when
|
||||
the knob is turned anticlockwise. See :ref:`sensor-rotary_encoder-triggers`.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
.. _sensor-rotary_encoder-set_value_action:
|
||||
@ -95,6 +99,23 @@ Configuration options:
|
||||
- **value** (**Required**, int, :ref:`templatable <config-templatable>`):
|
||||
The value to set the internal counter to.
|
||||
|
||||
.. _sensor-rotary_encoder-triggers:
|
||||
|
||||
``on_clockwise`` and ``on_anticlockwise`` Triggers
|
||||
--------------------------------------------------
|
||||
|
||||
With these configuration options, you can run automations based on the direction
|
||||
that the encoder has been turned, and not the value that it currently holds.
|
||||
These triggers ignore the min and max values and will trigger on every step.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_clockwise:
|
||||
- logger.log: "Turned Clockwise"
|
||||
on_anticlockwise:
|
||||
- logger.log: "Turned Anticlockwise"
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
|
@ -27,6 +27,7 @@ The :ref:`I²C Bus <i2c>` is required to be set up in your configuration for thi
|
||||
humidity:
|
||||
name: "Workshop Humidity"
|
||||
accuracy_decimals: 1
|
||||
temperature_offset: 1.5 °C
|
||||
address: 0x61
|
||||
update_interval: 5s
|
||||
|
||||
@ -34,26 +35,42 @@ The :ref:`I²C Bus <i2c>` is required to be set up in your configuration for thi
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **co2** (**Required**): The information for the CO₂ sensor.
|
||||
- **co2** (*Optional*): The information for the CO₂ sensor.
|
||||
|
||||
- **name** (**Required**, string): The name for the CO₂eq sensor.
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **temperature** (**Required**): The information for the Temperature sensor.
|
||||
- **temperature** (*Optional*): The information for the Temperature sensor.
|
||||
|
||||
- **name** (**Required**, string): The name for the temperature sensor.
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
|
||||
- **humidity** (**Required**): The information for the Humidity sensor.
|
||||
- **humidity** (*Optional*): The information for the Humidity sensor.
|
||||
|
||||
- **name** (**Required**, string): The name for the humidity sensor.
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor.
|
||||
- **temperature_offset** (*Optional*, float): Temperature and humidity
|
||||
offsets may occur when operating the sensor in end-customer
|
||||
devices. This variable allows the compensation of those effects by
|
||||
setting a temperature offset.
|
||||
|
||||
- **automatic_self_calibration** (*Optional*, bool): Whether to enable
|
||||
automatic self calibration (ASC). Defaults to ``true``.
|
||||
|
||||
- **ambient_pressure_compensation** (*Optional*, int): Enable compensation
|
||||
of measured CO₂ values based on given ambient pressure in mBar.
|
||||
|
||||
- **altitude_compensation** (*Optional*, int): Enable compensating
|
||||
deviations due to current altitude (in metres). Notice: setting
|
||||
*altitude_compensation* is ignored if *ambient_pressure_compensation*
|
||||
is set.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
|
||||
Defaults to ``0x61``.
|
||||
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
|
@ -43,7 +43,7 @@ Configuration variables:
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
|
||||
Defaults to ``0x58``.
|
||||
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
|
@ -44,7 +44,7 @@ Configuration variables:
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
|
||||
Defaults to ``0x44``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
sensor. Defaults to ``60s``.
|
||||
|
@ -47,7 +47,7 @@ Configuration variables:
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
|
||||
Defaults to ``0x70``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
sensor. Defaults to ``60s``.
|
||||
|
@ -109,7 +109,7 @@ Configuration variables:
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the i^2c address of the sensor.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
|
||||
Defaults to ``0x69``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
sensor. Defaults to ``60s``.
|
||||
|
@ -28,7 +28,7 @@ Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **name** (**Required**, string): The name for the temperature sensor.
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
|
||||
Defaults to ``0x4A``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
sensor. Defaults to ``60s``.
|
||||
|
@ -64,7 +64,7 @@ Configuration variables:
|
||||
values are ``1x`` (default), ``4x``, ``16x``, ``60x`` (highest gain).
|
||||
- **integration_time** (*Optional*): The amount of time the light sensor is exposed. Valid values are
|
||||
``2.4ms`` (default), ``24ms``, ``50ms``, ``101ms``, ``154ms``, ``700ms``.
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor. Defaults to ``0x29``.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x29``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
sensor. Defaults to ``60s``.
|
||||
|
||||
|
104
components/sensor/teleinfo.rst
Normal file
@ -0,0 +1,104 @@
|
||||
Teleinformation from Linky electrical counter.
|
||||
==============================================
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up French Teleinformation
|
||||
:image: teleinfo.jpg
|
||||
:keywords: teleinfo
|
||||
|
||||
The ``teleinfo`` component allows you to retrieve data from a
|
||||
French electrical counter using Teleinformation (`datasheet <https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_54E.pdf>`__). It works with Linky electrical
|
||||
counter but also legacy EDF electrical counter.
|
||||
|
||||
.. figure:: images/teleinfo-full.jpg
|
||||
:align: center
|
||||
:width: 50.0%
|
||||
|
||||
Linky electrical counter
|
||||
|
||||
..
|
||||
|
||||
A simple electronic assembly with an optocoupler and a resistor could
|
||||
let you retrieve detailed power consumption or power production.
|
||||
There is plenty of example on the web.
|
||||
|
||||
As the communication with the Teleinformation is done using UART, you need to
|
||||
have an :ref:`UART bus <uart>` in your configuration with the ``rx_pin``
|
||||
connected to the output of the optocoupler component. Additionally, you need to
|
||||
set the baud rate to 9600bps if counter is configured to work in standard
|
||||
mode or 1200bps in historical mode. To find out which mode you are using,
|
||||
simply press -/+ buttons on the counter and look for `Standard mode` or
|
||||
`Historical mode` as below.
|
||||
|
||||
.. figure:: images/teleinfo-standard.jpg
|
||||
:align: center
|
||||
:width: 50.0%
|
||||
|
||||
Linky electrical counter configured in standard mode.
|
||||
|
||||
..
|
||||
|
||||
.. figure:: images/teleinfo-historical.jpg
|
||||
:align: center
|
||||
:width: 50.0%
|
||||
|
||||
Linky electrical counter configured in historical mode.
|
||||
|
||||
..
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
uart:
|
||||
id: uart_bus
|
||||
rx_pin: GPIO3
|
||||
tx_pin: GPIO1
|
||||
baud_rate: 1200
|
||||
parity: EVEN
|
||||
data_bits: 7
|
||||
|
||||
sensor:
|
||||
- platform: teleinfo
|
||||
tags:
|
||||
- name: "HCHC"
|
||||
sensor:
|
||||
name: "hchc"
|
||||
unit_of_measurement: "Wh"
|
||||
icon: mdi:flash
|
||||
- name: "HCHP"
|
||||
sensor:
|
||||
name: "hchp"
|
||||
unit_of_measurement: "Wh"
|
||||
icon: mdi:flash
|
||||
- name: "PAPP"
|
||||
sensor:
|
||||
name: "papp"
|
||||
unit_of_measurement: "VA"
|
||||
icon: mdi:flash
|
||||
update_interval: 60s
|
||||
historical_mode: true
|
||||
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
|
||||
- **tags** (**Required**): Specify the tag you want to retrieve from the Teleinformation and select with what name to transmit it.
|
||||
|
||||
- **name** (**Required**, string): The name of the tag corresponding to what the electrical counter send.
|
||||
- **sensor** (**Required**, :ref:`Sensor <config-sensor>`): Associate a sensor with the tag. See options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **historical_mode** (*Optional*): Wether to use historical mode or standard mode.
|
||||
With historical mode, baudrate of 1200 must be used whereas 9600 must be used in
|
||||
standard mode. Defaults to ``False``.
|
||||
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
|
||||
sensor. Defaults to ``60s``.
|
||||
|
||||
- **uart_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`UART Component <uart>` if you want
|
||||
to use multiple UART buses.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :apiref:`teleinfo/teleinfo.h`
|
||||
- :ghedit:`Edit`
|
52
components/sensor/tmp102.rst
Normal file
@ -0,0 +1,52 @@
|
||||
TMP102 Temperature Sensor
|
||||
=========================
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up TMP102 temperature sensors.
|
||||
:image: tmp102.jpg
|
||||
:keywords: TMP102
|
||||
|
||||
The TMP102 Temperature sensor allows you to use your TMP102
|
||||
(`Sparkfun <https://www.sparkfun.com/products/13314>`__) sensors with
|
||||
ESPHome. The :ref:`I²C Bus <i2c>` is required to be set up in your
|
||||
configuration for this sensor to work.
|
||||
|
||||
.. figure:: images/tmp102-full.jpg
|
||||
:align: center
|
||||
:width: 50.0%
|
||||
|
||||
TMP102 Temperature Sensor.
|
||||
|
||||
.. figure:: images/temperature.png
|
||||
:align: center
|
||||
:width: 80.0%
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
sensor:
|
||||
- platform: tmp102
|
||||
name: "Living Room Temperature"
|
||||
update_interval: 60s
|
||||
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **name** (**Required**, string): The name for the temperature sensor.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``.
|
||||
- **address** (*Optional*, int): The I²C address of the sensor. Defauls to ``0x48``.
|
||||
See :ref:`I²C Addresses <tmp117_i2c_addresses>` for more information.
|
||||
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :ref:`sensor-filters`
|
||||
- :doc:`dht`
|
||||
- :doc:`dht12`
|
||||
- :doc:`hdc1080`
|
||||
- :doc:`sht3xd`
|
||||
- :doc:`htu21d`
|
||||
- :apiref:`tmp102/tmp102.h`
|
||||
- :ghedit:`Edit`
|
@ -20,7 +20,7 @@ sensors with ESPHome.
|
||||
|
||||
.. _Sparkfun: https://www.sparkfun.com/products/15805
|
||||
|
||||
The TMP117 is a high precision temperature sensor that communicates over I2C. Each sensor is tested on a NIST tracable test setup during Texas Instruments' production process. Accuracy should be at worst 0.1C across the -20C to +50C temperature range.
|
||||
The TMP117 is a high precision temperature sensor that communicates over I²C. Each sensor is tested on a NIST tracable test setup during Texas Instruments' production process. Accuracy should be at worst 0.1C across the -20C to +50C temperature range.
|
||||
|
||||
To use the sensor, first set up an :ref:`I²C Bus <i2c>` and connect the sensor to the specified pins.
|
||||
|
||||
|
@ -37,7 +37,7 @@ Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **name** (**Required**, string): The name for the sensor.
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor. Defaults to ``0x39``.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x39``.
|
||||
- **integration_time** (*Optional*, :ref:`config-time`):
|
||||
The time the sensor will take for each measurement. Longer means more accurate values. One of
|
||||
``14ms``, ``101ms``, ``402ms``. Defaults to ``402ms``.
|
||||
|
@ -53,7 +53,7 @@ Configuration variables:
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
- **long_range** (*Optional*, bool): Set the sensor in long range mode. The signal_rate_limit is overruled
|
||||
to ``0.1``. Defaults to false.
|
||||
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor. Defaults to ``0x29``.
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x29``.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
|
||||
See Also
|
||||
|
@ -4,7 +4,7 @@ Xiaomi Mijia BLE Sensors
|
||||
.. seo::
|
||||
:description: Instructions for setting up Xiaomi Mi Home (Mijia) bluetooth-based sensors in ESPHome.
|
||||
:image: xiaomi_mijia_logo.jpg
|
||||
:keywords: Xiaomi, Mi Home, Mijia, BLE, Bluetooth, HHCCJCY01, GCLS002, HHCCPOT002, LYWSDCGQ, LYWSD02, CGG1, LYWSD03MMC, CGD1, JQJCY01YM, MUE4094RT, WX08ZM
|
||||
:keywords: Xiaomi, Mi Home, Mijia, BLE, Bluetooth, HHCCJCY01, GCLS002, HHCCPOT002, LYWSDCGQ, LYWSD02, CGG1, LYWSD03MMC, CGD1, JQJCY01YM, MUE4094RT, WX08ZM, MHO, C401, MHOC401
|
||||
|
||||
The ``xiaomi_ble`` sensor platform lets you track the output of Xiaomi Bluetooth Low Energy devices using the :doc:`/components/esp32_ble_tracker`. This component will track, for example, the temperature, humidity, moisture, conductivity, illuminance, formaldehyde, mosquito tablet and battery level of the device every time the sensor sends out a BLE broadcast. Contrary to other implementations, ``xiaomi_ble`` listense passively to advertisement packets and does not pair with the device. Hence ESPHome has no impact on battery life.
|
||||
|
||||
@ -115,12 +115,14 @@ Configuration example:
|
||||
LYWSD02
|
||||
*******
|
||||
|
||||
Hygro thermometer, rectangular body, e-ink display, broadcasts temperature and humidity values, no battery status
|
||||
Hygro thermometer, rectangular body, e-ink display, broadcasts temperature, humidity and battery level.
|
||||
|
||||
.. figure:: images/xiaomi_lywsd02.jpg
|
||||
:align: center
|
||||
:width: 30.0%
|
||||
|
||||
- Battery Level, needs xiaomi firmware 1.1.2_0085
|
||||
|
||||
Configuration example:
|
||||
|
||||
.. code-block:: yaml
|
||||
@ -132,6 +134,8 @@ Configuration example:
|
||||
name: "LYWSD02 Temperature"
|
||||
humidity:
|
||||
name: "LYWSD02 Humidity"
|
||||
battery_level:
|
||||
name: "LYWSD02 Battery Level"
|
||||
|
||||
CGG1
|
||||
****
|
||||
@ -159,13 +163,21 @@ Configuration example:
|
||||
LYWSD03MMC
|
||||
**********
|
||||
|
||||
Hygro thermometer, small square body, segment LCD, encrypted, broadcasts temperature, humidity and battery status. Requires a bindkey in order to decrypt the received data (see :ref:`obtaining_the_bindkey`).
|
||||
Hygro thermometer, small square body, segment LCD, encrypted, broadcasts temperature, humidity and battery status.
|
||||
|
||||
.. figure:: images/xiaomi_lywsd03mmc.jpg
|
||||
:align: center
|
||||
:width: 30.0%
|
||||
|
||||
Configuration example:
|
||||
There are the following possibilities to operate this sensor:
|
||||
|
||||
1. Xiaomi stock firmware (requires a bindkey in order to decrypt the received data, see :ref:`obtaining_the_bindkey`)
|
||||
2. Device flashed with `ATC MiThermometer <https://github.com/atc1441/ATC_MiThermometer>`__ custom firmware
|
||||
|
||||
- "Mi Like" advertisement (dummy bindkey required)
|
||||
- "Custom" advertisement (no bindkey required)
|
||||
|
||||
Configuration example for Xiaomi stock firmware or ATC MiThermometer firmware set to "Mi Like" advertisement:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
@ -180,6 +192,48 @@ Configuration example:
|
||||
battery_level:
|
||||
name: "LYWSD03MMC Battery Level"
|
||||
|
||||
Configuration example for ATC MiThermometer firmware set to "Custom" advertisement:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
sensor:
|
||||
- platform: atc_mithermometer
|
||||
mac_address: "A4:C1:38:B1:CD:7F"
|
||||
temperature:
|
||||
name: "ATC Temperature"
|
||||
humidity:
|
||||
name: "ATC Humidity"
|
||||
battery_level:
|
||||
name: "ATC Battery-Level"
|
||||
battery_voltage:
|
||||
name: "ATC Battery-Voltage"
|
||||
|
||||
MHO-C401
|
||||
**********
|
||||
|
||||
Hygro thermometer, square body, e-ink display, encrypted, broadcasts temperature, humidity and battery status. Requires a bindkey in order to decrypt the received data (see :ref:`obtaining_the_bindkey`).
|
||||
|
||||
.. figure:: images/xiaomi_mhoc401.jpg
|
||||
:align: center
|
||||
:width: 30.0%
|
||||
|
||||
( MHO-C201 doesn't have BT )
|
||||
|
||||
Configuration example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
sensor:
|
||||
- platform: xiaomi_mhoc401
|
||||
mac_address: "A4:C1:38:B1:CD:7F"
|
||||
bindkey: "eef418daf699a0c188f3bfd17e4565d9"
|
||||
temperature:
|
||||
name: "MHOC401 Temperature"
|
||||
humidity:
|
||||
name: "MHOC401 Humidity"
|
||||
battery_level:
|
||||
name: "MHOC401 Battery Level"
|
||||
|
||||
CGD1
|
||||
****
|
||||
|
||||
@ -299,6 +353,8 @@ Configuration example:
|
||||
name: "MJYD02YL-A Light Status"
|
||||
battery_level:
|
||||
name: "MJYD02YL-A Battery Level"
|
||||
illuminance:
|
||||
name: "MJYD02YL-A Illuminance"
|
||||
|
||||
Setting Up Devices
|
||||
------------------
|
||||
@ -340,14 +396,32 @@ It can sometimes take some time for the first BLE broadcast to be received. Once
|
||||
Obtaining The Bindkey
|
||||
---------------------
|
||||
|
||||
To set up an encrypted device such as the LYWSD03MMC or CGD1, you first need to obain the bind key. The ``xiaomi_ble`` sensor component is not able to automatically generate a bind key, so you need a different option.
|
||||
To set up an encrypted device such as the LYWSD03MMC (with Xiaomi stock firmware) and CGD1, you first need to obtain the bind key. The ``xiaomi_ble`` sensor component is not able to automatically generate a bind key so other workarounds are necessary.
|
||||
|
||||
LYWSD03MMC
|
||||
**********
|
||||
|
||||
If the LYWSD03MMC sensor is operated with the Xiaomi stock firmware, you can use the `TeLink flasher application <https://atc1441.github.io/TelinkFlasher.html>`__ to easily generate a new bind key and upload the key to the device without the need to flash a new firmware (see figure). For this, you load the flasher `webpage <https://atc1441.github.io/TelinkFlasher.html>`__ with a `supported browser <https://github.com/WebBluetoothCG/web-bluetooth/blob/master/implementation-status.md>`__ and connect the device by pressing "Connect". After the connection is established, you press the "Do Activation" button and the new key will be shown in the "Mi Bind Key" field. The key can be copied directly into the sensor YAML configuration.
|
||||
|
||||
.. figure:: images/telink_flasher.jpg
|
||||
:align: center
|
||||
:width: 100.0%
|
||||
|
||||
Telink flasher application.
|
||||
|
||||
.. warning::
|
||||
|
||||
The new bind key will work with ESPHome, but the Mi Home app will not recognise the sensor anymore once the device has been activated by the TeLink flasher application. To use the sensor again with the Xiaomi Mi Home app, the device needs to be removed and then re-added inside the Mi Home app.
|
||||
|
||||
Other encrypted devices
|
||||
***********************
|
||||
|
||||
The easiest method (confirmed to work for LYWSD03MMC) is to use the `Telink flasher method <https://github.com/atc1441/ATC_MiThermometer>`__. The accompanying `video
|
||||
<https://www.youtube.com/watch?v=NXKzFG61lNs>`_ shows how to wirelessly flash a LYWSD03MMC, or how to obtain the bind key of the stock firmware (watch till around 13:10). The custom firmware allows you to change several settings of the device, including the smiley and the advertising interval. Keep in mind that when flashing the custom firmware, you need to enable the 'Advertising Type' to be 'Mi Like' and to give ESPHome a dummy bind key, as it still expects one even though the custom firmware does not encrypt the data.
|
||||
|
||||
The other option is to use the original Mi Home app to add the sensor once. While adding the device, a new key is generated and uploaded into the Xiaomi cloud and to the device itself. Currently a chinese server needs to be selected as the rest of the world doesn't support most of these devices yet. Once generated, the key will not change again until the device is removed and re-added in the Xiaomi app.
|
||||
|
||||
In order to obtain the bind key, a SSL packet sniffer needs to be setup on either an Android phone or the iPhone. A good choice for Android is the `Remote PCAP <https://play.google.com/store/apps/details?id=com.egorovandreyrm.pcapremote&hl=en>`__ in combination with `Wireshark <https://www.wireshark.org/>`__. A tutorial on how to setup the Remote PCAP packet sniffer can be found `here <https://egorovandreyrm.com/pcap-remote-tutorial/>`__. Instructions how to obtain the key using an iPhone are `here <https://github.com/custom-components/sensor.mitemp_bt/blob/master/faq.md#my-sensors-ble-advertisements-are-encrypted-how-can-i-get-the-key>`__. Once the traffic between the Mi Home app and the Xiaomi has been recorded, the bind key will show in clear text:
|
||||
In order to obtain the bind key, a SSL packet sniffer needs to be setup on either an Android phone or the iPhone. A good choice for Android is the `Remote PCAP <https://play.google.com/store/apps/details?id=com.egorovandreyrm.pcapremote&hl=en>`__ in combination with `Wireshark <https://www.wireshark.org/>`__. A tutorial on how to setup the Remote PCAP packet sniffer can be found `here <https://egorovandreyrm.com/pcap-remote-tutorial/>`__ and `here <https://github.com/ahpohl/xiaomi_lywsd03mmc>`__. Instructions how to obtain the key using an iPhone are `here <https://github.com/custom-components/sensor.mitemp_bt/blob/master/faq.md#my-sensors-ble-advertisements-are-encrypted-how-can-i-get-the-key>`__. Once the traffic between the Mi Home app and the Xiaomi servers has been recorded, the bind key will show in clear text:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
@ -367,6 +441,7 @@ See Also
|
||||
- Passive BLE monitor integration for Home Assistant (ble_monitor custom component) `<https://github.com/custom-components/ble_monitor>`__
|
||||
by `@Magalex2x14 <https://github.com/Magalex2x14>`__ and `@Ernst79 <https://github.com/Ernst79>`__
|
||||
- Xiaomi LYWSD03MMC passive sensor readout `<https://github.com/ahpohl/xiaomi_lywsd03mmc>`__ by `@ahpohl <https://github.com/ahpohl>`__
|
||||
- Mi-standardauth `<https://github.com/danielkucera/mi-standardauth>`__
|
||||
- Custom firmware for the Xiaomi Thermometer LYWSD03MMC `<https://github.com/atc1441/ATC_MiThermometer>`__
|
||||
- TeLink flasher application `<https://atc1441.github.io/TelinkFlasher.html>`__
|
||||
|
||||
- :ghedit:`Edit`
|
||||
|
@ -55,6 +55,9 @@ Advanced Options:
|
||||
- **restore** (*Optional*, boolean): Whether to restore the state of the servo motor at startup.
|
||||
This is useful if you have an absolute servo motor and it goes back to its 0 position at startup.
|
||||
Defaults to ``false``.
|
||||
- **auto_detach_time** (*Optional*, :ref:`config-time`): The time after reaching the target value when the servo will be detached`, if set to zero, servo will not be detached. Defaults to ``0s``.
|
||||
- **transition_length** (*Optional*, :ref:`config-time`): The time needed for a full movement (-1.0 to 1.0). This will effectively limit the speed of the servo, the larger the value, the slowest the servo will move. Defaults to `` 0s``
|
||||
This can slow down the servo to avoid loud noises or just make the movement not jerking.
|
||||
|
||||
.. note::
|
||||
|
||||
|
@ -17,7 +17,7 @@ The SX1509 can do much more than just simple digital pin control. It can produce
|
||||
And, with a built-in keypad engine, it can interface with up to 64 buttons set up in an 8x8 matrix.
|
||||
|
||||
Any option accepting a :ref:`Pin Schema <config-pin_schema>` can theoretically be used, but some more
|
||||
complicated components that use the pin schema will not work. For example the I2C or SPI pins.
|
||||
complicated components that use the pin schema will not work. For example the I²C or SPI pins.
|
||||
|
||||
.. figure:: images/sx1509-full.jpg
|
||||
:align: center
|
||||
|
@ -10,23 +10,16 @@ Time
|
||||
|
||||
The ``time`` component allows you to set up real time clock time sources for ESPHome.
|
||||
You can then get the current time in :ref:`lambdas <config-lambda>`.
|
||||
Currently only SNTP (internet-based), Home Assistant and GPS time sources are supported.
|
||||
|
||||
Home Assistant Time Source
|
||||
--------------------------
|
||||
.. _base_time_config:
|
||||
|
||||
The preferred way to get time in ESPHome is using Home Assistant.
|
||||
With the ``homeassistant`` time platform, the :doc:`native API </components/api>` connection
|
||||
to Home Assistant will be used to periodically synchronize the current time.
|
||||
Base Time Configuration
|
||||
-----------------------
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
time:
|
||||
- platform: homeassistant
|
||||
id: homeassistant_time
|
||||
All time configuration schemas inherit these options.
|
||||
|
||||
Configuration variables:
|
||||
************************
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Specify the ID of the time for use in lambdas.
|
||||
- **timezone** (*Optional*, string): Manually tell ESPHome what time zone to use with `this format
|
||||
@ -36,182 +29,29 @@ Configuration variables:
|
||||
that is running ESPHome, but this might not always be accurate.
|
||||
- **on_time** (*Optional*, :ref:`Automation <automation>`): Automation to run at specific intervals using
|
||||
a cron-like syntax. See :ref:`time-on_time`.
|
||||
- **on_time_sync** (*Optional*, :ref:`Automation <automation>`): Automation to run when the time source
|
||||
could be (re-)synchronized.. See :ref:`time-on_time_sync`.
|
||||
|
||||
SNTP Configuration
|
||||
------------------
|
||||
.. _time-has_time_condition:
|
||||
|
||||
``time.has_time`` Condition
|
||||
***************************
|
||||
|
||||
This :ref:`Condition <config-condition>` checks if time has been set and is valid.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
time:
|
||||
- platform: sntp
|
||||
id: sntp_time
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Specify the ID of the time for use in lambdas.
|
||||
- **timezone** (*Optional*, string): Manually tell ESPHome what time zone to use with `this format
|
||||
<https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html>`__ (warning: the
|
||||
format is quite complicated) or the simpler `TZ database name <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>`__
|
||||
in the form <Region>/<City>.
|
||||
ESPHome tries to automatically infer the time zone string based on the time zone of the computer that is running
|
||||
ESPHome, but this might not always be accurate.
|
||||
- **servers** (*Optional*, list of strings): Choose up to 3 NTP servers that are used for the clock source.
|
||||
Defaults to ``0.pool.ntp.org``, ``1.pool.ntp.org`` and ``2.pool.ntp.org``
|
||||
- **on_time** (*Optional*, :ref:`Automation <automation>`): Automation to run at specific intervals using
|
||||
a cron-like syntax. See :ref:`time-on_time`.
|
||||
|
||||
.. note::
|
||||
|
||||
If your are using :ref:`wifi-manual_ip` make sure to configure a DNS Server (dns1, dns2) or use only IP addresses for the NTP servers.
|
||||
|
||||
GPS Time Source
|
||||
---------------
|
||||
|
||||
You first need to set up the :doc:`GPS </components/gps>` component.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
time:
|
||||
- platform: gps
|
||||
id: gps_time
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Specify the ID of the time for use in lambdas.
|
||||
- **timezone** (*Optional*, string): Manually tell ESPHome what time zone to use with `this format
|
||||
<https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html>`__ (warning: the format is quite complicated)
|
||||
or the simpler `TZ database name <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>`__ in the form
|
||||
<Region>/<City>. ESPHome tries to automatically infer the time zone string based on the time zone of the computer
|
||||
that is running ESPHome, but this might not always be accurate.
|
||||
- **on_time** (*Optional*, :ref:`Automation <automation>`): Automation to run at specific intervals using
|
||||
a cron-like syntax. See :ref:`time-on_time`.
|
||||
|
||||
Use In Lambdas
|
||||
--------------
|
||||
|
||||
To get the current local time with the time zone applied
|
||||
in :ref:`lambdas <config-lambda>`, just call the ``.now()`` method like so:
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
auto time = id(sntp_time).now();
|
||||
|
||||
Alternatively, you can use ``.utcnow()`` to get the current UTC time.
|
||||
|
||||
The returned object can either be used directly to get the current minute, hour, ... as numbers or a string can be
|
||||
created based on a given format. If you want to get the current time attributes, you have these fields
|
||||
|
||||
==================== ======================================== ======================================== ====================
|
||||
**Name** **Meaning** **Range (inclusive)** **Example**
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.second`` Seconds after the minute [0-60] (generally [0-59], 42
|
||||
extra range is to accommodate leap
|
||||
seconds.)
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.minute`` Minutes after the hour [0-59] 31
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.hour`` Hours since midnight [0-23] 16
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.day_of_week`` Day of the week, sunday=1 [1-7] 7 (saturday)
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.day_of_month`` Day of the month [1-31] 18
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.day_of_year`` Day of the year [1-366] 231
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.month`` Month, january=1 [1-12] 8 (august)
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.year`` Year since 0 A.C. [1970-∞[ 2018
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.is_dst`` Is daylight savings time false, true true
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.timestamp`` Unix epoch time (seconds since UTC [-2147483648 - 2147483647] (negative 1534606002
|
||||
Midnight January 1, 1970) values for time past January 19th 2038)
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.is_valid()`` Basic check if the time is valid false, true true
|
||||
(i.e. not January 1st 1970)
|
||||
==================== ======================================== ======================================== ====================
|
||||
|
||||
.. note::
|
||||
|
||||
Before the ESP has connected to the internet and can get the current time the date will be January 1st 1970. So
|
||||
make sure to check if ``.is_valid()`` evaluates to ``true`` before triggering any action.
|
||||
|
||||
|
||||
.. _strftime:
|
||||
|
||||
strftime
|
||||
^^^^^^^^
|
||||
|
||||
The second way to use the time object is to directly transform it into a string like ``2018-08-16 16:31``.
|
||||
This is directly done using C's `strftime <http://www.cplusplus.com/reference/ctime/strftime/>`__ function which
|
||||
allows for a lot of flexibility.
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
# For example, in a display object
|
||||
it.strftime(0, 0, id(font), "%Y-%m-%d %H:%M", id(time).now());
|
||||
|
||||
The strftime will parse the format string (here ``"%Y-%m-%d %H:%M"``) and match anything beginning with
|
||||
a percent sign ``%`` and a letter corresponding to one of the below formatting options and replace it
|
||||
with the current time representation of that format option.
|
||||
|
||||
============= ============================================================== =========================
|
||||
**Directive** **Meaning** **Example**
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%a`` Abbreviated **weekday** name Sat
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%A`` Full **weekday** name Saturday
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%w`` **Weekday** as decimal number, where 0 is Sunday and 6 6
|
||||
is Saturday
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%d`` **Day of month** as zero-padded decimal number 01, 02, ..., 31
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%b`` Abbreviated **month** name Aug
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%B`` Full **month** name August
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%m`` **Month** as zero-padded decimal number 01, 02, ..., 12
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%y`` **Year** without century as a zero-padded decimal number 00, 01, ..., 99
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%Y`` **Year** with century as a decimal number 2018
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%H`` **Hour** (24-hour clock) as a zero-padded decimal number 00, 01, ..., 23
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%I`` **Hour** (12-hour clock) as a zero-padded decimal number 00, 01, ..., 12
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%p`` **AM or PM** designation AM, PM
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%M`` **Minute** as a zero-padded decimal number 00, 01, ..., 59
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%S`` **Second** as a zero-padded decimal number 00, 01, ..., 59
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%j`` **Day of year** as a zero-padded decimal number 001, 002, ..., 366
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%U`` **Week number of year** (Sunday as the first day of the week) 00, 01, ..., 53
|
||||
as a zero-padded decimal number. All days in a new year
|
||||
preceding the first Sunday are considered to be in week 0.
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%W`` **Week number of year** (Monday as the first day of the week) 00, 01, ..., 53
|
||||
as a zero-padded decimal number. All days in a new year
|
||||
preceding the first Monday are considered to be in week 0.
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%c`` **Date and time** representation Sat Aug 18 16:31:42 2018
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%x`` **Date** representation 08/18/18
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%X`` **Time** representation 16:31:42
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%%`` A literal ``%`` character %
|
||||
============= ============================================================== =========================
|
||||
on_...:
|
||||
if:
|
||||
condition:
|
||||
time.has_time:
|
||||
then:
|
||||
- logger.log: Time has been set and is valid!
|
||||
|
||||
.. _time-on_time:
|
||||
|
||||
``on_time``
|
||||
-----------
|
||||
``on_time`` Trigger
|
||||
*******************
|
||||
|
||||
This powerful automation can be used to run automations at specific intervals at
|
||||
specific times of day. The syntax is a subset of the `crontab <https://crontab.guru/>`__ syntax.
|
||||
@ -318,7 +158,6 @@ In the ``seconds:``, ``minutes:``, ... fields you can use the following operator
|
||||
Lastly, the ``*`` operator matches every number. In the example above, ``*`` could for example be substituted
|
||||
with ``0-59``.
|
||||
|
||||
|
||||
.. warning::
|
||||
|
||||
Please note the following automation would trigger for each second in the minutes 0,5,10,15 and not
|
||||
@ -334,6 +173,300 @@ In the ``seconds:``, ``minutes:``, ... fields you can use the following operator
|
||||
then:
|
||||
- switch.toggle: my_switch
|
||||
|
||||
.. _time-on_time_sync:
|
||||
|
||||
``on_time_sync`` Trigger
|
||||
************************
|
||||
|
||||
This automation is triggered after a time source successfully retrieves the current time.
|
||||
See the :ref:`DS1307 configuration example <ds1307-config_example>` for a scenario
|
||||
where a network time synchronization from a home assistant server trigger a write
|
||||
to an external hardware real time clock chip.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_time_sync:
|
||||
then:
|
||||
- logger.log: "Synchronized system clock"
|
||||
|
||||
.. note::
|
||||
|
||||
Components should trigger ``on_time_sync`` when they update the system clock. However, not all real time components
|
||||
behave exactly the same. Components could e.g. decide to trigger only when a significant time change has been
|
||||
observed, others could trigger whenever their time sync mechanism runs - even if that didn't effectively change
|
||||
the system time. Some (such as SNTP) could even trigger when another real time component is responsible for the
|
||||
change in time.
|
||||
|
||||
Home Assistant Time Source
|
||||
--------------------------
|
||||
|
||||
The preferred way to get time in ESPHome is using Home Assistant.
|
||||
With the ``homeassistant`` time platform, the :doc:`native API </components/api>` connection
|
||||
to Home Assistant will be used to periodically synchronize the current time.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
time:
|
||||
- platform: homeassistant
|
||||
id: homeassistant_time
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- All other from :ref:`base_time_config`.
|
||||
|
||||
SNTP Configuration
|
||||
------------------
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
time:
|
||||
- platform: sntp
|
||||
id: sntp_time
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **servers** (*Optional*, list of strings): Choose up to 3 NTP servers that are used for the clock source.
|
||||
Defaults to ``0.pool.ntp.org``, ``1.pool.ntp.org`` and ``2.pool.ntp.org``
|
||||
- All other options from :ref:`base_time_config`.
|
||||
|
||||
.. note::
|
||||
|
||||
If your are using :ref:`wifi-manual_ip` make sure to configure a DNS Server (dns1, dns2) or use only IP addresses for the NTP servers.
|
||||
|
||||
.. warning::
|
||||
|
||||
Due to limitations of the SNTP implementation, this component will trigger ``on_time_sync`` only once when it detects that the
|
||||
system clock has been set, even if the update was not done by the SNTP implementation!
|
||||
This must be taken into consideration when SNTP is used together with other real time componnents, where another time source could
|
||||
update the time before SNTP synchronizes.
|
||||
|
||||
GPS Time Source
|
||||
---------------
|
||||
|
||||
You first need to set up the :doc:`GPS </components/gps>` component.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
time:
|
||||
- platform: gps
|
||||
id: gps_time
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- All other from :ref:`base_time_config`.
|
||||
|
||||
DS1307 Time Source
|
||||
------------------
|
||||
|
||||
You first need to set up the :doc:`I2C </components/i2c>` component.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
time:
|
||||
- platform: ds1307
|
||||
id: ds1307_time
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **address** (*Optional*, int): Manually specify the I²C address of the RTC. Defaults to ``0x68``.
|
||||
- All other options from :ref:`base_time_config`.
|
||||
|
||||
.. _ds1307-write_time_action:
|
||||
|
||||
``ds1307.write_time`` Action
|
||||
****************************
|
||||
|
||||
This :ref:`Action <config-action>` triggers a synchronization of the current system time to the RTC hardware.
|
||||
|
||||
.. note::
|
||||
|
||||
The DS1307 component will *not* write the RTC clock if not triggered *explicitly* by this action.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_...:
|
||||
- ds1307.write_time
|
||||
|
||||
# in case you need to specify the DS1307 id
|
||||
- ds1307.write_time:
|
||||
id: ds1307_time
|
||||
|
||||
.. _ds1307-read_time_action:
|
||||
|
||||
``ds1307.read_time`` Action
|
||||
***************************
|
||||
|
||||
This :ref:`Action <config-action>` triggers a synchronization of the current system time from the RTC hardware.
|
||||
|
||||
.. note::
|
||||
|
||||
The DS1307 component will automatically read the RTC clock every 15 minutes by default and synchronize the
|
||||
system clock when a valid timestamp was read from the RTC. (The ``update_interval`` can be changed.)
|
||||
This action can be used to trigger *additional* synchronizations.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_...:
|
||||
- ds1307.read_time
|
||||
|
||||
# in case you need to specify the DS1307 id
|
||||
- ds1307.read_time:
|
||||
id: ds1307_time
|
||||
|
||||
.. _ds1307-config_example:
|
||||
|
||||
Configuration Example
|
||||
*********************
|
||||
|
||||
In a typical setup, you will have at least one additional time source to synchronize the RTC with. Such an
|
||||
external time source might not always be available e.g. due to a limited network connection.
|
||||
In order to have a valid, reliable system time, the system should read the RTC once at start and then try to
|
||||
synchronize with an external reliable time source.
|
||||
When a synchronization to another time source was successfull, the RTC can be resynchronized.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
esphome:
|
||||
on_boot:
|
||||
then:
|
||||
# read the RTC time once when the system boots
|
||||
ds1307.read_time:
|
||||
|
||||
time:
|
||||
- platform: ds1307
|
||||
# repeated synchronization is not necessary unless the external RTC
|
||||
# is much more accurate than the internal clock
|
||||
update_interval: never
|
||||
- platform: homeassistant
|
||||
# instead try to synchronize via network repeatedly ...
|
||||
on_time_sync:
|
||||
then:
|
||||
# ... and update the RTC when the synchronization was successful
|
||||
ds1307.write_time:
|
||||
|
||||
Use In Lambdas
|
||||
--------------
|
||||
|
||||
To get the current local time with the time zone applied
|
||||
in :ref:`lambdas <config-lambda>`, just call the ``.now()`` method like so:
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
auto time = id(sntp_time).now();
|
||||
|
||||
Alternatively, you can use ``.utcnow()`` to get the current UTC time.
|
||||
|
||||
The returned object can either be used directly to get the current minute, hour, ... as numbers or a string can be
|
||||
created based on a given format. If you want to get the current time attributes, you have these fields
|
||||
|
||||
==================== ======================================== ======================================== ====================
|
||||
**Name** **Meaning** **Range (inclusive)** **Example**
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.second`` Seconds after the minute [0-60] (generally [0-59], 42
|
||||
extra range is to accommodate leap
|
||||
seconds.)
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.minute`` Minutes after the hour [0-59] 31
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.hour`` Hours since midnight [0-23] 16
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.day_of_week`` Day of the week, sunday=1 [1-7] 7 (saturday)
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.day_of_month`` Day of the month [1-31] 18
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.day_of_year`` Day of the year [1-366] 231
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.month`` Month, january=1 [1-12] 8 (august)
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.year`` Year since 0 A.C. [1970-∞[ 2018
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.is_dst`` Is daylight savings time false, true true
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.timestamp`` Unix epoch time (seconds since UTC [-2147483648 - 2147483647] (negative 1534606002
|
||||
Midnight January 1, 1970) values for time past January 19th 2038)
|
||||
-------------------- ---------------------------------------- ---------------------------------------- --------------------
|
||||
``.is_valid()`` Basic check if the time is valid false, true true
|
||||
(i.e. not January 1st 1970)
|
||||
==================== ======================================== ======================================== ====================
|
||||
|
||||
.. note::
|
||||
|
||||
Before the ESP has connected to the internet and can get the current time the date will be January 1st 1970. So
|
||||
make sure to check if ``.is_valid()`` evaluates to ``true`` before triggering any action.
|
||||
|
||||
|
||||
.. _strftime:
|
||||
|
||||
strftime
|
||||
********
|
||||
|
||||
The second way to use the time object is to directly transform it into a string like ``2018-08-16 16:31``.
|
||||
This is directly done using C's `strftime <http://www.cplusplus.com/reference/ctime/strftime/>`__ function which
|
||||
allows for a lot of flexibility.
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
# For example, in a display object
|
||||
it.strftime(0, 0, id(font), "%Y-%m-%d %H:%M", id(time).now());
|
||||
|
||||
The strftime will parse the format string (here ``"%Y-%m-%d %H:%M"``) and match anything beginning with
|
||||
a percent sign ``%`` and a letter corresponding to one of the below formatting options and replace it
|
||||
with the current time representation of that format option.
|
||||
|
||||
============= ============================================================== =========================
|
||||
**Directive** **Meaning** **Example**
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%a`` Abbreviated **weekday** name Sat
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%A`` Full **weekday** name Saturday
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%w`` **Weekday** as decimal number, where 0 is Sunday and 6 6
|
||||
is Saturday
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%d`` **Day of month** as zero-padded decimal number 01, 02, ..., 31
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%b`` Abbreviated **month** name Aug
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%B`` Full **month** name August
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%m`` **Month** as zero-padded decimal number 01, 02, ..., 12
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%y`` **Year** without century as a zero-padded decimal number 00, 01, ..., 99
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%Y`` **Year** with century as a decimal number 2018
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%H`` **Hour** (24-hour clock) as a zero-padded decimal number 00, 01, ..., 23
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%I`` **Hour** (12-hour clock) as a zero-padded decimal number 00, 01, ..., 12
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%p`` **AM or PM** designation AM, PM
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%M`` **Minute** as a zero-padded decimal number 00, 01, ..., 59
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%S`` **Second** as a zero-padded decimal number 00, 01, ..., 59
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%j`` **Day of year** as a zero-padded decimal number 001, 002, ..., 366
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%U`` **Week number of year** (Sunday as the first day of the week) 00, 01, ..., 53
|
||||
as a zero-padded decimal number. All days in a new year
|
||||
preceding the first Sunday are considered to be in week 0.
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%W`` **Week number of year** (Monday as the first day of the week) 00, 01, ..., 53
|
||||
as a zero-padded decimal number. All days in a new year
|
||||
preceding the first Monday are considered to be in week 0.
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%c`` **Date and time** representation Sat Aug 18 16:31:42 2018
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%x`` **Date** representation 08/18/18
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%X`` **Time** representation 16:31:42
|
||||
------------- -------------------------------------------------------------- -------------------------
|
||||
``%%`` A literal ``%`` character %
|
||||
============= ============================================================== =========================
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
@ -52,6 +52,13 @@ Here is an example output for a Tuya fan controller:
|
||||
[12:39:45][C][tuya:032]: Datapoint 9: switch (value: OFF)
|
||||
[12:39:45][C][tuya:046]: Product: '{"p":"hqq73kftvzh8c92u","v":"1.0.0","m":0}'
|
||||
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **time_id** (*Optional*, :ref:`config-id`): Some Tuya devices support obtaining local time from ESPHome.
|
||||
Specify the ID of the :ref:`Time Component <time>` which will be used.
|
||||
|
||||
- **ignore_mcu_update_on_datapoints** (*Optional*, list): A list of datapoints to ignore MCU updates for. Useful for certain broken/erratic hardware and debugging.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
@ -189,7 +189,7 @@ Configuration variables:
|
||||
Enterprise Authentication
|
||||
-------------------------
|
||||
|
||||
WPA2_EAP Enterprise Authentication is supported on ESP32s.
|
||||
WPA2_EAP Enterprise Authentication is supported on ESP32s and ESP8266s.
|
||||
In order to configure this feature you must use the :ref:`wifi-networks` style configuration.
|
||||
The ESP32 is known to work with PEAP, EAP-TTLS, and the certificate based EAP-TLS.
|
||||
These are advanced settings and you will usually need to consult your enterprise network administrator.
|
||||
|
4
conf.py
@ -70,9 +70,9 @@ author = 'Otto Winter'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '1.15'
|
||||
version = '1.16'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '1.15.3'
|
||||
release = '1.16.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@ -6,7 +6,7 @@ BME280 Environment
|
||||
:image: bme280.jpg
|
||||
:keywords: BME280
|
||||
|
||||
The :doc:`/components/sensor/bme280` is a simple temperature, humidity, and pressure sensor with communication over I2C.
|
||||
The :doc:`/components/sensor/bme280` is a simple temperature, humidity, and pressure sensor with communication over :ref:`I²C <i2c>`.
|
||||
With some simple math it is possible to either determine the height of the sensor, or the current pressure at sea level.
|
||||
This guide can be applied to any sensor measuring temperature and pressure at the same time, like the
|
||||
:doc:`/components/sensor/bmp280`, or :doc:`/components/sensor/bme680`.
|
||||
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
@ -324,7 +324,7 @@ All Triggers
|
||||
- :ref:`esphome.on_boot <esphome-on_boot>` / :ref:`esphome.on_shutdown <esphome-on_shutdown>` / :ref:`esphome.on_loop <esphome-on_loop>`
|
||||
- :ref:`light.on_turn_on / light.on_turn_off <light-on_turn_on_off_trigger>`
|
||||
- :ref:`logger.on_message <logger-on_message>`
|
||||
- :ref:`time.on_time <time-on_time>`
|
||||
- :ref:`time.on_time <time-on_time>` / - :ref:`time.on_time_sync <time-on_time_sync>`
|
||||
- :ref:`mqtt.on_message <mqtt-on_message>` / :ref:`mqtt.on_json_message <mqtt-on_json_message>`
|
||||
- :ref:`pn532.on_tag <pn532-on_tag>` / :ref:`rdm6300.on_tag <rdm6300-on_tag>`
|
||||
- :ref:`interval.interval <interval>`
|
||||
@ -374,6 +374,7 @@ All Actions
|
||||
- :ref:`http_request.get <http_request-get_action>` / :ref:`http_request.post <http_request-post_action>` / :ref:`http_request.send <http_request-send_action>`
|
||||
- :ref:`rf_bridge.send_code <rf_bridge-send_code_action>`
|
||||
- :ref:`rf_bridge.learn <rf_bridge-learn_action>`
|
||||
- :ref:`ds1307.read_time <ds1307-read_time_action>` / :ref:`ds1307.write_time <ds1307-write_time_action>`
|
||||
|
||||
.. _config-condition:
|
||||
|
||||
@ -388,6 +389,7 @@ All Conditions
|
||||
- :ref:`sensor.in_range <sensor-in_range_condition>`
|
||||
- :ref:`wifi.connected <wifi-connected_condition>` / :ref:`api.connected <api-connected_condition>`
|
||||
/ :ref:`mqtt.connected <mqtt-connected_condition>`
|
||||
- :ref:`time.has_time <time-has_time_condition>`
|
||||
- :ref:`script.is_running <script-is_running_condition>`
|
||||
- :ref:`sun.is_above_horizon / sun.is_below_horizon <sun-is_above_below_horizon-condition>`
|
||||
- :ref:`text_sensor.state <text_sensor-state_condition>`
|
||||
|
@ -291,7 +291,7 @@ config in non-destructive way so you could always override some bits and pieces
|
||||
configuration.
|
||||
|
||||
Consider the following example where author put common pieces of configuration like WiFi,
|
||||
I2C into base files and extends it with some devices specific configurations in the main config.
|
||||
I²C into base files and extends it with some devices specific configurations in the main config.
|
||||
|
||||
Note how the piece of configuration describing ``api`` component in ``device_base.yaml`` gets
|
||||
merged with the services definitions from main config file.
|
||||
@ -342,7 +342,7 @@ merged with the services definitions from main config file.
|
||||
board: wemos_d1_mini32
|
||||
build_path: ./build/${node_name}
|
||||
|
||||
# I2C Bus
|
||||
# I²C Bus
|
||||
i2c:
|
||||
sda: GPIO21
|
||||
scl: GPIO22
|
||||
|
@ -580,7 +580,7 @@ Standard for the esphome-core codebase:
|
||||
communication interface, please consider implementing the library natively in ESPHome.
|
||||
|
||||
- This depends on the communication interface of course - if the library is directly working
|
||||
with pins or doesn't do any I/O itself, it's ok. However if it's something like I^2C, then ESPHome's
|
||||
with pins or doesn't do any I/O itself, it's ok. However if it's something like I²C, then ESPHome's
|
||||
own communication abstractions should be used. Especially if the library accesses a global variable/state
|
||||
like ``Wire`` there's a problem because then the component may not modular (i.e. not possible
|
||||
to create two instances of a component on one ESP)
|
||||
|
@ -72,6 +72,7 @@ Custom Components & Code
|
||||
- `Jura Impressa J6 coffee machine custom component <https://github.com/ryanalden/esphome-jura-component>`__ by :ghuser:`ryanalden`
|
||||
- `Paradox alarm system sensors custom component <https://github.com/Margriko/Paradox-ESPHome>`__ by :ghuser:`Margriko`
|
||||
- `DSC POWER832 (PC5010) alarm system custom component <https://github.com/Dilbert66/esphome-dsckeybus>`__ by :ghuser:`Dilbert66`
|
||||
- `Custom UART component for WS3 weather station and air particulate matter sensor <https://github.com/kquinsland/ws3-to-esphome-bridge>`__ by :ghuser:`kquinsland`
|
||||
- `ADEMCO/VISTA/Honeywell alarm system custom component <https://github.com/Dilbert66/esphome-vistaECP>`__ by :ghuser:`Dilbert66`
|
||||
- `Winsen ZE08-CH2O (Formaldehyde sensor) custom component <https://gist.github.com/cretep/f96606dc6a4eae0d85993d6085959220>`__ by :ghuser:`cretep`
|
||||
|
||||
@ -96,7 +97,7 @@ Sample Configurations
|
||||
- `ESPHome Home Assistant Cheap Cat Feeder <https://github.com/rubengargar/diy-cheap-cat-feeder>`__ by :ghuser:`rubengargar`
|
||||
- `ESPHome configs <https://github.com/nuttytree/ESPHome-Devices>`__ by :ghuser:`nuttytree`
|
||||
- `ESPHome Home Assistant stepper motor blinds/curtain <https://github.com/icarome/esphome/blob/master/cortina.yaml>`__ by :ghuser:`icarome`
|
||||
- `Control LG UD79-B monitor via UART <https://github.com/kquinsland/lg-m43mu79-esp-home-bridge>`__ by :ghuser:`kquinsland`
|
||||
- `ESPHome AXA Remote 2 control <https://github.com/galagaking/espaxa/>`__ by :ghuser:`galagaking`
|
||||
- `ESPHome WF-DS01 TuyaMCU based dimmable bedside touch lamp <https://github.com/davet2001/miscellaneous/blob/master/tuyamcu_ws-df01_touchlamp.yaml>`__ by :ghuser:`davet2001`
|
||||
- `Universal menu system for devices with rotary encoder with push and SSD1306 I2C display <https://github.com/mikosoft83/pithy_screen_menu_system>`__ by :ghuser:`mikosoft83`
|
||||
|
||||
|
@ -107,7 +107,7 @@ For me to fix the issue quickly, there are some things that would be really help
|
||||
help given just that information?
|
||||
2. A snippet of the code/configuration file used is always great to reproduce this issue.
|
||||
Please read `How to create a Minimal, Complete, and Verifiable example <https://stackoverflow.com/help/mcve>`__.
|
||||
3. If it's an I^2C or hardware communication issue please also try setting the
|
||||
3. If it's an I²C or hardware communication issue please also try setting the
|
||||
:ref:`log level <logger-log_levels>` to ``VERY_VERBOSE`` as it provides helpful information
|
||||
about what is going on.
|
||||
4. Please also include what you've already tried and didn't work as that can help us track down the issue.
|
||||
|
@ -101,30 +101,38 @@ Contributors
|
||||
|
||||
(in alphabetical order)
|
||||
|
||||
- `0hax (@0hax) <https://github.com/0hax>`__ - 2 contributions
|
||||
- `0hax (@0hax) <https://github.com/0hax>`__ - 3 contributions
|
||||
- `2016for (@2016for) <https://github.com/2016for>`__ - 1 contribution
|
||||
- `Pavel Golovin (@31337Ghost) <https://github.com/31337Ghost>`__ - 2 contributions
|
||||
- `David Martin (@3ative) <https://github.com/3ative>`__ - 1 contribution
|
||||
- `Aalian Khan (@AalianKhan) <https://github.com/AalianKhan>`__ - 5 contributions
|
||||
- `Abel Matser (@abelmatser) <https://github.com/abelmatser>`__ - 1 contribution
|
||||
- `Abílio Costa (@abmantis) <https://github.com/abmantis>`__ - 3 contributions
|
||||
- `acshef (@acshef) <https://github.com/acshef>`__ - 1 contribution
|
||||
- `adamgreg (@adamgreg) <https://github.com/adamgreg>`__ - 1 contribution
|
||||
- `Attila Darazs (@adarazs) <https://github.com/adarazs>`__ - 2 contributions
|
||||
- `adezerega (@adezerega) <https://github.com/adezerega>`__ - 1 contribution
|
||||
- `Andrea Donno (@adonno) <https://github.com/adonno>`__ - 1 contribution
|
||||
- `Adrian Cuzman (@adriancuzman) <https://github.com/adriancuzman>`__ - 2 contributions
|
||||
- `Johan Bloemberg (@aequitas) <https://github.com/aequitas>`__ - 6 contributions
|
||||
- `Anders (@ahd71) <https://github.com/ahd71>`__ - 1 contribution
|
||||
- `Alexander Pohl (@ahpohl) <https://github.com/ahpohl>`__ - 2 contributions
|
||||
- `Alexander Pohl (@ahpohl) <https://github.com/ahpohl>`__ - 3 contributions
|
||||
- `Airy André (@airy10) <https://github.com/airy10>`__ - 1 contribution
|
||||
- `akoivist (@akoivist) <https://github.com/akoivist>`__ - 1 contribution
|
||||
- `Andrej Komelj (@akomelj) <https://github.com/akomelj>`__ - 3 contributions
|
||||
- `Alexander Leisentritt (@Alex9779) <https://github.com/Alex9779>`__ - 9 contributions
|
||||
- `Alone (@al-one) <https://github.com/al-one>`__ - 1 contribution
|
||||
- `Alexander Leisentritt (@Alex9779) <https://github.com/Alex9779>`__ - 10 contributions
|
||||
- `Alexandre Danault (@AlexDanault) <https://github.com/AlexDanault>`__ - 1 contribution
|
||||
- `Alex Mekkering (@AlexMekkering) <https://github.com/AlexMekkering>`__ - 3 contributions
|
||||
- `Alex (@alexyao2015) <https://github.com/alexyao2015>`__ - 4 contributions
|
||||
- `Amish Vishwakarma (@amishv) <https://github.com/amishv>`__ - 3 contributions
|
||||
- `András Bíró (@andrasbiro) <https://github.com/andrasbiro>`__ - 1 contribution
|
||||
- `Andreas Hergert (@andreashergert1984) <https://github.com/andreashergert1984>`__ - 1 contribution
|
||||
- `Andrzej (@andriej) <https://github.com/andriej>`__ - 1 contribution
|
||||
- `Andreas (@anduchs) <https://github.com/anduchs>`__ - 1 contribution
|
||||
- `anekinloewe (@anekinloewe) <https://github.com/anekinloewe>`__ - 1 contribution
|
||||
- `ankycooper (@ankycooper) <https://github.com/ankycooper>`__ - 1 contribution
|
||||
- `Nikolay Vasilchuk (@Anonym-tsk) <https://github.com/Anonym-tsk>`__ - 33 contributions
|
||||
- `Nikolay Vasilchuk (@Anonym-tsk) <https://github.com/Anonym-tsk>`__ - 35 contributions
|
||||
- `Adriaan Peeters (@apeeters) <https://github.com/apeeters>`__ - 4 contributions
|
||||
- `Darius Ratkevičius (@aphex008) <https://github.com/aphex008>`__ - 1 contribution
|
||||
- `Ash McKenzie (@ashmckenzie) <https://github.com/ashmckenzie>`__ - 1 contribution
|
||||
@ -132,15 +140,15 @@ Contributors
|
||||
- `Achilleas Pipinellis (@axilleas) <https://github.com/axilleas>`__ - 1 contribution
|
||||
- `Kamil Trzciński (@ayufan) <https://github.com/ayufan>`__ - 7 contributions
|
||||
- `Nicholas Peters (@Azimath) <https://github.com/Azimath>`__ - 2 contributions
|
||||
- `Florian Mösch (@badbadc0ffee) <https://github.com/badbadc0ffee>`__ - 4 contributions
|
||||
- `Florian Mösch (@badbadc0ffee) <https://github.com/badbadc0ffee>`__ - 8 contributions
|
||||
- `balk77 (@balk77) <https://github.com/balk77>`__ - 2 contributions
|
||||
- `Paulus Schoutsen (@balloob) <https://github.com/balloob>`__ - 41 contributions
|
||||
- `Andrew Zaborowski (@balrog-kun) <https://github.com/balrog-kun>`__ - 7 contributions
|
||||
- `Andrew Zaborowski (@balrog-kun) <https://github.com/balrog-kun>`__ - 8 contributions
|
||||
- `Rutger Nijhuis (@BananaPukeh) <https://github.com/BananaPukeh>`__ - 1 contribution
|
||||
- `J. Nick Koston (@bdraco) <https://github.com/bdraco>`__ - 1 contribution
|
||||
- `Ben Suffolk (@bensuffolk) <https://github.com/bensuffolk>`__ - 1 contribution
|
||||
- `Bierchermuesli (@Bierchermuesli) <https://github.com/Bierchermuesli>`__ - 1 contribution
|
||||
- `Jim Ekman (@blejdfist) <https://github.com/blejdfist>`__ - 3 contributions
|
||||
- `Jim Ekman (@blejdfist) <https://github.com/blejdfist>`__ - 4 contributions
|
||||
- `Mauricio Bonani (@bonanitech) <https://github.com/bonanitech>`__ - 1 contribution
|
||||
- `Patrik Hermansson (@bphermansson) <https://github.com/bphermansson>`__ - 1 contribution
|
||||
- `Bram Kragten (@bramkragten) <https://github.com/bramkragten>`__ - 2 contributions
|
||||
@ -148,6 +156,7 @@ Contributors
|
||||
- `Brian Hanifin (@brianhanifin) <https://github.com/brianhanifin>`__ - 1 contribution
|
||||
- `brianrjones69 (@brianrjones69) <https://github.com/brianrjones69>`__ - 1 contribution
|
||||
- `buxtronix (@buxtronix) <https://github.com/buxtronix>`__ - 7 contributions
|
||||
- `bvansambeek (@bvansambeek) <https://github.com/bvansambeek>`__ - 1 contribution
|
||||
- `bwente (@bwente) <https://github.com/bwente>`__ - 1 contribution
|
||||
- `Carlos Gustavo Sarmiento (@carlos-sarmiento) <https://github.com/carlos-sarmiento>`__ - 4 contributions
|
||||
- `Carlos Garcia Saura (@CarlosGS) <https://github.com/CarlosGS>`__ - 1 contribution
|
||||
@ -159,37 +168,50 @@ Contributors
|
||||
- `James Crook (@cooljimy84) <https://github.com/cooljimy84>`__ - 1 contribution
|
||||
- `Corban Mailloux (@corbanmailloux) <https://github.com/corbanmailloux>`__ - 5 contributions
|
||||
- `Dmitry Berezovsky (@corvis) <https://github.com/corvis>`__ - 2 contributions
|
||||
- `Connor Prussin (@cprussin) <https://github.com/cprussin>`__ - 1 contribution
|
||||
- `cretep (@cretep) <https://github.com/cretep>`__ - 1 contribution
|
||||
- `cryptelli (@cryptelli) <https://github.com/cryptelli>`__ - 3 contributions
|
||||
- `Chris Talkington (@ctalkington) <https://github.com/ctalkington>`__ - 1 contribution
|
||||
- `Alex Solomaha (@CyanoFresh) <https://github.com/CyanoFresh>`__ - 1 contribution
|
||||
- `Luar Roji (@cyberplant) <https://github.com/cyberplant>`__ - 2 contributions
|
||||
- `Dale Higgs (@dale3h) <https://github.com/dale3h>`__ - 1 contribution
|
||||
- `damanti-me (@damanti-me) <https://github.com/damanti-me>`__ - 1 contribution
|
||||
- `damanti-me (@damanti-me) <https://github.com/damanti-me>`__ - 2 contributions
|
||||
- `Daniel Bjørnbakk (@danibjor) <https://github.com/danibjor>`__ - 1 contribution
|
||||
- `Daniel Kucera (@danielkucera) <https://github.com/danielkucera>`__ - 1 contribution
|
||||
- `Danny Sauer (@dannysauer) <https://github.com/dannysauer>`__ - 1 contribution
|
||||
- `Daniel Schramm (@danielschramm) <https://github.com/danielschramm>`__ - 1 contribution
|
||||
- `Chris (@darthsebulba04) <https://github.com/darthsebulba04>`__ - 1 contribution
|
||||
- `DAVe3283 (@DAVe3283) <https://github.com/DAVe3283>`__ - 3 contributions
|
||||
- `Dave Richer (@davericher) <https://github.com/davericher>`__ - 3 contributions
|
||||
- `Dave T (@davet2001) <https://github.com/davet2001>`__ - 1 contribution
|
||||
- `Dave Wongillies (@davewongillies) <https://github.com/davewongillies>`__ - 1 contribution
|
||||
- `David De Sloovere (@DavidDeSloovere) <https://github.com/DavidDeSloovere>`__ - 3 contributions
|
||||
- `David Beitey (@davidjb) <https://github.com/davidjb>`__ - 1 contribution
|
||||
- `David Zovko (@davidzovko) <https://github.com/davidzovko>`__ - 1 contribution
|
||||
- `Debashish Sahu (@debsahu) <https://github.com/debsahu>`__ - 1 contribution
|
||||
- `declanshanaghy (@declanshanaghy) <https://github.com/declanshanaghy>`__ - 3 contributions
|
||||
- `deftdawg (@deftdawg) <https://github.com/deftdawg>`__ - 1 contribution
|
||||
- `Rsan (@deltazerorsan) <https://github.com/deltazerorsan>`__ - 1 contribution
|
||||
- `Mickaël Le Baillif (@demikl) <https://github.com/demikl>`__ - 2 contributions
|
||||
- `dependabot[bot] (@dependabot[bot]) <https://github.com/dependabot[bot]>`__ - 26 contributions
|
||||
- `dependabot[bot] (@dependabot[bot]) <https://github.com/dependabot[bot]>`__ - 43 contributions
|
||||
- `Destix (@Destix) <https://github.com/Destix>`__ - 1 contribution
|
||||
- `Alain Turbide (@Dilbert66) <https://github.com/Dilbert66>`__ - 2 contributions
|
||||
- `Mark (@Diramu) <https://github.com/Diramu>`__ - 1 contribution
|
||||
- `Dirk Heinke (@DirkHeinke) <https://github.com/DirkHeinke>`__ - 1 contribution
|
||||
- `Dirk Jahnke (@dirkj) <https://github.com/dirkj>`__ - 1 contribution
|
||||
- `djtef (@djtef) <https://github.com/djtef>`__ - 1 contribution
|
||||
- `Marcos Pérez Ferro (@djwmarcx) <https://github.com/djwmarcx>`__ - 1 contribution
|
||||
- `Dan Mannock (@dmannock) <https://github.com/dmannock>`__ - 1 contribution
|
||||
- `dmkif (@dmkif) <https://github.com/dmkif>`__ - 1 contribution
|
||||
- `Jiang Sheng (@doskoi) <https://github.com/doskoi>`__ - 1 contribution
|
||||
- `Robert Schütz (@dotlambda) <https://github.com/dotlambda>`__ - 3 contributions
|
||||
- `Daniel Hyles (@DotNetDann) <https://github.com/DotNetDann>`__ - 2 contributions
|
||||
- `Daniel Hyles (@DotNetDann) <https://github.com/DotNetDann>`__ - 3 contributions
|
||||
- `dr-oblivium (@dr-oblivium) <https://github.com/dr-oblivium>`__ - 2 contributions
|
||||
- `Drew Perttula (@drewp) <https://github.com/drewp>`__ - 2 contributions
|
||||
- `DrRob (@DrRob) <https://github.com/DrRob>`__ - 1 contribution
|
||||
- `dubit0 (@dubit0) <https://github.com/dubit0>`__ - 1 contribution
|
||||
- `Dimitris Zervas (@dzervas) <https://github.com/dzervas>`__ - 1 contribution
|
||||
- `dziobson (@dziobson) <https://github.com/dziobson>`__ - 1 contribution
|
||||
- `Dan Jackson (@e28eta) <https://github.com/e28eta>`__ - 1 contribution
|
||||
- `Ermanno Baschiera (@ebaschiera) <https://github.com/ebaschiera>`__ - 1 contribution
|
||||
- `Niclas Larsson (@edge90) <https://github.com/edge90>`__ - 1 contribution
|
||||
- `Eenoo (@Eenoo) <https://github.com/Eenoo>`__ - 1 contribution
|
||||
@ -199,23 +221,28 @@ Contributors
|
||||
- `EmbeddedDevver (@EmbeddedDevver) <https://github.com/EmbeddedDevver>`__ - 1 contribution
|
||||
- `EmmanuelLM (@EmmanuelLM) <https://github.com/EmmanuelLM>`__ - 1 contribution
|
||||
- `Emory Dunn (@emorydunn) <https://github.com/emorydunn>`__ - 1 contribution
|
||||
- `Eric Muehlstein (@emuehlstein) <https://github.com/emuehlstein>`__ - 1 contribution
|
||||
- `Anders Persson (@emwap) <https://github.com/emwap>`__ - 4 contributions
|
||||
- `Nico Weichbrodt (@envy) <https://github.com/envy>`__ - 1 contribution
|
||||
- `Evan Petousis (@epetousis) <https://github.com/epetousis>`__ - 1 contribution
|
||||
- `Wilhelm Erasmus (@erasmuswill) <https://github.com/erasmuswill>`__ - 1 contribution
|
||||
- `erazor666 (@erazor666) <https://github.com/erazor666>`__ - 1 contribution
|
||||
- `Eric Hiller (@erichiller) <https://github.com/erichiller>`__ - 1 contribution
|
||||
- `Ernst Klamer (@Ernst79) <https://github.com/Ernst79>`__ - 1 contribution
|
||||
- `escoand (@escoand) <https://github.com/escoand>`__ - 7 contributions
|
||||
- `esphomebot (@esphomebot) <https://github.com/esphomebot>`__ - 4 contributions
|
||||
- `esphomebot (@esphomebot) <https://github.com/esphomebot>`__ - 13 contributions
|
||||
- `Evan Coleman (@evandcoleman) <https://github.com/evandcoleman>`__ - 3 contributions
|
||||
- `Malte Franken (@exxamalte) <https://github.com/exxamalte>`__ - 2 contributions
|
||||
- `Fabian Affolter (@fabaff) <https://github.com/fabaff>`__ - 24 contributions
|
||||
- `Fabian Affolter (@fabaff) <https://github.com/fabaff>`__ - 29 contributions
|
||||
- `C W (@fake-name) <https://github.com/fake-name>`__ - 2 contributions
|
||||
- `Christian Ferbar (@ferbar) <https://github.com/ferbar>`__ - 1 contribution
|
||||
- `Christian Ferbar (@ferbar) <https://github.com/ferbar>`__ - 2 contributions
|
||||
- `foxsam21 (@foxsam21) <https://github.com/foxsam21>`__ - 2 contributions
|
||||
- `Fractal147 (@Fractal147) <https://github.com/Fractal147>`__ - 1 contribution
|
||||
- `Francis-labo (@Francis-labo) <https://github.com/Francis-labo>`__ - 1 contribution
|
||||
- `Francisk0 (@Francisk0) <https://github.com/Francisk0>`__ - 1 contribution
|
||||
- `Frank Bakker (@FrankBakkerNl) <https://github.com/FrankBakkerNl>`__ - 1 contribution
|
||||
- `Frank Bakker (@FrankBakkerNl) <https://github.com/FrankBakkerNl>`__ - 2 contributions
|
||||
- `Frankster-NL (@Frankster-NL) <https://github.com/Frankster-NL>`__ - 1 contribution
|
||||
- `Fredrik Erlandsson (@fredrike) <https://github.com/fredrike>`__ - 1 contribution
|
||||
- `Fredrik Erlandsson (@fredrike) <https://github.com/fredrike>`__ - 2 contributions
|
||||
- `Evgeny (@freekode) <https://github.com/freekode>`__ - 8 contributions
|
||||
- `Brett McKenzie (@freerangeeggs) <https://github.com/freerangeeggs>`__ - 1 contribution
|
||||
- `Fritz Mueller (@fritzm) <https://github.com/fritzm>`__ - 1 contribution
|
||||
@ -223,14 +250,15 @@ Contributors
|
||||
- `mr G1K (@G1K) <https://github.com/G1K>`__ - 2 contributions
|
||||
- `galagaking (@galagaking) <https://github.com/galagaking>`__ - 1 contribution
|
||||
- `Geoff Davis (@geoffdavis) <https://github.com/geoffdavis>`__ - 2 contributions
|
||||
- `Gerard (@gerard33) <https://github.com/gerard33>`__ - 1 contribution
|
||||
- `Gerard (@gerard33) <https://github.com/gerard33>`__ - 2 contributions
|
||||
- `Giovanni (@Gio-dot) <https://github.com/Gio-dot>`__ - 2 contributions
|
||||
- `gitolicious (@gitolicious) <https://github.com/gitolicious>`__ - 15 contributions
|
||||
- `gitolicious (@gitolicious) <https://github.com/gitolicious>`__ - 16 contributions
|
||||
- `The Gitter Badger (@gitter-badger) <https://github.com/gitter-badger>`__ - 1 contribution
|
||||
- `Guillermo Ruffino (@glmnet) <https://github.com/glmnet>`__ - 171 contributions
|
||||
- `Guillermo Ruffino (@glmnet) <https://github.com/glmnet>`__ - 190 contributions
|
||||
- `Giorgos Logiotatidis (@glogiotatidis) <https://github.com/glogiotatidis>`__ - 1 contribution
|
||||
- `Germain Masse (@gmasse) <https://github.com/gmasse>`__ - 2 contributions
|
||||
- `Jelle Raaijmakers (@GMTA) <https://github.com/GMTA>`__ - 1 contribution
|
||||
- `gordon-zhao (@gordon-zhao) <https://github.com/gordon-zhao>`__ - 1 contribution
|
||||
- `Antoine GRÉA (@grea09) <https://github.com/grea09>`__ - 4 contributions
|
||||
- `Guillaume DELVIT (@guiguid) <https://github.com/guiguid>`__ - 1 contribution
|
||||
- `guptamp (@guptamp) <https://github.com/guptamp>`__ - 1 contribution
|
||||
@ -238,13 +266,18 @@ Contributors
|
||||
- `h0-- (@h0--) <https://github.com/h0-->`__ - 1 contribution
|
||||
- `Boris Hajduk (@hajdbo) <https://github.com/hajdbo>`__ - 4 contributions
|
||||
- `Gavin Mogan (@halkeye) <https://github.com/halkeye>`__ - 1 contribution
|
||||
- `Charles Thompson (@haryadoon) <https://github.com/haryadoon>`__ - 1 contribution
|
||||
- `hcoohb (@hcoohb) <https://github.com/hcoohb>`__ - 1 contribution
|
||||
- `Héctor Giménez (@hectorgimenez) <https://github.com/hectorgimenez>`__ - 2 contributions
|
||||
- `Jimmy Hedman (@HeMan) <https://github.com/HeMan>`__ - 5 contributions
|
||||
- `HepoH3 (@HepoH3) <https://github.com/HepoH3>`__ - 1 contribution
|
||||
- `Hamish Moffatt (@hmoffatt) <https://github.com/hmoffatt>`__ - 1 contribution
|
||||
- `MoA (@honomoa) <https://github.com/honomoa>`__ - 1 contribution
|
||||
- `Ian Leeder (@ianleeder) <https://github.com/ianleeder>`__ - 2 contributions
|
||||
- `icarome (@icarome) <https://github.com/icarome>`__ - 1 contribution
|
||||
- `igg (@igg) <https://github.com/igg>`__ - 5 contributions
|
||||
- `ikatkov (@ikatkov) <https://github.com/ikatkov>`__ - 1 contribution
|
||||
- `Michael (@imeekle) <https://github.com/imeekle>`__ - 1 contribution
|
||||
- `Lorenzo Ortiz (@Infinitte) <https://github.com/Infinitte>`__ - 1 contribution
|
||||
- `Ivan Shvedunov (@ivan4th) <https://github.com/ivan4th>`__ - 1 contribution
|
||||
- `Ivan Kravets (@ivankravets) <https://github.com/ivankravets>`__ - 1 contribution
|
||||
@ -256,8 +289,8 @@ Contributors
|
||||
- `JbLb (@jblb) <https://github.com/jblb>`__ - 1 contribution
|
||||
- `Joshua Dadswell (@jdads1) <https://github.com/jdads1>`__ - 1 contribution
|
||||
- `jeff-h (@jeff-h) <https://github.com/jeff-h>`__ - 2 contributions
|
||||
- `Jeff Rescignano (@JeffResc) <https://github.com/JeffResc>`__ - 10 contributions
|
||||
- `Jesse Hills (@jesserockz) <https://github.com/jesserockz>`__ - 44 contributions
|
||||
- `Jeff Rescignano (@JeffResc) <https://github.com/JeffResc>`__ - 11 contributions
|
||||
- `Jesse Hills (@jesserockz) <https://github.com/jesserockz>`__ - 54 contributions
|
||||
- `Jonathan Jefferies (@jjok) <https://github.com/jjok>`__ - 1 contribution
|
||||
- `Jeppe Ladefoged (@jladefoged) <https://github.com/jladefoged>`__ - 2 contributions
|
||||
- `Jonathan Martens (@jmartens) <https://github.com/jmartens>`__ - 1 contribution
|
||||
@ -270,27 +303,35 @@ Contributors
|
||||
- `Joppy (@JoppyFurr) <https://github.com/JoppyFurr>`__ - 2 contributions
|
||||
- `junnikokuki (@junnikokuki) <https://github.com/junnikokuki>`__ - 1 contribution
|
||||
- `Justahobby01 (@Justahobby01) <https://github.com/Justahobby01>`__ - 1 contribution
|
||||
- `Justyn Shull (@justyns) <https://github.com/justyns>`__ - 1 contribution
|
||||
- `Jasper van der Neut - Stulen (@jvanderneutstulen) <https://github.com/jvanderneutstulen>`__ - 2 contributions
|
||||
- `João Vitor M. Roma (@jvmr1) <https://github.com/jvmr1>`__ - 1 contribution
|
||||
- `Jack Wozny (@jwozny) <https://github.com/jwozny>`__ - 1 contribution
|
||||
- `Harald Nagel (@k7hpn) <https://github.com/k7hpn>`__ - 1 contribution
|
||||
- `kalebzettl (@kalebzettl) <https://github.com/kalebzettl>`__ - 1 contribution
|
||||
- `Krasimir Nedelchev (@kaykayehnn) <https://github.com/kaykayehnn>`__ - 1 contribution
|
||||
- `kbouchard111 (@kbouchard111) <https://github.com/kbouchard111>`__ - 1 contribution
|
||||
- `Keith Burzinski (@kbx81) <https://github.com/kbx81>`__ - 15 contributions
|
||||
- `Keith Burzinski (@kbx81) <https://github.com/kbx81>`__ - 19 contributions
|
||||
- `Robert Kiss (@kepten) <https://github.com/kepten>`__ - 2 contributions
|
||||
- `Kevin O'Rourke (@kevinior) <https://github.com/kevinior>`__ - 1 contribution
|
||||
- `kimonm (@kimonm) <https://github.com/kimonm>`__ - 1 contribution
|
||||
- `Klaas Schoute (@klaasnicolaas) <https://github.com/klaasnicolaas>`__ - 1 contribution
|
||||
- `Klarstein (@Klarstein) <https://github.com/Klarstein>`__ - 2 contributions
|
||||
- `Kevin Lewis (@kll) <https://github.com/kll>`__ - 1 contribution
|
||||
- `korellas (@korellas) <https://github.com/korellas>`__ - 1 contribution
|
||||
- `Kevin Pelzel (@kpelzel) <https://github.com/kpelzel>`__ - 1 contribution
|
||||
- `krahabb (@krahabb) <https://github.com/krahabb>`__ - 2 contributions
|
||||
- `KristopherMackowiak (@KristopherMackowiak) <https://github.com/KristopherMackowiak>`__ - 1 contribution
|
||||
- `kroimon (@kroimon) <https://github.com/kroimon>`__ - 2 contributions
|
||||
- `Kendell R (@KTibow) <https://github.com/KTibow>`__ - 1 contribution
|
||||
- `Kendell R (@KTibow) <https://github.com/KTibow>`__ - 2 contributions
|
||||
- `kvvoff (@kvvoff) <https://github.com/kvvoff>`__ - 1 contribution
|
||||
- `Ken Davidson (@kwdavidson) <https://github.com/kwdavidson>`__ - 1 contribution
|
||||
- `Kyle Manna (@kylemanna) <https://github.com/kylemanna>`__ - 1 contribution
|
||||
- `la7dja (@la7dja) <https://github.com/la7dja>`__ - 1 contribution
|
||||
- `Stefan Lässer (@Laess3r) <https://github.com/Laess3r>`__ - 1 contribution
|
||||
- `Steffen Weinreich (@lairsdragon) <https://github.com/lairsdragon>`__ - 1 contribution
|
||||
- `Fredrik Lindqvist (@Landrash) <https://github.com/Landrash>`__ - 1 contribution
|
||||
- `lein1013 (@lein1013) <https://github.com/lein1013>`__ - 1 contribution
|
||||
- `Lazar Obradovic (@lobradov) <https://github.com/lobradov>`__ - 4 contributions
|
||||
- `Joakim Sørensen (@ludeeus) <https://github.com/ludeeus>`__ - 11 contributions
|
||||
- `Lukas Klass (@LukasK13) <https://github.com/LukasK13>`__ - 1 contribution
|
||||
@ -298,12 +339,13 @@ Contributors
|
||||
- `Luke Fitzgerald (@lwfitzgerald) <https://github.com/lwfitzgerald>`__ - 1 contribution
|
||||
- `Lewis Juggins (@lwis) <https://github.com/lwis>`__ - 1 contribution
|
||||
- `Michael Klamminger (@m1ch) <https://github.com/m1ch>`__ - 1 contribution
|
||||
- `M95D (@M95D) <https://github.com/M95D>`__ - 1 contribution
|
||||
- `Marc-Antoine Courteau (@macourteau) <https://github.com/macourteau>`__ - 1 contribution
|
||||
- `magnus (@magnusja) <https://github.com/magnusja>`__ - 1 contribution
|
||||
- `Magnus Øverli (@magnusoverli) <https://github.com/magnusoverli>`__ - 1 contribution
|
||||
- `Major Péter (@majorpeter) <https://github.com/majorpeter>`__ - 2 contributions
|
||||
- `Marcel van der Veldt (@marcelveldt) <https://github.com/marcelveldt>`__ - 2 contributions
|
||||
- `Marvin Gaube (@margau) <https://github.com/margau>`__ - 3 contributions
|
||||
- `Marvin Gaube (@margau) <https://github.com/margau>`__ - 4 contributions
|
||||
- `Martynas Griškonis (@Margriko) <https://github.com/Margriko>`__ - 1 contribution
|
||||
- `Mario (@mario-tux) <https://github.com/mario-tux>`__ - 3 contributions
|
||||
- `Matthew Harrold (@marrold) <https://github.com/marrold>`__ - 1 contribution
|
||||
@ -311,21 +353,30 @@ Contributors
|
||||
- `Martin Hjelmare (@MartinHjelmare) <https://github.com/MartinHjelmare>`__ - 1 contribution
|
||||
- `MartinWelsch (@MartinWelsch) <https://github.com/MartinWelsch>`__ - 1 contribution
|
||||
- `MasterTim17 (@MasterTim17) <https://github.com/MasterTim17>`__ - 1 contribution
|
||||
- `matikij (@matikij) <https://github.com/matikij>`__ - 1 contribution
|
||||
- `Michel Marti (@matoxp) <https://github.com/matoxp>`__ - 2 contributions
|
||||
- `Maurice Schleußinger (@maurice-schleussinger) <https://github.com/maurice-schleussinger>`__ - 1 contribution
|
||||
- `mbo18 (@mbo18) <https://github.com/mbo18>`__ - 1 contribution
|
||||
- `Joseph Mearman (@Mearman) <https://github.com/Mearman>`__ - 1 contribution
|
||||
- `Mechotronic (@Mechotronic) <https://github.com/Mechotronic>`__ - 1 contribution
|
||||
- `MeIchthys (@meichthys) <https://github.com/meichthys>`__ - 1 contribution
|
||||
- `meijerwynand (@meijerwynand) <https://github.com/meijerwynand>`__ - 2 contributions
|
||||
- `Marco (@Melkor82) <https://github.com/Melkor82>`__ - 2 contributions
|
||||
- `mhentschke (@mhentschke) <https://github.com/mhentschke>`__ - 1 contribution
|
||||
- `micw (@micw) <https://github.com/micw>`__ - 1 contribution
|
||||
- `Pauline Middelink (@middelink) <https://github.com/middelink>`__ - 2 contributions
|
||||
- `mikosoft83 (@mikosoft83) <https://github.com/mikosoft83>`__ - 1 contribution
|
||||
- `Matthew Edwards (@mje-nz) <https://github.com/mje-nz>`__ - 1 contribution
|
||||
- `Maarten (@mjkl-gh) <https://github.com/mjkl-gh>`__ - 1 contribution
|
||||
- `mjoshd (@mjoshd) <https://github.com/mjoshd>`__ - 2 contributions
|
||||
- `mknjc (@mknjc) <https://github.com/mknjc>`__ - 2 contributions
|
||||
- `mmanza (@mmanza) <https://github.com/mmanza>`__ - 1 contribution
|
||||
- `mnaz (@mnaz) <https://github.com/mnaz>`__ - 1 contribution
|
||||
- `Michael Nieß (@mniess) <https://github.com/mniess>`__ - 1 contribution
|
||||
- `Matt N. (@mnoorenberghe) <https://github.com/mnoorenberghe>`__ - 1 contribution
|
||||
- `morph027 (@morph027) <https://github.com/morph027>`__ - 1 contribution
|
||||
- `Matthew Pettitt (@mpettitt) <https://github.com/mpettitt>`__ - 1 contribution
|
||||
- `Ryan Matthews (@mrrsm) <https://github.com/mrrsm>`__ - 1 contribution
|
||||
- `MrZetor (@MrZetor) <https://github.com/MrZetor>`__ - 1 contribution
|
||||
- `mtl010957 (@mtl010957) <https://github.com/mtl010957>`__ - 9 contributions
|
||||
- `Michiel van Turnhout (@mvturnho) <https://github.com/mvturnho>`__ - 15 contributions
|
||||
@ -333,37 +384,44 @@ Contributors
|
||||
- `Niels Ulrik Andersen (@myplacedk) <https://github.com/myplacedk>`__ - 1 contribution
|
||||
- `Kevin Uhlir (@n0bel) <https://github.com/n0bel>`__ - 1 contribution
|
||||
- `Erik Näsström (@Naesstrom) <https://github.com/Naesstrom>`__ - 1 contribution
|
||||
- `Oskar Napieraj (@napieraj) <https://github.com/napieraj>`__ - 6 contributions
|
||||
- `Oskar Napieraj (@napieraj) <https://github.com/napieraj>`__ - 7 contributions
|
||||
- `Bergont Nicolas (@nbergont) <https://github.com/nbergont>`__ - 1 contribution
|
||||
- `Nebula (@nebula-it) <https://github.com/nebula-it>`__ - 1 contribution
|
||||
- `neographikal (@neographikal) <https://github.com/neographikal>`__ - 1 contribution
|
||||
- `nepozs (@nepozs) <https://github.com/nepozs>`__ - 1 contribution
|
||||
- `nickrout (@nickrout) <https://github.com/nickrout>`__ - 1 contribution
|
||||
- `Nick Whyte (@nickw444) <https://github.com/nickw444>`__ - 3 contributions
|
||||
- `nicuh (@nicuh) <https://github.com/nicuh>`__ - 1 contribution
|
||||
- `nikito7 (@nikito7) <https://github.com/nikito7>`__ - 1 contribution
|
||||
- `Nikolay Kitanov (@nkitanov) <https://github.com/nkitanov>`__ - 1 contribution
|
||||
- `nldroid (@nldroid) <https://github.com/nldroid>`__ - 2 contributions
|
||||
- `Alex (@nnmalex) <https://github.com/nnmalex>`__ - 1 contribution
|
||||
- `ffabi (@norges) <https://github.com/norges>`__ - 2 contributions
|
||||
- `Greg Johnson (@notgwj) <https://github.com/notgwj>`__ - 1 contribution
|
||||
- `Nuno Sousa (@nunofgs) <https://github.com/nunofgs>`__ - 1 contribution
|
||||
- `Chris Nussbaum (@nuttytree) <https://github.com/nuttytree>`__ - 1 contribution
|
||||
- `Dave Walker (@oddsockmachine) <https://github.com/oddsockmachine>`__ - 1 contribution
|
||||
- `Olivér Falvai (@ofalvai) <https://github.com/ofalvai>`__ - 1 contribution
|
||||
- `Omar Ghader (@omarghader) <https://github.com/omarghader>`__ - 1 contribution
|
||||
- `Oncleben31 (@oncleben31) <https://github.com/oncleben31>`__ - 1 contribution
|
||||
- `Oscar Bolmsten (@oscar-b) <https://github.com/oscar-b>`__ - 4 contributions
|
||||
- `Pack3tL0ss (@Pack3tL0ss) <https://github.com/Pack3tL0ss>`__ - 1 contribution
|
||||
- `Panuruj Khambanonda (PK) (@panuruj) <https://github.com/panuruj>`__ - 2 contributions
|
||||
- `Paul Deen (@PaulAntonDeen) <https://github.com/PaulAntonDeen>`__ - 2 contributions
|
||||
- `Paul Nicholls (@pauln) <https://github.com/pauln>`__ - 3 contributions
|
||||
- `Paul Nicholls (@pauln) <https://github.com/pauln>`__ - 4 contributions
|
||||
- `Bartłomiej Biernacki (@pax0r) <https://github.com/pax0r>`__ - 2 contributions
|
||||
- `peq123 (@peq123) <https://github.com/peq123>`__ - 2 contributions
|
||||
- `per1234 (@per1234) <https://github.com/per1234>`__ - 2 contributions
|
||||
- `perjury (@perjury) <https://github.com/perjury>`__ - 1 contribution
|
||||
- `Philip Rosenberg-Watt (@PhilRW) <https://github.com/PhilRW>`__ - 1 contribution
|
||||
- `phjr (@phjr) <https://github.com/phjr>`__ - 2 contributions
|
||||
- `pille (@pille) <https://github.com/pille>`__ - 1 contribution
|
||||
- `pieterbrink123 (@pieterbrink123) <https://github.com/pieterbrink123>`__ - 1 contribution
|
||||
- `pille (@pille) <https://github.com/pille>`__ - 2 contributions
|
||||
- `pixiandreas (@pixiandreas) <https://github.com/pixiandreas>`__ - 1 contribution
|
||||
- `Peter Kuehne (@pkuehne) <https://github.com/pkuehne>`__ - 5 contributions
|
||||
- `Plácido Revilla (@placidorevilla) <https://github.com/placidorevilla>`__ - 2 contributions
|
||||
- `Marcus Kempe (@plopp) <https://github.com/plopp>`__ - 1 contribution
|
||||
- `DK (@poldim) <https://github.com/poldim>`__ - 1 contribution
|
||||
- `DK (@poldim) <https://github.com/poldim>`__ - 2 contributions
|
||||
- `Iván Povedano (@pove) <https://github.com/pove>`__ - 1 contribution
|
||||
- `Peter Stuifzand (@pstuifzand) <https://github.com/pstuifzand>`__ - 1 contribution
|
||||
- `Peter Tatrai (@ptatrai) <https://github.com/ptatrai>`__ - 1 contribution
|
||||
@ -372,30 +430,38 @@ Contributors
|
||||
- `Tommy Jonsson (@quazzie) <https://github.com/quazzie>`__ - 2 contributions
|
||||
- `Quinn Hosler (@quinnhosler) <https://github.com/quinnhosler>`__ - 1 contribution
|
||||
- `r-jordan (@r-jordan) <https://github.com/r-jordan>`__ - 1 contribution
|
||||
- `Richard Kuhnt (@r15ch13) <https://github.com/r15ch13>`__ - 2 contributions
|
||||
- `Pär Stålberg (@rabbadab) <https://github.com/rabbadab>`__ - 1 contribution
|
||||
- `Florian Ragwitz (@rafl) <https://github.com/rafl>`__ - 1 contribution
|
||||
- `Robert Cambridge (@rcambrj) <https://github.com/rcambrj>`__ - 1 contribution
|
||||
- `Ronald Dehuysser (@rdehuyss) <https://github.com/rdehuyss>`__ - 1 contribution
|
||||
- `Alex Reid (@reidprojects) <https://github.com/reidprojects>`__ - 2 contributions
|
||||
- `richardweinberger (@richardweinberger) <https://github.com/richardweinberger>`__ - 1 contribution
|
||||
- `Rich Foley (@RichFoley) <https://github.com/RichFoley>`__ - 1 contribution
|
||||
- `Richard Lewis (@richrd) <https://github.com/richrd>`__ - 3 contributions
|
||||
- `Rico van Genugten (@ricovangenugten) <https://github.com/ricovangenugten>`__ - 1 contribution
|
||||
- `rjmurph2241 (@rjmurph2241) <https://github.com/rjmurph2241>`__ - 1 contribution
|
||||
- `rlowens (@rlowens) <https://github.com/rlowens>`__ - 3 contributions
|
||||
- `LMR (@rmooreID) <https://github.com/rmooreID>`__ - 1 contribution
|
||||
- `Ryan Mounce (@rmounce) <https://github.com/rmounce>`__ - 1 contribution
|
||||
- `rnauber (@rnauber) <https://github.com/rnauber>`__ - 3 contributions
|
||||
- `Rob Deutsch (@rob-deutsch) <https://github.com/rob-deutsch>`__ - 1 contribution
|
||||
- `Rob de Jonge (@robdejonge) <https://github.com/robdejonge>`__ - 1 contribution
|
||||
- `Robin Smidsrød (@robinsmidsrod) <https://github.com/robinsmidsrod>`__ - 2 contributions
|
||||
- `RockBomber (@RockBomber) <https://github.com/RockBomber>`__ - 1 contribution
|
||||
- `Jérôme W. (@RomRider) <https://github.com/RomRider>`__ - 1 contribution
|
||||
- `Robbie Page (@rorpage) <https://github.com/rorpage>`__ - 1 contribution
|
||||
- `rradar (@rradar) <https://github.com/rradar>`__ - 4 contributions
|
||||
- `rradar (@rradar) <https://github.com/rradar>`__ - 6 contributions
|
||||
- `rspaargaren (@rspaargaren) <https://github.com/rspaargaren>`__ - 5 contributions
|
||||
- `Rubén G. (@rubengargar) <https://github.com/rubengargar>`__ - 1 contribution
|
||||
- `rudgr (@rudgr) <https://github.com/rudgr>`__ - 1 contribution
|
||||
- `ryanalden (@ryanalden) <https://github.com/ryanalden>`__ - 2 contributions
|
||||
- `Ryan Nazaretian (@ryannazaretian) <https://github.com/ryannazaretian>`__ - 1 contribution
|
||||
- `Sascha (@Scarbous) <https://github.com/Scarbous>`__ - 1 contribution
|
||||
- `Nils Schulte (@Schnilz) <https://github.com/Schnilz>`__ - 1 contribution
|
||||
- `Ville Skyttä (@scop) <https://github.com/scop>`__ - 3 contributions
|
||||
- `Ville Skyttä (@scop) <https://github.com/scop>`__ - 5 contributions
|
||||
- `sekkr1 (@sekkr1) <https://github.com/sekkr1>`__ - 1 contribution
|
||||
- `SenexCrenshaw (@SenexCrenshaw) <https://github.com/SenexCrenshaw>`__ - 2 contributions
|
||||
- `SenexCrenshaw (@SenexCrenshaw) <https://github.com/SenexCrenshaw>`__ - 8 contributions
|
||||
- `Sergio (@sergio303) <https://github.com/sergio303>`__ - 2 contributions
|
||||
- `Sergio Mayoral Martínez (@sermayoral) <https://github.com/sermayoral>`__ - 2 contributions
|
||||
- `sethcohn (@sethcohn) <https://github.com/sethcohn>`__ - 1 contribution
|
||||
@ -413,31 +479,41 @@ Contributors
|
||||
- `Paul Krischer (@SqyD) <https://github.com/SqyD>`__ - 1 contribution
|
||||
- `sredfern (@sredfern) <https://github.com/sredfern>`__ - 2 contributions
|
||||
- `srg74 (@srg74) <https://github.com/srg74>`__ - 1 contribution
|
||||
- `Samuel Sieb (@ssieb) <https://github.com/ssieb>`__ - 10 contributions
|
||||
- `Samuel Sieb (@ssieb) <https://github.com/ssieb>`__ - 13 contributions
|
||||
- `stubs12 (@stubs12) <https://github.com/stubs12>`__ - 1 contribution
|
||||
- `Jordan Vohwinkel (@sublime93) <https://github.com/sublime93>`__ - 1 contribution
|
||||
- `Marcel Feix (@Syndlex) <https://github.com/Syndlex>`__ - 1 contribution
|
||||
- `Teemu Mikkonen (@T3m3z) <https://github.com/T3m3z>`__ - 2 contributions
|
||||
- `Taigar2015 (@Taigar2015) <https://github.com/Taigar2015>`__ - 2 contributions
|
||||
- `Levente Tamas (@tamisoft) <https://github.com/tamisoft>`__ - 2 contributions
|
||||
- `TBobsin (@TBobsin) <https://github.com/TBobsin>`__ - 1 contribution
|
||||
- `Team Super Panda (@teamsuperpanda) <https://github.com/teamsuperpanda>`__ - 1 contribution
|
||||
- `teffcz (@teffcz) <https://github.com/teffcz>`__ - 1 contribution
|
||||
- `The Impaler (@the-impaler) <https://github.com/the-impaler>`__ - 1 contribution
|
||||
- `Nejc (@thedexboy) <https://github.com/thedexboy>`__ - 1 contribution
|
||||
- `Thomas Eckerstorfer (@TheEggi) <https://github.com/TheEggi>`__ - 5 contributions
|
||||
- `Spencer Hachmeister (@TheHackmeister) <https://github.com/TheHackmeister>`__ - 1 contribution
|
||||
- `thejonesyboy (@thejonesyboy) <https://github.com/thejonesyboy>`__ - 1 contribution
|
||||
- `TheJulianJES (@TheJulianJES) <https://github.com/TheJulianJES>`__ - 3 contributions
|
||||
- `Jozef Zuzelka (@TheKuko) <https://github.com/TheKuko>`__ - 2 contributions
|
||||
- `Mateusz Soszyński (@TheLastGimbus) <https://github.com/TheLastGimbus>`__ - 1 contribution
|
||||
- `Andrew Quested (@thenameiwantedwastaken) <https://github.com/thenameiwantedwastaken>`__ - 1 contribution
|
||||
- `Zixuan Wang (@TheNetAdmin) <https://github.com/TheNetAdmin>`__ - 1 contribution
|
||||
- `Florian Gareis (@TheZoker) <https://github.com/TheZoker>`__ - 8 contributions
|
||||
- `Thomas Klingbeil (@thomasklingbeil) <https://github.com/thomasklingbeil>`__ - 3 contributions
|
||||
- `Andrew Thompson (@thompsa) <https://github.com/thompsa>`__ - 2 contributions
|
||||
- `thubot (@thubot) <https://github.com/thubot>`__ - 1 contribution
|
||||
- `tiagofreire-pt (@tiagofreire-pt) <https://github.com/tiagofreire-pt>`__ - 1 contribution
|
||||
- `Tijs-B (@Tijs-B) <https://github.com/Tijs-B>`__ - 1 contribution
|
||||
- `Tim P (@timpur) <https://github.com/timpur>`__ - 2 contributions
|
||||
- `Tim Savage (@timsavage) <https://github.com/timsavage>`__ - 5 contributions
|
||||
- `Tim Savage (@timsavage) <https://github.com/timsavage>`__ - 6 contributions
|
||||
- `Philipp Tölke (@toelke) <https://github.com/toelke>`__ - 1 contribution
|
||||
- `Tom Brien (@TomBrien) <https://github.com/TomBrien>`__ - 1 contribution
|
||||
- `TomFahey (@TomFahey) <https://github.com/TomFahey>`__ - 2 contributions
|
||||
- `Tommy Kihlstrøm (@tomludd) <https://github.com/tomludd>`__ - 1 contribution
|
||||
- `tomlut (@tomlut) <https://github.com/tomlut>`__ - 2 contributions
|
||||
- `Tom Price (@tomtom5152) <https://github.com/tomtom5152>`__ - 2 contributions
|
||||
- `tomlut (@tomlut) <https://github.com/tomlut>`__ - 3 contributions
|
||||
- `Tom Price (@tomtom5152) <https://github.com/tomtom5152>`__ - 3 contributions
|
||||
- `Torwag (@torwag) <https://github.com/torwag>`__ - 1 contribution
|
||||
- `Felix Eckhofer (@tribut) <https://github.com/tribut>`__ - 1 contribution
|
||||
- `Troon (@Troon) <https://github.com/Troon>`__ - 1 contribution
|
||||
- `truglodite (@truglodite) <https://github.com/truglodite>`__ - 1 contribution
|
||||
@ -446,8 +522,9 @@ Contributors
|
||||
- `tubalainen (@tubalainen) <https://github.com/tubalainen>`__ - 3 contributions
|
||||
- `Tuckie (@Tuckie) <https://github.com/Tuckie>`__ - 1 contribution
|
||||
- `Alexey Vlasov (@turbulator) <https://github.com/turbulator>`__ - 1 contribution
|
||||
- `tyomikh (@tyomikh) <https://github.com/tyomikh>`__ - 1 contribution
|
||||
- `ukewea (@ukewea) <https://github.com/ukewea>`__ - 1 contribution
|
||||
- `Vc (@Valcob) <https://github.com/Valcob>`__ - 3 contributions
|
||||
- `Vc (@Valcob) <https://github.com/Valcob>`__ - 4 contributions
|
||||
- `Nad (@valordk) <https://github.com/valordk>`__ - 14 contributions
|
||||
- `Víctor Ferrer García (@vicfergar) <https://github.com/vicfergar>`__ - 1 contribution
|
||||
- `voibit (@voibit) <https://github.com/voibit>`__ - 2 contributions
|
||||
@ -456,14 +533,20 @@ Contributors
|
||||
- `warpzone (@warpzone) <https://github.com/warpzone>`__ - 1 contribution
|
||||
- `Wauter (@Wauter) <https://github.com/Wauter>`__ - 3 contributions
|
||||
- `Ian Wells (@wellsi) <https://github.com/wellsi>`__ - 1 contribution
|
||||
- `Werner Beroux (@wernight) <https://github.com/wernight>`__ - 1 contribution
|
||||
- `Wilmar den Ouden (@wilmardo) <https://github.com/wilmardo>`__ - 1 contribution
|
||||
- `Emil Hesslow (@WizKid) <https://github.com/WizKid>`__ - 1 contribution
|
||||
- `Rick van Hattem (@WoLpH) <https://github.com/WoLpH>`__ - 1 contribution
|
||||
- `Artur 'Wodor' Wielogorski (@wodor) <https://github.com/wodor>`__ - 1 contribution
|
||||
- `Rick van Hattem (@WoLpH) <https://github.com/WoLpH>`__ - 2 contributions
|
||||
- `wutr (@wutr) <https://github.com/wutr>`__ - 1 contribution
|
||||
- `xheronimo (@xheronimo) <https://github.com/xheronimo>`__ - 1 contribution
|
||||
- `Yaroslav (@Yarikx) <https://github.com/Yarikx>`__ - 2 contributions
|
||||
- `Marcin Jaworski (@yawor) <https://github.com/yawor>`__ - 2 contributions
|
||||
- `Pavel (@yekm) <https://github.com/yekm>`__ - 2 contributions
|
||||
- `Atsuko Ito (@yottatsa) <https://github.com/yottatsa>`__ - 1 contribution
|
||||
- `Nico B (@youknow0) <https://github.com/youknow0>`__ - 1 contribution
|
||||
- `YuanL.Lee (@yuanl) <https://github.com/yuanl>`__ - 1 contribution
|
||||
- `ZabojnikM (@ZabojnikM) <https://github.com/ZabojnikM>`__ - 1 contribution
|
||||
- `San (@zhujunsan) <https://github.com/zhujunsan>`__ - 1 contribution
|
||||
|
||||
*This page was last updated October 22, 2020.*
|
||||
*This page was last updated February 3, 2021.*
|
||||
|
BIN
images/Inkplate.jpg
Normal file
After Width: | Height: | Size: 32 KiB |
93
images/canbus.svg
Normal file
@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="135mm"
|
||||
height="60mm"
|
||||
viewBox="0 0 135 60"
|
||||
version="1.1"
|
||||
id="svg100"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="canbus.svg">
|
||||
<defs
|
||||
id="defs94" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.979899"
|
||||
inkscape:cx="377.23571"
|
||||
inkscape:cy="206.93478"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata97">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Laag 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-237)">
|
||||
<path
|
||||
d="m 16.440094,239.55732 100.197636,-0.82276 c 7.87458,-0.0647 14.25779,8.06718 14.25779,18.01748 v 19.94787 c 0,9.9503 -6.38398,17.95186 -14.25779,18.01651 l -100.197636,0.82277 c -7.8745723,0.0647 -14.2585483,-8.0662 -14.2585483,-18.0165 v -19.94792 c 0,-9.95124 6.383809,-18.01745 14.2577863,-18.01745 z"
|
||||
id="path69"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssssssssc"
|
||||
style="stroke-width:0.85861504" />
|
||||
<path
|
||||
d="m 16.440094,239.55732 100.342446,-0.33525 c 7.87473,-0.0255 14.25779,8.06715 14.25779,18.01745 v 19.94792 c 0,9.9503 -6.38383,17.9902 -14.25779,18.01649 l -100.342446,0.33526 c -7.8747113,0.0255 -14.2585483,-8.0662 -14.2585483,-18.0165 v -19.94792 c 0,-9.95124 6.383809,-18.01745 14.2577863,-18.01745 z"
|
||||
stroke-miterlimit="10"
|
||||
id="path71"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1.14453387;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10"
|
||||
sodipodi:nodetypes="cssssssssc" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36.63424301px;line-height:1.25;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold, ';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.85861504"
|
||||
x="19.823954"
|
||||
y="250.492"
|
||||
id="text114"
|
||||
transform="scale(0.8895678,1.1241414)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan112"
|
||||
x="19.823954"
|
||||
y="250.492"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36.63424301px;line-height:1.25;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold, ';fill:#ffffff;stroke-width:0.85861504">CAN</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.48880768px;line-height:1.25;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold, ';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.86666292"
|
||||
x="-352.34537"
|
||||
y="87.275421"
|
||||
id="text118"
|
||||
transform="matrix(0,-0.80144605,1.2477446,0,0,0)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan116"
|
||||
x="-352.34537"
|
||||
y="87.275421"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.48880768px;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold, ';fill:#ffffff;stroke-width:0.86666292">BUS</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.2 KiB |