快速開發:快速實現一個智能充電柜(智能鎖)
常用的JS調用Java代碼的方法,主要包括以下三種:
1)通過WebView的addJavascriptInterface進行對象映射
2)通過 WebViewClient 的shouldOverrideUrlLoading方法回調攔截 url
3) 通過 WebChromeClient 的onJsAlert、onJsConfirm、onJsPrompt方法回調攔截JS對話框alert、confirm、prompt 消息
原生渲染
本地開發的web 頁面,構建形成 Weex 的一個 JS bundle(native);在云端,開發者可以把生成的 JS bundle 部署上去,然后通過網絡請求或預下發的方式傳遞到用戶的移動應用客戶端;在移動應用客戶端里,WeexSDK 會準備好一個 JavaScript 引擎,并且在用戶打開一個 Weex 頁面時執行相應的 JS bundle,并在執行過程中產生各種命令發送到 native 端進行的界面渲染或數據存儲、網絡通信、調用設備功能、用戶交互響應等移動應用的場景實踐。
1、Weex 的 iOS 和 Android 客戶端中都會運行一個 JavaScript 引擎,來執行 JS bundle。
2、Weex向各端的渲染層發送規范化的指令,調度客戶端的native渲染和其它各種能力。
3、我們在 iOS 下選擇了 JavaScriptCore 內核,而在 Android 下選擇了 UC 提供的 v8 內核。
原理:
1、將XML+CSS+JavaScript代碼轉換為JSBundle
2、JSBundle傳給JS Framework解析為Json格式的Virtual DOM
3、客戶端通過接收Virtual DOM渲染界面
vue示例
<template>
<view class="content">
<text> {{speedWarnInfo}} </text>
<view class="log">
<view v-for="(log,index) in logs" class="" :key="index">
{{log}}
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
logs: [],
speed: 0,
speedWarnInfo: ''
}
},
watch: {
speed: {
handler(val) {
if (val > 100) {
this.speedWarnInfo = "超速"
}
},
immediate: true
}
},
beforeCreate:function(){
// 實例完全被創建出來之前,vue 實例的掛載元素$el和數據對象 data 都為 undefined,還未初始化
},
created:function(){
// 數據對象 data 已存在,可以調用 methods 中的方法,操作 data 中的數據,但 dom 未生成,$el 未存在 。
this.connect()
},
beforeMount:function(){
// vue 實例的 $el 和 data 都已初始化,掛載之前為虛擬的 dom節點,模板已經在內存中編輯完成了,但是尚未把模板渲染到頁面中。data.message 未替換
},
mounted:function(){
// vue 實例掛載完成,data.message 成功渲染。內存中的模板,已經真實的掛載到了頁面中,用戶已經可以看到渲染好的頁面了。
},
updated:function(){
// 當 data 變化時,會觸發beforeUpdate方法 。data 數據尚未和最新的數據保持同步。
},
beforeUpdate:function(){
// 當 data 變化時,會觸發 updated 方法。頁面和 data 數據已經保持同步了。
},
beforeDestroy:function(){
// 組件銷毀之前調用 ,在這一步,實例仍然完全可用。
},
destroyed:function(){
// 組件銷毀之后調用,對 data 的改變不會再觸發周期函數,vue 實例已解除事件監聽和 dom綁定,但 dom 結構依然存在。
},
methods: {
connect() {
var self = this
self.logs.push('connect')
var mqtt = require('mqtt/dist/mqtt.js')
// #ifdef H5
var client = mqtt.connect('xx://xxx.xxxxxx:8080')
// #endif
// #ifdef MP-WEIXIN||APP-PLUS
var client = mqtt.connect('xx://xxx.xxxxxx:8080')
// #endif
client.on('connect', function() {
self.logs.push('on connect')
client.subscribe('presence', function(err) {
if (!err) {
client.publish('presence', 'hello')
}
})
}).on('reconnect', function() {
self.logs.push('on reconnect')
}).on('error', function() {
self.logs.push('on error')
}).on('end', function() {
self.logs.push('on end')
}).on('message', function(topic, message) {
console.log(message)
self.logs.push(message.toString())
})
}
}
}
</script>
<style>
.content {
text-align: center;
height: 400upx;
word-break: break-all;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
后端通信協議
協議就是通信雙方的一個約定,即,表示第1位傳輸的什么、第2位傳輸的什么
有哪些協議可用
長鏈接:mqtt,Jt808,Tcp,http
短鏈接:coap,http
短連接的操作步驟是:
建立連接——數據傳輸——關閉連接…建立連接——數據傳輸——關閉連接
長連接的操作步驟是:
建立連接——數據傳輸…(保持連接)…數據傳輸——關閉連接
JT808
消息ID(0-1) 消息體屬性(2-3) 終端手機號(4-9) 消息流水號(10-11) 消息包封裝項(12-15)
byte[0-1] 消息ID word(16)
byte[2-3] 消息體屬性 word(16)
bit[0-9] 消息體長度
bit[10-12] 數據加密方式
此三位都為 0,表示消息體不加密
第 10 位為 1,表示消息體經過 RSA 算法加密
其它保留
bit[13] 分包
1:消息體衛長消息,進行分包發送處理,具體分包信息由消息包封裝項決定
0:則消息頭中無消息包封裝項字段
bit[14-15] 保留
byte[4-9] 終端手機號或設備ID bcd[6]
根據安裝后終端自身的手機號轉換
手機號不足12 位,則在前面補 0
byte[10-11] 消息流水號 word(16)
按發送順序從 0 開始循環累加
byte[12-15] 消息包封裝項
byte[0-1] 消息包總數(word(16))
該消息分包后得總包數
byte[2-3] 包序號(word(16))
從 1 開始
如果消息體屬性中相關標識位確定消息分包處理,則該項有內容
否則無該項
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
編碼
7E 02 00 00 3F 00 00 04 02 18 95 00 0B 00 00 00 00 00 04 00 03 01 58 CC AA 06 CB 79 F5 00 95 00 00 00 00 16 01 05 16 54 15 01 04 00 00 69 74 02 02 00 00 03 02 00 00 25 04 00 00 00 00 2B 04 00 00 00 00 30 01 00 31 01 0B 32 01 46 7C 7E
解碼
Mqtt
MQTT客戶端
一個使用MQTT協議的應用程序或者設備,它總是建立到服務器的網絡連接??蛻舳丝梢裕?/p>
(1)發布其他客戶端可能會訂閱的信息;
(2)訂閱其它客戶端發布的消息;
(3)退訂或刪除應用程序的消息;
(4)斷開與服務器連接。
MQTT服務器
開源:mosquito,emq
MQTT服務器以稱為"消息代理"(Broker),可以是一個應用程序或一臺設備。它是位于消息發布者和訂閱者之間,它可以:
(1)接受來自客戶的網絡連接;
(2)接受客戶發布的應用信息;
(3)處理來自客戶端的訂閱和退訂請求;
(4)向訂閱的客戶轉發應用程序消息。
數據包結構
在MQTT協議中,一個MQTT數據包由:固定頭(Fixed header)、 可變頭(Variable header)、 消息體(payload)三部分構成。
MQTT 數據包結構
固定頭(Fixed header),存在于所有MQTT數據包中,表示數據包類型及數據包的分組類標識
可變頭(Variable header),存在于部分MQTT數據包中,數據包類型決定了可變頭是否存在及其具體內容
消息體(Payload),存在于部分MQTT數據包中,表示客戶端收到的具體內容
1. MQTT固定頭
固定頭存在于所有MQTT數據包中,其結構如下:
1.1 MQTT數據包類型
位置:byte 1, bits 7-4。
相于一個4位的無符號值,類型如下:
1.2 標識位
位置:byte 1, bits 3-0。
在不使用標識位的消息類型中,標識位被做為保留位。如果收到無效的標志時,接收端必須關閉網絡連接:
DUP:發布消息的副本。用來在保證消息的可靠傳輸,如果設置為 1,則在下面的變長中增加MessageId,并且需要回復確認,以保證消息傳輸完成,但不能用于檢測消息重復發送。
QoS:發布消息的服務質量,即:保證消息傳遞的次數
00:最多一次,即:<=1
01:至少一次,即:>=1
10:一次,即:=1
11:預留
RETAIN: 發布保留標識,表示服務器要保留這次推送的信息,如果有新的訂閱者出現,就把這消息推送給它,如果設有那么推送至當前訂閱者后釋放。
1.3 剩余長度(Remaining Length)
位置:byte 1。
固定頭的第二字節用來保存變長頭部和消息體的總大小的,但不是直接保存的。這一字節是可以擴展,其保存機制,前7位用于保存長度,后一部用做標識。當最后一位為 1時,表示長度不足,需要使用二個字節繼續保存。
2.MQTT可變頭
MQTT數據包中包含一個可變頭,它駐位于固定的頭和負載之間??勺冾^的內容因數據包類型而不同,較常的應用是做為包的標識:
很多類型數據包中都包括一個2字節的數據包標識字段,這些類型的包有:PUBLISH (QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK
CONNECT報文的可變報頭按下列次序包含四個字段:
協議名(Protocol Name)
協議級別(Protocol Level)
連接標志(Connect Flags)
保持連接(Keep Alive)。
3.Payload消息體
Payload消息體位MQTT數據包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四種類型的消息 有消息體:
CONNECT,消息體內容主要是:客戶端的ClientID、訂閱的Topic、Message以及用戶名和密碼。
SUBSCRIBE,消息體內容是一系列的要訂閱的主題以及QoS。
SUBACK,消息體內容是服務器對于SUBSCRIBE所申請的主題及QoS進行確認和回復。
UNSUBSCRIBE,消息體內容是要訂閱的主題。
硬件
Jetson nano
Haas
Raspberry Pi
Ruff
HaaS600 EC600S 開發板
1.串口
Enhanced COM Port 為日志串口
Standard COM Port 為用戶串口
$ ./amp.exe seriallist
COM5
COM4
1
2
3
...
1569/main | app_status_indication_set 1
1569/main | platform_init_step1 done, user_init=3, ret=0
1569/main | platform_init_step1 enter temprature cali on signal
1569/main | board_init platform_init_step1 done
1573/main_task | sys_init go
1573/main_task | sys freq calc : 320000000, wifi init 1
1573/main_task | sys_init soc_peripheral_init done
Welcome to AliOS Things
1574/main_task | sys_init aos_components_init done
1574/main_task | mesh has been opened
[Jan 01 00:00:01.482]<I>ULOG-test sys_init aos_components_init done
nano entry here!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2.putty
單片機或計算機在串口通信時的速率。
例如假設數據傳送速率為120符號/秒(symbol/s)(也就是波特率為120Baud),又假設每一個符號為8位(bit),則其傳送的比特率為(120symbol/s) * (8bit/symbol)=960bps.。
3.push
$ ./amp.exe serialput ./app COM5 -b 115200
device type: ymodem
generating app package...
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Why you should do it regularly:
https://github.com/browserslist/browserslist#browsers-data-updating
Wait shakehand with board ...
Please reboot board now
Putting: ██████████████████████████████ 2/2
put complete!
1
2
3
4
5
6
7
8
9
10
11
12
13
4.reboot
5.代碼
import * as http from 'http'
var gpio = require('gpio');
var mqtt = require('mqtt');
var network = require('network');
var switch_01 = gpio.open({
id: 'D13'
});
var net = network.openNetWorkClient();
var netType = net.getType();
var netStatus = net.getStatus();
var switch_01_status = 0;
if (netStatus == 'connect') {
/* 網絡狀態已連接,獲取網絡狀態 */
getNetInfo();
} else {
/* wifi或者以太網,設置ifconfig */
if (netType === "wifi" || netType === "ethnet") {
net.setIfConfig({
dhcp_en: true, // true: 動態IP模式(以下參數可忽略); false: 靜態IP模式(以下參數必填)
ip_addr: '192.168.124.66',
mask: '255.255.255.0',
gw: '192.168.124.1',
dns_server: '8.8.8.8'
});
}
/* 網絡狀態未連接,如果是wifi設備則主動聯網(4G模組中系統會自動注網) */
if (netType === "wifi") {
net.connect({
ssid: 'wangpengpeng-ssid', //熱點ssid
password: '******' //熱點的密碼
});
}
/**
* 監聽網絡連接成功事件,成功執行回調函數
*/
net.on('connect', function() {
getNetInfo();
// create mqtt client
createMQTTClient();
});
net.on('disconnect', function() {});
}
function getNetInfo() {
console.log('net status is connected, begin getting net information...');
var info = net.getInfo();
if (netType === "wifi" || netType === "ethnet") {
/* 是否開啟dhcp */
console.log('net dhcp_en is: ' + info.netInfo.dhcp_en);
/* ip地址*/
console.log('net ip_addr is: ' + info.netInfo.ip_addr);
/* dns */
console.log('net dns_server is: ' + info.netInfo.dns_server);
/* 網關 */
console.log('net gateway is: ' + info.netInfo.gw);
/* 子網掩碼 */
console.log('net mask is: ' + info.netInfo.mask);
/* mac地址 */
console.log('net mac is: ' + info.netInfo.mac);
/* wifi信號強度 */
console.log('net wifi rssi is: ' + info.netInfo.rssi);
return;
}
console.log('unkown net type');
}
function createMQTTClient() {
var client = mqtt.createClient({
host: 'de28fe41.cn-hangzhou.emqx.cloud',
port: 15129,
clientId: 'wangpengpeng_01',
username: 'wangpengpeng',
password: '******',
});
client.on('connect', function() {
// subscribe
client.subscribe({
topic: '/open',
success: function() {
switch_01_status = 1
switch_01.writeValue(switch_01_status);
},
fail: function() {}
});
// subscribe
client.subscribe({
topic: '/close',
success: function() {
switch_01_status = 0
switch_01.writeValue(switch_01_status);
},
fail: function() {}
});
// publish
setInterval(function() {
client.publish({
topic: '/push',
message: switch_01_status
});
}, 3 * 1000);
});
client.on('disconnect', function() {
console.log('mqtt disconnect');
});
client.on('reconnect', function() {
console.log('mqtt reconnect');
});
client.on('message', function(topic, payload) {
console.log('[' + topic + '] message: ' + payload);
});
client.on('close', function() {
console.log('mqtt close');
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
王鵬鵬鵬
關注
0
0
0
JT808-2019協議技術規范.pdf
01-09
JT808-2019協議技術規范帶
JT808-2019和JT809-2019協議PDF版
07-17
部標平臺相關協議之809協議2019版本和部標平臺相關協議之808協議2019版本,與2011版本有變化。 本標準代替JT/T809-2011 《道路運輸車輛衛星定位系統平臺數據交換
參與評論 您還未登錄,請先 登錄 后發表或查看評論
jt808協議詳解_zybiao2的博客_jt808協議
3-27
jt808協議詳解 7E0200005B014141138693224E00000100000000000157E6DE06CBEC600000000000001703090019200104000026F5EB3700060089FFFFFFFD000700B400FFFFFFFF002400A901CC000627BD0FABCC27910000B727911287BF27BD1159C327BD0000BB27910ED1B5C97E...
jt t808協議c語言,部標JT808協議解碼包: 提供部標JT/T8...
3-8
4[01] 協議版本號: 1 5[00000000017299841738] 終端手機號: 17299841738 15[ffff] 流水號: 65535 0[00000400] 報警標志: 1024 4[00000800] 狀態: 2048 8[06eeb6ad] 緯度: 116307629
JT808-2019協議測試工具
12-02
JTIT 808一2019協議測試工具,自己python寫的,非過檢終端。 1.連接到服務端 2.可以收發報文,且能定時發送位置匯報的0200報文,以及點擊按鈕發送終端主動發的報文,并記錄日志。 3.拆解報文
jt/t 808協議
04-03
這是交通局最新的808通訊協議,你可以查詢相關的數據通訊命令,然后進行開發。
java解析JT808協議_NiceSzy的博客_jtt808報文解析
2-23
本篇文章將介紹JT808協議的解析思路。 另請大神繞路,不喜勿噴! 先寫個大致的思路,有疑問可以聯系本人,聯系方式: emial:hylexus@163.com 1 JT808協議掃盲 1.1 數據類型 1.2 消息結構
4G無線防拆報警GPS定位器JT808 部標通訊協議及數據格式...
3-5
本協議采用的通信方式應符合 JT/T 794 中的相關規定。通信協議采用 TCP,平臺作為 服務器端,終端作為客戶端。 1.2.數據類型 協議消息中使用的數據類型見表 1: 表1 數據類型 數據類型 描述及要求 ...
JT808部標協議
04-11
JT808部標協議,道路運輸車輛衛星定位系統終端通訊協議及數據格式。
java解析JT808協議
熱門推薦
hylexus的博客
3萬+
JT808協議掃描 1 數據類型 2 消息結構 3 消息頭 解析 1 消息體實體類 2 字節數組到消息體實體類的轉換 21 消息轉換器 22 用到的工具類 221 BCD操作工具類 222 位操作工具類 3 和netty結合 31 netty處理器鏈 32 netty針對于JT808的消息處理器 33 用到的其他類 注 本篇文章將介紹JT808協議的解析思路。 另請大神繞路,不喜勿噴! 先寫個大
jt808協議_通信協議設計
weixin_39946534的博客
2496
在網絡應用中會涉及到很多通訊協議的使用,比如車聯網、V2X的通訊協議,APP與后臺Server交互的協議。同時有些協議可能是沒有標準的,需要我們自己設計一套通信協議,當然我們肯定在某些已有協議之上再進行自定義。比如我們要定義T-Box與車聯網平臺的通訊,那么肯定會使用TCP/UDP作為基礎協議,再基于這一層的協議進行自定義。關于到底選擇TCP還是UDP就不多討論了,下面對協議的設計做一下...
JT808詳細解釋
fei0700的博客
804
7E0200005B014141138693224E00000100000000000157E6DE06CBEC600000000000001703090019200104000026F5EB3700060089FFFFFFFD000700B400FFFFFFFF002400A901CC000627BD0FABCC27910000B727911287BF27BD1159C327BD0000BB27910ED1B5C97E ———————————————— 詳細解釋 7E -
部標JT808協議處理方案
難得糊涂
6529
序言 本來說弄個系列博客,但是在實施的過程中,發現沒有想象的復雜.搞清楚下面的,后面的都是體力勞動 現在開始弄交通部808協議解析具體的實施,之前都是在研究框架.今天正式開始實施.本篇主要介紹一些基礎知識.另沒有源碼,cuiyaonan2000@163.com 僅限問題討論與實施方案的交流.本文使用的參考資料室JTT808-2013協議 位運算(一定要搞明白...
jt808 jt-808 JT/T808-2001 jt/t808-2001 部標協議 協議解析
hncdyj的專欄
9724
JT/T808-2011協議解析規則白話文詳解(JAVA版本) 1.包詳解 解析之前復習下java的數據結構,以及對應JT/L808-2011里面的數據類型。 JT/T808 JAVA數據類型 JT/L808描述 JAVA描述 BYTE Byte 無符號單字節整型(字節, 8 位) 以二進制補碼表示的整數 WORD Short 無符號雙字節整型(字節,16位) short數據類...
部標JT808 JT/T808協議網關
最新發布
WordPress
257
項目介紹 基于Netty,實現JT808 JT/T808部標協議的消息處理,與編碼解碼; 使用SpringBoot + MyBatis提供數據入庫、Web接口服務; 協議部分不依賴Spring,可移除Spring獨立運行(支持Android客戶端); 最簡潔、清爽、易用的部標開發框架。 主要特性 代碼足夠精簡,便于二次開發; 致敬Spring、Hibernate設計理念,熟悉Web開發的同學上手極快; 使用注解描述協議,告別繁瑣的封包、解包; 支持異步批量處理,顯著提升MySQL入庫性能;
北斗系統學習:JTT808協議初步解析
李遲的專欄
6118
本文學習部標(交通運輸部)JT/T 808,并使用 Golang 語言解析。當然,僅使用位置數據進行演示,所以只是一個開端(是否有后續,暫未知)。本文不是科普,因此不會詳細列出協議字段說明,可參考文后給出的資料。
交通部808協議介紹_基于交通部JT/T808協議的車聯網物聯網框架開發技術方案(源碼)...
weixin_30291543的博客
496
(一)平臺介紹1、接入網關應用采用mina/netty+spring架構,獨立于其他應用,主要負責維護接入終端的tcp鏈接、上行以及下行消息的解碼、編碼、流量控制,黑白名單等安全控制,網關同時支持交通部JT/T808-2011、JT/T808-2013兩個版本全部的808協議,網關應用提供二次開發接口,支持協議擴展而不需要改動任何原有代碼。接入網關采用json消息通過MQ消息隊列與業務平臺進行交互...
JT/T808協議文檔
12-05
JT/T808協議文檔,這里介紹了JT/T808協議基本構成,報文類型,以及協議開發流程
國內物聯網平臺(8):中移物聯網開放平臺OneNet
weixin_30782331的博客
744
國內物聯網平臺(8)——中移物聯網開放平臺OneNet 馬智 平臺定位 OneNET是中移物聯網有限公司搭建的開放、共贏設備云平臺,為各種跨平臺物聯網應用、行業解決方案,提供簡便的云端接入、存儲、計算和展現,快速打造物聯網產品應用,降低開發成本。 IoT PaaS基礎能力:提供智能設備自助開發工具、后臺技術支持服務、物聯網專網、短彩信、位置定位、設...
基于JT/T808協議的車聯網平臺架構方案
gaoshbo的專欄
2萬+
平臺基于(《JT/T808-2011道路運輸車輛衛星定位系統終端通訊協議及數據格式》、《JT/T808-2013道路運輸車輛衛星定位系統北斗兼容車載終端通訊協議技術規范》、JT/T-796-2011《道路運輸車輛衛星定位系統平臺技術要求》、JT/T-1078-2016《道路運輸車輛衛星定位系統車載視頻通信協議》、JT/T-1077-2016《道路運輸車輛衛星定位系統車載視頻平臺技術要求》...
基于JT808協議的.gps文件解析工具
05-15
基于JT808協議的.gps文件解析工具,簡單易用,解析格式如下 時間 報警標志 狀態 經度 緯度 高度 速度KM/H 方向 里程KM 附加信息或者統計數據(16進制顯
————————————————
版權聲明:本文為CSDN博主「王鵬鵬鵬」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/AAA17864308253/article/details/112951326