Skip to content

Commit 5b80fb9

Browse files
authored
lwm2m功能模块示例代码添加 (#16)
Add lwm2m example.
1 parent eac4c87 commit 5b80fb9

File tree

1 file changed

+211
-0
lines changed

1 file changed

+211
-0
lines changed
Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
import utime
16+
import lwm2m
17+
import modem
18+
import net
19+
import checkNet
20+
from machine import Pin
21+
import _thread
22+
23+
class lwm2m_client():
24+
25+
def __init__(self):
26+
27+
self.lwm2m = lwm2m()
28+
self.network_wait_time = 60
29+
self.host = "220.180.239.212"
30+
self.port = "5563"
31+
self.connect_state = 0 # 0 -init, 1- registing, 2-register failed, 3-register success.
32+
self.connect_server_type = 0 # 0 - server, 1 - bsserver
33+
self.imei = modem.getDevImei()
34+
self.security_mode = 3 # 3 - no Pre-share key mode, 0 Pre-share key mode
35+
self.epname_mode = 3 # 3 - urn:imei:+imei .
36+
self.support_security_mode=[0,2,3]
37+
38+
self.psk="urn:imei:{}".format(self.imei)
39+
self.key="30313233343536373839"
40+
41+
if self.security_mode == 3:
42+
self.url = "coap://"+self.host +":"+ self.port
43+
else:
44+
self.url = "coaps://"+self.host +":"+ self.port
45+
46+
self.config_security =[1,1000,self.url,self.connect_server_type,3]
47+
self.config_epname = ["testname"] # only self.epname_mode = 1 will use it
48+
self.config_epnamemde = [self.epname_mode]
49+
self.config_foat = [0,1]
50+
self.config_server = [1, 60, 2, 60, 86400, 1, "U"]
51+
stage, state = checkNet.waitNetworkReady(30)
52+
if stage == 3 and state == 1:
53+
self.log('Network connection successful.')
54+
else:
55+
self.log('Network connection failed, stage={}, state={}'.format(stage, state))
56+
57+
def log(self,args):
58+
print("[Lwm2m_client Info] {}".format(args))
59+
60+
def lwm2m_set_psk(self,psk="testname"):
61+
if self.security_mode == 0:
62+
self.psk = psk
63+
else:
64+
self.log("security_mode:{},not support config psk!".format(self.security_mode))
65+
66+
def lwm2m_set_key(self,key="30313233343536373839"):
67+
if self.security_mode == 0:
68+
self.key = key
69+
else:
70+
self.log("security_mode:{},not support config key!".format(self.security_mode))
71+
72+
73+
def lwm2m_set_server_host(self,url="220.180.239.212"):
74+
self.host = url
75+
self.lwm2m_update_connect_url()
76+
77+
def lwm2m_update_connect_url(self):
78+
if self.security_mode == 3:
79+
self.url = "coap://"+self.host +":"+ self.port
80+
else:
81+
self.url = "coaps://"+self.host +":"+ self.port
82+
83+
def lwm2m_set_epname(self,epname):
84+
if self.epname_mode == 1:
85+
self.config_epname = [epname]
86+
else:
87+
self.log("epname_mode :{},the mode not support set epame!!".format(self.epname_mode))
88+
89+
def lwm2m_set_server_port(self,port="5563"):
90+
self.port = port
91+
self.lwm2m_update_connect_url()
92+
93+
def lwm2m_set_security_mode(self,mode=3):
94+
if mode in self.support_security_mode:
95+
self.security_mode = mode
96+
self.lwm2m_update_connect_url()
97+
else:
98+
self.log("the security_mode {} not support !!".format(mode))
99+
self.log("current support security_mode :{}".format(self.support_security_mode))
100+
101+
def lwm2m_mesage_callback(self,args):
102+
self.log("Get Lwm2m Server Data :{}".format(args))
103+
result=args[2]
104+
if '"ready","successfully"' in result:
105+
self.log('Connect Success!')
106+
elif '"ready","failed"' in result:
107+
self.log('Connect Failed!')
108+
else:
109+
pass
110+
111+
def lwm2m_display_current_info(self):
112+
self.log("/---display config information---\\")
113+
self.log("lw.Security :{}".format(self.config_security))
114+
self.log("lw.config_server :{}".format(self.config_server))
115+
self.log("lw.Epnamemode :{}".format(self.config_epnamemde))
116+
if self.epname_mode == 1:
117+
self.log("lw.epname :{}".format(self.config_epname))
118+
self.log("lw.Fota :{}".format(self.config_foat))
119+
self.log("\\---display config information---/")
120+
121+
122+
def lwm2m_config_prepare(self):
123+
config=[]
124+
self.lwm2m.config(self.lwm2m.Reset,config)
125+
config=[1]
126+
self.lwm2m.config(self.lwm2m.Security,config)
127+
config=[0]
128+
self.lwm2m.config(self.lwm2m.Security,config)
129+
130+
def lwm2m_set_connect_type(self,connect_type):
131+
if connect_type == 1 or connect_type == 0:
132+
self.connect_server_type = connect_type
133+
else:
134+
self.log("connect_type :{},not support!".format(connect_type))
135+
136+
def register_all_callback(self):
137+
self.lwm2m.register_call(self.lwm2m_mesage_callback)
138+
139+
def lwm2m_set_epname_mode(self,epname_mode = 3):
140+
if epname_mode == 1 or epname_mode == 3:
141+
self.epname_mode = epname_mode
142+
else:
143+
self.log("epname_mode :{},not support!".format(epname_mode))
144+
145+
def lwm2m_update_all_config(self):
146+
147+
if self.connect_server_type == 0 :
148+
# connect server
149+
self.config_security=[1,1000,self.url,self.connect_server_type,self.security_mode]
150+
if self.connect_server_type == 1 :
151+
# connect bsserver
152+
self.config_security=[0,100,self.url,self.connect_server_type,self.security_mode]
153+
154+
if self.security_mode == 0:
155+
# need psk
156+
self.config_security.append(self.psk)
157+
self.config_security.append(self.key)
158+
self.config_epnamemde=[self.epname_mode]
159+
160+
def lwm2m_config(self):
161+
self.lwm2m_display_current_info()
162+
self.log("wait 1s ,will start config profile infomation!")
163+
utime.sleep(1)
164+
165+
self.lwm2m.config(self.lwm2m.Security,self.config_security)
166+
self.lwm2m.config(self.lwm2m.Server,self.config_server)
167+
self.lwm2m.config(self.lwm2m.Epnamemode,self.config_epnamemde)
168+
if self.epname_mode == 1:
169+
self.lwm2m.config(self.lwm2m.Epname,self.config_epname)
170+
self.lwm2m.config(self.lwm2m.Fota,self.config_foat)
171+
172+
173+
def lwm2m_befor_run(self):
174+
175+
# must clear dirty config,always run this function
176+
self.lwm2m_config_prepare()
177+
178+
# config security_mode :3-no PSK ,0 -psk
179+
self.lwm2m_set_security_mode(0)
180+
181+
# config lwm2mserver ip address
182+
self.lwm2m_set_server_host("lwm2m-test.avsystem.io")
183+
self.lwm2m_set_server_port("5684")
184+
# config epname format : 3 - urn:imei:imei
185+
epname_mode = 3
186+
self.lwm2m_set_epname_mode(epname_mode)
187+
self.lwm2m_set_psk("urn:imei:869339060001965")
188+
self.lwm2m_set_key("30313233343536373839")
189+
190+
# config connect server or bsserver 0 - server 1 -bsserver
191+
self.lwm2m_set_connect_type(0)
192+
193+
# update config set
194+
self.lwm2m_update_all_config()
195+
self.lwm2m_config()
196+
self.register_all_callback()
197+
198+
def lwm2m_run(self):
199+
self.lwm2m_befor_run()
200+
self.lwm2m.register()
201+
202+
lw=lwm2m_client()
203+
204+
def th_lwm2m(args):
205+
print('thread th_func1 {} is running, heap_size {}'.format(args,_thread.get_heap_size()))
206+
global lw
207+
lw.lwm2m_run()
208+
209+
if __name__ == '__main__':
210+
211+
_thread.start_new_thread(th_lwm2m, (list("r")))

0 commit comments

Comments
 (0)