Flutter智能家居控制插件yeedart的使用
Flutter智能家居控制插件yeedart的使用
简介
yeedart
是一个用于通过局域网控制Yeelight产品的Dart库。它可以帮助开发者轻松地与Yeelight设备进行交互,实现灯光控制、场景设置等功能。
安装
-
依赖安装
- 使用Dart:
$ dart pub add yeedart
- 使用Flutter:
$ flutter pub add yeedart
这将向你的
pubspec.yaml
文件中添加如下依赖(并自动运行dart pub get
或flutter pub get
):dependencies: yeedart: ^0.3.2
- 使用Dart:
-
导入库 在你的Dart代码中,可以使用以下语句导入
yeedart
:import 'package:yeedart/yeedart.dart';
使用示例
1. 设备发现
首先,你需要知道设备的IP地址和端口。你可以使用 Yeelight.discover()
方法来发现网络中的Yeelight设备。该方法返回一个包含 DiscoveryResponse
对象的列表。
final responses = await Yeelight.discover();
if (responses.isEmpty) {
print("没有找到网络中的Yeelight设备");
return;
}
final response = responses.first; // 或者根据需要过滤
每个 DiscoveryResponse
对象包含设备的IP地址、端口以及其他属性(如名称、固件版本、当前状态等)。你还可以指定发现的超时时间,默认是2秒。
注意:在Android上,设备发现需要授予
INTERNET
权限。
2. 连接到设备
连接到设备后,你可以发送命令来控制灯光。例如,打开灯光、设置颜色、调整亮度等。
final device = Device(
address: InternetAddress("192.168.1.183"),
port: 55443,
);
await device.turnOn(); // 打开设备
// 设置红色,平滑过渡
await device.setRGB(
color: Colors.red,
effect: const Effect.smooth(),
duration: const Duration(milliseconds: 500),
);
await device.setBrightness(brightness: 70); // 设置亮度为70%
device.disconnect(); // 完成后断开连接
提示:每次发送命令时,都会自动创建一个新的TCP连接。完成操作后,记得调用
device.disconnect()
断开连接。如果你再次发送命令,会自动重新建立连接。
3. 主灯和背景灯
某些设备配备了两个灯:主灯和背景灯。默认情况下,Device
类中的方法控制的是主灯。如果你想控制背景灯,可以在调用方法时指定 lightType
参数。
// 设置主灯为红色
await device.setRGB(color: Colors.red);
// 设置背景灯为蓝色
await device.setRGB(
color: Colors.blue,
lightType: LightType.background,
);
// 同时切换主灯和背景灯
await device.toggle(lightType: LightType.both);
4. 流(Flow)
流(Flow)是一系列颜色过渡的组合。你可以使用 startFlow()
方法启动一个流,并提供一个 Flow
对象。Flow
对象有三个必需参数:count
(循环次数)、action
(流结束后的动作)和 transitions
(过渡列表)。
以下是一个简单的例子,循环显示红、绿、蓝三种颜色:
await device.startFlow(
flow: const Flow(
count: 0, // 无限循环
action: FlowAction.recover(), // 恢复流开始前的状态
transitions: [
FlowTransition.rgb(color: 0xff0000, brightness: 100), // 红色
FlowTransition.sleep(duration: Duration(milliseconds: 500)), // 延迟500毫秒
FlowTransition.rgb(color: 0x00ff00, brightness: 100), // 绿色
FlowTransition.sleep(duration: Duration(milliseconds: 500)),
FlowTransition.rgb(color: 0x0000ff, brightness: 100), // 蓝色
FlowTransition.sleep(duration: Duration(milliseconds: 500)),
],
),
);
要手动停止流,可以使用 device.stopFlow()
。
5. 场景(Scene)
场景允许你将灯光设置为特定的状态。你可以使用 setScene()
方法并提供一个 Scene
对象。
例如,设置灯光为红色且亮度为100%:
await device.setScene(
scene: Scene.color(color: 0xff0000, brightness: 100),
);
你还可以使用其他类型的场景,如色温模式、自动延迟关闭等。
完整示例Demo
以下是一个完整的示例,展示了如何使用 yeedart
控制Yeelight设备。该示例包括设备发现、连接、控制灯光颜色、亮度以及启动流。
import 'package:yeedart/yeedart.dart';
Future<void> main() async {
// 1. 发现设备
final responses = await Yeelight.discover();
if (responses.isEmpty) {
print("没有找到网络中的Yeelight设备");
return;
}
final response = responses.first;
print("发现设备: ${response.name}, IP: ${response.address}, 端口: ${response.port}");
// 2. 连接到设备
final device = Device(address: response.address, port: response.port!);
// 3. 获取设备属性
final props = await device.getProps(
id: 1,
parameters: [
'name',
'model',
'fw_ver',
'power',
'color_mode',
'bright',
'ct',
'rgb',
'hue',
'sat',
],
);
print("设备属性: $props");
// 4. 打开灯光
await device.turnOn();
print("灯光已打开");
// 5. 设置颜色为红色,平滑过渡
await device.setRGB(
color: Colors.red,
effect: const Effect.smooth(),
duration: const Duration(milliseconds: 500),
);
print("灯光已设置为红色");
// 6. 设置亮度为70%
await device.setBrightness(brightness: 70);
print("亮度已设置为70%");
// 7. 启动颜色流,循环显示红、绿、蓝
await device.startFlow(
flow: const Flow(
count: 0, // 无限循环
action: FlowAction.recover(), // 恢复流开始前的状态
transitions: [
FlowTransition.rgb(color: 0xff0000, brightness: 100), // 红色
FlowTransition.sleep(duration: Duration(milliseconds: 500)), // 延迟500毫秒
FlowTransition.rgb(color: 0x00ff00, brightness: 100), // 绿色
FlowTransition.sleep(duration: Duration(milliseconds: 500)),
FlowTransition.rgb(color: 0x0000ff, brightness: 100), // 蓝色
FlowTransition.sleep(duration: Duration(milliseconds: 500)),
],
),
);
print("颜色流已启动");
// 8. 等待几秒钟后停止流
await Future<void>.delayed(const Duration(seconds: 10));
await device.stopFlow();
print("颜色流已停止");
// 9. 关闭灯光
await device.turnOff();
print("灯光已关闭");
// 10. 断开连接
device.disconnect();
print("已断开连接");
}
更多关于Flutter智能家居控制插件yeedart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter智能家居控制插件yeedart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成并使用yeedart
插件来控制智能家居设备,特别是Yeelight品牌的设备,是一个相对直接的过程。yeedart
是一个Flutter包,用于与Yeelight设备通信和控制。以下是一个简单的代码示例,展示了如何使用yeedart
来发现和控制Yeelight设备。
首先,确保你已经在pubspec.yaml
文件中添加了yeedart
依赖:
dependencies:
flutter:
sdk: flutter
yeedart: ^最新版本号 # 请替换为当前可用的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来是一个完整的Flutter应用示例,展示如何使用yeedart
:
import 'package:flutter/material.dart';
import 'package:yeedart/yeedart.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final YeelightController _controller = YeelightController();
List<Device> _devices = [];
bool _isDiscovering = false;
@override
void initState() {
super.initState();
_startDiscovery();
}
@override
void dispose() {
_stopDiscovery();
super.dispose();
}
Future<void> _startDiscovery() async {
setState(() {
_isDiscovering = true;
});
try {
_devices = await _controller.discoverDevices();
} catch (e) {
print("Discovery error: $e");
} finally {
setState(() {
_isDiscovering = false;
});
}
}
Future<void> _stopDiscovery() async {
// 在这个例子中,我们只是在初始化时开始发现,所以没有特定的停止逻辑
// 但如果你需要在运行时停止发现,你可能需要实现一些机制来管理发现过程
}
Future<void> _turnOnDevice(Device device) async {
try {
await device.turnOn();
} catch (e) {
print("Failed to turn on device: $e");
}
}
Future<void> _turnOffDevice(Device device) async {
try {
await device.turnOff();
} catch (e) {
print("Failed to turn off device: $e");
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Yeelight Control'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
if (_isDiscovering)
CircularProgressIndicator(),
Expanded(
child: ListView.builder(
itemCount: _devices.length,
itemBuilder: (context, index) {
final device = _devices[index];
return Card(
child: ListTile(
title: Text(device.name ?? 'Unknown Device'),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: Icon(Icons.lightbulb_outline),
onPressed: () async {
if (await device.isOn()) {
await _turnOffDevice(device);
} else {
await _turnOnDevice(device);
}
setState(() {}); // 更新UI以反映设备状态变化(如果需要)
},
),
],
),
),
);
},
),
),
],
),
),
),
);
}
}
在这个示例中:
- 我们创建了一个
YeelightController
实例来管理Yeelight设备的通信。 - 在
initState
方法中,我们启动了设备发现过程。 - 发现的设备被存储在
_devices
列表中,并在UI中显示。 - 对于每个设备,我们提供了一个按钮来切换其电源状态。
请注意,这个示例假设你已经正确配置了Yeelight设备,并且它们在你的网络上可用。此外,实际应用中可能需要更复杂的错误处理和状态管理,特别是当你需要处理多个设备或更复杂的操作时。
确保在实际部署前充分测试你的应用,并查看yeedart
的文档以获取更多功能和配置选项。