A component to support [WLED](https://github.com/Aircoookie/WLED/wiki/UDP-Realtime-Control).
This allows to control addressable LEDs over WiFi/UDP, by pushing data right into LEDs.
The most useful to use [Prismatik](https://github.com/psieg/Lightpack) to create
an immersive effect on PC.
It supports all WLED protocols:
- WARLS
- DRGB
- DRGBW
- DNRGB
- WLED Notifier
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
This adds a `e131` component that allows
to register `e131` addressable light effect.
This uses an internal implementation that
is thread-safe instead of using external libraries.
* Extend `uart:` with `rx_buffer_size:`
This allows to configure `rx_buffer_size:`
to efficiently receive big payloads over UART
* lint
* remove old default value
* add test
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* uart: Add support for specifying the number of bits and parity.
ESP8266SwSerial doesn't really check parity but just read the parity bit
and ignore it when receiving data.
Signed-off-by: 0hax <0hax@protonmail.com>
* uart: support begin and end methods.
A component may need to reset uart buffer/status by using begin() and
end() methods. This is useful for example when a component needs to be
sure it is not reading garbage from previously received data over uart.
For end() methods with software serial, disabling interrupt is
currently impossible because of a bug in esp8266 Core:
https://github.com/esp8266/Arduino/issues/6049
Signed-off-by: 0hax <0hax@protonmail.com>
* esphal: add support for detaching an interrupt.
That's needed when a component needs to enable/disable interrupt on a
gpio.
Signed-off-by: 0hax <0hax@protonmail.com>
* uart: rename CONF_NR_BITS to CONF_DATA_BITS_NUMBER.
Signed-off-by: 0hax <0hax@protonmail.com>
* uart: use static const uint32_t instead of #define.
Signed-off-by: 0hax <0hax@protonmail.com>
* uart: use an enum to handle parity.
Signed-off-by: 0hax <0hax@protonmail.com>
* uart: split between esp32 and esp8266.
Signed-off-by: 0hax <0hax@protonmail.com>
* uart: check_uart_settings for parity and number of data bits.
Signed-off-by: 0hax <0hax@protonmail.com>
* name param data_bits
* add new params to test
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* Added ble_scanner component
* ble_scanner: time.h changed to ctime
* ble_scanner: Test added.
* ble_scanner: fixed code formatting.
* Removed duplicate binary sensor tests from test2 and test3 to decrease memory requirements.
* Removed another duplicate test from test2.yaml and moved stepper test to yaml3.yaml to reduce memory requirements of test2.yaml.
* Reverted the last stepper test change
* Moved some sensor tests from test2.yaml to test3.yaml to save memory.
* Moved ruuvitag back to test2.yaml as it requires component esp32_ble_tracker.
* removed apds9960 as it is duplicated
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* esp32_ble_tracker: introduce UUID comparison function
* ble_presence, ble_rssi: use new UUID comparison function
* esp32_ble_tracker: introduce automation on BLE advertising
* test2.yaml: remove deep_sleep due to firmware size restrictions
* wip
* transmitter ready
* climate.whirlpool receiver implemented (#971)
* receiver implemented
* Support for two models of temp ranges
* temperature type and lint
* more lint
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* add test
* not mess line endings
Co-authored-by: mmanza <40872469+mmanza@users.noreply.github.com>
* Basic pytest configuration
* Added unit_test script that triggers pytest
* Changed "fixtures" to fixture_path
This is consistent with pytest's tmp_path
* Initial unit tests for esphome.helpers
* Disabled coverage reporting for esphome/components.
Focus initial unittest efforts on the core code.
* Migrated some ip_address to hypothesis
* Added a hypothesis MAC address strategy
* Initial tests for core
* Added hypothesis to requirements
* Added tests for core classes
TestTimePeriod
Lambda
ID
DocumentLocation
DocumentRange
Define
Library
* Updated test config so package root is discovered
* Setup fixtures and inital tests for pins
* Added tests for validate GPIO
* Added tests for pin type
* Added initial config_validation tests
* Added more tests for config_validation
* Added comparison unit tests
* Added repr to core.TimePeriod. Simplified identifying faults in tests
* Fixed inverted gt/lt tests
* Some tests for Espcore
* Updated syntax for Python3
* Removed usage of kwarg that isn't required
* Started writing test cases
* Started writing test cases for cpp_generator
* Additional docs and more Python3 releated improvements
* More test cases for cpp_generator.
* Fixed linter errors
* Add codegen tests to ensure file API remains stable
* Add test cases for cpp_helpers
* Add AC Dimmer support
Fixes https://github.com/esphome/feature-requests/issues/278
* fixes
basically missed the output pin setup and in the switching was switching true true true :P
* Format
* Enable ESP32
* Also setup ZC pin
* Support multiple dimmers sharing ZC pin
* Fix ESP32
* Lint
* off gate on zc detect
* tests pins validation
* Climate Mitsubishi (#725)
* add climate
* Mitsubishi updates
* refactor mitsubishi to use climate_ir
* lint
* fix: only decode when not str already (#923)
Signed-off-by: wilmardo <info@wilmardenouden.nl>
* fix climate-ir bad merge (#935)
* fix climate-ir bad merge
* add mitshubishi test
* http_request: fix memory allocation (#916)
* http_request version fix (#917)
* PID Climate (#885)
* PID Climate
* Add sensor for debugging PID output value
* Add dump_config, use percent
* Add more observable values
* Update
* Set target temperature
* Add autotuner
* Add algorithm explanation
* Add autotuner action, update controller
* Add simulator
* Format
* Change defaults
* Updates
* Use b''.decode() instead of str(b'') (#941)
Handling of request arguments in WizardRequestHandler is not decoding
bytes and rather just doing a str conversion resulting in a value of
"b''" being supplied to the wizard code.
* Adding the espressif 2.6.3 (#944)
* extract and use current version of python 3 (#938)
* Inverted output in neopixelbus (#895)
* Added inverted output
* Added support for inverted output in neopixelbus
* Update esphome/components/neopixelbus/light.py
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* Update light.py
* corrected lint errors
Co-authored-by: Otto Winter <otto@otto-winter.com>
* Added degree symbol for MAX7219 7-segment display. (#764)
The ascii char to use it is "~" (0x7E).
Disclaimer: I didn't test this yet.
* Fix dump/tx of 64 bit codes (#940)
* Fix dump/tx of 64 bit codes
* fixed source format
* Update hdc1080.cpp (#887)
* Update hdc1080.cpp
increase waittime, to fix reading errors
* Fix: Update HDC1080.cpp
i fixed the my change on write_bytes
* add tcl112 support for dry, fan and swing (#939)
* Fix SGP30 incorrect baseline reading/writing (#936)
* Split the SGP30 baseline into 2 values
- According to the SGP30 datasheet, each eCO2 and TVOC baseline is a 2-byte value (MSB first)
- The current implementation ignores the MSB of each of the value
- Update the schema to allow 2 different baseline values (optional, but both need to be specified for the baseline to apply)
* Make both eCO2 and TVOC required if the optional baseline is defined
* Make dump_config() looks better
* Add register_*_effect to allow registering custom effects (#947)
This allows to register custom effect from user components,
allowing for bigger composability of source.
* Bugfix/normalize core comparisons (and Python 3 update fixes) (#952)
* Correct implementation of comparisons to be Pythonic
If a comparison cannot be made return NotImplemented, this allows the
Python interpreter to try other comparisons (eg __ieq__) and either
return False (in the case of __eq__) or raise a TypeError
exception (eg in the case of __lt__).
* Python 3 updates
* Add a more helpful message in exception if platform is not defined
* Added a basic pre-commit check
* Add transmit pioneer (#922)
* Added pioneer_protocol to support transmit_pioneer
* Display tm1637 (#946)
* add TM1637 support
* Support a further variant of Xiaomi CGG1 (#930)
* Daikin climate ir component (#964)
* Daikin ARC43XXX IR remote controller support
* Format and lint fixes
* Check temperature values against allowed min/max
* fix tm1637 missing __init__.py (#975)
* Add AC Dimmer support
Fixes https://github.com/esphome/feature-requests/issues/278
* fixes
basically missed the output pin setup and in the switching was switching true true true :P
* Format
* Enable ESP32
* Also setup ZC pin
* Support multiple dimmers sharing ZC pin
* Fix ESP32
* Lint
* off gate on zc detect
* tests pins validation
* fix esp8266 many dimmers, changed timing
* Increased value resolution, added min power
* use min_power from base class
* fix min_power. add init with half cycle
* added method for trailing pulse, trailing and leading
* fix method name. try filter invalid falling pulse
* renamed to ac_dimmer
* fix ESP32 not configuring zero cross twice
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
Co-authored-by: Wilmar den Ouden <wilmardo@users.noreply.github.com>
Co-authored-by: Nikolay Vasilchuk <Anonym.tsk@gmail.com>
Co-authored-by: Tim Savage <tim@savage.company>
Co-authored-by: Vc <37367415+Valcob@users.noreply.github.com>
Co-authored-by: gitolicious <mrjchn@gmail.com>
Co-authored-by: voibit <krestean@gmail.com>
Co-authored-by: Luar Roji <cyberplant@users.noreply.github.com>
Co-authored-by: András Bíró <1202136+andrasbiro@users.noreply.github.com>
Co-authored-by: dmkif <dmkif@users.noreply.github.com>
Co-authored-by: Panuruj Khambanonda (PK) <pk@panurujk.com>
Co-authored-by: Kamil Trzciński <ayufan@ayufan.eu>
Co-authored-by: Keith Burzinski <kbx81x@gmail.com>
Co-authored-by: Mario <4376789+mario-tux@users.noreply.github.com>
Co-authored-by: Héctor Giménez <hector.fwbz@gmail.com>
* add energy support in pzemac sensor
Co-authored-by: Sergio Mayoral Martinez <sergiomayoralmartinez@gmail.com>
Co-authored-by: t151602 <sergio.mayoralmartinez@telefonica.com>
Co-authored-by: Otto Winter <otto@otto-winter.com>
* Add RFBridge component
* Fix format issues
* Rename methods
* More formatting
* Fix line length
* Apply suggestions from code review
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* Check uart settings on dump
* Make receiving local to the loop
* FIx code order and schema
* Add rf_bridge to test file
* Apply suggestions from code review
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* Add support for Sensirion SPS30 Particulate Matter sensors
* Remove blocking of the main thread on initialization;
Improve wording on the debug messages;
Add robustness in re-initialization of reconnected or replaced sensors;
* Fix code formatting;
Co-authored-by: Nad <valordk@github>
* Add QMC5883L and Updated HMC5883L
* add tests
* changed to oversampling
* fix pylint
* fix private method
* typo fix
* fix protected method
* Clean up code and PR recomendations
* fix tests
* remote file
* fix qmc oversampling unit
* Remove hmc5883l config logging
Either the units are converted to the user values like 1x, 8x oversampling or not printed at all. Printing the machine-value of these is only confusing users.
* Changes for validate_enum
Move stuff that can be done beforehand out of the bound function, use text_type for py2/3 compatability.
* Remove unused constant
* Remove duplicate tests
* Repeat remove config print
* remove changes to test2 since bin is to large
* Add comment to HMC5583L
Co-authored-by: Timothy Purchas <timothy@TPF.local>
Co-authored-by: Otto Winter <otto@otto-winter.com>
* Added more data to atm90e32 component
* ignore
* correction
* Delete 6chan_energy_meter.yaml
* PR request changes
* repository test branch
* Update setup.py
* Update const.py
* delete test yaml
* fix chip_temperature_sensor
This was throwing an error if chip_temperature was used. It needed to be changed from temp to temperature.
* default
* Update test1.yaml
* implemented ruuvi_ble and ruuvitag with RAWv1 protocol
fixesesphome/feature-requests#313
* lint
* updated data calculations
* cpp lint
* use string directly in message
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* add RAWv2 protocol support
* fix ICON_SIGNAL
* typo
* calculation correction and cleaning
* c++ lint
* added acceleration and fixed typo
* removed remote_receiver to reduce firmware size
remote_receiver also in test1.yaml
* Add MAX31865 sensor support, fix MAX31855 sensor.
# MAX31865
Added support for the MAX31865 RTD-to-Digital Converter to measure PT100 and
similar RTDs. Verified with an Adafruit unit (product ID: 3328) and a PT100
probe.
# MAX31855
This was setup for incorrect SPI clock polarity and phase, and would return bad
data due to a race condition measuring on the wrong edge (verified with Saleae
Logic scope). Selecting the correct configuration fixes that problem.
Re-wrote the decode off the datasheet to handle error states better (sends NaN
as an update on failure to read temperature, which shows the value as Unknown
in Home Assistant).
Added the *optional* ability to monitor the internal high-precision temperature
sensor, which can be nice in some applications.
* Tests for MAX31855/MAX38165.
* Update style to match project rules.
Also fix CONF_REFERENCE_RESISTANCE and CONF_REFERENCE_TEMPERATURE being defined
multiple places. Missed this when I added them to const.py.
* Update style to match project rules.
Pylint line limit 101/100 ("missed it by that much").
Also apparently I can't read and patched the wrong line in max31855.cpp.
* Minor string/style cleanup.
There was a copy-paste leftover in max31855.cpp and max31865/sensor.py had
unnecessary whitespace.
* Improve MAX31865 fault detection and logging.
Log levels are more in-line with the documented descriptions.
Fault detection code is improved. A transient fault between reads is still
reported, but now only faults *during* a read cause the sensor to fail and
return NAN ("unknown" in Home Assistant).
* Update style to match project rules.
I just now realized the .clang-format and pylintrc files are included. D'oh!
* MAX31855 & MAX31865 code style alignment.
@OttoWinter caught some style mismatches, updated to match project better.
* Fix a lost '\' in max31865/sensor.py.
* Add support for Sensirion STS3x Temperature sensors
* Removed humidty reading from STS3x sensor
* Fixed line error and operand error
* Fixed syntax
* Add test snippet for STS3x sensor
* Clean up
* #550 Proactive fix for STS3x component reporting WARNING status and reinitialzing similar to SHT3xd
* Flattened config.
* Fixed missing temperature unit
* Code formatting
* Added marking for future commands
* Cleanup
* Removed whitespace
* Cleanup
* Cleanup
* Add support for Sensirion STS3x Temperature sensors
* Removed humidty reading from STS3x sensor
* Fixed line error and operand error
* Fixed syntax
* Add test snippet for STS3x sensor
* Clean up
* Add support for Sensirion SHTC1 and SHTC3 Temperature sensors
* Fixed the test
* Fix lint issues
* Update esphome/components/shtcx/shtcx.cpp
Good point.
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* Refactored device type identification and logging
* Refactoring and cleanup
* Remove sts3x
Co-authored-by: Otto Winter <otto@otto-winter.com>
* Add support for SGP30 eCO2 and TVOC sensors
* Added test for SGP30
* Lint issues fixed
* Lint fixes
* Fixed light lengths
* Cleanup
* Add support for Sensirion SCD30 CO2 sensors
* Fixed few lint issues
* Lint fixes
* Fixed line ending for lint
* Cleanup
* Refactored float conversion
* Refactor unnecessary return
* Refactoring and cleanup
* Updated uptime_sensor_ referencing and simplified checking on availability of copensation
* Temperature and Humidity source moved to a separate compensation block; Dependency for Uptime sensor removed.
* Both humidity_source and temperature_source are now mandatory if the compensation block is defined;
* Clean up
* Cleanup
* Cleanup in search of perfection
* Use correct comment style
Co-authored-by: Otto Winter <otto@otto-winter.com>
* add ssd1325 component
* fix i2c
* remove ssd1325 i2c
* add test
* set max contrast
* No macros - see styleguide
* Remove invalid function
* Formatting
Co-authored-by: Otto Winter <otto@otto-winter.com>
* refactored xiaomi sensors
* fix lint
* fixed and added tests
* fix namespace
* LYWSD02 has no battery level
* fixed enum
* fix
* fix case
* fix spaces in empty line...
* inform users of old sensors about the change
* Add support for TI TLC59208F
The chip is a 8-BIT FM+ I2C BUS LED DRIVER with
8 open-drain output channels.
Its features include:
- 256 linear levels
- group dimming
- group blinking
- 64 slave addresses
- customizable sub addresses and all call address
- output update on stop or on ACK
- 3.3V or 5V supply with 5V tolerant IO
- no glitch startup
- 50mA / output continuous current up to 17V
* Convert macro to uint8_t
Variables had to be renamed, clang-format would protest against
mixed case in global variable name.
* Change gen-call reset to use the correct i2c bus
* Basic auth
* Test
* Linter fix
* Make username/password strict strings
Reason: passwords only consisting of digits (012345) will be silently converted (to "12345")
Co-authored-by: Otto Winter <otto@otto-winter.com>
* Allow configuration to enable or disable automatic baseline calibration on boot
* Add actions to enable or disable automatic baseline calibration
* Add action to calibrate zero point
* Adding bitmask to narrow compare of received codes
Updated test to add mask configuration
* Lint
* Handle bitmask as ignore characters per review comment
* Fixed test to cover ignore bits
* Lint
* Eliminate separate set_mask method per review comment
* Provide the lights current color to the addressable_lambda_effect.
* Fix formatting
* More formatting
* Change the call signature of the lambda
* lint
Co-authored-by: olg <x>
* Enabling tilt control in the template cover
Added test
Add tilt option to publish action
* Added CONF_TILT to alidation schema per comment
* Removed default for CONF_TILT
* Atmel M90E32AS Energy Metering IC. Found in CircuitSetup 2can and 6chan energy meters
* fix style bugs
* Update esphome/components/atm90e32/atm90e32.cpp
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* Properly put atm90e32_reg in namespace
* Use phase grouped config like ina3221
* Log why the component is marked failed, did not read back our register value
* 32bit register reads are 2s compliment
* Fix atm90e32 option name in test
* clang-format changes from travis-ci
* use new protected method names
* Whitespace changes to please Travis
* Update esphome/components/atm90e32/atm90e32.cpp
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* Fix up type change for val_h/val_l
* Remove conditions around values with defaults
* Rename constants to match their value
* Remove 2's complement check
Co-authored-by: Andrew Thompson <andrew@whosonlocation.com>
Co-authored-by: Otto Winter <otto@otto-winter.com>
* Add CT Clamp component
* Update lint
* Some more fixes
* Make updates to work as an analog sensor consumer
* Remove unused imports
Update lint suggestions
* Move setup_priority to header
* Remove unused calibration value
* Remove Unique ID
- Will be auto generated
* Update to use loop and not slow down main loop
Co-authored-by: Otto Winter <otto@otto-winter.com>
* add binary_sensor_map c code
* add python file
* fixed python and C++ code for new framework
* renamed add_sensor to add_channel
* travis
* Updates
- Use struct for channels_ array - heap allocation is not really necessary here.
- any_active can also be written as mask != 0
- Update setup priority to DATA
- Use shorter TAG (name is already long; not important)
- Quotes around name
- Add icon to sensor
- Use new cv.typed_schema
- Change CONF_CHANNEL to CONF_BINARY_SENSOR - makes it clearer that this option accepts a binary sensor (and not for example an int)
- Add test
Co-authored-by: Otto Winter <otto@otto-winter.com>
* Lint
* add coolix climate ❄ 🔥
* Fixes
* Reviewed
* Fix for dev
ClimateDevice was renamed to Climate
* Remove stale method
* Lint
* Initialize target temperature, avoid NAN value
* Use clamp and round value
* Set to verbose message
Not really relevant to the user
* Remove constructor
Name is now set in climate.register_climate - saves integrations from having to declare a constructor
* Fix, add test
Co-authored-by: Otto Winter <otto@otto-winter.com>
## Description:
Move esphome-core codebase into esphome (and a bunch of other refactors). See https://github.com/esphome/feature-requests/issues/97
Yes this is a shit ton of work and no there's no way to automate it :( But it will be worth it 👍
Progress:
- Core support (file copy etc): 80%
- Base Abstractions (light, switch): ~50%
- Integrations: ~10%
- Working? Yes, (but only with ported components).
Other refactors:
- Moves all codegen related stuff into a single class: `esphome.codegen` (imported as `cg`)
- Rework coroutine syntax
- Move from `component/platform.py` to `domain/component.py` structure as with HA
- Move all defaults out of C++ and into config validation.
- Remove `make_...` helpers from Application class. Reason: Merge conflicts with every single new integration.
- Pointer Variables are stored globally instead of locally in setup(). Reason: stack size limit.
Future work:
- Rework const.py - Move all `CONF_...` into a conf class (usage `conf.UPDATE_INTERVAL` vs `CONF_UPDATE_INTERVAL`). Reason: Less convoluted import block
- Enable loading from `custom_components` folder.
**Related issue (if applicable):** https://github.com/esphome/feature-requests/issues/97
**Pull request in [esphome-docs](https://github.com/esphome/esphome-docs) with documentation (if applicable):** esphome/esphome-docs#<esphome-docs PR number goes here>
## Checklist:
- [ ] The code change is tested and works locally.
- [ ] Tests have been added to verify that the new code works (under `tests/` folder).
If user exposed functionality or configuration variables are added/changed:
- [ ] Documentation added/updated in [esphomedocs](https://github.com/OttoWinter/esphomedocs).
* Support SDS011 component.
* improve if condition
* Check update interval is multiple of minute
* do not allow update intervals longer than 30 min
* fix sensor schema name
* remove query_mode
* Warn if rx_only mode used together with update interval
* Allow update intervals below 1min
Messed that up before, as the docs say update intervals below 1min are allowed
* Use update interval in minutes
* use set_update_interval_min() to set update interval
* Enable use of alternate hardware UARTs for logging
Enable use of Serial1 on ESP8266 and Serial1/Serial2 on ESP32 for logging.
This is frequently done on ESP8266 to allow use of Serial for UART TX+RX,
while maintaining logging output on Serial1 which is TX-only via GPIO2.
* ESPHOMELIB_UART -> UART_SELECTION_UART; HW_UART -> HARDWARE_UART
* Add test3 to travis; remove test4
* Set DEBUG_ESP_PORT based on logger UART setting