

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Operazioni API MQTT del dispositivo dei processi
<a name="jobs-mqtt-api"></a><a name="jobs-mqtt-note"></a>

Puoi inviare i comandi del dispositivo di processi pubblicando i messaggi MQTT negli [Argomenti riservati utilizzati per i comandi Jobs](reserved-topics.md#reserved-topics-job). 

Il client lato dispositivo deve disporre della sottoscrizione agli argomenti del messaggio di risposta di questi comandi. Se si utilizza il AWS IoT Device Client, il dispositivo si iscriverà automaticamente agli argomenti di risposta. Il che significa che il broker di messaggi pubblica gli argomenti dei messaggi di risposta nel client che ha pubblicato il messaggio di comando, a prescindere che il client abbia effettuato la sottoscrizione agli argomenti del messaggio di risposta. Questi messaggi di risposta non passano attraverso il broker di messaggi e non possono essere sottoscritti da altri client o regole.

Durante la sottoscrizione agli argomenti di processo ed evento `jobExecution` per la tua soluzione di monitoraggio del parco istanze, per prima cosa abilita gli [eventi di processo e di esecuzione di processi](iot-events.md) per ricevere eventi sul lato cloud. Messaggi di avanzamento del processo che vengono elaborati tramite il broker di messaggi e possono essere utilizzati dalle regole di AWS IoT sono pubblicate come [Eventi del servizio Jobs](events-jobs.md). Poiché il broker di messaggi pubblica i messaggi di risposta, anche senza una sottoscrizione esplicita, il client deve essere configurato per ricevere e identificare i messaggi ricevuti. Il client deve inoltre confermare che l'argomento del messaggio {{thingName}} in arrivo si applichi al nome dell'oggetto del client prima che il client agisca sul messaggio.

**Nota**  
I messaggi AWS IoT inviati in risposta ai messaggi di comando dell'API MQTT Jobs vengono addebitati sul tuo account, indipendentemente dal fatto che tu li abbia sottoscritti in modo esplicito o meno.

Di seguito vengono illustrate le operazioni API MQTT e la relativa sintassi di richiesta e risposta. Tutte le operazioni API MQTT hanno i seguenti parametri:

clientToken  
Un token client opzionale utilizzato per mettere in relazione richieste e risposte. Inserisci un valore arbitrario, che viene riportato nella risposta.

`timestamp`  
Periodo di tempo, in secondi, dall'epoca all'invio del messaggio.

## GetPendingJobExecutions
<a name="mqtt-getpendingjobexecutions"></a>

Ottiene l'elenco di tutti i processi che non si trovano in uno stato terminale, per un oggetto specifico.

Per richiamare quest'API, pubblica un messaggio in `$aws/things/{{thingName}}/jobs/get`.

Payload della richiesta:

```
{ "clientToken": "string" }
```

Il broker dei messaggi pubblicherà `$aws/things/{{thingName}}/jobs/get/accepted` e `$aws/things/{{thingName}}/jobs/get/rejected` anche senza un abbonamento specifico. Tuttavia, affinché il client riceva i messaggi, deve essere in ascolto. Per ulteriori informazioni, consulta [la nota sui messaggi dell'API Jobs](#jobs-mqtt-note).

Payload della risposta:

```
{
"inProgressJobs" : [ JobExecutionSummary ... ], 
"queuedJobs" : [ JobExecutionSummary ... ],
"timestamp" : 1489096425069,
"clientToken" : "client-001"
}
```

Dove `inProgressJobs` e `queuedJobs` restituiscono un elenco di oggetti [JobExecutionSummary](jobs-mqtt-https-api.md#jobs-mqtt-job-execution-summary) che hanno lo stato `IN_PROGRESS` o `QUEUED`.

## StartNextPendingJobExecution
<a name="mqtt-startnextpendingjobexecution"></a>

Recupera e avvia la successiva esecuzione del processo in sospeso per un oggetto (stato `IN_PROGRESS` o `QUEUED`). 
+ Le esecuzioni di un processo con stato `IN_PROGRESS` vengono restituite per prime.
+ Le esecuzioni di un processo vengono restituite in base all'ordine di coda. Quando un elemento viene aggiunto o rimosso dal gruppo target per il tuo processo, conferma l'ordine di implementazione di eventuali nuove esecuzioni di processi rispetto alle esecuzioni di processi esistenti.
+ Se lo stato della successiva esecuzione del processo in sospeso è `QUEUED`, il relativo stato viene modificato in `IN_PROGRESS` e i dettagli dello stato dell'esecuzione del processo vengono impostati come specificato.
+ Se la successiva esecuzione del processo in sospeso è già nello stato `IN_PROGRESS`, i dettagli dello stato non vengono modificati.
+ Se non sono presenti esecuzioni in sospeso, la risposta non include il campo `execution`.
+ Facoltativamente, puoi creare un timer della fase impostando un valore per la proprietà `stepTimeoutInMinutes`. Se non aggiorni il valore di questa proprietà eseguendo `UpdateJobExecution`, il timeout dell'esecuzione del processo si verifica alla scadenza del timer della fase.

Per richiamare quest'API, pubblica un messaggio in `$aws/things/{{thingName}}/jobs/start-next`.

Payload della richiesta:

```
{ 
"statusDetails": {
    "string": "{{job-execution-state}}"
    ...
},
"stepTimeoutInMinutes": long,
"clientToken": "string"
}
```

`statusDetails`  
Raccolta di coppie nome-valore che descrivono lo stato dell'esecuzione del processo. Se non è specificato, `statusDetails` resta invariato.

`stepTimeOutInMinutes`  
Specifica l'intervallo di tempo a disposizione di ciascun dispositivo per terminare l'esecuzione di questo processo. Se lo stato di esecuzione del processo non è impostato su uno stato terminale prima del timeout o prima della reimpostazione del timer (chiamando `UpdateJobExecution`, impostando lo stato su `IN_PROGRESS` e specificando un nuovo valore di timeout nel campo `stepTimeoutInMinutes`), lo stato di esecuzione del processo viene impostato su `TIMED_OUT`. L'impostazione di questo timeout non ha alcun effetto sul timeout dell'esecuzione del processo, che potresti avere specificato al momento della creazione del processo (`CreateJob` utilizzando il campo `timeoutConfig`).   
I valori validi di questo parametro variano da 1 a 10080 (da 1 minuto a 7 giorni). Anche il valore -1 è valido e annullerà lo step timer corrente (creato da un uso precedente di). UpdateJobExecutionRequest

Il broker dei messaggi pubblicherà `$aws/things/{{thingName}}/jobs/start-next/accepted` e `$aws/things/{{thingName}}/jobs/start-next/rejected` anche senza un abbonamento specifico. Tuttavia, affinché il client riceva i messaggi, deve essere in ascolto. Per ulteriori informazioni, consulta [la nota sui messaggi dell'API Jobs](#jobs-mqtt-note).

Payload della risposta:

```
{
"execution" : JobExecutionData,
"timestamp" : timestamp,
"clientToken" : "string"
}
```

Dove `execution` è un oggetto [JobExecution](jobs-mqtt-https-api.md#jobs-mqtt-job-execution-data). Esempio:

```
{
"execution" : {
    "jobId" : "022",
    "thingName" : "MyThing",
    "jobDocument" : "< contents of job document >",
    "status" : "IN_PROGRESS",
    "queuedAt" : 1489096123309,
    "lastUpdatedAt" : 1489096123309,
    "versionNumber" : 1,
    "executionNumber" : 1234567890
},
"clientToken" : "client-1",
"timestamp" : 1489088524284,
}
```

## DescribeJobExecution
<a name="mqtt-describejobexecution"></a>

Ottiene informazioni dettagliate sull'esecuzione di un processo.

Puoi impostare `jobId` su `$next` per restituire la successiva esecuzione del processo in sospeso per un oggetto (stato `IN_PROGRESS` o `QUEUED`).

Per richiamare quest'API, pubblica un messaggio in `$aws/things/{{thingName}}/jobs/{{jobId}}/get`. 

Payload della richiesta:

```
{ 
"jobId" : "022",
"thingName" : "MyThing",
"executionNumber": long,
"includeJobDocument": boolean,
"clientToken": "string" 
}
```

`thingName`  
Nome dell'oggetto associato al dispositivo.

`jobId`  
Identificatore univoco assegnato al processo al momento della creazione.   
In alternativa, utilizza `$next` per restituire la successiva esecuzione del processo in sospeso per un oggetto (stato `IN_PROGRESS` o `QUEUED`). In questo caso, le esecuzioni del processo con stato `IN_PROGRESS` vengono restituite per prime. Le esecuzioni di un processo vengono restituite in base all'ordine di creazione.

`executionNumber`  
(Facoltativo) Numero che identifica l'esecuzione di un processo in un dispositivo. Se non è specificato, viene restituita l'ultima esecuzione del processo.

`includeJobDocument`  
(Facoltativo) A meno che non sia impostato su `false`, la risposta contiene il documento del processo. Il valore predefinito è `true`.

Il broker dei messaggi pubblicherà `$aws/things/{{thingName}}/jobs/{{jobId}}/get/accepted` e `$aws/things/{{thingName}}/jobs/{{jobId}}/get/rejected` anche senza un abbonamento specifico. Tuttavia, affinché il client riceva i messaggi, deve essere in ascolto. Per ulteriori informazioni, consulta [la nota sui messaggi dell'API Jobs](#jobs-mqtt-note).

Payload della risposta:

```
{
"execution" : JobExecutionData,
"timestamp": "timestamp",
"clientToken": "string"
}
```

Dove `execution` è un oggetto [JobExecution](jobs-mqtt-https-api.md#jobs-mqtt-job-execution-data).

## UpdateJobExecution
<a name="mqtt-updatejobexecution"></a>

Aggiorna lo stato dell'esecuzione di un processo. Se lo desideri, puoi creare un timer della fase impostando un valore per la proprietà `stepTimeoutInMinutes`. Se non aggiorni il valore di questa proprietà eseguendo nuovamente `UpdateJobExecution`, il timeout dell'esecuzione del processo si verifica alla scadenza del timer della fase.

Per richiamare quest'API, pubblica un messaggio in `$aws/things/{{thingName}}/jobs/{{jobId}}/update`. 

Payload della richiesta:

```
{
"status": "{{job-execution-state}}",
"statusDetails": { 
    "string": "string"
    ...
},
"expectedVersion": "number",
"executionNumber": long,
"includeJobExecutionState": boolean,
"includeJobDocument": boolean,
"stepTimeoutInMinutes": long,
"clientToken": "string"
}
```

`status`  
Il nuovo stato per l'esecuzione del processo (`IN_PROGRESS`, `FAILED`, `SUCCEEDED` o `REJECTED`). Questo valore deve essere specificato per ogni aggiornamento.

`statusDetails`  
Raccolta di coppie nome-valore che descrivono lo stato dell'esecuzione del processo. Se non è specificato, `statusDetails` resta invariato.

`expectedVersion`  
Versione corrente prevista dell'esecuzione del processo. Ogni volta che aggiorni l'esecuzione del processo, la versione viene incrementata. Se la versione dell'esecuzione del lavoro memorizzata nel servizio AWS IoT Jobs non corrisponde, l'aggiornamento viene rifiutato con un `VersionMismatch` errore. Viene restituito anche un file [ErrorResponse](jobs-api.md#jobs-mqtt-error-response) contenente i dati sullo stato di esecuzione del processo attuale. Questo comportamento rende inutile una richiesta `DescribeJobExecution` separata per ottenere i dati sullo stato dell'esecuzione del processo.

`executionNumber`  
(Facoltativo) Numero che identifica l'esecuzione di un processo in un dispositivo. Se non è specificato, viene usata l'ultima esecuzione del processo.

`includeJobExecutionState`  
(Facoltativo) Quando è incluso e impostato su `true`, la risposta contiene il campo `JobExecutionState`. Il valore predefinito è `false`.

`includeJobDocument`  
(Facoltativo) Quando è incluso e impostato su `true`, la risposta contiene `JobDocument`. Il valore predefinito è `false`.

`stepTimeoutInMinutes`  
Specifica l'intervallo di tempo a disposizione di ciascun dispositivo per terminare l'esecuzione di questo processo. Lo stato di esecuzione del processo è impostato su `TIMED_OUT`, a meno che non venga impostato su uno stato terminale prima del timeout o prima che il timer venga reimpostato. L'impostazione o la reimpostazione di questo timeout non ha alcun effetto su quello dell'esecuzione del processo che potresti avere specificato al momento della creazione del processo. 

Il broker dei messaggi pubblicherà `$aws/things/{{thingName}}/jobs/{{jobId}}/update/accepted` e `$aws/things/{{thingName}}/jobs/{{jobId}}/update/rejected` anche senza un abbonamento specifico. Tuttavia, affinché il client riceva i messaggi, deve essere in ascolto. Per ulteriori informazioni, consulta [la nota sui messaggi dell'API Jobs](#jobs-mqtt-note).

Payload della risposta:

```
{
"executionState": JobExecutionState,
"jobDocument": "string",
"timestamp": timestamp,
"clientToken": "string"
}
```

`executionState`  
Oggetto [JobExecutionState](jobs-mqtt-https-api.md#jobs-mqtt-job-execution-state).

`jobDocument`  
Un oggetto [documento del processo](key-concepts-jobs.md).  
Nelle risposte MQTT, il `jobDocument` campo è un oggetto JSON. Nelle risposte HTTP, è una rappresentazione in formato stringa dell'oggetto JSON.

`timestamp`  
Periodo di tempo, in secondi, dall'epoca all'invio del messaggio.

`clientToken`  
Token client usato per mettere in relazione richieste e risposte.

Quando si utilizza il protocollo MQTT, è anche possibile eseguire i seguenti aggiornamenti:

## JobExecutionsChanged
<a name="mqtt-jobexecutionschanged"></a>

Inviato ogni volta che un'esecuzione di un processo viene aggiunta o rimossa dall'elenco di esecuzioni del processo in sospeso per un oggetto.

Utilizza l'argomento :

`$aws/things/{{thingName}}/jobs/notify`

Payload del messaggio:

```
{
"jobs" : {
    "JobExecutionState": [ [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummary.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecutionSummary.html) ... ]
         },
    "timestamp": timestamp
}
```

## NextJobExecutionChanged
<a name="mqtt-nextjobexecutionchanged"></a>

Inviato ogni volta che c'è una modifica a cui segue l'esecuzione del processo nell'elenco delle esecuzioni di processi in sospeso per qualcosa, come definito per [https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeJobExecution.html) `jobId` con `$next`. Questo messaggio non viene inviato quando cambiano i dettagli della successiva esecuzione del processo, ma solo quando cambia il processo successivo che verrebbe restituito da `DescribeJobExecution` con `jobId` `$next`. Considera le esecuzioni di processo J1 e J2 con stato `QUEUED`. J1 è l'esecuzione successiva nell'elenco di esecuzioni del processo in sospeso. Se lo stato di J2 viene modificato in `IN_PROGRESS`, mentre lo stato di J1 rimane invariato, questa notifica viene inviata e contiene i dettagli di J2.

Utilizza l'argomento :

`$aws/things/{{thingName}}/jobs/notify-next`

Payload del messaggio:

```
{
"execution" : [https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_JobExecution.html),
"timestamp": timestamp,
}
```