Flutter智能家居控制插件yonomi_platform_sdk的使用
Flutter智能家居控制插件yonomi_platform_sdk的使用
Yonomi Dart SDK
Yonomi平台SDK旨在降低应用程序连接到Yonomi平台并处理物联网领域对象的难度。通过简化平台API的开发体验,该SDK将加快原型和完整生产解决方案的开发时间。它将使与平台交互变得更加愉快,并让开发者专注于其应用领域的特定问题,而不是专注于Yonomi的GraphQL实现细节。
目录
开始使用
安装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向平台发起请求。
我们可以通过以下步骤查询用户信息:
- 构建请求对象:
Request request = Request("YOUR-GRAPH-ENDPOINT-HERE",
{"Authorization": "Bearer YOUR-JWT-ACCESS-TOKEN-HERE"});
- 使用
UserRepository
类获取当前用户的详细信息:
final userFromRequest = await UserRepository.getUserDetails(request);
- 现在让我们解包
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
更多关于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
是你要执行的操作(例如开、关等)。
注意事项
- 安全性:不要将敏感信息硬编码在客户端代码中。考虑使用环境变量或安全的密钥管理服务。
- 错误处理:在实际应用中,添加更多的错误处理和用户反馈。
- OAuth流程:上面的代码示例简化了OAuth流程。在实际应用中,你需要处理回调URL,并在其中提取授权码,然后交换访问令牌。
这个示例提供了一个基本的框架,你可以根据需要进行扩展和修改。