import 'dart:convert'; import 'package:http/http.dart' as http; class LockerApi { // 안드로이드 에뮬레이터: "http://10.0.2.2:8182" // iOS 시뮬레이터: "http://127.0.0.1:8182" // "http://192.168.0.82:8182" static const String baseUrl = "http://192.168.0.81:8182"; // 명령 전송 공통 함수 Future sendCommand({ required int addr, required int value, String target = "*" }) async { final url = Uri.parse('$baseUrl/modbus/write'); try { final response = await http.post( url, headers: {"Content-Type": "application/json"}, body: jsonEncode({ "target": target, "unit": 1, "addr": addr, "value": value }), ); if (response.statusCode == 200) { print("명령 성공: Addr($addr) -> Val($value)"); return true; } else { print("명령 실패: ${response.body}"); return false; } } catch (e) { print("서버 연결 오류: $e"); return false; } } // --- [기능별 동작 함수] --- // 1. 잠금 해제 (주소: 0x0016 / 값: 1) Future unlock() async { return await sendCommand(addr: 0x0016, value: 1); } // 2. 살균 (UV) 켜기/끄기 (주소: 0x0014 / 값: 1 or 0) Future setUV(bool isOn) async { return await sendCommand(addr: 0x0014, value: isOn ? 1 : 0); } // 3. 건조 (FAN) 켜기/끄기 (주소: 0x0015 / 값: 1 or 0) Future setFan(bool isOn) async { return await sendCommand(addr: 0x0015, value: isOn ? 1 : 0); } }