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.
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 Vorgängen IPC.
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:
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
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
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
.
- 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
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 (""
).
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
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 (""
).
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 -desired
Eigenschaft oder die -reported
Eigenschaft, 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 -reported
Statusinformationen 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
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 (""
).
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
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
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
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();