62 lines
2.7 KiB
Python
62 lines
2.7 KiB
Python
import rrdtool
|
|
import time
|
|
import requests
|
|
from dotenv import load_dotenv
|
|
import os
|
|
load_dotenv()
|
|
|
|
def send_telegram():
|
|
token = os.getenv("TELEGRAM_TOKEN")
|
|
channel_id = os.getenv("TELEGRAM_CHANNEL_ID")
|
|
if not token or not channel_id:
|
|
raise ValueError("Telegram токен или ID канала не заданы в .env")
|
|
|
|
url = f"https://api.telegram.org/bot{token}/sendPhoto"
|
|
with open('temperature_graph.png', 'rb') as file:
|
|
r = requests.post(url, data={
|
|
"chat_id": channel_id
|
|
}, files={
|
|
"photo": file
|
|
})
|
|
print(r.text)
|
|
if r.status_code != 200:
|
|
raise Exception(f"Ошибка отправки в Telegram: {r.text}")
|
|
|
|
def create_graph(rrd_file: str, output_file: str):
|
|
# Получаем текущее время
|
|
now = int(time.time())
|
|
# Время начала (24 часа назад)
|
|
start_time = now - 86400 # 86400 секунд = 1 день
|
|
|
|
# Форматируем даты для заголовка
|
|
start_date = time.strftime("%d-%m-%Y", time.localtime(start_time))
|
|
end_date = time.strftime("%d-%m-%Y", time.localtime(now))
|
|
|
|
try:
|
|
rrdtool.graph(
|
|
output_file,
|
|
"--start", str(start_time), # Начало графика
|
|
"--end", str(now), # Конец графика
|
|
"--vertical-label", "Temperature (°C)",
|
|
"--title", f"Temperature Readings from {start_date} to {end_date}",
|
|
"DEF:low_temp={}:temp_low:AVERAGE".format(rrd_file), # Средние значения нижней температуры
|
|
"DEF:high_temp={}:temp_high:AVERAGE".format(rrd_file), # Средние значения верхней температуры
|
|
"LINE1:low_temp#0000FF:Low Temperature", # Линия для нижней температуры (синий)
|
|
"LINE1:high_temp#FF0000:High Temperature", # Линия для верхней температуры (красный)
|
|
r"GPRINT:low_temp:MIN:Min Low Temp\: %2.2lf°C",
|
|
r"GPRINT:low_temp:MAX:Max Low Temp\: %2.2lf°C",
|
|
r"GPRINT:low_temp:AVERAGE:Avg Low Temp\: %2.2lf°C\n",
|
|
r"GPRINT:high_temp:MIN:Min High Temp\: %2.2lf°C",
|
|
r"GPRINT:high_temp:MAX:Max High Temp\: %2.2lf°C",
|
|
r"GPRINT:high_temp:AVERAGE:Avg High Temp\: %2.2lf°C\n",
|
|
)
|
|
print(f"График успешно создан: {output_file}")
|
|
send_telegram()
|
|
|
|
except Exception as e:
|
|
print(f"Ошибка создания графика: {e}")
|
|
|
|
# Пример использования
|
|
rrd_file = "temperature_data.rrd"
|
|
output_file = "temperature_graph.png"
|
|
create_graph(rrd_file, output_file)
|