Interagieren mit lokalen Schatten - AWS IoT Greengrass

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Interagieren mit lokalen Schatten

Verwenden Sie den Shadow IPC-Service, um mit lokalen Schatten auf einem Gerät zu interagieren. Das Gerät, mit dem Sie interagieren möchten, kann Ihr Core-Gerät oder ein verbundenes Client-Gerät sein.

Um diese IPC-Operationen zu verwenden, fügen Sie die Shadow Manager-Komponente als Abhängigkeit in Ihre benutzerdefinierte Komponente ein. Anschließend können Sie IPC-Operationen in Ihren benutzerdefinierten Komponenten verwenden, um über den Schattenmanager mit lokalen Schatten auf Ihrem Gerät zu interagieren. Damit benutzerdefinierte Komponenten auf Änderungen des lokalen Schattenstatus reagieren können, können Sie auch den IPC-Service zum Veröffentlichen/Abonnementieren verwenden, um Schattenereignisse zu abonnieren. Weitere Informationen zur Verwendung des Services zum Veröffentlichen/Abonnieren finden Sie unter Lokale Nachrichten veröffentlichen/abonnieren.

Anmerkung

Damit ein Core-Gerät mit Client-Geräteschatten interagieren kann, müssen Sie auch die MQTT-Bridge-Komponente konfigurieren und bereitstellen. Weitere Informationen finden Sie unter Schattenmanager für die Kommunikation mit Client-Geräten aktivieren.

SDK-Mindestversionen

In der folgenden Tabelle sind die Mindestversionen von aufgeführtAWS IoT Device SDK, die Sie für die Interaktion mit lokalen Schatten verwenden müssen.

Autorisierung

Um den Shadow IPC-Service in einer benutzerdefinierten Komponente zu verwenden, müssen Sie Autorisierungsrichtlinien definieren, die es Ihrer Komponente ermöglichen, mit Schatten zu interagieren. Informationen zum Definieren von Autorisierungsrichtlinien finden Sie unter Autorisieren Sie Komponenten zur Ausführung von IPC-Vorgängen.

Autorisierungsrichtlinien für die Schatteninteraktion haben die folgenden Eigenschaften.

IPC-Service-ID: aws.greengrass.ShadowManager

Operation Beschreibung Ressourcen

aws.greengrass#GetThingShadow

Ermöglicht einer Komponente, den Schatten eines Objekts abzurufen.

Eine der folgenden Zeichenfolgen:

  • $aws/things/thingName/shadow/, um den Zugriff auf den klassischen Geräteschatten zu ermöglichen.

  • $aws/things/thingName/shadow/name/shadowName, um den Zugriff auf einen benannten Schatten zu erlauben.

  • * , um den Zugriff auf alle Schatten zu ermöglichen.

aws.greengrass#UpdateThingShadow

Ermöglicht einer Komponente, den Schatten eines Objekts zu aktualisieren.

Eine der folgenden Zeichenfolgen:

  • $aws/things/thingName/shadow/, um den Zugriff auf den klassischen Geräteschatten zu ermöglichen.

  • $aws/things/thingName/shadow/name/shadowName, um den Zugriff auf einen benannten Schatten zu erlauben.

  • * , um den Zugriff auf alle Schatten zu ermöglichen.

aws.greengrass#DeleteThingShadow

Ermöglicht einer Komponente das Löschen des Schattens eines Objekts.

Eine der folgenden Zeichenfolgen:

  • $aws/things/thingName/shadow/, um den Zugriff auf den klassischen Geräteschatten zu ermöglichen

  • $aws/things/thingName/shadow/name/shadowName, um den Zugriff auf einen benannten Schatten zu erlauben

  • *, um den Zugriff auf alle Schatten zu ermöglichen.

aws.greengrass#ListNamedShadowsForThing

Ermöglicht einer Komponente, die Liste der benannten Schatten für ein Objekt abzurufen.

Eine Objektnamenzeichenfolge, die den Zugriff auf das Objekt ermöglicht, um seine Schatten aufzulisten.

Verwenden Sie *, um den Zugriff auf alle Objekte zu erlauben.

IPC-Service-ID: aws.greengrass.ipc.pubsub

Operation Beschreibung Ressourcen

aws.greengrass#SubscribeToTopic

Ermöglicht einer Komponente das Abonnieren von Nachrichten für die von Ihnen angegebenen Themen.

Eine der folgenden Themenzeichenfolgen:

  • shadowTopicPrefix/get/accepted

  • shadowTopicPrefix/get/rejected

  • shadowTopicPrefix/delete/accepted

  • shadowTopicPrefix/delete/rejected

  • shadowTopicPrefix/update/accepted

  • shadowTopicPrefix/update/delta

  • shadowTopicPrefix/update/rejected

Der Wert des Themenpräfixes hängt vom Typ des Schattens shadowTopicPrefix ab:

  • Klassischer Schatten: $aws/things/thingName/shadow

  • Benannter Schatten: $aws/things/thingName/shadow/name/shadowName

Verwenden Sie *, um den Zugriff auf alle Themen zu erlauben.

