mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Add support for hyt271 (#4282)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
		| @@ -110,6 +110,7 @@ esphome/components/honeywellabp/* @RubyBailey | ||||
| esphome/components/hrxl_maxsonar_wr/* @netmikey | ||||
| esphome/components/hte501/* @Stock-M | ||||
| esphome/components/hydreon_rgxx/* @functionpointer | ||||
| esphome/components/hyt271/* @Philippe12 | ||||
| esphome/components/i2c/* @esphome/core | ||||
| esphome/components/i2s_audio/* @jesserockz | ||||
| esphome/components/i2s_audio/media_player/* @jesserockz | ||||
|   | ||||
							
								
								
									
										1
									
								
								esphome/components/hyt271/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								esphome/components/hyt271/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| CODEOWNERS = ["@Philippe12"] | ||||
							
								
								
									
										52
									
								
								esphome/components/hyt271/hyt271.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								esphome/components/hyt271/hyt271.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| #include "hyt271.h" | ||||
| #include "esphome/core/log.h" | ||||
| #include "esphome/core/hal.h" | ||||
|  | ||||
| namespace esphome { | ||||
| namespace hyt271 { | ||||
|  | ||||
| static const char *const TAG = "hyt271"; | ||||
|  | ||||
| static const uint8_t HYT271_ADDRESS = 0x28; | ||||
|  | ||||
| void HYT271Component::dump_config() { | ||||
|   ESP_LOGCONFIG(TAG, "HYT271:"); | ||||
|   LOG_I2C_DEVICE(this); | ||||
|   LOG_UPDATE_INTERVAL(this); | ||||
|   LOG_SENSOR("  ", "Temperature", this->temperature_); | ||||
|   LOG_SENSOR("  ", "Humidity", this->humidity_); | ||||
| } | ||||
| void HYT271Component::update() { | ||||
|   uint8_t raw_data[4]; | ||||
|  | ||||
|   if (this->write(&raw_data[0], 0) != i2c::ERROR_OK) { | ||||
|     this->status_set_warning(); | ||||
|     ESP_LOGE(TAG, "Communication with HYT271 failed! => Ask new values"); | ||||
|     return; | ||||
|   } | ||||
|   this->set_timeout("wait_convert", 50, [this]() { | ||||
|     uint8_t raw_data[4]; | ||||
|     if (this->read(raw_data, 4) != i2c::ERROR_OK) { | ||||
|       this->status_set_warning(); | ||||
|       ESP_LOGE(TAG, "Communication with HYT271 failed! => Read values"); | ||||
|       return; | ||||
|     } | ||||
|     uint16_t raw_temperature = ((raw_data[2] << 8) | raw_data[3]) >> 2; | ||||
|     uint16_t raw_humidity = ((raw_data[0] & 0x3F) << 8) | raw_data[1]; | ||||
|  | ||||
|     float temperature = ((float(raw_temperature)) * (165.0f / 16383.0f)) - 40.0f; | ||||
|     float humidity = (float(raw_humidity)) * (100.0f / 16383.0f); | ||||
|  | ||||
|     ESP_LOGD(TAG, "Got Temperature=%.1f°C Humidity=%.1f%%", temperature, humidity); | ||||
|  | ||||
|     if (this->temperature_ != nullptr) | ||||
|       this->temperature_->publish_state(temperature); | ||||
|     if (this->humidity_ != nullptr) | ||||
|       this->humidity_->publish_state(humidity); | ||||
|     this->status_clear_warning(); | ||||
|   }); | ||||
| } | ||||
| float HYT271Component::get_setup_priority() const { return setup_priority::DATA; } | ||||
|  | ||||
| }  // namespace hyt271 | ||||
| }  // namespace esphome | ||||
							
								
								
									
										27
									
								
								esphome/components/hyt271/hyt271.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								esphome/components/hyt271/hyt271.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "esphome/core/component.h" | ||||
| #include "esphome/components/sensor/sensor.h" | ||||
| #include "esphome/components/i2c/i2c.h" | ||||
|  | ||||
| namespace esphome { | ||||
| namespace hyt271 { | ||||
|  | ||||
| class HYT271Component : public PollingComponent, public i2c::I2CDevice { | ||||
|  public: | ||||
|   void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; } | ||||
|   void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; } | ||||
|  | ||||
|   void dump_config() override; | ||||
|   /// Update the sensor values (temperature+humidity). | ||||
|   void update() override; | ||||
|  | ||||
|   float get_setup_priority() const override; | ||||
|  | ||||
|  protected: | ||||
|   sensor::Sensor *temperature_{nullptr}; | ||||
|   sensor::Sensor *humidity_{nullptr}; | ||||
| }; | ||||
|  | ||||
| }  // namespace hyt271 | ||||
| }  // namespace esphome | ||||
							
								
								
									
										56
									
								
								esphome/components/hyt271/sensor.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								esphome/components/hyt271/sensor.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| import esphome.codegen as cg | ||||
| import esphome.config_validation as cv | ||||
| from esphome.components import i2c, sensor | ||||
| from esphome.const import ( | ||||
|     CONF_HUMIDITY, | ||||
|     CONF_ID, | ||||
|     CONF_TEMPERATURE, | ||||
|     DEVICE_CLASS_HUMIDITY, | ||||
|     DEVICE_CLASS_TEMPERATURE, | ||||
|     STATE_CLASS_MEASUREMENT, | ||||
|     UNIT_CELSIUS, | ||||
|     UNIT_PERCENT, | ||||
| ) | ||||
|  | ||||
| DEPENDENCIES = ["i2c"] | ||||
|  | ||||
| hyt271_ns = cg.esphome_ns.namespace("hyt271") | ||||
| HYT271Component = hyt271_ns.class_( | ||||
|     "HYT271Component", cg.PollingComponent, i2c.I2CDevice | ||||
| ) | ||||
|  | ||||
| CONFIG_SCHEMA = ( | ||||
|     cv.Schema( | ||||
|         { | ||||
|             cv.GenerateID(): cv.declare_id(HYT271Component), | ||||
|             cv.Required(CONF_TEMPERATURE): sensor.sensor_schema( | ||||
|                 unit_of_measurement=UNIT_CELSIUS, | ||||
|                 accuracy_decimals=1, | ||||
|                 device_class=DEVICE_CLASS_TEMPERATURE, | ||||
|                 state_class=STATE_CLASS_MEASUREMENT, | ||||
|             ), | ||||
|             cv.Required(CONF_HUMIDITY): sensor.sensor_schema( | ||||
|                 unit_of_measurement=UNIT_PERCENT, | ||||
|                 accuracy_decimals=1, | ||||
|                 device_class=DEVICE_CLASS_HUMIDITY, | ||||
|                 state_class=STATE_CLASS_MEASUREMENT, | ||||
|             ), | ||||
|         } | ||||
|     ) | ||||
|     .extend(cv.polling_component_schema("60s")) | ||||
|     .extend(i2c.i2c_device_schema(0x28)) | ||||
| ) | ||||
|  | ||||
|  | ||||
| async def to_code(config): | ||||
|     var = cg.new_Pvariable(config[CONF_ID]) | ||||
|     await cg.register_component(var, config) | ||||
|     await i2c.register_i2c_device(var, config) | ||||
|  | ||||
|     if CONF_TEMPERATURE in config: | ||||
|         sens = await sensor.new_sensor(config[CONF_TEMPERATURE]) | ||||
|         cg.add(var.set_temperature(sens)) | ||||
|  | ||||
|     if CONF_HUMIDITY in config: | ||||
|         sens = await sensor.new_sensor(config[CONF_HUMIDITY]) | ||||
|         cg.add(var.set_humidity(sens)) | ||||
| @@ -1276,6 +1276,13 @@ sensor: | ||||
|     name: DHT Absolute Humidity | ||||
|     temperature: dht_temperature | ||||
|     humidity: dht_humidity | ||||
|   - platform: hyt271 | ||||
|     i2c_id: i2c_bus | ||||
|     temperature: | ||||
|       name: "Temperature hyt271" | ||||
|       id: temp_etuve | ||||
|     humidity: | ||||
|       name: "Humidity hyt271" | ||||
|  | ||||
| esp32_touch: | ||||
|   setup_mode: false | ||||
|   | ||||
		Reference in New Issue
	
	Block a user