From 70ceac792ef2b04b6347e97d4610d40eebd13fba Mon Sep 17 00:00:00 2001 From: energys Date: Fri, 25 Sep 2026 21:03:11 +0900 Subject: [PATCH] Fix --- zont-exporter/zont_exporter.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/zont-exporter/zont_exporter.py b/zont-exporter/zont_exporter.py index 14a66cd..b833969 100644 --- a/zont-exporter/zont_exporter.py +++ b/zont-exporter/zont_exporter.py @@ -74,13 +74,14 @@ def fetch_last_value(dta_list): def collect_metrics(): """Основная функция сбора метрик.""" + global auth_token + if not auth_token: logging.warning("No auth token available, trying to authenticate...") get_auth_token() if not auth_token: return - # Запрос данных thermostat_work за последний час (3600 секунд) now = int(time.time()) mintime = now - 3600 @@ -109,9 +110,7 @@ def collect_metrics(): if not data.get('ok'): logging.error(f"API returned error: {data.get('error_ui', data.get('error'))}") - # Если токен протух — сбрасываем его if data.get('error') in ['unauthorized', 'token_expired']: - global auth_token auth_token = None return @@ -125,23 +124,19 @@ def collect_metrics(): logging.info("No thermostat_work data in response.") return - # 1. Время работы котла за последнюю минуту boiler_work = fetch_last_value(work_data.get('boiler_work_time')) if boiler_work is not None: BOILER_WORK.labels(device_id=str(DEVICE_ID)).set(boiler_work) - # 2. Целевая температура target_temp = fetch_last_value(work_data.get('target_temp')) if target_temp is not None: TARGET_TEMP.labels(device_id=str(DEVICE_ID)).set(target_temp) - # 3. Температура с датчиков (если есть в ответе) - # В thermostat_work датчики могут быть в отдельном поле или не быть вовсе. - # Здесь пример для поля temperature, если оно придёт. temps = work_data.get('temperature') if temps and isinstance(temps, dict): for sensor_id, sensor_info in temps.items(): - if not isinstance(sensor_info, dict): continue + if not isinstance(sensor_info, dict): + continue name = sensor_info.get('name', sensor_id) val = fetch_last_value(sensor_info.get('temperature')) if val is not None: