2015-11-22 1 views
4

Je sais qu'il me manque quelque chose de basique ici mais je suis vraiment bloqué en essayant d'accéder à une ombre de chose sur la plate-forme d'AWS IOT.AWS IOT Lutter contre les trucs de rien

J'utilise le code suivant pour créer une nouvelle chose:

use Aws\Iot\IotClient; 
$thingName = '<string uuid>'; 
$awsIoTClient = new IotClient([ 
    'version' => 'latest', 
    'region' => <region>, 
    'credentials' => [ 
     'key' => <aws_access_key>, 
     'secret' => <aws_secret_key>, 
    ] 
]); 
$policyName = 'Global_Hub_Policy'; 
// # !--------------------------- 
// # !- Implementation 
// # !--------------------------- 
$result = $awsIoTClient->createThing([ 
    'thingName' => $thingName, 
]); 
$result = $awsIoTClient->createKeysAndCertificate([ 
    'setAsActive' => TRUE, 
]); 
$certArn = $result['certificateArn']; 
$certId = $result['certificateId']; 

$certPem = $result['certificatePem']; 
$privateKey = $result['keyPair']['PrivateKey']; 
$awsIoTClient->attachPrincipalPolicy([ 
     'policyName' => $policyName, 
     'principal' => $certArn 
]); 
$awsIoTClient->attachThingPrincipal([ 
     'principal' => $certArn, 
     'thingName' => $thingName 
]); 

Le code ci-dessus est réussi à créer une chose. Je peux voir la chose créée quand je lance:

$awsIoTClient->listThings(); 

Alors quand je tente d'accéder l'ombre de la chose avec le code suivant:

Use Aws\IotDataPlane\IotDataPlaneClient; 
$client = new IotDataPlaneClient([ 
    'version' => 'latest', 
    'region' => <region>, 
    'credentials' => [ 
     'key' => <aws_access_key>, 
     'secret' => <aws_secret_key>, 
    ] 
]); 
$result = $client->getThingShadow([ 
    'thingName' => '<string uuid>', // REQUIRED 
]); 

je reçois l'erreur suivante:

Aws\IotDataPlane\Exception\IotDataPlaneException: Error executing "GetThingShadow" on "https://data.iot.us-east-1.amazonaws.com/things/<string uuid>/shadow"; AWS HTTP error: Client error: 404 ResourceNotFoundException (client): No shadow exists with name: '<string uuid>' - {"message":"No shadow exists with name: '<string uuid>'","traceId":"<traceId>"} in Aws\WrappedHttpHandler->parseError() (line 152 of /<docroot>/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php). 

Couple de choses à noter: L'utilisateur dont l'accès et les clés secrètes sont utilisées pour créer cette chose a les politiques AWS suivantes (nous allons les verrouiller une fois que nous avons ce travail):

- AWSIoTLogging 
- AWSIoTConfigAccess 
- AWSIoTRuleActions 
- AWSIoTConfigReadOnlyAccess 
- AWSIoTDataAccess 
- AWSIoTFullAccess 

Répondre

4

Il s'avère que vous devez mettre à jour l'ombre avant de pouvoir la mettre à jour.

$json = json_encode(['state' => ['desired' => ['test_updated' => "date updated " . date('r')]]]); 
$result = $client->getThingShadow([ 
    'thingName' => $thingname, 
    'payload' => $json, 
]); 

Après que cela renvoie une ombre:

$result = $client->getThingShadow([ 
    'thingName' => '<string uuid>', // REQUIRED 
]); 
+0

« * vous devez mettre à jour l'ombre avant de pouvoir le mettre à jour * »> Voulez-vous dire « * vous devez mettre à jour l'ombre avant peut ** lire ** it * "? –