Flutter智能家居控制插件yonomi_platform_sdk的使用

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

Flutter智能家居控制插件yonomi_platform_sdk的使用

Yonomi Dart SDK

Yonomi Dart SDK CircleCI codecov

Yonomi平台SDK旨在降低应用程序连接到Yonomi平台并处理物联网领域对象的难度。通过简化平台API的开发体验,该SDK将加快原型和完整生产解决方案的开发时间。它将使与平台交互变得更加愉快,并让开发者专注于其应用领域的特定问题,而不是专注于Yonomi的GraphQL实现细节。


目录

  1. 安装SDK
  2. 设置环境
  3. 向平台发起请求
  4. 获取所有可用集成
  5. 检索设备
  6. 特性特定的操作
  7. 许可

开始使用

安装SDK

从pub.dev安装

在您的pubspec.yaml文件中添加以下依赖项:

dependencies:
  flutter:
    sdk: flutter

  yonomi_sdk_dart: ^1.0.0
从源码安装

克隆最新源码到您选择的目录:

git clone https://github.com/Yonomi/yonomi-sdk-dart.git

构建生成的源文件:

cd yonomi-sdk-dart
flutter pub run build_runner build --delete-conflicting-outputs

然后,在您的pubspec.yaml文件中添加以下依赖项:

dependencies:
  flutter:
    sdk: flutter

  yonomi_sdk_dart:
    path: <checked_out_path>/yonomi-sdk-dart

设置环境

您将使用以下URL与我们的平台进行交互:

https://platform.yonomi.cloud/graphql

前提条件:您需要准备好我们的平台。

您需要一个用户ID、租户ID和私钥来生成访问令牌并向平台发起请求。

如果您需要任何这些信息的帮助,请联系我们的销售团队以帮助您开始使用我们的平台。


向平台发起请求

让我们看看如何利用Dart SDK向平台发起请求。

我们可以通过以下步骤查询用户信息:

  1. 构建请求对象:
Request request = Request("YOUR-GRAPH-ENDPOINT-HERE",
    {"Authorization": "Bearer YOUR-JWT-ACCESS-TOKEN-HERE"});
  1. 使用UserRepository类获取当前用户的详细信息:
final userFromRequest = await UserRepository.getUserDetails(request);
  1. 现在让我们解包userFromRequest对象以显示一些关于我们用户的信息:
print("My User ID: ${userFromRequest?.id}");
print("Date of my user's first activity: ${userFromRequest?.firstActivityAt}");
print("Date of my user's last activity: ${userFromRequest?.lastActivityAt}");

获取所有可用集成

前提条件:确保您已经构建了一个请求对象(参见上一步骤)。

要获取平台上所有可用的集成列表:

final integrations = await AccountRepository.getAllIntegrations(request);

您将得到一个集成列表:

{id: "INTEGRATION-ID-1", displayName: "An Integration"},
{id: "INTEGRATION-ID-2", displayName: "Another Integration"},

从列表中选择您感兴趣的集成并复制其ID。

我们将通过生成一个URL来将此集成添加到我们的帐户中,该URL允许我们进行身份验证。

String generatedAccountUrl = await AccountRepository.generateAccountUrl("INTEGRATION-ID-1", request);

此调用将返回一个字符串URL。

应用程序可以导航到此URL进行身份验证并将用户的帐户链接起来。

最后,为了验证帐户是否已链接,我们可以检索通过帐户链接流程授权的所有帐户列表:

AccountRepository.getLinkedAccounts(integrationId, request);

验证该帐户是否在列表中。


检索设备

前提条件:确保您已经构建了一个请求对象(参见上一步骤)。

要检索所有可用的设备:

DevicesRepository.getDevices(request);

您将得到一个设备列表,例如:

{
    id: "DEVICE-ID-HERE",
    displayName: "The device name",
    description: "A description of this device",
    manufacturerName: "The manufacturer of this device",
    traits: [{
    	name: "THERMOSTAT_SETTING",
    	instance: "default",
    	...
    }]

    ...
}

要获取特定设备的详细信息,可以使用getDeviceDetails方法:

DevicesRepository.getDeviceDetails(request, "DEVICE-ID-HERE");

如果您有一个具有Thermostat特性的设备,可以使用getThermostatDetails方法来检索仅针对恒温器设备的状态数据,例如:

Device thermostatDevice = await DevicesRepository.getThermostatDetails(request, "DEVICE-ID-HERE");

