此博客基于前两篇博客
openwrt移植openthread
openwrt搭建thread网络
详细操作可参考官方externel commissioning使用指导
使用android thread app
1.修改ot-br-posix中openwrt的Makefile,将OTBR_MDNS=avahi,并添加libavahi-client依赖包。
https://github.com/openthread/ot-br-posix/blob/master/etc/openwrt/openthread-br/Makefile
@@ -44,7 +44,7 @@ CMAKE_SOURCE_DIR = $(LOCAL_SOURCE_DIR)
CMAKE_OPTIONS = \
-DBUILD_TESTING=OFF \
-DCMAKE_INSTALL_PREFIX=/usr \
- -DOTBR_MDNS=OFF \
+ -DOTBR_MDNS=avahi \
-DOTBR_OPENWRT=ON \
-DOTBR_WEB=ON
@@ -52,7 +52,7 @@ define Package/openthread-br
SECTION := base
CATEGORY := Network
TITLE := OpenThread Border Router
- DEPENDS := +libstdcpp +libjson-c +libubus +libblobmsg-json +libncurses +libreadline +libpthread
+ DEPENDS := +libstdcpp +libjson-c +libubus +libblobmsg-json +libncurses +libreadline +libpthread +libavahi-client
endef
2.编译之后更新openthread-br_xxx.ipk到openwrt
**openwrt下执行**
otbr-agent /dev/ttyACM0 115200 &
ot-ctl
> panid 0xdead
Done
> extpanid dead1111dead2222
Done
> masterkey 11112233445566778899DEAD1111DEAD
Done
> prefix add fd11:22::/64 pasor
Done
> pskc 198886f519a8fd7c981fee95d72f4ba7
Done
> pskc -p J01NME
Done
> networkname OpenThreadGuide
Done
> ifconfig up
Done
> thread start
Done
> netdataregister
Done
3.使用android手机安装thread app,app下载链接:thread app。
.
4.手机连接路由wifi,打开thread app.
输入密码,密码为J01NME。
此密码与pskc的关系:
可查看https://github.com/openthread/ot-br-posix/tree/master/tools
pskc工具将passphrase、extpanid、network_name三个参数通过算法计算出pskc,而app中的密码是passphrase。
各参数详细说明可参考:ot-cli命令详细介绍
密码输入正确后,通过手机扫描joiner device的二维码即可将joiner device加入thread网络
5.制作joiner device二维码
ubuntu使用screen命令控制joiner device
> factoryreset
> eui64
f4ce36d76bbd2876 #获取joiner device的eui64
Done
设置组网密码为:N0RD1C
登录二维码制作网站:https://www.qr-code-generator.com/
点击Text,将v=1&&eui=f4ce36d76bbd2876&&cc=N0RD1C输入message框,点击制作二维码。
6.app扫描二维码
通过thread app扫描joiner device的二维码
此时app正在等待joiner device加入。
7.joiner device加入thread 网络
ubuntu使用screen命令控制joiner device
> ifconfig up
Done
> joiner start N0RD1C
Done
Join success!
> thread start
Done
app作为externel commissioner设置完成。
使用ot-commissioner作为externel commissioning
详细可参考https://openthread.google.cn/guides/border-router/external-commissioning?comm=ot-commissioner
.
1.ubuntu安装ot-commissioner
clone工程https://github.com/openthread/ot-commissioner
按照readme在ubuntu中编译ot-commsioner.
.
2.启动border route.
按照openwrt搭建thread网络进行到“启动BORDER ROUTER(openwrt)”章节
3.ubuntu连接openwrt lan或wifi
deng@ubuntu:/work/work/custom/ot-commissioner/build$ ifconfig
ens33 Link encap:Ethernet HWaddr 00:0c:29:87:f9:ea
inet addr:192.168.8.177 Bcast:192.168.8.255 Mask:255.255.255.0
inet6 addr: ddbe:48ec:56c6:10::17a/128 Scope:Global
inet6 addr: ddbe:48ec:56c6:10:5b90:ca3:d4b0:dd5f/64 Scope:Global
inet6 addr: fe80::c0bf:c04f:ad81:9dc3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6606 errors:0 dropped:0 overruns:0 frame:0
TX packets:5056 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:662611 (662.6 KB) TX bytes:3703294 (3.7 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:5038 errors:0 dropped:0 overruns:0 frame:0
TX packets:5038 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:345014 (345.0 KB) TX bytes:345014 (345.0 KB)
deng@ubuntu:/work/work/custom/ot-commissioner/build$ ping ddbe:48ec:56c6:10::1
ping: unknown host ddbe:48ec:56c6:10::1
deng@ubuntu:/work/work/custom/ot-commissioner/build$ ping6 ddbe:48ec:56c6:10::1
PING ddbe:48ec:56c6:10::1(ddbe:48ec:56c6:10::1) 56 data bytes
64 bytes from ddbe:48ec:56c6:10::1: icmp_seq=1 ttl=64 time=1.02 ms
64 bytes from ddbe:48ec:56c6:10::1: icmp_seq=2 ttl=64 time=1.00 ms
64 bytes from ddbe:48ec:56c6:10::1: icmp_seq=3 ttl=64 time=0.889 ms
^C
--- ddbe:48ec:56c6:10::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.889/0.970/1.021/0.057 ms
deng@ubuntu:/work/work/custom/ot-commissioner/build$
ubuntu可ping通openwrt。
4.openwrt确保otbr-agent监听49191端口
root@GL-B1300:/# netstat -pnl | grep agent
udp 0 0 :::49191 :::* 4466/otbr-agent
udp 0 0 :::61631 :::* 4466/otbr-agent
raw 0 0 :::58 :::* 58 4466/otbr-agent
unix 2 [ ACC ] STREAM LISTENING 14105 4466/otbr-agent /tmp/openthread.sock
root@GL-B1300:/#
5.修改commissioner-cli的pskc
**openwrt中**
> dataset
Active Timestamp: 1
Channel: 15
Channel Mask: 07fff800
Ext PAN ID: 7f6b9dc5ee4ef2d2
Mesh Local Prefix: fd01:e5dd:ae8c:c555/64
Master Key: 8d23c1d84545d097f4111ccb368268f3
Network Name: OpenThread-8473
PAN ID: 0x8473
PSKc: 59a7c729fd1c5e8d1844d917d0ca9c16 #记录pskc
Security Policy: 0, onrcb
Done
**ubuntu中修改../src/app/etc/commissioner/non-ccm-config.json中的PSKc与oenwrt中的相同**
deng@ubuntu:/work/work/custom/ot-commissioner/build$ cat ../src/app/etc/commissioner/non-ccm-config.json | grep PSKc
"PSKc" : "59a7c729fd1c5e8d1844d917d0ca9c16"
5.启动commissioner-cli
commissioner-cli详细操作命令可参考:https://github.com/openthread/openthread/blob/master/src/cli/README_COMMISSIONER.md
deng@ubuntu:/work/work/custom/ot-commissioner/build$ sudo ./src/app/cli/commissioner-cli ../src/app/etc/commissioner/non-ccm-config.json
____ ______ _ _ ________ ____
/ __ \/_ __/ _________ ____ ___ ____ ___ (_)_________(_)___ ____ ___ _____ / ____/ / / _/
/ / / / / /_____/ ___/ __ \/ __ `__ \/ __ `__ \/ / ___/ ___/ / __ \/ __ \/ _ \/ ___/ / / / / / /
/ /_/ / / /_____/ /__/ /_/ / / / / / / / / / / / (__ |__ ) / /_/ / / / / __/ / / /___/ /____/ /
\____/ /_/ \___/\____/_/ /_/ /_/_/ /_/ /_/_/____/____/_/\____/_/ /_/\___/_/ \____/_____/___/
>
>
>
> start ddbe:48ec:56c6:10::1 49191 #ddbe:48ec:56c6:10::1为openwrt的br-lan ip
[done]
> joiner enableall meshcop J01NU5 #将所有thread网络的加入密码设为J01NU5
[done]
博主在验证该功能时遇到一个错误:
> start ddbe:48ec:56c6:10::1 49191
IO_ERROR: NET - Reading information from the socket failed
[failed]
原因是otbr-agent中DTLS messages过长,openthread官方已修复该bug,请自行查看:https://github.com/openthread/openthread/pull/5125/commits/77e8cdd4c92ddf4fa123472ba1e0ba959bc24e9b
6.joiner device加入thread网络
**ubuntu中**
screen /dev/ttyACM0 115200
> factoryreset
> ifconfig up
Done
> joiner start J01NU5
Done
Join success!
> thread start
自此externel commissioning组网的两种方式已验证完。