In Greengrass-Kern v2.6.0 und höher können Sie Themen abonnieren, die MQTT-Themen-Platzhalter (# und +) enthalten. Diese Themenzeichenfolge unterstützt MQTT-Themen-Platzhalter als Literalzeichen. Wenn beispielsweise die Autorisierungsrichtlinie einer Komponente Zugriff auf gewährttest/topic/#, kann die Komponente abonnierentest/topic/#, aber sie kann nicht abonnierentest/topic/filter.

Rezeptvariablen in lokalen Schattenautorisierungsrichtlinien

Wenn Sie v2.6.0 oder höher des Greengrass-Kerns verwenden und die interpolateComponentConfiguration Konfigurationsoption des Greengrass-Kerns auf festlegentrue, können Sie die -{iot:thingName}Rezeptvariable in Autorisierungsrichtlinien verwenden. Mit dieser Funktion können Sie eine einzelne Autorisierungsrichtlinie für eine Gruppe von Core-Geräten konfigurieren, bei der jedes Core-Gerät nur auf seinen eigenen Schatten zugreifen kann. Sie können beispielsweise einer Komponente Zugriff auf die folgende Ressource für Schatten- IPC-Operationen gewähren.

$aws/things/{iot:thingName}/shadow/

Beispiele für Autorisierungsrichtlinien

Sie können auf die folgenden Beispiele für Autorisierungsrichtlinien verweisen, um Ihnen bei der Konfiguration von Autorisierungsrichtlinien für Ihre Komponenten zu helfen.

Beispiel: Erlauben Sie einer Gruppe von -Core-Geräten, mit lokalen Schatten zu interagieren
Wichtig

In diesem Beispiel wird eine Funktion verwendet, die für v2.6.0 und höher der Greengrass-Kernkomponente verfügbar ist. Greengrass-Kern v2.6.0 bietet Unterstützung für die meisten Rezeptvariablen, z. B. {iot:thingName}, in Komponentenkonfigurationen. Um dieses Feature zu aktivieren, setzen Sie die interpolateComponentConfiguration Konfigurationsoption des Greengrass-Kerns auf true. Ein Beispiel, das für alle Versionen des Greengrass-Kerns funktioniert, finden Sie in der Beispielautorisierungsrichtlinie für ein einzelnes Core-Gerät .

Die folgende Beispielautorisierungsrichtlinie ermöglicht es der Komponentecom.example.MyShadowInteractionComponent, mit dem klassischen Geräteschatten und dem benannten Schatten myNamedShadow für das Core-Gerät zu interagieren, das die Komponente ausführt. Diese Richtlinie ermöglicht es dieser Komponente auch, Nachrichten zu lokalen Themen für diese Schatten zu empfangen.

JSON
{ "accessControl": { "aws.greengrass.ShadowManager": { "com.example.MyShadowInteractionComponent:shadow:1": { "policyDescription": "Allows access to shadows", "operations": [ "aws.greengrass#GetThingShadow", "aws.greengrass#UpdateThingShadow", "aws.greengrass#DeleteThingShadow" ], "resources": [ "$aws/things/{iot:thingName}/shadow", "$aws/things/{iot:thingName}/shadow/name/myNamedShadow" ] }, "com.example.MyShadowInteractionComponent:shadow:2": { "policyDescription": "Allows access to things with shadows", "operations": [ "aws.greengrass#ListNamedShadowsForThing" ], "resources": [ "{iot:thingName}" ] } }, "aws.greengrass.ipc.pubsub": { "com.example.MyShadowInteractionComponent:pubsub:1": { "policyDescription": "Allows access to shadow pubsub topics", "operations": [ "aws.greengrass#SubscribeToTopic" ], "resources": [ "$aws/things/{iot:thingName}/shadow/get/accepted", "$aws/things/{iot:thingName}/shadow/name/myNamedShadow/get/accepted" ] } } } }
YAML
accessControl: aws.greengrass.ShadowManager: 'com.example.MyShadowInteractionComponent:shadow:1': policyDescription: 'Allows access to shadows' operations: - 'aws.greengrass#GetThingShadow' - 'aws.greengrass#UpdateThingShadow' - 'aws.greengrass#DeleteThingShadow' resources: - $aws/things/{iot:thingName}/shadow - $aws/things/{iot:thingName}/shadow/name/myNamedShadow 'com.example.MyShadowInteractionComponent:shadow:2': policyDescription: 'Allows access to things with shadows' operations: - 'aws.greengrass#ListNamedShadowsForThing' resources: - '{iot:thingName}' aws.greengrass.ipc.pubsub: 'com.example.MyShadowInteractionComponent:pubsub:1': policyDescription: 'Allows access to shadow pubsub topics' operations: - 'aws.greengrass#SubscribeToTopic' resources: - $aws/things/{iot:thingName}/shadow/get/accepted - $aws/things/{iot:thingName}/shadow/name/myNamedShadow/get/accepted
Beispiel: Erlauben Sie einer Gruppe von Core-Geräten die Interaktion mit Client-Geräteschatten
Wichtig

Für diese Funktion sind Greengrass-Kern v2.6.0 oder höher, Shadow Manager v2.2.0 oder höher und MQTT Bridge v2.2.0 oder höher erforderlich. Sie müssen die MQTT-Brücke konfigurieren, damit der Shadow Manager mit Client-Geräten kommunizieren kann.

Die folgende Beispielautorisierungsrichtlinie ermöglicht es der Komponentecom.example.MyShadowInteractionComponent, mit allen Geräteschatten für Client-Geräte zu interagieren, deren Namen mit beginnenMyClientDevice.

Anmerkung

Damit ein Core-Gerät mit Client-Geräteschatten interagieren kann, müssen Sie auch die MQTT-Bridge-Komponente konfigurieren und bereitstellen. Weitere Informationen finden Sie unter Shadow Manager die Kommunikation mit Client-Geräten ermöglichen.

JSON
{ "accessControl": { "aws.greengrass.ShadowManager": { "com.example.MyShadowInteractionComponent:shadow:1": { "policyDescription": "Allows access to shadows", "operations": [ "aws.greengrass#GetThingShadow", "aws.greengrass#UpdateThingShadow", "aws.greengrass#DeleteThingShadow" ], "resources": [ "$aws/things/MyClientDevice*/shadow", "$aws/things/MyClientDevice*/shadow/name/*" ] }, "com.example.MyShadowInteractionComponent:shadow:2": { "policyDescription": "Allows access to things with shadows", "operations": [ "aws.greengrass#ListNamedShadowsForThing" ], "resources": [ "MyClientDevice*" ] } } } }
YAML
accessControl: aws.greengrass.ShadowManager: 'com.example.MyShadowInteractionComponent:shadow:1': policyDescription: 'Allows access to shadows' operations: - 'aws.greengrass#GetThingShadow' - 'aws.greengrass#UpdateThingShadow' - 'aws.greengrass#DeleteThingShadow' resources: - $aws/things/MyClientDevice*/shadow - $aws/things/MyClientDevice*/shadow/name/* 'com.example.MyShadowInteractionComponent:shadow:2': policyDescription: 'Allows access to things with shadows' operations: - 'aws.greengrass#ListNamedShadowsForThing' resources: - MyClientDevice*
Beispiel: Einem einzelnen Core-Gerät erlauben, mit lokalen Schatten zu interagieren

Die folgende Beispielautorisierungsrichtlinie ermöglicht es der Komponentecom.example.MyShadowInteractionComponent, mit dem klassischen Geräteschatten und dem benannten Schatten myNamedShadow für das Gerät zu interagierenMyThingName. Diese Richtlinie ermöglicht es dieser Komponente auch, Nachrichten zu lokalen Themen für diese Schatten zu empfangen.

JSON
{ "accessControl": { "aws.greengrass.ShadowManager": { "com.example.MyShadowInteractionComponent:shadow:1": { "policyDescription": "Allows access to shadows", "operations": [ "aws.greengrass#GetThingShadow", "aws.greengrass#UpdateThingShadow", "aws.greengrass#DeleteThingShadow" ], "resources": [ "$aws/things/MyThingName/shadow", "$aws/things/MyThingName/shadow/name/myNamedShadow" ] }, "com.example.MyShadowInteractionComponent:shadow:2": { "policyDescription": "Allows access to things with shadows", "operations": [ "aws.greengrass#ListNamedShadowsForThing" ], "resources": [ "MyThingName" ] } }, "aws.greengrass.ipc.pubsub": { "com.example.MyShadowInteractionComponent:pubsub:1": { "policyDescription": "Allows access to shadow pubsub topics", "operations": [ "aws.greengrass#SubscribeToTopic" ], "resources": [ "$aws/things/MyThingName/shadow/get/accepted", "$aws/things/MyThingName/shadow/name/myNamedShadow/get/accepted" ] } } } }
YAML
accessControl: aws.greengrass.ShadowManager: 'com.example.MyShadowInteractionComponent:shadow:1': policyDescription: 'Allows access to shadows' operations: - 'aws.greengrass#GetThingShadow' - 'aws.greengrass#UpdateThingShadow' - 'aws.greengrass#DeleteThingShadow' resources: - $aws/things/MyThingName/shadow - $aws/things/MyThingName/shadow/name/myNamedShadow 'com.example.MyShadowInteractionComponent:shadow:2': policyDescription: 'Allows access to things with shadows' operations: - 'aws.greengrass#ListNamedShadowsForThing' resources: - MyThingName aws.greengrass.ipc.pubsub: 'com.example.MyShadowInteractionComponent:pubsub:1': policyDescription: 'Allows access to shadow pubsub topics' operations: - 'aws.greengrass#SubscribeToTopic' resources: - $aws/things/MyThingName/shadow/get/accepted - $aws/things/MyThingName/shadow/name/myNamedShadow/get/accepted
Beispiel: Erlauben Sie einer Gruppe von -Core-Geräten, auf lokale Schattenzustandsänderungen zu reagieren
Wichtig

In diesem Beispiel wird eine Funktion verwendet, die für v2.6.0 und höher der Greengrass-Kernkomponente verfügbar ist. Greengrass-Kern v2.6.0 bietet Unterstützung für die meisten Rezeptvariablen, z. B. {iot:thingName}, in Komponentenkonfigurationen. Um dieses Feature zu aktivieren, setzen Sie die interpolateComponentConfiguration Konfigurationsoption des Greengrass-Kerns auf true. Ein Beispiel, das für alle Versionen des Greengrass-Kerns funktioniert, finden Sie in der Beispielautorisierungsrichtlinie für ein einzelnes Core-Gerät .

Die folgende Beispiel-Zugriffskontrollrichtlinie ermöglicht es dem Benutzercom.example.MyShadowReactiveComponent, Nachrichten zum /update/delta Thema für den klassischen Geräteschatten und den benannten Schatten myNamedShadow auf jedem Core-Gerät zu empfangen, das die Komponente ausführt.

JSON
{ "accessControl": { "aws.greengrass.ipc.pubsub": { "com.example.MyShadowReactiveComponent:pubsub:1": { "policyDescription": "Allows access to shadow pubsub topics", "operations": [ "aws.greengrass#SubscribeToTopic" ], "resources": [ "$aws/things/{iot:thingName}/shadow/update/delta", "$aws/things/{iot:thingName}/shadow/name/myNamedShadow/update/delta" ] } } } }
YAML
accessControl: aws.greengrass.ipc.pubsub: "com.example.MyShadowReactiveComponent:pubsub:1": policyDescription: Allows access to shadow pubsub topics operations: - 'aws.greengrass#SubscribeToTopic' resources: - $aws/things/{iot:thingName}/shadow/update/delta - $aws/things/{iot:thingName}/shadow/name/myNamedShadow/update/delta
Beispiel: Erlauben Sie einem einzelnen Core-Gerät, auf Änderungen des lokalen Schattenzustands zu reagieren

Die folgende Beispiel-Zugriffskontrollrichtlinie ermöglicht es dem Benutzercom.example.MyShadowReactiveComponent, Nachrichten zum /update/delta Thema für den klassischen Geräteschatten und den benannten Schatten myNamedShadow für das Gerät zu empfangenMyThingName.

JSON
{ "accessControl": { "aws.greengrass.ipc.pubsub": { "com.example.MyShadowReactiveComponent:pubsub:1": { "policyDescription": "Allows access to shadow pubsub topics", "operations": [ "aws.greengrass#SubscribeToTopic" ], "resources": [ "$aws/things/MyThingName/shadow/update/delta", "$aws/things/MyThingName/shadow/name/myNamedShadow/update/delta" ] } } } }
YAML
accessControl: aws.greengrass.ipc.pubsub: "com.example.MyShadowReactiveComponent:pubsub:1": policyDescription: Allows access to shadow pubsub topics operations: - 'aws.greengrass#SubscribeToTopic' resources: - $aws/things/MyThingName/shadow/update/delta - $aws/things/MyThingName/shadow/name/myNamedShadow/update/delta

GetThingShadow

Rufen Sie den Schatten für ein bestimmtes Objekt ab.

Anforderung

Die Anforderung dieser Operation hat die folgenden Parameter:

thingName (Python: thing_name)

Der Name des Objekts.

Typ: string

shadowName (Python: shadow_name)

Der Name des Schattens. Um den klassischen Schatten des Objekts anzugeben, setzen Sie diesen Parameter auf eine leere Zeichenfolge ("").

Warnung

Der AWS IoT Greengrass Service verwendet den AWSManagedGreengrassV2Deployment benannten Schatten, um Bereitstellungen zu verwalten, die auf einzelne Core-Geräte abzielen. Dieser benannte Schatten ist für die Verwendung durch den AWS IoT Greengrass Service reserviert. Aktualisieren oder löschen Sie diesen benannten Schatten nicht.

Typ: string

Antwort

Die Antwort dieser Operation enthält die folgenden Informationen:

payload

Das Antwortstatusdokument als Blob.

Typ: object, der die folgenden Informationen enthält:

state

Die Statusinformationen.

Dieses Objekt enthält die folgenden Informationen.

desired

Die Zustandseigenschaften und -werte, die zur Aktualisierung im Gerät angefordert wurden.

Typ: map von Schlüssel-Wert-Paaren

reported

Die vom Gerät gemeldeten Zustandseigenschaften und -werte.

Typ: map von Schlüssel-Wert-Paaren

delta

Der Unterschied zwischen den gewünschten und gemeldeten Zustandseigenschaften und -werten. Diese Eigenschaft ist nur vorhanden, wenn die reported Status desired und unterschiedlich sind.

Typ: map von Schlüssel-Wert-Paaren

metadata

Die Zeitstempel für jedes Attribut in den reported Abschnitten desired und , sodass Sie feststellen können, wann der Status aktualisiert wurde.

Typ: string

timestamp

Das Epochendatum und die Epochenzeit, zu der die Antwort generiert wurde.

Typ: integer

clientToken (Python: clientToken)

Das Token, das verwendet wird, um die Anforderung und die entsprechende Antwort abzugleichen

Typ: string

version

Die Version des lokalen Schattendokuments.

Typ: integer

Fehler

Dieser Vorgang kann die folgenden Fehler zurückgeben.

InvalidArgumentsError

Der lokale Schattenservice kann die Anforderungsparameter nicht validieren. Dies kann der Fall sein, wenn die Anforderung fehlerhafte JSON- oder nicht unterstützte Zeichen enthält.

ResourceNotFoundError

Das angeforderte lokale Schattendokument kann nicht gefunden werden.

ServiceError

Es ist ein interner Servicefehler aufgetreten oder die Anzahl der Anfragen an den IPC-Service hat die in den maxTotalLocalRequestsRate Konfigurationsparametern maxLocalRequestsPerSecondPerThing und in der Shadow-Manager-Komponente angegebenen Grenzwerte überschritten.

UnauthorizedError

Die Autorisierungsrichtlinie der Komponente enthält keine erforderlichen Berechtigungen für diesen Vorgang.

Beispiele

Die folgenden Beispiele zeigen, wie Sie diese Operation im benutzerdefinierten Komponentencode aufrufen.

Java (IPC client V1)
Beispiel: Abrufen eines Objektschattens
Anmerkung

In diesem Beispiel wird eine -IPCUtilsKlasse verwendet, um eine Verbindung zum AWS IoT Greengrass Core IPC-Service herzustellen. Weitere Informationen finden Sie unter Connect zum AWS IoT Greengrass Core IPC-Dienst her.

package com.aws.greengrass.docs.samples.ipc; import com.aws.greengrass.docs.samples.ipc.util.IPCUtils; import software.amazon.awssdk.aws.greengrass.GetThingShadowResponseHandler; import software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCClient; import software.amazon.awssdk.aws.greengrass.model.GetThingShadowRequest; import software.amazon.awssdk.aws.greengrass.model.GetThingShadowResponse; import software.amazon.awssdk.aws.greengrass.model.ResourceNotFoundError; import software.amazon.awssdk.aws.greengrass.model.UnauthorizedError; import software.amazon.awssdk.eventstreamrpc.EventStreamRPCConnection; import java.nio.charset.StandardCharsets; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; public class GetThingShadow { public static final int TIMEOUT_SECONDS = 10; public static void main(String[] args) { // Use the current core device's name if thing name isn't set. String thingName = args[0].isEmpty() ? System.getenv("AWS_IOT_THING_NAME") : args[0]; String shadowName = args[1]; try (EventStreamRPCConnection eventStreamRPCConnection = IPCUtils.getEventStreamRpcConnection()) { GreengrassCoreIPCClient ipcClient = new GreengrassCoreIPCClient(eventStreamRPCConnection); GetThingShadowResponseHandler responseHandler = GetThingShadow.getThingShadow(ipcClient, thingName, shadowName); CompletableFuture<GetThingShadowResponse> futureResponse = responseHandler.getResponse(); try { GetThingShadowResponse response = futureResponse.get(TIMEOUT_SECONDS, TimeUnit.SECONDS); String shadowPayload = new String(response.getPayload(), StandardCharsets.UTF_8); System.out.printf("Successfully got shadow %s/%s: %s%n", thingName, shadowName, shadowPayload); } catch (TimeoutException e) { System.err.printf("Timeout occurred while getting shadow: %s/%s%n", thingName, shadowName); } catch (ExecutionException e) { if (e.getCause() instanceof UnauthorizedError) { System.err.printf("Unauthorized error while getting shadow: %s/%s%n", thingName, shadowName); } else if (e.getCause() instanceof ResourceNotFoundError) { System.err.printf("Unable to find shadow to get: %s/%s%n", thingName, shadowName); } else { throw e; } } } catch (InterruptedException e) { System.out.println("IPC interrupted."); } catch (ExecutionException e) { System.err.println("Exception occurred when using IPC."); e.printStackTrace(); System.exit(1); } } public static GetThingShadowResponseHandler getThingShadow(GreengrassCoreIPCClient greengrassCoreIPCClient, String thingName, String shadowName) { GetThingShadowRequest getThingShadowRequest = new GetThingShadowRequest(); getThingShadowRequest.setThingName(thingName); getThingShadowRequest.setShadowName(shadowName); return greengrassCoreIPCClient.getThingShadow(getThingShadowRequest, Optional.empty()); } }
Python (IPC client V1)
Beispiel: Abrufen eines Objektschattens
import awsiot.greengrasscoreipc import awsiot.greengrasscoreipc.client as client from awsiot.greengrasscoreipc.model import GetThingShadowRequest TIMEOUT = 10 def sample_get_thing_shadow_request(thingName, shadowName): try: # set up IPC client to connect to the IPC server ipc_client = awsiot.greengrasscoreipc.connect() # create the GetThingShadow request get_thing_shadow_request = GetThingShadowRequest() get_thing_shadow_request.thing_name = thingName get_thing_shadow_request.shadow_name = shadowName # retrieve the GetThingShadow response after sending the request to the IPC server op = ipc_client.new_get_thing_shadow() op.activate(get_thing_shadow_request) fut = op.get_response() result = fut.result(TIMEOUT) return result.payload except InvalidArgumentsError as e: # add error handling ... # except ResourceNotFoundError | UnauthorizedError | ServiceError
JavaScript
Beispiel: Abrufen eines Objektschattens
import { GetThingShadowRequest } from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc/model'; import * as greengrasscoreipc from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc'; class GetThingShadow { private ipcClient: greengrasscoreipc.Client; private thingName: string; private shadowName: string; constructor() { // Define args parameters here this.thingName = "<define_your_own_thingName>"; this.shadowName = "<define_your_own_shadowName>"; this.bootstrap(); } async bootstrap() { try { this.ipcClient = await getIpcClient(); } catch (err) { // parse the error depending on your use cases throw err } try { await this.handleGetThingShadowOperation(this.thingName, this.shadowName); } catch (err) { // parse the error depending on your use cases throw err } } async handleGetThingShadowOperation( thingName: string, shadowName: string ) { const request: GetThingShadowRequest = { thingName: thingName, shadowName: shadowName }; const response = await this.ipcClient.getThingShadow(request); } } export async function getIpcClient() { try { const ipcClient = greengrasscoreipc.createClient(); await ipcClient.connect() .catch(error => { // parse the error depending on your use cases throw error; }); return ipcClient } catch (err) { // parse the error depending on your use caseså throw err } } const startScript = new GetThingShadow();

UpdateThingShadow

Aktualisieren Sie den Schatten für das angegebene Objekt. Wenn kein Schatten vorhanden ist, wird ein Schatten erstellt.

Anforderung

Die Anforderung dieser Operation hat die folgenden Parameter:

thingName (Python: thing_name)

Der Name des Objekts.

Typ: string

shadowName (Python: shadow_name)

Der Name des Schattens. Um den klassischen Schatten des Objekts anzugeben, setzen Sie diesen Parameter auf eine leere Zeichenfolge ("").

Warnung

Der AWS IoT Greengrass Service verwendet den AWSManagedGreengrassV2Deployment benannten Schatten, um Bereitstellungen zu verwalten, die auf einzelne Core-Geräte abzielen. Dieser benannte Schatten ist für die Verwendung durch den AWS IoT Greengrass Service reserviert. Aktualisieren oder löschen Sie diesen benannten Schatten nicht.

Typ: string

payload

Das Anforderungsstatusdokument als Blob.

Typ: object, der die folgenden Informationen enthält:

state

Die zu aktualisierenden Statusinformationen. Diese IPC-Operation wirkt sich nur auf die angegebenen Felder aus.

Dieses Objekt enthält die folgenden Informationen. In der Regel verwenden Sie entweder die -desiredEigenschaft oder die -reportedEigenschaft, aber nicht beides in derselben Anforderung.

desired

Die Zustandseigenschaften und -werte, die für die Aktualisierung im Gerät angefordert wurden.

Typ: map von Schlüssel-Wert-Paaren

reported

Die vom Gerät gemeldeten Zustandseigenschaften und -werte.

Typ: map von Schlüssel-Wert-Paaren

clientToken (Python: client_token)

(Optional) Das Token, das verwendet wird, um die Anforderung und die entsprechende Antwort durch das Client-Token abzugleichen.

Typ: string

version

(Optional) Die Version des lokalen Schattendokuments, das aktualisiert werden soll. Der Schattenservice verarbeitet die Aktualisierung nur, wenn die angegebene Version mit der neuesten Version übereinstimmt, die er hat.

Typ: integer

Antwort

Die Antwort dieser Operation enthält die folgenden Informationen:

payload

Das Antwortstatusdokument als Blob.

Typ: object, der die folgenden Informationen enthält:

state

Die Statusinformationen.

Dieses Objekt enthält die folgenden Informationen.

desired

Die Zustandseigenschaften und -werte, die für die Aktualisierung im Gerät angefordert wurden.

Typ: map von Schlüssel-Wert-Paaren

reported

Die vom Gerät gemeldeten Zustandseigenschaften und -werte.

Typ: map von Schlüssel-Wert-Paaren

delta

Die vom Gerät gemeldeten Zustandseigenschaften und -werte.

Typ: map von Schlüssel-Wert-Paaren

metadata

Die Zeitstempel für jedes Attribut in den reported Abschnitten desired und , sodass Sie feststellen können, wann der Status aktualisiert wurde.

Typ: string

timestamp

Das Epochendatum und die Epochenzeit, zu der die Antwort generiert wurde.

Typ: integer

clientToken (Python: client_token)

Das Token, das verwendet wird, um die Anforderung und die entsprechende Antwort abzugleichen.

Typ: string

version

Die Version des lokalen Schattendokuments nach Abschluss des Updates.

Typ: integer

Fehler

Dieser Vorgang kann die folgenden Fehler zurückgeben.

ConflictError

Beim lokalen Schattenservice ist während des Aktualisierungsvorgangs ein Versionskonflikt aufgetreten. Dies tritt auf, wenn die Version in der Anforderungsnutzlast nicht mit der Version im neuesten verfügbaren lokalen Schattendokument übereinstimmt.

InvalidArgumentsError

Der lokale Schattenservice kann die Anforderungsparameter nicht validieren. Dies kann der Fall sein, wenn die Anforderung fehlerhafte JSON- oder nicht unterstützte Zeichen enthält.

Ein gültiger payload hat die folgenden Eigenschaften:

  • Der state Knoten ist vorhanden und ist ein Objekt, das die - desired oder -reportedStatusinformationen enthält.

  • Die reported Knoten desired und sind entweder Objekte oder Null. Mindestens eines dieser Objekte muss gültige Statusinformationen enthalten.

  • Die Tiefe der reported Objekte desired und darf acht Knoten nicht überschreiten.

  • Die Länge des clientToken Wertes darf 64 Zeichen nicht überschreiten.

  • Der version Wert muss 1 oder höher sein.

ServiceError

Es ist ein interner Servicefehler aufgetreten oder die Anzahl der Anfragen an den IPC-Service hat die in den maxTotalLocalRequestsRate Konfigurationsparametern maxLocalRequestsPerSecondPerThing und in der Shadow-Manager-Komponente angegebenen Grenzwerte überschritten.

UnauthorizedError

Die Autorisierungsrichtlinie der Komponente enthält keine erforderlichen Berechtigungen für diesen Vorgang.

Beispiele

Die folgenden Beispiele zeigen, wie Sie diese Operation im benutzerdefinierten Komponentencode aufrufen.

Java (IPC client V1)
Beispiel: Aktualisieren eines Objektschattens
Anmerkung

In diesem Beispiel wird eine -IPCUtilsKlasse verwendet, um eine Verbindung zum AWS IoT Greengrass Core IPC-Service herzustellen. Weitere Informationen finden Sie unter Connect zum AWS IoT Greengrass Core IPC-Dienst her.

package com.aws.greengrass.docs.samples.ipc; import com.aws.greengrass.docs.samples.ipc.util.IPCUtils; import software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCClient; import software.amazon.awssdk.aws.greengrass.UpdateThingShadowResponseHandler; import software.amazon.awssdk.aws.greengrass.model.UnauthorizedError; import software.amazon.awssdk.aws.greengrass.model.UpdateThingShadowRequest; import software.amazon.awssdk.aws.greengrass.model.UpdateThingShadowResponse; import software.amazon.awssdk.eventstreamrpc.EventStreamRPCConnection; import java.nio.charset.StandardCharsets; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; public class UpdateThingShadow { public static final int TIMEOUT_SECONDS = 10; public static void main(String[] args) { // Use the current core device's name if thing name isn't set. String thingName = args[0].isEmpty() ? System.getenv("AWS_IOT_THING_NAME") : args[0]; String shadowName = args[1]; byte[] shadowPayload = args[2].getBytes(StandardCharsets.UTF_8); try (EventStreamRPCConnection eventStreamRPCConnection = IPCUtils.getEventStreamRpcConnection()) { GreengrassCoreIPCClient ipcClient = new GreengrassCoreIPCClient(eventStreamRPCConnection); UpdateThingShadowResponseHandler responseHandler = UpdateThingShadow.updateThingShadow(ipcClient, thingName, shadowName, shadowPayload); CompletableFuture<UpdateThingShadowResponse> futureResponse = responseHandler.getResponse(); try { futureResponse.get(TIMEOUT_SECONDS, TimeUnit.SECONDS); System.out.printf("Successfully updated shadow: %s/%s%n", thingName, shadowName); } catch (TimeoutException e) { System.err.printf("Timeout occurred while updating shadow: %s/%s%n", thingName, shadowName); } catch (ExecutionException e) { if (e.getCause() instanceof UnauthorizedError) { System.err.printf("Unauthorized error while updating shadow: %s/%s%n", thingName, shadowName); } else { throw e; } } } catch (InterruptedException e) { System.out.println("IPC interrupted."); } catch (ExecutionException e) { System.err.println("Exception occurred when using IPC."); e.printStackTrace(); System.exit(1); } } public static UpdateThingShadowResponseHandler updateThingShadow(GreengrassCoreIPCClient greengrassCoreIPCClient, String thingName, String shadowName, byte[] shadowPayload) { UpdateThingShadowRequest updateThingShadowRequest = new UpdateThingShadowRequest(); updateThingShadowRequest.setThingName(thingName); updateThingShadowRequest.setShadowName(shadowName); updateThingShadowRequest.setPayload(shadowPayload); return greengrassCoreIPCClient.updateThingShadow(updateThingShadowRequest, Optional.empty()); } }
Python (IPC client V1)
Beispiel: Aktualisieren eines Objektschattens
import awsiot.greengrasscoreipc import awsiot.greengrasscoreipc.client as client from awsiot.greengrasscoreipc.model import UpdateThingShadowRequest TIMEOUT = 10 def sample_update_thing_shadow_request(thingName, shadowName, payload): try: # set up IPC client to connect to the IPC server ipc_client = awsiot.greengrasscoreipc.connect() # create the UpdateThingShadow request update_thing_shadow_request = UpdateThingShadowRequest() update_thing_shadow_request.thing_name = thingName update_thing_shadow_request.shadow_name = shadowName update_thing_shadow_request.payload = payload # retrieve the UpdateThingShadow response after sending the request to the IPC server op = ipc_client.new_update_thing_shadow() op.activate(update_thing_shadow_request) fut = op.get_response() result = fut.result(TIMEOUT) return result.payload except InvalidArgumentsError as e: # add error handling ... # except ConflictError | UnauthorizedError | ServiceError
JavaScript
Beispiel: Aktualisieren eines Objektschattens
import { UpdateThingShadowRequest } from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc/model'; import * as greengrasscoreipc from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc'; class UpdateThingShadow { private ipcClient: greengrasscoreipc.Client; private thingName: string; private shadowName: string; private shadowDocumentStr: string; constructor() { // Define args parameters here this.thingName = "<define_your_own_thingName>"; this.shadowName = "<define_your_own_shadowName>"; this.shadowDocumentStr = "<define_your_own_payload>"; this.bootstrap(); } async bootstrap() { try { this.ipcClient = await getIpcClient(); } catch (err) { // parse the error depending on your use cases throw err } try { await this.handleUpdateThingShadowOperation( this.thingName, this.shadowName, this.shadowDocumentStr); } catch (err) { // parse the error depending on your use cases throw err } } async handleUpdateThingShadowOperation( thingName: string, shadowName: string, payloadStr: string ) { const request: UpdateThingShadowRequest = { thingName: thingName, shadowName: shadowName, payload: payloadStr } // make the UpdateThingShadow request const response = await this.ipcClient.updateThingShadow(request); } } export async function getIpcClient() { try { const ipcClient = greengrasscoreipc.createClient(); await ipcClient.connect() .catch(error => { // parse the error depending on your use cases throw error; }); return ipcClient } catch (err) { // parse the error depending on your use cases throw err } } const startScript = new UpdateThingShadow();

DeleteThingShadow

Löscht das Schattengerät für das angegebene Objekt.

Ab Shadow Manager v2.0.4 erhöht das Löschen eines Schattens die Versionsnummer. Wenn Sie beispielsweise den Schatten MyThingShadow in Version 1 löschen, ist die Version des gelöschten Schattens 2. Wenn Sie dann einen Schatten mit dem Namen neu erstellenMyThingShadow, ist die Version für diesen Schatten 3.

Anforderung

Die Anforderung dieser Operation hat die folgenden Parameter:

thingName (Python: thing_name)

Der Name des Objekts.

Typ: string

shadowName (Python: shadow_name)

Der Name des Schattens. Um den klassischen Schatten des Objekts anzugeben, setzen Sie diesen Parameter auf eine leere Zeichenfolge ("").

Warnung

Der AWS IoT Greengrass Service verwendet den AWSManagedGreengrassV2Deployment benannten Schatten, um Bereitstellungen zu verwalten, die auf einzelne Core-Geräte abzielen. Dieser benannte Schatten ist für die Verwendung durch den AWS IoT Greengrass Service reserviert. Aktualisieren oder löschen Sie diesen benannten Schatten nicht.

Typ: string

Antwort

Die Antwort dieser Operation enthält die folgenden Informationen:

payload

Ein leeres Antwortstatusdokument.

Fehler

Dieser Vorgang kann die folgenden Fehler zurückgeben.

InvalidArgumentsError

Der lokale Schattenservice kann die Anforderungsparameter nicht validieren. Dies kann der Fall sein, wenn die Anforderung fehlerhafte JSON- oder nicht unterstützte Zeichen enthält.

ResourceNotFoundError

Das angeforderte lokale Schattendokument kann nicht gefunden werden.

ServiceError

Es ist ein interner Servicefehler aufgetreten oder die Anzahl der Anfragen an den IPC-Service hat die in den maxTotalLocalRequestsRate Konfigurationsparametern maxLocalRequestsPerSecondPerThing und in der Shadow-Manager-Komponente angegebenen Grenzwerte überschritten.

UnauthorizedError

Die Autorisierungsrichtlinie der Komponente enthält keine erforderlichen Berechtigungen für diesen Vorgang.

Beispiele

Die folgenden Beispiele zeigen, wie Sie diese Operation im benutzerdefinierten Komponentencode aufrufen.

Java (IPC client V1)
Beispiel: Löschen eines Objektschattens
Anmerkung

In diesem Beispiel wird eine -IPCUtilsKlasse verwendet, um eine Verbindung zum AWS IoT Greengrass Core IPC-Service herzustellen. Weitere Informationen finden Sie unter Connect zum AWS IoT Greengrass Core IPC-Dienst her.

package com.aws.greengrass.docs.samples.ipc; import com.aws.greengrass.docs.samples.ipc.util.IPCUtils; import software.amazon.awssdk.aws.greengrass.DeleteThingShadowResponseHandler; import software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCClient; import software.amazon.awssdk.aws.greengrass.model.DeleteThingShadowRequest; import software.amazon.awssdk.aws.greengrass.model.DeleteThingShadowResponse; import software.amazon.awssdk.aws.greengrass.model.ResourceNotFoundError; import software.amazon.awssdk.aws.greengrass.model.UnauthorizedError; import software.amazon.awssdk.eventstreamrpc.EventStreamRPCConnection; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; public class DeleteThingShadow { public static final int TIMEOUT_SECONDS = 10; public static void main(String[] args) { // Use the current core device's name if thing name isn't set. String thingName = args[0].isEmpty() ? System.getenv("AWS_IOT_THING_NAME") : args[0]; String shadowName = args[1]; try (EventStreamRPCConnection eventStreamRPCConnection = IPCUtils.getEventStreamRpcConnection()) { GreengrassCoreIPCClient ipcClient = new GreengrassCoreIPCClient(eventStreamRPCConnection); DeleteThingShadowResponseHandler responseHandler = DeleteThingShadow.deleteThingShadow(ipcClient, thingName, shadowName); CompletableFuture<DeleteThingShadowResponse> futureResponse = responseHandler.getResponse(); try { futureResponse.get(TIMEOUT_SECONDS, TimeUnit.SECONDS); System.out.printf("Successfully deleted shadow: %s/%s%n", thingName, shadowName); } catch (TimeoutException e) { System.err.printf("Timeout occurred while deleting shadow: %s/%s%n", thingName, shadowName); } catch (ExecutionException e) { if (e.getCause() instanceof UnauthorizedError) { System.err.printf("Unauthorized error while deleting shadow: %s/%s%n", thingName, shadowName); } else if (e.getCause() instanceof ResourceNotFoundError) { System.err.printf("Unable to find shadow to delete: %s/%s%n", thingName, shadowName); } else { throw e; } } } catch (InterruptedException e) { System.out.println("IPC interrupted."); } catch (ExecutionException e) { System.err.println("Exception occurred when using IPC."); e.printStackTrace(); System.exit(1); } } public static DeleteThingShadowResponseHandler deleteThingShadow(GreengrassCoreIPCClient greengrassCoreIPCClient, String thingName, String shadowName) { DeleteThingShadowRequest deleteThingShadowRequest = new DeleteThingShadowRequest(); deleteThingShadowRequest.setThingName(thingName); deleteThingShadowRequest.setShadowName(shadowName); return greengrassCoreIPCClient.deleteThingShadow(deleteThingShadowRequest, Optional.empty()); } }
Python (IPC client V1)
Beispiel: Löschen eines Objektschattens
import awsiot.greengrasscoreipc import awsiot.greengrasscoreipc.client as client from awsiot.greengrasscoreipc.model import DeleteThingShadowRequest TIMEOUT = 10 def sample_delete_thing_shadow_request(thingName, shadowName): try: # set up IPC client to connect to the IPC server ipc_client = awsiot.greengrasscoreipc.connect() # create the DeleteThingShadow request delete_thing_shadow_request = DeleteThingShadowRequest() delete_thing_shadow_request.thing_name = thingName delete_thing_shadow_request.shadow_name = shadowName # retrieve the DeleteThingShadow response after sending the request to the IPC server op = ipc_client.new_delete_thing_shadow() op.activate(delete_thing_shadow_request) fut = op.get_response() result = fut.result(TIMEOUT) return result.payload except InvalidArgumentsError as e: # add error handling ... # except ResourceNotFoundError | UnauthorizedError | ServiceError
JavaScript
Beispiel: Löschen eines Objektschattens
import { DeleteThingShadowRequest } from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc/model'; import * as greengrasscoreipc from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc'; class DeleteThingShadow { private ipcClient: greengrasscoreipc.Client; private thingName: string; private shadowName: string; constructor() { // Define args parameters here this.thingName = "<define_your_own_thingName>"; this.shadowName = "<define_your_own_shadowName>"; this.bootstrap(); } async bootstrap() { try { this.ipcClient = await getIpcClient(); } catch (err) { // parse the error depending on your use cases throw err } try { await this.handleDeleteThingShadowOperation(this.thingName, this.shadowName) } catch (err) { // parse the error depending on your use cases throw err } } async handleDeleteThingShadowOperation(thingName: string, shadowName: string) { const request: DeleteThingShadowRequest = { thingName: thingName, shadowName: shadowName } // make the DeleteThingShadow request const response = await this.ipcClient.deleteThingShadow(request); } } export async function getIpcClient() { try { const ipcClient = greengrasscoreipc.createClient(); await ipcClient.connect() .catch(error => { // parse the error depending on your use cases throw error; }); return ipcClient } catch (err) { // parse the error depending on your use cases throw err } } const startScript = new DeleteThingShadow();

ListNamedShadowsForThing

Listen Sie die benannten Schatten für das angegebene Objekt auf.

Anforderung

Die Anforderung dieser Operation hat die folgenden Parameter:

thingName (Python: thing_name)

Der Name des Objekts.

Typ: string

pageSize (Python: page_size)

(Optional) Die Anzahl der Schattennamen, die bei jedem Aufruf zurückgegeben werden sollen.

Typ: integer

Standard: 25

Maximum: 100

nextToken (Python: next_token)

(Optional) Das Token, das den nächsten Ergebnissatz abrufen soll. Dieser Wert wird für nach Seiten organisierte Ergebnisse zurückgegeben und in dem Aufruf verwendet, der die nächste Seite zurückgibt.

Typ: string

Antwort

Die Antwort dieser Operation enthält die folgenden Informationen:

results

Die Liste der Schattennamen.

Typ: array

timestamp

(Optional) Das Datum und die Uhrzeit, zu der die Antwort generiert wurde.

Typ: integer

nextToken (Python: next_token)

(Optional) Der Token-Wert, der in ausgelagerten Anforderungen verwendet werden soll, um die nächste Seite in der Sequenz abzurufen. Dieses Token ist nicht vorhanden, wenn keine Schattennamen mehr zurückgegeben werden müssen.

Typ: string

Anmerkung

Wenn die angeforderte Seitengröße genau mit der Anzahl der Schattennamen in der Antwort übereinstimmt, ist dieses Token vorhanden. Bei Verwendung gibt es jedoch eine leere Liste zurück.

Fehler

Dieser Vorgang kann die folgenden Fehler zurückgeben.

InvalidArgumentsError

Der lokale Schattenservice kann die Anforderungsparameter nicht validieren. Dies kann der Fall sein, wenn die Anforderung fehlerhafte JSON- oder nicht unterstützte Zeichen enthält.

ResourceNotFoundError

Das angeforderte lokale Schattendokument kann nicht gefunden werden.

ServiceError

Es ist ein interner Servicefehler aufgetreten oder die Anzahl der Anfragen an den IPC-Service hat die in den maxTotalLocalRequestsRate Konfigurationsparametern maxLocalRequestsPerSecondPerThing und in der Shadow-Manager-Komponente angegebenen Grenzwerte überschritten.

UnauthorizedError

Die Autorisierungsrichtlinie der Komponente enthält keine erforderlichen Berechtigungen für diesen Vorgang.

Beispiele

Die folgenden Beispiele veranschaulichen, wie Sie diese Operation im benutzerdefinierten Komponentencode aufrufen.

Java (IPC client V1)
Beispiel: Auflisten der benannten Schatten eines Objekts
Anmerkung

In diesem Beispiel wird eine -IPCUtilsKlasse verwendet, um eine Verbindung zum AWS IoT Greengrass Core IPC-Service herzustellen. Weitere Informationen finden Sie unter Connect zum AWS IoT Greengrass Core IPC-Dienst her.

package com.aws.greengrass.docs.samples.ipc; import com.aws.greengrass.docs.samples.ipc.util.IPCUtils; import software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCClient; import software.amazon.awssdk.aws.greengrass.ListNamedShadowsForThingResponseHandler; import software.amazon.awssdk.aws.greengrass.model.ListNamedShadowsForThingRequest; import software.amazon.awssdk.aws.greengrass.model.ListNamedShadowsForThingResponse; import software.amazon.awssdk.aws.greengrass.model.ResourceNotFoundError; import software.amazon.awssdk.aws.greengrass.model.UnauthorizedError; import software.amazon.awssdk.eventstreamrpc.EventStreamRPCConnection; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; public class ListNamedShadowsForThing { public static final int TIMEOUT_SECONDS = 10; public static void main(String[] args) { // Use the current core device's name if thing name isn't set. String thingName = args[0].isEmpty() ? System.getenv("AWS_IOT_THING_NAME") : args[0]; try (EventStreamRPCConnection eventStreamRPCConnection = IPCUtils.getEventStreamRpcConnection()) { GreengrassCoreIPCClient ipcClient = new GreengrassCoreIPCClient(eventStreamRPCConnection); List<String> namedShadows = new ArrayList<>(); String nextToken = null; try { // Send additional requests until there's no pagination token in the response. do { ListNamedShadowsForThingResponseHandler responseHandler = ListNamedShadowsForThing.listNamedShadowsForThing(ipcClient, thingName, nextToken, 25); CompletableFuture<ListNamedShadowsForThingResponse> futureResponse = responseHandler.getResponse(); ListNamedShadowsForThingResponse response = futureResponse.get(TIMEOUT_SECONDS, TimeUnit.SECONDS); List<String> responseNamedShadows = response.getResults(); namedShadows.addAll(responseNamedShadows); nextToken = response.getNextToken(); } while (nextToken != null); System.out.printf("Successfully got named shadows for thing %s: %s%n", thingName, String.join(",", namedShadows)); } catch (TimeoutException e) { System.err.println("Timeout occurred while listing named shadows for thing: " + thingName); } catch (ExecutionException e) { if (e.getCause() instanceof UnauthorizedError) { System.err.println("Unauthorized error while listing named shadows for " + "thing: " + thingName); } else if (e.getCause() instanceof ResourceNotFoundError) { System.err.println("Unable to find thing to list named shadows: " + thingName); } else { throw e; } } } catch (InterruptedException e) { System.out.println("IPC interrupted."); } catch (ExecutionException e) { System.err.println("Exception occurred when using IPC."); e.printStackTrace(); System.exit(1); } } public static ListNamedShadowsForThingResponseHandler listNamedShadowsForThing(GreengrassCoreIPCClient greengrassCoreIPCClient, String thingName, String nextToken, int pageSize) { ListNamedShadowsForThingRequest listNamedShadowsForThingRequest = new ListNamedShadowsForThingRequest(); listNamedShadowsForThingRequest.setThingName(thingName); listNamedShadowsForThingRequest.setNextToken(nextToken); listNamedShadowsForThingRequest.setPageSize(pageSize); return greengrassCoreIPCClient.listNamedShadowsForThing(listNamedShadowsForThingRequest, Optional.empty()); } }
Python (IPC client V1)
Beispiel: Auflisten der benannten Schatten eines Objekts
import awsiot.greengrasscoreipc import awsiot.greengrasscoreipc.client as client from awsiot.greengrasscoreipc.model import ListNamedShadowsForThingRequest TIMEOUT = 10 def sample_list_named_shadows_for_thing_request(thingName, nextToken, pageSize): try: # set up IPC client to connect to the IPC server ipc_client = awsiot.greengrasscoreipc.connect() # create the ListNamedShadowsForThingRequest request list_named_shadows_for_thing_request = ListNamedShadowsForThingRequest() list_named_shadows_for_thing_request.thing_name = thingName list_named_shadows_for_thing_request.next_token = nextToken list_named_shadows_for_thing_request.page_size = pageSize # retrieve the ListNamedShadowsForThingRequest response after sending the request to the IPC server op = ipc_client.new_list_named_shadows_for_thing() op.activate(list_named_shadows_for_thing_request) fut = op.get_response() list_result = fut.result(TIMEOUT) # additional returned fields timestamp = list_result.timestamp next_token = result.next_token named_shadow_list = list_result.results return named_shadow_list, next_token, timestamp except InvalidArgumentsError as e: # add error handling ... # except ResourceNotFoundError | UnauthorizedError | ServiceError
JavaScript
Beispiel: Auflisten der benannten Schatten eines Objekts
import { ListNamedShadowsForThingRequest } from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc/model'; import * as greengrasscoreipc from 'aws-iot-device-sdk-v2/dist/greengrasscoreipc'; class listNamedShadowsForThing { private ipcClient: greengrasscoreipc.Client; private thingName: string; private pageSizeStr: string; private nextToken: string; constructor() { // Define args parameters here this.thingName = "<define_your_own_thingName>"; this.pageSizeStr = "<define_your_own_pageSize>"; this.nextToken = "<define_your_own_token>"; this.bootstrap(); } async bootstrap() { try { this.ipcClient = await getIpcClient(); } catch (err) { // parse the error depending on your use cases throw err } try { await this.handleListNamedShadowsForThingOperation(this.thingName, this.nextToken, this.pageSizeStr); } catch (err) { // parse the error depending on your use cases throw err } } async handleListNamedShadowsForThingOperation( thingName: string, nextToken: string, pageSizeStr: string ) { let request: ListNamedShadowsForThingRequest = { thingName: thingName, nextToken: nextToken, }; if (pageSizeStr) { request.pageSize = parseInt(pageSizeStr); } // make the ListNamedShadowsForThing request const response = await this.ipcClient.listNamedShadowsForThing(request); const shadowNames = response.results; } } export async function getIpcClient(){ try { const ipcClient = greengrasscoreipc.createClient(); await ipcClient.connect() .catch(error => { // parse the error depending on your use cases throw error; }); return ipcClient } catch (err) { // parse the error depending on your use cases throw err } } const startScript = new listNamedShadowsForThing();