我已经注册了一个测试帐户来测试Cumulocity及其mqtt api。 我想将操作发送到某些设备(当前由Java服务模拟)并接收操作结果。
按照手册,我使用以下链接:
以下代码用于对累积量做出响应。
if (payload.startsWith("510")) {
System.out.println("Simulating device restart...");
client.publish("s/us", "501,c8y_Restart".getBytes(), 2, false);
System.out.println("...restarting...");
Thread.sleep(TimeUnit.SECONDS.toMillis(1));
client.publish("s/us", "503,c8y_Restart".getBytes(), 2, false);
System.out.println("...done...");
}
501
代码表示重启操作已开始,503
代码表示设备重启成功。
但是实际上,在Cumulocity UI中,操作状态已更改为Pending
。
如果我再次发送restart
操作,前一个操作将更改为Success
,而新操作将更改为Pending
。
那么,我在做什么错了?
我希望将操作标记为Failed
或Success
。
答案 0 :(得分:0)
“待处理”状态始终是Cumulocity中每个操作的初始状态。 用于操作的SmartREST MQTT始终遵循以下顺序:
待处理->执行->成功/失败
SmartREST将始终更新最早的操作(因为我们要按历史顺序执行操作)。
因此,如果您发送501,它将在PENDING状态下寻找最早的匹配操作。 如果您发送503,它将在执行状态下查找最早的匹配操作。
根据您的解释,尚不清楚在执行代码时是否已经进行了两次重启操作。您的代码是完全正确的,但是如果已经有两次重新启动操作,这将解释为什么现在一个成功,而另一个仍在挂起中。