检索和列出设备状态。
深入探索
如需查看包含此代码示例的详细文档,请参阅以下内容:
代码示例
C#
public static object GetDeviceStates(string projectId, string cloudRegion, string registryId, string deviceId)
{
var cloudIot = CreateAuthorizedClient();
// The resource name of the location associated with the key rings.
var name = $"projects/{projectId}/locations/{cloudRegion}/registries/{registryId}/devices/{deviceId}";
try
{
Console.WriteLine("States: ");
var res = cloudIot.Projects.Locations.Registries.Devices.States.List(name).Execute();
res.DeviceStates.ToList().ForEach(state =>
{
Console.WriteLine($"\t{state.UpdateTime}: {state.BinaryData}");
});
}
catch (Google.GoogleApiException e)
{
Console.WriteLine(e.Message);
if (e.Error != null) return e.Error.Code;
return -1;
}
return 0;
}
Go
// getDeviceStates retrieves and lists device states.
func getDeviceStates(w io.Writer, projectID string, region string, registryID string, device string) ([]*cloudiot.DeviceState, error) {
// Authorize the client using Application Default Credentials.
// See https://g.co/dv/identity/protocols/application-default-credentials
ctx := context.Background()
httpClient, err := google.DefaultClient(ctx, cloudiot.CloudPlatformScope)
if err != nil {
return nil, err
}
client, err := cloudiot.New(httpClient)
if err != nil {
return nil, err
}
path := fmt.Sprintf("projects/%s/locations/%s/registries/%s/devices/%s", projectID, region, registryID, device)
response, err := client.Projects.Locations.Registries.Devices.States.List(path).Do()
if err != nil {
return nil, err
}
fmt.Fprintln(w, "Successfully retrieved device states!")
for _, state := range response.DeviceStates {
fmt.Fprintf(w, "%s : %s\n", state.UpdateTime, state.BinaryData)
}
return response.DeviceStates, nil
}
Java
/** Retrieves device metadata from a registry. * */
protected static List<DeviceState> getDeviceStates(
String deviceId, String projectId, String cloudRegion, String registryName)
throws GeneralSecurityException, IOException {
GoogleCredentials credential =
GoogleCredentials.getApplicationDefault().createScoped(CloudIotScopes.all());
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
HttpRequestInitializer init = new HttpCredentialsAdapter(credential);
final CloudIot service =
new CloudIot.Builder(GoogleNetHttpTransport.newTrustedTransport(), jsonFactory, init)
.setApplicationName(APP_NAME)
.build();
final String devicePath =
String.format(
"projects/%s/locations/%s/registries/%s/devices/%s",
projectId, cloudRegion, registryName, deviceId);
System.out.println("Retrieving device states " + devicePath);
ListDeviceStatesResponse resp =
service.projects().locations().registries().devices().states().list(devicePath).execute();
return resp.getDeviceStates();
}
Node.js
// const cloudRegion = 'us-central1';
// const deviceId = 'my-device';
// const projectId = 'adjective-noun-123';
// const registryId = 'my-registry';
const iot = require('@google-cloud/iot');
const iotClient = new iot.v1.DeviceManagerClient({
// optional auth parameters.
});
async function listDeviceStates() {
const devicePath = iotClient.devicePath(
projectId,
cloudRegion,
registryId,
deviceId
);
const [response] = await iotClient.listDeviceStates({name: devicePath});
const states = response.deviceStates;
if (states.length === 0) {
console.log(`No States for device: ${deviceId}`);
} else {
console.log(`States for device: ${deviceId}`);
}
for (let i = 0; i < states.length; i++) {
const state = states[i];
console.log(
'State:',
state,
'\nData:\n',
state.binaryData.toString('utf8')
);
}
}
listDeviceStates();
PHP
use Google\Cloud\Iot\V1\DeviceManagerClient;
/**
* Retrieve a device's state blobs.
*
* @param string $registryId IOT Device Registry ID
* @param string $deviceId IOT Device ID
* @param string $projectId Google Cloud project ID
* @param string $location (Optional) Google Cloud region
*/
function get_device_state(
$registryId,
$deviceId,
$projectId,
$location = 'us-central1'
) {
print('Getting device state' . PHP_EOL);
// Instantiate a client.
$deviceManager = new DeviceManagerClient();
$deviceName = $deviceManager->deviceName($projectId, $location, $registryId, $deviceId);
$response = $deviceManager->listDeviceStates($deviceName);
foreach ($response->getDeviceStates() as $state) {
print('State:' . PHP_EOL);
printf(' Data: %s' . PHP_EOL, $state->getBinaryData());
printf(' Update Time: %s' . PHP_EOL,
$state->getUpdateTime()->toDateTime()->format('Y-m-d H:i:s'));
}
}
Python
# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# registry_id = 'your-registry-id'
# device_id = 'your-device-id'
client = iot_v1.DeviceManagerClient()
device_path = client.device_path(project_id, cloud_region, registry_id, device_id)
device = client.get_device(request={"name": device_path})
print("Last state: {}".format(device.state))
print("State history")
states = client.list_device_states(request={"name": device_path}).device_states
for state in states:
print("State: {}".format(state))
return states
Ruby
# project_id = "Your Google Cloud project ID"
# location_id = "The Cloud region the registry is located in"
# registry_id = "The registry to get device states from"
# device_id = "The identifier of the device to get states for"
require "google/apis/cloudiot_v1"
# Initialize the client and authenticate with the specified scope
Cloudiot = Google::Apis::CloudiotV1
iot_client = Cloudiot::CloudIotService.new
iot_client.authorization = Google::Auth.get_application_default(
"https://www.googleapis.com/auth/cloud-platform"
)
# The resource name of the location associated with the project
parent = "projects/#{project_id}/locations/#{location_id}"
resource = "#{parent}/registries/#{registry_id}/devices/#{device_id}"
# List the configurations for the provided device
result = iot_client.list_project_location_registry_device_states(
resource
)
if result.device_states
result.device_states.each do |state|
puts "#{state.update_time}: #{state.binary_data}"
end
else
puts "No state messages"
end
后续步骤
如需搜索和过滤其他 Google Cloud 产品的代码示例,请参阅 Google Cloud 示例浏览器。