<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="cloudiot_v1.html">Cloud IoT API</a> . <a href="cloudiot_v1.projects.html">projects</a> . <a href="cloudiot_v1.projects.locations.html">locations</a> . <a href="cloudiot_v1.projects.locations.registries.html">registries</a> . <a href="cloudiot_v1.projects.locations.registries.groups.html">groups</a> . <a href="cloudiot_v1.projects.locations.registries.groups.devices.html">devices</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(parent, fieldMask=None, pageToken=None, pageSize=None, deviceIds=None, gatewayListOptions_associationsDeviceId=None, deviceNumIds=None, gatewayListOptions_gatewayType=None, gatewayListOptions_associationsGatewayId=None, x__xgafv=None)</a></code></p>
<p class="firstline">List devices in a device registry.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(parent, fieldMask=None, pageToken=None, pageSize=None, deviceIds=None, gatewayListOptions_associationsDeviceId=None, deviceNumIds=None, gatewayListOptions_gatewayType=None, gatewayListOptions_associationsGatewayId=None, x__xgafv=None)</code>
  <pre>List devices in a device registry.

Args:
  parent: string, Required. The device registry path. Required. For example,
`projects/my-project/locations/us-central1/registries/my-registry`. (required)
  fieldMask: string, The fields of the `Device` resource to be returned in the response. The
fields `id` and `num_id` are always returned, along with any
other fields specified.
  pageToken: string, The value returned by the last `ListDevicesResponse`; indicates
that this is a continuation of a prior `ListDevices` call and
the system should return the next page of data.
  pageSize: integer, The maximum number of devices to return in the response. If this value
is zero, the service will select a default size. A call may return fewer
objects than requested. A non-empty `next_page_token` in the response
indicates that more data is available.
  deviceIds: string, A list of device string IDs. For example, `[&#x27;device0&#x27;, &#x27;device12&#x27;]`.
If empty, this field is ignored. Maximum IDs: 10,000 (repeated)
  gatewayListOptions_associationsDeviceId: string, If set, returns only the gateways with which the specified device is
associated. The device ID can be numeric (`num_id`) or the user-defined
string (`id`). For example, if `456` is specified, returns only the
gateways to which the device with `num_id` 456 is bound.
  deviceNumIds: string, A list of device numeric IDs. If empty, this field is ignored. Maximum
IDs: 10,000. (repeated)
  gatewayListOptions_gatewayType: string, If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY`
is specified, only non-gateway devices are returned. If
`GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.
  gatewayListOptions_associationsGatewayId: string, If set, only devices associated with the specified gateway are returned.
