Я пытаюсь создать флаттер-приложение для управления освещением Philips Hue, но у меня проблемы с hue_dart.

У меня есть лампы Philips Hue, и я хочу иметь возможность менять цвет с помощью Dart и Flutter. Я пытался использовать библиотеку под названием hue_dart, но когда я запускаю ее как файл Dart, она может управлять только один свет, и я должен каждый раз нажимать кнопку на мосту.

Вот мой код:

import 'package:http/http.dart';
import 'package:hue_dart/hue_dart.dart';

main(List<String> arguments) async {
  final client = Client();

  final discovery = BridgeDiscovery(client);

  List<DiscoveryResult> discoverResults = await discovery.automatic();
  final discoveryResult = discoverResults.first;

  var bridge = Bridge(client, discoveryResult.ipAddress);

  final whiteListItem = await bridge.createUser('dart_hue#example');

  bridge.username = whiteListItem.username;

  List<Light> lights = await bridge.lights();

  final light = lights.first.changeColor(red: 1.0, green: 0, blue: 1.0);
  LightState state = lightStateForColorOnly(light);
  state = state.rebuild(
    (s) => s
      ..on = true
      ..brightness = 10,
  );
  await bridge.updateLightState(light.rebuild(
    (l) => l..state = state.toBuilder(),
  ));
}

Как бы я сделал пользователя, который сохраняется? И тот, который может управлять множеством огней, а не только первым, который он возвращает?


person AyeAreEm    schedule 29.04.2020    source источник


Ответы (1)


Вы должны нажимать кнопку «Мост» каждый раз, когда создаете пользователя, которому каждый раз требуется физическая авторизация. Распечатайте созданное имя пользователя, чтобы отобразить случайно сгенерированное имя пользователя, созданное Bridge.

final whiteListItem = await bridge.createUser('dart_hue#example');
print(whiteListItem);
bridge.username = whiteListItem.username;

Затем вы можете избавиться от шага createUser и использовать эту случайную строку в качестве имени пользователя, поскольку теперь он является авторизованным пользователем на мосту.

//final whiteListItem = await bridge.createUser('dart_hue#example');
bridge.username = 'the printed value'

Что касается управления одним аспектом света, вы всегда меняете состояние только первого источника света, который возвращается из GET с помощью lights.first. Я не пробовал, но повторение было бы хорошим следующим шагом:

Set<Light> set = Set.from(lights);
set.forEach((element) => 
  changeState(element)
);
person MPrideauxGhee    schedule 29.07.2020