* Fix some Tuya devices not handling commands sent without delay
* Also do not report WiFi status if MCU does not support it
* Support Tuya MCU 0x1c command (obtain local time)
* Use #ifdef USE_TIME to handle optional dependency on RTC
* Rename Tuya clock config variable to time to be consistent with the codebase
* Add tuya time configuration to test4
* setup ili9341 framework
used epaper-waveshare as start
* first version working
* added models for now only M5Stack
* get_buffer_length is huge
* fill, low/high watermark, buffer tests failed.
RAM is to small for ili9341 16 bit color mode
* removed high/low watermark debug log
* added standard 2.4" TFT model
* code cleanup
* make ledpin optional
busy pin is not needed
* make bufer 1 byte to avoid the
buffer allocation error
* gitignore
* added backlight pin to dump_config
* huge speed increase
8bit color framebuffer (256 colors)
lo and high watermark for drawing to screen
* fix for images
* higher spi data rates
* Set spi data rate to 40Mhz Experimental
* fixed: formatting
fixed: the last row and column being trimmed
fixed: namings
* Update the code to use Color class
* fixed minor color things
* fixed linting
* #patch minor fixes
* fix gitignore too
* Update esphome/components/ili9341/ili9341_display.cpp
Co-authored-by: Oleg <epushiron+github@gmail.com>
* reverting the changes as it's being fixed in PR-1241
Co-authored-by: Michiel van Turnhout <qris.online@gmail.com>
Co-authored-by: Michiel van Turnhout <m.vanturnhout@exxellence.nl>
Co-authored-by: Oleg <epushiron+github@gmail.com>
* Hbridge Christmas light component
Can be used for Christmas lights that use 2 wires to run 2 different strings of lights using a hbridge driver.
* Add Test
NOTE: I am unable to test this via the docker image
* Update hbridge_light_output.h
* Update hbridge_light_output.h
* Update hbridge_light_output.h
* Update light.py
* Fixed duty as white value bug fixed
* lint changes
* Name case change
* thanks lint
The Tuya MCU keeps its own internal minimum brightness setting. This value may
not match the minimum brightness setting for ESPHome, leading to some issues:
1. Dimming is limited--on some devices the default minimum is as high as 10%,
meaning the dimmest ESPHome will go is still quite bright.
2. HA will allow a user to set a value below the MCU minimum, but the MCU will
reject it and keep the previous setting, so the UI is confusing.
This PR adds a setting to configure the datapoint for setting the MCU minimum
brightness. If the setting is set, then ESPHome will synchronize the MCU's
minimum brightness with the one configured for ESPHome on startup.
* WIP: Advanced commands for portisch firmware
* Fix string code sending
* clang formatting
* Add new rf_bridge functions to test
* Add advanced code received trigger
* Fix copy-paste mistake in the advanced sending
* Fix log message to be consistent
* clang
* Remove extra +
* fix: FastLED SPI_DATA_RATE being truncated to 8 bits
FastLED expects SPI_DATA_RATE as an uint32_t, but we had it as uint8_t.
Fix that to avoid the data rate being truncated.
* fastled: allow specifying data rate
Previously, we've just taken the default data rate from FastLED.
However, that does not always work properly. In my case, I had a
slow level shifter that couldn't keep up with the 1 MHz data
rate default for WS2801. Long cabling might also be a reason why
one might want to reduce the data rate.
This will add a new optional "data_rate" config option where one
may specify the desired data rate as a frequency:
light:
- platform: fastled_spi
chipset: WS2801
data_pin: GPIO23
clock_pin: GPIO22
data_rate: 500kHz
num_leds: 178
* Add support for WPA2-EAP enterprise WiFi to ESP8266s.
This is fundamentally the same as on ESP32s only with different function names.
Update config checker to remove requirement for ESP32 for EAP authentication.
* Fix indent for clang
* Move pn532 -> pn532_spi
Add pn532_i2c
* Update i2c address
* Always wait for ready byte before reading
* Generalise the pn532 a bit more so less code in i2c and spi implementations
* clang
* Add pn532_i2c to test1
* Try to get setup working
* Fixes
* More updates
* Command consts
* A few upgrades
* Change text back to include 'new'
* Fix data reading
* Added tmp102 temperature sensor support
* Added sensor to test3.yaml
* Moved docstring to component root
* Tweak formatting from clang-format script
* Removed extra newline at the end of the file to satisfy pylint
* Update schema to match that of other single-value sensors
In ESPHome, sensors that only expose one value do not put the sensor under another key.
* Add missing import
* Fix test after structural change to component
* removed unused setting
* Update esphome/components/tmp102/tmp102.cpp
Co-authored-by: Otto Winter <otto@otto-winter.com>
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
* Fix Xiaomi merged packet parsing
solves #1500
* renamed variables and updated payload and value checking
* renamed function and parameter
* add function to header
* changed log message
* Fix Xiaomi merged packet parsing
solves #1500
* renamed variables and updated payload and value checking
* renamed function and parameter
* add function to header
* changed log message
This patch fixes faulty behaviour when both, invert and min_power/max_power
are set for a float output (e.g. PWM). The current code scales the output
level to the range [min_power, max_power] and subsequently inverts the value.
This leads to values that are outside the range [min_power, max_power].
This patch fixes the problem by inverting the requested level first and then
scaling it to the interval [min_power, max_power].
Co-authored-by: Thomas Niederprüm <niederp@physik.uni-kl.de>
* add reverse option
* Update max7219digit.cpp
adding space for formatting
* Update esphome/components/max7219digit/display.py
Copy past error...
Co-authored-by: Otto Winter <otto@otto-winter.com>
Co-authored-by: Otto Winter <otto@otto-winter.com>
* Fix post-setup brightness control
* Add turn_on() and turn_off() methods
* Added is_on() method
* Set brightness later in setup()
* Use clamp() for brightness validation
* Fix post-setup brightness control
* Add turn_on() and turn_off() methods
* Added is_on() method
* Set brightness later in setup()
* Use clamp() for brightness validation
* Started to work on packages feature
* Added some more validation to packages config
* Fixed some linter warnings
* Updated tests
* Reordered consts to avoid linter error
* Reordered consts to avoid linter error
* Refactored test yaml files to integrate into existing test pipeline
Co-authored-by: Dmitry Berezovsky <dmitry.berezovsky@logicify.com>
* Added 7.5inchV2
* Added 7.5inV2
* Added 7.5inch_V2
* fixed Display function
* Inverted bytecode
Added ~() to invert the bytecode and make the screen look black text on white background
* Hoping to keep Travis happy with blank lines
* more travis hacking
* travis happy?
* wow
* gfhj
* Start support for tuya climate devices
* Add tuya climate to test4
* Fix lint and cast
* Remove blank line
* Try to display accurate action based on observed behaviour.
* Fix action when in off mode
* Improve config dump
* merge use of CONF_SWITCH_DATAPOINT
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* SSD1325 grayscale support implemented
* Linted
* Fix garbage on display at power-up
* Rebase
* Linted
* Add brightness control, CS fixes
* Fix up SSD1327 init
* Add turn_on() and turn_off() methods
* Set brightness later in setup(), logging tweak
* Added is_on() method
* Added grayscale image support
* Updated to use Color, 1327 GS fix
* Add config generation and validation to support various WPA2-EAP authentication methods.
Config generate validates that all the required parameters are set in valid combinations.
In the event of EAP-TLS, the private key is matched to the certificate to check for pasting errors.
Add EAPAuth struct to header.
Add eap_auth property to WiFiAP with getters/setters.
* Add C++ code for setting WPA2-EAP authentication.
* Fix config for x509 EAP-TLS authentication.
* Fix a few linting issues.
* Fix a couple more linting issues that only showed up in CI
* Remove stray character.
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* Move stop/is_running implementation to Action base class
Try to fix issue #1105. Until now if an UpdateComponentAction, a
LambdaAction, or any action that can contain those inside their
"else" or "then" action lists, resulted in a call to script.stop on
the script that contains them, the script would continue running,
because they didn't implement a stop() method. Basically only
the asynchronous ones did: DelayAction, WaitUntilAction and
ScriptWaitAction.
With this change num_running_ in Action replaces
DelayAction::num_running_ and WaitUntilAction::triggered_ to provide
the same is_running logic to other actions.
* Make some Action methods protected
Apparently play()/stop() etc. are not meant to be called directly by
users of the class and if they're called directly that would not give
the expected result for the classes that have an empty play().
Make all methods except play_complex, stop_comples and is_running
protected. While there also make RemoteTransmitterActionBase::encode
protected.
* lint
* format
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* Update vl53l0x_sensor.cpp
Changed values for long range support
* added true / false option for long range detection
* debug missing ,
* further debug option long_range
* Travis updates
* added travis tests
* Travis removed space should be good now
* update to trigger travis again
* added old test files for PR
* added vl5310x sensor for compile testing
* fix variable names
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* TFT-LCD ST7789V of ESP32 TTGO.
This patch allows you to use TFT-LCD ST7789V of ESP32 TTGO
* Lots of polish and a few tweaks
* Add test
* Add color to core, take 1
* Where did those tabs come from?
* Fix lines too long
* Added color component
* Linted
* Rebase, SPI fix, test
* Shuffle bits
* One more thing...oops
* Image type fix...oops
* Make display_buffer use Color
* Fix BGR/RGB, remove predefined colors
* Fix all the things
* renamed colors to color
* migrate max7219
Co-authored-by: musk95 <musk95@naver.com>
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* push final files
* Update max7219digit.cpp
reenter small bug fix on uint8 declaration
* small debug
* set max offset to 100
* remove unwanted file
* Update font file to make travis happy
* travis update
* further progress in keeping Yarvis happy
* travis font
* travis will never be satisfied but one step ahead
* YARVIS TAKE 10000000
* never ending yarvis
* Almost there with Yarvis
* removed double declaration YARVIS
* added namespace to font file (TRAVIS)
* almost there last changes for YARVIS
* further travis updates
* removed files for travis
* fix display.py length of line travis remark
* further update on display.py
* file delete travis requirement
* final entry for travis?
* Some further debug on max offset
* Travis updates
* scroll_left_new
* 90degreesrotate
* added option to config rotate90
* four orientations for the chips
* new setup for scroll
* replaced small bug missing {}
* debug changed int8 to int16 on scroll function
* removed small merge failure
* travis updates round 1
* travis updates round 2
* travis details round 3
* added options to set scroll parameters in yaml conf
* removed ttf and png to satisfy travis
* travis update
* travis updates
* travis
* further updates after input from @glmnet
* remove deleted comments
* Added ENUM TYPE to config file
* change in test file
* removed test files
* updates for pull request
* Typing error removed
* travis update
* PR updates travis
* Update test3.yaml
* Update test3.yaml
* update device schema as per #988
* Delete partitions.csv
* repair on image display and invert routine
* further update and a bit of cleanup
* added writing 0 in draw pixel
* small deletion error
* travis updates
* Update max7219digit.cpp
adding intensity value to dynamically set value
* Update max7219digit.h
adding option for intensity
* remove some files from tests
* add support for SN74HC595 shift register
* fix linter errors
* more linter reported issues fixed
* hopefully last linter error cleanup
* one more linter fix
* looks like the linter is always keeping stuff for later, is this the final fix?
* add test
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
Also removed new line formatting tidy as it requires a bit of memory which might not be available.
* Use suitably scoped char for log newline stripping
* fix formatting
* Better fix for OOM logging crash
* Limit to ESP32 only
* format changes
* Add LG Climate ir
* Add LG Climate IR
* Add LG Climate IR
* Add LG Climate IR
* Add LG Climate IR
* Add LG Climate IR
* Add LG Climate IR
Co-authored-by: Sangheon Heo <square99@SangHeonui-Macmini.local>
* Fix receive and transmit for RC5-protocol
Receive did not work as a sequence of two high or low puleses are detected as one long pulse. Transmit was extended to respect the field bit in order to enable codes up to 127.
* Fix code formatting
* Add fan support to bang bang controller
* Fix heat-only and cool-only modes
* Added support for all climate actions and modes
* Fix up some comments
* Fan_only mode behavior tweak
* Updated test
* Updated test, take 2
* Add accessor methods for easier use in lambadas
* Revert "Add accessor methods for easier use in lambadas"
This reverts commit f15713129cd5587242a08ad1e2ee37cbf075aa03.
Don't code late at night when sleepy.
* Fix single/dual setpoint support
* Linted
* Properly implement single-point, validation improvements
* Another quick fix...sigh
* Update tests
* Update tests, take 2
* Revert "Update tests, take 2"
This reverts commit 71bb7fccc53d95a7d221e80ea0a931fb3cfd9a0c.
Nope.
* Revert "Update tests"
This reverts commit 42044291efaaf09858f29ab27bbc3aa9e8b80ee9.
Nope 2.
* Updated/fixed tests
* Revert "Updated/fixed tests"
This reverts commit a1a5b1c7db9a240b9da668b6e48abe1dd7910777.
Taking a different approach.
* Revert "Another quick fix...sigh"
This reverts commit 6b1955724a2de3c2d1534ec206dd5794bbb5f568.
Taking a different approach.
* Revert "Properly implement single-point, validation improvements"
This reverts commit f5bfff099e1dc58edd3898da8655c147adde2301.
Taking a different approach.
* Single/dual set point fixes, full validation
* Fix test
* Fix restore-on-boot, clean up comments
* Decouple two-point/auto operation, more polish
* One last away mode tweak
* Added set point validation
* Clean up over-publishing, always call action after boot
* Add fan support to bang bang controller
* Fix heat-only and cool-only modes
* Added support for all climate actions and modes
* Fix up some comments
* Fan_only mode behavior tweak
* Updated test
* Updated test, take 2
* Add accessor methods for easier use in lambadas
* Revert "Add accessor methods for easier use in lambadas"
This reverts commit f15713129cd5587242a08ad1e2ee37cbf075aa03.
Don't code late at night when sleepy.
* Fix single/dual setpoint support
* Linted
* Properly implement single-point, validation improvements
* Another quick fix...sigh
* Update tests
* Update tests, take 2
* Revert "Update tests, take 2"
This reverts commit 71bb7fccc53d95a7d221e80ea0a931fb3cfd9a0c.
Nope.
* Revert "Update tests"
This reverts commit 42044291efaaf09858f29ab27bbc3aa9e8b80ee9.
Nope 2.
* Updated/fixed tests
* Revert "Updated/fixed tests"
This reverts commit a1a5b1c7db9a240b9da668b6e48abe1dd7910777.
Taking a different approach.
* Revert "Another quick fix...sigh"
This reverts commit 6b1955724a2de3c2d1534ec206dd5794bbb5f568.
Taking a different approach.
* Revert "Properly implement single-point, validation improvements"
This reverts commit f5bfff099e1dc58edd3898da8655c147adde2301.
Taking a different approach.
* Single/dual set point fixes, full validation
* Fix test
* Fix restore-on-boot, clean up comments
* Decouple two-point/auto operation, more polish
* One last away mode tweak
* Added set point validation
* Clean up over-publishing, always call action after boot
* Added refresh() function to allow easy on-device state refreshing
* ADE7953: Fix dereferencing of a null pointer
The ade7953 driver dereferences a null pointer, when not all of
its sensors are used. This gives an exception like:
Fatal exception:29 flag:2 (EXCEPTION) epc1:0x4020c241 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000018 depc:0x00000000
* Fix formatting
Co-authored-by: olg <x>
* Fix fan oscillation trait not being used
* Add fan direction support to SpeedFan
* Add fan direction to API
* Add fan direction support to BinaryFan
* Fix CI errors
* Fix python format
* Change some ordering to trigger CI
* Add test for the configuration
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.
* making SPI CS optional
* CS pin should be declared as optional or required in CONFIG_SCHEMA
* changed SPI_DEVICE_SCHEMA to a function, like i2c
* added spi_device_schema() to pcd8544, lint fixes
* updated max31856 with new spi_device_schema()
* cleanup imports
Co-authored-by: Ilya Goldberg <iggie@mac.com>
* Turn off PN532 RF field when not expecting a tag
Avoids interference with Wifi connectivity of nearby devices.
* Rename turn_off_rf_ method
* documented off command bytes
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
* 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>
* Update ESP32 BLE ADV parse to match BLE spec
* Update xiaomi
* Update ruuvi
* Format
* Update esp32_ble_tracker.cpp
* Fix log
* Format
* Update xiaomi_ble.cpp
* 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 auto discovery and setup to Dallas Platform
* Added auto discovery and setup to Dallas Platform
* Added auto discovery and setup to Dallas Platform
* Added auto discovery and setup to Dallas Platform
* Added auto discovery and setup to Dallas Platform
* 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>
* dht: Fix sensor reading from DHT22 (#239)
Looking at the datasheet for DHT22, it claims to need a delay of 18ms, not
800us. Change to use the same delay as DHT11. Tested working with NodeMCUv3
and DHT22 sensor with board with built-in resistor.
* dht: Add model DHT22_TYPE2 with 2ms delay instead of 0.8ms
The model DHT22_TYPE2 is exactly the same as DHT22, but uses a different
delay.
* dht: Fix bogus negative temperature reading on DHT22_TYPE2
The workaround for negative numbers associated with DHT22s can be skipped
on these sensors.
* 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
* Change buffer sending process for waveshare_epaper (2.70in)
The current way ESPhome sending buffer to WaveshareEPaper2P7In does not show the expected content on the display, this commit is changing the data transferring process so the content is showing as expected.
The process is adapted from the demo code provided by Waveshare, manufacturer of the E-paper display.
* Fix linting eror
Since we put the sensor to sleep when not measuring, make sure to wake
it up during setup. It does not respond to any other I2C commands
(including reset) while asleep, so if we've done a soft reboot while
it was sleeping then setup() would fail since it wouldn't respond to
anything.
* 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
* climate.daikin: implement remote receive
* climate.daikin: fix temperature value in special modes
* climate.daikin: tweak timing to fit better to ir-remote signal
* 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 the GET and POST handler for cover components. Also add covers to
the index page although the Open/Close buttons that are shown for covers
will need a few lines added to webserver-v1.js, without them they don't
do anything.
* 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 new config options
* init variables in code
* load css and js in python
* update print inside webserver
* fix indentation
* fix indentation
* indentation fix
* fix condition in init
* use cv.file_ instead of cv.string
* do not import EsphomeError
* support embedding js and css at the same time as defined in url
* handle css as separate page
* handle js as separate page
* fix copy and paste error
* 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
Don't try to update CT clamp's state with NaN values returned from the
underlaying sensor. A single IO error in the sensor code will cause a
NaN to be returned and if we use that in CTClampSensor's floating point
maths both sample_sum_ and offset_ will become NaN and from there every
future calculation will use the NaN offset_ and return NaN too.
* 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>
* Update ESP32 BLE ADV parse to match BLE spec
* Update xiaomi
* Update ruuvi
* Format
* Update esp32_ble_tracker.cpp
* Fix log
* Format
* Update xiaomi_ble.cpp
* 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>
In a heavy EMI environment, reading the current config from the MAX31865 can
fail, such as switching from a 4-wire sensor to a 3-wire sensor. This causes
the temperature value to be off wildly, but still technically valid, so it
doesn't get reported as a sensor failure.
Since we know what configuration we want, rather than send it to the MAX31865
on setup and ask for it over and over (propagating any error as we write it
back), instead store the base configuration and work from that to change modes.
This not only avoids propagating any error, it also saves a lot of unnecessary
reads from the MAX31865.
* added idle
* more clear state description
* Also add drying/fan
Putting it in this PR because it will be put in the same aioesphomeapi release anyway.
* Update bang_bang for idle action
Co-authored-by: root <root@mail.danman.eu>
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
* Decode DHT11 decimal part
* Fix comment
* Fix comment
* Handle negative temp for some DHT11 - code from the DHT12 component
* Don't use the fractional part if the checksum is the 2 bytes one
* Fix logger uart conflict check
* Fix class for check func
* Fix syntax
Hope lint is OK with moving the end of the conditional outside the #IFDEF
* Move end of conditional inside ifdef and remove extra whitespace
* Simplify
clang-format did not like the ifdefs and was reformatting in a way that killed clang-tidy.
Simple solution is to use logger's hw_serial as source of truth
Also simplifies the code - uart doesn't need to know what the logger uart settings mean
* Add api missing_state attribute
Fixes https://github.com/esphome/issues/issues/828
Adds a new property for missing state, so that HA can now when a sensor does not have a state yet.
* Update api.proto
* Fix logger uart conflict check
* Fix class for check func
* Fix syntax
Hope lint is OK with moving the end of the conditional outside the #IFDEF
* Move end of conditional inside ifdef and remove extra whitespace
* Simplify
clang-format did not like the ifdefs and was reformatting in a way that killed clang-tidy.
Simple solution is to use logger's hw_serial as source of truth
Also simplifies the code - uart doesn't need to know what the logger uart settings mean
* Add api missing_state attribute
Fixes https://github.com/esphome/issues/issues/828
Adds a new property for missing state, so that HA can now when a sensor does not have a state yet.
* Update api.proto
* 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.
* new Fujitsu-General climate component
* Refactor out climate_ir
CC @glmnet
Refactored out climate_ir python files too.
Fixed invalid namespace name for climate_ir.
* Add namespace lint check
* Refactor Fujitsu Climate to climate_ir
Co-authored-by: Otto Winter <otto@otto-winter.com>
* new Fujitsu-General climate component
* Refactor out climate_ir
CC @glmnet
Refactored out climate_ir python files too.
Fixed invalid namespace name for climate_ir.
* Add namespace lint check
* Refactor Fujitsu Climate to climate_ir
Co-authored-by: Otto Winter <otto@otto-winter.com>
* web_server_base AUTO_LOAD includes ASYNC_TCP
fix AUTO_LOAD of web_server_base to include ASYNC_TCP
* Remove from dependencies
Co-authored-by: Otto Winter <otto@otto-winter.com>
* web_server_base AUTO_LOAD includes ASYNC_TCP
fix AUTO_LOAD of web_server_base to include ASYNC_TCP
* Remove from dependencies
Co-authored-by: Otto Winter <otto@otto-winter.com>
* 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>
* 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>
* add support for climate action:
Following hass implementation of climate, action represents the current action the climate device is perfoming, e.g. cooling or heating
fix bang_bang climate:
make sure that the thresholds are always respected.
fixes the issue where the component would just keep on heating, regardless of the temperature range
* Updates
- Use dedicated enum for action (otherwise it gets confusing because "auto" is not a valid action)
- Add field to tell HA that action is supported
- Revert semantic changes in bang_bang
* Conditional print
Co-authored-by: Otto Winter <otto@otto-winter.com>
* add ClimateIR
* update climate ir
* update class comment
* lint
* moved to climate_ir
* fix include path
* use climateir
* updates
* update include path
* lint
* fixed variable assigned to itself
I'm facing some occasional timeouts when reading BME280.
Looking at Adafruit driver (that this code is based on), I see that base math is using 1.25ms, increased by 2.3*oversampliing + 0.575 for each value being read.
I've added 1.5ms as baseline, to be on the same safe.
* Add support for TTGO ePaper module
Use 2.13in-ttgo as type. Only different LUTs were needed, everything else is the same.
relates to issue #233.
* fix styling errors
* styling fixes
Co-authored-by: null <mandy.klingbeil@student.hpi.uni-potsdam.de>
* 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
* Fix for PCF8574 output chattering at the start/reboot
* Fix for PCF8574 output chattering at the start/reboot
* Fix for PCF8574 output chattering at the start/reboot
Co-authored-by: Amish Vishwakarma <vishwakarma.amish@gmai.com>
* 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
* added ANALOG_OUTPUT as first functionality
* added gpio
* seperated the code for different functions
* fixed code
* Revert "fixed code"
This reverts commit 0c6eacb225.
* add timings for breathe and blink
* made the sx1509_float_output am output component
* add keypad
* implementation for sx1509 keypad
* keypad code cleanup and first device tests
* debounce
* keypad working now.
* update for timings.
does not compile yet
* added all options for breathe and blink
fixed var namings
* blink and breath still not ok
* fixed ms for timings
* sync with repo
* fixed issue with gpio pin output
* code cleanup
* lint
* more lint
* remove log from header
* Update esphome/components/sx1509/__init__.py
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* review
* feedback
* fixed review issues
did some extended testing with mqtt spy
* code cleanup (comments)
* fixed row col swap for binarysensor_keypad
* flake and lint
* travis
* travis
* travis
* Update esphome/components/sx1509/sx1509.cpp
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* review
* separated platforms
* code cleanup
* travis relative paths in python
* remove blink/breathe
code cleanup
* cpp lint
* feedback
* travis
* lint line to long
* check keypad settings to be valid
* clang
* keypad config
* text
* Remove wrong .gitignore from .gitignore
* Remove .pio folder from .gitignore (merge)
* Formatting
* Formatting
* Add i2c log in dump_config
* Remove unused variables
* Disable static for header files
We don't need internal linkage
* Use consistent member default argument style
* Run clang-format
Co-authored-by: null <m.vanturnhout@exxellence.nl>
Co-authored-by: Otto Winter <otto@otto-winter.com>
* 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>
* add nexa remote support.
This is inspired by: https://github.com/sui77/rc-switch/pull/124
As described there: "The remotes sold in ClasOhlson in scandinavia have
a slightly longer sync sequence(added a skip pulse field in the
protocol) and a 64 bit code word. Part of the code gets lost but that
seems to be OK until support for 64 bit codes is added."
* add default value to ctor
* allow 64bit codes
* lint
* make vars 64 bits
* add has built in endstop
* rewrite as proposed
* Update esphome/components/time_based/time_based_cover.h
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* lint
* Re trigger stop_operation if stop called
* allow se triggering open/close command if safe
* using COVER_OPEN/CLOSE constants
* add xiaomi BLE Thermometer lywsd02 model support
* remove battery level
* Update sensor.py
to pass the lint test
https://github.com/esphome/esphome/pull/664
* fix trailing space
Co-authored-by: Guoxue <gx@m15.cn>
Co-authored-by: mr G1K <mr@g1k.ru>
* 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
* Fix mqtt_text_sensor to honor unique_id when set.
* Remove setting of unique_id in json tree, as the mqtt_component already does this, and in fact overrides what we do here.
* Add unqiue_id() and dump_config() to the wifi_info sensors.
* Erase all flash for USB uploads on ESP8266s
Previously, only erased "write regions".
Downside: Config for other FWs like tasmota could be affected
Upside: Potentially fixes some ESP8266 connection issues
Related: https://github.com/esphome/issues/issues/455#issuecomment-503524479
* Clear WiFi settings for ESP8266
Clears wifi settings from retained storage on ESP8266 (if set).
Unsure if this is the actual issue, but it won't cause problems either.
* Update wifi_component_esp8266.cpp
* Revert erase chip for testing
* Improve wait_time calculation
* 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>
* Added scan_length to AddressableScanEffect (allow more than one LED)
* Added check for scan length being longer than addressable light
* Added config option 'scan_length' to AddressableScanEffect (default: 1)
* Renamed scan_length to scan_width, removed erroneous length check
* Fixed indentation issue in addressable_light_effect.h
Co-Authored-By: Otto Winter <otto@otto-winter.com>
* Add backlight handling for lcd_pcf8574
Switch the backlight on or off by calling id(mydisplay).backlight()
or id(mydisplay).no_backlight() in lamda functions (assuming mydisplay
is the custom id for the LCD).
* Use abstract method
Co-authored-by: Attila Darazs <attila@darazs.com>
Co-authored-by: Otto Winter <otto@otto-winter.com>