接上文,使用贝壳物联,在使用过程之中发现,经纬度定位并不怎么好用,只能发送整数型的经纬度信息,非常的“粗糙”。因此,我换用了其他的物联网平台,在茫茫物联网平台之中,我找到了onenet,相信大家对他并不陌生,onenet 的TCP通讯实际上也比较复杂需要自己来写lua脚本,我唯一对lua 的认识仅仅停留在知道他是一个用来写脚本的语言,其他的一概不知。

从此开启了onenet 的摸索之旅,今天也就来探讨一下onenet 的相关使用和http 的数据调用,本文大多与网络相关,很少涉及到硬件,希望大家耐住性子,慢慢“享用”。

onenet 的注册也就不再赘述了,进入网页之后,点击控制台。

选择多协议接入

 选择TCP透传

添加产品

按照个人开发需要填写相关的信息

添加设备

同样按照开发需要填写相关的信息。 

上传lua脚本(用于解析数据),very important!!!

若遇到选择新旧版本请选择旧版本,来到设备列表,上传lua脚本,用记事本粘贴下方代码(部分地方需做修改),修改文件后缀名为.lua。上传代码。

-----------------------------------------------------------------------
-- 使用说明:                                                        --
-- V1.3                                                              --
-- 用户需要自行完成一下2个函数的实现                                 --
-- 1、定时下发数据任务初始化函数:device_timer_init(dev)【可选】     --
-- 2、对设备上传数据进行解析(包括心跳等):device_data_analyze(dev) --
------------------------------------------------------------------------------------------------------------------------------------------------------
-- 注册C函数                                                                 --
-- u2f 将32位整型内存数据转换为浮点数(不同于值转换)                        --
-- 类似C代码 *(float*)(&u)                                                   --
-- function u2f(u)                                                           --
-- @param   u   number   整数值                                              --
-- @return  成功返回浮点数值,否则返回nil                                    --
-- @example local u = 123                                                    --
--          local f = u2f( 123 )                                             --
--                                                                           --
-- time 获取时间戳,距离(00:00:00 UTC, January 1, 1970)的毫秒数            --
-- function time()                                                           --
-- @return  返回当前时间戳                                                   --
-- @example local t = time()                                                 --
--                                                                           --
-- year 获取年(year-1900)                                                  --
-- function year(t)                                                          --
-- @param   t   number   时间戳,距离(00:00:00 UTC, January 1, 1970)的秒数 --
-- @return  返回年                                                           --
-- @example local y = year( t )                                              --
--                                                                           --
-- month 获取月(0-11)                                                      --
-- function month(t)                                                         --
-- @param   t   number   时间戳,距离(00:00:00 UTC, January 1, 1970)的秒数 --
-- @return  返回月                                                           --
-- @example local m = month( t )                                             --
--                                                                           --
-- day 获取日(1-31)                                                        --
-- function day(t)                                                           --
-- @param   t   number   时间戳,距离(00:00:00 UTC, January 1, 1970)的秒数 --
-- @return  返回月                                                           --
-- @example local d = day( t )                                               --
--                                                                           --
-- hour 获取时(0-23)                                                       --
-- function hour(t)                                                          --
-- @param   t   number   时间戳,距离(00:00:00 UTC, January 1, 1970)的秒数 --
-- @return  返回时                                                           --
-- @example local h = hour( t )                                              --
--                                                                           --
-- minute 获取分(0-59)                                                     --
-- function minute(t)                                                        --
-- @param   t   number   时间戳,距离(00:00:00 UTC, January 1, 1970)的秒数 --
-- @return  返回分                                                           --
-- @example local m = minute( t )                                            --
--                                                                           --
-- second 获取秒(0-59)                                                     --
-- function second(t)                                                        --
-- @param   t   number   时间戳,距离(00:00:00 UTC, January 1, 1970)的秒数 --
-- @return  返回秒                                                           --
-- @example local m = second( t )                                            --
---------------------------------------------------------------------------------------------------------------------------------------
-- 将bytes string转换hex string                       --
-- @param   s   string   bytes string                 --
-- @return  返回hex string,类似"0A0B0C0D..."         --
-- @example local hex = to_hex("\2\2\0\150\0\37\206") --
--------------------------------------------------------
function to_hex(s)local ilocal tt={s:byte(1,s:len())}for i=1,#t dot[i]=string.format('%02X',t[i])endreturn table.concat(t)
end-----------------------------------------------
-- 将object序列化成字符串                    --
-- @param   o   boolean|number|string|table  --
-- @return  返回序列化string                 --
-- @example local str = to_str({x=100})      --
-----------------------------------------------
function to_str(o)local i=1local t={}local ff=function(x)local y=type(x)if y=="number" thent[i]=xi=i+1elseif y=="boolean" thent[i]=tostring(x)i=i+1elseif y=="string" thent[i]="\""t[i+1]=xt[i+2]="\""i=i+3elseif y=="table" thent[i]="{"i=i+1local z=truefor k,v in pairs(x) doif z thenz=falset[i]="\""t[i+1]=kt[i+2]="\""t[i+3]=":"i=i+4f(v)elset[i]=","t[i+1]="\""t[i+2]=kt[i+3]="\""t[i+4]=":"i=i+5f(v)endendt[i]="}"i=i+1elset[i]="nil"i=i+1endendf(o)return table.concat(t)
end----------------------------------------------------------------------------------------------------------
-- 添加值数据点到table中                                                                                --
-- @param   t   table                                                                                   --
--          i   string                      数据流或数据流模板名称                                      --
--          a   number                      毫秒级时间戳,距离(00:00:00 UTC, January 1, 1970)的毫秒; --
--                                          如果值为0,表示使用当前时间                                 --
--          v   boolean|number|string|table 布尔值、数值、字符串、json                                  --
--          c   string                      用于标识数据点归属(设备AuthCode,可选)                       --
--                                          如果值为“”或nil,表示数据点归属建立TCP连接的设备            --
-- @return  成功返回true,否则返回false                                                                 --
-- @example local ok = add_val(t,"dsname",0,100)                                                        --
----------------------------------------------------------------------------------------------------------
function add_val(t, i, a, v, c)if type(t)~="table" thenreturn falseelseif type(i)~="string" thenreturn falseelseif type(a)~="number" thenreturn falseelselocal o = type(v)if o~="boolean" and o~="number" and o~="string" and o~="table" thenreturn falseendlocal n = {i=i,v=v}if a~=0 and a~=nil thenn["a"]=aendif c~=nil thenn["c"]=cend-- list push_back --if t.h==nil thent.h={nil,n}t.t=t.helset.t[1]={nil,n}t.t=t.t[1]endendreturn true
end----------------------------------------------------------------------------------------------------------
-- 添加二进制数据点到table中                                                                            --
-- @param   t   table                                                                                   --
--          i   string                      数据流或数据流模板名称                                      --
--          a   number                      毫秒级时间戳,距离(00:00:00 UTC, January 1, 1970)的毫秒; --
--                                          如果值为0,表示使用当前时间                                 --
--          b   string                      二进制数据(hex string),类似"0A0B0C0D..."                 --
--          d   boolean|number|string|table 用于描述b(可选);数值、字符串、json                       --
--          c   string                      用于标识数据点归属(设备AuthCode,可选)                       --
--                                          如果值为“”或nil,表示数据点归属建立TCP连接的设备            --
-- @return  成功返回true,否则返回false                                                                 --
-- @example local ok = add_val(t,"dsname",0,"0A0B0C0D...",{...})                                        --
----------------------------------------------------------------------------------------------------------
function add_bin(t, i, a, b, d)if type(t)~="table" thenreturn falseelseif type(i)~="string" thenreturn falseelseif type(a)~="number" thenreturn falseelseif type(b)~="string" thenreturn falseelselocal o=type(d)if o~="nil" and o~="string" and o~="table" thenreturn falseendlocal n={i=i,b=to_hex(b)}if a~=0 and a~=nil thenn["a"]=aendif d~=nil thenn["d"]=dendif c~=nil thenn["c"]=cend-- list push_back --if t.h==nil thent.h={nil,n}t.t=t.helset.t[1]={nil,n}t.t=t.t[1]endendreturn true
end--------------------------------------------------------------
-- 将table序列化成json字符串                                --
-- @param   t   table   通过add_val、add_bin构建起来的table --
-- @return  返回序列化json字符串                            --
-- @example local json = to_json(t)                         --
--------------------------------------------------------------
function to_json(t)local i=1local o={}local no[i]="["i=i+1n=t.hwhile n~=nil doif n[2]~=nil theno[i]=to_str(n[2])i=i+1endn=n[1]if n~=nil theno[i]=","i=i+1endendo[i]="]"return table.concat(o)
endfunction split(str,delimiter)local dLen = string.len(delimiter)local newDeli = ''for i=1,dLen,1 donewDeli = newDeli .. "["..string.sub(delimiter,i,i).."]"endlocal locaStart,locaEnd = string.find(str,newDeli)local arr = {}local n = 1while locaStart ~= nildoif locaStart>0 thenarr[n] = string.sub(str,1,locaStart-1)n = n + 1endstr = string.sub(str,locaEnd+1,string.len(str))locaStart,locaEnd = string.find(str,newDeli)endif str ~= nil thenarr[n] = strendreturn arr
end------------------------------------
-- begin-添加用户自定义值或函数等 ---- end-添加用户自定义值或函数等   --
------------------------------------------------------------------------------------------------------------------------------
-- 设置定时下发设备的数据(可选)                                                       --
-- @param  dev    user_data   设备管理器                                                --
-- @return 无                                                                           --
-- @notice 此函数为回调函数,不可在脚本内调用                                           --
-- @readme dev提供一下几个函数:                                                        --
--         dev:add(interval,name,data)添加定时下发数据                                  --
--           @param   interval   number   数据下发的时间间隔(秒)                      --
--                    name       string   名称(须保证唯一性)                          --
--                    data       string   数据(二进制数据),使用lua转义字符串         --
--           @return  成功返回true,否则返回false                                       --
--           @notice  定时数据下发的平均频率不超过1,及1/interval_1+...+1/interval_n<=1 --
--           @example local ok = dev:add(10,"test","\1\1\0\150\0\37\253\29")            --
--         dev:timeout(sec)设置下发数据的设备响应超时时间(秒)                         --
--           @param   sec        int      响应超时时间(秒)                            --
--                                        如果值为0,表示不检测设备响应超时             --
--           @return  无                                                                --
--           @example dev:timeout(3)                                                    --
--         dev:response()设备响应成功                                                   --
--           @param   无                                                                --
--           @return  无                                                                --
--           @example dev:response()                                                    --
--         dev:send(data)下发数据到设备                                                 --
--           @param   data   string   数据(二进制数据),使用lua转义字符串             --
--           @return  无                                                                --
--           @example dev:send("\2\2\0\150\0\37\206\89")                                --
------------------------------------------------------------------------------------------
function device_timer_init(dev)-- 添加用户自定义代码 ---- 例如: --dev:timeout(3)dev:add(10,"dev1","\116\101\115\116")dev:add(10,"dev2","\116\101\115\116")
end-----------------------------------------------------------------------------------------------------------
-- 解析设备上传数据                                                                                      --
-- @param  dev    user_data   设备管理器                                                                 --
-- @return size表示已解析设备上传数据的字节数,json表示解析后的数据点集合,格式如下:                    --
--         [                                                                                             --
--           {                                                                                           --
--             "i" : "dsname1",          // 数据流或数据流模板名称1                                      --
--             "a" : 1234567890,         // 毫秒级时间戳,距离(00:00:00 UTC, January 1, 1970)的毫秒    --
--                                       // 如果值为0,表示使用当前时间                                  --
--             "v" : 123 | "123" | {...} // 布尔值、数值、字符串、json                                   --
--             "b" : "0A0B0C0D..."       // 二进制数据(16进制字符串),与v互斥,不同时存在              --
--             "d" : xxx | "xxx" | {...} // 用于描述b(可选);布尔值、数值、字符串、json                --
--             "c" : "authcode1"         // 用于标识数据点归属(设备AuthCode,可选)                        --
--                                       // 如果为“”或不存在,表示数据点归属建立TCP连接的设备            --
--           }                                                                                           --
--           ...                                                                                         --
--           {                                                                                           --
--             "i" : "dsnamen",          // 数据流或数据流模板名称1                                      --
--             "a" : 1234567890,         // 毫秒级时间戳,距离(00:00:00 UTC, January 1, 1970)的毫秒    --
--                                       // 如果值为0,表示使用当前时间                                  --
--             "v" : 123 | "123" | {...} // 布尔值、数值、字符串、json                                   --
--             "b" : "0A0B0C0D..."       // 二进制数据(16进制字符串),与v互斥,不同时存在              --
--             "d" : xxx | "xxx" | {...} // 用于描述b(可选);布尔值、数值、字符串、json                --
--             "c" : "authcoden"         // 用于标识数据点归属(设备AuthCode,可选)                        --
--                                       // 如果为“”或不存在,表示数据点归属建立TCP连接的设备            --
--           }                                                                                           --
--         ]                                                                                             --
-- @notice 此函数为回调函数,不可在脚本内调用                                                            --
-- @readme dev提供一下几个函数:                                                                         --
--         dev:add(interval,name,data)添加定时下发数据                                                   --
--           @param   interval number   数据下发的时间间隔(秒)                                         --
--                    name     string   名称(须保证唯一性)                                             --
--                    data     string   数据(二进制数据),使用lua转义字符串                            --
--           @return  成功返回true,否则返回false                                                        --
--           @notice  定时数据下发的平均频率不超过1,及1/interval_1+...+1/interval_n<=1                  --
--           @example local ok = dev:add(10,"test","\1\1\0\150\0\37\253\29")                             --
--         dev:timeout(sec)设置下发数据的设备响应超时时间(秒)                                          --
--           @param   sec      int      响应超时时间(秒)                                               --
--                                      如果值为0,表示不检测设备响应超时                                --
--           @return  无                                                                                 --
--           @example dev:timeout(3)                                                                     --
--         dev:response()设备响应成功                                                                    --
--           @param   无                                                                                 --
--           @return  无                                                                                 --
--           @example dev:response()                                                                     --
--         dev:send(data)下发数据到设备                                                                  --
--           @param   data   string   数据(二进制数据),使用lua转义字符串                              --
--           @return  无                                                                                 --
--           @example dev:send("\2\2\0\150\0\37\206\89")                                                 --
--         dev:size()获取设备数据大小(字节数)                                                          --
--           @param   无                                                                                 --
--           @return  返回设备数据大小(字节数)                                                         --
--           @example local sz = dev:size()                                                              --
--         dev:byte(pos)获取pos对应位置的设备数据(字节)                                                --
--           @param   pos   number   指定的获取位置,取值范围[1,dev:size()+1)                            --
--           @return  成功返回设备数据(int),否则返回nil                                               --
--           @example local data = dev:byte(1)                                                           --
--         dev:bytes(pos,count)获取从pos开始,count个设备数据                                            --
--           @param   pos   number   指定的获取起始位置,取值范围[1,dev:size()+1)                        --
--                    count number   指定的获取数据总数,取值范围[0,dev:size()+1-pos]                    --
--           @return  成功返回设备数据(string),否则返回nil                                            --
--           @example local datas = dev:bytes(1,dev:size())                                              --
-----------------------------------------------------------------------------------------------------------
function device_data_analyze(dev)local t={}local a=0-- 添加用户自定义代码 ---- 例如: --local s = dev:size()local arr_location = split(dev:bytes(1,s),"#");local string_str1 = string.format("%.0f", arr_location[2])add_val(t,"heardspeed",a, string_str1) local string_str2 = string.format("%.1f", arr_location[1])add_val(t,"tem",a,string_str2)local string_str = string.format("%f,%f", arr_location[4],arr_location[5])add_val(t,"dingwei",a, string_str)local string_str3 = string.format("%d", arr_location[3])add_val(t,"shuaidao",a, string_str3) local json_tw=to_json(t) dev:response()dev:send("received")-- return $1,$2 ---- 例如: --return s, json_tw
end

