From 054e4af258fb90ace2ae14b013a5661ee0ea49e5 Mon Sep 17 00:00:00 2001 From: SMKRV Date: Tue, 19 Nov 2024 19:15:57 +0300 Subject: [PATCH] Quick bugfix --- custom_components/ha_text_ai/sensor.py | 21 +++++++++------------ ha_text_ai.zip | Bin 16265 -> 0 bytes 2 files changed, 9 insertions(+), 12 deletions(-) delete mode 100644 ha_text_ai.zip diff --git a/custom_components/ha_text_ai/sensor.py b/custom_components/ha_text_ai/sensor.py index ada990c..0769b51 100644 --- a/custom_components/ha_text_ai/sensor.py +++ b/custom_components/ha_text_ai/sensor.py @@ -87,13 +87,14 @@ class HATextAISensor(CoordinatorEntity, SensorEntity): @property def state(self) -> StateType: """Return the state of the sensor.""" - if not self.coordinator.data or not self.coordinator.last_update_success_time: + if not self.coordinator.data or not self.coordinator.last_update_success: return None - try: - if isinstance(self.coordinator.last_update_success_time, datetime): - return dt_util.as_local(self.coordinator.last_update_success_time) - return self.coordinator.last_update_success_time + try: + last_update = self.coordinator.data.get("last_update") + if isinstance(last_update, datetime): + return dt_util.as_local(last_update) + return last_update except Exception as err: _LOGGER.error("Error getting state: %s", err, exc_info=True) return None @@ -117,18 +118,15 @@ class HATextAISensor(CoordinatorEntity, SensorEntity): return attributes try: - # Получаем историю ответов history = list(self.coordinator._responses.items()) if history: last_question, last_data = history[-1] - # Обработка формата ответа if isinstance(last_data, dict): last_response = last_data.get("response", "") - last_updated = last_data.get("timestamp", self.coordinator.last_update_success_time) + last_updated = last_data.get("timestamp") or self.coordinator.data.get("last_update") response_time = last_data.get("response_time") - # Добавляем новые метаданные model = last_data.get("model", self.coordinator.model) temperature = last_data.get("temperature", self.coordinator.temperature) max_tokens = last_data.get("max_tokens", self.coordinator.max_tokens) @@ -139,13 +137,12 @@ class HATextAISensor(CoordinatorEntity, SensorEntity): self._state = STATE_ERROR else: last_response = str(last_data) - last_updated = self.coordinator.last_update_success_time + last_updated = self.coordinator.data.get("last_update") response_time = None model = self.coordinator.model temperature = self.coordinator.temperature max_tokens = self.coordinator.max_tokens - # Конвертация времени в локальный формат if isinstance(last_updated, datetime): last_updated = dt_util.as_local(last_updated) @@ -198,4 +195,4 @@ class HATextAISensor(CoordinatorEntity, SensorEntity): self._last_error = str(err) self._state = STATE_ERROR - self.async_write_ha_state() # Исправлено лишнее двоеточие + self.async_write_ha_state() diff --git a/ha_text_ai.zip b/ha_text_ai.zip deleted file mode 100644 index a772a8d4df62bab95a51f46f28ee88e3c4be4091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16265 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