METEO & TEMPO - OROLOGIO ASTRONOMICO - METEO & TEMPO - Domotica KNX MyHOME Modbus e soluzioni IOT


METEO & TEMPO - OROLOGIO ASTRONOMICO

Questo tutorial illustra come realizzare uno script di orologio astronomico in IKON SERVER, in grado di svolgere le seguenti operazioni:

NOTA: coerentemente con la convenzione utilizzata da molti dispositivi KNX, verrà utilizzato il valore 0 per ALBA / AURORA e 1 per TRAMONTO / CREPUSCOLO.

 

CREAZIONE DELLO SCRIPT

Il primo passo consiste nel creare un nuovo SCRIPT all'interno di IKON SERVER, contenente il codice necessario per il calcolo dei dati in base alle coordinate. AS tale scopo, procedere come segue:

/*
Questo script calcola alba/tramonto e inizio/fine del crepuscolo in base alle coordinate inserite
Lo script è pensato per essere eseguito da uno script runner in loop 
ed eseguito all'avvio del sistema, con le seguenti USCITE 
(utilizzare esattamente le diciture seguenti come IDENTIFICATIVO, rispettando maiuscole/minuscole):

- "sunlight" : questo oggetto, se presente, viene impostato ad 1 all'alba e a 0 al tramonto
- "twilight" : questo oggetto, se presente, viene impostato ad 1 all'aurora e 0 al crepuscolo
- "sunrise"  : questo oggetto, se presente, viene impostato con l'ora dell'alba per il giorno corrente
- "sunset"   : questo oggetto, se presente, viene impostato con l'ora del tramonto per il giorno corrente

Si suggerisce come tempo di loop per lo script runner un tempo non inferiore al minuto, quindi 60000 ms

*/

//Inclusione della libreria per la gestione di ingressi/uscite e identificazione delle uscite
include_library("surrounding");
$sunlight = $me->getChildByIdentifier("sunlight");
$twilight = $me->getChildByIdentifier("twilight");
$sunrise = $me->getChildByIdentifier("sunrise");
$sunset = $me->getChildByIdentifier("sunset");

//Coordinate per il calcolo
$latitude = 45.4773;   //Latitudine in gradi; esempio: Milano 
$longitude = 9.1815;   //Longitudine in gradi; esempio: Milano

//Calcolo astronomico
$sun_info = date_sun_info(strtotime(date("Y-m-d",time())), $latitude, $longitude);

//Comando oggetto "sunlight"
if(!empty($sunlight))
{
   $sunlight->refreshFromDb("value");
   $new_value = intval(time() < $sun_info["sunrise"] || time() > $sun_info["sunset"]);
   if(intval($sunlight->value) != $new_value)
   {
      $sunlight->set($new_value);
      debug("Oggetto sunlight impostato a " . $new_value,true);
   }
   else
   {
      debug("Oggetto sunlight non modificato, valore corrente " . ($sunlight->value ? "notte" : "giorno"),true);
   }
}

//Comando oggetto "twilight"
if(!empty($twilight))
{
   $twilight->refreshFromDb("value");
   $new_value = intval(time() < $sun_info["civil_twilight_begin"] || time() > $sun_info["civil_twilight_end"]);
   if(intval($twilight->value) != $new_value)
   {
      $twilight->set($new_value);
      debug("Oggetto twilight impostato a " . $new_value,true);
   }
   else
   {
      debug("Oggetto twilight non modificato, valore corrente " . ($twilight->value ? "notte" : "giorno"),true);
   }
}

//Comando oggetto "sunrise"
if(!empty($sunrise))
{
   $sunrise->refreshFromDb("value");
   $new_value = date("H:i:s",$sun_info["sunrise"]);
   if($sunrise->value != $new_value)
   {
      $sunrise->set($new_value);
      debug("Oggetto sunrise impostato a " . $new_value,true);
   }
   else
   {
      debug("Oggetto sunrise non modificato, valore corrente " . $sunrise->value,true);
   }
}

