mirror of
https://github.com/esphome/esphome.git
synced 2024-12-11 16:04:54 +01:00
835079ad43
* 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>
66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/core/esphal.h"
|
|
#include "esphome/components/output/float_output.h"
|
|
|
|
namespace esphome {
|
|
namespace ac_dimmer {
|
|
|
|
enum DimMethod { DIM_METHOD_LEADING_PULSE = 0, DIM_METHOD_LEADING, DIM_METHOD_TRAILING };
|
|
|
|
struct AcDimmerDataStore {
|
|
/// Zero-cross pin
|
|
ISRInternalGPIOPin *zero_cross_pin;
|
|
/// Zero-cross pin number - used to share ZC pin across multiple dimmers
|
|
uint8_t zero_cross_pin_number;
|
|
/// Output pin to write to
|
|
ISRInternalGPIOPin *gate_pin;
|
|
/// Value of the dimmer - 0 to 65535.
|
|
uint16_t value;
|
|
/// Minimum power for activation
|
|
uint16_t min_power;
|
|
/// Time between the last two ZC pulses
|
|
uint32_t cycle_time_us;
|
|
/// Time (in micros()) of last ZC signal
|
|
uint32_t crossed_zero_at;
|
|
/// Time since last ZC pulse to enable gate pin. 0 means not set.
|
|
uint32_t enable_time_us;
|
|
/// Time since last ZC pulse to disable gate pin. 0 means no disable.
|
|
uint32_t disable_time_us;
|
|
/// Set to send the first half ac cycle complete
|
|
bool init_cycle;
|
|
/// Dimmer method
|
|
DimMethod method;
|
|
|
|
uint32_t timer_intr(uint32_t now);
|
|
|
|
void gpio_intr();
|
|
static void s_gpio_intr(AcDimmerDataStore *store);
|
|
#ifdef ARDUINO_ARCH_ESP32
|
|
static void s_timer_intr();
|
|
#endif
|
|
};
|
|
|
|
class AcDimmer : public output::FloatOutput, public Component {
|
|
public:
|
|
void setup() override;
|
|
|
|
void dump_config() override;
|
|
void set_gate_pin(GPIOPin *gate_pin) { gate_pin_ = gate_pin; }
|
|
void set_zero_cross_pin(GPIOPin *zero_cross_pin) { zero_cross_pin_ = zero_cross_pin; }
|
|
void set_init_with_half_cycle(bool init_with_half_cycle) { init_with_half_cycle_ = init_with_half_cycle; }
|
|
void set_method(DimMethod method) { method_ = method; }
|
|
|
|
protected:
|
|
void write_state(float state) override;
|
|
|
|
GPIOPin *gate_pin_;
|
|
GPIOPin *zero_cross_pin_;
|
|
AcDimmerDataStore store_;
|
|
bool init_with_half_cycle_;
|
|
DimMethod method_;
|
|
};
|
|
|
|
} // namespace ac_dimmer
|
|
} // namespace esphome
|