The gateway ID can be numeric (`num_id`) or the user-defined string
(`id`). For example, if `123` is specified, only devices bound to the
gateway with `num_id` 123 are returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for `ListDevices`.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If not empty, indicates that there may be more devices that match the
        # request; this value should be passed in a new `ListDevicesRequest`.
    &quot;devices&quot;: [ # The devices that match the request.
      { # The device resource.
        &quot;lastErrorStatus&quot;: { # The `Status` type defines a logical error model that is suitable for # [Output only] The error message of the most recent error, such as a failure
            # to publish to Cloud Pub/Sub. &#x27;last_error_time&#x27; is the timestamp of this
            # field. If no errors have occurred, this field has an empty message
            # and the status code 0 == OK. Otherwise, this field is expected to have a
            # status code other than OK.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
            # three pieces of data: error code, error message, and error details.
            #
            # You can find out more about this error model and how to work with it in the
            # [API Design Guide](https://cloud.google.com/apis/design/errors).
          &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
              # user-facing error message should be localized and sent in the
              # google.rpc.Status.details field, or localized by the client.
        },
        &quot;lastStateTime&quot;: &quot;A String&quot;, # [Output only] The last time a state event was received. Timestamps are
            # periodically collected and written to storage; they may be stale by a few
            # minutes.
        &quot;config&quot;: { # The device configuration. Eventually delivered to devices. # The most recent device configuration, which is eventually sent from
            # Cloud IoT Core to the device. If not present on creation, the
            # configuration will be initialized with an empty payload and version value
            # of `1`. To update this field after creation, use the
            # `DeviceManager.ModifyCloudToDeviceConfig` method.
          &quot;version&quot;: &quot;A String&quot;, # [Output only] The version of this update. The version number is assigned by
              # the server, and is always greater than 0 after device creation. The
              # version must be 0 on the `CreateDevice` request if a `config` is
              # specified; the response of `CreateDevice` will always have a value of 1.
          &quot;cloudUpdateTime&quot;: &quot;A String&quot;, # [Output only] The time at which this configuration version was updated in
              # Cloud IoT Core. This timestamp is set by the server.
          &quot;deviceAckTime&quot;: &quot;A String&quot;, # [Output only] The time at which Cloud IoT Core received the
              # acknowledgment from the device, indicating that the device has received
              # this configuration version. If this field is not present, the device has
              # not yet acknowledged that it received this version. Note that when
              # the config was sent to the device, many config versions may have been
              # available in Cloud IoT Core while the device was disconnected, and on
              # connection, only the latest version is sent to the device. Some
              # versions may never be sent to the device, and therefore are never
              # acknowledged. This timestamp is set by Cloud IoT Core.
          &quot;binaryData&quot;: &quot;A String&quot;, # The device configuration data.
        },
        &quot;state&quot;: { # The device state, as reported by the device. # [Output only] The state most recently received from the device. If no state
            # has been reported, this field is not present.
          &quot;updateTime&quot;: &quot;A String&quot;, # [Output only] The time at which this state version was updated in Cloud
              # IoT Core.
          &quot;binaryData&quot;: &quot;A String&quot;, # The device state data.
        },
        &quot;name&quot;: &quot;A String&quot;, # The resource path name. For example,
            # `projects/p1/locations/us-central1/registries/registry0/devices/dev0` or
            # `projects/p1/locations/us-central1/registries/registry0/devices/{num_id}`.
            # When `name` is populated as a response from the service, it always ends
            # in the device numeric ID.
        &quot;credentials&quot;: [ # The credentials used to authenticate this device. To allow credential
            # rotation without interruption, multiple device credentials can be bound to
            # this device. No more than 3 credentials can be bound to a single device at
            # a time. When new credentials are added to a device, they are verified
            # against the registry credentials. For details, see the description of the
            # `DeviceRegistry.credentials` field.
          { # A server-stored device credential used for authentication.
            &quot;expirationTime&quot;: &quot;A String&quot;, # [Optional] The time at which this credential becomes invalid. This
                # credential will be ignored for new client authentication requests after
                # this timestamp; however, it will not be automatically deleted.
            &quot;publicKey&quot;: { # A public key format and data. # A public key used to verify the signature of JSON Web Tokens (JWTs).
                # When adding a new device credential, either via device creation or via
                # modifications, this public key credential may be required to be signed by
                # one of the registry level certificates. More specifically, if the
                # registry contains at least one certificate, any new device credential
                # must be signed by one of the registry certificates. As a result,
                # when the registry contains certificates, only X.509 certificates are
                # accepted as device credentials. However, if the registry does
                # not contain a certificate, self-signed certificates and public keys will
                # be accepted. New device credentials must be different from every
                # registry-level certificate.
              &quot;key&quot;: &quot;A String&quot;, # The key data.
              &quot;format&quot;: &quot;A String&quot;, # The format of the key.
            },
          },
        ],
        &quot;lastErrorTime&quot;: &quot;A String&quot;, # [Output only] The time the most recent error occurred, such as a failure to
            # publish to Cloud Pub/Sub. This field is the timestamp of
            # &#x27;last_error_status&#x27;.
        &quot;metadata&quot;: { # The metadata key-value pairs assigned to the device. This metadata is not
            # interpreted or indexed by Cloud IoT Core. It can be used to add contextual
            # information for the device.
            #
            # Keys must conform to the regular expression a-zA-Z+ and
            # be less than 128 bytes in length.
            #
            # Values are free-form strings. Each value must be less than or equal to 32
            # KB in size.
            #
            # The total size of all keys and values must be less than 256 KB, and the
            # maximum number of key-value pairs is 500.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;logLevel&quot;: &quot;A String&quot;, # **Beta Feature**
            #
            # The logging verbosity for device activity. If unspecified,
            # DeviceRegistry.log_level will be used.
        &quot;id&quot;: &quot;A String&quot;, # The user-defined device identifier. The device ID must be unique
            # within a device registry.
        &quot;lastConfigAckTime&quot;: &quot;A String&quot;, # [Output only] The last time a cloud-to-device config version acknowledgment
            # was received from the device. This field is only for configurations
            # sent through MQTT.
        &quot;gatewayConfig&quot;: { # Gateway-related configuration and state. # Gateway-related configuration and state.
          &quot;lastAccessedGatewayId&quot;: &quot;A String&quot;, # [Output only] The ID of the gateway the device accessed most recently.
          &quot;gatewayAuthMethod&quot;: &quot;A String&quot;, # Indicates how to authorize and/or authenticate devices to access the
              # gateway.
          &quot;lastAccessedGatewayTime&quot;: &quot;A String&quot;, # [Output only] The most recent time at which the device accessed the gateway
              # specified in `last_accessed_gateway`.
          &quot;gatewayType&quot;: &quot;A String&quot;, # Indicates whether the device is a gateway.
        },
        &quot;numId&quot;: &quot;A String&quot;, # [Output only] A server-defined unique numeric ID for the device. This is a
            # more compact way to identify devices, and it is globally unique.
        &quot;blocked&quot;: True or False, # If a device is blocked, connections or requests from this device will fail.
            # Can be used to temporarily prevent the device from connecting if, for
            # example, the sensor is generating bad data and needs maintenance.
        &quot;lastHeartbeatTime&quot;: &quot;A String&quot;, # [Output only] The last time an MQTT `PINGREQ` was received. This field
            # applies only to devices connecting through MQTT. MQTT clients usually only
            # send `PINGREQ` messages if the connection is idle, and no other messages
            # have been sent. Timestamps are periodically collected and written to
            # storage; they may be stale by a few minutes.
        &quot;lastEventTime&quot;: &quot;A String&quot;, # [Output only] The last time a telemetry event was received. Timestamps are
            # periodically collected and written to storage; they may be stale by a few
            # minutes.
        &quot;lastConfigSendTime&quot;: &quot;A String&quot;, # [Output only] The last time a cloud-to-device config version was sent to
            # the device.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>