AWS IoT NodeJS SDK 无法更新命名影子
AWS IoT NodeJS SDK cannot update named shadows
我试图全神贯注于 AWS IoT 命名影子,但我无法订阅或更新命名影子,只能订阅默认影子。
在我的 IoT 控制台中,我有经典影子和一个名为 simShadow1
的命名影子
const awsIoT = require('aws-iot-device-sdk');
const pathToCerts = "./certs";
const thingName = "mySimulatedThing";
const shadowName = "simShadow1";
const options = {
keyPath:`${pathToCerts }/xxxx-private.pem.key`,
certPath:`${pathToCerts }/xxxx-certificate.pem.crt`,
caPath:`${pathToCerts }/rootCa.pem`,
clientId:"xxxx",
host:"xxxx-ats.iot.eu-west-1.amazonaws.com",
debug:true
};
let clientTokenUpdate;
const thinkShadow = awsIoT.thingShadow(options);
thinkShadow.on("connect", ()=>{
console.info("connected to shadow");
thinkShadow.register( thingName, {}, ()=>{
console.debug(`registered to ${thingName} thing`);
console.warn(`about to perform an update on ${thingName}`);
clientTokenUpdate = thinkShadow.update( thingName, {
state:{
desired:{
welcome:"Hello new value",
ts:Date.now()
}
}
});
thinkShadow.subscribe(thingName, {}, (error, result)=>{
console.info("simShadow1 subscription callback", error, result);
});
if(clientTokenUpdate === null){
console.warn('update shadow failed, operation still in progress');
}
});
});
thinkShadow.on('status', (thingName, stat, clientToken, stateObject)=>{
console.debug("on status", thingName, stat, clientToken, stateObject);
});
thinkShadow.on('delta', (thingName, stateObject)=>{
console.debug("on delta", thingName, stateObject);
});
thinkShadow.on('timeout', (thingName, clientToken)=>{
console.debug("on timeout", thingName, clientToken);
});
以上代码运行良好。我可以使用事物名称 (mySimulatedThing) 影响 Classic Shadow,在 AWS IoT 控制台中查看所需值是如何修改的,如果我从 AWS 控制台更改 json 所需值,我可以看到 NodeJS 事件状态和正在调用增量。
但我找不到与命名影子“simShadow1”交互的方法。我尝试将事物名称设置为“mySimulatedThing/simShadow1”、“mySimulatedThing/shadow/name/simShadow1”和许多其他组合。我也尝试过 thinkShadow.register("with the thing name"...),然后在更新和订阅时添加命名影子这样 thinkShadow.update(thingName+"/"+ shadowName, {... }) 和 thinkShadow.subscribe(thingName+"/"+ shadowName, ...).
有人有与命名阴影交互的工作示例吗?
显然我必须将完整路径设置为:
device.subscribe(`$aws/things/${thingName}/shadow/name/${shadowName}/update/accepted`, (error, result)=>{
console.info(">>", error, result);
});
我没想到会设置完整路径。不知道有没有更优雅的解决方案
我处于类似情况 - 我可以使用 GG(v1) 和 IoT Cloud 中的东西进行更新。但是无法影响使用本地影子服务的设备上的状态更改 - 即当我将本地影子服务设为主题而不是事物的订户时。我还在想为什么.....
我试图全神贯注于 AWS IoT 命名影子,但我无法订阅或更新命名影子,只能订阅默认影子。 在我的 IoT 控制台中,我有经典影子和一个名为 simShadow1
的命名影子const awsIoT = require('aws-iot-device-sdk');
const pathToCerts = "./certs";
const thingName = "mySimulatedThing";
const shadowName = "simShadow1";
const options = {
keyPath:`${pathToCerts }/xxxx-private.pem.key`,
certPath:`${pathToCerts }/xxxx-certificate.pem.crt`,
caPath:`${pathToCerts }/rootCa.pem`,
clientId:"xxxx",
host:"xxxx-ats.iot.eu-west-1.amazonaws.com",
debug:true
};
let clientTokenUpdate;
const thinkShadow = awsIoT.thingShadow(options);
thinkShadow.on("connect", ()=>{
console.info("connected to shadow");
thinkShadow.register( thingName, {}, ()=>{
console.debug(`registered to ${thingName} thing`);
console.warn(`about to perform an update on ${thingName}`);
clientTokenUpdate = thinkShadow.update( thingName, {
state:{
desired:{
welcome:"Hello new value",
ts:Date.now()
}
}
});
thinkShadow.subscribe(thingName, {}, (error, result)=>{
console.info("simShadow1 subscription callback", error, result);
});
if(clientTokenUpdate === null){
console.warn('update shadow failed, operation still in progress');
}
});
});
thinkShadow.on('status', (thingName, stat, clientToken, stateObject)=>{
console.debug("on status", thingName, stat, clientToken, stateObject);
});
thinkShadow.on('delta', (thingName, stateObject)=>{
console.debug("on delta", thingName, stateObject);
});
thinkShadow.on('timeout', (thingName, clientToken)=>{
console.debug("on timeout", thingName, clientToken);
});
以上代码运行良好。我可以使用事物名称 (mySimulatedThing) 影响 Classic Shadow,在 AWS IoT 控制台中查看所需值是如何修改的,如果我从 AWS 控制台更改 json 所需值,我可以看到 NodeJS 事件状态和正在调用增量。
但我找不到与命名影子“simShadow1”交互的方法。我尝试将事物名称设置为“mySimulatedThing/simShadow1”、“mySimulatedThing/shadow/name/simShadow1”和许多其他组合。我也尝试过 thinkShadow.register("with the thing name"...),然后在更新和订阅时添加命名影子这样 thinkShadow.update(thingName+"/"+ shadowName, {... }) 和 thinkShadow.subscribe(thingName+"/"+ shadowName, ...).
有人有与命名阴影交互的工作示例吗?
显然我必须将完整路径设置为:
device.subscribe(`$aws/things/${thingName}/shadow/name/${shadowName}/update/accepted`, (error, result)=>{
console.info(">>", error, result);
});
我没想到会设置完整路径。不知道有没有更优雅的解决方案
我处于类似情况 - 我可以使用 GG(v1) 和 IoT Cloud 中的东西进行更新。但是无法影响使用本地影子服务的设备上的状态更改 - 即当我将本地影子服务设为主题而不是事物的订户时。我还在想为什么.....