mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-05-19 12:43:28 +02:00
6682c43dfa
## 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).
72 lines
2.4 KiB
C++
72 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "binary_output.h"
|
|
|
|
namespace esphome {
|
|
namespace output {
|
|
|
|
#define LOG_FLOAT_OUTPUT(this) \
|
|
LOG_BINARY_OUTPUT(this) \
|
|
if (this->max_power_ != 1.0f) { \
|
|
ESP_LOGCONFIG(TAG, " Max Power: %.1f%%", this->max_power_ * 100.0f); \
|
|
} \
|
|
if (this->min_power_ != 0.0f) { \
|
|
ESP_LOGCONFIG(TAG, " Min Power: %.1f%%", this->min_power_ * 100.0f); \
|
|
}
|
|
|
|
/** Base class for all output components that can output a variable level, like PWM.
|
|
*
|
|
* Floating Point Outputs always use output values in the range from 0.0 to 1.0 (inclusive), where 0.0 means off
|
|
* and 1.0 means fully on. While using floating point numbers might make computation slower, it
|
|
* makes using maths much easier and (in theory) supports all possible bit depths.
|
|
*
|
|
* If you want to create a FloatOutput yourself, you essentially just have to override write_state(float).
|
|
* That method will be called for you with inversion and max-min power and offset to min power already applied.
|
|
*
|
|
* This interface is compatible with BinaryOutput (and will automatically convert the binary states to floating
|
|
* point states for you). Additionally, this class provides a way for users to set a minimum and/or maximum power
|
|
* output
|
|
*/
|
|
class FloatOutput : public BinaryOutput {
|
|
public:
|
|
/** Set the maximum power output of this component.
|
|
*
|
|
* All values are multiplied by max_power - min_power and offset to min_power to get the adjusted value.
|
|
*
|
|
* @param max_power Automatically clamped from 0 or min_power to 1.
|
|
*/
|
|
void set_max_power(float max_power);
|
|
|
|
/** Set the minimum power output of this component.
|
|
*
|
|
* All values are multiplied by max_power - min_power and offset by min_power to get the adjusted value.
|
|
*
|
|
* @param min_power Automatically clamped from 0 to max_power or 1.
|
|
*/
|
|
void set_min_power(float min_power);
|
|
|
|
/// Set the level of this float output, this is called from the front-end.
|
|
void set_level(float state);
|
|
|
|
// ========== INTERNAL METHODS ==========
|
|
// (In most use cases you won't need these)
|
|
|
|
/// Get the maximum power output.
|
|
float get_max_power() const;
|
|
|
|
/// Get the minimum power output.
|
|
float get_min_power() const;
|
|
|
|
protected:
|
|
/// Implement BinarySensor's write_enabled; this should never be called.
|
|
void write_state(bool state) override;
|
|
virtual void write_state(float state) = 0;
|
|
|
|
float max_power_{1.0f};
|
|
float min_power_{0.0f};
|
|
};
|
|
|
|
} // namespace output
|
|
} // namespace esphome
|