Fix
This commit is contained in:
@@ -74,13 +74,14 @@ def fetch_last_value(dta_list):
|
|||||||
|
|
||||||
def collect_metrics():
|
def collect_metrics():
|
||||||
"""Основная функция сбора метрик."""
|
"""Основная функция сбора метрик."""
|
||||||
|
global auth_token
|
||||||
|
|
||||||
if not auth_token:
|
if not auth_token:
|
||||||
logging.warning("No auth token available, trying to authenticate...")
|
logging.warning("No auth token available, trying to authenticate...")
|
||||||
get_auth_token()
|
get_auth_token()
|
||||||
if not auth_token:
|
if not auth_token:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Запрос данных thermostat_work за последний час (3600 секунд)
|
|
||||||
now = int(time.time())
|
now = int(time.time())
|
||||||
mintime = now - 3600
|
mintime = now - 3600
|
||||||
|
|
||||||
@@ -109,9 +110,7 @@ def collect_metrics():
|
|||||||
|
|
||||||
if not data.get('ok'):
|
if not data.get('ok'):
|
||||||
logging.error(f"API returned error: {data.get('error_ui', data.get('error'))}")
|
logging.error(f"API returned error: {data.get('error_ui', data.get('error'))}")
|
||||||
# Если токен протух — сбрасываем его
|
|
||||||
if data.get('error') in ['unauthorized', 'token_expired']:
|
if data.get('error') in ['unauthorized', 'token_expired']:
|
||||||
global auth_token
|
|
||||||
auth_token = None
|
auth_token = None
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -125,23 +124,19 @@ def collect_metrics():
|
|||||||
logging.info("No thermostat_work data in response.")
|
logging.info("No thermostat_work data in response.")
|
||||||
return
|
return
|
||||||
|
|
||||||
# 1. Время работы котла за последнюю минуту
|
|
||||||
boiler_work = fetch_last_value(work_data.get('boiler_work_time'))
|
boiler_work = fetch_last_value(work_data.get('boiler_work_time'))
|
||||||
if boiler_work is not None:
|
if boiler_work is not None:
|
||||||
BOILER_WORK.labels(device_id=str(DEVICE_ID)).set(boiler_work)
|
BOILER_WORK.labels(device_id=str(DEVICE_ID)).set(boiler_work)
|
||||||
|
|
||||||
# 2. Целевая температура
|
|
||||||
target_temp = fetch_last_value(work_data.get('target_temp'))
|
target_temp = fetch_last_value(work_data.get('target_temp'))
|
||||||
if target_temp is not None:
|
if target_temp is not None:
|
||||||
TARGET_TEMP.labels(device_id=str(DEVICE_ID)).set(target_temp)
|
TARGET_TEMP.labels(device_id=str(DEVICE_ID)).set(target_temp)
|
||||||
|
|
||||||
# 3. Температура с датчиков (если есть в ответе)
|
|
||||||
# В thermostat_work датчики могут быть в отдельном поле или не быть вовсе.
|
|
||||||
# Здесь пример для поля temperature, если оно придёт.
|
|
||||||
temps = work_data.get('temperature')
|
temps = work_data.get('temperature')
|
||||||
if temps and isinstance(temps, dict):
|
if temps and isinstance(temps, dict):
|
||||||
for sensor_id, sensor_info in temps.items():
|
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)
|
name = sensor_info.get('name', sensor_id)
|
||||||
val = fetch_last_value(sensor_info.get('temperature'))
|
val = fetch_last_value(sensor_info.get('temperature'))
|
||||||
if val is not None:
|
if val is not None:
|
||||||
|
|||||||
Reference in New Issue
Block a user