-
Notifications
You must be signed in to change notification settings - Fork 1
/
flutter_home_connect_sdk_example.dart
90 lines (74 loc) · 2.68 KB
/
flutter_home_connect_sdk_example.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import 'dart:io';
import 'package:homeconnect/homeconnect.dart';
const accessToken = "";
const refreshToken = "";
const clientSecret = "";
class SandboxAuthorizer extends HomeConnectAuth {
@override
Future<HomeConnectAuthCredentials> authorize(Uri baseUrl, HomeConnectClientCredentials credentials) {
throw UnimplementedError();
}
}
void main() async {
// set up the api
HomeConnectApi api = HomeConnectApi(
Uri.parse('https://simulator.home-connect.com/'),
credentials: HomeConnectClientCredentials(
clientId: 'Your client id',
clientSecret: 'Your client secret',
redirectUri: 'https://example.com',
),
authenticator: SandboxAuthorizer(),
);
api.storage.setCredentials(HomeConnectAuthCredentials(
accessToken: accessToken,
refreshToken: refreshToken,
expirationDate: DateTime.now().add(Duration(days: 1)),
));
// close stream on exit
ProcessSignal.sigint.watch().listen((signal) {
print("Closing stream...");
api.closeEventChannel();
exit(0);
});
try {
// get all devices
final res = await api.getDevices();
// select the first oven
final selectedDevice = res.firstWhere((element) => element.info.type == DeviceType.oven);
// initialize the device, this fetches all available programs and status
await selectedDevice.init();
// devices listen to events, we need to open a stream to receive them
selectedDevice.startListening();
// print all available programs
for (var element in selectedDevice.programs) {
print(element.key);
}
// print devices status
for (var element in selectedDevice.status) {
print(element.key);
}
// we need to select a program to get its options and constraints
await selectedDevice.selectProgram(programKey: 'Cooking.Oven.Program.HeatingMode.TopBottomHeating');
// print all available options
for (var option in selectedDevice.selectedProgram!.options) {
print(option.key);
print(option.constraints!.toJson());
}
final option1 = ProgramOptions.toCommandPayload(key: 'Cooking.Oven.Option.SetpointTemperature', value: 200);
final option2 = ProgramOptions.toCommandPayload(key: 'BSH.Common.Option.Duration', value: 500);
// start the program with the selected options
await selectedDevice.startProgram(options: [option1, option2]);
await Future.delayed(Duration(seconds: 5));
selectedDevice.stopProgram();
await Future.delayed(Duration(seconds: 5));
// turn off the oven
selectedDevice.turnOff();
await Future.delayed(Duration(seconds: 5));
// turn on the oven
selectedDevice.turnOn();
} catch (e) {
// close the stream on error
api.closeEventChannel();
}
}