//Comando oggetto "sunset"
if(!empty($sunset))
{
   $sunset->refreshFromDb("value");
   $new_value = date("H:i:s",$sun_info["sunset"]);
   if($sunset->value != $new_value)
   {
      $sunset->set($new_value);
      debug("Oggetto sunset impostato a " . $new_value,true);
   }
   else
   {
      debug("Oggetto sunset non modificato, valore corrente " . $sunset->value,true);
   }
}

output("");

 

All'interno del codice (evidenziate in grassetto) sono presenti due variabili, $latitude e $longitude, che devono essere impostate con i dati relativi al luogo in cui è installato IKON SERVER; nell'esempio sono riportate le coordinate di Milano. Sono disponibili molti siti internet che mettono a disposizione le coordinate del proprio comune; uno tra questi, che contiene le coordinate di tutti i comuni d'Italia, è

http://www.dossier.net/utilities/coordinate-geografiche/

 

Una volta opportunamente personalizzato il codice con le coordinate, salvare attraverso l'apposito pulsante.

 

CREAZIONE DELLE VARIABILI

Prima di utilizzare lo SCRIPT appena creato, è opportuno predisporre nel progetto 4 oggetti di tipo "VARIABILE", che verranno utilizzati per contenere le seguenti informazioni:

I primi due oggetti saranno di tipo ON/OFF, e potranno essere utilizzati, creando opportuni EVENTI ATTIVI nella loro scheda di dettaglio, per effettuare operazioni al cambio di stato (es: scenari, logiche o anche solo l'invio del valore sul bus KNX); gli altri due oggetti potranno essere inseriti nelle pagine grafiche di IKON SERVER per mostrare all'utente l'ora di alba e tramonto odierni.

 

Per creare, ad esempio, l'oggetto "Giorno / Notte", procedere come segue:

A questo punto, inserire le seguenti informazioni:

Procedere in modo analogo per la creazione degli altri oggetti; gli oggetti "Ora alba" e "Ora tramonto" dovranno avere come rendering "Crepuscolare (qualunque valore)" e come tipo di valore "stringa".

E' opportuno infine rimuovere l'abilitazione in scrittura da parte dell'utente ai due oggetti contenenti le ore di alba e tramonto, premendo il pulsante "AVANZATO" in alto a destra, e quindi togliendo la selezione alla voce "ABILITATO IN COMANDO".

 

CREAZIONE DELLO SCRIPT RUNNER

Lo SCRIPT appena creato, per essere eseguito, deve essere associato ad un oggetto di tipo SCRIPT RUNNER (per ulteriori informazioni, si rimanda al MANUALE SULLO SCRIPTING PERSONALIZZATO disponibile per il download nell'area SUPPORTO del sito). A tale scopo:

Una volta caricata la scheda del nuovo oggetto, inserire le seguenti informazioni nella sezione "PROPRIETA' DELL'OGGETTO":

 

Nella sezione "USCITE" trascinare, dal motore di ricerca, le VARIABILI create in precedenza, avendo cura di effettuare le seguenti operazioni:

A questo punto, è possibile simulare l'esecuzione dello SCRIPT digitando un qualunque carattere nella casella "VALORE DI INGRESSO" nella sezione "DEBUG"; nella finestra "DEBUG" compare un log simile alla figura seguente, e contestualmente gli oggetti VARIABILE assumono il valore calcolato dallo SCRIPT:

Se la simulazione si comporta correttamente, mettere in esecuzione lo SCRIPT RUNNER attraverso il pulsante AVVIA (per vedere aggiornare lo stato di esecuzione, ricaricare la pagina). Esso provvederà in automatico a ricalcolare i dati di alba/tramonto e crepuscolo ogni minuto, ed impostare ad 1/0 gli oggetti ON/OFF quando l'ora corrente coincida con gli orari di alba/tramonto (in sequenza durante l'arco della giornata: AURORA [0] - ALBA [0] - TRAMONTO [1] - CREPUSCOLO [1]).