智慧水务管理系统 - 精河县供水工程综合管理平台

HttpAdapter.java 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package com.water.iot.adapter.impl;
  2. import com.water.iot.adapter.AdapterInfo;
  3. import com.water.iot.adapter.AdapterStatus;
  4. import com.water.iot.adapter.DeviceAdapter;
  5. import com.water.iot.model.DeviceCommand;
  6. import com.water.iot.model.DeviceInfo;
  7. import java.util.HashMap;
  8. import java.util.Map;
  9. /**
  10. * HTTP 协议适配器
  11. */
  12. public class HttpAdapter implements DeviceAdapter {
  13. private String baseUrl;
  14. private AdapterStatus status = AdapterStatus.DISCONNECTED;
  15. private long connectionTime;
  16. private Map<String, DeviceInfo> connectedDevices = new HashMap<>();
  17. public HttpAdapter(String baseUrl) {
  18. this.baseUrl = baseUrl;
  19. }
  20. @Override
  21. public String getProtocol() {
  22. return "http";
  23. }
  24. @Override
  25. public void onMessage(byte[] payload) {
  26. System.out.println("HTTP 接收到设备数据: " + new String(payload));
  27. try {
  28. // 解析JSON格式数据
  29. String message = new String(payload);
  30. System.out.println("HTTP消息内容: " + message);
  31. // 这里应该解析JSON并提取设备信息
  32. if (message.contains("deviceSn")) {
  33. processDeviceMessage(message);
  34. }
  35. } catch (Exception e) {
  36. System.err.println("处理HTTP消息时出错: " + e.getMessage());
  37. }
  38. }
  39. private void processDeviceMessage(String message) {
  40. System.out.println("处理HTTP设备消息: " + message);
  41. // 解析设备消息并更新设备状态
  42. // 在实际实现中,这里应该解析JSON并提取字段
  43. DeviceInfo device = new DeviceInfo("HTTP_001", "HTTP控制器", "controller");
  44. device.setLastSeen(System.currentTimeMillis());
  45. Map<String, Object> metrics = new HashMap<>();
  46. metrics.put("status", "running");
  47. metrics.put("temperature", 35.0);
  48. device.setMetrics(metrics);
  49. connectedDevices.put(device.getDeviceSn(), device);
  50. System.out.println("更新HTTP设备状态: " + device.getDeviceSn());
  51. }
  52. @Override
  53. public void sendCommand(String deviceSn, DeviceCommand cmd) {
  54. System.out.println("发送HTTP命令到设备 " + deviceSn + ": " + cmd.getCommandType());
  55. try {
  56. // 构建HTTP请求
  57. String url = baseUrl + "/api/command";
  58. // 构建请求体
  59. Map<String, Object> requestBody = new HashMap<>();
  60. requestBody.put("deviceSn", deviceSn);
  61. requestBody.put("commandType", cmd.getCommandType());
  62. requestBody.put("parameterKey", cmd.getParameterKey());
  63. requestBody.put("parameterValue", cmd.getParameterValue());
  64. requestBody.put("timeout", cmd.getTimeout());
  65. System.out.println("HTTP请求URL: " + url);
  66. System.out.println("HTTP请求体: " + requestBody.toString());
  67. } catch (Exception e) {
  68. System.err.println("发送HTTP命令失败: " + e.getMessage());
  69. }
  70. }
  71. @Override
  72. public DeviceInfo parseDeviceInfo(byte[] payload) {
  73. System.out.println("解析HTTP设备信息: " + new String(payload));
  74. // 解析HTTP设备信息
  75. DeviceInfo deviceInfo = new DeviceInfo("HTTP_CONTROLLER_001", "HTTP控制器", "valve_controller");
  76. deviceInfo.setManufacturer("ValveTech");
  77. deviceInfo.setProtocolVersion("HTTP/1.1");
  78. // 解析设备属性
  79. Map<String, Object> properties = new HashMap<>();
  80. properties.put("endpoint", baseUrl + "/api/devices");
  81. properties.put("method", "POST");
  82. deviceInfo.setProperties(properties);
  83. return deviceInfo;
  84. }
  85. @Override
  86. public AdapterStatus getStatus(String deviceSn) {
  87. return status;
  88. }
  89. @Override
  90. public boolean connect() {
  91. try {
  92. // 测试HTTP连接
  93. String healthUrl = baseUrl + "/api/health";
  94. System.out.println("测试HTTP连接: " + healthUrl);
  95. // 在实际实现中,这里应该发送HTTP GET请求测试连接
  96. // 这里模拟成功连接
  97. status = AdapterStatus.CONNECTED;
  98. connectionTime = System.currentTimeMillis();
  99. System.out.println("HTTP 适配器连接成功: " + baseUrl);
  100. return true;
  101. } catch (Exception e) {
  102. status = AdapterStatus.ERROR;
  103. System.err.println("HTTP适配器连接失败: " + e.getMessage());
  104. return false;
  105. }
  106. }
  107. @Override
  108. public void disconnect() {
  109. status = AdapterStatus.DISCONNECTED;
  110. connectedDevices.clear();
  111. System.out.println("HTTP 适配器已断开连接");
  112. }
  113. @Override
  114. public AdapterInfo getAdapterInfo() {
  115. return new AdapterInfo("HTTP适配器", "http", "1.0", "支持HTTP协议的设备适配");
  116. }
  117. }