使用 Azure IoT Central SDK C 将命令值存储在变量中

问题描述 投票:0回答:0

我有一个连接到 Central 并提交遥测数据的 MQTT 设备。我在 Central 上创建了一些在设备上成功触发的命令。但是,当我通过命令发送字符串值时,我无法找到正确的命令将该值存储在变量中以便在代码中进一步使用。我可以显示值的内容如下:

LogInfo("URL: %*s", az_span_size(command.payload)-2, az_span_ptr(command.payload) + 1);

这导致:

[信息] 网址:https://raw.githubusercontent.com/testurl"

然而,当我发送不同的命令(比如版本)并以相同的方式显示它时,我也遇到了一个问题,我得到:

[信息] 固件版本:1.0.1"thubusercontent.com/testurl"

所以我想,我有两个问题:

  1. 如何在 C++ (Arduino) 中将值存储在变量中;和
  2. 如何清除缓冲区以使下一个命令内容不被先前的值污染?

如果我可以使用 az_ 命令集就太好了,因为这一切都发生在 SDK C 上下文中。

非常感谢

尝试使用 az_span_to_string 但它崩溃了。看不到我可以使用的任何其他直接相关的 az_ 函数。

这是正在使用的代码:

if (az_span_is_content_equal(command.command_name, COMMAND_NAME_OTA_URL))
  {
    LogInfo("URL: %*s", az_span_size(command.payload)-2, az_span_ptr(command.payload) + 1);
    response_code = COMMAND_RESPONSE_CODE_ACCEPTED;
  }
  else if (az_span_is_content_equal(command.command_name, COMMAND_NAME_TOGGLE_C12880))
  {
    SEN_C12880 = !SEN_C12880;
    LogInfo("Sensor State: %s", (SEN_C12880 ? "ON" : "OFF"));
    response_code = COMMAND_RESPONSE_CODE_ACCEPTED;
  }
  else if (az_span_is_content_equal(command.command_name, COMMAND_NAME_TOGGLE_FIRMWARE_VERSION))
  {
      LogInfo("Firmware Version: %*s", az_span_size(command.payload)-2, az_span_ptr(command.payload) + 1);
      response_code = COMMAND_RESPONSE_CODE_ACCEPTED;
  }
  else if (az_span_is_content_equal(command.command_name, COMMAND_NAME_DISPLAY_TEXT))
  {
    // The payload comes surrounded by quotes, so to remove them we offset the payload by 1 and its size by 2.
    LogInfo("OLED display: %.*s", az_span_size(command.payload) - 2, az_span_ptr(command.payload) + 1);
    response_code = COMMAND_RESPONSE_CODE_ACCEPTED;
  }
  else
  {
    LogError("Command not recognized (%.*s).", az_span_size(command.command_name), az_span_ptr(command.command_name));
    response_code = COMMAND_RESPONSE_CODE_REJECTED;
  }
azure-iot-hub arduino-c++ arduino-esp32 azure-iot-sdk azure-iot-central
© www.soinside.com 2019 - 2024. All rights reserved.