mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	| @@ -473,6 +473,7 @@ enum SensorStateClass { | ||||
|   STATE_CLASS_NONE = 0; | ||||
|   STATE_CLASS_MEASUREMENT = 1; | ||||
|   STATE_CLASS_TOTAL_INCREASING = 2; | ||||
|   STATE_CLASS_TOTAL = 3; | ||||
| } | ||||
|  | ||||
| enum SensorLastResetType { | ||||
|   | ||||
| @@ -108,6 +108,8 @@ template<> const char *proto_enum_to_string<enums::SensorStateClass>(enums::Sens | ||||
|       return "STATE_CLASS_MEASUREMENT"; | ||||
|     case enums::STATE_CLASS_TOTAL_INCREASING: | ||||
|       return "STATE_CLASS_TOTAL_INCREASING"; | ||||
|     case enums::STATE_CLASS_TOTAL: | ||||
|       return "STATE_CLASS_TOTAL"; | ||||
|     default: | ||||
|       return "UNKNOWN"; | ||||
|   } | ||||
|   | ||||
| @@ -53,6 +53,7 @@ enum SensorStateClass : uint32_t { | ||||
|   STATE_CLASS_NONE = 0, | ||||
|   STATE_CLASS_MEASUREMENT = 1, | ||||
|   STATE_CLASS_TOTAL_INCREASING = 2, | ||||
|   STATE_CLASS_TOTAL = 3, | ||||
| }; | ||||
| enum SensorLastResetType : uint32_t { | ||||
|   LAST_RESET_NONE = 0, | ||||
|   | ||||
| @@ -4,9 +4,10 @@ | ||||
|  | ||||
| #include "esphome/core/component.h" | ||||
|  | ||||
| #include <map> | ||||
| #include <memory> | ||||
| #include <set> | ||||
| #include <map> | ||||
| #include <vector> | ||||
|  | ||||
| class UDP; | ||||
|  | ||||
|   | ||||
| @@ -109,6 +109,7 @@ STATE_CLASSES = { | ||||
|     "": StateClasses.STATE_CLASS_NONE, | ||||
|     "measurement": StateClasses.STATE_CLASS_MEASUREMENT, | ||||
|     "total_increasing": StateClasses.STATE_CLASS_TOTAL_INCREASING, | ||||
|     "total": StateClasses.STATE_CLASS_TOTAL, | ||||
| } | ||||
| validate_state_class = cv.enum(STATE_CLASSES, lower=True, space="_") | ||||
|  | ||||
|   | ||||
| @@ -12,6 +12,8 @@ std::string state_class_to_string(StateClass state_class) { | ||||
|       return "measurement"; | ||||
|     case STATE_CLASS_TOTAL_INCREASING: | ||||
|       return "total_increasing"; | ||||
|     case STATE_CLASS_TOTAL: | ||||
|       return "total"; | ||||
|     case STATE_CLASS_NONE: | ||||
|     default: | ||||
|       return ""; | ||||
|   | ||||
| @@ -36,6 +36,7 @@ enum StateClass : uint8_t { | ||||
|   STATE_CLASS_NONE = 0, | ||||
|   STATE_CLASS_MEASUREMENT = 1, | ||||
|   STATE_CLASS_TOTAL_INCREASING = 2, | ||||
|   STATE_CLASS_TOTAL = 3, | ||||
| }; | ||||
|  | ||||
| std::string state_class_to_string(StateClass state_class); | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -839,6 +839,7 @@ std::string WebServer::climate_json(climate::Climate *obj, JsonDetail start_conf | ||||
|   return json::build_json([obj, start_config](JsonObject root) { | ||||
|     set_json_id(root, obj, "climate-" + obj->get_object_id(), start_config); | ||||
|     const auto traits = obj->get_traits(); | ||||
|     int8_t accuracy = traits.get_temperature_accuracy_decimals(); | ||||
|     char __buf[16]; | ||||
|  | ||||
|     if (start_config == DETAIL_ALL) { | ||||
| @@ -873,12 +874,15 @@ std::string WebServer::climate_json(climate::Climate *obj, JsonDetail start_conf | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     bool has_state = false; | ||||
|     root["mode"] = PSTR_LOCAL(climate_mode_to_string(obj->mode)); | ||||
|     root["max_temp"] = traits.get_visual_max_temperature(); | ||||
|     root["min_temp"] = traits.get_visual_min_temperature(); | ||||
|     root["max_temp"] = value_accuracy_to_string(traits.get_visual_max_temperature(), accuracy); | ||||
|     root["min_temp"] = value_accuracy_to_string(traits.get_visual_min_temperature(), accuracy); | ||||
|     root["step"] = traits.get_visual_temperature_step(); | ||||
|     if (traits.get_supports_action()) { | ||||
|       root["action"] = PSTR_LOCAL(climate_action_to_string(obj->action)); | ||||
|       root["state"] = root["action"]; | ||||
|       has_state = true; | ||||
|     } | ||||
|     if (traits.get_supports_fan_modes() && obj->fan_mode.has_value()) { | ||||
|       root["fan_mode"] = PSTR_LOCAL(climate_fan_mode_to_string(obj->fan_mode.value())); | ||||
| @@ -896,14 +900,23 @@ std::string WebServer::climate_json(climate::Climate *obj, JsonDetail start_conf | ||||
|       root["swing_mode"] = PSTR_LOCAL(climate_swing_mode_to_string(obj->swing_mode)); | ||||
|     } | ||||
|     if (traits.get_supports_current_temperature()) { | ||||
|       root["current_temperature"] = obj->current_temperature; | ||||
|       if (!std::isnan(obj->current_temperature)) { | ||||
|         root["current_temperature"] = value_accuracy_to_string(obj->current_temperature, accuracy); | ||||
|       } else { | ||||
|         root["current_temperature"] = "NA"; | ||||
|       } | ||||
|     } | ||||
|     if (traits.get_supports_two_point_target_temperature()) { | ||||
|       root["current_temperature_low"] = obj->target_temperature_low; | ||||
|       root["current_temperature_high"] = obj->target_temperature_low; | ||||
|       root["target_temperature_low"] = value_accuracy_to_string(obj->target_temperature_low, accuracy); | ||||
|       root["target_temperature_high"] = value_accuracy_to_string(obj->target_temperature_high, accuracy); | ||||
|       if (!has_state) { | ||||
|         root["state"] = | ||||
|             value_accuracy_to_string((obj->target_temperature_high + obj->target_temperature_low) / 2.0f, accuracy); | ||||
|       } | ||||
|     } else { | ||||
|       root["target_temperature"] = obj->target_temperature; | ||||
|       root["state"] = obj->target_temperature; | ||||
|       root["target_temperature"] = value_accuracy_to_string(obj->target_temperature, accuracy); | ||||
|       if (!has_state) | ||||
|         root["state"] = root["target_temperature"]; | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| """Constants used by esphome.""" | ||||
|  | ||||
| __version__ = "2022.8.0b1" | ||||
| __version__ = "2022.8.0b2" | ||||
|  | ||||
| ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" | ||||
|  | ||||
| @@ -956,6 +956,9 @@ STATE_CLASS_MEASUREMENT = "measurement" | ||||
| # The state represents a total that only increases, a decrease is considered a reset. | ||||
| STATE_CLASS_TOTAL_INCREASING = "total_increasing" | ||||
|  | ||||
| # The state represents a total amount that can both increase and decrease, e.g. a net energy meter. | ||||
| STATE_CLASS_TOTAL = "total" | ||||
|  | ||||
| KEY_CORE = "core" | ||||
| KEY_TARGET_PLATFORM = "target_platform" | ||||
| KEY_TARGET_FRAMEWORK = "target_framework" | ||||
|   | ||||
| @@ -139,9 +139,19 @@ struct Color { | ||||
|     return Color(uint8_t((uint16_t(r) * 255U / max_rgb)), uint8_t((uint16_t(g) * 255U / max_rgb)), | ||||
|                  uint8_t((uint16_t(b) * 255U / max_rgb)), w); | ||||
|   } | ||||
|   Color fade_to_white(uint8_t amnt) { return Color(255, 255, 255, 255) - (*this * amnt); } | ||||
|   Color fade_to_black(uint8_t amnt) { return *this * amnt; } | ||||
|   Color gradient(const Color &to_color, uint8_t amnt) { return (*this * amnt) + (to_color * (255 - amnt)); } | ||||
|  | ||||
|   Color gradient(const Color &to_color, uint8_t amnt) { | ||||
|     Color new_color; | ||||
|     float amnt_f = float(amnt) / 255.0f; | ||||
|     new_color.r = amnt_f * (to_color.r - (*this).r) + (*this).r; | ||||
|     new_color.g = amnt_f * (to_color.g - (*this).g) + (*this).g; | ||||
|     new_color.b = amnt_f * (to_color.b - (*this).b) + (*this).b; | ||||
|     new_color.w = amnt_f * (to_color.w - (*this).w) + (*this).w; | ||||
|     return new_color; | ||||
|   } | ||||
|   Color fade_to_white(uint8_t amnt) { return (*this).gradient(Color::WHITE, amnt); } | ||||
|   Color fade_to_black(uint8_t amnt) { return (*this).gradient(Color::BLACK, amnt); } | ||||
|  | ||||
|   Color lighten(uint8_t delta) { return *this + delta; } | ||||
|   Color darken(uint8_t delta) { return *this - delta; } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user