abstract class DeviceFunction { final String deviceId; final String deviceName; final String code; final String operationName; final String icon; DeviceFunction({ required this.deviceId, required this.deviceName, required this.code, required this.operationName, required this.icon, }); T execute(T currentStatus, dynamic newValue); } class DeviceFunctionData { final String entityId; final String actionExecutor; final String function; final String operationName; final dynamic value; final String? condition; final String? valueDescription; DeviceFunctionData({ required this.entityId, this.actionExecutor = 'function', required this.function, required this.operationName, required this.value, this.condition, this.valueDescription, }); Map toJson() { return { 'entityId': entityId, 'actionExecutor': actionExecutor, 'function': function, 'operationName': operationName, 'value': value, if (condition != null) 'condition': condition, if (valueDescription != null) 'valueDescription': valueDescription, }; } factory DeviceFunctionData.fromJson(Map json) { return DeviceFunctionData( entityId: json['entityId'], actionExecutor: json['actionExecutor'] ?? 'function', function: json['function'], operationName: json['operationName'], value: json['value'], condition: json['condition'], valueDescription: json['valueDescription'], ); } }