Albi device shadows
Documentation for Albi Shadow Communications
1. Definizione topic e shadow
La creazione delle shadow avviene in modo contestuale alla creazione della thing associata al dispositivo. Le shadow sono le seguenti:
- Device shadow (device)
- Config shadow (config)
- Smart Bag shadow (bag)
1.1. Device Shadow
La device shadow contiene tutti i dati del dispositivo di cui l'applicazione necessita e le impostazioni modificabili dall'utente.
MQTT TOPIC PREFIX: $aws/things/<thingname>/shadow/name/device
Default:
1.2. Config Shadow
La config shadow contiene tutti i parametri di configurazione del dispositivo che permettono ad Albicchiere di modificarne il comportamento.
MQTT TOPIC PREFIX: $aws/things/<thingname>/shadow/name/config
Default:
1.3. Smart Bag Shadow
Contiene i dati della bag inserita all'interno del dispenser.
MQTT TOPIC PREFIX: $aws/things/<thingname>/shadow/name/bag
Oppure:
Default:
1.4. Metrics Topic
Manda le grandezze che identificano lo stato del dispositivo periodicamente (intervallo definito nella Config Shadow).
MQTT TOPIC: /dispenser/<thingname>/metrics
1.5. Logs (Errori, log e warning) Topic
Manda warning ed errori o log significativi.
MQTT TOPIC: /dispenser/<thingname>/logs
| Code | Description | Params | Params Description | Screen |
|---|---|---|---|---|
| W01 | Serving temperature out of range | temperature | Serving temperature | X12 |
| W02 | Battery level below 20% | level | Battery level | X13 |
| W03 | No bag inside | --- | --- | X14 |
| W04 | No socket connection | --- | --- | X16 |
| W05 | Vacuum error | bagSerial | Bag serial | X9.4 |
| E01 | Ambient temperature out of range | temperature | Ambient temperature | X15 |
| E02 | Cooling system error | --- | --- | X21 |
| E03 | Serving error | bagSerial | Bag serial | X18 |
| E04 | Sensor error | --- | --- | X19 |
| E05 | Wine temperature out of range | temperature | Wine temperature | X20 |
| E06 | Heatsink temperature out of range | temperature | Heatsink temperature | X21 |
| E07 | No battery detected | --- | --- | --- |
| L01 | Pouring | bagSerial, temperature1, temperature2, quantity | Bag serial, Serving temperature, Ambient Temperature, Taste or Drink | --- |
| L02 | Wine ready | bagSerial, temperature, quantity | Bag serial, Wine temperature, Quantity left | --- |
| L03 | Factory reset | --- | --- | X0.4 |
| L04 | Parental control (device) | --- | --- | X10.1 |
| L05 | Parental control (smartBag) | bagSerial | --- | X10.2 |
2. Definizione azioni
Azioni inviate dall'app Albicchiere (app-->backend-->dispenser)
| Sez. | Action | TOPIC GET | TOPIC UPDATE |
|---|---|---|---|
| 2.1 | activateDispenser | action | action_ack |
| 2.2 | setCoolingMode | device shadow | device shadow |
| 2.3 | toggleParentalControl | device shadow | device shadow |
| 2.4 | factoryReset | device shadow | device shadow |
| 2.5 | setSchedule | device shadow | device shadow |
| 2.6 | pourWine | action | action_ack |
| 2.7 | startVacuumBag | action | action_ack |
| 2.8 | setServingTemperature | bag shadow | bag shadow |
Azioni dispenser (dispenser-->backend)
| Sez. | Azione | TOPIC GET | TOPIC UPDATE |
|---|---|---|---|
| 2.9 | bagNFCRead | bag shadow | bag shadow |
| 2.10 | factoryReset | device shadow | device shadow |
| 2.11 | wineReady | device shadow | device shadow |
| 2.12 | vintageLabel | getImageLabel | action_ack |
2.1. Activate Dispenser
Durante il processo di pairing, dopo la connessione ad internet il Dispenser rimane in ascolto sul topic in attesa dell'avvenuta associazione.
MQTT TOPIC: /dispenser/<thingname>/action
Il Dispenser invia conferma di completamento del job al topic /dispenser/<thingname>/action_ack
2.2. Cooling mode
Backend aggiorna lo stato del nuovo coolingMode aggiornando la device shadow.
MQTT TOPIC: $aws/things/<thingname>/shadow/name/device/update
2.3. Parental Control
Backend aggiorna lo stato del nuovo parentalControl aggiornando la device shadow.
MQTT TOPIC: $aws/things/<thingname>/shadow/name/device/update
2.4. Factory Reset
-
Backendcancella il campoownerIdaggiornando la device shadow.MQTT TOPIC:
$aws/things/<thingname>/shadow/name/device/update -
Dispenseraggiorna statoreported, resetta la configurazionee va in pairing mode.
2.5. Schedule
Backend aggiorna il timestamp di raggiungimento della temperatura di servizio.
MQTT TOPIC: $aws/things/<thingname>/shadow/name/device/update
Al momento specificato nel Timestamp, il dispenser reimposta il serviceSchedule al valore iniziale: "" e imposta wineReadyAt a tale data:
MQTT TOPIC: $aws/things/<thingname>/shadow/name/device/update
2.5.1. Remove Schedule
Backend reimposta il timestamp al valore iniziale: "".
MQTT TOPIC: $aws/things/<thingname>/shadow/name/device/update
2.6. Pour Wine
Backend invia job al dispenser per servire un bicchiere di vino in quantità taste o drink (vedi esempi di seguito)
MQTT TOPIC: /dispenser/<thingname>/action
-
Dispenseresegue il flusso di erogazione vino. -
Dispenseraggiorna il numero di bicchieri rimasti nella Smart Bag shadow (drink=125ml, taste=62.5ml). -
Dispenserinvia conferma di completamento del job.MQTT TOPIC:
/dispenser/<thingname>/action_ack -
Dispenserinvia log con dati di erogazione.MQTT TOPIC:
/dispenser/<thingname>/logs
2.6.1. Esempio Pour Drink
2.6.2. Esempio Pour Taste
2.7. Vacuum bag
-
Backendinvia job per la funzione vacuum bag.MQTT TOPIC:
/dispenser/<thingname>/action -
Dispenserinvia conferma di completamento del job.MQTT TOPIC:
/dispenser/<thingname>/action_ack
2.8. Temperatura di servizio
-
Backendaggiorna lo stato del nuovocustomTemperatureaggiornando la bag shadow.MQTT TOPIC:
$aws/things/<thingname>/shadow/name/bag/update -
Dispensereffettua un nuovo calcolo del tempo necessario dalle tabelle usando come dati quelli usati precedentemente (Twine, Tambient e coolingMode):- se il nuovo t* è maggiore di quello precedente, allunga il tempo necessario e aggiorna il tempo a cui il vino sarà pronto;
- se il nuovo t* è minore di quello precedente ma maggiore di quello trascorso, accorcia il tempo necessario e aggiorna il tempo a cui il vino sarà pronto;
- in TUTTI gli altri casi la modifica avrà effetto dal raffreddamento successivo.
MQTT TOPIC:
$aws/things/<thingname>/shadow/name/device/update
2.9. Lettura info Smart Bag
-
**
Dispenser**comunica al backend il seriale della nuova smart bag inserita e resetta i valori della shadow.MQTT TOPIC:
$aws/things/<thingname>/shadow/name/bag/update -
Backendrisponde con i dati della smart bag da salvare in memoria del dispenser.Oppure:
-
Dispenseraggiorna la shadow con i dati aggiornati.MQTT TOPIC:
$aws/things/<thingname>/shadow/name/bag/updateOppure:
2.10. Factory Reset
-
Dispensercancella il campoownerIdaggiornando la device shadow.MQTT TOPIC:
$aws/things/<thingname>/shadow/name/device/update -
Dispenserresetta la configurazione e va in pairing mode.
2.11. Vino pronto
Dispenser comunica la data alla quale il vino sarà pronto aggiornando la device shadow.
MQTT TOPIC: $aws/things/<thingname>/shadow/name/device/update
2.12. Immagine Etichetta
L’immagine ha risoluzione 272x480 nel formato jpeg.
-
Dispenser effettua una prima publish sul topic con il seguente payload:
MQTT TOPIC:
/dispenser/<thingname>/getimagelabel -
Backend restituisce la lunghezza totale del buffer con il seguente payload:
MQTT TOPIC:
/dispenser/<thingname>/imagelabelbuffer -
Dispenser calcola il numero di pacchetti necessari e chiede il primo chunk con il seguente payload:
MQTT TOPIC:
/dispenser/<thingname>/getimagelabel -
Backend restituisce la porzione di byte richiesti a partire da startByte per la lunghezza di lengthBuffer con il seguente payload:
MQTT TOPIC:
/dispenser/<thingname>/imagelabelbufferrawbyte sono i byte dell’immagine nell’intervallo startByte e lengthBuffer in formato
base64 -
Dispenser continua ad effettuare chiamate sul topic incrementando il campo startByte in modo da scaricare tutti i pacchetti successivi.
MQTT TOPIC:
/dispenser/<thingname>/getimagelabel -
Dispenser visualizza l'etichetta scaricata.