このページでは、デバイス レジストリとそれに含まれるデバイスを作成、編集、削除する方法について説明します。
デバイスとは、「モノのインターネット」の「モノ」であり、(直接的または間接的に)インターネットに接続し、クラウドとデータを交換できる処理装置です。デバイス レジストリは、共有プロパティを持つデバイスのコンテナです。デバイスとレジストリの詳細については、デバイスをご覧ください。
スタートガイドの手順をまだ行っていない場合は、こちらを行ってから続行してください。
端末レジストリを作成する
Cloud IoT Core を使用するには、少なくとも 1 つのデバイス レジストリを作成する必要があります。レジストリは、Google Cloud コンソール、API、gcloud を使用して作成できます。
Console
- Google Cloud コンソールで、[レジストリ] ページに移動します。
ページの上部にある [レジストリの作成] をクリックします。
[レジストリ ID] を入力し、[クラウド リージョン] を選択します。レジストリの命名と長さの要件については、使用可能な文字と長さの要件をご覧ください。
このレジストリ内のデバイスで Cloud IoT Core への接続に使用されるプロトコルを選択します(MQTT、HTTP、またはその両方)。
デフォルトのテレメトリーのトピックを選択するか、新しいテレメトリーを作成します。
デフォルトのトピックは、サブフォルダを持たない公開テレメトリー イベントに使用されます。また、使用されるサブフォルダに一致する Cloud Pub/Sub トピックがない場合にも使用されます。
(省略可)デバイスから別々のデータ ストリームを公開する場合は、テレメトリー トピックを追加します。
各トピックは、データの公開時に、MQTT トピックパスまたは HTTP リクエストで指定されたサブフォルダにマッピングされます。
追加のテレメトリー トピックを作成するには:
a. [Add more telemetry topics] をクリックし、[Add topic and subfolder] をクリックします。
b. Pub/Sub トピックを選択するか、新しいトピックを作成します。
c. わかりやすいサブフォルダ名を入力します。
サブフォルダの命名と長さの要件については、使用可能な文字と長さの要件をご覧ください。
(省略可)デバイス状態のトピックを選択するか、新しいトピックを作成します。このトピックは、テレメトリー トピックと同じにすることも、状態データにのみ使用することもできます。
状態データはベスト エフォート方式で Cloud Pub/Sub に公開されます。トピックへの公開に失敗した場合、再試行はされません。トピックが定義されていない場合、デバイス状態の更新は Cloud IoT Core によって内部的に保持されますが、保持されるのは最新の 10 個の状態のみです。
詳細については、デバイスの状態の取得をご覧ください。
[作成] をクリックして続行します。
gcloud
レジストリを作成するには、gcloud iot registries create
コマンドを実行します。
gcloud iot registries create REGISTRY_ID \ --project=PROJECT_ID \ --region=REGION \ [--event-notification-config=topic=TOPIC,[subfolder=SUBFOLDER] [--event-notification-config=...]] [--state-pubsub-topic=STATE_PUBSUB_TOPIC]
Cloud IoT Core の現在のリリースでは、利用可能なリージョンは us-central1
、europe-west1
、asia-east1
です。
--enable-http-config
フラグと --enable-mqtt-config
フラグを使用すると、レジストリのプロトコルを有効または無効にできます。デフォルトでは、両方のプロトコルが有効になっています。
--event-notification-config
フラグを繰り返すことで、複数の Pub/Sub トピックとそれに対応するサブフォルダを指定できます。複数の Pub/Sub トピックを指定する場合は、サブフォルダを持たないデフォルトのトピックを 1 つ選択する必要があります。このデフォルト トピックは、サブフォルダを持たないパブリッシュされたテレメトリー イベントや、サブフォルダに Pub/Sub トピックが一致しない場合に使用されます。デフォルトのトピックを選択しないと、これらのテレメトリー イベントは失われます。
API
DeviceRegistry create
メソッドを使用してレジストリを作成します。
C#
CreateAuthorizedClient
の例については、アプリケーションの認証をご覧ください。
public static object CreateRegistry(string projectId, string cloudRegion, string registryId, string pubsubTopic)
{
var cloudIot = CreateAuthorizedClient();
// The resource name of the location associated with the key rings.
var parent = $"projects/{projectId}/locations/{cloudRegion}";
Console.WriteLine(parent);
try
{
Console.WriteLine($"Creating {registryId}");
DeviceRegistry body = new DeviceRegistry()
{
Id = registryId,
};
body.EventNotificationConfigs = new List<EventNotificationConfig>();
var toAdd = new EventNotificationConfig()
{
PubsubTopicName = pubsubTopic.StartsWith("projects/") ?
pubsubTopic : $"projects/{projectId}/topics/{pubsubTopic}",
};
body.EventNotificationConfigs.Add(toAdd);
var registry = cloudIot.Projects.Locations.Registries.Create(body, parent).Execute();
Console.WriteLine("Registry: ");
Console.WriteLine($"{registry.Id}");
Console.WriteLine($"\tName: {registry.Name}");
Console.WriteLine($"\tHTTP Enabled: {registry.HttpConfig.HttpEnabledState}");
Console.WriteLine($"\tMQTT Enabled: {registry.MqttConfig.MqttEnabledState}");
}
catch (Google.GoogleApiException e)
{
Console.WriteLine(e.Message);
if (e.Error != null) return e.Error.Code;
return -1;
}
return 0;
}
Go
// createRegistry creates a IoT Core device registry associated with a PubSub topic
func createRegistry(w io.Writer, projectID string, region string, registryID string, topicName string) (*cloudiot.DeviceRegistry, error) {
client, err := getClient()
if err != nil {
return nil, err
}
registry := cloudiot.DeviceRegistry{
Id: registryID,
EventNotificationConfigs: []*cloudiot.EventNotificationConfig{
{
PubsubTopicName: topicName,
},
},
}
parent := fmt.Sprintf("projects/%s/locations/%s", projectID, region)
response, err := client.Projects.Locations.Registries.Create(parent, ®istry).Do()
if err != nil {
return nil, err
}
fmt.Fprintln(w, "Created registry:")
fmt.Fprintf(w, "\tID: %s\n", response.Id)
fmt.Fprintf(w, "\tHTTP: %s\n", response.HttpConfig.HttpEnabledState)
fmt.Fprintf(w, "\tMQTT: %s\n", response.MqttConfig.MqttEnabledState)
fmt.Fprintf(w, "\tName: %s\n", response.Name)
return response, nil
}
Java
/** Create a registry for Cloud IoT. */
protected static void createRegistry(
String cloudRegion, String projectId, String registryName, String pubsubTopicPath)
throws GeneralSecurityException, IOException {
GoogleCredentials credential =
GoogleCredentials.getApplicationDefault().createScoped(CloudIotScopes.all());
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
HttpRequestInitializer init = new HttpCredentialsAdapter(credential);
final CloudIot service =
new CloudIot.Builder(GoogleNetHttpTransport.newTrustedTransport(), jsonFactory, init)
.setApplicationName(APP_NAME)
.build();
final String projectPath = "projects/" + projectId + "/locations/" + cloudRegion;
final String fullPubsubPath = "projects/" + projectId + "/topics/" + pubsubTopicPath;
DeviceRegistry registry = new DeviceRegistry();
EventNotificationConfig notificationConfig = new EventNotificationConfig();
notificationConfig.setPubsubTopicName(fullPubsubPath);
List<EventNotificationConfig> notificationConfigs = new ArrayList<EventNotificationConfig>();
notificationConfigs.add(notificationConfig);
registry.setEventNotificationConfigs(notificationConfigs);
registry.setId(registryName);
DeviceRegistry reg =
service.projects().locations().registries().create(projectPath, registry).execute();
System.out.println("Created registry: " + reg.getName());
}
Node.js
getClient
の例については、アプリケーションの認証をご覧ください。
// Client retrieved in callback
// const cloudRegion = 'us-central1';
// const projectId = 'adjective-noun-123';
// const registryId = 'my-registry';
// function errCb = lookupRegistry; // Lookup registry if already exists.
const iot = require('@google-cloud/iot');
// Lookup the pubsub topic
const topicPath = `projects/${projectId}/topics/${pubsubTopicId}`;
const iotClient = new iot.v1.DeviceManagerClient({
// optional auth parameters.
});
async function createDeviceRegistry() {
// Construct request
const newParent = iotClient.locationPath(projectId, cloudRegion);
const deviceRegistry = {
eventNotificationConfigs: [
{
pubsubTopicName: topicPath,
},
],
id: registryId,
};
const request = {
parent: newParent,
deviceRegistry: deviceRegistry,
};
const [response] = await iotClient.createDeviceRegistry(request);
console.log('Successfully created registry');
console.log(response);
}
createDeviceRegistry();
PHP
use Google\Cloud\Iot\V1\DeviceManagerClient;
use Google\Cloud\Iot\V1\DeviceRegistry;
use Google\Cloud\Iot\V1\EventNotificationConfig;
/**
* Creates a registry if it doesn't exist and prints the result.
*
* @param string $registryId IOT Device Registry ID
* @param string $pubsubTopic PubSub topic name for the new registry's event change notification.
* @param string $projectId Google Cloud project ID
* @param string $location (Optional) Google Cloud region
*/
function create_registry(
$registryId,
$pubsubTopic,
$projectId,
$location = 'us-central1'
) {
print('Creating Registry' . PHP_EOL);
// The Google Cloud Client Library automatically checks the environment
// variable GOOGLE_APPLICATION_CREDENTIALS for the Service Account
// credentials, and defaults scopes to [
// 'https://www.googleapis.com/auth/cloud-platform',
// 'https://www.googleapis.com/auth/cloudiot'
// ].
$deviceManager = new DeviceManagerClient();
$locationName = $deviceManager->locationName($projectId, $location);
$pubsubTopicPath = sprintf('projects/%s/topics/%s', $projectId, $pubsubTopic);
$eventNotificationConfig = (new EventNotificationConfig)
->setPubsubTopicName($pubsubTopicPath);
$registry = (new DeviceRegistry)
->setId($registryId)
->setEventNotificationConfigs([$eventNotificationConfig]);
$registry = $deviceManager->createDeviceRegistry($locationName, $registry);
printf('Id: %s, Name: %s' . PHP_EOL,
$registry->getId(),
$registry->getName());
}
Python
このサンプルでは、Python 用の Google API クライアント ライブラリを使用します。get client
の例については、アプリケーションの認証をご覧ください。
# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# pubsub_topic = 'your-pubsub-topic'
# registry_id = 'your-registry-id'
client = iot_v1.DeviceManagerClient()
parent = f"projects/{project_id}/locations/{cloud_region}"
if not pubsub_topic.startswith("projects/"):
pubsub_topic = "projects/{}/topics/{}".format(project_id, pubsub_topic)
body = {
"event_notification_configs": [{"pubsub_topic_name": pubsub_topic}],
"id": registry_id,
}
try:
response = client.create_device_registry(
request={"parent": parent, "device_registry": body}
)
print("Created registry")
return response
except HttpError:
print("Error, registry not created")
raise
except AlreadyExists:
print("Error, registry already exists")
raise
Ruby
# project_id = "Your Google Cloud project ID"
# location_id = "The Cloud region that you created the registry in"
# registry_id = "The Google Cloud IoT Core device registry identifier"
# pubsub_topic = "The Google Cloud PubSub topic to use for this registry"
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 project / location where the registry is created.
parent = "projects/#{project_id}/locations/#{location_id}"
registry = Cloudiot::DeviceRegistry.new
registry.id = registry_id
registry.event_notification_configs = [Cloudiot::EventNotificationConfig.new]
registry.event_notification_configs[0].pubsub_topic_name = pubsub_topic
registry = iot_client.create_project_location_registry(
parent, registry
)
puts "Created registry: #{registry.name}"
Pub/Sub 公開用の IAM ロール
プロジェクトで最初に Cloud IoT Core API を有効にした際に、そのプロジェクトの新しいサービス アカウントに自動的にロール(cloudiot.serviceAgent
)が割り当てられます。このロールによってプロジェクト内のレジストリに定義されたすべての Pub/Sub トピックに公開できるようになります。後で、このデフォルトのロールを関連プロジェクトのサービス アカウントから削除すると、エラーが発生する可能性があります。詳しくは、トラブルシューティングをご覧ください。
複数の Pub/Sub トピックを含むデバイス レジストリを作成する
デバイス レジストリの作成で説明したように、Cloud IoT Core を使用するには、少なくとも 1 つのデバイス レジストリを作成する必要があります。レジストリは、レジストリ内のデバイスがデータを公開できる 1 つ以上の Pub/Sub トピックを持つことができます。
Pub/Sub トピックを MQTT/HTTP サブフォルダと組み合わせることで、テレメトリー イベントを別個のトピックに公開できます。各トピックはサブフォルダにマッピングされるため、サブフォルダにデータをパブリッシュすると、トピックに転送されます。たとえば、温度、湿度、ロギングデータなど、複数のタイプのデータを公開する端末があるとします。これらのデータ ストリームを独立したトピックに送ることができれば、公開後のデータの分類が不要になります。
1 つの Pub/Sub トピックを複数のサブフォルダにマッピングできますが、その逆は当てはまりません。各サブフォルダは一意である必要があり、1 つのサブフォルダを異なるトピックにマッピングすることはできません。
別の Pub/Sub トピックへの公開の詳細については、MQTT ブリッジの使用と HTTP ブリッジの使用をご覧ください。
デバイスの鍵ペアを作成する
デバイスを作成する前に、まずデバイス用の公開鍵/秘密鍵のペアを作成します。Cloud IoT Core に接続すると、各デバイスは秘密鍵で署名された JSON Web Token(JWT)を作成し、Cloud IoT Core はデバイスの公開鍵を使用して認証します。
デバイスを作成または削除する
デバイスの作成や、既存のデバイスの編集は、Google Cloud コンソールまたは gcloud を使用して行えます。このセクションの手順を実行する前に、レジストリと鍵ペアが作成されていることを確認してください。
Console
- Google Cloud コンソールで、[レジストリ] ページに移動します。
ゲートウェイの [レジストリ ID] をクリックします。
左側のレジストリ メニューで、[デバイス] をクリックします。
[デバイスの作成] をクリックします。
既存のデバイスを編集するには、[デバイス] ページでその ID をクリックし、つづいてページの上部にある [デバイスの編集] をクリックします。
デバイスを簡潔に説明した、あるいはデバイスを識別しやすい [デバイス ID] を入力します(このフィールドを後で編集することはできません)。デバイスの命名と長さの要件については、使用可能な文字と長さの要件をご覧ください。
[デバイスの通信] で [許可] または [ブロック] を選択します。このオプションを使用すると、デバイスが正常に機能しなくなったときなど、必要に応じて通信をブロックできます。ほとんどの場合、デバイスを初めて作成するときは通信を許可することをおすすめします。
新しいデバイスを作成する場合は、公開鍵の入力に使用する入力方法を選択します。
- 手動: 公開鍵をコピーして、[公開鍵の値] フィールドに貼り付けます。
- アップロード: [公開鍵の値] フィールドで、[参照] をクリックしてパソコン上のファイルを選択します。
このデバイスの鍵ペアと一致する [公開鍵の形式] を選択します。証明書または鍵を [公開鍵の値] フィールドに貼り付けます。鍵の有効期限を設定することもできます。
既存のデバイスに鍵を追加するには、[デバイスの詳細] ページで [公開鍵を追加] をクリックします。
[鍵] フィールドと [値] フィールドを使用して、シリアル番号などのデバイスのメタデータ(省略可)を追加します。メタデータの鍵と値の命名と長さの要件については、使用可能な文字と長さの要件をご覧ください。
Cloud Logging レベルを選択して、Cloud Logging に送信するデバイス イベントを決定します。
[作成] をクリックしてデバイスを作成するか、[更新] をクリックして既存のデバイスに変更を保存します。
gcloud
デバイスを作成するには、gcloud iot devices create
コマンドを実行します。
RSA 公開鍵を含むデバイスを作成するには、次のコマンドを実行します。
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=rsa_public.pem,type=rsa-pem
RSA 公開鍵証明書を含むデバイスを作成するには、次のコマンドを実行します。
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=rsa_public.pem,type=rsa-x509-pem
ES256 公開鍵を含むデバイスを作成するには、次のコマンドを実行します。
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=ec_public.pem,type=es256-pem
ES256 公開鍵証明書を含むデバイスを作成するには、次のコマンドを実行します。
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=ec_public.pem,type=es256-x509-pem
デバイスを編集するには、gcloud iot devices update
コマンドを実行します。
gcloud iot devices update DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \
API
デバイスを作成または編集するには、次のメソッドを使用します。
- Device
create
メソッド: レジストリにデバイスを追加する - Device
patch
メソッド: 既存のデバイスを編集する
デバイスの作成時に、Cloud IoT Core API の Device
リソースの credentials
フィールドで公開鍵を指定します。デバイス リソースの更新時に、このフィールドを追加または変更することもできます。デバイス作成または変更によって新しいデバイス認証情報を追加するときに、1 つ以上のレジストリレベルの証明書が存在する場合は、レジストリ認証情報のいずれかで公開鍵認証情報に署名する必要があります。詳細については、デバイス リソースの DeviceCredential
をご覧ください。
RSA の場合、Device.credentials[i].public_key.key
フィールドは rsa_cert.pem
のコンテンツ(ヘッダーとフッターを含む)に設定する必要があります。Device.credentials[i].public_key.format
フィールドは RSA_PEM
または RSA_X509_PEM
に設定する必要があります。
ES256 の場合は、Device.credentials[i].public_key.key
フィールドは ec_public.pem
のコンテンツ(ヘッダーとフッターを含む)に設定する必要があります。Device.credentials[i].public_key.format
フィールドは ES256_PEM
または ES256_X509_PEM
に設定する必要があります。
次のサンプルは、RSA 認証情報を使用したデバイスの作成方法を示しています。
C#
public static object CreateRsaDevice(string projectId, string cloudRegion, string registryId, string deviceId, string keyPath)
{
var cloudIot = CreateAuthorizedClient();
var parent = $"projects/{projectId}/locations/{cloudRegion}/registries/{registryId}";
try
{
String keyText = File.ReadAllText(keyPath);
Device body = new Device()
{
Id = deviceId
};
body.Credentials = new List<DeviceCredential>();
body.Credentials.Add(new DeviceCredential()
{
PublicKey = new PublicKeyCredential()
{
Key = keyText,
Format = "RSA_X509_PEM"
},
});
var device = cloudIot.Projects.Locations.Registries.Devices.Create(body, parent).Execute();
Console.WriteLine("Device created: ");
Console.WriteLine($"{device.Id}");
Console.WriteLine($"\tBlocked: {device.Blocked == true}");
Console.WriteLine($"\tConfig version: {device.Config.Version}");
Console.WriteLine($"\tName: {device.Name}");
Console.WriteLine($"\tState:{device.State}");
}
catch (Google.GoogleApiException e)
{
Console.WriteLine(e.Message);
if (e.Error != null) return e.Error.Code;
return -1;
}
return 0;
}
Go
// createRSA creates a device in a registry given RSA X.509 credentials.
func createRSA(w io.Writer, projectID string, region string, registryID string, deviceID string, keyPath string) (*cloudiot.Device, 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
}
keyBytes, err := ioutil.ReadFile(keyPath)
if err != nil {
return nil, err
}
device := cloudiot.Device{
Id: deviceID,
Credentials: []*cloudiot.DeviceCredential{
{
PublicKey: &cloudiot.PublicKeyCredential{
Format: "RSA_X509_PEM",
Key: string(keyBytes),
},
},
},
}
parent := fmt.Sprintf("projects/%s/locations/%s/registries/%s", projectID, region, registryID)
response, err := client.Projects.Locations.Registries.Devices.Create(parent, &device).Do()
if err != nil {
return nil, err
}
fmt.Fprintf(w, "Successfully created RSA256 X.509 device: %s", deviceID)
return response, nil
}
Java
/** Create a device that is authenticated using RS256. */
protected static void createDeviceWithRs256(
String deviceId,
String certificateFilePath,
String projectId,
String cloudRegion,
String registryName)
throws GeneralSecurityException, IOException {
GoogleCredentials credential =
GoogleCredentials.getApplicationDefault().createScoped(CloudIotScopes.all());
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
HttpRequestInitializer init = new HttpCredentialsAdapter(credential);
final CloudIot service =
new CloudIot.Builder(GoogleNetHttpTransport.newTrustedTransport(), jsonFactory, init)
.setApplicationName(APP_NAME)
.build();
final String registryPath =
String.format(
"projects/%s/locations/%s/registries/%s", projectId, cloudRegion, registryName);
PublicKeyCredential publicKeyCredential = new PublicKeyCredential();
String key = Files.asCharSource(new File(certificateFilePath), StandardCharsets.UTF_8).read();
publicKeyCredential.setKey(key);
publicKeyCredential.setFormat("RSA_X509_PEM");
DeviceCredential devCredential = new DeviceCredential();
devCredential.setPublicKey(publicKeyCredential);
System.out.println("Creating device with id: " + deviceId);
Device device = new Device();
device.setId(deviceId);
device.setCredentials(Collections.singletonList(devCredential));
Device createdDevice =
service
.projects()
.locations()
.registries()
.devices()
.create(registryPath, device)
.execute();
System.out.println("Created device: " + createdDevice.toPrettyString());
}
Node.js
// const cloudRegion = 'us-central1';
// const deviceId = 'my-rsa-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 createDevice() {
// Construct request
const regPath = iotClient.registryPath(projectId, cloudRegion, registryId);
const device = {
id: deviceId,
credentials: [
{
publicKey: {
format: 'RSA_X509_PEM',
key: readFileSync(rsaCertificateFile).toString(),
},
},
],
};
const request = {
parent: regPath,
device,
};
const [response] = await iotClient.createDevice(request);
console.log('Created device', response);
}
createDevice();
PHP
use Google\Cloud\Iot\V1\DeviceManagerClient;
use Google\Cloud\Iot\V1\Device;
use Google\Cloud\Iot\V1\DeviceCredential;
use Google\Cloud\Iot\V1\PublicKeyCredential;
use Google\Cloud\Iot\V1\PublicKeyFormat;
/**
* Create a new device with the given id, using RS256 for
* authentication.
*
* @param string $registryId IOT Device Registry ID
* @param string $deviceId IOT Device ID
* @param string $certificateFile Path to RS256 certificate file.
* @param string $projectId (optional) Google Cloud project ID
* @param string $location (Optional) Google Cloud region
*/
function create_rsa_device(
$registryId,
$deviceId,
$certificateFile,
$projectId,
$location = 'us-central1'
) {
print('Creating new RS256 Device' . PHP_EOL);
// Instantiate a client.
$deviceManager = new DeviceManagerClient();
$registryName = $deviceManager->registryName($projectId, $location, $registryId);
$publicKey = (new PublicKeyCredential())
->setFormat(PublicKeyFormat::RSA_X509_PEM)
->setKey(file_get_contents($certificateFile));
$credential = (new DeviceCredential())
->setPublicKey($publicKey);
$device = (new Device())
->setId($deviceId)
->setCredentials([$credential]);
$device = $deviceManager->createDevice($registryName, $device);
printf('Device: %s : %s' . PHP_EOL,
$device->getNumId(),
$device->getId());
}
Python
このサンプルでは、Python 用の Google API クライアント ライブラリを使用します。# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# registry_id = 'your-registry-id'
# device_id = 'your-device-id'
# certificate_file = 'path/to/certificate.pem'
client = iot_v1.DeviceManagerClient()
parent = client.registry_path(project_id, cloud_region, registry_id)
with io.open(certificate_file) as f:
certificate = f.read()
# Note: You can have multiple credentials associated with a device.
device_template = {
"id": device_id,
"credentials": [
{
"public_key": {
"format": iot_v1.PublicKeyFormat.RSA_X509_PEM,
"key": certificate,
}
}
],
}
return client.create_device(request={"parent": parent, "device": device_template})
Ruby
# project_id = "Your Google Cloud project ID"
# location_id = "The Cloud region the registry is located in"
# registry_id = "The registry to create a device in"
# device_id = "The identifier of the device to create"
# cert_path = "The path to the RSA certificate"
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}/registries/#{registry_id}"
credential = Google::Apis::CloudiotV1::DeviceCredential.new
credential.public_key = Google::Apis::CloudiotV1::PublicKeyCredential.new
credential.public_key.format = "RSA_X509_PEM"
credential.public_key.key = File.read cert_path
device = Cloudiot::Device.new
device.id = device_id
device.credentials = [credential]
# Create the device
device = iot_client.create_project_location_registry_device parent, device
puts "Device: #{device.id}"
puts "\tBlocked: #{device.blocked}"
puts "\tLast Event Time: #{device.last_event_time}"
puts "\tLast State Time: #{device.last_state_time}"
puts "\tName: #{device.name}"
次のサンプルは、楕円曲線(EC)認証情報を使用してデバイスを作成する方法を示しています。
C#
public static object CreateEsDevice(string projectId, string cloudRegion, string registryId, string deviceId, string keyPath)
{
var cloudIot = CreateAuthorizedClient();
var parent = $"projects/{projectId}/locations/{cloudRegion}/registries/{registryId}";
try
{
String keyText = File.ReadAllText(keyPath);
Device body = new Device()
{
Id = deviceId
};
body.Credentials = new List<DeviceCredential>();
body.Credentials.Add(new DeviceCredential()
{
PublicKey = new PublicKeyCredential()
{
Key = keyText,
Format = "ES256_PEM"
},
});
var device = cloudIot.Projects.Locations.Registries.Devices.Create(body, parent).Execute();
Console.WriteLine("Device created: ");
Console.WriteLine($"{device.Id}");
Console.WriteLine($"\tBlocked: {device.Blocked == true}");
Console.WriteLine($"\tConfig version: {device.Config.Version}");
Console.WriteLine($"\tName: {device.Name}");
Console.WriteLine($"\tState:{device.State}");
}
catch (Google.GoogleApiException e)
{
Console.WriteLine(e.Message);
if (e.Error != null) return e.Error.Code;
return -1;
}
return 0;
}
Go
// createES creates a device in a registry with ES256 credentials.
func createES(w io.Writer, projectID string, region string, registryID string, deviceID string, keyPath string) (*cloudiot.Device, 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
}
keyBytes, err := ioutil.ReadFile(keyPath)
if err != nil {
return nil, err
}
device := cloudiot.Device{
Id: deviceID,
Credentials: []*cloudiot.DeviceCredential{
{
PublicKey: &cloudiot.PublicKeyCredential{
Format: "ES256_PEM",
Key: string(keyBytes),
},
},
},
}
parent := fmt.Sprintf("projects/%s/locations/%s/registries/%s", projectID, region, registryID)
response, err := client.Projects.Locations.Registries.Devices.Create(parent, &device).Do()
if err != nil {
return nil, err
}
fmt.Fprintf(w, "Successfully created ES256 device: %s\n", deviceID)
return response, nil
}
Java
/** Create a device that is authenticated using ES256. */
protected static void createDeviceWithEs256(
String deviceId,
String publicKeyFilePath,
String projectId,
String cloudRegion,
String registryName)
throws GeneralSecurityException, IOException {
GoogleCredentials credential =
GoogleCredentials.getApplicationDefault().createScoped(CloudIotScopes.all());
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
HttpRequestInitializer init = new HttpCredentialsAdapter(credential);
final CloudIot service =
new CloudIot.Builder(GoogleNetHttpTransport.newTrustedTransport(), jsonFactory, init)
.setApplicationName(APP_NAME)
.build();
final String registryPath =
String.format(
"projects/%s/locations/%s/registries/%s", projectId, cloudRegion, registryName);
PublicKeyCredential publicKeyCredential = new PublicKeyCredential();
final String key =
Files.asCharSource(new File(publicKeyFilePath), StandardCharsets.UTF_8).read();
publicKeyCredential.setKey(key);
publicKeyCredential.setFormat("ES256_PEM");
DeviceCredential devCredential = new DeviceCredential();
devCredential.setPublicKey(publicKeyCredential);
System.out.println("Creating device with id: " + deviceId);
Device device = new Device();
device.setId(deviceId);
device.setCredentials(Collections.singletonList(devCredential));
Device createdDevice =
service
.projects()
.locations()
.registries()
.devices()
.create(registryPath, device)
.execute();
System.out.println("Created device: " + createdDevice.toPrettyString());
}
Node.js
// const cloudRegion = 'us-central1';
// const deviceId = 'my-es-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 createDevice() {
// Construct request
const regPath = iotClient.registryPath(projectId, cloudRegion, registryId);
const device = {
id: deviceId,
credentials: [
{
publicKey: {
format: 'ES256_PEM',
key: readFileSync(esCertificateFile).toString(),
},
},
],
};
const request = {
parent: regPath,
device,
};
const [response] = await iotClient.createDevice(request);
console.log('Created device', response);
}
createDevice();
PHP
use Google\Cloud\Iot\V1\DeviceManagerClient;
use Google\Cloud\Iot\V1\Device;
use Google\Cloud\Iot\V1\DeviceCredential;
use Google\Cloud\Iot\V1\PublicKeyCredential;
use Google\Cloud\Iot\V1\PublicKeyFormat;
/**
* Create a new device with the given id, using ES256 for
* authentication.
*
* @param string $registryId IOT Device Registry ID
* @param string $deviceId IOT Device ID
* @param string $publicKeyFile Path to public ES256 key file.
* @param string $projectId (optional) Google Cloud project ID
* @param string $location (Optional) Google Cloud region
*/
function create_es_device(
$registryId,
$deviceId,
$publicKeyFile,
$projectId,
$location = 'us-central1'
) {
print('Creating new ES256 Device' . PHP_EOL);
// Instantiate a client.
$deviceManager = new DeviceManagerClient();
$registryName = $deviceManager->registryName($projectId, $location, $registryId);
$publicKey = (new PublicKeyCredential())
->setFormat(PublicKeyFormat::ES256_PEM)
->setKey(file_get_contents($publicKeyFile));
$credential = (new DeviceCredential())
->setPublicKey($publicKey);
$device = (new Device())
->setId($deviceId)
->setCredentials([$credential]);
$device = $deviceManager->createDevice($registryName, $device);
printf('Device: %s : %s' . PHP_EOL,
$device->getNumId(),
$device->getId());
}
Python
このサンプルでは、Python 用の Google API クライアント ライブラリを使用します。# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# registry_id = 'your-registry-id'
# device_id = 'your-device-id'
# public_key_file = 'path/to/certificate.pem'
client = iot_v1.DeviceManagerClient()
parent = client.registry_path(project_id, cloud_region, registry_id)
with io.open(public_key_file) as f:
public_key = f.read()
# Note: You can have multiple credentials associated with a device.
device_template = {
"id": device_id,
"credentials": [
{
"public_key": {
"format": iot_v1.PublicKeyFormat.ES256_PEM,
"key": public_key,
}
}
],
}
return client.create_device(request={"parent": parent, "device": device_template})
Ruby
# project_id = "Your Google Cloud project ID"
# location_id = "The Cloud region the registry is located in"
# registry_id = "The registry to create a device in"
# device_id = "The identifier of the device to create"
# cert_path = "The path to the EC certificate"
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}/registries/#{registry_id}"
device = Cloudiot::Device.new
device.id = device_id
pubkey = Google::Apis::CloudiotV1::PublicKeyCredential.new
pubkey.key = File.read cert_path
pubkey.format = "ES256_PEM"
cred = Google::Apis::CloudiotV1::DeviceCredential.new
cred.public_key = pubkey
device.credentials = [cred]
# Create the device
device = iot_client.create_project_location_registry_device parent, device
puts "Device: #{device.id}"
puts "\tBlocked: #{device.blocked}"
puts "\tLast Event Time: #{device.last_event_time}"
puts "\tLast State Time: #{device.last_state_time}"
puts "\tName: #{device.name}"
次のサンプルは、RSA 認証情報を使用したデバイスのパッチ方法を示しています。
C#
public static object PatchRsaDevice(string projectId, string cloudRegion, string registryId, string deviceId, string keyPath)
{
var cloudIot = CreateAuthorizedClient();
var name = $"projects/{projectId}/locations/{cloudRegion}/registries/{registryId}/devices/{deviceId}";
try
{
String keyText = File.ReadAllText(keyPath);
Device body = new Device();
body.Credentials = new List<DeviceCredential>();
body.Credentials.Add(new DeviceCredential()
{
PublicKey = new PublicKeyCredential()
{
Key = keyText,
Format = "RSA_X509_PEM"
},
});
var req = cloudIot.Projects.Locations.Registries.Devices.Patch(body, name);
req.UpdateMask = "credentials";
var device = req.Execute();
Console.WriteLine("Device patched: ");
Console.WriteLine($"{device.Id}");
Console.WriteLine($"\tBlocked: {device.Blocked == true}");
Console.WriteLine($"\tConfig version: {device.Config.Version}");
Console.WriteLine($"\tName: {device.Name}");
Console.WriteLine($"\tState:{device.State}");
}
catch (Google.GoogleApiException e)
{
Console.WriteLine(e.Message);
if (e.Error != null) return e.Error.Code;
return -1;
}
return 0;
}
Go
// patchDeviceRSA patches a device to use RSA256 X.509 credentials.
func patchDeviceRSA(w io.Writer, projectID string, region string, registryID string, deviceID string, keyPath string) (*cloudiot.Device, 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
}
keyBytes, err := ioutil.ReadFile(keyPath)
if err != nil {
return nil, err
}
device := cloudiot.Device{
Id: deviceID,
Credentials: []*cloudiot.DeviceCredential{
{
PublicKey: &cloudiot.PublicKeyCredential{
Format: "RSA_X509_PEM",
Key: string(keyBytes),
},
},
},
}
parent := fmt.Sprintf("projects/%s/locations/%s/registries/%s/devices/%s", projectID, region, registryID, deviceID)
response, err := client.Projects.Locations.Registries.Devices.
Patch(parent, &device).UpdateMask("credentials").Do()
if err != nil {
return nil, err
}
fmt.Fprintln(w, "Successfully patched device with RSA256 X.509 credentials")
return response, nil
}
Java
/** Patch the device to add an RSA256 key for authentication. */
protected static void patchRsa256ForAuth(
String deviceId,
String publicKeyFilePath,
String projectId,
String cloudRegion,
String registryName)
throws GeneralSecurityException, IOException {
GoogleCredentials credential =
GoogleCredentials.getApplicationDefault().createScoped(CloudIotScopes.all());
JsonFactory jsonFactory = GsonFactory.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);
PublicKeyCredential publicKeyCredential = new PublicKeyCredential();
String key = Files.asCharSource(new File(publicKeyFilePath), StandardCharsets.UTF_8).read();
publicKeyCredential.setKey(key);
publicKeyCredential.setFormat("RSA_X509_PEM");
DeviceCredential devCredential = new DeviceCredential();
devCredential.setPublicKey(publicKeyCredential);
Device device = new Device();
device.setCredentials(Collections.singletonList(devCredential));
Device patchedDevice =
service
.projects()
.locations()
.registries()
.devices()
.patch(devicePath, device)
.setUpdateMask("credentials")
.execute();
System.out.println("Patched device is " + patchedDevice.toPrettyString());
}
Node.js
// const cloudRegion = 'us-central1';
// const deviceId = 'my-rsa-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 updateDevice() {
// Construct request
const devPath = iotClient.devicePath(
projectId,
cloudRegion,
registryId,
deviceId
);
const device = {
name: devPath,
credentials: [
{
publicKey: {
format: 'RSA_X509_PEM',
key: readFileSync(rsaPublicKeyFile).toString(),
},
},
],
};
const [response] = await iotClient.updateDevice({
device: device,
updateMask: {paths: ['credentials']},
});
console.log('Patched device:', deviceId);
console.log('Response', response);
}
updateDevice();
PHP
use Google\Cloud\Iot\V1\DeviceManagerClient;
use Google\Cloud\Iot\V1\Device;
use Google\Cloud\Iot\V1\DeviceCredential;
use Google\Cloud\Iot\V1\PublicKeyCredential;
use Google\Cloud\Iot\V1\PublicKeyFormat;
use Google\Protobuf\FieldMask;
/**
* Patch the device to add an RSA256 public key to the device.
*
* @param string $registryId IOT Device Registry ID
* @param string $deviceId IOT Device ID
* @param string $certificateFile Path to RS256 certificate file.
* @param string $projectId Google Cloud project ID
* @param string $location (Optional) Google Cloud region
*/
function patch_rsa(
$registryId,
$deviceId,
$certificateFile,
$projectId,
$location = 'us-central1'
) {
print('Patch device with RSA256 certificate' . PHP_EOL);
// Instantiate a client.
$deviceManager = new DeviceManagerClient();
$deviceName = $deviceManager->deviceName($projectId, $location, $registryId, $deviceId);
$publicKey = (new PublicKeyCredential())
->setFormat(PublicKeyFormat::RSA_X509_PEM)
->setKey(file_get_contents($certificateFile));
$credential = (new DeviceCredential())
->setPublicKey($publicKey);
$device = (new Device())
->setName($deviceName)
->setCredentials([$credential]);
$updateMask = (new FieldMask())
->setPaths(['credentials']);
$device = $deviceManager->updateDevice($device, $updateMask);
printf('Updated device %s' . PHP_EOL, $device->getName());
}
Python
このサンプルでは、Python 用の Google API クライアント ライブラリを使用します。# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# registry_id = 'your-registry-id'
# device_id = 'your-device-id'
# public_key_file = 'path/to/certificate.pem'
print("Patch device with RSA256 certificate")
client = iot_v1.DeviceManagerClient()
device_path = client.device_path(project_id, cloud_region, registry_id, device_id)
public_key_bytes = ""
with io.open(public_key_file) as f:
public_key_bytes = f.read()
key = iot_v1.PublicKeyCredential(
format=iot_v1.PublicKeyFormat.RSA_X509_PEM, key=public_key_bytes
)
cred = iot_v1.DeviceCredential(public_key=key)
device = client.get_device(request={"name": device_path})
device.id = b""
device.num_id = 0
device.credentials.append(cred)
mask = gp_field_mask.FieldMask()
mask.paths.append("credentials")
return client.update_device(request={"device": device, "update_mask": mask})
Ruby
# project_id = "Your Google Cloud project ID"
# location_id = "The Cloud region the registry is located in"
# registry_id = "The registry to create a device in"
# device_id = "The identifier of the device to patch"
# cert_path = "The path to the RSA certificate"
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}/registries/#{registry_id}"
path = "#{parent}/devices/#{device_id}"
credential = Google::Apis::CloudiotV1::DeviceCredential.new
credential.public_key = Google::Apis::CloudiotV1::PublicKeyCredential.new
credential.public_key.format = "RSA_X509_PEM"
credential.public_key.key = File.read cert_path
device = Cloudiot::Device.new
device.credentials = [credential]
# Create the device
device = iot_client.patch_project_location_registry_device(
path, device, update_mask: "credentials"
)
puts "Device: #{device.id}"
puts "\tBlocked: #{device.blocked}"
puts "\tLast Event Time: #{device.last_event_time}"
puts "\tLast State Time: #{device.last_state_time}"
puts "\tName: #{device.name}"
puts "\tCertificate formats:"
if device.credentials
device.credentials.each { |cert| puts "\t\t#{cert.public_key.format}" }
else
puts "\t\tNo certificates for device"
end
その他のコードサンプルについては、デバイス管理のサンプルをご覧ください。
認証情報と証明書の有効期限
デバイスを作成して公開鍵を追加するときに、鍵の有効期限を設定できます。鍵が自己署名 X.509 証明書を使用して生成された場合、証明書自体にも有効期限があります。ただし、これら 2 つの有効期限は異なります。
鍵の有効期限が切れるか、鍵の自己署名 X.509 証明書が期限切れになると、デバイスは Cloud IoT Core に接続できなくなります。さらに、期限切れの X.509 証明書を持つデバイスを作成または更新しようとすると、Cloud IoT Core からエラーが返されます。
デバイスの詳細の取得
Google Cloud コンソール、API、gcloud のいずれかを使用して 1 つ以上のデバイスの詳細を取得できます。
Console
- Google Cloud コンソールで、[レジストリ] ページに移動します。
ゲートウェイの [レジストリ ID] をクリックします。
左側のメニューで [デバイス] をクリックします。
デバイスの ID をクリックして、[デバイスの詳細] ページに移動します。このページには、メッセージが最後に公開された時刻や最新のエラーの時刻など、最近のデバイス アクティビティの概要が表示されます。このページにはデバイスの数値 ID も表示されます。
[Configuration & state history] タブをクリックすると、デバイスの最近の構成バージョンと更新時刻が表示されます。
前回のハートビート時刻と構成の最新 ACK 応答時刻の各フィールドは、MQTT ブリッジ専用です。HTTP ブリッジでは、ハートビートや明示的な ACK をサポートしていません。
gcloud
レジストリ内のデバイスを一覧表示するには、gcloud iot devices list
コマンドを実行します。
gcloud iot devices list \ --project=PROJECT_ID \ --registry=REGISTRY_ID \ --region=REGION
デバイスの詳細を取得するには、gcloud iot devices describe
コマンドを実行します。
gcloud iot devices describe DEVICE_ID \ --project=PROJECT_ID \ --registry=REGISTRY_ID \ --region=REGION
API
デバイスの詳細を取得するには、次のメソッドを使用します。
- Device
list
メソッド: レジストリ内のデバイスを一覧表示 - Device
get
メソッド: デバイスの詳細を取得 - Device
states.list
メソッド: デバイス状態の最新の数バージョンを降順で一覧表示
次のサンプルは、レジストリ内のデバイスを一覧表示する方法を示しています。
C#
public static object ListDevices(string projectId, string cloudRegion, string registryId)
{
var cloudIot = CreateAuthorizedClient();
// The resource name of the location associated with the key rings.
var parent = $"projects/{projectId}/locations/{cloudRegion}/registries/{registryId}";
try
{
var result = cloudIot.Projects.Locations.Registries.Devices.List(parent).Execute();
Console.WriteLine("Devices: ");
result.Devices.ToList().ForEach(response =>
{
Console.WriteLine($"{response.Id}");
Console.WriteLine($"\t{response.Config}");
Console.WriteLine($"\t{response.Name}");
});
}
catch (Google.GoogleApiException e)
{
Console.WriteLine(e.Message);
return e.Error.Code;
}
return 0;
}
Go
// listDevices gets the identifiers of devices for a specific registry.
func listDevices(w io.Writer, projectID string, region string, registryID string) ([]*cloudiot.Device, 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
}
parent := fmt.Sprintf("projects/%s/locations/%s/registries/%s", projectID, region, registryID)
response, err := client.Projects.Locations.Registries.Devices.List(parent).Do()
if err != nil {
return nil, err
}
fmt.Fprintln(w, "Devices:")
for _, device := range response.Devices {
fmt.Fprintf(w, "\t%s\n", device.Id)
}
return response.Devices, nil
}
Java
/** Print all of the devices in this registry to standard out. */
protected static void listDevices(String projectId, String cloudRegion, String registryName)
throws GeneralSecurityException, IOException {
GoogleCredentials credential =
GoogleCredentials.getApplicationDefault().createScoped(CloudIotScopes.all());
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
HttpRequestInitializer init = new HttpCredentialsAdapter(credential);
final CloudIot service =
new CloudIot.Builder(GoogleNetHttpTransport.newTrustedTransport(), jsonFactory, init)
.setApplicationName(APP_NAME)
.build();
final String registryPath =
String.format(
"projects/%s/locations/%s/registries/%s", projectId, cloudRegion, registryName);
List<Device> devices =
service
.projects()
.locations()
.registries()
.devices()
.list(registryPath)
.execute()
.getDevices();
if (devices != null) {
System.out.println("Found " + devices.size() + " devices");
for (Device d : devices) {
System.out.println("Id: " + d.getId());
if (d.getConfig() != null) {
// Note that this will show the device config in Base64 encoded format.
System.out.println("Config: " + d.getConfig().toPrettyString());
}
System.out.println();
}
} else {
System.out.println("Registry has no devices.");
}
}
Node.js
// const cloudRegion = 'us-central1';
// 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 listDevices() {
// Construct request
const parentName = iotClient.registryPath(
projectId,
cloudRegion,
registryId
);
// See full list of device fields: https://cloud.google.com/iot/docs/reference/cloudiot/rest/v1/projects.locations.registries.devices
// Warning! Use snake_case field names.
const fieldMask = {
paths: [
'id',
'name',
'num_id',
'credentials',
'last_heartbeat_time',
'last_event_time',
'last_state_time',
'last_config_ack_time',
'last_config_send_time',
'blocked',
'last_error_time',
'last_error_status',
'config',
'state',
'log_level',
'metadata',
'gateway_config',
],
};
const [response] = await iotClient.listDevices({
parent: parentName,
fieldMask,
});
const devices = response;
if (devices.length > 0) {
console.log('Current devices in registry:');
} else {
console.log('No devices in registry.');
}
for (let i = 0; i < devices.length; i++) {
const device = devices[i];
console.log(`Device ${i}: `, device);
}
}
listDevices();
PHP
use Google\Cloud\Iot\V1\DeviceManagerClient;
/**
* List all devices in the registry.
*
* @param string $registryId IOT Device Registry ID
* @param string $projectId Google Cloud project ID
* @param string $location (Optional) Google Cloud region
*/
function list_devices(
$registryId,
$projectId,
$location = 'us-central1'
) {
print('Listing devices' . PHP_EOL);
// Instantiate a client.
$deviceManager = new DeviceManagerClient();
// Format the full registry path
$registryName = $deviceManager->registryName($projectId, $location, $registryId);
// Call the API
$devices = $deviceManager->listDevices($registryName);
// Print the result
foreach ($devices->iterateAllElements() as $device) {
printf('Device: %s : %s' . PHP_EOL,
$device->getNumId(),
$device->getId());
}
}
Python
このサンプルでは、Python 用の Google API クライアント ライブラリを使用します。# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# registry_id = 'your-registry-id'
print("Listing devices")
client = iot_v1.DeviceManagerClient()
registry_path = client.registry_path(project_id, cloud_region, registry_id)
# See full list of device fields: https://cloud.google.com/iot/docs/reference/cloudiot/rest/v1/projects.locations.registries.devices
# Warning! Use snake_case field names.
field_mask = gp_field_mask.FieldMask(
paths=[
"id",
"name",
"num_id",
"credentials",
"last_heartbeat_time",
"last_event_time",
"last_state_time",
"last_config_ack_time",
"last_config_send_time",
"blocked",
"last_error_time",
"last_error_status",
"config",
"state",
"log_level",
"metadata",
"gateway_config",
]
)
devices = list(
client.list_devices(request={"parent": registry_path, "field_mask": field_mask})
)
for device in devices:
print(device)
return devices
Ruby
# project_id = "Your Google Cloud project ID"
# location_id = "The Cloud region the registry is located in"
# registry_id = "The registry to list devices from"
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
resource = "projects/#{project_id}/locations/#{location_id}/registries/#{registry_id}"
# List the devices in the provided region
response = iot_client.list_project_location_registry_devices(
resource
)
puts "Devices:"
if response.devices && response.devices.any?
response.devices.each { |device| puts "\t#{device.id}" }
else
puts "\tNo device registries found in this region for your project."
end
次のサンプルは、デバイス レジストリからデバイスとそのメタデータを取得する方法を示しています。
C#
public static object GetDevice(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
{
var device = cloudIot.Projects.Locations.Registries.Devices.Get(name).Execute();
Console.WriteLine("Device: ");
Console.WriteLine($"{device.Id}");
Console.WriteLine($"\tBlocked: {device.Blocked == true}");
Console.WriteLine($"\tConfig version: {device.Config.Version}");
Console.WriteLine($"\tFirst Credential Expiry: {device.Credentials.First().ExpirationTime}");
Console.WriteLine($"\tLast State Time:{device.LastStateTime}");
Console.WriteLine($"\tName: {device.Name}");
Console.WriteLine($"\tState:{device.State}");
}
catch (Google.GoogleApiException e)
{
Console.WriteLine(e.Message);
if (e.Error != null) return e.Error.Code;
return -1;
}
return 0;
}
Go
// getDevice retrieves a specific device and prints its details.
func getDevice(w io.Writer, projectID string, region string, registryID string, device string) (*cloudiot.Device, 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.Get(path).Do()
if err != nil {
return nil, err
}
fmt.Fprintf(w, "\tId: %s\n", response.Id)
for _, credential := range response.Credentials {
fmt.Fprintf(w, "\t\tCredential Expire: %s\n", credential.ExpirationTime)
fmt.Fprintf(w, "\t\tCredential Type: %s\n", credential.PublicKey.Format)
fmt.Fprintln(w, "\t\t--------")
}
fmt.Fprintf(w, "\tLast Config Ack: %s\n", response.LastConfigAckTime)
fmt.Fprintf(w, "\tLast Config Send: %s\n", response.LastConfigSendTime)
fmt.Fprintf(w, "\tLast Event Time: %s\n", response.LastEventTime)
fmt.Fprintf(w, "\tLast Heartbeat Time: %s\n", response.LastHeartbeatTime)
fmt.Fprintf(w, "\tLast State Time: %s\n", response.LastStateTime)
fmt.Fprintf(w, "\tNumId: %d\n", response.NumId)
return response, nil
}
Java
/** Retrieves device metadata from a registry. * */
protected static Device getDevice(
String deviceId, String projectId, String cloudRegion, String registryName)
throws GeneralSecurityException, IOException {
GoogleCredentials credential =
GoogleCredentials.getApplicationDefault().createScoped(CloudIotScopes.all());
JsonFactory jsonFactory = GsonFactory.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 " + devicePath);
return service.projects().locations().registries().devices().get(devicePath).execute();
}
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 getDevice() {
// Construct request
const devicePath = iotClient.devicePath(
projectId,
cloudRegion,
registryId,
deviceId
);
// See full list of device fields: https://cloud.google.com/iot/docs/reference/cloudiot/rest/v1/projects.locations.registries.devices
// Warning! Use snake_case field names.
const fieldMask = {
paths: [
'id',
'name',
'num_id',
'credentials',
'last_heartbeat_time',
'last_event_time',
'last_state_time',
'last_config_ack_time',
'last_config_send_time',
'blocked',
'last_error_time',
'last_error_status',
'config',
'state',
'log_level',
'metadata',
'gateway_config',
],
};
const [response] = await iotClient.getDevice({
name: devicePath,
fieldMask,
});
const data = response;
console.log('Found device:', deviceId, data);
}
getDevice();
PHP
use Google\Cloud\Iot\V1\DeviceManagerClient;
use Google\Cloud\Iot\V1\PublicKeyFormat;
/**
* Retrieve the device with the given id.
*
* @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(
$registryId,
$deviceId,
$projectId,
$location = 'us-central1'
) {
print('Getting device' . PHP_EOL);
// Instantiate a client.
$deviceManager = new DeviceManagerClient();
$deviceName = $deviceManager->deviceName($projectId, $location, $registryId, $deviceId);
$device = $deviceManager->getDevice($deviceName);
$formats = [
PublicKeyFormat::UNSPECIFIED_PUBLIC_KEY_FORMAT => 'unspecified',
PublicKeyFormat::RSA_X509_PEM => 'RSA_X509_PEM',
PublicKeyFormat::ES256_PEM => 'ES256_PEM',
PublicKeyFormat::RSA_PEM => 'RSA_PEM',
PublicKeyFormat::ES256_X509_PEM => 'ES256_X509_PEM',
];
printf('ID: %s' . PHP_EOL, $device->getId());
printf('Name: %s' . PHP_EOL, $device->getName());
foreach ($device->getCredentials() as $credential) {
print('Certificate:' . PHP_EOL);
printf(' Format: %s' . PHP_EOL,
$formats[$credential->getPublicKey()->getFormat()]);
printf(' Expiration: %s' . PHP_EOL,
$credential->getExpirationTime()->toDateTime()->format('Y-m-d H:i:s'));
}
printf('Data: %s' . PHP_EOL, $device->getConfig()->getBinaryData());
printf('Version: %s' . PHP_EOL, $device->getConfig()->getVersion());
printf('Update Time: %s' . PHP_EOL,
$device->getConfig()->getCloudUpdateTime()->toDateTime()->format('Y-m-d H:i:s'));
}
Python
このサンプルでは、Python 用の Google API クライアント ライブラリを使用します。# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# registry_id = 'your-registry-id'
# device_id = 'your-device-id'
print("Getting device")
client = iot_v1.DeviceManagerClient()
device_path = client.device_path(project_id, cloud_region, registry_id, device_id)
# See full list of device fields: https://cloud.google.com/iot/docs/reference/cloudiot/rest/v1/projects.locations.registries.devices
# Warning! Use snake_case field names.
field_mask = gp_field_mask.FieldMask(
paths=[
"id",
"name",
"num_id",
"credentials",
"last_heartbeat_time",
"last_event_time",
"last_state_time",
"last_config_ack_time",
"last_config_send_time",
"blocked",
"last_error_time",
"last_error_status",
"config",
"state",
"log_level",
"metadata",
"gateway_config",
]
)
device = client.get_device(request={"name": device_path, "field_mask": field_mask})
print("Id : {}".format(device.id))
print("Name : {}".format(device.name))
print("Credentials:")
if device.credentials is not None:
for credential in device.credentials:
keyinfo = credential.public_key
print("\tcertificate: \n{}".format(keyinfo.key))
if keyinfo.format == 4:
keyformat = "ES256_X509_PEM"
elif keyinfo.format == 3:
keyformat = "RSA_PEM"
elif keyinfo.format == 2:
keyformat = "ES256_PEM"
elif keyinfo.format == 1:
keyformat = "RSA_X509_PEM"
else:
keyformat = "UNSPECIFIED_PUBLIC_KEY_FORMAT"
print("\tformat : {}".format(keyformat))
print("\texpiration: {}".format(credential.expiration_time))
print("Config:")
print("\tdata: {}".format(device.config.binary_data))
print("\tversion: {}".format(device.config.version))
print("\tcloudUpdateTime: {}".format(device.config.cloud_update_time))
return device
Ruby
# project_id = "Your Google Cloud project ID"
# location_id = "The Cloud region the registry is located in"
# registry_id = "The registry to get a device from"
# device_id = "The identifier of the device to get"
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 devices in the provided region
device = iot_client.get_project_location_registry_device(
resource
)
puts "Device: #{device.id}"
puts "\tBlocked: #{device.blocked}"
puts "\tLast Event Time: #{device.last_event_time}"
puts "\tLast State Time: #{device.last_state_time}"
puts "\tName: #{device.name}"
puts "\tCertificate formats:"
if device.credentials
device.credentials.each { |cert| puts "\t\t#{cert.public_key.format}" }
else
puts "\t\tNo certificates for device"
end
次のサンプルは、デバイス レジストリからデバイスの状態を取得する方法を示しています。
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 = GsonFactory.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
このサンプルでは、Python 用の Google API クライアント ライブラリを使用します。# 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 コンソール、API、gcloud を使用して削除できます。レジストリを削除するには、まずレジストリ内のすべてのデバイスを削除します。
Console
レジストリのデバイスのリストから 1 つまたは複数のデバイスを削除できます。
デバイスを削除するには:
- Google Cloud コンソールで、[レジストリ] ページに移動します。
ゲートウェイの [レジストリ ID] をクリックします。
左側のメニューで [デバイス] をクリックします。
削除する各デバイスを選択して、[削除] をクリックします。
選択したデバイスを削除することを確認して、[削除] をクリックします。
gcloud
デバイスを削除するには、gcloud iot devices delete
コマンドを実行します。
gcloud iot devices delete DEVICE_ID \ --project=PROJECT_ID \ --registry=REGISTRY_ID \ --region=REGION
レジストリを削除するには、gcloud iot registries delete
コマンドを実行します。
gcloud iot registries delete REGISTRY_ID \ --project=PROJECT_ID \ --region=REGION
API
以下の方法でデバイスとレジストリを削除します。
- Device
delete
メソッド: デバイスを削除 - Registries
delete
メソッド: レジストリを削除
次のサンプルは、レジストリからデバイスを削除する方法を示しています。
C#
public static object DeleteDevice(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
{
var res = cloudIot.Projects.Locations.Registries.Devices.Delete(name).Execute();
Console.WriteLine($"Removed device: {deviceId}");
}
catch (Google.GoogleApiException e)
{
Console.WriteLine(e.Message);
if (e.Error != null) return e.Error.Code;
return -1;
}
return 0;
}
Go
// deleteDevice deletes a device from a registry.
func deleteDevice(w io.Writer, projectID string, region string, registryID string, deviceID string) (*cloudiot.Empty, 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, deviceID)
response, err := client.Projects.Locations.Registries.Devices.Delete(path).Do()
if err != nil {
return nil, err
}
fmt.Fprintf(w, "Deleted device: %s\n", deviceID)
return response, nil
}
Java
/** Delete the given device from the registry. */
protected static void deleteDevice(
String deviceId, String projectId, String cloudRegion, String registryName)
throws GeneralSecurityException, IOException {
GoogleCredentials credential =
GoogleCredentials.getApplicationDefault().createScoped(CloudIotScopes.all());
JsonFactory jsonFactory = GsonFactory.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("Deleting device " + devicePath);
service.projects().locations().registries().devices().delete(devicePath).execute();
}
Node.js
// const cloudRegion = 'us-central1';
// 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 deleteDevice() {
// Construct request
const devPath = iotClient.devicePath(
projectId,
cloudRegion,
registryId,
deviceId
);
const [responses] = await iotClient.deleteDevice({name: devPath});
console.log('Successfully deleted device', responses);
}
deleteDevice();
PHP
use Google\Cloud\Iot\V1\DeviceManagerClient;
/**
* Delete the device with the given id.
*
* @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 delete_device(
$registryId,
$deviceId,
$projectId,
$location = 'us-central1'
) {
print('Deleting Device' . PHP_EOL);
// Instantiate a client.
$deviceManager = new DeviceManagerClient();
$deviceName = $deviceManager->deviceName($projectId, $location, $registryId, $deviceId);
$response = $deviceManager->deleteDevice($deviceName);
printf('Deleted %s' . PHP_EOL, $deviceName);
}
Python
このサンプルでは、Python 用の Google API クライアント ライブラリを使用します。# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# registry_id = 'your-registry-id'
# device_id = 'your-device-id'
print("Delete device")
client = iot_v1.DeviceManagerClient()
device_path = client.device_path(project_id, cloud_region, registry_id, device_id)
return client.delete_device(request={"name": device_path})
Ruby
# project_id = "Your Google Cloud project ID"
# location_id = "The Cloud region the registry is located in"
# registry_id = "The registry to create a device in"
# device_id = "The identifier of the device to delete"
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}"
device_path = "#{parent}/registries/#{registry_id}/devices/#{device_id}"
# Delete the device
result = iot_client.delete_project_location_registry_device(
device_path
)
puts "Deleted device."
次のサンプルは、レジストリを削除する方法を示しています。
C#
public static object DeleteRegistry(string projectId, string cloudRegion, string registryId)
{
var cloudIot = CreateAuthorizedClient();
// The resource name of the location associated with the key rings.
var name = $"projects/{projectId}/locations/{cloudRegion}/registries/{registryId}";
try
{
var registry = cloudIot.Projects.Locations.Registries.Delete(name).Execute();
}
catch (Google.GoogleApiException e)
{
Console.WriteLine(e.Message);
if (e.Error != null) return e.Error.Code;
return -1;
}
return 0;
}
Go
// deleteRegistry deletes a device registry if it is empty.
func deleteRegistry(w io.Writer, projectID string, region string, registryID string) (*cloudiot.Empty, 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
}
name := fmt.Sprintf("projects/%s/locations/%s/registries/%s", projectID, region, registryID)
response, err := client.Projects.Locations.Registries.Delete(name).Do()
if err != nil {
return nil, err
}
fmt.Fprintf(w, "Deleted registry: %s\n", registryID)
return response, nil
}
Java
/** Delete this registry from Cloud IoT. */
protected static void deleteRegistry(String cloudRegion, String projectId, String registryName)
throws GeneralSecurityException, IOException {
GoogleCredentials credential =
GoogleCredentials.getApplicationDefault().createScoped(CloudIotScopes.all());
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
HttpRequestInitializer init = new HttpCredentialsAdapter(credential);
final CloudIot service =
new CloudIot.Builder(GoogleNetHttpTransport.newTrustedTransport(), jsonFactory, init)
.setApplicationName(APP_NAME)
.build();
final String registryPath =
String.format(
"projects/%s/locations/%s/registries/%s", projectId, cloudRegion, registryName);
System.out.println("Deleting: " + registryPath);
service.projects().locations().registries().delete(registryPath).execute();
}
Node.js
// Client retrieved in callback
// const cloudRegion = 'us-central1';
// 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 deleteDeviceRegistry() {
// Construct request
const registryName = iotClient.registryPath(
projectId,
cloudRegion,
registryId
);
const [response] = await iotClient.deleteDeviceRegistry({
name: registryName,
});
console.log(response);
console.log('Successfully deleted registry');
}
deleteDeviceRegistry();
PHP
use Google\Cloud\Iot\V1\DeviceManagerClient;
/**
* Deletes the specified registry.
*
* @param string $registryId IOT Device Registry ID
* @param string $projectId Google Cloud project ID
* @param string $location (Optional) Google Cloud region
*/
function delete_registry(
$registryId,
$projectId,
$location = 'us-central1'
) {
// Instantiate a client.
$deviceManager = new DeviceManagerClient();
// Format the full registry path
$registryName = $deviceManager->registryName($projectId, $location, $registryId);
$deviceManager->deleteDeviceRegistry($registryName);
printf('Deleted Registry %s' . PHP_EOL, $registryId);
}
Python
このサンプルでは、Python 用の Google API クライアント ライブラリを使用します。# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# registry_id = 'your-registry-id'
print("Delete registry")
client = iot_v1.DeviceManagerClient()
registry_path = client.registry_path(project_id, cloud_region, registry_id)
try:
client.delete_device_registry(request={"name": registry_path})
print("Deleted registry")
return "Registry deleted"
except HttpError:
print("Error, registry not deleted")
raise
Ruby
# project_id = "Your Google Cloud project ID"
# location_id = "The Cloud region that you created the registry in"
# registry_id = "The Google Cloud IoT Core device registry identifier"
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
resource = "projects/#{project_id}/locations/#{location_id}/registries/#{registry_id}"
result = iot_client.delete_project_location_registry resource
puts "Deleted registry: #{registry_id}"
その他のコードサンプルについては、レジストリ管理のサンプルとデバイス管理のサンプルをご覧ください。
次のステップ
- MQTT または HTTP でデバイスを接続する
- Cloud IoT Core の割り当てと上限を確認する
。