Azure IoT Central-显示命令执行结果

Azure IoT Central-显示命令执行结果,azure,azure-iot-central,Azure,Azure Iot Central,如何在物联网中心-命令页面中显示命令结果 流量: 发送到设备的命令 设备收到命令并返回有效负载: 如何在物联网中心显示此数据 现在,IoT Central仅显示默认的“发送时间…”消息。如果在设备上处理命令时设置了与命令同名的报告属性,则可以设置显示在IoT Central UI中的值。例如,使用Node.js可以为倒计时方法创建一个处理程序,如下所示: function onCountdown(request, response) { console.log('received a

如何在物联网中心-命令页面中显示命令结果

流量:

  • 发送到设备的命令
  • 设备收到命令并返回有效负载:
如何在物联网中心显示此数据


现在,IoT Central仅显示默认的“发送时间…”消息。

如果在设备上处理命令时设置了与命令同名的报告属性,则可以设置显示在IoT Central UI中的值。例如,使用Node.js可以为倒计时方法创建一个处理程序,如下所示:

function onCountdown(request, response) {
  console.log('received a request for Countdown');
  console.log(JSON.stringify(request.payload, null, 2));
  var fakeResponsePayload = {
    key: 'value'
  };

  response.send(200, fakeResponsePayload, function (err) {
    if (err) {
      console.error('Unable to send method response: ' + err.toString());
    } else {
      console.log('response to Countdown sent.');
      client.getTwin(function(err, twin) {
        if (err) {
          console.error('could not get twin');
        } else {
          console.log('twin created');
          var patch = {
            countdown:{
              value: 18
            }
          };
          twin.properties.reported.update(patch, function(err) {
            if (err) {
              console.error('unable to update twin: ' + err.toString());
            } else {
              console.log('twin state reported');
            }
          });
        }
      });      
    }
  });
}

client.onDeviceMethod('countdown', onCountdown);
请注意,命令字段名的名称为倒计时


这里还有一个C++例子:

看起来Azure IOT中心的当前版本不允许显示这个有效载荷或者映射到App属性。请向团队反馈:完成!请投票:它有效,谢谢!如果您与MSI有关,请将此示例添加到文档中。如果我没有弄错,Azure IoT Central应用程序不会处理来自device direct方法的真实响应和状态,但它会显示与命令同名的报告属性值(device direct方法名称)?换句话说,如果设备在任何时候更新了这个报告的属性,那么这个值就会显示在这个命令仪表板中,而不调用它,不是吗?这在我的测试中发生过。除此之外,Azure IoT Central应用程序没有处理来自设备直接方法的错误(状态)。它总是像OK(200)一样被接受。@el niko你如何显示你的响应有效载荷对象?@el niko这是我的观点。设备代码必须使用额外的两个调用来处理twin属性(例如GET和PATCH),然后发送假响应。如果发生某种情况,物联网中心不会显示此错误,请始终像OK(200)一样处理。除此之外,如果您的后端使用多个调用程序(例如HTTPs客户端和IoTC),此“不处理响应和状态”和修补报告属性可能会产生一些设计问题,换句话说,它使设备直接方法成为“脏”方法,而不是清晰的通用请求/响应消息交换模式。@el niko另外,在报告的属性和直接名称(命令)之间有一个“harcoded name”,并限制值,例如仅限数字、文本、日期和切换,对于复杂或简单对象,它将显示文本[对象]。我期望在该功能中映射到物联网中央应用程序属性的响应。当然,在这种情况下,将设备从Azure IoT Hub迁移到Azure IoT Central应用程序是修改设备代码(例如添加GET和PATCH reported属性)所必需的
function onCountdown(request, response) {
  console.log('received a request for Countdown');
  console.log(JSON.stringify(request.payload, null, 2));
  var fakeResponsePayload = {
    key: 'value'
  };

  response.send(200, fakeResponsePayload, function (err) {
    if (err) {
      console.error('Unable to send method response: ' + err.toString());
    } else {
      console.log('response to Countdown sent.');
      client.getTwin(function(err, twin) {
        if (err) {
          console.error('could not get twin');
        } else {
          console.log('twin created');
          var patch = {
            countdown:{
              value: 18
            }
          };
          twin.properties.reported.update(patch, function(err) {
            if (err) {
              console.error('unable to update twin: ' + err.toString());
            } else {
              console.log('twin state reported');
            }
          });
        }
      });      
    }
  });
}

client.onDeviceMethod('countdown', onCountdown);