Il primo passo consiste nel creare uno SCRIPT, procedendo come segue:
Accedere alla sezione di AMMINISTRAZIONE di IKON SERVER
Selezionare la voce "FUNZIONI AVANZATE", quindi "SCRIPTING" ed infine "SCRIPTS"
Premere il pulsante "NUOVO" ed assegnare un nome univoco al nuovo script (ad esempio "temporizzazione")
Accedere alla scheda del nuovo SCRIPT mediante l'apposito pulsante di MODIFICA (verde)
A questo punto, cancellare il contenuto dello SCRIPT ed inserire il codice seguente:
/******************************** / CREDITS / Written by Ennio Fantuzzi / All Rights Reserverd. / Copyright 2014 / / Date: 13/10/2014 / Version: 1.0 *********************************/ /******************************************************************************************************************************* La Funzione di questo script php, è simile a quella di un temporizzatore scale, dove il ciclo di funzionamento è Quando a "COMANDO" arriva un "1", Lo script Imposta a "1" USCITAPREAVVISATA e USCITAFISSA, o commuta STATUS a "1" Allo scadere di un tempo pari a TEMPOACCENSIONE-TEMPOPREAVVISO, STATUS commuta a "2" ed USCITAPREAVVISATA entra nella fase di lampeggio per un tempo pari a TEMPOPREAVVISO. Il lampeggio è regolato in secondi da TIMEPULSEON, e TIMEPULSEOFF, che regolano rispettivamente il tempo in cui USCITAPREAVVISATA deve rimanere accesa e spenta. A scadere del timer di TEMPOPREAVVISO, Tutte le uscite vengono Poste a "0" Se durante il funzionamento dello scriptrunner, COMANDO torna a 0, il programma viene arrestato, in un tempo che può variare dai 10 a 1 secondi, a seconda dello status del programma. COMANDO, viene riportato automaticamente a 0, alla chiusura dello ScriptRunner, senza generare eventi all'interno di IKON. INTERFACCIA, ovvero dove vanno posti gli oggetti all'interno dello scriptrunner, e quale testo specificare in "IDENTIFICATORE" per associarli correttamente: INGRESSI: - COMANDO, deve essere di tipo BOOLEAN; USCITE: - USCITAPREAVVISTA, deve essere di tipo BOOLEAN ed è l'uscita che lampeggerà durante il periodo TEMPOPREAVVISO; - USCITAFISSA, deve essere di tipo BOOLEAN ed è l'uscita che rimarrà accesa durante tutto il periodo TEMPOACCENSIONE; - STATUS, deve essere di tipo integer e segnala in che stato è lo ScriptRunner: 0 Tutto Spento, 1 Acceso nella prima parte Fissa, 2 Acceso nella parte Lampeggiante. NOTABENE: Queste sotto, sono poste in uscite, ma in realtà sono dei parametri in ingresso: viene scelta questa zona in modo che una loro variazione, non lancia lo ScriptRunner. - TEMPOACCENSIONE, deve essere di tipo integer ed è espresso in minuti; - TEMPOPREAVVISO, deve essere di tipo integer ed è espresso in minuti; - TIMEPULSEON, deve essere di tipo integer ed è espresso in secondi; - TIMEPULSEOFF, deve essere di tipo integer ed è espresso in secondi; *******************************************************************************************************************************/ include_library("surrounding"); $accensione=0; $tempofisso=0; $preavviso=0; $pulseontime=0; $pulseofftime=0; foreach($me->parentRelations as $parentRelation) { $parent = $parentRelation->parent; if (strcmp(strtoupper($parentRelation->options['tag_complex_element']), "COMANDO")==0) { $ElementodiComando=$parent; } } foreach($me->childRelations as $childRelation) { $child = $childRelation->child; if (strcmp(strtoupper($childRelation->options['tag_complex_element']), "TEMPOACCENSIONE")==0) { $accensione += (intval($child ->value)*1); debug("Child Values is: ".strval($child ->value)); } if (strcmp(strtoupper($childRelation->options['tag_complex_element']), "TEMPOPREAVVISO")==0) { $preavviso += (intval($child ->value)*1); debug("Child Values is: ".strval($child ->value)); } if (strcmp(strtoupper($childRelation->options['tag_complex_element']), "TIMEPULSEON")==0) { $pulseontime += intval($child ->value); debug("Child Values is: ".strval($child ->value)); } if (strcmp(strtoupper($childRelation->options['tag_complex_element']), "TIMEPULSEOFF")==0) { $pulseofftime += intval($child ->value); debug("Child Values is: ".strval($child ->value)); } if (strcmp(strtoupper($childRelation->options['tag_complex_element']), "USCITAPREAVVISATA")==0) { $UscitaPreavvisata = $child; debug("Child Values is: ".strval($child ->value)); } if (strcmp(strtoupper($childRelation->options['tag_complex_element']), "USCITAFISSA")==0) { $UscitaFissa = $child; debug("Child Values is: ".strval($child ->value)); } if (strcmp(strtoupper($childRelation->options['tag_complex_element']), "STATUS")==0) { $StatusObj= $child; debug("Child Values is: ".strval($child ->value)); } } if (empty($ElementodiComando)){ debug ("Esco perchè Manca"); objM::objUpdateToDb($ElementodiComando->id,"value","0"); _output(); } if (intval($ElementodiComando->value)!=1){ if (!empty($UscitaPreavvisata)) { $UscitaPreavvisata->refreshFromDb("value"); if ($UscitaPreavvisata->value != 0) objM::objPerformOperation($UscitaPreavvisata->id,"SETVALUE",0); } if (!empty($UscitaFissa)) { $UscitaFissa->refreshFromDb("value"); if ($UscitaFissa->value != 0) objM::objPerformOperation($UscitaFissa->id,"SETVALUE",0); } debug ("Esco perche' Comando è OFF"); objM::objUpdateToDb($ElementodiComando->id,"value","0"); _output(); } if (empty($UscitaPreavvisata) && empty($UscitaFissa)){ debug ("ESCO perche' Mancano entrambe le uscite"); objM::objUpdateToDb($ElementodiComando->id,"value","0"); _output(); } $tempofisso = $accensione - $preavviso; if ($accensione <1){ debug ("Accensione bassa, ESCO"); objM::objUpdateToDb($ElementodiComando->id,"value","0"); _output(); } if ($preavviso <0){ debug ("Preavviso bassa, ESCO"); _output(); } if ($tempofisso < 0){ $tempofisso =0; } if (($preavviso > 0) && (($pulseontime+$pulseofftime)<1)){ debug ("Calcoli sballati, ESCO"); objM::objUpdateToDb($ElementodiComando->id,"value","0"); _output(); } $preavviso=$preavviso*60; debug ("accendo"); if (!empty($UscitaPreavvisata)) objM::objPerformOperation($UscitaPreavvisata->id,"SETVALUE",1); if (!empty($UscitaFissa)) objM::objPerformOperation($UscitaFissa->id,"SETVALUE",1); if (!empty($StatusObj)) objM::objPerformOperation($StatusObj->id,"SETVALUE",1); //intval($ElementodiComando->value) $contatore1 = 0; debug ("Valore di COMANDO"); debug ($ElementodiComando->value); while ($contatore1 < $tempofisso){ $contatore2 = 0; while ($contatore2 < 6){ sleep(10); $ElementodiComando->refreshFromDb("value"); debug ("Valore di COMANDO"); debug ($ElementodiComando->value); if (intval($ElementodiComando->value)==0){ if (!empty($UscitaPreavvisata)) { $UscitaPreavvisata->refreshFromDb("value"); if ($UscitaPreavvisata->value != 0) objM::objPerformOperation($UscitaPreavvisata->id,"SETVALUE",0); } if (!empty($UscitaFissa)) { $UscitaFissa->refreshFromDb("value"); if ($UscitaFissa->value != 0) objM::objPerformOperation($UscitaFissa->id,"SETVALUE",0); } if (!empty($StatusObj)) objM::objPerformOperation($StatusObj->id,"SETVALUE",0); objM::objUpdateToDb($ElementodiComando->id,"value","0"); _output(); } debug ("Loop 10 secondi"); $contatore2++; } debug ("Loop 60 secondi"); $contatore1++; } $contatore1 = 0; debug ("preavviso"); if (!empty($StatusObj)) objM::objPerformOperation($StatusObj->id,"SETVALUE",2); while ($contatore1 < $preavviso){ //// Moltiplicare preavviso x 60!!! // Durata Lampeggio OFF debug ("Lampeggio off"); if (!empty($UscitaPreavvisata)) objM::objPerformOperation($UscitaPreavvisata->id,"SETVALUE",0); $contatore2 = 0; while (($contatore2 < $pulseofftime)&&($contatore1 < $preavviso)) { sleep(1); $ElementodiComando->refreshFromDb("value"); debug ("Valore di COMANDO"); debug ($ElementodiComando->value); if (intval($ElementodiComando->value)==0){ if (!empty($UscitaPreavvisata)) { $UscitaPreavvisata->refreshFromDb("value"); if ($UscitaPreavvisata->value != 0) objM::objPerformOperation($UscitaPreavvisata->id,"SETVALUE",0); } if (!empty($UscitaFissa)) { $UscitaFissa->refreshFromDb("value"); if ($UscitaFissa->value != 0) objM::objPerformOperation($UscitaFissa->id,"SETVALUE",0); } if (!empty($StatusObj)) objM::objPerformOperation($StatusObj->id,"SETVALUE",0); objM::objUpdateToDb($ElementodiComando->id,"value","0"); _output(); } $contatore2++; $contatore1++; } // Durata Lampeggio ON debug ("Lampeggio on"); if (!empty($UscitaPreavvisata)) objM::objPerformOperation($UscitaPreavvisata->id,"SETVALUE",1); $contatore2 = 0; while (($contatore2 < $pulseontime)&&($contatore1 < $preavviso)) { sleep(1); $ElementodiComando->refreshFromDb("value"); if (intval($ElementodiComando->value)==0){ if (!empty($UscitaPreavvisata)) { $UscitaPreavvisata->refreshFromDb("value"); if ($UscitaPreavvisata->value != 0) objM::objPerformOperation($UscitaPreavvisata->id,"SETVALUE",0); } if (!empty($UscitaFissa)) { $UscitaFissa->refreshFromDb("value"); if ($UscitaFissa->value != 0) objM::objPerformOperation($UscitaFissa->id,"SETVALUE",0); } if (!empty($StatusObj)) objM::objPerformOperation($StatusObj->id,"SETVALUE",0); objM::objUpdateToDb($ElementodiComando->id,"value","0"); _output(); } $contatore2++; $contatore1++; } } debug ("spengo"); if (!empty($UscitaPreavvisata)) objM::objPerformOperation($UscitaPreavvisata->id,"SETVALUE",0); if (!empty($UscitaFissa)) objM::objPerformOperation($UscitaFissa->id,"SETVALUE",0); if (!empty($StatusObj)) objM::objPerformOperation($StatusObj->id,"SETVALUE",0); objM::objUpdateToDb($ElementodiComando->id,"value","0"); |
Salvare mediante l'apposito pulsante SALVA.
Per ogni temporizzazione che si desidera creare, è necessario configurare un nuovo SCRIPT RUNNER nel seguente modo:
Selezionare la voce "RUNNERS" nella sezione "SCRIPTING" del menu di amministrazione
Creare un nuovo oggetto mediante il pulsante "AGGIUNGI" della TOOLBAR
Accedere alla scheda del nuovo oggetto tramite il pulsante "MODIFICA" della TOOLBAR
A questo punto inserire nella sezione "DATI GENERALI" un nome identificativo per il nuovo oggetto, e selezionare lo SCRIPT creato in precedenza nell'omonimo menu a tendina; lasciare inalterate le altre opzioni della sezione "ASPETTO".
Nella sezione "INGRESSI" trascinare l'oggetto di tipo ON/OFF che, quando va ad 1, avvia la temporizzazione; se questo oggetto va a 0 prima del termine della sequenza, essa viene arrestata e l'uscita spenta.
Nella sezione "USCITE" viceversa trascinare i seguenti oggetti, avendo cura di utilizzare l'identificativo relativo (caratteri tutti maiuscoli):
"STATUS": oggetto di stato, vale 0 a temporizzazione ferma, 1 durante l'attesa e 2 durante il preavviso (lampeggio)
"USCITAFISSA": uscita eventuale da tenere accesa fino alla fine della temporizzazione, anche durante il preavviso
"USCITAPREAVVISATA": uscita accesa durante l'attesa e lampeggiante durante il preavviso
"TEMPOPREAVVISO": tempo di preavviso complessivo (espresso in minuti)
"TEMPOACCENSIONE": tempo complessivo, comprensivo di attesa e preavviso (espresso in minuti)
"TIMEPULSEON": tempo di ON dell'uscita lampeggiante durante il preavviso, espresso in secondi
"TIMEPULSEOFF": tempo di OFF dell'uscita lampeggiante durante il preavviso, espresso in secondi
La figura seguente mostra un esempio di configurazione:
Nota: il nome degli oggetti non è significativo, essendo tratto dal progetto di esempio; l'importante è rispettare scrupolosamente le diciture del campo IDENTIFICATIVO.