mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	add initial test of dynamic lamp component
This commit is contained in:
		
							
								
								
									
										14
									
								
								esphome/components/dynamic_lamp/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								esphome/components/dynamic_lamp/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | import esphome.codegen as cg | ||||||
|  | import esphome.config_validation as cv | ||||||
|  | from esphome.const import CONF_ID | ||||||
|  |  | ||||||
|  | dynamic_lamp_ns = cg.esphome_ns.namespace('dynamic_lamp') | ||||||
|  | DynamicLamp = dynamic_lamp_ns.class_('DynamicLamp', cg.Component) | ||||||
|  |  | ||||||
|  | CONFIG_SCHEMA = cv.Schema({ | ||||||
|  |     cv.GenerateID(): cv.declare_id(DynamicLamp) | ||||||
|  | }).extend(cv.COMPONENT_SCHEMA) | ||||||
|  |  | ||||||
|  | def to_code(config): | ||||||
|  |     var = cg.new_Pvariable(config[CONF_ID]) | ||||||
|  |     yield cg.register_component(var, config) | ||||||
							
								
								
									
										56
									
								
								esphome/components/dynamic_lamp/dynamic_lamp.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								esphome/components/dynamic_lamp/dynamic_lamp.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | |||||||
|  | #include "esphome/core/log.h" | ||||||
|  | #include "dynamic_lamp.h" | ||||||
|  |  | ||||||
|  | namespace esphome { | ||||||
|  | namespace dynamic_lamp { | ||||||
|  |  | ||||||
|  | static const char *TAG = "dynamic_lamp"; | ||||||
|  |  | ||||||
|  | void DynamicLamp::setup() { | ||||||
|  |   uint8_t i = 0; | ||||||
|  |   bool valid = true; | ||||||
|  |   this->save_mode_ = SAVE_MODE_NONE; //Currently only none & fram supported | ||||||
|  |  | ||||||
|  |   if(this->save_mode_ == 0) { | ||||||
|  |    for (i=0; i < 16; i++) { | ||||||
|  |      this->active_lamps_[i].active = false; | ||||||
|  |    } | ||||||
|  |   } else { | ||||||
|  |     while(i < 16) { | ||||||
|  |       this->restore_lamp_values_(i); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::loop() { | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::dump_config(){ | ||||||
|  |   ESP_LOGCONFIG(TAG, "Dynamic Lamp feature loaded"); | ||||||
|  |   switch(this->save_mode_) { | ||||||
|  |     case SAVE_MODE_NONE: | ||||||
|  |       ESP_LOGCONFIG(TAG, "Save mode set to NONE"); | ||||||
|  |     case SAVE_MODE_FRAM: | ||||||
|  |       ESP_LOGCONFIG(TAG, "Save mode set to FRAM"); | ||||||
|  |       break; | ||||||
|  |     default: | ||||||
|  |       ESP_LOGCONFIG(TAG, "Currently only NONE(0) && FRAM(1) save modes supported, ignoring value %" PRIu8 " and defaulting to NONE!", this->save_mode_); | ||||||
|  |       this->save_mode_ = 0; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::set_lamp_count(uint8_t lamp_count) { | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::set_lamp_values_(uint8_t lamp_number, bool active, uint16_t selected_outputs, uint8_t mode, uint8_t mode_value) { | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::restore_lamp_values_(uint8_t lamp_number) { | ||||||
|  |   this->active_lamps_[lamp_number].active = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | }  // namespace dynamic_lamp | ||||||
|  | }  // namespace esphome | ||||||
							
								
								
									
										57
									
								
								esphome/components/dynamic_lamp/dynamic_lamp.cpp.save
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								esphome/components/dynamic_lamp/dynamic_lamp.cpp.save
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | #include "esphome/core/log.h" | ||||||
|  | #include "dynamic_lamp.h" | ||||||
|  |  | ||||||
|  | namespace esphome { | ||||||
|  | namespace dynamic_lamp { | ||||||
|  |  | ||||||
|  | static const char *TAG = "dynamic_lamp"; | ||||||
|  |  | ||||||
|  | void DynamicLamp::setup() { | ||||||
|  |   uint8_t i = 0; | ||||||
|  |   bool valid = true; | ||||||
|  |   this->save_mode_ = SAVE_MODE_NONE; //Currently only none & fram supported | ||||||
|  |  | ||||||
|  |   if(this->save_mode_ == 0) { | ||||||
|  |    for (i=0; i < 16; i++) { | ||||||
|  |      this->active_lamps_[i].active = false; | ||||||
|  |    } | ||||||
|  |   } else { | ||||||
|  |     while(i < 16) { | ||||||
|  |       this->restore_lamp_values_(i); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::loop() { | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::dump_config(){ | ||||||
|  |   ESP_LOGCONFIG(TAG, "Dynamic Lamp feature loaded"); | ||||||
|  |   switch(this->save_mode_) { | ||||||
|  |     case SAVE_MODE_NONE: | ||||||
|  |       ESP_LOGCONFIG(TAG, "Save mode set to NONE"); | ||||||
|  |     case SAVE_MODE_FRAM: | ||||||
|  |       ESP_LOGCONFIG(TAG, "Save mode set to FRAM"); | ||||||
|  |       break; | ||||||
|  |     default: | ||||||
|  |       ESP_LOGCONFIG(TAG, "Currently only NONE(0) && FRAM(1) save modes supported, ignoring value %" PRIu8 " and defaulting to NONE!", this->save_mode_); | ||||||
|  |       this->save_mode_ = 0; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::set_lamp_count(uint8_t lamp_count) { | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::set_lamp_values_(uint8_t lamp_number, bool active, uint16_t selected_outputs, uint8_t mode, uint8_t mode_value) { | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void DynamicLamp::restore_lamp_values_(uint8_t lamp_number) { | ||||||
|  |   switch(this->save_mode_) | ||||||
|  |   this->active_lamps_[lamp_number].active = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | }  // namespace dynamic_lamp | ||||||
|  | }  // namespace esphome | ||||||
							
								
								
									
										51
									
								
								esphome/components/dynamic_lamp/dynamic_lamp.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								esphome/components/dynamic_lamp/dynamic_lamp.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include "esphome/core/component.h" | ||||||
|  |  | ||||||
|  | namespace esphome { | ||||||
|  | namespace dynamic_lamp { | ||||||
|  |  | ||||||
|  | enum SupportedSaveModes : uint8_t { | ||||||
|  |   SAVE_MODE_NONE = 0, | ||||||
|  |   SAVE_MODE_FRAM = 1 | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | enum LinkedOutputModeIdx : uint8_t { | ||||||
|  |   MODE_EQUAL = 0, | ||||||
|  |   MODE_STATIC = 1, | ||||||
|  |   MODE_PERCENT = 2, | ||||||
|  |   MODE_FUNCTION = 3 | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | struct LinkedOutput { | ||||||
|  |   bool active = false; | ||||||
|  |   uint8_t mode = 0; | ||||||
|  |   optional<float> min_value; | ||||||
|  |   optional<float> max_value; | ||||||
|  |   bool update_level = false; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | struct CombinedLamp { | ||||||
|  |   bool active = false; | ||||||
|  |   LinkedOutput used_outputs[16]; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | class DynamicLamp : public Component { | ||||||
|  |  public: | ||||||
|  |   void setup() override; | ||||||
|  |   void loop() override; | ||||||
|  |   void dump_config() override; | ||||||
|  |   void set_lamp_count(uint8_t lamp_count); | ||||||
|  |  | ||||||
|  |  protected: | ||||||
|  |   void restore_lamp_values_(uint8_t lamp_number); | ||||||
|  |   void set_lamp_values_(uint8_t lamp_number, bool active, uint16_t selected_outputs, uint8_t mode, uint8_t mode_value); | ||||||
|  |  | ||||||
|  |   CombinedLamp active_lamps_[16]; | ||||||
|  |   uint8_t lamp_count_; | ||||||
|  |   uint8_t save_mode_; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | }  // namespace dynamic_lamp | ||||||
|  | }  // namespace esphome | ||||||
		Reference in New Issue
	
	Block a user