更改
This commit is contained in:
@@ -32,13 +32,14 @@ public class ClientHandler extends Thread {
|
||||
|
||||
public String topicMsg = "{\"HRPhV_H14_phsC\":\"0.0000\",\"HRPhV_H14_phsB\":\"0.0000\",\"HRPhV_H14_phsA\":\"0.0000\",\"HRPhV_H2_phsB\":\"0.0100\",\"HRPhV_H2_phsA\":\"0.0100\",\"HRPhV_H2_phsC\":\"0.0100\",\"HRPhV_H15_phsA\":\"0.0120\",\"TotW\":\"19771.1367\",\"HRPhV_H15_phsB\":\"0.0120\",\"HRPhV_H15_phsC\":\"0.0120\",\"FreqDev\":\"0.0000\",\"PPV_phsAB\":\"384.0318\",\"A_phsC\":\"60.7116\",\"TotPF\":\"0.4946\",\"A_phsA\":\"60.7123\",\"A_phsB\":\"60.7111\",\"PPV_phsBC\":\"383.3656\",\"HRPhV_H25_phsB\":\"0.0080\",\"HRPhV_H25_phsC\":\"0.0080\",\"HRPhV_H25_phsA\":\"0.0080\",\"DataTag\":\"0\",\"HRPhV_H20_phsA\":\"0.0000\",\"HRPhV_H20_phsB\":\"0.0000\",\"HRPhV_H20_phsC\":\"0.0000\",\"PPV_phsCA\":\"383.3637\",\"HRPhV_H3_phsB\":\"0.0640\",\"HRPhV_H3_phsC\":\"0.0640\",\"HRPhV_H9_phsC\":\"0.0220\",\"ThdPhV_phsA\":\"0.0913\",\"HRPhV_H9_phsB\":\"0.0220\",\"HRPhV_H9_phsA\":\"0.0220\",\"ThdPhV_phsB\":\"0.0913\",\"ThdPhV_phsC\":\"0.0913\",\"HRPhV_H19_phsC\":\"0.0100\",\"HRPhV_H19_phsB\":\"0.0100\",\"HRPhV_H19_phsA\":\"0.0100\",\"HRPhV_H16_phsA\":\"0.0000\",\"HRPhV_H13_phsA\":\"0.0140\",\"HRPhV_H16_phsC\":\"0.0000\",\"HRPhV_H13_phsB\":\"0.0140\",\"HRPhV_H16_phsB\":\"0.0000\",\"TotVA\":\"39977.2305\",\"HRPhV_H13_phsC\":\"0.0140\",\"HRPhV_H6_phsB\":\"0.0026\",\"HRPhV_H3_phsA\":\"0.0640\",\"HRPhV_H6_phsA\":\"0.0026\",\"HRPhV_H10_phsA\":\"0.0026\",\"HRPhV_H10_phsB\":\"0.0026\",\"HRPhV_H6_phsC\":\"0.0026\",\"HRPhV_H10_phsC\":\"0.0026\",\"ImbNgV\":\"0.0012\",\"TotVar\":\"34745.9492\",\"HRPhV_H7_phsC\":\"0.0280\",\"HRPhV_H7_phsB\":\"0.0280\",\"HRPhV_H22_phsC\":\"0.0000\",\"HRPhV_H22_phsB\":\"0.0000\",\"ImbZroV\":\"0.0012\",\"HRPhV_H22_phsA\":\"0.0000\",\"HRPhV_H7_phsA\":\"0.0280\",\"HRPhV_H8_phsA\":\"0.0026\",\"HRPhV_H23_phsB\":\"0.0080\",\"PhV_phsA\":\"221.9935\",\"HRPhV_H8_phsB\":\"0.0026\",\"HRPhV_H23_phsC\":\"0.0080\",\"HRPhV_H8_phsC\":\"0.0026\",\"PhV_phsB\":\"221.9947\",\"PhV_phsC\":\"221.9979\",\"HRPhV_H23_phsA\":\"0.0080\",\"PstPhV_phsC\":\"3.2942\",\"PstPhV_phsA\":\"3.3086\",\"PstPhV_phsB\":\"3.2987\",\"Freq\":\"50.0000\",\"HRPhV_H11_phsA\":\"0.0180\",\"HRPhV_H11_phsB\":\"0.0180\",\"HRPhV_H17_phsC\":\"0.0100\",\"HRPhV_H11_phsC\":\"0.0180\",\"HRPhV_H17_phsB\":\"0.0100\",\"HRPhV_H17_phsA\":\"0.0100\",\"SeqV_C2\":\"0.0715\",\"HRPhV_H4_phsB\":\"0.0050\",\"SeqV_C1\":\"60.4601\",\"HRPhV_H4_phsA\":\"0.0050\",\"SeqV_C0\":\"0.0714\",\"PhVDev_phsC\":\"0.0119\",\"HRPhV_H5_phsA\":\"0.0400\",\"HRPhV_H5_phsB\":\"0.0400\",\"HRPhV_H5_phsC\":\"0.0400\",\"PhVDev_phsB\":\"0.0119\",\"HRPhV_H12_phsC\":\"0.0010\",\"PltPhV_phsA\":\"0.0000\",\"PhVDev_phsA\":\"0.0119\",\"HRPhV_H12_phsB\":\"0.0010\",\"HRPhV_H4_phsC\":\"0.0050\",\"HRPhV_H18_phsB\":\"0.0000\",\"HRPhV_H18_phsC\":\"0.0000\",\"HRPhV_H12_phsA\":\"0.0010\",\"HRPhV_H18_phsA\":\"0.0000\",\"HFundPhV_phsC\":\"220.8052\",\"HRPhV_H21_phsC\":\"0.0080\",\"HRPhV_H21_phsB\":\"0.0080\",\"HRPhV_H24_phsC\":\"0.0000\",\"HFundPhV_phsA\":\"220.8056\",\"HRPhV_H21_phsA\":\"0.0080\",\"HFundPhV_phsB\":\"220.8055\",\"HRPhV_H24_phsB\":\"0.0000\",\"PltPhV_phsC\":\"0.0000\",\"HRPhV_H24_phsA\":\"0.0000\",\"PltPhV_phsB\":\"0.0000\",\"time\":\"20240704T152745Z\"}";
|
||||
|
||||
public String devId;
|
||||
public String devId="暂无数据";
|
||||
|
||||
private Consumer consumer;
|
||||
|
||||
@GetMapping("message")
|
||||
private Map<String,String> message() {
|
||||
Map<String,String> map = JSONObject.parseObject(topicMsg, Map.class);
|
||||
map.put("customDevId",devId);
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
123
src/main/java/com/njcn/roma/client/TestNorthApi.java
Normal file
123
src/main/java/com/njcn/roma/client/TestNorthApi.java
Normal file
@@ -0,0 +1,123 @@
|
||||
package com.njcn.roma.client;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||
import org.apache.http.conn.ssl.TrustStrategy;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.ssl.SSLContextBuilder;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class TestNorthApi {
|
||||
|
||||
private static final String ApicHost = "10.10.10.1:1443";
|
||||
private static final String appId = "roma.link.test";
|
||||
private static final String appKey = "ic+HsXPRCA****";
|
||||
|
||||
private static final String deviceId="D6111KOQk";
|
||||
|
||||
|
||||
//测命令下发时用到的,替换成自己的serviceName和commandName
|
||||
private static final String serviceName="service";
|
||||
private static final String commandName="command";
|
||||
|
||||
|
||||
/**
|
||||
* 创建ssl连接,设置客户端信任所有证书
|
||||
* @return CloseableHttpClient
|
||||
* @throws KeyStoreException
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws KeyManagementException
|
||||
*/
|
||||
private static CloseableHttpClient createSSLClient() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
|
||||
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (TrustStrategy) (chain, authType) -> true).build();
|
||||
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[]{"TLSv1.2"}, null,
|
||||
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置请求时的header
|
||||
* @param httpUriRequest
|
||||
*/
|
||||
private static void setSSLHeader(HttpUriRequest httpUriRequest) {
|
||||
long time = System.currentTimeMillis();
|
||||
String authorization = DigestUtils.sha256Hex(appId + appKey + time);
|
||||
httpUriRequest.addHeader("Content-Type", "application/json");
|
||||
httpUriRequest.addHeader("Authorization", authorization);
|
||||
httpUriRequest.addHeader("timestamp", String.valueOf(time));
|
||||
}
|
||||
/**
|
||||
* 解析响应结果
|
||||
* @param httpUriRequest
|
||||
* @return
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws KeyStoreException
|
||||
* @throws KeyManagementException
|
||||
* @throws IOException
|
||||
*/
|
||||
private static HttpEntity getSSLResponse(HttpUriRequest httpUriRequest) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
|
||||
CloseableHttpClient httpClient = createSSLClient();
|
||||
CloseableHttpResponse response = httpClient.execute(httpUriRequest);
|
||||
HttpEntity responseEntity = response.getEntity();
|
||||
System.out.println("响应状态为:" + response.getStatusLine());
|
||||
if (responseEntity != null) {
|
||||
System.out.println("响应内容长度为:" + responseEntity.getContentLength());
|
||||
System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
|
||||
}
|
||||
return responseEntity;
|
||||
}
|
||||
|
||||
/**
|
||||
* 命令下发
|
||||
*
|
||||
* @param serviceName
|
||||
* @param commandName
|
||||
* @param cmdComtent
|
||||
* @throws JSONException
|
||||
* @throws IOException
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws KeyStoreException
|
||||
* @throws KeyManagementException
|
||||
*/
|
||||
public static void deviceCommands(String serviceName, String commandName, JSONObject cmdComtent) throws JSONException, IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
|
||||
String url = "https://" + ApicHost + "/iot/1.0/deviceCommands?appId=" + appId;
|
||||
HttpPost httpPost = new HttpPost(url); //创建post请求
|
||||
|
||||
JSONObject cmdContent = new JSONObject();
|
||||
cmdContent.put("serviceId", serviceName);
|
||||
cmdContent.put("method", commandName);
|
||||
cmdContent.put("paras", cmdComtent);
|
||||
JSONObject cmdBody = new JSONObject();
|
||||
cmdBody.put("command", cmdContent);
|
||||
cmdBody.put("deviceId", deviceId);
|
||||
|
||||
setSSLHeader(httpPost); //设置请求的header
|
||||
StringEntity stringEntity = new StringEntity(cmdBody.toString(), "utf-8");
|
||||
httpPost.setEntity(stringEntity);//设置请求的body
|
||||
getSSLResponse(httpPost);//获取响应结果
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
JSONObject commandContent = new JSONObject();
|
||||
commandContent.put("status", "on");
|
||||
deviceCommands(serviceName, commandName, commandContent);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -35,4 +35,8 @@ public class RestTemplateConfig {
|
||||
return factory;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,22 @@
|
||||
package com.njcn.roma.controller;
|
||||
|
||||
import cn.hutool.crypto.digest.DigestUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.njcn.roma.pojo.CommandDTO;
|
||||
import com.njcn.roma.pojo.UpSendPojo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||
import org.apache.http.conn.ssl.TrustStrategy;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.ssl.SSLContextBuilder;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -12,9 +24,18 @@ import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
import java.io.IOException;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -49,39 +70,33 @@ public class SendCommandController {
|
||||
* @date 2024/6/25
|
||||
*/
|
||||
@GetMapping("up")
|
||||
public String sendToDev(){
|
||||
String time = String.valueOf(new Date().getTime());
|
||||
String sha = DigestUtil.sha256Hex(appId+appKey+time);
|
||||
System.out.println("加密秘钥"+sha);
|
||||
|
||||
// 请求头信息
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.valueOf("application/json;charset=UTF-8"));
|
||||
headers.add("timestamp",time);
|
||||
headers.add("Authorization",sha);
|
||||
|
||||
// 请求体内容
|
||||
UpSendPojo param = new UpSendPojo();
|
||||
param.setDeviceId("666666");
|
||||
|
||||
CommandDTO commandDTO = new CommandDTO();
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("","");
|
||||
commandDTO.setJsonObject(jsonObject);
|
||||
commandDTO.setServiceId("123");
|
||||
commandDTO.setMethod("aaa");
|
||||
param.setCommandDTO(commandDTO);
|
||||
|
||||
// 组装请求信息
|
||||
HttpEntity<UpSendPojo> httpEntity=new HttpEntity<>(param,headers);
|
||||
|
||||
System.out.println(httpEntity.getHeaders());
|
||||
System.out.println(httpEntity.getBody());
|
||||
|
||||
|
||||
ResponseEntity responseEntity = restTemplate.postForEntity(sendIp,httpEntity,String.class);
|
||||
System.out.println("返回状态:"+ responseEntity.getStatusCode());
|
||||
return Objects.requireNonNull(responseEntity.getBody()).toString();
|
||||
public String sendToDev(@RequestParam("serviceId")String serviceId,@RequestParam("method")String method,@RequestParam(value = "deviceId",defaultValue = "D2899233167kupZT")String deviceId){
|
||||
org.json.JSONObject commandContent = new JSONObject();
|
||||
commandContent.put("status", "on");
|
||||
try {
|
||||
deviceCommands(deviceId,serviceId,method,commandContent);
|
||||
} catch (IOException e) {
|
||||
System.out.println("IOException---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
System.out.println("NoSuchAlgorithmException---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
} catch (KeyStoreException e) {
|
||||
System.out.println("KeyStoreException---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
} catch (KeyManagementException e) {
|
||||
System.out.println("KeyManagementException---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
}catch (Exception e){
|
||||
System.out.println("Exception---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
}
|
||||
return "执行成功";
|
||||
}
|
||||
|
||||
|
||||
@@ -90,4 +105,82 @@ public class SendCommandController {
|
||||
public String test(){
|
||||
return "6666";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建ssl连接,设置客户端信任所有证书
|
||||
* @return CloseableHttpClient
|
||||
* @throws KeyStoreException
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws KeyManagementException
|
||||
*/
|
||||
private CloseableHttpClient createSSLClient() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
|
||||
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (TrustStrategy) (chain, authType) -> true).build();
|
||||
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[]{"TLSv1.2"}, null,
|
||||
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置请求时的header
|
||||
* @param httpUriRequest
|
||||
*/
|
||||
private void setSSLHeader(HttpUriRequest httpUriRequest) {
|
||||
long time = System.currentTimeMillis();
|
||||
String authorization = DigestUtils.sha256Hex(appId + appKey + time);
|
||||
httpUriRequest.addHeader("Content-Type", "application/json");
|
||||
httpUriRequest.addHeader("Authorization", authorization);
|
||||
httpUriRequest.addHeader("timestamp", String.valueOf(time));
|
||||
}
|
||||
/**
|
||||
* 解析响应结果
|
||||
* @param httpUriRequest
|
||||
* @return
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws KeyStoreException
|
||||
* @throws KeyManagementException
|
||||
* @throws IOException
|
||||
*/
|
||||
private org.apache.http.HttpEntity getSSLResponse(HttpUriRequest httpUriRequest) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
|
||||
CloseableHttpClient httpClient = createSSLClient();
|
||||
CloseableHttpResponse response = httpClient.execute(httpUriRequest);
|
||||
org.apache.http.HttpEntity responseEntity = response.getEntity();
|
||||
System.out.println("响应状态为:" + response.getStatusLine());
|
||||
if (responseEntity != null) {
|
||||
System.out.println("响应内容长度为:" + responseEntity.getContentLength());
|
||||
System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
|
||||
}
|
||||
return responseEntity;
|
||||
}
|
||||
|
||||
/**
|
||||
* 命令下发
|
||||
*
|
||||
* @param serviceName
|
||||
* @param commandName
|
||||
* @param cmdComtent
|
||||
* @throws JSONException
|
||||
* @throws IOException
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws KeyStoreException
|
||||
* @throws KeyManagementException
|
||||
*/
|
||||
public void deviceCommands(String deviceId,String serviceName, String commandName, org.json.JSONObject cmdComtent) throws JSONException, IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
|
||||
String url = "https://" + sendIp + "/iot/1.0/deviceCommands?appId=" + appId;
|
||||
HttpPost httpPost = new HttpPost(url); //创建post请求
|
||||
|
||||
org.json.JSONObject cmdContent = new org.json.JSONObject();
|
||||
cmdContent.put("serviceId", serviceName);
|
||||
cmdContent.put("method", commandName);
|
||||
cmdContent.put("paras", cmdComtent);
|
||||
org.json.JSONObject cmdBody = new org.json.JSONObject();
|
||||
cmdBody.put("command", cmdContent);
|
||||
cmdBody.put("deviceId", deviceId);
|
||||
|
||||
setSSLHeader(httpPost); //设置请求的header
|
||||
StringEntity stringEntity = new StringEntity(cmdBody.toString(), "utf-8");
|
||||
httpPost.setEntity(stringEntity);//设置请求的body
|
||||
getSSLResponse(httpPost);//获取响应结果
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,4 +17,7 @@ public class CommandDTO {
|
||||
private String method;
|
||||
|
||||
private JSONObject jsonObject;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -13,5 +13,7 @@ public class UpSendPojo {
|
||||
|
||||
private String deviceId;
|
||||
|
||||
private String appId;
|
||||
|
||||
private CommandDTO commandDTO;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user