Se hai bisogno di calcolare un nuovo valore, dovresti generalmente sforzarti di farlo in un'estensione dell'elenco di ricerca o XType. Tuttavia, ci sono occasioni in cui è più rapido e semplice eseguire il calcolo direttamente nel rapporto, utilizzando la direttiva Cheetah #set .
Ecco un esempio in cui calcoliamo il tempo trascorso tra l'alba e il tramonto:
#set $dawntodusk = $almanac(horizon=-6).sun(use_center=1).set.raw - $almanac(horizon=-6).sun(use_center=1).rise.raw
L'espressione calcola la semplice differenza tra due valori: l'ora del tramonto meno l'ora dell'alba, entrambi in unix epoch time. Il risultato sarà il tempo trascorso in secondi. Per i dettagli sul tag $almanac, vedere Almanacco nella guida alla personalizzazione. Per i dettagli sul suffisso .raw, vedere Opzioni di formattazione.
Possiamo utilizzare questo tag semplicemente facendo riferimento a $dawntodusk. Per esempio:
<p>Il tempo trascorso tra l'alba e il tramonto è $dawntodusk</p>
Questo si tradurrà in qualcosa di simile
Il tempo trascorso tra l'alba e il tramonto è 57315.0023124218
Non molto comprensibile.
Miglioramento della leggibilità
Per ottenere qualcosa di più leggibile, mentre i risultati rispettano tutte le impostazioni specificate dall'utente, comprese le conversioni di unità e la formattazione, è un po' più complicato. Ecco una versione più sofisticata che sfrutta le classi ValueTuple e ValueHelper per eseguire la formattazione. Sebbene questo esempio non implichi alcuna conversione di unità, in generale, queste classi possono occuparsi anche di questo.
#from weewx.units import ValueTuple, ValueHelper ## 1 #set $dawn = $almanac(horizon=-6).sun(use_center=1).rise.raw ## 2 #set $dusk = $almanac(horizon=-6).sun(use_center=1).set.raw ## 3 #set $dawntodusk = $dusk - $dawn ## 4 #set $dawntodusk_vh = ValueHelper(ValueTuple($dawntodusk,'second','group_deltatime'),formatter=$station.formatter) ## 5
I numeri fanno riferimento ai commenti seguenti:
-
1- Né class ValueTuple né ValueHelper, appaiono nel rapporto. Dobbiamo importarli.
-
2- Impostare il valore $dawn sull'ora dell'alba. Il suffisso .raw garantisce che i risultati saranno in unix epoch time (piuttosto che una stringa).
-
3- Simile, ma con il tramonto.
-
4- Prendi la differenza. Poiché il tempo dell'epoca unix è in secondi, anche i risultati saranno in secondi.
-
5- Costruisce un ValueHelper per contenere i risultati. Prendiamo in prestito un formattatore dal tag $station.
Il risultato, $dawntodusk_vh, è un ValueHelper. Quando viene reso come una stringa dal motore Cheetah, farà la magia necessaria per garantire una formattazione ragionevole per ciò che la ValueTuple contiene internamente. Questa volta, il rapporto
<p>Il tempo trascorso tra l'alba e il tramonto è $dawntodusk_vh.</p>
dà il seguente risultato:
Il tempo trascorso tra l'alba e il tramonto è 0 giorni, 15 ore, 55 minuti
Come qualsiasi altra istanza di ValueHelper, puoi sovrascrivere la formattazione. Ad esempio, specificando
Il tempo trascorso tra l'alba e il tramonto è $dawntodusk_vh.format("%(ora)d%(hour_label)e, %(minuto)d%(minute_label)i, and %(secondo)d%(second_label)i")
dà il seguente risultato:
Il tempo trascorso tra l'alba e il tramonto è 15 ore, 55 minuti, e 15 secondi