要获取当前目标温度,您可以这样做:

print(thermostatDevice.traits.first.state.value);

特性特定的操作

锁定特性
操作:锁定或解锁

要锁定或解锁具有锁特性的设备,可以使用LockRepository类中的sendLockUnlockAction方法:

示例:如果您希望锁定设备,请将最后一个参数设置为true,否则将其设置为false

LockRepository.sendLockUnlockAction(request, "YOUR-DEVICE-ID-HERE", true);
恒温器特性
操作:设置目标温度

要设置具有恒温器特性的设备的目标温度,可以使用ThermostatRepository类中的setPointThermostat方法:

示例:将恒温器的目标温度设置为23.0°C:

ThermostatRepository.setPointThermostat(request, "YOUR-DEVICE-ID-HERE", 23.0);
操作:设置恒温器模式

要设置具有恒温器特性的设备的恒温器模式,可以使用setMode方法:

示例:将恒温器的模式设置为AUTO:

ThermostatRepository.setMode(request, "YOUR-DEVICE-ID-HERE", ThermostatMode.auto);

您可以从以下模式中选择,这些模式列在ThermostatMode枚举中:

{OFF, AUTO, HEAT, COOL, FANONLY, DEHUMIDIFY, AIRFLOW}

更多关于Flutter智能家居控制插件yonomi_platform_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter智能家居控制插件yonomi_platform_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中集成并使用yonomi_platform_sdk插件来实现智能家居控制,你可以按照以下步骤进行操作。这里将提供一个基本的代码示例,展示如何初始化SDK、登录用户以及控制设备。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加yonomi_platform_sdk依赖:

dependencies:
  flutter:
    sdk: flutter
  yonomi_platform_sdk: ^最新版本号  # 请替换为实际最新版本号

然后运行flutter pub get来安装依赖。

2. 初始化SDK

在你的Flutter应用的入口文件(通常是main.dart)中,初始化YonomiPlatformSdk

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化SDK
  YonomiPlatformSdk.initialize(
    clientId: '你的客户端ID',
    clientSecret: '你的客户端密钥',
    redirectUri: '你的重定向URI',
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

3. 用户登录

HomeScreen中,添加一个按钮来触发用户登录流程。这里使用OAuth2授权码流程作为示例。

import 'package:flutter/material.dart';
import 'package:yonomi_platform_sdk/yonomi_platform_sdk.dart';
import 'package:url_launcher/url_launcher.dart';

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('智能家居控制'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 生成授权URL
            String authUrl = await YonomiPlatformSdk.getAuthorizationUrl();

            // 在WebView或浏览器中打开URL
            if (await canLaunch(authUrl)) {
              await launch(authUrl);
            } else {
              throw 'Could not launch $authUrl';
            }

            // 在实际使用中,你需要在授权成功后的回调URL中处理code,并调用exchangeCodeForAccessToken
          },
          child: Text('登录'),
        ),
      ),
    );
  }
}

注意:在真实应用中,你需要在授权回调URL中捕获授权码(code),然后使用该授权码交换访问令牌(access token)。这通常涉及到设置一个自定义的URL scheme,并在AndroidManifest.xml和iOS的Info.plist中配置它。

4. 交换访问令牌并控制设备

一旦你有了访问令牌,你可以使用它来调用Yonomi API控制设备。这里假设你已经通过某种方式获得了访问令牌,并将其存储在accessToken变量中。

// 假设 accessToken 是你已经通过授权码交换得到的访问令牌
String accessToken = '你的访问令牌';

void controlDevice(String deviceId, String action) async {
  try {
    // 设置访问令牌
    await YonomiPlatformSdk.setAccessToken(accessToken);

    // 执行设备控制操作
    var response = await YonomiPlatformSdk.executeDeviceAction(deviceId, action);
    print('设备控制响应: $response');
  } catch (e) {
    print('设备控制失败: $e');
  }
}

在上面的代码中,deviceId是你要控制的设备的ID,action是你要执行的操作(例如开、关等)。

注意事项

  1. 安全性:不要将敏感信息硬编码在客户端代码中。考虑使用环境变量或安全的密钥管理服务。
  2. 错误处理:在实际应用中,添加更多的错误处理和用户反馈。
  3. OAuth流程:上面的代码示例简化了OAuth流程。在实际应用中,你需要处理回调URL,并在其中提取授权码,然后交换访问令牌。

这个示例提供了一个基本的框架,你可以根据需要进行扩展和修改。

回到顶部