import 'device.dart'; import 'zone.dart'; class AutomationRule { AutomationRule({ required this.id, required this.conditionSensorType, required this.conditionOperator, required this.conditionValue, required this.actionType, required this.actionParams, required this.isActive, this.zone, this.targetDevice, this.conditionSourceDevice, }); final int id; final Zone? zone; final Device? targetDevice; final Device? conditionSourceDevice; final String conditionSensorType; final String conditionOperator; // ">", "<", ">=", "<=", "==" final double conditionValue; final String actionType; // "turn_on", "turn_off", "set_level", ... final Map actionParams; final bool isActive; /// `action_params.level` for `set_level` rules, if present. num? get level => actionParams['level'] as num?; factory AutomationRule.fromJson(Map json) => AutomationRule( id: json['id'] as int, zone: json['zone'] is Map ? Zone.fromJson(json['zone'] as Map) : null, targetDevice: json['target_device'] is Map ? Device.fromJson(json['target_device'] as Map) : null, conditionSourceDevice: json['condition_source_device'] is Map ? Device.fromJson(json['condition_source_device'] as Map) : null, conditionSensorType: json['condition_sensor_type'] as String, conditionOperator: json['condition_operator'] as String, conditionValue: (json['condition_value'] as num).toDouble(), actionType: json['action_type'] as String, actionParams: Map.from(json['action_params'] as Map? ?? const {}), isActive: json['is_active'] as bool? ?? false, ); }