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à.
AWS IoT Core Pubblicare/sottoscrivere messaggi MQTT
Il servizio IPC di messaggistica AWS IoT Core MQTT consente di inviare e ricevere messaggi MQTT da e verso. AWS IoT Core I componenti possono pubblicare messaggi AWS IoT Core e sottoscrivere argomenti per agire sui messaggi MQTT provenienti da altre fonti. Per ulteriori informazioni sull' AWS IoT Core implementazione di MQTT, consultate MQTT nella Developer Guide.AWS IoT Core
Nota
Questo servizio IPC di messaggistica MQTT consente di scambiare messaggi con. AWS IoT Core Per ulteriori informazioni su come scambiare messaggi tra componenti, vedere. Pubblicare/sottoscrivere messaggi locali
Versioni SDK minime
La tabella seguente elenca le versioni minime da utilizzare per pubblicare e sottoscrivere messaggi MQTT da e verso. SDK per dispositivi AWS IoT AWS IoT Core
| SDK | Versione minima |
|---|---|
|
v1.2.10 |
|
|
v1.5.3 |
|
|
v1.17.0 |
|
|
v1.12.0 |
Autorizzazione
Per utilizzare la messaggistica AWS IoT Core MQTT in un componente personalizzato, è necessario definire politiche di autorizzazione che consentano al componente di inviare e ricevere messaggi su argomenti. Per informazioni sulla definizione delle politiche di autorizzazione, vedereAutorizza i componenti a eseguire operazioni IPC.
Le politiche di autorizzazione per la messaggistica AWS IoT Core MQTT hanno le seguenti proprietà.
Identificatore del servizio IPC: aws.greengrass.ipc.mqttproxy
| Operation | Description | Resources |
|---|---|---|
|
|
Consente a un componente di pubblicare messaggi AWS IoT Core sugli argomenti MQTT specificati. |
Una stringa di argomenti, ad esempio |
|
|
Consente a un componente di sottoscrivere i messaggi provenienti dagli AWS IoT Core argomenti specificati. |
Una stringa di argomento, ad esempio |
|
|
Consente a un componente di pubblicare e sottoscrivere messaggi AWS IoT Core MQTT per gli argomenti specificati. |
Una stringa di argomenti, ad esempio |
I caratteri jolly MQTT nelle politiche di autorizzazione MQTT AWS IoT Core
È possibile utilizzare i caratteri jolly MQTT nelle AWS IoT Core politiche di autorizzazione MQTT IPC. I componenti possono pubblicare e sottoscrivere argomenti che corrispondono al filtro degli argomenti consentito in una politica di autorizzazione. Ad esempio, se la politica di autorizzazione di un componente concede l'accesso atest/topic/#, il componente può sottoscriveretest/topic/#, pubblicare e sottoscriveretest/topic/filter.
Variabili Recipe nelle politiche di autorizzazione AWS IoT Core MQTT
Se si utilizza la versione 2.6.0 o successiva del nucleo Greengrass, è possibile utilizzare la variabile recipe nelle politiche di autorizzazione. {iot:thingName} Questa funzionalità consente di configurare un'unica politica di autorizzazione per un gruppo di dispositivi principali, in cui ogni dispositivo principale può accedere solo agli argomenti che contengono il proprio nome. Ad esempio, è possibile consentire a un componente l'accesso alla seguente risorsa tematica.
devices/{iot:thingName}/messages
Per ulteriori informazioni, consultare Variabili di ricetta e Usa le variabili di ricetta negli aggiornamenti di fusione.
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 Esempio di politica di autorizzazione con accesso illimitato
Il seguente esempio di politica di autorizzazione consente a un componente di pubblicare e sottoscrivere tutti gli argomenti.
Esempio Esempio di politica di autorizzazione con accesso limitato
Il seguente esempio di politica di autorizzazione consente a un componente di pubblicare e sottoscrivere due argomenti denominati factory/1/events efactory/1/actions.
Esempio Esempio di politica di autorizzazione per un gruppo di dispositivi principali
Importante
Questo esempio utilizza una funzionalità disponibile per la versione 2.6.0 e successive del componente Greengrass nucleus. Greengrass nucleus v2.6.0 aggiunge il supporto per la maggior parte delle variabili di ricetta, ad esempio nelle configurazioni dei componenti. {iot:thingName}
Il seguente esempio di politica di autorizzazione consente a un componente di pubblicare e sottoscrivere un argomento che contiene il nome del dispositivo principale che esegue il componente.
PublishToIoTCore
Pubblica un messaggio MQTT AWS IoT Core su un argomento.
Quando si pubblicano messaggi MQTT su AWS IoT Core, esiste una quota di 100 transazioni al secondo. Se si supera questa quota, i messaggi vengono messi in coda per l'elaborazione sul dispositivo Greengrass. È inoltre prevista una quota di 512 Kb di dati al secondo e una quota a livello di account di 20.000 pubblicazioni al secondo (2.000 in alcune). Regioni AWS Per ulteriori informazioni sui limiti e le quote del broker di messaggi MQTT in AWS IoT Core, vedere AWS IoT Core Message Broker and Protocol Limits and Protocol.
Se superi queste quote, il dispositivo Greengrass limita la pubblicazione dei messaggi a. AWS IoT Core I messaggi vengono archiviati in uno spooler in memoria. Per impostazione predefinita, la memoria allocata allo spooler è 2,5 Mb. Se lo spooler si riempie, i nuovi messaggi vengono rifiutati. È possibile aumentare le dimensioni dello spooler. Per ulteriori informazioni, consulta Configurazione nella documentazione Nucleo Greengrass. Per evitare di riempire lo spooler e di dover aumentare la memoria allocata, limita le richieste di pubblicazione a non più di 100 richieste al secondo.
Quando la tua applicazione deve inviare messaggi a una velocità maggiore o messaggi più grandi, prendi in considerazione l'utilizzo di Stream manager per inviare messaggi a Kinesis Data Streams. Il componente stream manager è progettato per trasferire grandi volumi di dati a. Cloud AWS Per ulteriori informazioni, consulta Gestisci i flussi di dati sui dispositivi core Greengrass.
Richiesta
La richiesta di questa operazione ha i seguenti parametri:
topicName(Python:)topic_name-
L'argomento su cui pubblicare il messaggio.
qos-
Il QoS MQTT da usare. Questo enum
QOS, ha i seguenti valori:-
AT_MOST_ONCE— QoS 0. Il messaggio MQTT viene recapitato al massimo una volta. -
AT_LEAST_ONCE— QoS 1. Il messaggio MQTT viene recapitato almeno una volta.
-
payload-
(Facoltativo) Il payload del messaggio sotto forma di blob.
Le seguenti funzionalità sono disponibili per la versione 2.10.0 e successive se si utilizza MQTT 5. Nucleo Greengrass Queste funzionalità vengono ignorate quando si utilizza MQTT 3.1.1. La tabella seguente elenca la versione minima dell'SDK del AWS IoT dispositivo da utilizzare per accedere a queste funzionalità.
| SDK | Versione minima |
|---|---|
| SDK per dispositivi AWS IoT per Python |
v1.15.0 |
| SDK per dispositivi AWS IoT per Java |
v1.13.0 |
| SDK per dispositivi AWS IoT per C++ |
v1.24.0 |
| SDK per dispositivi AWS IoT per JavaScript |
v1.13.0 |
payloadFormat-
(Facoltativo) Il formato del payload del messaggio. Se non si imposta il
payloadFormat, si presume che il tipo sia.BYTESL'enum ha i seguenti valori:-
BYTES— Il contenuto del payload è un blob binario. -
UTF8— Il contenuto del payload è una UTF8 stringa di caratteri.
-
retain-
(Facoltativo) Indica se impostare l'opzione di conservazione MQTT su
truedurante la pubblicazione. userProperties-
(Facoltativo) Un elenco di oggetti specifici dell'applicazione da inviare
UserProperty. L'UserPropertyoggetto è definito come segue:UserProperty: key: string value: string messageExpiryIntervalSeconds-
(Facoltativo) Il numero di secondi prima che il messaggio scada e venga eliminato dal server. Se questo valore non è impostato, il messaggio non scade.
correlationData-
(Facoltativo) Informazioni aggiunte alla richiesta che possono essere utilizzate per associare una richiesta a una risposta.
responseTopic-
(Facoltativo) L'argomento da utilizzare per il messaggio di risposta.
contentType-
(Facoltativo) Un identificatore specifico dell'applicazione del tipo di contenuto del messaggio.
Risposta
Questa operazione non fornisce alcuna informazione nella sua risposta.
Esempi
Gli esempi seguenti mostrano come chiamare questa operazione nel codice componente personalizzato.
SubscribeToIoTCore
Iscriviti ai messaggi MQTT da AWS IoT Core su un argomento o un filtro per argomenti. Il software AWS IoT Greengrass Core rimuove gli abbonamenti quando il componente raggiunge la fine del suo ciclo di vita.
Questa operazione è un'operazione di sottoscrizione in cui ci si iscrive a un flusso di messaggi di eventi. Per utilizzare questa operazione, definite un gestore di risposte di flusso con funzioni che gestiscono i messaggi di evento, gli errori e la chiusura dei flussi. Per ulteriori informazioni, consulta Iscriviti ai flussi di eventi IPC.
Tipo di messaggio di evento: IoTCoreMessage
Richiesta
La richiesta di questa operazione ha i seguenti parametri:
topicName(Python:)topic_name-
L'argomento a cui iscriversi. È possibile utilizzare i caratteri jolly degli argomenti MQTT (
#and+) per sottoscrivere più argomenti. qos-
Il QoS MQTT da usare. Questo enum
QOS, ha i seguenti valori:-
AT_MOST_ONCE— QoS 0. Il messaggio MQTT viene recapitato al massimo una volta. -
AT_LEAST_ONCE— QoS 1. Il messaggio MQTT viene recapitato almeno una volta.
-
Risposta
La risposta di questa operazione contiene le seguenti informazioni:
messages-
Il flusso di messaggi MQTT. Questo oggetto contiene
IoTCoreMessagele seguenti informazioni:message-
Il messaggio MQTT. Questo oggetto contiene
MQTTMessagele seguenti informazioni:topicName(Python:)topic_name-
L'argomento su cui è stato pubblicato il messaggio.
payload-
(Facoltativo) Il payload del messaggio sotto forma di blob.
Le seguenti funzionalità sono disponibili per la versione 2.10.0 e successive se si utilizza MQTT 5. Nucleo Greengrass Queste funzionalità vengono ignorate quando si utilizza MQTT 3.1.1. La tabella seguente elenca la versione minima dell'SDK del AWS IoT dispositivo da utilizzare per accedere a queste funzionalità.
SDK Versione minima SDK per dispositivi AWS IoT per Python v2 v1.15.0 SDK per dispositivi AWS IoT per Java v2 v1.13.0 SDK per dispositivi AWS IoT per C++ v2 v1.24.0 SDK per dispositivi AWS IoT per JavaScript v2 v1.13.0 payloadFormat-
(Facoltativo) Il formato del payload del messaggio. Se non si imposta il
payloadFormat, si presume che il tipo sia.BYTESL'enum ha i seguenti valori:-
BYTES— Il contenuto del payload è un blob binario. -
UTF8— Il contenuto del payload è una UTF8 stringa di caratteri.
-
retain-
(Facoltativo) Indica se impostare l'opzione di conservazione MQTT su
truedurante la pubblicazione. userProperties-
(Facoltativo) Un elenco di oggetti specifici dell'applicazione da inviare
UserProperty. L'UserPropertyoggetto è definito come segue:UserProperty: key: string value: string messageExpiryIntervalSeconds-
(Facoltativo) Il numero di secondi prima che il messaggio scada e venga eliminato dal server. Se questo valore non è impostato, il messaggio non scade.
correlationData-
(Facoltativo) Informazioni aggiunte alla richiesta che possono essere utilizzate per associare una richiesta a una risposta.
responseTopic-
(Facoltativo) L'argomento da utilizzare per il messaggio di risposta.
contentType-
(Facoltativo) Un identificatore specifico dell'applicazione del tipo di contenuto del messaggio.
Esempi
Gli esempi seguenti mostrano come chiamare questa operazione nel codice componente personalizzato.
Esempi
Utilizzate i seguenti esempi per imparare a utilizzare il servizio AWS IoT Core MQTT IPC nei vostri componenti.
La seguente ricetta di esempio consente al componente di pubblicare su tutti gli argomenti.
L'applicazione C++ di esempio seguente mostra come utilizzare il servizio AWS IoT Core MQTT IPC su cui pubblicare messaggi. AWS IoT Core
#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() { String message("Hello from the Greengrass IPC MQTT publisher (C++)."); String topic("test/topic/cpp"); QOS qos = QOS_AT_LEAST_ONCE; int timeout = 10; 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); } while (true) { PublishToIoTCoreRequest request; Vector<uint8_t> messageData({message.begin(), message.end()}); request.SetTopicName(topic); request.SetPayload(messageData); request.SetQos(qos); auto operation = ipcClient.NewPublishToIoTCore(); auto activate = operation->Activate(request, nullptr); activate.wait(); 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); } 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); } std::this_thread::sleep_for(std::chrono::seconds(5)); } return 0; }
La seguente ricetta di esempio consente al componente di sottoscrivere tutti gli argomenti.
L'applicazione C++ di esempio seguente mostra come utilizzare il servizio AWS IoT Core MQTT IPC per iscriversi ai messaggi da. AWS IoT Core
#include <iostream> #include <aws/crt/Api.h> #include <aws/greengrass/GreengrassCoreIpcClient.h> using namespace Aws::Crt; using namespace Aws::Greengrass; class IoTCoreResponseHandler : public SubscribeToIoTCoreStreamHandler { public: virtual ~IoTCoreResponseHandler() {} private: void OnStreamEvent(IoTCoreMessage *response) override { auto message = response->GetMessage(); if (message.has_value() && message.value().GetPayload().has_value()) { auto messageBytes = message.value().GetPayload().value(); std::string messageString(messageBytes.begin(), messageBytes.end()); std::string messageTopic = message.value().GetTopicName().value().c_str(); std::cout << "Received new message on topic: " << messageTopic << std::endl; std::cout << "Message: " << messageString << std::endl; } } bool OnStreamError(OperationError *error) override { std::cout << "Received an operation error: "; if (error->GetMessage().has_value()) { std::cout << error->GetMessage().value(); } std::cout << std::endl; return false; // Return true to close stream, false to keep stream open. } void OnStreamClosed() override { std::cout << "Subscribe to IoT Core stream closed." << std::endl; } }; 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() { String topic("test/topic/cpp"); QOS qos = QOS_AT_LEAST_ONCE; int timeout = 10; 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); } SubscribeToIoTCoreRequest request; request.SetTopicName(topic); request.SetQos(qos); auto streamHandler = MakeShared<IoTCoreResponseHandler>(DefaultAllocator()); auto operation = ipcClient.NewSubscribeToIoTCore(streamHandler); auto activate = operation->Activate(request, nullptr); activate.wait(); 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); } auto response = responseFuture.get(); if (response) { std::cout << "Successfully subscribed to topic: " << topic << std::endl; } else { // An error occurred. std::cout << "Failed to subscribe 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); } // Keep the main thread alive, or the process will exit. while (true) { std::this_thread::sleep_for(std::chrono::seconds(10)); } operation->Close(); return 0; }
La seguente ricetta di esempio consente al componente di pubblicare su tutti gli argomenti.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCorePublisherRust", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that publishes MQTT messages to IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCorePublisherRust:mqttproxy:1": { "policyDescription": "Allows access to publish to all topics.", "operations": ["aws.greengrass#PublishToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/publish_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCorePublisherRust/1.0.0/publish_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
L'esempio seguente di applicazione Rust dimostra come utilizzare il servizio AWS IoT Core MQTT IPC su cui pubblicare messaggi. AWS IoT Core
use gg_sdk::{Qos, Sdk}; fn main() { let sdk = Sdk::init(); sdk.connect().expect("Failed to establish IPC connection"); let message = b"Hello, World"; let topic = "my/topic"; let qos = Qos::AtLeastOnce; sdk.publish_to_iot_core(topic, message, qos) .expect("Failed to publish to topic"); println!("Successfully published to topic: {topic}"); }
La seguente ricetta di esempio consente al componente di sottoscrivere tutti gli argomenti.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCoreSubscriberRust", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that subscribes to MQTT messages from IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCoreSubscriberRust:mqttproxy:1": { "policyDescription": "Allows access to subscribe to all topics.", "operations": ["aws.greengrass#SubscribeToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/subscribe_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCoreSubscriberRust/1.0.0/subscribe_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
L'esempio seguente di applicazione Rust mostra come utilizzare il servizio AWS IoT Core MQTT IPC per iscriversi ai messaggi da. AWS IoT Core
use gg_sdk::{Qos, Sdk}; use std::{thread, time::Duration}; fn main() { let sdk = Sdk::init(); sdk.connect().expect("Failed to establish IPC connection"); let topic = "my/topic"; let qos = Qos::AtLeastOnce; let callback = |topic: &str, payload: &[u8]| { let message = String::from_utf8_lossy(payload); println!("Received new message on topic {topic}: {message}"); }; let _sub = sdk .subscribe_to_iot_core(topic, qos, &callback) .expect("Failed to subscribe to topic"); println!("Successfully subscribed to topic: {topic}"); // Keep the main thread alive, or the process will exit. loop { thread::sleep(Duration::from_secs(10)); } }
La seguente ricetta di esempio consente al componente di pubblicare su tutti gli argomenti.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCorePublisherC", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that publishes MQTT messages to IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCorePublisherC:mqttproxy:1": { "policyDescription": "Allows access to publish to all topics.", "operations": ["aws.greengrass#PublishToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/sample_publish_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCorePublisherC/1.0.0/sample_publish_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
L'esempio seguente di applicazione C mostra come utilizzare il servizio AWS IoT Core MQTT IPC su cui pubblicare messaggi. AWS IoT Core
#include <gg/error.h> #include <gg/ipc/client.h> #include <gg/sdk.h> #include <stdio.h> #include <stdlib.h> int main(void) { gg_sdk_init(); GgError err = ggipc_connect(); if (err != GG_ERR_OK) { fprintf(stderr, "Failed to establish IPC connection.\n"); exit(-1); } GgBuffer message = GG_STR("Hello, World"); GgBuffer topic = GG_STR("my/topic"); uint8_t qos = 1; err = ggipc_publish_to_iot_core(topic, message, qos); if (err != GG_ERR_OK) { fprintf( stderr, "Failed to publish to topic: %.*s\n", (int) topic.len, topic.data ); exit(-1); } printf( "Successfully published to topic: %.*s\n", (int) topic.len, topic.data ); }
La seguente ricetta di esempio consente al componente di sottoscrivere tutti gli argomenti.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCoreSubscriberC", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that subscribes to MQTT messages from IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCoreSubscriberC:mqttproxy:1": { "policyDescription": "Allows access to subscribe to all topics.", "operations": ["aws.greengrass#SubscribeToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/sample_subscribe_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCoreSubscriberC/1.0.0/sample_subscribe_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
L'esempio seguente di applicazione C mostra come utilizzare il servizio AWS IoT Core MQTT IPC per iscriversi ai messaggi da. AWS IoT Core
#include <gg/error.h> #include <gg/ipc/client.h> #include <gg/sdk.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> static void on_subscription_response( void *ctx, GgBuffer topic, GgBuffer payload, GgIpcSubscriptionHandle handle ) { (void) ctx; (void) handle; printf( "Received new message on topic %.*s: %.*s\n", (int) topic.len, topic.data, (int) payload.len, payload.data ); } int main(void) { gg_sdk_init(); GgError err = ggipc_connect(); if (err != GG_ERR_OK) { fprintf(stderr, "Failed to establish IPC connection.\n"); exit(-1); } GgBuffer topic = GG_STR("my/topic"); uint8_t qos = 1; GgIpcSubscriptionHandle handle; err = ggipc_subscribe_to_iot_core( topic, qos, on_subscription_response, NULL, &handle ); if (err != GG_ERR_OK) { fprintf( stderr, "Failed to subscribe to topic: %.*s\n", (int) topic.len, topic.data ); exit(-1); } printf( "Successfully subscribed to topic: %.*s\n", (int) topic.len, topic.data ); // Keep the main thread alive, or the process will exit. while (1) { sleep(10); } // To stop subscribing, close the subscription handle. ggipc_close_subscription(handle); }
La seguente ricetta di esempio consente al componente di pubblicare su tutti gli argomenti.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCorePublisherCpp", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that publishes MQTT messages to IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCorePublisherCpp:mqttproxy:1": { "policyDescription": "Allows access to publish to all topics.", "operations": ["aws.greengrass#PublishToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/sample_cpp_publish_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCorePublisherCpp/1.0.0/sample_cpp_publish_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
L'applicazione C++ di esempio seguente mostra come utilizzare il servizio AWS IoT Core MQTT IPC su cui pubblicare messaggi. AWS IoT Core
#include <gg/ipc/client.hpp> #include <iostream> int main() { auto &client = gg::ipc::Client::get(); auto error = client.connect(); if (error) { std::cerr << "Failed to establish IPC connection.\n"; exit(-1); } std::string_view message = "Hello, World"; std::string_view topic = "my/topic"; uint8_t qos = 1; error = client.publish_to_iot_core(topic, message, qos); if (error) { std::cerr << "Failed to publish to topic: " << topic << "\n"; exit(-1); } std::cout << "Successfully published to topic: " << topic << "\n"; }
La seguente ricetta di esempio consente al componente di sottoscrivere tutti gli argomenti.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCoreSubscriberCpp", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that subscribes to MQTT messages from IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCoreSubscriberCpp:mqttproxy:1": { "policyDescription": "Allows access to subscribe to all topics.", "operations": ["aws.greengrass#SubscribeToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/sample_cpp_subscribe_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCoreSubscriberCpp/1.0.0/sample_cpp_subscribe_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
L'applicazione C++ di esempio seguente mostra come utilizzare il servizio AWS IoT Core MQTT IPC per iscriversi ai messaggi da. AWS IoT Core
#include <gg/ipc/client.hpp> #include <unistd.h> #include <iostream> class ResponseHandler : public gg::ipc::IotTopicCallback { void operator()( std::string_view topic, gg::Buffer payload, gg::ipc::Subscription &handle ) override { (void) handle; std::cout << "Received new message on topic " << topic << ": " << payload << "\n"; } }; int main() { auto &client = gg::ipc::Client::get(); auto error = client.connect(); if (error) { std::cerr << "Failed to establish IPC connection.\n"; exit(-1); } std::string_view topic = "my/topic"; uint8_t qos = 1; static ResponseHandler handler; error = client.subscribe_to_iot_core(topic, qos, handler); if (error) { std::cerr << "Failed to subscribe to topic: " << topic << "\n"; exit(-1); } std::cout << "Successfully subscribed to topic: " << topic << "\n"; // Keep the main thread alive, or the process will exit. while (1) { sleep(10); } }