# Copyright (c) 2026 Meteo Ponte San Nicoḷ. Tutti i diritti riservati.
#
# Questo plugin consente di calcolare il parametro "radiationEnergy", ossia l'energia solare (espressa in kWh/mq).
#
# Requisiti:
#    1. Weewx 4.2 o successivi
#    2. Radiazione solare rilevata
#
# Istruzioni per l'installazione:
#    1. Fermare il processo "weewxd" (a seconda del metodo di installazione)
#    2. Inserire questo file nella cartella bin/user
#    3. Nel file configurazione weewx.conf, sottosezione [Engine][[Services]], aggiungere "radiationEnergyService" alla riga "data_services". Ad esempio:
#
#        [Engine]
#            [[Services]]
#                data_services = user.radiationenergy.radiationEnergyService
#
#    4. Riavviare il processo "weewxd"

import weewx
import weewx.units
weewx.units.obs_group_dict['radiationEnergy'] = 'group_radiation_energy'
weewx.units.USUnits['group_radiation_energy'] = 'kwh_per_meter_squared'
weewx.units.MetricUnits['group_radiation_energy'] = 'kwh_per_meter_squared'
weewx.units.MetricWXUnits['group_radiation_energy'] = 'kwh_per_meter_squared'
weewx.units.default_unit_format_dict['kwh_per_meter_squared'] = '%.3f'
weewx.units.default_unit_label_dict['kwh_per_meter_squared'] = ' kWh/m&sup2;'

from weewx.engine import StdService

class radiationEnergyService(StdService):

    def __init__(self, engine, config_dict):
        super(radiationEnergyService, self).__init__(engine, config_dict)

        self.bind(weewx.NEW_ARCHIVE_RECORD, self.new_archive_record)

    def new_archive_record(self, event):
        if event.record.get('radiation') is not None:
            radiation = event.record.get('radiation')
            interval = event.record.get('interval')
            event.record['radiationEnergy'] = ((radiation * interval) / 60) / 1000
        else:
            event.record['radiationEnergy'] = None