0.5.0: riordino come l'app ufficiale (home, Dati, Impianto)
- home: temperatura esterna e in casa/assente in alto, messaggio di stato, scheda impianto con temperatura stanza e acqua calda; comandi sotto - pagina Dati: calore prodotto, elettricita' usata, COP acqua calda e riscaldamento, risparmio, CO2 evitata, Smart Tariff Control (mese per mese) - pagina Impianto: stato, termostato a parete, versioni software, errori - bridge 0.4.0: rotta /stats (servizio statistiche del cloud) e blocco dispositivo in /summary (ID breve, versioni, termostato) - C++: parseStats, formatNumber, formatMoney, monthLabel (separatore e valuta secondo la lingua); 61/61 verifiche del nucleo - anteprime aggiornate (dati, impianto) in inglese e italiano
This commit is contained in:
@@ -94,6 +94,55 @@ if stato_file.exists():
|
||||
else:
|
||||
print("(salto il controllo del riassunto: /tmp/state.json assente)")
|
||||
|
||||
# --- 6) statistiche: conversioni pure ------------------------------------- #
|
||||
check("money_value: 2710000000 / 10^9 = 2.71", b.money_value(2710000000, 9) == 2.71,
|
||||
repr(b.money_value(2710000000, 9)))
|
||||
check("money_value: valori assenti -> 0.0", b.money_value(None, None) == 0.0)
|
||||
check("wh_to_kwh: 29300 Wh = 29.3 kWh", b.wh_to_kwh(29300) == 29.3, repr(b.wh_to_kwh(29300)))
|
||||
check("wh_to_kwh: 70844.5 Wh = 70.8 kWh", b.wh_to_kwh(70844.53878839477) == 70.8,
|
||||
repr(b.wh_to_kwh(70844.53878839477)))
|
||||
check("wh_to_kwh: zero -> None (nessun dato)", b.wh_to_kwh(0) is None)
|
||||
check("wh_to_kwh: valore assente -> None", b.wh_to_kwh(None) is None)
|
||||
|
||||
class _YM: # finto YearMonth / LocalDateTime
|
||||
def __init__(self, y, m, d=0):
|
||||
self.year, self.month, self.day = y, m, d
|
||||
|
||||
check("_ym: 2026-09", b._ym(_YM(2026, 9)) == "2026-09", b._ym(_YM(2026, 9)))
|
||||
check("_data: 2026-10-01", b._data(_YM(2026, 10, 1)) == "2026-10-01", b._data(_YM(2026, 10, 1)))
|
||||
|
||||
# --- 7) riassunto: blocco dispositivo (stato sintetico, nessun file) ------- #
|
||||
# I valori del termostato arrivano con i decimali come interi (228 -> 22.8).
|
||||
finto = {
|
||||
"heat_pump_id": {"value": "1f4b26c4-1800-4b21-8ea2-236925a92aeb"},
|
||||
"versions": {"linux_build_id": "6.10.0", "connectivity_manager": "3.30.1",
|
||||
"climate_control_villa": "3.9.12", "outdoor_unit_application": "1.30.0",
|
||||
"outdoor_unit_eeprom": "0.114.0"},
|
||||
"thermostats": [{"article_number": "201884", "zone": "ZONE_1", "rssi": -79,
|
||||
"last_update": {"actual_temperature": 228, "humidity": 734,
|
||||
"warning_low_battery_level": False}}],
|
||||
"time_zone": {"time_zone_identifier": "Europe/Rome"},
|
||||
"zone_setpoints_heating": {"zone_1": 19.0, "zone_2": 0.0},
|
||||
"zone_temperatures": {"zone_1": 22.8, "zone_2": 0.0},
|
||||
}
|
||||
d = b.summarize(finto)
|
||||
check("dispositivo: id breve di 6 cifre", d.get("device_id") == "1f4b26", repr(d.get("device_id")))
|
||||
check("dispositivo: uuid completo", d.get("device_uuid") == "1f4b26c4-1800-4b21-8ea2-236925a92aeb")
|
||||
check("dispositivo: versione piattaforma", d.get("version_platform") == "6.10.0")
|
||||
check("dispositivo: versione connettività", d.get("version_connectivity") == "3.30.1")
|
||||
check("dispositivo: versione unità esterna", d.get("version_outdoor_unit") == "1.30.0")
|
||||
check("dispositivo: connessione", d.get("connected_via") == "Cloud")
|
||||
check("dispositivo: fuso orario", d.get("timezone") == "Europe/Rome")
|
||||
check("termostato: zona 1 da 'ZONE_1'", d.get("thermostat_zone") == 1, repr(d.get("thermostat_zone")))
|
||||
check("termostato: 228 -> 22.8 °C", d.get("thermostat_temperature") == 22.8,
|
||||
repr(d.get("thermostat_temperature")))
|
||||
check("termostato: 734 -> 73.4 %", d.get("thermostat_humidity") == 73.4,
|
||||
repr(d.get("thermostat_humidity")))
|
||||
check("termostato: segnale riportato", d.get("thermostat_rssi") == -79)
|
||||
check("termostato: batteria non scarica", d.get("thermostat_battery_low") is False)
|
||||
check("senza termostato: nessun errore",
|
||||
b.summarize({k: v for k, v in finto.items() if k != "thermostats"}).get("thermostat_zone") is None)
|
||||
|
||||
# --- esito ---------------------------------------------------------------- #
|
||||
falliti = [n for n, ok, _ in esiti if not ok]
|
||||
print(f"\n{len(esiti) - len(falliti)}/{len(esiti)} controlli superati")
|
||||
|
||||
Reference in New Issue
Block a user