mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	add actions to the MAX7219Component (#6462)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
		
							
								
								
									
										52
									
								
								esphome/components/max7219digit/automation.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								esphome/components/max7219digit/automation.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include "esphome/core/automation.h" | ||||||
|  | #include "esphome/core/helpers.h" | ||||||
|  |  | ||||||
|  | #include "max7219digit.h" | ||||||
|  |  | ||||||
|  | namespace esphome { | ||||||
|  | namespace max7219digit { | ||||||
|  |  | ||||||
|  | template<typename... Ts> class DisplayInvertAction : public Action<Ts...>, public Parented<MAX7219Component> { | ||||||
|  |  public: | ||||||
|  |   TEMPLATABLE_VALUE(bool, state) | ||||||
|  |  | ||||||
|  |   void play(Ts... x) override { | ||||||
|  |     bool state = this->state_.value(x...); | ||||||
|  |     this->parent_->invert_on_off(state); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template<typename... Ts> class DisplayVisibilityAction : public Action<Ts...>, public Parented<MAX7219Component> { | ||||||
|  |  public: | ||||||
|  |   TEMPLATABLE_VALUE(bool, state) | ||||||
|  |  | ||||||
|  |   void play(Ts... x) override { | ||||||
|  |     bool state = this->state_.value(x...); | ||||||
|  |     this->parent_->turn_on_off(state); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template<typename... Ts> class DisplayReverseAction : public Action<Ts...>, public Parented<MAX7219Component> { | ||||||
|  |  public: | ||||||
|  |   TEMPLATABLE_VALUE(bool, state) | ||||||
|  |  | ||||||
|  |   void play(Ts... x) override { | ||||||
|  |     bool state = this->state_.value(x...); | ||||||
|  |     this->parent_->set_reverse(state); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template<typename... Ts> class DisplayIntensityAction : public Action<Ts...>, public Parented<MAX7219Component> { | ||||||
|  |  public: | ||||||
|  |   TEMPLATABLE_VALUE(uint8_t, state) | ||||||
|  |  | ||||||
|  |   void play(Ts... x) override { | ||||||
|  |     uint8_t state = this->state_.value(x...); | ||||||
|  |     this->parent_->set_intensity(state); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | }  // namespace max7219digit | ||||||
|  | }  // namespace esphome | ||||||
| @@ -1,7 +1,14 @@ | |||||||
|  | from esphome import automation | ||||||
| import esphome.codegen as cg | import esphome.codegen as cg | ||||||
| from esphome.components import display, spi | from esphome.components import display, spi | ||||||
| import esphome.config_validation as cv | import esphome.config_validation as cv | ||||||
| from esphome.const import CONF_ID, CONF_INTENSITY, CONF_LAMBDA, CONF_NUM_CHIPS | from esphome.const import ( | ||||||
|  |     CONF_ID, | ||||||
|  |     CONF_INTENSITY, | ||||||
|  |     CONF_LAMBDA, | ||||||
|  |     CONF_NUM_CHIPS, | ||||||
|  |     CONF_STATE, | ||||||
|  | ) | ||||||
|  |  | ||||||
| CODEOWNERS = ["@rspaargaren"] | CODEOWNERS = ["@rspaargaren"] | ||||||
| DEPENDENCIES = ["spi"] | DEPENDENCIES = ["spi"] | ||||||
| @@ -17,6 +24,7 @@ CONF_REVERSE_ENABLE = "reverse_enable" | |||||||
| CONF_NUM_CHIP_LINES = "num_chip_lines" | CONF_NUM_CHIP_LINES = "num_chip_lines" | ||||||
| CONF_CHIP_LINES_STYLE = "chip_lines_style" | CONF_CHIP_LINES_STYLE = "chip_lines_style" | ||||||
|  |  | ||||||
|  |  | ||||||
| integration_ns = cg.esphome_ns.namespace("max7219digit") | integration_ns = cg.esphome_ns.namespace("max7219digit") | ||||||
| ChipLinesStyle = integration_ns.enum("ChipLinesStyle") | ChipLinesStyle = integration_ns.enum("ChipLinesStyle") | ||||||
| CHIP_LINES_STYLE = { | CHIP_LINES_STYLE = { | ||||||
| @@ -99,3 +107,87 @@ async def to_code(config): | |||||||
|             config[CONF_LAMBDA], [(MAX7219ComponentRef, "it")], return_type=cg.void |             config[CONF_LAMBDA], [(MAX7219ComponentRef, "it")], return_type=cg.void | ||||||
|         ) |         ) | ||||||
|         cg.add(var.set_writer(lambda_)) |         cg.add(var.set_writer(lambda_)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | DisplayInvertAction = max7219_ns.class_("DisplayInvertAction", automation.Action) | ||||||
|  | DisplayVisibilityAction = max7219_ns.class_( | ||||||
|  |     "DisplayVisibilityAction", automation.Action | ||||||
|  | ) | ||||||
|  | DisplayReverseAction = max7219_ns.class_("DisplayReverseAction", automation.Action) | ||||||
|  | DisplayIntensityAction = max7219_ns.class_("DisplayIntensityAction", automation.Action) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | MAX7219_OFF_ACTION_SCHEMA = automation.maybe_simple_id( | ||||||
|  |     { | ||||||
|  |         cv.GenerateID(): cv.use_id(MAX7219Component), | ||||||
|  |         cv.Optional(CONF_STATE, default=False): False, | ||||||
|  |     } | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | MAX7219_ON_ACTION_SCHEMA = automation.maybe_simple_id( | ||||||
|  |     { | ||||||
|  |         cv.GenerateID(): cv.use_id(MAX7219Component), | ||||||
|  |         cv.Optional(CONF_STATE, default=True): True, | ||||||
|  |     } | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @automation.register_action( | ||||||
|  |     "max7129digit.invert_off", DisplayInvertAction, MAX7219_OFF_ACTION_SCHEMA | ||||||
|  | ) | ||||||
|  | @automation.register_action( | ||||||
|  |     "max7129digit.invert_on", DisplayInvertAction, MAX7219_ON_ACTION_SCHEMA | ||||||
|  | ) | ||||||
|  | async def max7129digit_invert_to_code(config, action_id, template_arg, args): | ||||||
|  |     var = cg.new_Pvariable(action_id, template_arg) | ||||||
|  |     await cg.register_parented(var, config[CONF_ID]) | ||||||
|  |     cg.add(var.set_state(config[CONF_STATE])) | ||||||
|  |     return var | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @automation.register_action( | ||||||
|  |     "max7129digit.turn_off", DisplayVisibilityAction, MAX7219_OFF_ACTION_SCHEMA | ||||||
|  | ) | ||||||
|  | @automation.register_action( | ||||||
|  |     "max7129digit.turn_on", DisplayVisibilityAction, MAX7219_ON_ACTION_SCHEMA | ||||||
|  | ) | ||||||
|  | async def max7129digit_visible_to_code(config, action_id, template_arg, args): | ||||||
|  |     var = cg.new_Pvariable(action_id, template_arg) | ||||||
|  |     await cg.register_parented(var, config[CONF_ID]) | ||||||
|  |     cg.add(var.set_state(config[CONF_STATE])) | ||||||
|  |     return var | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @automation.register_action( | ||||||
|  |     "max7129digit.reverse_off", DisplayReverseAction, MAX7219_OFF_ACTION_SCHEMA | ||||||
|  | ) | ||||||
|  | @automation.register_action( | ||||||
|  |     "max7129digit.reverse_on", DisplayReverseAction, MAX7219_ON_ACTION_SCHEMA | ||||||
|  | ) | ||||||
|  | async def max7129digit_reverse_to_code(config, action_id, template_arg, args): | ||||||
|  |     var = cg.new_Pvariable(action_id, template_arg) | ||||||
|  |     await cg.register_parented(var, config[CONF_ID]) | ||||||
|  |     cg.add(var.set_state(config[CONF_STATE])) | ||||||
|  |     return var | ||||||
|  |  | ||||||
|  |  | ||||||
|  | MAX7219_INTENSITY_SCHEMA = cv.maybe_simple_value( | ||||||
|  |     { | ||||||
|  |         cv.GenerateID(): cv.use_id(MAX7219Component), | ||||||
|  |         cv.Optional(CONF_INTENSITY, default=15): cv.templatable( | ||||||
|  |             cv.int_range(min=0, max=15) | ||||||
|  |         ), | ||||||
|  |     }, | ||||||
|  |     key=CONF_INTENSITY, | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @automation.register_action( | ||||||
|  |     "max7129digit.intensity", DisplayIntensityAction, MAX7219_INTENSITY_SCHEMA | ||||||
|  | ) | ||||||
|  | async def max7129digit_intensity_to_code(config, action_id, template_arg, args): | ||||||
|  |     var = cg.new_Pvariable(action_id, template_arg) | ||||||
|  |     await cg.register_parented(var, config[CONF_ID]) | ||||||
|  |     template_ = await cg.templatable(config[CONF_INTENSITY], args, cg.uint8) | ||||||
|  |     cg.add(var.set_state(template_)) | ||||||
|  |     return var | ||||||
|   | |||||||
| @@ -14,3 +14,15 @@ display: | |||||||
|     id: my_matrix |     id: my_matrix | ||||||
|     lambda: |- |     lambda: |- | ||||||
|       it.printdigit("hello"); |       it.printdigit("hello"); | ||||||
|  |  | ||||||
|  | esphome: | ||||||
|  |   on_boot: | ||||||
|  |     - priority: 100 | ||||||
|  |       then: | ||||||
|  |         - max7129digit.invert_off: | ||||||
|  |         - max7129digit.invert_on: | ||||||
|  |         - max7129digit.turn_on: | ||||||
|  |         - max7129digit.turn_off: | ||||||
|  |         - max7129digit.reverse_on: | ||||||
|  |         - max7129digit.reverse_off: | ||||||
|  |         - max7129digit.intensity: 10 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user