Add FunctionType enum and ValueModel class

- Added FunctionType enum with values Boolean, Enum, Integer, Raw, String.
- Introduced ValueModel class to handle unit, min, max, scale, and step values
  for functions in FunctionModel.
This commit is contained in:
Mohammad Salameh
2024-04-21 16:13:51 +03:00
parent c97e2715f7
commit 506068474b
2 changed files with 137 additions and 37 deletions

View File

@ -1,7 +1,9 @@
import 'package:syncrow_app/utils/resource_manager/constants.dart';
class FunctionModel { class FunctionModel {
String? code; String? code;
String? type; FunctionType? type;
String? values; ValueModel? values;
FunctionModel({ FunctionModel({
required this.code, required this.code,
@ -25,3 +27,41 @@ class FunctionModel {
}; };
} }
} }
//"values": "{\"unit\":\"\",\"min\":1,\"max\":10,\"scale\":0,\"step\":1}",
class ValueModel {
String? unit;
int? min;
int? max;
int? scale;
int? step;
ValueModel({
required this.unit,
required this.min,
required this.max,
required this.scale,
required this.step,
});
factory ValueModel.fromJson(Map<String, dynamic> json) {
return ValueModel(
unit: json['unit'],
min: json['min'],
max: json['max'],
scale: json['scale'],
step: json['step'],
);
}
Map<String, dynamic> toJson() {
return {
'unit': unit,
'min': min,
'max': max,
'scale': scale,
'step': step,
};
}
}

View File

@ -50,7 +50,15 @@ enum DeviceType {
// DL awu7anehyu5q1iu8 // DL awu7anehyu5q1iu8
// WPS awarhusb // WPS awarhusb
// 3G 1a6vgvyi // 3G 1a6vgvyi
enum FunctionType { Boolean, Enum, Integer, Raw, String }
Map<String, FunctionType> functionTypesMap = {
"Boolean": FunctionType.Boolean,
"Enum": FunctionType.Enum,
"Integer": FunctionType.Integer,
"Raw": FunctionType.Raw,
"String": FunctionType.String,
};
Map<String, DeviceType> devicesTypesMap = { Map<String, DeviceType> devicesTypesMap = {
"wzdcrqh0": DeviceType.AC, "wzdcrqh0": DeviceType.AC,
"wp8ticoo2bhumwgb": DeviceType.Gateway, "wp8ticoo2bhumwgb": DeviceType.Gateway,
@ -61,75 +69,127 @@ Map<String, DeviceType> devicesTypesMap = {
}; };
Map<DeviceType, List<FunctionModel>> devicesFunctionsMap = { Map<DeviceType, List<FunctionModel>> devicesFunctionsMap = {
DeviceType.AC: [ DeviceType.AC: [
FunctionModel(code: 'switch', type: 'Boolean', values: '{}'),
FunctionModel( FunctionModel(
code: 'mode', type: 'Enum', values: '{"range":["cold","hot","wind"]}'), code: 'switch',
type: functionTypesMap['Boolean'],
values: ValueModel.fromJson({})),
FunctionModel(
code: 'mode',
type: functionTypesMap['Enum'],
values: ValueModel.fromJson({
"range": ["cold", "hot", "wind"]
})),
FunctionModel( FunctionModel(
code: 'temp_set', code: 'temp_set',
type: 'Integer', type: functionTypesMap['Integer'],
values: '{"unit":"℃","min":200,"max":300,"scale":1,"step":5}'), values: ValueModel.fromJson(
{"unit": "", "min": 200, "max": 300, "scale": 1, "step": 5})),
FunctionModel( FunctionModel(
code: 'level', code: 'level',
type: 'Enum', type: functionTypesMap['Enum'],
values: '{"range":["low","middle","high","auto"]}'), values: ValueModel.fromJson({
FunctionModel(code: 'child_lock', type: 'Boolean', values: '{}'), "range": ["low", "middle", "high", "auto"]
})),
FunctionModel(
code: 'child_lock',
type: functionTypesMap['Boolean'],
values: ValueModel.fromJson({})),
], ],
DeviceType.Gateway: [ DeviceType.Gateway: [
FunctionModel(code: 'switch_alarm_sound', type: 'Boolean', values: '{}'), FunctionModel(
code: 'switch_alarm_sound',
type: functionTypesMap['Boolean'],
values: ValueModel.fromJson({})),
FunctionModel( FunctionModel(
code: 'master_state', code: 'master_state',
type: 'Enum', type: functionTypesMap['Enum'],
values: '{"range":["normal","alarm"]}'), values: ValueModel.fromJson({
FunctionModel(code: 'factory_reset', type: 'Boolean', values: '{}'), "range": ["normal", "alarm"]
})),
FunctionModel( FunctionModel(
code: 'alarm_active', type: 'String', values: '{"maxlen":255}'), code: 'factory_reset',
type: functionTypesMap['Boolean'],
values: ValueModel.fromJson({})),
FunctionModel(
code: 'alarm_active',
type: functionTypesMap['String'],
values: ValueModel.fromJson({"maxlen": 255})),
], ],
DeviceType.CeilingSensor: [ DeviceType.CeilingSensor: [
FunctionModel( FunctionModel(
code: 'sensitivity', code: 'sensitivity',
type: 'Integer', type: functionTypesMap['Integer'],
values: '{"unit":"","min":1,"max":10,"scale":0,"step":1}'), values: ValueModel.fromJson(
{"unit": "", "min": 1, "max": 10, "scale": 0, "step": 1})),
], ],
DeviceType.DoorLock: [ DeviceType.DoorLock: [
FunctionModel(code: 'remote_no_pd_setkey', type: 'Raw', values: '{}'), FunctionModel(
FunctionModel(code: 'remote_no_dp_key', type: 'Raw', values: '{}'), code: 'remote_no_pd_setkey',
FunctionModel(code: 'normal_open_switch', type: 'Boolean', values: '{}'), type: functionTypesMap['Raw'],
values: ValueModel.fromJson({})),
FunctionModel(
code: 'remote_no_dp_key',
type: functionTypesMap['Raw'],
values: ValueModel.fromJson({})),
FunctionModel(
code: 'normal_open_switch',
type: functionTypesMap['Boolean'],
values: ValueModel.fromJson({})),
], ],
DeviceType.WallSensor: [ DeviceType.WallSensor: [
FunctionModel( FunctionModel(
code: 'far_detection', code: 'far_detection',
type: 'Integer', type: functionTypesMap['Integer'],
values: '{"unit":"cm","min":75,"max":600,"scale":0,"step":75}'), values: ValueModel.fromJson(
{"unit": "cm", "min": 75, "max": 600, "scale": 0, "step": 75})),
FunctionModel( FunctionModel(
code: 'presence_time', code: 'presence_time',
type: 'Integer', type: functionTypesMap['Integer'],
values: '{"unit":"Min","min":0,"max":65535,"scale":0,"step":1}'), values: ValueModel.fromJson(
{"unit": "Min", "min": 0, "max": 65535, "scale": 0, "step": 1})),
FunctionModel( FunctionModel(
code: 'motion_sensitivity_value', code: 'motion_sensitivity_value',
type: 'Integer', type: functionTypesMap['Integer'],
values: '{"unit":"","min":1,"max":5,"scale":0,"step":1}'), values: ValueModel.fromJson(
{"unit": "", "min": 1, "max": 5, "scale": 0, "step": 1})),
FunctionModel( FunctionModel(
code: 'motionless_sensitivity', code: 'motionless_sensitivity',
type: 'Integer', type: functionTypesMap['Integer'],
values: '{"unit":"","min":1,"max":5,"scale":0,"step":1}'), values: ValueModel.fromJson(
FunctionModel(code: 'indicator', type: 'Boolean', values: '{}'), {"unit": "", "min": 1, "max": 5, "scale": 0, "step": 1})),
FunctionModel(
code: 'indicator',
type: functionTypesMap['Boolean'],
values: ValueModel.fromJson({})),
], ],
DeviceType.ThreeGang: [ DeviceType.ThreeGang: [
FunctionModel(code: 'switch_1', type: 'Boolean', values: '{}'), FunctionModel(
FunctionModel(code: 'switch_2', type: 'Boolean', values: '{}'), code: 'switch_1',
FunctionModel(code: 'switch_3', type: 'Boolean', values: '{}'), type: functionTypesMap['Boolean'],
values: ValueModel.fromJson({})),
FunctionModel(
code: 'switch_2',
type: functionTypesMap['Boolean'],
values: ValueModel.fromJson({})),
FunctionModel(
code: 'switch_3',
type: functionTypesMap['Boolean'],
values: ValueModel.fromJson({})),
FunctionModel( FunctionModel(
code: 'countdown_1', code: 'countdown_1',
type: 'Integer', type: functionTypesMap['Integer'],
values: '{"unit":"s","min":0,"max":43200,"scale":0,"step":1}'), values: ValueModel.fromJson(
{"unit": "s", "min": 0, "max": 43200, "scale": 0, "step": 1})),
FunctionModel( FunctionModel(
code: 'countdown_2', code: 'countdown_2',
type: 'Integer', type: functionTypesMap['Integer'],
values: '{"unit":"s","min":0,"max":43200,"scale":0,"step":1}'), values: ValueModel.fromJson(
{"unit": "s", "min": 0, "max": 43200, "scale": 0, "step": 1})),
FunctionModel( FunctionModel(
code: 'countdown_3', code: 'countdown_3',
type: 'Integer', type: functionTypesMap['Integer'],
values: '{"unit":"s","min":0,"max":43200,"scale":0,"step":1}'), values: ValueModel.fromJson(
{"unit": "s", "min": 0, "max": 43200, "scale": 0, "step": 1})),
], ],
}; };