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à.
SDK per dispositivi AWS IoT Utilizzatelo per comunicare con il nucleo Greengrass, gli altri componenti e AWS IoT Core
I componenti in esecuzione sul dispositivo principale possono utilizzare la libreria AWS IoT Greengrass Core interprocess communication (IPC) SDK per dispositivi AWS IoT per comunicare con il AWS IoT Greengrass nucleus e altri componenti Greengrass. Per sviluppare ed eseguire componenti personalizzati che utilizzanoIPC, è necessario utilizzare il servizio Core SDK per dispositivi AWS IoT per connettersi al IPC servizio AWS IoT Greengrass Core ed eseguire operazioni. IPC
L'IPCinterfaccia supporta due tipi di operazioni:
-
Richiesta/risposta
I componenti inviano una richiesta al IPC servizio e ricevono una risposta che contiene il risultato della richiesta.
-
Subscription
I componenti inviano una richiesta di abbonamento al IPC servizio e prevedono un flusso di messaggi relativi agli eventi in risposta. I componenti forniscono un gestore di sottoscrizioni che gestisce i messaggi di eventi, gli errori e la chiusura degli stream. SDK per dispositivi AWS IoT Include un'interfaccia di gestione con la risposta e i tipi di eventi corretti per ogni IPC operazione. Per ulteriori informazioni, consulta Sottoscrivi agli stream di IPC eventi.
Argomenti
- IPCversioni client
- Supportato SDKs per la comunicazione tra processi
- Connect al IPC servizio AWS IoT Greengrass Core
- Autorizza i componenti a eseguire operazioni IPC
- Sottoscrivi agli stream di IPC eventi
- IPCmigliori pratiche
- Pubblicare/sottoscrivere messaggi locali
- AWS IoT Core MQTTPubblicare/sottoscrivere messaggi
- Interagisci con il ciclo di vita dei componenti
- Interazione con la configurazione dei componenti
- Recupera valori segreti
- Interagisci con le ombre locali
- Gestisci le implementazioni e i componenti locali
- Autentica e autorizza i dispositivi client
IPCversioni client
Nelle versioni successive di Java e PythonSDKs, AWS IoT Greengrass fornisce una versione migliorata del IPC client, chiamata IPC client V2. IPCcliente V2:
-
Riduce la quantità di codice da scrivere per utilizzare IPC le operazioni e aiuta a evitare gli errori comuni che possono verificarsi con IPC il client V1.
-
Richiama i callback del gestore delle sottoscrizioni in un thread separato, quindi ora puoi eseguire il codice di blocco, incluse le chiamate a IPC funzioni aggiuntive, nei callback del gestore delle sottoscrizioni. IPCil client V1 utilizza lo stesso thread per comunicare con il IPC server e chiamare i callback del gestore delle sottoscrizioni.
-
Consente di chiamare le operazioni di sottoscrizione utilizzando espressioni Lambda (Java) o funzioni (Python). IPCil client V1 richiede la definizione di classi di gestione delle sottoscrizioni.
-
Fornisce versioni sincrone e asincrone di ogni operazione. IPC IPCil client V1 fornisce solo versioni asincrone di ogni operazione.
Si consiglia di utilizzare il IPC client V2 per sfruttare questi miglioramenti. Tuttavia, molti esempi in questa documentazione e in alcuni contenuti online dimostrano solo come utilizzare il IPC client V1. È possibile utilizzare i seguenti esempi e tutorial per visualizzare componenti di esempio che utilizzano IPC il client V2:
Attualmente, SDK per dispositivi AWS IoT for C++ v2 supporta solo il IPC client V1.
Supportato SDKs per la comunicazione tra processi
Le IPC librerie AWS IoT Greengrass Core sono incluse nelle seguenti SDK per dispositivi AWS IoT versioni.
SDK | Versione minima | Utilizzo |
---|---|---|
v1.6.0 |
Consulta la sezione Utilizzare SDK per dispositivi AWS IoT per Java v2 (IPCclient V2) |
|
v1.9.0 |
Consulta la sezione Uso SDK per dispositivi AWS IoT per Python v2 (client V2) IPC |
|
v1.17.0 |
Consulta la sezione Utilizzare SDK per dispositivi AWS IoT per C++ v2 |
|
v1.12.0 |
Consulta la sezione Usa SDK per dispositivi AWS IoT per JavaScript v2 (IPCclient V1) |
Connect al IPC servizio AWS IoT Greengrass Core
Per utilizzare la comunicazione tra processi nel componente personalizzato, è necessario creare una connessione a un socket IPC del server eseguito dal software AWS IoT Greengrass Core. Completate le seguenti attività per scaricarlo e utilizzarlo SDK per dispositivi AWS IoT nella lingua di vostra scelta.
Per utilizzare il SDK per dispositivi AWS IoT per Java v2 (client V2) IPC
-
Scaricate il file SDK per dispositivi AWS IoT per Java v2 (v1.6.0
o successivo). -
Effettuate una delle seguenti operazioni per eseguire il codice personalizzato nel componente:
-
Crea il componente come JAR file che include ed SDK per dispositivi AWS IoT esegui questo JAR file nella ricetta del componente.
-
Definiscilo SDK per dispositivi AWS IoT JAR come elemento componente e aggiungi quell'artefatto al classpath quando esegui l'applicazione nella ricetta del componente.
-
-
Usa il codice seguente per creare il client. IPC
try (GreengrassCoreIPCClientV2 ipcClient = GreengrassCoreIPCClientV2.builder().build()) { // Use client. } catch (Exception e) { LOGGER.log(Level.SEVERE, "Exception occurred when using IPC.", e); System.exit(1); }
Per usare SDK per dispositivi AWS IoT for Python v2 (client V2) IPC
-
Scaricate il file SDK per dispositivi AWS IoT per Python
(v1.9.0 o successivo). -
Aggiungi i passaggi SDK di installazione
al ciclo di vita dell'installazione nella ricetta del componente. -
Crea una connessione al servizio AWS IoT Greengrass CoreIPC. Usa il codice seguente per creare il IPC client.
from awsiot.greengrasscoreipc.clientv2 import GreengrassCoreIPCClientV2 try: ipc_client = GreengrassCoreIPCClientV2() # Use IPC client. except Exception: print('Exception occurred when using IPC.', file=sys.stderr) traceback.print_exc() exit(1)
Per creare la SDK per dispositivi AWS IoT v2 per C++, un dispositivo deve disporre dei seguenti strumenti:
-
C++ 11 o versione successiva
-
CMake3.1 o versione successiva
-
Uno dei seguenti compilatori:
-
GCC4.8 o versione successiva
-
Clang 3.9 o versione successiva
-
MSVC2015 o successivo
-
Per utilizzare la versione SDK per dispositivi AWS IoT per C++ v2
-
Scarica la versione SDK per dispositivi AWS IoT per C++ v2 (v1.17.0
o successiva). -
Segui le istruzioni di installazione contenute in per compilare il file README
per C++ v2 dal codice sorgente SDK per dispositivi AWS IoT . -
Nel tuo strumento di compilazione C++, collega la libreria IPC Greengrass
AWS::GreengrassIpc-cpp
, che hai creato nel passaggio precedente. L'CMakeLists.txt
esempio seguente collega la IPC libreria Greengrass a un progetto con cui crei. CMakecmake_minimum_required(VERSION 3.1) project (greengrassv2_pubsub_subscriber) file(GLOB MAIN_SRC "*.h" "*.cpp" ) add_executable(${PROJECT_NAME} ${MAIN_SRC}) set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX CXX_STANDARD 11) find_package(aws-crt-cpp PATHS ~/sdk-cpp-workspace/build) find_package(EventstreamRpc-cpp PATHS ~/sdk-cpp-workspace/build) find_package(GreengrassIpc-cpp PATHS ~/sdk-cpp-workspace/build) target_link_libraries(${PROJECT_NAME} AWS::GreengrassIpc-cpp)
-
Nel codice del componente, create una connessione al IPC servizio AWS IoT Greengrass Core per creare un IPC client (
Aws::Greengrass::GreengrassCoreIpcClient
). È necessario definire un gestore del ciclo di vita della IPC connessione che gestisca gli eventi di IPC connessione, disconnessione ed errore. L'esempio seguente crea un IPC client e un gestore del ciclo di vita della IPC connessione che stampa quando il client si connette, si disconnette e riscontra IPC errori.#include <iostream> #include <aws/crt/Api.h> #include <aws/greengrass/GreengrassCoreIpcClient.h> using namespace Aws::Crt; using namespace Aws::Greengrass; class IpcClientLifecycleHandler : public ConnectionLifecycleHandler { void OnConnectCallback() override { std::cout << "OnConnectCallback" << std::endl; } void OnDisconnectCallback(RpcError error) override { std::cout << "OnDisconnectCallback: " << error.StatusToString() << std::endl; exit(-1); } bool OnErrorCallback(RpcError error) override { std::cout << "OnErrorCallback: " << error.StatusToString() << std::endl; return true; } }; int main() { // Create the IPC client. ApiHandle apiHandle(g_allocator); Io::EventLoopGroup eventLoopGroup(1); Io::DefaultHostResolver socketResolver(eventLoopGroup, 64, 30); Io::ClientBootstrap bootstrap(eventLoopGroup, socketResolver); IpcClientLifecycleHandler ipcLifecycleHandler; GreengrassCoreIpcClient ipcClient(bootstrap); auto connectionStatus = ipcClient.Connect(ipcLifecycleHandler).get(); if (!connectionStatus) { std::cerr << "Failed to establish IPC connection: " << connectionStatus.StatusToString() << std::endl; exit(-1); } // Use the IPC client to create an operation request. // Activate the operation request. auto activate = operation.Activate(request, nullptr); activate.wait(); // Wait for Greengrass Core to respond to the request. auto responseFuture = operation.GetResult(); if (responseFuture.wait_for(std::chrono::seconds(timeout)) == std::future_status::timeout) { std::cerr << "Operation timed out while waiting for response from Greengrass Core." << std::endl; exit(-1); } // Check the result of the request. auto response = responseFuture.get(); if (response) { std::cout << "Successfully published to topic: " << topic << std::endl; } else { // An error occurred. std::cout << "Failed to publish to topic: " << topic << std::endl; auto errorType = response.GetResultType(); if (errorType == OPERATION_ERROR) { auto *error = response.GetOperationError(); std::cout << "Operation error: " << error->GetMessage().value() << std::endl; } else { std::cout << "RPC error: " << response.GetRpcError() << std::endl; } exit(-1); } return 0; }
-
Per eseguire il codice personalizzato nel componente, crea il codice come elemento binario ed esegui l'artefatto binario nella ricetta del componente. Imposta l'
Execute
autorizzazione dell'artefatto per consentire al software AWS IoT Greengrass Core diOWNER
eseguire l'artefatto binario.La
Manifests
sezione relativa alla ricetta del componente potrebbe essere simile all'esempio seguente.
Per creare SDK per dispositivi AWS IoT for JavaScript v2 da utilizzare con NodeJS, un dispositivo deve disporre dei seguenti strumenti:
-
NodeJS 10.0 o versione successiva
-
Esegui
node -v
per controllare la versione di Node.
-
-
CMake3.1 o versione successiva
Per utilizzare SDK per dispositivi AWS IoT for JavaScript v2 (IPCclient V1)
-
Scarica la versione SDK per dispositivi AWS IoT per JavaScript v2 (v1.12.10
o successiva). -
Segui le istruzioni di installazione riportate in README per compilare la versione
v2 dal codice sorgente SDK per dispositivi AWS IoT . JavaScript -
Crea una connessione al IPC servizio AWS IoT Greengrass Core. Completa i seguenti passaggi per creare il IPC client e stabilire una connessione.
-
Usa il codice seguente per creare il IPC client.
import * as greengrascoreipc from 'aws-iot-device-sdk-v2'; let client = greengrascoreipc.createClient();
-
Usa il codice seguente per stabilire una connessione dal tuo componente al nucleo Greengrass.
await client.connect();
Autorizza i componenti a eseguire operazioni IPC
Per consentire ai componenti personalizzati di utilizzare alcune IPC operazioni, è necessario definire politiche di autorizzazione che consentano al componente di eseguire l'operazione su determinate risorse. Ogni politica di autorizzazione definisce un elenco di operazioni e un elenco di risorse consentite dalla politica. Ad esempio, il IPC servizio di messaggistica publish/subscribe definisce le operazioni di pubblicazione e sottoscrizione per le risorse tematiche. È possibile utilizzare il carattere *
jolly per consentire l'accesso a tutte le operazioni o a tutte le risorse.
Le politiche di autorizzazione vengono definite con il parametro di accessControl
configurazione, che è possibile impostare nella ricetta del componente o quando si distribuisce il componente. L'accessControl
oggetto mappa gli identificatori IPC del servizio su elenchi di politiche di autorizzazione. È possibile definire più politiche di autorizzazione per ogni IPC servizio per controllare l'accesso. Ogni politica di autorizzazione ha un ID di policy, che deve essere univoco tra tutti i componenti.
Suggerimento
Per creare una politica unicaIDs, è possibile combinare il nome del componente, il nome del IPC servizio e un contatore. Ad esempio, un componente denominato com.example.HelloWorld
potrebbe definire due politiche di autorizzazione di pubblicazione/sottoscrizione con le seguenti: IDs
-
com.example.HelloWorld:pubsub:1
-
com.example.HelloWorld:pubsub:2
Le politiche di autorizzazione utilizzano il seguente formato. Questo oggetto è il parametro accessControl
di configurazione.
Wildcard nelle politiche di autorizzazione
È possibile utilizzare il carattere *
jolly nell'resources
elemento delle politiche di IPC autorizzazione per consentire l'accesso a più risorse in un'unica politica di autorizzazione.
-
In tutte le versioni del nucleo Greengrass, è possibile specificare un singolo
*
carattere come risorsa per consentire l'accesso a tutte le risorse. -
In Greengrass nucleus v2.6.0 e versioni successive, puoi specificare il carattere in una risorsa in modo che corrisponda a qualsiasi combinazione di
*
caratteri. Ad esempio, è possibile specificare di consentire l'accessofactory/1/devices/Thermostat*/status
a un argomento di stato per tutti i dispositivi termostati di una fabbrica, dove il nome di ogni dispositivo inizia con.Thermostat
Quando si definiscono le politiche di autorizzazione per il AWS IoT Core MQTT IPC servizio, è anche possibile utilizzare caratteri MQTT jolly (+
e#
) per abbinare più risorse. Per ulteriori informazioni, consulta i caratteri MQTTjolly nelle politiche di AWS IoT Core MQTT IPC autorizzazione.
Variabili di ricetta nelle politiche di autorizzazione
Se si utilizza Greengrass nucleus v2.6.0 o versione successiva e si imposta l'opzione di interpolateComponentConfigurationconfigurazione di Greengrass nucleus sutrue, è possibile utilizzare la variabile recipe nelle politiche di autorizzazione. {iot:thingName} Quando è necessaria una politica di autorizzazione che includa il nome del dispositivo principale, ad esempio per MQTT argomenti o ombre del dispositivo, è possibile utilizzare questa variabile recipe per configurare un'unica politica di autorizzazione per un gruppo di dispositivi principali. Ad esempio, è possibile consentire a un componente l'accesso alla seguente risorsa per IPC le operazioni shadow.
$aws/things/{iot:thingName}/shadow/
Caratteri speciali nelle politiche di autorizzazione
Per specificare un valore letterale *
o un ?
carattere in una politica di autorizzazione, è necessario utilizzare una sequenza di escape. Le seguenti sequenze di escape indicano al software AWS IoT Greengrass Core di utilizzare il valore letterale anziché il significato speciale del carattere. Ad esempio, il *
carattere è un jolly che corrisponde a qualsiasi combinazione di caratteri.
Carattere letterale | Sequenza di escape | Note |
---|---|---|
|
|
|
|
|
AWS IoT Greengrass attualmente non supporta il carattere |
|
|
Usa questa sequenza di escape per abbinare una risorsa che contiene |
Esempi di politiche di autorizzazione
Puoi fare riferimento ai seguenti esempi di politiche di autorizzazione per aiutarti a configurare le politiche di autorizzazione per i tuoi componenti.
Esempio di ricetta dei componenti con una politica di autorizzazione
La seguente ricetta di componenti di esempio include un accessControl
oggetto che definisce una politica di autorizzazione. Questa politica autorizza il com.example.HelloWorld
componente a pubblicare sull'test/topic
argomento.
Esempio di aggiornamento della configurazione del componente con una politica di autorizzazione
L'esempio seguente di aggiornamento della configurazione in una distribuzione specifica di configurare un componente con un accessControl
oggetto che definisce una politica di autorizzazione. Questa politica autorizza il com.example.HelloWorld
componente a pubblicare sull'test/topic
argomento.
Sottoscrivi agli stream di IPC eventi
Puoi utilizzare IPC le operazioni per iscriverti ai flussi di eventi su un dispositivo core Greengrass. Per utilizzare un'operazione di sottoscrizione, definisci un gestore di sottoscrizioni e crea una richiesta al servizio. IPC Quindi, il IPC client esegue le funzioni del gestore delle sottoscrizioni ogni volta che il dispositivo principale trasmette un messaggio di evento al componente.
È possibile chiudere un abbonamento per interrompere l'elaborazione dei messaggi relativi agli eventi. A tale scopo, chiamate closeStream()
(Java), close()
(Python) o Close()
(C++) sull'oggetto dell'operazione di sottoscrizione che avete usato per aprire l'abbonamento.
Il IPC servizio AWS IoT Greengrass Core supporta le seguenti operazioni di sottoscrizione:
Definire i gestori delle sottoscrizioni
Per definire un gestore di sottoscrizioni, definite le funzioni di callback che gestiscono i messaggi di evento, gli errori e la chiusura dei flussi. Se si utilizza IPC il client V1, è necessario definire queste funzioni in una classe. Se si utilizza IPC il client V2, disponibile nelle versioni successive di Java e SDKs Python, è possibile definire queste funzioni senza creare una classe di gestione delle sottoscrizioni.
Esempi di gestori di sottoscrizioni
L'esempio seguente mostra come utilizzare l'SubscribeToTopicoperazione e un gestore di sottoscrizioni per sottoscrivere i messaggi di pubblicazione/sottoscrizione locali.
IPCmigliori pratiche
Le migliori pratiche per l'utilizzo IPC nei componenti personalizzati differiscono tra IPC client V1 e IPC client V2. Segui le migliori pratiche per la versione IPC client che utilizzi.