上文代码之中仅需要修改最后一段,“#”代表分割符,起到数据分割的作用。后文中,add_val(t,“xxxx”,a,string.str) ,t为表,不做修改,“xxx”为数据流(不修改,onenet会自行创建herdspeed……等数据流)a不做修改,string str代表字符串(即相关数据)。其他可以不做修改。

使用网络调试助手(自行百度搜索下载)对onenet发送数据,配置如下:

TCP Client, "183.230.40.40", 1811

设备上电,与OneNET接入服务(地址为:183.230.40.40)建立TCP连接,发送登录报文,格式如下:

*$PID#$AUTH_INFO#$PARSER_NAME*

示例:

*12346#sn823mdn#testlua*

其中,参数解释如下:

  • PID:产品ID,创建产品时OneNET生成的产品唯一性数字标识
  • AUTH_INFO:设备鉴权信息,在设备注册时,用户创建设备时指定的唯一字符串标识
  • PARSER_NAME:用户自定义解析脚本的名称,用户上传脚本时指定的唯一字符串标识

(以上登录报文每个人都不一样,因此不做详细赘述)

链接成功会接受相关文字(test)。

此时发送相关数据,如:36.4#100#0#111.143421#30.673064

五个数据上传之后,onenet数据流就会有相关数据出现。,

