Google api 节点库 - 缺少 cloudiot
Google apis node library - cloudiot missing
我一直在寻找一种方法来管理具有 google 云功能的云物联网核心设备。
经过几天的测试,我不知道如何将设备添加到注册表。
我尝试使用 npm 在我的电脑上安装 googleapis 模块,但是我在 apis 目录中找不到 cloudiot 核心,而 github(已安装包的版本)是 22.2.0 但在 github 上是 22.3.0)。
有什么想法吗?如何安装最新版本?
更新
目前看来,如果您没有从发现文档中明确加载 API,则 NodeJS 客户端库会出现 IoT 问题。
要暂时解决此问题,请执行以下操作来初始化您的 API 客户端:
const serviceAccountJson = `/home/class/iot_creds.json`;
const API_VERSION = 'v1';
const DISCOVERY_API = 'https://cloudiot.googleapis.com/$discovery/rest';
function getClient (serviceAccountJson, cb) {
const serviceAccount = JSON.parse(fs.readFileSync(serviceAccountJson));
const jwtAccess = new google.auth.JWT();
jwtAccess.fromJSON(serviceAccount);
// Note that if you require additional scopes, they should be specified as a
// string, separated by spaces.
jwtAccess.scopes = 'https://www.googleapis.com/auth/cloud-platform';
// Set the default authentication to the above JWT access.
google.options({ auth: jwtAccess });
const discoveryUrl = `${DISCOVERY_API}?version=${API_VERSION}`;
google.discoverAPI(discoveryUrl, {}, (err, client) => {
if (err) {
console.log('Error during API discovery', err);
return undefined;
}
cb(client);
});
}
原创
NodeJS management sample 目前使用 Google API 客户端(例如 package.json 中的 "googleapis": "20.1.0"
)库而不是一个单独的库。
如果您还没有,请尝试 运行 本地示例,如示例自述文件中所述:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
cd nodejs-docs-samples/iot/manager
npm install
node manager.js
如果示例在本地不起作用,请告知我们节点版本 (node --version
) 和安装的模块版本(package.lock 的输出或 npm ls
)。
如果示例在本地为您工作(在 运行 npm install
之后),那么问题在于如何从云函数后端执行示例。
Google 云平台服务 API 的惯用客户端库
所以,你可能很久以前就解决了这个问题,我不完全确定它们何时可用,但是,你也可以利用 Google 的 Idiomatic 客户端库:https://cloud.google.com/nodejs/docs/reference/iot/0.1.x/
从 Cloud Functions 创建设备可以这么简单:
package.json
{
"name": "iot-manage",
"version": "0.0.1",
"engines": {
"node": ">=4.3.2"
},
"dependencies": {
"@google-cloud/iot": "0.1.x"
}
}
index.js
const cloudRegion = [region];
const projectId = [GPC project];
const registryId = [registry];
const device = [device];
const iot = require('@google-cloud/iot');
exports.createDevice = (req, res) => {
var message = req.query.message || req.body.message || 'Devices Parsed';
var client = new iot.v1.DeviceManagerClient({ });
var formattedParent = client.registryPath(projectId, cloudRegion, registryId);
const device = {
Id: device,
credentials: [
{
publicKey: {
format: 'RSA_X509_PEM',
key: "-----BEGIN CERTIFICATE-----\n\
MIIC9TCCAd2gAwIBAgIJAIYmm9vVQM4rMA0GCSqGSIb3DQEBCwUAMBExDzANBgNV\n\
...
Q2VnbmKgQjgE+GZU58lSlrfWmXF+aZrbDz22cARP/TYqt9o1ieGOE3E=\n\
-----END CERTIFICATE-----"
}
}
]
};
var request = {
parent: formattedParent,
device: device,
};
client.createDevice(request)
.then(responses => {
var response = responses[0];
console.log("Created Device");
// doThingsWith(response)
})
.catch(err => {
console.error(err);
});
res.status(200).send(message);
};
我一直在寻找一种方法来管理具有 google 云功能的云物联网核心设备。 经过几天的测试,我不知道如何将设备添加到注册表。
我尝试使用 npm 在我的电脑上安装 googleapis 模块,但是我在 apis 目录中找不到 cloudiot 核心,而 github(已安装包的版本)是 22.2.0 但在 github 上是 22.3.0)。
有什么想法吗?如何安装最新版本?
更新
目前看来,如果您没有从发现文档中明确加载 API,则 NodeJS 客户端库会出现 IoT 问题。
要暂时解决此问题,请执行以下操作来初始化您的 API 客户端:
const serviceAccountJson = `/home/class/iot_creds.json`;
const API_VERSION = 'v1';
const DISCOVERY_API = 'https://cloudiot.googleapis.com/$discovery/rest';
function getClient (serviceAccountJson, cb) {
const serviceAccount = JSON.parse(fs.readFileSync(serviceAccountJson));
const jwtAccess = new google.auth.JWT();
jwtAccess.fromJSON(serviceAccount);
// Note that if you require additional scopes, they should be specified as a
// string, separated by spaces.
jwtAccess.scopes = 'https://www.googleapis.com/auth/cloud-platform';
// Set the default authentication to the above JWT access.
google.options({ auth: jwtAccess });
const discoveryUrl = `${DISCOVERY_API}?version=${API_VERSION}`;
google.discoverAPI(discoveryUrl, {}, (err, client) => {
if (err) {
console.log('Error during API discovery', err);
return undefined;
}
cb(client);
});
}
原创
NodeJS management sample 目前使用 Google API 客户端(例如 package.json 中的 "googleapis": "20.1.0"
)库而不是一个单独的库。
如果您还没有,请尝试 运行 本地示例,如示例自述文件中所述:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
cd nodejs-docs-samples/iot/manager
npm install
node manager.js
如果示例在本地不起作用,请告知我们节点版本 (node --version
) 和安装的模块版本(package.lock 的输出或 npm ls
)。
如果示例在本地为您工作(在 运行 npm install
之后),那么问题在于如何从云函数后端执行示例。
Google 云平台服务 API 的惯用客户端库 所以,你可能很久以前就解决了这个问题,我不完全确定它们何时可用,但是,你也可以利用 Google 的 Idiomatic 客户端库:https://cloud.google.com/nodejs/docs/reference/iot/0.1.x/
从 Cloud Functions 创建设备可以这么简单:
package.json
{
"name": "iot-manage",
"version": "0.0.1",
"engines": {
"node": ">=4.3.2"
},
"dependencies": {
"@google-cloud/iot": "0.1.x"
}
}
index.js
const cloudRegion = [region];
const projectId = [GPC project];
const registryId = [registry];
const device = [device];
const iot = require('@google-cloud/iot');
exports.createDevice = (req, res) => {
var message = req.query.message || req.body.message || 'Devices Parsed';
var client = new iot.v1.DeviceManagerClient({ });
var formattedParent = client.registryPath(projectId, cloudRegion, registryId);
const device = {
Id: device,
credentials: [
{
publicKey: {
format: 'RSA_X509_PEM',
key: "-----BEGIN CERTIFICATE-----\n\
MIIC9TCCAd2gAwIBAgIJAIYmm9vVQM4rMA0GCSqGSIb3DQEBCwUAMBExDzANBgNV\n\
...
Q2VnbmKgQjgE+GZU58lSlrfWmXF+aZrbDz22cARP/TYqt9o1ieGOE3E=\n\
-----END CERTIFICATE-----"
}
}
]
};
var request = {
parent: formattedParent,
device: device,
};
client.createDevice(request)
.then(responses => {
var response = responses[0];
console.log("Created Device");
// doThingsWith(response)
})
.catch(err => {
console.error(err);
});
res.status(200).send(message);
};