Flutter控制Elgato Key Light设备插件elgato_keylight_api的使用

Flutter 控制 Elgato Key Light 设备插件 elgato_keylight_api 的使用

功能

此包提供了对 Elgato Keylight 灯具的 API 支持。

未覆盖的功能

该插件不处理如何在您的网络中查找灯具的 IP 地址。您可以使用 multicast_dns 库通过以下查询来实现:

ResourceRecordQuery.serverPointer('_elg._tcp.local');

开始使用

对于每个灯具,首先需要创建一个 ElgatoKeylightAPI 对象:

ElgatoKeylightAPI api = ElgatoKeylightAPI(
  ip: 'elgato-key-light-air-ace6.local',
  port: 9123,
);

获取灯具信息

有三个可用的端点:

  • getLightOptions
  • getLightAccessoryInfo
  • getLightSettings

更新灯具

调用 getLightOptions() 后,更新对象并将其发送到 updateLightOptions()

KeyLightOptions lightOptions = await api.getLightOptions();

api.updateLightOptions(
  lightOptions.updateWith(on: !lightOptions.lights.first.isOn),
);

数据示例

灯具配件信息

{
  productName: "Elgato Key Light Air", 
  hardwareBoardType: 200, 
  firmwareBuildNumber: 216, 
  firmwareVersion: "1.0.3", 
  serialNumber: "XXX", 
  displayName: "May be empty", 
  features: ["lights"], 
  wifi: {
    ssid: "XXX", 
    frequency: 1234, 
    rssi: -1
  }
}

灯具设置

{
  powerOnBehavior: 1,
  powerOnBrightness: 20, 
  powerOnTemperature: 213, 
  switchOnDurationMs: 100, 
  switchOffDurationMs: 300, 
  colorChangeDurationMs: 100
}

灯具选项

{
  number: 1,
  lights: [
    {
      isOn: true,
      brightness: 28,
      temperature: 279
    }
  ]
}

示例代码

以下是完整的示例代码:

import 'package:elgato_keylight_api/elgato_keylight_api.dart';
import 'package:elgato_keylight_api/src/model/light_options.dart';

void main(List<String> arguments) {
  ElgatoKeylightAPI api = ElgatoKeylightAPI(
    ip: 'elgato-key-light-air-ace6.local',
    port: 9123,
  );

  printLightDetails(api);
}

Future<void> printLightDetails(ElgatoKeylightAPI api) async {
  // 打印灯具配件信息
  print('Light accessory info...');
  print(await api.getLightAccessoryInfo());

  // 打印灯具设置
  print('\nLight settings...');
  print(await api.getLightSettings());

  // 打印灯具选项
  print('\nLight options...');
  KeyLightOptions lightOptions = await api.getLightOptions();
  print(lightOptions);

  // 切换灯具开关状态
  api.updateLightOptions(
    lightOptions.updateWith(on: !lightOptions.lights.first.isOn),
  );
}

更多关于Flutter控制Elgato Key Light设备插件elgato_keylight_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter控制Elgato Key Light设备插件elgato_keylight_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个使用 elgato_keylight_api 插件来控制 Elgato Key Light 设备的 Flutter 代码示例。这个示例展示了如何连接到 Key Light 设备,获取其当前状态,并调整其亮度。

首先,确保你已经在 pubspec.yaml 文件中添加了 elgato_keylight_api 依赖:

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

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

接下来,在你的 Flutter 应用中实现以下代码:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  ElgatoKeyLight? _keyLight;
  bool _isConnected = false;
  int? _brightness;

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

  Future<void> _connectToKeyLight() async {
    try {
      // 假设你的 Key Light 设备在本地网络上的 IP 地址是 '192.168.1.100'
      // 你需要根据实际情况替换 IP 地址
      _keyLight = await ElgatoKeyLight.connect('192.168.1.100');
      setState(() {
        _isConnected = true;
        // 获取当前亮度
        _brightness = _keyLight!.brightness;
      });
    } catch (e) {
      print('Failed to connect to Key Light: $e');
    }
  }

  Future<void> _adjustBrightness(int brightness) async {
    if (_keyLight != null && _isConnected) {
      await _keyLight!.setBrightness(brightness);
      setState(() {
        _brightness = brightness;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Elgato Key Light Control'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              if (!_isConnected)
                Text('Connecting to Key Light...'),
              if (_isConnected)
                Text('Current Brightness: $_brightness'),
              Slider(
                value: _brightness ?? 0.toDouble(),
                min: 0,
                max: 100,
                divisions: 100,
                onChanged: (double value) {
                  // 调用 _adjustBrightness 时将 double 值转换为 int
                  _adjustBrightness(value.toInt());
                },
              ),
            ],
          ),
        ),
      ),
    );
  }

  @override
  void dispose() {
    _keyLight?.disconnect();
    super.dispose();
  }
}

代码说明:

  1. 依赖导入

    • 导入 flutter/material.dart 用于创建 Flutter 界面。
    • 导入 elgato_keylight_api/elgato_keylight_api.dart 用于控制 Elgato Key Light 设备。
  2. 主应用

    • MyApp 是主应用类,包含应用的状态管理。
  3. 状态管理

    • _keyLight 变量保存 ElgatoKeyLight 实例。
    • _isConnected 变量表示是否已连接到 Key Light 设备。
    • _brightness 变量保存当前亮度值。
  4. 连接设备

    • initState 方法中调用 _connectToKeyLight 方法尝试连接到 Key Light 设备。
    • 如果连接成功,设置 _isConnectedtrue 并获取当前亮度。
  5. 调整亮度

    • _adjustBrightness 方法用于调整亮度。
    • 使用 Slider 控件来动态调整亮度,Slider 的值变化时会调用 _adjustBrightness 方法。
  6. 释放资源

    • dispose 方法中调用 _keyLight?.disconnect() 来断开与 Key Light 设备的连接。

确保替换示例中的 IP 地址 '192.168.1.100' 为你的实际 Key Light 设备的 IP 地址。

这个示例展示了如何使用 elgato_keylight_api 插件在 Flutter 应用中控制 Elgato Key Light 设备的亮度。你可以根据需要进一步扩展功能,例如控制色温或其他可用设置。

回到顶部