此TCP透传方式,广泛适用于各种网络模块,如esp8266,esp12f,esp32,sim系列均使用,主要是介绍了onenet方面的配置。这方面是比较复杂的(对于初学者),大家可以学习之时用此文来参考。

tcp透传 onenet开发文档:开发流程_开发者文档_OneNET (10086.cn)

基于arduinosim808onenet的老年人健康守护系统(二)相关推荐

  1. arduino loar_采用ESP8266和Arduino设计基于IoT的患者健康监测系统

    随着大量新的医疗保健技术的发展,物联网正在迅速改变医疗保健行业.在本篇文章中,我们使用ESP8266和Arduino设计了一款基于IoT的患者健康监测系统.该项目中使用的物联网平台是ThingSpea ...

  2. 基于ZigBee的桥梁健康监测系统

    0 引言 桥梁在几十年.甚至上百年的使用过程中,结构长期承受交通荷载的作用,严酷自然环境的侵蚀,自然灾害和人为因素等的祸合作用,不可避免地导致桥梁结构出现各种损伤现象,抗力衰减,使得结构承受力与安全性 ...

  3. Java+MySQL 基于ssm的老年人健康饮食管理系统#毕业设计

    文末获取源码 开发环境 项目编号:Java+MySQL ssm275老年人健康饮食管理系统#毕业设计 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:To ...

  4. 基于Flume的美团日志收集系统(二)改进和优化

    在<基于Flume的美团日志收集系统(一)架构和设计>中,我们详述了基于Flume的美团日志收集系统的架构设计,以及为什么做这样的设计.在本节中,我们将会讲述在实际部署和使用过程中遇到的问 ...

  5. 基于 Spring Security 搭建用户权限系统(二) - 自定义配置

    说明 本文的目的是如何基于 Spring Security 去扩展实现一个基本的用户权限模块, 内容会覆盖到 Spring Security 常用的配置. 文中涉及到的业务代码是不完善的, 甚至会存在 ...

  6. java老年人健康预警系统系统uniapp小程序

    考虑到实际生活中在 适老化老人健康预警微信小程序管理方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分. (a) 管理员:管理员使用本系统涉到的功能主要有:个人中心.老人管理 ...

  7. 基于Android studio个人健康养生系统java

    中医健康养生APP分为四大模块,其中个人中心又分为4大块,游客用户个人中心是空白的. 在养生知识推广普及模块界面,用户可以选择自己感兴趣的模块进行文章浏览,文章主要分为三大模块:行为养生类,膳食养生类 ...

  8. 基于OpenCV的人脸识别考勤系统(二)

    该部分承接(一),将会实现视频图像的处理以及人脸的识别 目录 四.图像处理 1. cvtColor 2. equalizeHist 五.脸部识别 1. 导入训练文件 2. 绘制人脸框 3. 截取人脸并 ...

  9. 毕业设计 基于stm32的人体健康监护系统 - 单片机 嵌入式 物联网

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 4.1 ATGM332D定位模块 4.2 MAX30102心率传感器 4.3 DHT11温湿度传感器 4.4 MQ-2烟雾传感器 ...

