一 java 編寫 coap 客戶端與服務端
概述:
CoAP是為物聯網而生,短小精悍,它底層基於UDP協議的,其它具體參考百度百科,本例子是基於Californium框架。
1、先決條件
java環境
eclipse工具
Maven插件(有最好,不需要手動下載jar引入,沒有的話手動引入)
2、下載Californium框架核心jar
californium-core.jar : 包括CoAP核心部分
element-connector.jar 包括適用於UDP和DTLS的java套接字抽象層
scandium.jar: 包括DTLS
<dependency>
<groupId>org.eclipse.californium</groupId>
<artifactId>californium-core</artifactId>
<version>2.0.0-M7</version>
</dependency>
<dependency>
<groupId>org.eclipse.californium</groupId>
<artifactId>element-connector</artifactId>
<version>2.0.0-M7</version>
</dependency>
<dependency>
<groupId>org.eclipse.californium</groupId>
<artifactId>scandium</artifactId>
<version>2.0.0-M7</version>
</dependency>
3、創建java工程或Maven工程,創建一個Server類
import org.eclipse.californium.core.CoapResource;
import org.eclipse.californium.core.CoapServer;
import org.eclipse.californium.core.coap.CoAP.ResponseCode;
import org.eclipse.californium.core.server.resources.CoapExchange;
public class HelloCoAPServer {
public static void main(String[] args) {
CoapServer server = new CoapServer();//主機為localhost 端口為默認端口5683
server.add(new CoapResource("hello"){//創建一個資源為hello 請求格式為 主機:端口\hello
@Override
public void handleGET(CoapExchange exchange) { //重寫處理GET請求的方法
exchange.respond(ResponseCode.CONTENT, "Hello CoAP!");
}
});
server.add(new CoapResource("time"){ //創建一個資源為time 請求格式為 主機:端口\time
@Override
public void handleGET(CoapExchange exchange) {
Date date = new Date();
exchange.respond(ResponseCode.CONTENT,
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
}
});
server.start();
}
}
4、創建一個客戶端:
public class GETClient {
public static void main(String[] args) throws URISyntaxException {
URI uri = null;
uri = new URI("localhost:5683/hello"); //創建一個資源請求hello資源,注意默認端口為5683
CoapClient client = new CoapClient(uri);
CoapResponse response = client.get();
if(response !=null){
System.out.println(response.getCode()); //打印請求狀態碼
System.out.println(response.getOptions()); //選項參數
System.out.println(response.getResponseText()); //獲取內容文本信息
System.out.println("\nAdvanced\n"); //
System.out.println(Utils.prettyPrint(response)); //打印格式良好的輸出
}
}
}
5、測試
先運行HelloCoAPServer的main方法
然后運行GETClient的main方法
6、日志:
2.05
{"Content-Format":"text/plain"}
Hello CoAP!
Advanced
==[ CoAP Response ]============================================
MID : 10763
Token : [aab3ac5818d1e598]
Type : ACK
Status : 2.05
Options: {"Content-Format":"text/plain"}
RTT : 26 ms
Payload: 11 Bytes
---------------------------------------------------------------
Hello CoAP!
===============================================================
二 node-red安裝node-red-contrib-coap


安裝之后拖拽配置

coap請求節點配置如下

coap 服務端節點配置如下

服務端響應節點配置如下,獲取get請求參數

可以自定義響應的格式,注意訪問coap服務器的時候,如果有配置hosts,應該使用hosts訪問這個地址
三 msyql插件 node-red-node-mysql
1. 安裝

2.配置調試
找到mysql組件,然后編輯節點

配置新的節點

設置參數

組件連接

sql編寫組件
![]()
內容

三 kafka組件

輸入輸出kafka組件

配置添加節點


四 http


部署后訪問nodered端口的/test路徑
http://127.0.0.1:1880/test?a=1&b=3

串口插件
使用方式如下博客
https://blog.csdn.net/geek_monkey/article/details/80755719
串口安裝權限異常等問題失敗 使用離線安裝
sudo npm install node-pre-gyp --save
sudo npm install serialport --unsafe-perm --build-from-source --save
npm i npm to update
npm install -g serialport
node-red 自定義插件
先找到對應的自定義插件所在的目錄


將后綴的demo刪除后重啟nodered,輸入組件中會多一個sample,即為自定義組件
修改自定義組件內容 99-sample.js
核心部分

編碼格式為js語法,但是部分api不存在.例如數組遍歷map不存在
按照自己的要求修改好之后,重啟node-red
node-red全局變量
使用函數組件
編輯內容
if (local.action===undefined)//獲取全局變量,如果不存在,賦默認值
{
local.action="站立";
local.x=0;
local.y=0;
}else{//如果存在,進入計算
switch(msg.payload.token){
case "move_x":
local.x+=parseInt(msg.payload.value)
break;
case "move_y":
local.y+=parseInt(msg.payload.value)
break;
}
}
context.set('data',local);//保存全局變量
函數節點使用16進制字節數組
msg.payload = Buffer.from([0x12,0x22,0xd3,0x23])
node-red的用戶權限與密碼配置
首先找到配置文件,啟動node-red的時候,啟動日志會顯示配置文件位置,如下圖所示

修改配置文件
![]()
找到這個位置,放開注釋
password是經過加密處理的
permissions 表示用戶權限,分為 讀寫 -> * 只讀 -> read

獲取加密后的秘鑰
首先進入找到加密工具所在的目錄

進入開始轉化秘鑰
node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" mypassword

得到的$2a$08$Dk6dTjxEPi85sObY1HRYZ.QDoB53m/J5M1MFulhgKTvpwuuC5AzOW表示新的秘鑰,將他寫入配置文件setting中的pasword中,即下一次登錄使用的密碼為mypassword
