import os import requests from django.db.models import Avg from django.utils import timezone from datetime import timedelta from rest_framework.pagination import PageNumberPagination from rest_framework.request import Request from rest_framework import permissions from .models import WeatherStats from project.settings_context import TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID class IsMikrokontroller(permissions.BasePermission): def has_permission(self, request: Request, view): mikro_key = os.environ['MIKRO_SECRET_KEY'] request_key = request.headers.get('X-Mikro-Key') return request_key == mikro_key class SmallPageNumberPagination(PageNumberPagination): page_size = 200 page_size_query_param = 'page_size' max_page_size = 500 def format_value(val, unit="%"): return f"{val:.1f}{unit}" if val is not None else "—" def send_telegram_stats(): now = timezone.now() thirty_minutes_ago = now - timedelta(minutes=30) now_formatted = now.strftime("%d.%m.%Y %H:%M") # Collect data averages = WeatherStats.objects.filter( created_at__gte=thirty_minutes_ago ).aggregate( avg_humidity_air = Avg('humidity_air'), avg_humidity_ground = Avg('humidity_ground'), avg_temperature = Avg('temperature'), avg_light = Avg('light') ) message = f""" Weather average stats for 30 mins ({now_formatted}) Humidity Air: {format_value(averages['avg_humidity_air'])} Humidity Ground: {format_value(averages['avg_humidity_ground'])} Humidity Temperature: {format_value(averages['avg_temperature', '°C'])} Light: {format_value(averages['avg_light'])} """ url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" params = { "chat_id": TELEGRAM_CHAT_ID, "text": message, "parse_mode": "HTML" } requests.get(url, params)