mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	This commit is contained in:
		
				
					committed by
					
						 Jesse Hills
						Jesse Hills
					
				
			
			
				
	
			
			
			
						parent
						
							3c864b2bca
						
					
				
				
					commit
					42947bcf56
				
			| @@ -0,0 +1,19 @@ | ||||
| import esphome.codegen as cg | ||||
| import esphome.config_validation as cv | ||||
| from esphome.const import CONF_ID | ||||
|  | ||||
| custom_api_device_component_ns = cg.esphome_ns.namespace("custom_api_device_component") | ||||
| CustomAPIDeviceComponent = custom_api_device_component_ns.class_( | ||||
|     "CustomAPIDeviceComponent", cg.Component | ||||
| ) | ||||
|  | ||||
| CONFIG_SCHEMA = cv.Schema( | ||||
|     { | ||||
|         cv.GenerateID(): cv.declare_id(CustomAPIDeviceComponent), | ||||
|     } | ||||
| ).extend(cv.COMPONENT_SCHEMA) | ||||
|  | ||||
|  | ||||
| async def to_code(config): | ||||
|     var = cg.new_Pvariable(config[CONF_ID]) | ||||
|     await cg.register_component(var, config) | ||||
| @@ -0,0 +1,53 @@ | ||||
| #include "custom_api_device_component.h" | ||||
| #include "esphome/core/log.h" | ||||
|  | ||||
| #ifdef USE_API | ||||
| namespace esphome { | ||||
| namespace custom_api_device_component { | ||||
|  | ||||
| static const char *const TAG = "custom_api"; | ||||
|  | ||||
| void CustomAPIDeviceComponent::setup() { | ||||
|   // Register services using CustomAPIDevice | ||||
|   register_service(&CustomAPIDeviceComponent::on_test_service, "custom_test_service"); | ||||
|  | ||||
|   register_service(&CustomAPIDeviceComponent::on_service_with_args, "custom_service_with_args", | ||||
|                    {"arg_string", "arg_int", "arg_bool", "arg_float"}); | ||||
|  | ||||
|   // Test array types | ||||
|   register_service(&CustomAPIDeviceComponent::on_service_with_arrays, "custom_service_with_arrays", | ||||
|                    {"bool_array", "int_array", "float_array", "string_array"}); | ||||
| } | ||||
|  | ||||
| void CustomAPIDeviceComponent::on_test_service() { ESP_LOGI(TAG, "Custom test service called!"); } | ||||
|  | ||||
| // NOLINTNEXTLINE(performance-unnecessary-value-param) | ||||
| void CustomAPIDeviceComponent::on_service_with_args(std::string arg_string, int32_t arg_int, bool arg_bool, | ||||
|                                                     float arg_float) { | ||||
|   ESP_LOGI(TAG, "Custom service called with: %s, %d, %d, %.2f", arg_string.c_str(), arg_int, arg_bool, arg_float); | ||||
| } | ||||
|  | ||||
| void CustomAPIDeviceComponent::on_service_with_arrays(std::vector<bool> bool_array, std::vector<int32_t> int_array, | ||||
|                                                       std::vector<float> float_array, | ||||
|                                                       std::vector<std::string> string_array) { | ||||
|   ESP_LOGI(TAG, "Array service called with %zu bools, %zu ints, %zu floats, %zu strings", bool_array.size(), | ||||
|            int_array.size(), float_array.size(), string_array.size()); | ||||
|  | ||||
|   // Log first element of each array if not empty | ||||
|   if (!bool_array.empty()) { | ||||
|     ESP_LOGI(TAG, "First bool: %s", bool_array[0] ? "true" : "false"); | ||||
|   } | ||||
|   if (!int_array.empty()) { | ||||
|     ESP_LOGI(TAG, "First int: %d", int_array[0]); | ||||
|   } | ||||
|   if (!float_array.empty()) { | ||||
|     ESP_LOGI(TAG, "First float: %.2f", float_array[0]); | ||||
|   } | ||||
|   if (!string_array.empty()) { | ||||
|     ESP_LOGI(TAG, "First string: %s", string_array[0].c_str()); | ||||
|   } | ||||
| } | ||||
|  | ||||
| }  // namespace custom_api_device_component | ||||
| }  // namespace esphome | ||||
| #endif  // USE_API | ||||
| @@ -0,0 +1,29 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include "esphome/core/component.h" | ||||
| #include "esphome/components/api/custom_api_device.h" | ||||
|  | ||||
| #ifdef USE_API | ||||
| namespace esphome { | ||||
| namespace custom_api_device_component { | ||||
|  | ||||
| using namespace api; | ||||
|  | ||||
| class CustomAPIDeviceComponent : public Component, public CustomAPIDevice { | ||||
|  public: | ||||
|   void setup() override; | ||||
|  | ||||
|   void on_test_service(); | ||||
|  | ||||
|   // NOLINTNEXTLINE(performance-unnecessary-value-param) | ||||
|   void on_service_with_args(std::string arg_string, int32_t arg_int, bool arg_bool, float arg_float); | ||||
|  | ||||
|   void on_service_with_arrays(std::vector<bool> bool_array, std::vector<int32_t> int_array, | ||||
|                               std::vector<float> float_array, std::vector<std::string> string_array); | ||||
| }; | ||||
|  | ||||
| }  // namespace custom_api_device_component | ||||
| }  // namespace esphome | ||||
| #endif  // USE_API | ||||
		Reference in New Issue
	
	Block a user