Flutter物联网平台交互插件thingsboard_client的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter物联网平台交互插件thingsboard_client的使用

ThingsBoard API客户端库为Dart开发者提供了一套模型对象和服务,用于通过RESTful APIs和WebSocket协议与ThingsBoard平台进行通信。当前客户端版本兼容从3.6.3版本开始的ThingsBoard。

使用方法

下面是一个简单的使用示例,展示了如何使用thingsboard_client插件来登录、获取用户信息并登出。

示例代码

import 'package:thingsboard_client/thingsboard_client.dart';

void main() async {
  try {
    // 初始化ThingsBoard客户端
    var tbClient = ThingsboardClient('https://demo.thingsboard.io');
    
    // 登录到ThingsBoard平台
    await tbClient.login(LoginRequest('tenant@thingsboard.org', 'tenant'));

    // 检查是否已认证
    print('isAuthenticated=${tbClient.isAuthenticated()}');

    // 获取认证用户信息
    print('authUser: ${tbClient.getAuthUser()}');

    // 获取当前用户的详细信息
    var currentUserDetails = await tbClient.getUserService().getUser();
    print('currentUserDetails: $currentUserDetails');

    // 登出
    await tbClient.logout();

  } catch (e, s) {
    // 错误处理
    print('Error: $e');
    print('Stack: $s');
  }
}

步骤说明

  1. 初始化客户端:创建一个ThingsboardClient实例,传入你的ThingsBoard服务器地址。
  2. 登录:使用login方法并传入LoginRequest对象来进行登录操作。
  3. 检查认证状态:调用isAuthenticated()方法来确认用户是否已经成功认证。
  4. 获取用户信息:使用getAuthService().getUser()方法来获取当前登录用户的详细信息。
  5. 登出:调用logout()方法来退出当前会话。

特性和问题报告

如果你有任何特性请求或发现了bug,请在GitHub issue tracker上提交。

完整示例Demo

以下是一个更完整的示例,包括了设备数据的获取和显示:

import 'package:thingsboard_client/thingsboard_client.dart';
import 'dart:convert';

void main() async {
  try {
    var tbClient = ThingsboardClient('https://demo.thingsboard.io');
    await tbClient.login(LoginRequest('tenant@thingsboard.org', 'tenant'));

    if (tbClient.isAuthenticated()) {
      print('Successfully logged in!');

      // 获取设备列表
      var deviceService = tbClient.getDeviceService();
      var devices = await deviceService.getTenantDevices(pageSize: 10, page: 0);
      print('Devices: ${jsonEncode(devices)}');

      // 假设我们有一个设备ID,尝试获取该设备的最新遥测数据
      if (devices.data.isNotEmpty) {
        var deviceId = devices.data.first.id.id;
        var telemetryService = tbClient.getTelemetryService();
        var latestTelemetry = await telemetryService.getLatestTimeseries(deviceId, ['temperature', 'humidity']);
        print('Latest Telemetry: ${jsonEncode(latestTelemetry)}');
      }

      await tbClient.logout();
    }
  } catch (e, s) {
    print('Error: $e');
    print('Stack: $s');
  }
}

更多关于Flutter物联网平台交互插件thingsboard_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter物联网平台交互插件thingsboard_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个使用 thingsboard_client 插件与 ThingsBoard 物联网平台交互的 Flutter 代码示例。这个示例将展示如何连接到 ThingsBoard 服务器、认证设备并发送数据。

首先,确保你已经添加了 thingsboard_client 插件到你的 Flutter 项目中。你可以在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  thingsboard_client: ^最新版本号

然后运行 flutter pub get 来获取依赖。

下面是一个简单的 Flutter 应用示例,展示如何使用 thingsboard_client

import 'package:flutter/material.dart';
import 'package:thingsboard_client/thingsboard_client.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ThingsBoard Client Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ThingsBoardDemo(),
    );
  }
}

class ThingsBoardDemo extends StatefulWidget {
  @override
  _ThingsBoardDemoState createState() => _ThingsBoardDemoState();
}

class _ThingsBoardDemoState extends State<ThingsBoardDemo> {
  final String serverUrl = "https://your-thingsboard-server.com";
  final String accessToken = "your-device-access-token";

  @override
  void initState() {
    super.initState();
    _connectToThingsBoard();
  }

  void _connectToThingsBoard() async {
    try {
      // 创建 ThingsBoard 客户端
      var tbClient = ThingsBoardHttpClient(serverUrl, accessToken);

      // 示例:获取设备信息(替换为实际需要的 API 调用)
      var device = await tbClient.getDevice();

      // 打印设备信息
      print("Device Info: ${device.toString()}");

      // 发送数据到 ThingsBoard
      var telemetry = TelemetryData.fromJson({
        "temperature": 25.5,
        "humidity": 60.0,
      });
      await tbClient.sendTelemetry(telemetry);

      // 可以在这里更新 UI,例如显示成功消息
      setState(() {
        // 例如:显示成功发送数据的 Snackbar
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Telemetry data sent successfully!')),
        );
      });
    } catch (e) {
      // 处理错误
      print("Error connecting to ThingsBoard: $e");

      // 可以在这里更新 UI,例如显示错误消息
      setState(() {
        // 例如:显示错误消息的 Snackbar
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Failed to connect to ThingsBoard: $e')),
        );
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ThingsBoard Client Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Connecting to ThingsBoard...',
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项:

  1. ThingsBoardHttpClient 初始化serverUrlaccessToken 需要替换为你实际的 ThingsBoard 服务器地址和设备访问令牌。

  2. API 调用:这个示例中只展示了如何获取设备信息和发送遥测数据。根据你的实际需求,你可能需要调用 ThingsBoard 提供的其他 API,比如控制设备、订阅事件等。

  3. 错误处理:在生产环境中,请确保添加适当的错误处理和日志记录,以便能够诊断和处理可能遇到的问题。

  4. UI 更新:在 setState 中更新 UI 是一种简单的状态管理方法。对于更复杂的应用,你可能需要使用 Flutter 的状态管理库,如 Provider、Riverpod 或 BLoC。

  5. ThingsBoard API 文档:建议查阅 ThingsBoard 的官方文档,了解所有可用的 API 及其使用方法。

这个示例提供了一个基本的框架,你可以在此基础上扩展和定制以满足你的具体需求。

回到顶部