mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	Add action to set total pulses on pulse_meter (#1757)
This commit is contained in:
		
							
								
								
									
										24
									
								
								esphome/components/pulse_meter/automation.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								esphome/components/pulse_meter/automation.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include "esphome/core/component.h" | ||||||
|  | #include "esphome/core/automation.h" | ||||||
|  | #include "esphome/components/pulse_meter/pulse_meter_sensor.h" | ||||||
|  |  | ||||||
|  | namespace esphome { | ||||||
|  |  | ||||||
|  | namespace pulse_meter { | ||||||
|  |  | ||||||
|  | template<typename... Ts> class SetTotalPulsesAction : public Action<Ts...> { | ||||||
|  |  public: | ||||||
|  |   SetTotalPulsesAction(PulseMeterSensor *pulse_meter) : pulse_meter_(pulse_meter) {} | ||||||
|  |  | ||||||
|  |   TEMPLATABLE_VALUE(uint32_t, total_pulses) | ||||||
|  |  | ||||||
|  |   void play(Ts... x) override { this->pulse_meter_->set_total_pulses(this->total_pulses_.value(x...)); } | ||||||
|  |  | ||||||
|  |  protected: | ||||||
|  |   PulseMeterSensor *pulse_meter_; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | }  // namespace pulse_meter | ||||||
|  | }  // namespace esphome | ||||||
| @@ -48,6 +48,8 @@ void PulseMeterSensor::loop() { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void PulseMeterSensor::set_total_pulses(uint32_t pulses) { this->total_pulses_ = pulses; } | ||||||
|  |  | ||||||
| void PulseMeterSensor::dump_config() { | void PulseMeterSensor::dump_config() { | ||||||
|   LOG_SENSOR("", "Pulse Meter", this); |   LOG_SENSOR("", "Pulse Meter", this); | ||||||
|   LOG_PIN("  Pin: ", this->pin_); |   LOG_PIN("  Pin: ", this->pin_); | ||||||
|   | |||||||
| @@ -15,6 +15,8 @@ class PulseMeterSensor : public sensor::Sensor, public Component { | |||||||
|   void set_timeout_us(uint32_t timeout) { this->timeout_us_ = timeout; } |   void set_timeout_us(uint32_t timeout) { this->timeout_us_ = timeout; } | ||||||
|   void set_total_sensor(sensor::Sensor *sensor) { this->total_sensor_ = sensor; } |   void set_total_sensor(sensor::Sensor *sensor) { this->total_sensor_ = sensor; } | ||||||
|  |  | ||||||
|  |   void set_total_pulses(uint32_t pulses); | ||||||
|  |  | ||||||
|   void setup() override; |   void setup() override; | ||||||
|   void loop() override; |   void loop() override; | ||||||
|   float get_setup_priority() const override { return setup_priority::DATA; } |   float get_setup_priority() const override { return setup_priority::DATA; } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import esphome.codegen as cg | import esphome.codegen as cg | ||||||
| import esphome.config_validation as cv | import esphome.config_validation as cv | ||||||
| from esphome import pins | from esphome import automation, pins | ||||||
| from esphome.components import sensor | from esphome.components import sensor | ||||||
| from esphome.const import ( | from esphome.const import ( | ||||||
|     CONF_ID, |     CONF_ID, | ||||||
| @@ -9,6 +9,7 @@ from esphome.const import ( | |||||||
|     CONF_NUMBER, |     CONF_NUMBER, | ||||||
|     CONF_TIMEOUT, |     CONF_TIMEOUT, | ||||||
|     CONF_TOTAL, |     CONF_TOTAL, | ||||||
|  |     CONF_VALUE, | ||||||
|     ICON_PULSE, |     ICON_PULSE, | ||||||
|     UNIT_PULSES, |     UNIT_PULSES, | ||||||
|     UNIT_PULSES_PER_MINUTE, |     UNIT_PULSES_PER_MINUTE, | ||||||
| @@ -24,6 +25,8 @@ PulseMeterSensor = pulse_meter_ns.class_( | |||||||
|     "PulseMeterSensor", sensor.Sensor, cg.Component |     "PulseMeterSensor", sensor.Sensor, cg.Component | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | SetTotalPulsesAction = pulse_meter_ns.class_("SetTotalPulsesAction", automation.Action) | ||||||
|  |  | ||||||
|  |  | ||||||
| def validate_internal_filter(value): | def validate_internal_filter(value): | ||||||
|     return cv.positive_time_period_microseconds(value) |     return cv.positive_time_period_microseconds(value) | ||||||
| @@ -73,3 +76,21 @@ def to_code(config): | |||||||
|     if CONF_TOTAL in config: |     if CONF_TOTAL in config: | ||||||
|         sens = yield sensor.new_sensor(config[CONF_TOTAL]) |         sens = yield sensor.new_sensor(config[CONF_TOTAL]) | ||||||
|         cg.add(var.set_total_sensor(sens)) |         cg.add(var.set_total_sensor(sens)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @automation.register_action( | ||||||
|  |     "pulse_meter.set_total_pulses", | ||||||
|  |     SetTotalPulsesAction, | ||||||
|  |     cv.Schema( | ||||||
|  |         { | ||||||
|  |             cv.Required(CONF_ID): cv.use_id(PulseMeterSensor), | ||||||
|  |             cv.Required(CONF_VALUE): cv.templatable(cv.uint32_t), | ||||||
|  |         } | ||||||
|  |     ), | ||||||
|  | ) | ||||||
|  | def set_total_action_to_code(config, action_id, template_arg, args): | ||||||
|  |     paren = yield cg.get_variable(config[CONF_ID]) | ||||||
|  |     var = cg.new_Pvariable(action_id, template_arg, paren) | ||||||
|  |     template_ = yield cg.templatable(config[CONF_VALUE], args, int) | ||||||
|  |     cg.add(var.set_total_pulses(template_)) | ||||||
|  |     yield var | ||||||
|   | |||||||
| @@ -247,10 +247,10 @@ ble_client: | |||||||
|     id: ble_blah |     id: ble_blah | ||||||
|     on_connect: |     on_connect: | ||||||
|       then: |       then: | ||||||
|        - switch.turn_on: ble1_status |         - switch.turn_on: ble1_status | ||||||
|     on_disconnect: |     on_disconnect: | ||||||
|       then: |       then: | ||||||
|        - switch.turn_on: ble1_status |         - switch.turn_on: ble1_status | ||||||
| mcp23s08: | mcp23s08: | ||||||
|   - id: 'mcp23s08_hub' |   - id: 'mcp23s08_hub' | ||||||
|     cs_pin: GPIO12 |     cs_pin: GPIO12 | ||||||
| @@ -264,7 +264,7 @@ mcp23s17: | |||||||
| sensor: | sensor: | ||||||
|   - platform: ble_client |   - platform: ble_client | ||||||
|     ble_client_id: ble_foo |     ble_client_id: ble_foo | ||||||
|     name: "Green iTag btn" |     name: 'Green iTag btn' | ||||||
|     service_uuid: 'ffe0' |     service_uuid: 'ffe0' | ||||||
|     characteristic_uuid: 'ffe1' |     characteristic_uuid: 'ffe1' | ||||||
|     descriptor_uuid: 'ffe2' |     descriptor_uuid: 'ffe2' | ||||||
| @@ -658,9 +658,14 @@ sensor: | |||||||
|     update_interval: 15s |     update_interval: 15s | ||||||
|   - platform: pulse_meter |   - platform: pulse_meter | ||||||
|     name: 'Pulse Meter' |     name: 'Pulse Meter' | ||||||
|  |     id: pulse_meter_sensor | ||||||
|     pin: GPIO12 |     pin: GPIO12 | ||||||
|     internal_filter: 100ms |     internal_filter: 100ms | ||||||
|     timeout: 2 min |     timeout: 2 min | ||||||
|  |     on_value: | ||||||
|  |       - pulse_meter.set_total_pulses: | ||||||
|  |           id: pulse_meter_sensor | ||||||
|  |           value: 12345 | ||||||
|     total: |     total: | ||||||
|       name: 'Pulse Meter Total' |       name: 'Pulse Meter Total' | ||||||
|   - platform: rotary_encoder |   - platform: rotary_encoder | ||||||
| @@ -2037,7 +2042,6 @@ tca9548a: | |||||||
|     multiplexer: |     multiplexer: | ||||||
|       id: multiplex0 |       id: multiplex0 | ||||||
|       channel: 0 |       channel: 0 | ||||||
|      |  | ||||||
|  |  | ||||||
| pcf8574: | pcf8574: | ||||||
|   - id: 'pcf8574_hub' |   - id: 'pcf8574_hub' | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user