eMarco / smart-city-water-orchestrator

GNU General Public License v3.0
0 stars 0 forks source link

[EJB] Mqtt client #2

Open aleskandro opened 6 years ago

aleskandro commented 6 years ago

EJB Singleton, istanziato allo startup.

https://www.eclipse.org/paho/clients/java/

Topic:

In futuro per la seconda iterazione

E' un publisher per /actuators/* : viene triggerato dall'ejb orchestrator.

E' un listener per /sensors/* : primo test, alla ricezione la callback fa solo stampa su schermo; appena sara' pronto l'EJB Monitor lo chiamera' per salvare i dati.

Espone un metodo pubblico


void publish(String topic, float val)

con topic che e' il sottopattern a partire dai comuni: si pubblisca su:

"/actuators/zones" + topic
aleskandro commented 6 years ago
                 MQTT
                  |
           /            \  
         /                \
       /                    \
     /                        \ 
 subscribe                  publish
      |
 1) sub. @init              1) Actuator @ ActuatorSessionBean #4
 2) arr. handling           2) Publishing di genericvalue con reflection

4

aleskandro commented 6 years ago

Ordine dei payload per sensori a attuatori delle vasche

ogni vasca pubblica periodicamente un messaggio con il seguente payload

1

aleskandro commented 6 years ago

@eMarco da discussione su skype con @CursedLondor abbiamo deciso il payload ottimale per la comunicazione verso/da java. Speriamo che in matlab questo sia possibile, ovvero concatenare in quell'ordine quei valori della singola vasca

1

eMarco commented 6 years ago
eMarco commented 6 years ago

Append al payload della vasca:

aleskandro commented 6 years ago

In base a cio' che abbiamo fatto ieri nel modello e al doc iniziale, nell'applicazione ho aggiunto:

  1. prende le ultime letture dei settori
  2. fa la differenza sector.flowRate - sector.CountedFlowrate per ogni sector
  3. se la differenza per un settore e' > dell'errore (ho usato flowRateError() che non usavamo piu', ma bisogna metterci sempre il valore corretto) stacca il trigger della settore.

La pubblicazione (orchestrator => simulink), come sopra, avviene su /actuators/zones/${i}/sectors/${j}

La lettura (simulink => orchestrator), per come modificato nei giorni scorsi dovrebbe avvenire su /sensors/zones/${i}/sectors/${j}/

Il problema e' che: ogni vasca potrebbe avere piu' settori, quindi ogni settore dovrebbe avere un trigger e un amperometro PRIMA del parallelo perdita-utilizzatore.

TODO: sistemare il modello per avere l'amperometro e il trigger prima del parallelo. #1 (Done)

TODO2: nel MQTTClient java, la lettura del settore sul path sopra, deve creare un Sector e fare put come per il tank su MonitorSessionBean

aleskandro commented 6 years ago

Il modello del settore e' costituito dai seguenti field:

TODO3: mandare email se avviene perdita #6 (Done)