快速开始
5分钟快速集成 StreamInd Node.js SDK 到你的项目。
前置要求
- ✅ Node.js 14+ - 支持 14.0.0 或更高版本
- ✅ npm 或 yarn - 包管理工具
- ✅ JavaScript/TypeScript 基础 - 了解 Promise 和 async/await
- ✅ StreamInd 平台账号 - 获取租户ID和产品认证信息
获取平台认证信息
在使用 SDK 前,你需要从 StreamInd 平台获取以下认证信息:
- tenant_id(租户ID)- 你的组织/账户唯一标识
- product_id(产品ID)- 设备所属产品的标识
- product_key(产品密钥)- 产品的访问密钥
登录 StreamInd 控制台,在 开发配置菜单 中可以查看和管理这些认证信息。
安装 SDK
步骤 1:下载包文件
访问 GitHub Releases 下载 streamind-sdk-1.0.0.tgz 文件。
步骤 2:安装
使用 npm:
npm install streamind-sdk-1.0.0.tgz使用 yarn:
yarn add streamind-sdk-1.0.0.tgz步骤 3:验证安装
const { SDK } = require('@streamind/sdk');
console.log('StreamInd SDK 已安装');或 TypeScript:
import { SDK } from '@streamind/sdk';
console.log('StreamInd SDK 已安装');第一个应用 (JavaScript)
完整示例
创建 index.js:
const { SDK, Config, Signal } = require('@streamind/sdk');
async function main() {
// 1. 创建配置
const config = new Config(
'device-001', // deviceId - 设备唯一ID
'sensor', // deviceType - 设备类型
'wss://your-platform.com/signals', // endpoint - WebSocket端点
'your-tenant-id', // tenantId - 替换为你的租户ID
'your-product-id', // productId - 替换为你的产品ID
'your-secret-key' // productKey - 替换为你的产品密钥
);
// 2. 创建SDK实例
const sdk = new SDK();
// 3. 注册终端
sdk.registerTerminal('terminal-1', config);
// 4. 设置指令回调
sdk.setDirectiveCallback('terminal-1', (directive) => {
console.log('收到指令:', directive.name);
console.log('指令参数:', directive.getPayload());
});
// 5. 设置连接状态回调(可选)
sdk.setConnectionCallback('terminal-1', (status, message) => {
console.log(`连接状态: ${status}, 消息: ${message}`);
});
// 6. 连接到平台
await sdk.connect('terminal-1');
console.log('已连接到StreamInd平台');
// 7. 发送信号
const signal = new Signal('sensor.data');
signal.getPayload().setNumber('temperature', 25.5);
signal.getPayload().setString('unit', 'celsius');
await sdk.sendSignal('terminal-1', signal);
console.log('信号已发送');
// 保持连接
await new Promise(resolve => setTimeout(resolve, 60000));
// 8. 断开连接
await sdk.disconnect('terminal-1');
console.log('已断开连接');
}
main().catch(console.error);运行应用
node index.js预期输出:
连接状态: connected, 消息: Connection established
已连接到StreamInd平台
信号已发送
收到指令: your.directive.name
指令参数: {...}
已断开连接第一个应用 (TypeScript)
完整示例
创建 index.ts:
import { SDK, Config, Signal, Directive } from '@streamind/sdk';
async function main(): Promise<void> {
// 1. 创建配置
const config = new Config(
'device-001',
'sensor',
'wss://your-platform.com/signals',
'your-tenant-id',
'your-product-id',
'your-secret-key'
);
// 2. 创建SDK实例
const sdk = new SDK();
// 3. 注册终端
sdk.registerTerminal('terminal-1', config);
// 4. 设置指令回调
sdk.setDirectiveCallback('terminal-1', (directive: Directive) => {
console.log('收到指令:', directive.name);
const payload = directive.getPayload();
// 处理指令...
});
// 5. 设置连接状态回调
sdk.setConnectionCallback('terminal-1', (status: string, message: string) => {
console.log(`连接状态: ${status}`);
if (message) {
console.log(`消息: ${message}`);
}
});
// 6. 连接到平台
await sdk.connect('terminal-1');
console.log('已连接到StreamInd平台');
// 7. 发送信号
const signal = new Signal('sensor.data');
signal.getPayload().setNumber('temperature', 25.5);
signal.getPayload().setString('unit', 'celsius');
await sdk.sendSignal('terminal-1', signal);
console.log('信号已发送');
// 保持连接
await new Promise<void>(resolve => setTimeout(resolve, 60000));
// 8. 断开连接
await sdk.disconnect('terminal-1');
console.log('已断开连接');
}
main().catch(console.error);TypeScript 配置
创建 tsconfig.json:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"lib": ["ES2020"],
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"moduleResolution": "node"
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}编译和运行
# 编译 TypeScript
npx tsc
# 运行编译后的代码
node dist/index.js代码解析
1. 创建配置
const config = new Config(
'device-001', // deviceId - 必需:设备唯一标识
'sensor', // deviceType - 必需:设备类型
'wss://...', // endpoint - 必需:WebSocket服务端点
'tenant-id', // tenantId - 必需:租户ID
'product-id', // productId - 必需:产品ID
'product-key' // productKey - 必需:产品密钥
);2. 注册和连接
const sdk = new SDK();
sdk.registerTerminal('terminal-1', config); // 注册终端
await sdk.connect('terminal-1'); // 异步连接3. 发送信号
const signal = new Signal('sensor.data'); // 创建信号
signal.getPayload().setNumber('temp', 25.5); // 添加数字数据
signal.getPayload().setString('unit', 'C'); // 添加字符串数据
await sdk.sendSignal('terminal-1', signal); // 发送4. 接收指令
sdk.setDirectiveCallback('terminal-1', (directive) => {
console.log(`指令名称: ${directive.name}`);
const payload = directive.getPayload();
// 读取数据
const value = payload.getNumber('param_name');
});常见场景
发送音频数据
const fs = require('fs');
// 读取OPUS音频文件
const audioData = fs.readFileSync('audio.opus');
// 发送音频
await sdk.sendAudioData('terminal-1', audioData);多终端管理
// 注册多个终端
const config1 = new Config(...);
const config2 = new Config(...);
sdk.registerTerminal('terminal-1', config1);
sdk.registerTerminal('terminal-2', config2);
// 批量连接
await sdk.connectAll();
// 向不同终端发送信号
await sdk.sendSignal('terminal-1', signal1);
await sdk.sendSignal('terminal-2', signal2);配置可选参数
const config = new Config(...);
// 设置心跳间隔(默认30秒)
config.heartbeatIntervalMs = 30000;
// 设置连接超时(默认10秒)
config.connectionTimeoutMs = 10000;
// 设置最大重连次数(默认10次)
config.maxReconnectAttempts = 10;错误处理
try {
await sdk.connect('terminal-1');
} catch (error) {
console.error('连接失败:', error);
}
try {
await sdk.sendSignal('terminal-1', signal);
} catch (error) {
console.error('发送信号失败:', error);
}使用环境变量
创建 .env 文件:
DEVICE_ID=sensor-001
DEVICE_TYPE=temperature_sensor
STREAMIND_ENDPOINT=wss://api.streamind.com/signals
STREAMIND_TENANT_ID=your-tenant-id
STREAMIND_PRODUCT_ID=your-product-id
STREAMIND_PRODUCT_KEY=your-secret-key使用 dotenv:
npm install dotenv代码中使用:
require('dotenv').config();
const { SDK, Config } = require('@streamind/sdk');
const config = new Config(
process.env.DEVICE_ID,
process.env.DEVICE_TYPE,
process.env.STREAMIND_ENDPOINT,
process.env.STREAMIND_TENANT_ID,
process.env.STREAMIND_PRODUCT_ID,
process.env.STREAMIND_PRODUCT_KEY
);定时发送数据
const { SDK, Config, Signal } = require('@streamind/sdk');
async function sendPeriodicData(sdk, terminalId, interval = 10000) {
let counter = 0;
setInterval(async () => {
const signal = new Signal('sensor.data');
signal.getPayload().setNumber('temperature', 20.0 + counter % 10);
signal.getPayload().setNumber('counter', counter);
try {
await sdk.sendSignal(terminalId, signal);
console.log(`[${counter}] 数据已发送`);
} catch (error) {
console.error('发送失败:', error);
}
counter++;
}, interval);
}
async function main() {
const config = new Config(...);
const sdk = new SDK();
sdk.registerTerminal('terminal-1', config);
await sdk.connect('terminal-1');
console.log('已连接,开始定时发送数据...');
// 每5秒发送一次数据
sendPeriodicData(sdk, 'terminal-1', 5000);
}
main().catch(console.error);Express.js 集成
const express = require('express');
const { SDK, Config, Signal } = require('@streamind/sdk');
const app = express();
app.use(express.json());
// 初始化SDK
const config = new Config(...);
const sdk = new SDK();
sdk.registerTerminal('terminal-1', config);
// API端点:发送传感器数据
app.post('/api/sensor-data', async (req, res) => {
try {
const { temperature, humidity } = req.body;
const signal = new Signal('sensor.data');
signal.getPayload().setNumber('temperature', temperature);
signal.getPayload().setNumber('humidity', humidity);
await sdk.sendSignal('terminal-1', signal);
res.json({ success: true, message: '数据已发送' });
} catch (error) {
res.status(500).json({ success: false, error: error.message });
}
});
// 启动服务器
app.listen(3000, async () => {
await sdk.connect('terminal-1');
console.log('服务器运行在 http://localhost:3000');
console.log('SDK 已连接');
});下一步
故障排查
无法连接
- 检查
endpoint是否正确 - 检查
tenantId、productId、productKey是否正确 - 检查网络连接
安装失败
- 确认 Node.js 版本 >= 14.0.0
- 使用
npm install --legacy-peer-deps尝试安装 - 清理缓存:
npm cache clean --force
Import 错误
- CommonJS:
const { SDK } = require('@streamind/sdk'); - ES Module:
import { SDK } from '@streamind/sdk'; - TypeScript:确保
tsconfig.json配置正确
Last updated on