最新文章

  1. 盘点2021:数据中心行业迎来转折点
  2. 7月清北学堂培训 Day 5
  3. parasoft Jtest 使用教程:功能配置之查找错误
  4. 网络图片 base64 java_java图片转base64和真实的结果不一样
  5. [转]如果你出现这十种迹象,你就该跳槽了
  6. android viewdraghelper 点击移动,ViewDragHelper使用时遇到的问题
  7. Windows重新生成UEFI引导,解决Windows蓝屏\BCD 0xc0000098
  8. CVE-2018-18311 阿里云漏洞修复 RHSA-2019:0109-Important: perl secur
  9. lenovo服务器换系统重装系统_联想电脑重装系统详细步骤?
  10. Adjustment OfficeInput file
  11. 【论文写作】Word文档中的MathType公式大小不一导致版面很难看完美解决方法
  12. JB的产品之旅-产品经理是干嘛的?
  13. Android系统设置settings应用学习(二)--源代码解析
  14. Matlab模拟钢琴识别琴谱GUI
  15. 北京交通大学计算机保研~
  16. 【Paper】2017_Consensus of linear multi-agent systems with exogenous disturbance generated from hetero
  17. [刷题]leetcode\35_搜索插入位置
  18. WIFI之一:WIFI常识 基站定位原理
  19. 520送女友什么礼物最好、5个适合送给情侣的礼物
  20. hexo个人博客搭建

热门文章

  1. ISO/OSI 网络体系结构
  2. 2.2 知己知彼,百战不殆
  3. Android-网络请求封装类-okhttp
  4. 三位数码管实验报告-数字系统实验
  5. docker无法拉取harbor镜像
  6. 悬镜安全:用开源的方式做开源风险治理
  7. 不占内存的浏览器_iPhone 内存不够用?教你腾出 10GB 内存!
  8. 鸿安机械IPO过会:年营收2.9亿 王小伦家族控制87%股权
  9. fgo服务器维护补偿,fgo命运冠位指定活动维护公告 12月2日更新
  10. ARM aarch64汇编学习笔记(一):ARMv8架构