Skip to Content

快速开始

5分钟快速集成 StreamInd Node.js SDK 到你的项目。

前置要求

  • Node.js 14+ - 支持 14.0.0 或更高版本
  • npm 或 yarn - 包管理工具
  • JavaScript/TypeScript 基础 - 了解 Promise 和 async/await
  • StreamInd 平台账号 - 获取租户ID和产品认证信息

获取平台认证信息

在使用 SDK 前,你需要从 StreamInd 平台获取以下认证信息:

  1. tenant_id(租户ID)- 你的组织/账户唯一标识
  2. product_id(产品ID)- 设备所属产品的标识
  3. 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 已连接'); });

下一步

故障排查

无法连接

  1. 检查 endpoint 是否正确
  2. 检查 tenantIdproductIdproductKey 是否正确
  3. 检查网络连接

安装失败

  1. 确认 Node.js 版本 >= 14.0.0
  2. 使用 npm install --legacy-peer-deps 尝试安装
  3. 清理缓存:npm cache clean --force

Import 错误

  1. CommonJS:const { SDK } = require('@streamind/sdk');
  2. ES Module:import { SDK } from '@streamind/sdk';
  3. TypeScript:确保 tsconfig.json 配置正确
Last updated on