mirror of
https://github.com/esphome/esphome.git
synced 2025-02-19 02:12:11 +01:00
Implement custom sensor platform
This commit is contained in:
parent
f087e313d4
commit
497e5fa172
@ -62,6 +62,7 @@ FILTERS_SCHEMA = vol.All(cv.ensure_list, [vol.All({
|
|||||||
# Base
|
# Base
|
||||||
sensor_ns = esphomelib_ns.namespace('sensor')
|
sensor_ns = esphomelib_ns.namespace('sensor')
|
||||||
Sensor = sensor_ns.class_('Sensor', Nameable)
|
Sensor = sensor_ns.class_('Sensor', Nameable)
|
||||||
|
SensorPtr = Sensor.operator('ptr')
|
||||||
MQTTSensorComponent = sensor_ns.class_('MQTTSensorComponent', mqtt.MQTTComponent)
|
MQTTSensorComponent = sensor_ns.class_('MQTTSensorComponent', mqtt.MQTTComponent)
|
||||||
|
|
||||||
PollingSensorComponent = sensor_ns.class_('PollingSensorComponent', PollingComponent, Sensor)
|
PollingSensorComponent = sensor_ns.class_('PollingSensorComponent', PollingComponent, Sensor)
|
||||||
|
34
esphomeyaml/components/sensor/custom.py
Normal file
34
esphomeyaml/components/sensor/custom.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from esphomeyaml.components import sensor
|
||||||
|
import esphomeyaml.config_validation as cv
|
||||||
|
from esphomeyaml.const import CONF_ID, CONF_LAMBDA, CONF_SENSORS
|
||||||
|
from esphomeyaml.helpers import process_lambda, std_vector, variable
|
||||||
|
|
||||||
|
CustomSensorConstructor = sensor.sensor_ns.class_('CustomSensorConstructor')
|
||||||
|
|
||||||
|
PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({
|
||||||
|
cv.GenerateID(): cv.declare_variable_id(CustomSensorConstructor),
|
||||||
|
vol.Required(CONF_LAMBDA): cv.lambda_,
|
||||||
|
vol.Required(CONF_SENSORS): vol.All(cv.ensure_list, [sensor.SENSOR_SCHEMA.extend({
|
||||||
|
cv.GenerateID(): cv.declare_variable_id(sensor.Sensor),
|
||||||
|
})]),
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def to_code(config):
|
||||||
|
for template_ in process_lambda(config[CONF_LAMBDA], [],
|
||||||
|
return_type=std_vector.template(sensor.SensorPtr)):
|
||||||
|
yield
|
||||||
|
|
||||||
|
rhs = CustomSensorConstructor(template_)
|
||||||
|
custom = variable(config[CONF_ID], rhs)
|
||||||
|
for i, sens in enumerate(config[CONF_SENSORS]):
|
||||||
|
sensor.register_sensor(custom.get_sensor(i), sens)
|
||||||
|
|
||||||
|
|
||||||
|
BUILD_FLAGS = '-DUSE_CUSTOM_SENSOR'
|
||||||
|
|
||||||
|
|
||||||
|
def to_hass_config(data, config):
|
||||||
|
return [sensor.core_to_hass_config(data, sens) for sens in config[CONF_SENSORS]]
|
@ -371,6 +371,7 @@ CONF_UPDATE_ON_BOOT = 'update_on_boot'
|
|||||||
CONF_INITIAL_VALUE = 'initial_value'
|
CONF_INITIAL_VALUE = 'initial_value'
|
||||||
CONF_RESTORE_VALUE = 'restore_value'
|
CONF_RESTORE_VALUE = 'restore_value'
|
||||||
CONF_PINS = 'pins'
|
CONF_PINS = 'pins'
|
||||||
|
CONF_SENSORS = 'sensors'
|
||||||
|
|
||||||
|
|
||||||
ALLOWED_NAME_CHARS = u'abcdefghijklmnopqrstuvwxyz0123456789_'
|
ALLOWED_NAME_CHARS = u'abcdefghijklmnopqrstuvwxyz0123456789_'
|
||||||
|
@ -565,6 +565,10 @@ class MockObj(Expression):
|
|||||||
obj = MockObj(u'{} &'.format(self.base), u'')
|
obj = MockObj(u'{} &'.format(self.base), u'')
|
||||||
obj.requires.append(self)
|
obj.requires.append(self)
|
||||||
return obj
|
return obj
|
||||||
|
if name == 'ptr':
|
||||||
|
obj = MockObj(u'{} *'.format(self.base), u'')
|
||||||
|
obj.requires.append(self)
|
||||||
|
return obj
|
||||||
if name == "const":
|
if name == "const":
|
||||||
obj = MockObj(u'const {}'.format(self.base), u'')
|
obj = MockObj(u'const {}'.format(self.base), u'')
|
||||||
obj.requires.append(self)
|
obj.requires.append(self)
|
||||||
@ -622,6 +626,7 @@ float_ = global_ns.namespace('float')
|
|||||||
bool_ = global_ns.namespace('bool')
|
bool_ = global_ns.namespace('bool')
|
||||||
std_ns = global_ns.namespace('std')
|
std_ns = global_ns.namespace('std')
|
||||||
std_string = std_ns.string
|
std_string = std_ns.string
|
||||||
|
std_vector = std_ns.vector
|
||||||
uint8 = global_ns.namespace('uint8_t')
|
uint8 = global_ns.namespace('uint8_t')
|
||||||
uint16 = global_ns.namespace('uint16_t')
|
uint16 = global_ns.namespace('uint16_t')
|
||||||
uint32 = global_ns.namespace('uint32_t')
|
uint32 = global_ns.namespace('uint32_t')
|
||||||
|
Loading…
Reference in New Issue
Block a user