mirror of
https://github.com/esphome/esphome.git
synced 2025-03-13 22:28:14 +00:00
Refactore ppd42x.py
This commit is contained in:
parent
cb76038445
commit
026bd039f1
@ -1,59 +1,72 @@
|
||||
import voluptuous as vol
|
||||
|
||||
from esphome import pins
|
||||
from esphome.components import sensor
|
||||
from esphome.components import sensor, uart
|
||||
from esphome.components.uart import UARTComponent
|
||||
import esphome.config_validation as cv
|
||||
from esphome.const import CONF_ID, CONF_PM_10_0, CONF_PM_2_5, CONF_NAME, \
|
||||
CONF_UPDATE_INTERVAL, CONF_TIMEOUT, CONF_PIN
|
||||
from esphome.cpp_generator import Pvariable, add
|
||||
from esphome.cpp_helpers import gpio_input_pin_expression, \
|
||||
setup_component
|
||||
from esphome.cpp_types import App
|
||||
from esphome.const import CONF_ID, CONF_NAME, CONF_PM_10_0, \
|
||||
CONF_PM_2_5, CONF_PIN, CONF_TYPE
|
||||
from esphome.cpp_generator import Pvariable, get_variable
|
||||
from esphome.cpp_helpers import setup_component
|
||||
from esphome.cpp_types import App, Component
|
||||
|
||||
|
||||
Ppd42xSensorComponent = sensor.sensor_ns.class_('Ppd42xSensorComponent',
|
||||
sensor.PollingSensorComponent)
|
||||
PPD42X10_0Sensor = sensor.sensor_ns.class_('BME680TemperatureSensor',
|
||||
sensor.EmptyPollingParentSensor)
|
||||
PPD42X02_5Sensor = sensor.sensor_ns.class_('BME680PressureSensor',
|
||||
sensor.EmptyPollingParentSensor)
|
||||
PPD42XComponent = sensor.sensor_ns.class_('PPD42XComponent', Component)
|
||||
PPD42XSensor = sensor.sensor_ns.class_('PPD42XSensor', sensor.Sensor)
|
||||
|
||||
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
|
||||
cv.GenerateID(): cv.declare_variable_id(Ppd42xSensorComponent),
|
||||
vol.Optional(CONF_PM_10_0): sensor.SENSOR_SCHEMA.extend({
|
||||
cv.GenerateID(): cv.declare_variable_id(PPD42X10_0Sensor),
|
||||
}),
|
||||
vol.Optional(CONF_PM_2_5): sensor.SENSOR_SCHEMA.extend({
|
||||
cv.GenerateID(): cv.declare_variable_id(PPD42X02_5Sensor),
|
||||
}),
|
||||
vol.Required(CONF_TIMEOUT): cv.positive_time_period_microseconds,
|
||||
vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval,
|
||||
CONF_PPD42__ = 'PPD42'
|
||||
CONF_PPD42NS = 'PPD42NS'
|
||||
|
||||
PPD42XType = sensor.sensor_ns.enum('PPD42XType')
|
||||
PPD42X_TYPES = {
|
||||
CONF_PPD42__: PPD42XType.PPD42_TYPE___,
|
||||
CONF_PPD42NS: PPD42XType.PPD42X_TYPE_NS,
|
||||
}
|
||||
|
||||
SENSORS_TO_TYPE = {
|
||||
CONF_PM_2_5: [CONF_PPD42__, CONF_PPD42NS],
|
||||
CONF_PM_10_0: [CONF_PPD42__, CONF_PPD42NS],
|
||||
}
|
||||
|
||||
|
||||
def validate_PPD42X_sensors(value):
|
||||
for key, types in SENSORS_TO_TYPE.items():
|
||||
if key in value and value[CONF_TYPE] not in types:
|
||||
raise vol.Invalid(u"{} does not have {} sensor!".format(value[CONF_TYPE], key))
|
||||
return value
|
||||
|
||||
|
||||
PPD42X_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({
|
||||
cv.GenerateID(): cv.declare_variable_id(PPD42XSensor),
|
||||
vol.Required(CONF_PIN): pins.gpio_input_pin_schema
|
||||
})
|
||||
|
||||
PLATFORM_SCHEMA = vol.nameable(sensor.PLATFORM_SCHEMA.extend({
|
||||
cv.GenerateID(): cv.declare_variable_id(PPD42XComponent),
|
||||
vol.Required(CONF_TYPE): cv.one_of(*PPD42X_TYPES, upper=True),
|
||||
vol.Optional(CONF_PM_2_5): cv.nameable(PPD42X_SENSOR_SCHEMA),
|
||||
vol.Optional(CONF_PM_10_0): cv.nameable(PPD42X_SENSOR_SCHEMA),
|
||||
}).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSORS_TO_TYPE))
|
||||
|
||||
|
||||
def to_code(config):
|
||||
rhs = App.make_ppd42x(config[CONF_NAME], PPD42X_TYPES[config[CONF_TYPE]])
|
||||
pms = Pvariable(config[CONF_ID], rhs)
|
||||
|
||||
if CONF_PM_2_5 in config:
|
||||
conf_02_5 = config[CONF_PM_2_5]
|
||||
for pm_02_5 in gpio_input_pin_expression(conf_02_5[CONF_PIN]):
|
||||
conf = config[CONF_PM_2_5]
|
||||
for pm_02_5 in get_variable(conf[CONF_PIN]):
|
||||
yield
|
||||
sensor.register_sensor(ppd42x.make_pm_02_5_sensor(conf_02_5[CONF_NAME]), conf_02_5)
|
||||
rhs = App.make_ppd42x_sensor(config[CONF_PM_2_5][CONF_NAME],
|
||||
config.get(CONF_UPDATE_INTERVAL))
|
||||
se_02_5 = Pvariable(conf_02_5[CONF_ID], rhs)
|
||||
sensor.setup_sensor(se_02_5, conf_02_5)
|
||||
setup_component(se_02_5, config)
|
||||
sensor.register_sensor(pms.make_pm_2_5_sensor(conf[CONF_NAME]), conf)
|
||||
|
||||
|
||||
if CONF_PM_10_0 in config:
|
||||
conf_10_0 = config[CONF_PM_10_0]
|
||||
for pm_10_0 in gpio_input_pin_expression(conf_10_0[CONF_PIN]):
|
||||
conf = config[CONF_PM_10_0]
|
||||
for pm_10_0 in get_variable(conf[CONF_PIN]):
|
||||
yield
|
||||
sensor.register_sensor(ppd42x.make_pm_10_0_sensor(conf_10_0[CONF_NAME]), conf_10_0)
|
||||
rhs = App.make_ppd42x_sensor(config[CONF_PM_10_0][CONF_NAME],
|
||||
config.get(CONF_UPDATE_INTERVAL))
|
||||
se_10_0 = Pvariable(conf_10_0[CONF_ID], rhs)
|
||||
sensor.setup_sensor(se_10_0, conf_10_0)
|
||||
setup_component(se_10_0, config)
|
||||
if CONF_TIMEOUT in config:
|
||||
add(se_10_0.set_timeout_us(config[CONF_TIMEOUT]))
|
||||
sensor.register_sensor(pms.make_pm_10_0_sensor(conf[CONF_NAME]), conf)
|
||||
|
||||
|
||||
BUILD_FLAGS = '-DUSE_PPD42X_SENSOR'
|
||||
setup_component(pms, config)
|
||||
|
||||
BUILD_FLAGS = '-DUSE_PPD42X'
|
||||
|
@ -503,6 +503,7 @@ sensor:
|
||||
rx_only: false
|
||||
|
||||
- platform: ppd42x
|
||||
type: PPD42
|
||||
pm_2_5:
|
||||
pin: GPIO32
|
||||
name: "ppd42 PM2.5"
|
||||
|
Loading…
x
Reference in New Issue
Block a user