Richiedi Preventivo

COME CREARE UN OROLOGIO ASTRONOMICO

SFRUTTANDO LO SCRIPTING DI IKON SERVER

 

Da molti clienti è giunta la richiesta di implementare all'interno di IKON SERVER la funzione orologio astronomico per la determinazione di alba e tramonto in base alle coordinate del luogo, al fine di svolgere funzioni domotiche (es: accensione di luci, apertura/chiusura di motorizzazioni, etc...) senza la necessità di un sensore crepuscolare o di una stazione meteorologica KNX.

Nelle librerie dello SCRIPTING di IKON SERVER, a partire dalla versione 1.1.7, abbiamo inserito il supporto a questo tipo di funzionalità; questo tutorial illustra come realizzare un orologio astronomico in grado di svolgere le seguenti operazioni:

  • Impostazione ad 1/0 di un oggetto all'alba (0) ed al tramonto (1), a cui associare (mediante uno o più "EVENTI ATTIVI") le funzioni domotiche desiderate

  • Impostazione ad 1/0 di un oggetto rispettivamente al crepuscolo (1) e all'aurora (0), in modo del tutto analogo al precedente

  • Visualizzazione dell'ora di alba e tramonto nelle pagine grafiche di IKON SERVER

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:

  • Accedere all'amministrazione di IKON SERVER

  • Selezionare "FUNZIONI AVANZATE" quindi "SCRIPTING" ed infine "SCRIPTS"

  • Premere il pulsante "NUOVO" per creare un nuovo script, assegnandogli un nome univoco da richiamare successivamente (nel nostro esempio "efemeridi")

  • Una volta creato lo SCRIPT, premere il corrispondente pulsante di MODIFICA (verde) per entrare nella sua scheda

  • Cancellare il contenuto ed inserire il seguente codice:


/*
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:

  • Giorno / Notte

  • Crepuscolo

  • Ora alba

  • Ora tramonto

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:

  • Selezionare la voce "FUNZIONI AVANZATE" nel menu di amministrazione

  • Selezionare "VARIABILI"

  • Creare una nuova variabile con il pulsante "AGGIUNGI" nella toolbar

  • Accedere alla scheda del nuovo oggetto

A questo punto, inserire le seguenti informazioni:

  • Nome: "Giorno / Notte"

  • Rendering: "Crepuscolare (Giorno/Notte)"

  • Tipo di valore: "Flag booleano"

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:

  • Selezionare la voce "RUNNERS" nella sezione "SCRIPTING" del menu di amministrazione

  • Premere il pulsante "AGGIUNGI" nella toolbar per creare un nuovo oggetto

  • Accedere alla sua scheda attraverso il pulsante "MODIFICA" della toolbar, alla stregua di qualunque altro oggetto del progetto di IKON SERVER

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

  • Nome: "orologio astronomico"

  • Script: selezionare "efemeridi" (o l'eventuale nome differente assegnato in precedenza allo SCRIPT)

  • Esegui all'avvio: selezionare la voce

  • Esegui in loop: selezionare la voce

  • Tempo di loop: inserire "60000" (per eseguire il calcolo una volta al minuto)

 

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

  • Cancellare il contenuto delle caselle di testo "VALORE"

  • Impostare come "IDENTIFICATIVO" le seguenti stringhe (prestando attenzione a maiuscole/minuscole):

    • Giorno / Notte -> "sunlight"

    • Crepuscolare -> "twilight"

    • Ora alba -> "sunrise"

    • Ora tramonto -> "sunset"

  • Premere il pulsante "AGGIORNA" per aggiornare la pagina 

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]).

CONCLUDENDO...

Questo tutorial offre non solo una guida passo-passo alla creazione di una utile funzione all'interno di IKON SERVER, ma mette in evidenza più in generale la potenza e la flessibilità offerte dal motore di SCRIPTING del webserver. Se non intendente cimentarvi nella creazione di nuovi script in autonomia (guidati dalla documentazione online e dal nostro supporto tecnico), potete sottoporci le vostre esigenze specifiche; sarà nostra cura predisporre, come in questo caso, uno SCRIPT predisposto e collaudato dai nostri sviluppatori, da utilizzare "as is" oppure come base per vostre modifiche e personalizzazioni.

 

Il team Domotica Labs

Questo sito utilizza diversi tipi di cookie, tra cui quelli di profilazione (propri e di altri siti) per inviarti pubblicità in linea con le tue preferenze manifestate nell'ambito della navigazione in rete. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie clicca qui. Se accedi a un qualunque elemento sottostante questo banner acconsenti all'uso dei cookie.
OK