mirror of
https://github.com/esphome/esphome.git
synced 2025-09-24 22:22:22 +01:00
🏗 Merge C++ into python codebase (#504)
## 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).
This commit is contained in:
22
esphome/components/ttp229_lsf/__init__.py
Normal file
22
esphome/components/ttp229_lsf/__init__.py
Normal file
@@ -0,0 +1,22 @@
|
||||
import esphome.codegen as cg
|
||||
import esphome.config_validation as cv
|
||||
from esphome.components import i2c
|
||||
from esphome.const import CONF_ID
|
||||
|
||||
DEPENDENCIES = ['i2c']
|
||||
AUTO_LOAD = ['binary_sensor']
|
||||
|
||||
CONF_TTP229_ID = 'ttp229_id'
|
||||
ttp229_ns = cg.esphome_ns.namespace('ttp229')
|
||||
|
||||
TTP229LSFComponent = ttp229_ns.class_('TTP229LSFComponent', cg.Component)
|
||||
|
||||
CONFIG_SCHEMA = cv.Schema({
|
||||
cv.GenerateID(): cv.declare_variable_id(TTP229LSFComponent),
|
||||
}).extend(cv.COMPONENT_SCHEMA).extend(i2c.i2c_device_schema(0x57))
|
||||
|
||||
|
||||
def to_code(config):
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
yield cg.register_component(var, config)
|
||||
yield i2c.register_i2c_device(var, config)
|
21
esphome/components/ttp229_lsf/binary_sensor.py
Normal file
21
esphome/components/ttp229_lsf/binary_sensor.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from esphome.components import binary_sensor
|
||||
import esphome.config_validation as cv
|
||||
import esphome.codegen as cg
|
||||
from esphome.const import CONF_CHANNEL, CONF_NAME, CONF_ID
|
||||
from . import ttp229_ns, TTP229LSFComponent, CONF_TTP229_ID
|
||||
|
||||
DEPENDENCIES = ['ttp229_lsf']
|
||||
TTP229Channel = ttp229_ns.class_('TTP229Channel', binary_sensor.BinarySensor)
|
||||
|
||||
CONFIG_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_SCHEMA.extend({
|
||||
cv.GenerateID(): cv.declare_variable_id(TTP229Channel),
|
||||
cv.GenerateID(CONF_TTP229_ID): cv.use_variable_id(TTP229LSFComponent),
|
||||
cv.Required(CONF_CHANNEL): cv.All(cv.Coerce(int), cv.Range(min=0, max=15))
|
||||
}))
|
||||
|
||||
|
||||
def to_code(config):
|
||||
hub = yield cg.get_variable(config[CONF_TTP229_ID])
|
||||
var = cg.new_Pvariable(config[CONF_ID], config[CONF_NAME], config[CONF_CHANNEL])
|
||||
yield binary_sensor.register_binary_sensor(var, config)
|
||||
cg.add(hub.register_channel(var))
|
43
esphome/components/ttp229_lsf/ttp229.cpp
Normal file
43
esphome/components/ttp229_lsf/ttp229.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
#include "ttp229.h"
|
||||
#include "esphome/core/log.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace ttp229 {
|
||||
|
||||
static const char *TAG = "ttp229";
|
||||
|
||||
void TTP229LSFComponent::setup() {
|
||||
ESP_LOGCONFIG(TAG, "Setting up ttp229...");
|
||||
if (!this->parent_->raw_request_from(this->address_, 2)) {
|
||||
this->error_code_ = COMMUNICATION_FAILED;
|
||||
this->mark_failed();
|
||||
return;
|
||||
}
|
||||
}
|
||||
void TTP229LSFComponent::dump_config() {
|
||||
ESP_LOGCONFIG(TAG, "ttp229:");
|
||||
LOG_I2C_DEVICE(this);
|
||||
switch (this->error_code_) {
|
||||
case COMMUNICATION_FAILED:
|
||||
ESP_LOGE(TAG, "Communication with TTP229 failed!");
|
||||
break;
|
||||
case NONE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
void TTP229LSFComponent::loop() {
|
||||
uint16_t touched = 0;
|
||||
if (!this->parent_->raw_receive_16(this->address_, &touched, 1)) {
|
||||
this->status_set_warning();
|
||||
return;
|
||||
}
|
||||
this->status_clear_warning();
|
||||
touched = reverse_bits_16(touched);
|
||||
for (auto *channel : this->channels_) {
|
||||
channel->process(touched);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace ttp229
|
||||
} // namespace esphome
|
36
esphome/components/ttp229_lsf/ttp229.h
Normal file
36
esphome/components/ttp229_lsf/ttp229.h
Normal file
@@ -0,0 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/core/component.h"
|
||||
#include "esphome/components/binary_sensor/binary_sensor.h"
|
||||
#include "esphome/components/i2c/i2c.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace ttp229 {
|
||||
|
||||
class TTP229Channel : public binary_sensor::BinarySensor {
|
||||
public:
|
||||
TTP229Channel(const std::string &name, int channel) : BinarySensor(name), channel_(channel) {}
|
||||
void process(uint16_t data) { this->publish_state(data & (1 << this->channel_)); }
|
||||
|
||||
protected:
|
||||
int channel_;
|
||||
};
|
||||
|
||||
class TTP229LSFComponent : public Component, public i2c::I2CDevice {
|
||||
public:
|
||||
void register_channel(TTP229Channel *channel) { this->channels_.push_back(channel); }
|
||||
void setup() override;
|
||||
void dump_config() override;
|
||||
float get_setup_priority() const override { return setup_priority::DATA; }
|
||||
void loop() override;
|
||||
|
||||
protected:
|
||||
std::vector<TTP229Channel *> channels_{};
|
||||
enum ErrorCode {
|
||||
NONE = 0,
|
||||
COMMUNICATION_FAILED,
|
||||
} error_code_{NONE};
|
||||
};
|
||||
|
||||
} // namespace ttp229
|
||||
} // namespace esphome
|
Reference in New Issue
Block a user