Trigger

Un trigger é un filtro in grado di intercettare gli eventi su un canale e di effettuare dei controlli sui valori ad essi associati.

Per esempio supponiamo che un evento notifichi che sono le ore 10 e che un trigger sia in ascolto sul corrispondente canale filtrando gli eventi temporali compresi tra le ore 7 e le ore 13. Possiamo attribuire a questo trigger un nome significativo del tipo “é giorno” ed utilizzarlo per costruire automazioni

IF “é giorno” THEN “spegni le luci esterne”

Quindi un trigger serve a decidere se un evento deve essere processato o meno.  Nel primo caso se il trigger é consistente con la sua definizione verranno eseguiti i comandi ad esso associati. Tornando all’esempio precedente, se l’evento notifica che “sono le ore 10” allora é vero che “é giorno“, quindi possiamo eseguire il comando “spegni le luci esterne“.

In questo breve tutorial illustriamo la creazione manuale dei trigger in formato XML ma l’utente finale può definirli utilizzando un comodo editor grafico senza dover modificare alcun file.

Come intercettare un evento

Gli eventi possono essere intercettati usando i trigger posti in “ascolto” sul relativo canale. Per esempio l’evento PersonMoving (che notifica il movimento di una persona all’interno di un ambiente) é pubblicato sul canale app.event.sensor.person.movement.moving per cui il trigger dovrà porsi in ascolto proprio su questo canale.

Un esempio XML

Questo trigger filtra gli eventi PersonExitZone ovvero quando una persona esce da una zona predefinita. In questo caso il trigger scatta esclusivamente se l’evento é relativo alla “zona cucina” qualunque sia l’ID della persona (ANY person). Se il trigger é consistente con l’evento i verranno eseguiti i comandi eventualmente definiti in un’automazione.

<trigger>
    <name>Someone Exits from Kitchen</name>
    <description>When someone exits from kitchen area</description>
    <channel>app.event.person.zone</channel>
    <payload>
        <payload>
            <statement>
                <logical>AND</logical>
                <attribute>zone</attribute>
                <operand>EQUAL</operand>
                <value>Kitchen</value>
            </statement>
            <statement>
                <logical>AND</logical>
                <attribute>person</attribute>
                <operand>EQUAL</operand>
                <value>ANY</value>
            </statement>
            <statement>
                <logical>AND</logical>
                <attribute>action</attribute>
                <operand>EQUAL</operand>
                <value>exit</value>
            </statement>
        </payload>
    </payload>
    <delay>0</delay>
</trigger>

Come filtrare i parametri di un evento

Come abbiamo detto in precedenza, un trigger é filtro di eventi in grado di leggerne i parametri e filtrarli opportunamente in base alle regole definite al suo interno. Queste ultime vengono definire Statement e sono costituite da un connettivo logico, un attributo, un operando e un valore.

Il canale su cui “ascoltare” gli eventi va specificato nel tag <channel> </channel> .

  • connettore logico: utilizzato per concatenare le varie condizioni presenti. Per default si tratta della congiunzione (AND).
  • attributo: indica il nome di una proprietà presente nell’evento di cui si desidera valutare il valore.
  • operando: può essere EQUAL, REGEX, GREATER_THAN o LESS_THAN. E’ utilizzato per correlare l’attributo e il suo valore.
  • valore: consiste in una stringa o un intero. In alternativa con “ANY” si considerano tutti i possibili valori.

Numero massimo di esecuzioni

Ogni trigger ha un parametro max-executions che definisce il numero massimo di esecuzioni dello stesso e viene azzerato all’avvio di Freedomotic. Se il valore é -1 non é previsto alcun limite.

Un’altra proprietà é suspension-time che definisce un intervallo di sospensione (in millisecondi) del trigger dopo la sua esecuzione. In altri termini il trigger non potrà “scattare” nuovamente finché non sia trascorso il tempo di sospensione previsto. Per default questo valore é impostato a 100 ms ma può essere ulteriormente ridotto o incrementato.

Trigger scripting

Esempio

https://github.com/freedomotic/freedomotic/blob/master/framework/freedomotic-core/src/test/java/com/freedomotic/core/ResolverTest.java

 

Predisposizone di un trigger

I trigger sono collocati nella cartella CARTELLA_FREEDOMOTIC/data/trg, hanno estensione .xtrg e sono caricati automaticamente all’avvio di Freedomotic.

Esempi

Un oggetto di tipi ElectricDevice é cliccato

<trigger>
  <name>When an electric device is clicked</name>
  <description>When an electric device is clicked</description>
  <channel>app.event.sensor.object.behavior.clicked</channel>
  <payload>
    <payload>
      <tatement>
        <logical>AND</logical>
        <attribute>object.type</attribute>
        <operand>REGEX</operand>
        <value>^EnvObject.ElectricDevice\.(.*)</value>
      </statement>
      <statement>
        <logical>AND</logical>
        <attribute>click</attribute>
        <operand>EQUALS</operand>
        <value>SINGLE_CLICK</value>
      </statement>
    </payload>
  </payload>
  <persistence>true</persistence>
</trigger>

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