-3

我只需要使用适用于 node.js 的 Azure 设备 sdk 获取设备的双胞胎。我确实使用了如下客户端代码:-

import { Client } from 'azure-iot-device';
import { Mqtt } from 'azure-iot-device-mqtt';
await client.setOptions(options);
await client.open();
const twin = await client.getTwin();

问题是返回的双胞胎没有设备双胞胎字段,但其他字段如下:-

{
  _events: [Object: null prototype] { newListener: [Function: bound ] },
  _eventsCount: 1,
  _maxListeners: undefined,
  _transport: Mqtt {
    _events: [Object: null prototype] {
      error: [Function],
      connected: [Function],
      disconnect: [Array],
      message: [Function],
      twinDesiredPropertiesUpdate: [Function: bound ]
    },
    _eventsCount: 5,
    _maxListeners: undefined,
    _mid: '',
    _firstConnection: false,
    _authenticationProvider: X509AuthenticationProvider { type: 0, _credentials: [Object] },
    _mqtt: MqttBase {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      mqttProvider: [Object],
      _onTheWirePublishes: [OnTheWireMessageContainer],
      _fsm: [constructor],
      _options: [Object],
      _config: [Object],
      _mqttClient: [MqttClient],
      [Symbol(kCapture)]: false
    },
    _twinClient: MqttTwinClient {
      _events: [Object: null prototype],
      _eventsCount: 1,
      _maxListeners: undefined,
      _pendingTwinRequests: {},
      _mqtt: [MqttBase],
      _topicFsm: [BehavioralFsm],
      _responseTopic: [Object],
      _desiredPropertiesUpdatesTopic: [Object],
      [Symbol(kCapture)]: false
    },
    _fsm: constructor {
      initialState: 'disconnected',
      states: [Object],
      eventListeners: [Object],
      namespace: 'fsm.2',
      useSafeEmit: false,
      hierarchy: {},
      pendingDelegations: {},
      _stamped: true,
      inputQueue: [],
      targetReplayState: 'connected',
      state: 'connected',
      priorState: 'connecting',
      priorAction: 'connected.getTwin',
      currentAction: '',
      currentActionArgs: undefined,
      inExitHandler: false
    },
    _topicTelemetryPublish: 'devices/amidha/messages/events/',
    _topics: { method: [Object], message: [Object] },
    _userAgentString: 'azure-iot-device/1.17.1 (node v12.18.0; Ubuntu 18.04; x64)',
    [Symbol(kCapture)]: false
  },
  _retryPolicy: ExponentialBackOffWithJitter {
    _errorFilter: DefaultErrorFilter {
      ArgumentError: false,
      ArgumentOutOfRangeError: false,
      DeviceMaximumQueueDepthExceededError: false,
      DeviceNotFoundError: false,
      FormatError: false,
      UnauthorizedError: false,
      NotImplementedError: false,
      NotConnectedError: true,
      IotHubQuotaExceededError: false,
      MessageTooLargeError: false,
      InternalServerError: true,
      ServiceUnavailableError: true,
      IotHubNotFoundError: false,
      IoTHubSuspendedError: false,
      JobNotFoundError: false,
      TooManyDevicesError: false,
      ThrottlingError: true,
      DeviceAlreadyExistsError: false,
      DeviceMessageLockLostError: false,
      InvalidEtagError: false,
      InvalidOperationError: false,
      PreconditionFailedError: false,
      TimeoutError: true,
      BadDeviceResponseError: false,
      GatewayTimeoutError: false,
      DeviceTimeoutError: false,
      TwinRequestError: false
    },
    immediateFirstRetry: true,
    normalParameters: ExponentialBackoffWithJitterParameters {
      c: 100,
      cMin: 100,
      cMax: 10000,
      ju: 0.25,
      jd: 0.5
    },
    throttledParameters: ExponentialBackoffWithJitterParameters {
      c: 5000,
      cMin: 10000,
      cMax: 60000,
      ju: 0.25,
      jd: 0.5
    }
  },
  _maxOperationTimeout: 240000,
  desiredPropertiesUpdatesEnabled: false,
  properties: {
    reported: { update: [Function: update], '$version': 1 },
    desired: { '$version': 1 }
  },
  [Symbol(kCapture)]: false
}

我不想听我可以通过使用上述对象轻松完成的孪生更改事件twin.on。我只需要获取设备的当前双胞胎。是否可以?

4

3 回答 3

1

在阅读了您的评论后,您似乎期望某些值对设备不可用(当您使用设备 SDK 时)。设备可以读取和接收所需属性的更新以及读取/写入报告的属性,其余的不可用。

可用操作

在评论中,您提到您希望在孪生中找到 deviceScope,但这不适用于设备 SDK。为此,您需要服务 SDK。

当您打印 的结果时const twin = await client.getTwin();,您会看到一个带有辅助方法的对象,用于订阅所需的属性更改并修补新报告的属性。就像马克在他的问题中所说的那样,你的双胞胎的属性也包含在这个对象中。

于 2020-09-15T05:31:59.480 回答
0

当前双胞胎在您发布的 JSON 中。请参阅部分属性:

 properties: {
    reported: { update: [Function: update], '$version': 1 },
    desired: { '$version': 1 }
  },

您发布的双胞胎是空的。

于 2020-09-11T17:32:18.240 回答
0

上述方法无法从设备 IoT sdk 中获取整个双胞胎,而不仅仅是所需和报告的属性,Azure 也证实了这一点。在这里检查。

该链路还具有在叶子和边缘设备之间分配父子关系的解决方案。

于 2020-09-15T06:26:36.470 回答