Comandi

Per creare un nuovo comando sono possibili due soluzioni: realizzare uno specifico file xml da collocare nella cartella FREEDOMOTIC_ROOT/data/cmd oppure utilizzare l’EventEditor plugin. La prima é adatta ai programmatori in quanto garantisce il pieno controllo dei valori, l’altra é più user-friendly ma ancora in fase di sviluppo.

Un comando non é altro che un contenitore di parametri personalizzati nella forma parameter = value. I parametri standard sono name, description e receiver necessari per garantire il corretto instradamento del comando verso l’attuatore che dovrà eseguirlo.

Alcuni comandi sono creati a runtime così come i sensori generano eventi, altri invece sono “progettati” direttamente dagli utenti.

Parametri comuni

Sono obbligatori in tutti i comandi di Freedomotic

Campo Descrizione
name una breve stringa che descrive l’effetto prodotto dal comando (ad esempio: accendi luce nella cucina)
description una descrizione più dettagliata del comando. Si consiglia di utilizzare il formato “SE un evento SI VERIFICA ALLORA IL SISTEMA ….
receiver il Channel (canale) su cui il plugin é in ascolto
delay non ancora implementato, lasciare il valore a 0

Esempi

Turn on object named “livingroom light” (Accendi un oggetto chiamato “luce salotto”)

<command>
  <name>Turn on livingroom light</name>
  <receiver>app.events.sensors.behavior.request.objects</receiver>
  <description>turns on an object called livingroom light</description>
  <editable>true</editable>
  <properties>
    <properties>
      <property name="behavior" value="powered"/>
      <property name="value" value="true"/>
      <property name="object" value="Livingroom light"/>
    </properties>
    <tuples/>
  </properties>
</command>

Switch power of all Light type objects in the environment (Cambia lo stato di tutte le luci nell’ambiente)

<command>
  <name>switch power for all lights</name>
  <receiver>app.events.sensors.behavior.request.objects</receiver>
  <description>switch power for all lights</description>
  <editable>true</editable>
  <properties>
    <properties>
      <property name="behavior" value="powered"/>
      <property name="value" value="opposite"/>
      <property name="object.class" value="EnvObject.ElectricDevice.Light"/>
    </properties>
    <tuples/>
  </properties>
</command>

Increase brightness (one step) of all Light type objects in the environment (Incrementa la luminosità di tutte le luci nell’ambiente)

<it.freedomotic.reactions.Command>
  <name>Increase lights brightness</name>
  <receiver>app.events.sensors.behavior.request.objects</receiver>
  <description>increases light brightness</description>
  <editable>true</editable>
  <properties>
    <properties>
      <property name="behavior" value="brightness"/>
      <property name="value" value="next"/>
      <property name="object.class" value="EnvObject.ElectricDevice.Light"/>
    </properties>
    <tuples/>
  </properties>
</it.freedomotic.reactions.Command>

Decrease brightness (one step) of all Light type objects in the environment (Decrementa la luminosità di tutti gli oggetti nell’ambiente)

<command>
  <name>Decrease lights brightness</name>
  <receiver>app.events.sensors.behavior.request.objects</receiver>
  <description>decreases lights brightness</description>
  <editable>true</editable>
  <properties>
    <properties>
      <property name="behavior" value="brightness"/>
      <property name="value" value="previous"/>
      <property name="object.class" value="EnvObject.ElectricDevice.Light"/>
    </properties>
    <tuples/>
  </properties>
</command>

Parametri personalizzati

Si presentano nella forma chiave/valore e non hanno particolari limitazioni. Ciò rende il sistema altamente configurabile e facilmente integrabile con client esterni sviluppati con qualsiasi linguaggio di programmazione.

La lista dei parametri accettati da uno dei plugin ufficiali é elencata nella relativa pagina del marketplace.

I parametri sono definiti all’interno di un blocco <properties></properties> nella forma <property name="nomeParametro" value="valoreParametro"/>.

<properties>
  <properties>
    <property name="param1" value="value 1"/>
    <property name="param2" value="value 2"/>
    <property name="param3" value="value 3"/>
  </properties>
</properties>

In alcuni casi, se il numero dei parametri é variabile, é possibile elencarli usando la parola “parameter” come prefisso seguito da un numero progressivo compreso tra parentesi quadre.

