Backup automatico script del 2026-01-11 07:00

This commit is contained in:
2026-01-11 07:00:03 +01:00
parent 2859b95dbc
commit 4555d6615e
20 changed files with 13373 additions and 887 deletions

View File

@@ -0,0 +1,164 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script di test per generare e mostrare grafico neve con dati mock
"""
import datetime
import os
import sys
from zoneinfo import ZoneInfo
# Aggiungi il percorso dello script principale
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from arome_snow_alert import generate_snow_chart_image, TZINFO, telegram_send_photo, TELEGRAM_CHAT_IDS
def create_mock_data():
"""Crea dati mock realistici per test del grafico"""
now = datetime.datetime.now(TZINFO)
now = now.replace(minute=0, second=0, microsecond=0)
# Genera 48 ore di dati orari
times = []
snowfall_arome = []
rain_arome = []
snowfall_icon = []
rain_icon = []
snow_depth_icon = []
# Scenario realistico: nevicata nelle prime 24h, poi pioggia/neve mista
for i in range(48):
dt = now + datetime.timedelta(hours=i)
times.append(dt.isoformat())
# AROME Seamless
# Simula nevicata nelle prime 18 ore
if i < 18:
# Picco di neve intorno alle 8-12 ore
if 8 <= i <= 12:
snowfall_arome.append(0.5 + (i - 8) * 0.2) # 0.5-1.3 cm/h
elif 12 < i <= 15:
snowfall_arome.append(1.3 - (i - 12) * 0.2) # Decresce
else:
snowfall_arome.append(0.2 + (i % 3) * 0.1) # Variazione
rain_arome.append(0.0)
# Transizione a pioggia/neve mista
elif 18 <= i < 24:
snowfall_arome.append(0.1 + (i - 18) * 0.05) # Neve residua
rain_arome.append(0.5 + (i - 18) * 0.3) # Pioggia aumenta
# Pioggia
elif 24 <= i < 36:
snowfall_arome.append(0.0)
rain_arome.append(1.5 + (i - 24) % 4 * 0.5) # Pioggia variabile
# Fine precipitazioni
else:
snowfall_arome.append(0.0)
rain_arome.append(0.0)
# ICON Italia (leggermente diverso per mostrare discrepanze)
if i < 20:
# Neve più persistente in ICON
if 10 <= i <= 14:
snowfall_icon.append(0.6 + (i - 10) * 0.25) # 0.6-1.6 cm/h
elif 14 < i <= 18:
snowfall_icon.append(1.6 - (i - 14) * 0.15)
else:
snowfall_icon.append(0.3 + (i % 3) * 0.15)
rain_icon.append(0.0)
elif 20 <= i < 28:
snowfall_icon.append(0.05)
rain_icon.append(0.8 + (i - 20) * 0.2)
elif 28 <= i < 38:
snowfall_icon.append(0.0)
rain_icon.append(2.0 + (i - 28) % 3 * 0.4)
else:
snowfall_icon.append(0.0)
rain_icon.append(0.0)
# Snow depth (ICON Italia) - accumulo progressivo poi scioglimento
if i == 0:
snow_depth_icon.append(0.0)
elif i < 20:
# Accumulo progressivo
prev_depth = snow_depth_icon[-1] if snow_depth_icon else 0.0
new_snow = snowfall_icon[i] * 0.8 # 80% si accumula (perdite per compattazione)
snow_depth_icon.append(prev_depth + new_snow)
elif 20 <= i < 30:
# Scioglimento lento con pioggia
prev_depth = snow_depth_icon[-1] if snow_depth_icon else 0.0
melt = rain_icon[i] * 0.3 # Scioglimento proporzionale alla pioggia
snow_depth_icon.append(max(0.0, prev_depth - melt))
else:
# Scioglimento completo
snow_depth_icon.append(0.0)
# Costruisci struttura dati come da Open-Meteo
data_arome = {
"hourly": {
"time": times,
"snowfall": snowfall_arome,
"rain": rain_arome
}
}
data_icon = {
"hourly": {
"time": times,
"snowfall": snowfall_icon,
"rain": rain_icon,
"snow_depth": snow_depth_icon # Già in cm (mock)
}
}
return data_arome, data_icon
def main():
print("Generazione dati mock...")
data_arome, data_icon = create_mock_data()
print(f"Dati generati:")
print(f" - AROME: {len(data_arome['hourly']['time'])} ore")
print(f" - ICON: {len(data_icon['hourly']['time'])} ore")
print(f" - Snow depth max: {max(data_icon['hourly']['snow_depth']):.1f} cm")
print(f" - Snowfall AROME max: {max(data_arome['hourly']['snowfall']):.1f} cm/h")
print(f" - Snowfall ICON max: {max(data_icon['hourly']['snowfall']):.1f} cm/h")
# Percorso output
output_path = "/tmp/snow_chart_test.png"
print(f"\nGenerazione grafico in {output_path}...")
success = generate_snow_chart_image(
data_arome,
data_icon,
output_path,
location_name="🏠 Casa (Test Mock)"
)
if success:
print(f"✅ Grafico generato con successo!")
print(f" File: {output_path}")
print(f" Dimensione: {os.path.getsize(output_path) / 1024:.1f} KB")
# Invio via Telegram
print(f"\nInvio via Telegram a {len(TELEGRAM_CHAT_IDS)} chat(s)...")
caption = "📊 <b>TEST Grafico Precipitazioni 48h</b>\n🏠 Casa (Test Mock)\n\nGrafico di test con dati mock per verificare la visualizzazione."
photo_ok = telegram_send_photo(output_path, caption, chat_ids=[TELEGRAM_CHAT_IDS[0]]) # Solo al primo chat ID per test
if photo_ok:
print(f"✅ Grafico inviato con successo su Telegram!")
else:
print(f"❌ Errore nell'invio su Telegram (verifica token)")
# Mantieni il file per visualizzazione locale
print(f"\n💡 File disponibile anche localmente: {output_path}")
else:
print("❌ Errore nella generazione del grafico")
return 1
return 0
if __name__ == "__main__":
sys.exit(main())