<properties>
  <properties>
    <property name="parameter[INTERO_DA_0_A_999]" value="aStringValue"/>
  </properties>
</properties>

Per recuperare la lista dei parametri basta utilizzare il seguente metodo

ArrayList<String> myParams = c.getParametersAsList();

Viene creata una lista ordinata leggendo le proprietà contenute nel file e scritte nel formato descritto in precedenza. Altri formati non sono presi in considerazione. Gli indici devono essere contigui  (1,2,3,…).

Per esempio nel comando:

parameter[0] = foo
parameter[1] = bar
parameter[3] = asd
object = Light 1
another-param = myValue

l’ ArrayList<String> restituito é

[0]->foo
[1]->bar
[3]->asd // in quanto non é presente l'indice = 2.

Creare i file dei comandi

I file corrispondenti ai comandi hanno estensione .xcmd e sono contenuti nella cartella FREEDOMOTIC/data/cmd. Si consiglia di attribuire dei nomi significativi per rendere più semplice la loro individuazione.

Ad esempio

<command>
  <name>Show Surveillance Camera</name>
  <receiver>app.actuators.video.player.in</receiver>
  <delay>0</delay>
  <description>shows the video streamed by the surveillance camera in the entrance</description>
  <properties>
    <properties>
      <property name="url" value="http://213.192.14.189/axis-cgi/mjpg/video.cgi?resolution=320x240"/>
    </properties>
  </properties>
</command>

Nel seguente esempio, utilizzando i valori recuperati dall’evento, questo comando invia i parametri address, object, behavior e command ad un attuatore per il protocollo X10. I valori possono essere referenziati con @event. prefix, ovvero ciascuno di essi corrisponde a quello incapsulato nell’evento e catturato dal trigger.

<command>
  <name>Turn this X10 device to ON</name>
  <receiver>app.actuators.X10.X10Actuator.in</receiver>
  <delay>0</delay>
  <description>the system turns this device ON</description>
  <properties>
    <properties>
      <property name="address" value="@event.device"/>
      <property name="object" value="@event.device"/>
      <property name="behavior" value="On"/>
      <property name="command" value="@event.command"/>
    </properties>
  </properties>
</command>

Parametri riservati

Alcuni parametri sono riservati e non possono essere utilizzati per memorizzare valori differenti.

Parametro Descrizione
result utilizzato dall’attuatore per memorizzare il valore di ritorno della sua esecuzione come un codice di errore
object identifica l’oggetto interessato dal comando (es. Light 1)
behavior identifica il nuovo stato dell’oggetto se il comando viene eseguito con successo (es. ON)
stopIf identifica il valore che interrompe l’esecuzione di una lista di comandi

Command Scripting

All’interno dei parametri é possibile utilizzare un linguaggio di scripting con una sintassi simile a quella di javascript:

<command>
  <name>Say the current temperature converted in fahrenheit</name>
  <receiver>app.actuators.media.tts.in</receiver>
  <delay>0</delay>
  <timeout>2000</timeout>
  <description>say the current temperature using TTS engine</description>
  <hardwareLevel>false</hardwareLevel>
  <persistence>true</persistence>
  <executed>false</executed>
  <properties>
    <properties>
      <property name="say" value="= say="The current temperature in @event.zone is " + Math.round(((@event.temperature+40)*1.8)-40) + " fahrenheit degrees. In celsius is @event.temperature degrees"/>
    </properties>
    <tuples/>
  </properties>
</command>

Il precedente comando utilizza il text-to-speech per pronunciare la temperatura corrente di una zona effettuando in tempo reale la conversione da gradi Celsius a Fahrenheit. Per utilizzare il linguaggio di scripting con un valore quest’ultimo deve essere preceduto dal simbolo “=” (così come per le formule in Excel).

Altri esempi:

<property name="myVar" value="= myVar=0; for (i=0; i<10; i++) myVar+=i;"/> //somma i primi 10 interi e memorizza il valore nella property myVar
<property name="myVar" value="= if (1==1)  myVar=1; else myVar="AREYOUJOKING?";"/> 
<property name="myVar" value="= myVar=!@event.object.powered;"/> // nega il valore powered di un oggetto

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi