将你的物联网设备位置快速接入到地图上,只需要10分钟!
楼主作为一个物联网方面的萌新,喜欢玩玩阿里云物联网平台的各种现成功能,然后和自己的设备做下简单组合,往往就能实现一些之前比较麻烦的功能。最近看到阿里云物联网平台新上了一个数据分析菜单,对于动手党来说,先别管什么东西?玩玩先。
在产品和服务里,搜物联网,先进物联网平台控制台。
看到这个数据分析目录了么,就是这个新出现的目录。
简单点点几个功能目录,发现除了最后一个空间数据可视化以外,都是和数据相关的,看来大数据和物联网结合的潮流已经势不可挡了,不过像楼主这种普通码农,手上的设备有限,数据更是没有多少,这些功能看来短时间是用不上了,不过点到最后一个空间数据可视化,楼主的眼睛开始冒小星星了。
创建场景
先点下创建场景,看到可以选择产品或者设备组,但是在产品的下拉菜单里没有找到我的产品,问号脸???
看了上面有个文档链接,进去有个视频教程,15分钟的样子,讲的内容很全,从创建设备到配置地图都有。快快看一下,知道原因了,这个功能需要高级版设备(其实在页面上已经提示了,但是眼睛太大没有看到,o(╯□╰)o)。so,建一个呗,反正又不要钱。
创建产品和设备
高级版的设备,有不少现成的类型可以选,我在这里选了一个自定义的设备,然后用这个产品新建了几个设备三元组:
这个时候再回到二维可视化这里,就能看到刚才新建的产品了:
新建好的场景进来是这样的:
提示设备没有位置。
上传设备位置
下一步就是如何给楼主的设备设置位置了,看了下官方的设备定位文档链接,有两种方法,一种是在设备详情页面给设备给个位置的标签,就像下面图上的这样,用鼠标在地图上选一下设备的位置,这种方式估计是为了给没有gps模块、同时位置又不怎么变动的设备用的;
作为程序员的楼主,怎么能用这么偷懒的办法呢,还有一种办法是给设备添加一个代表位置的属性,然后把经纬度通过这个属性post到云端来。楼主手上没有gps模块的设备,不过可以用阿里云提供的mqtt客户端sdk程序模拟一个设备来做测试。SDK的版本有很多,C、java、python、nodejs等等,楼主这里为了方便,就用java版本的sdk在自己的本本上直接跑了。阿里云物联网java SDK的链接在这里,有一个demo功能,我直接下回来改改,
这里楼主因为建产品的时候选择的自定义的产品,根据官方文档,要给产品添加位置属性才可以,楼主在添加标准属性的时候,搜了下位置关键字,选了个和官方文档上一样的标识符是GeoLocation的属性(后面有属性的试用类别,楼主根本没有care,^_^):
下面就是跑代码把设备位置传上来了,很激动有木有!
把设备三元组填到demo的device_id.json文件里。如图:
demo程序的入口在HelloWorld.java,看了下里面的代码,把上报属性以外的方法都干掉,最后精简以后的demo长这样:
public class HelloWorld { private static final String TAG = "HelloWorld"; private String pk, dn; private ThingSample thingTestManager = null; public static void main(String[] args) { ALog.d(TAG, "Hello world!"); ALog.setLevel(ALog.LEVEL_DEBUG); HelloWorld manager = new HelloWorld(); ALog.d(TAG, "args=" + Arrays.toString(args)); System.out.println(System.getProperty("user.dir")); String diPath = System.getProperty("user.dir") + "/device_id.json"; String deviceInfo = FileUtils.readFile(diPath); if (deviceInfo == null) { ALog.e(TAG, "main - need device info path."); return; } Gson mGson = new Gson(); DeviceInfoData deviceInfoData = mGson.fromJson(deviceInfo, DeviceInfoData.class); if (deviceInfoData == null) { ALog.e(TAG, "main - deviceInfo format error."); return; } ALog.d(TAG, "测试一机一密和物模型"); manager.init(deviceInfoData); } public void init(final DeviceInfoData deviceInfoData) { this.pk = deviceInfoData.productKey; this.dn = deviceInfoData.deviceName; LinkKitInitParams params = new LinkKitInitParams(); /** * 设置 Mqtt 初始化参数 */ IoTMqttClientConfig config = new IoTMqttClientConfig(); config.productKey = deviceInfoData.productKey; config.deviceName = deviceInfoData.deviceName; config.deviceSecret = deviceInfoData.deviceSecret; config.channelHost = pk + ".iot-as-mqtt." + deviceInfoData.region + ".aliyuncs.com:1883"; /** * 是否接受离线消息 * 对应 mqtt 的 cleanSession 字段 */ config.receiveOfflineMsg = false; params.mqttClientConfig = config; /** * 设置初始化三元组信息,用户传入 */ DeviceInfo deviceInfo = new DeviceInfo(); deviceInfo.productKey = pk; deviceInfo.deviceName = dn; deviceInfo.deviceSecret = deviceInfoData.deviceSecret; params.deviceInfo = deviceInfo; /** * 设置设备当前的初始状态值,属性需要和云端创建的物模型属性一致 * 如果这里什么属性都不填,物模型就没有当前设备相关属性的初始值。 * 用户调用物模型上报接口之后,物模型会有相关数据缓存。 */ Map<String, ValueWrapper> propertyValues = new HashMap<String, ValueWrapper>(); // 示例 // propertyValues.put("LightSwitch", new ValueWrapper.BooleanValueWrapper(0)); params.propertyValues = propertyValues; thingTestManager = new ThingSample(pk, dn); LinkKit.getInstance().init(params, new ILinkKitConnectListener() { public void onError(AError aError) { ALog.e(TAG, "Init Error error=" + aError); } public void onInitDone(InitResult initResult) { ALog.i(TAG, "onInitDone result=" + initResult); thingTestManager.readData(System.getProperty("user.dir") + "/test_case.json"); thingTestManager.report(); } }); } }
对于设备要上报的位置属性设置,要填在test_case.json里。由于GeoLocation属性定义是struct结构体,所以value要填结构体子属性的json串,子属性的名字点击下面框出来的红框里的编辑查看:
填好以后的test_case.json长这个样子:
这里碰到一个坑,楼主只填写了struct里的经度和纬度两个属性,结果云端返回"6312:tsl parse: struct param size error -> GeoLocation",看来struct里的全部属性都要填。CoordinateSystem这个属性查了下,是google用标准国外标准和国标的区别,两个坐标系之间会有少许偏移,这里只是测试,所以先填1。这里给大家推荐高德的坐标拾取器,很好用的:link
最后就是跑下HelloWorld的main方法了,见证奇迹的时候到了!!!
看到云端返回:
{"code":200,"data":{},"id":"526900545","message":"success","method":"thing.event.property.post","version":"1.0"}
说明上传成功,哈哈,开心。
这个时候再看看我的场景:
**大功告成,总结一下,总共三个步骤,
- 1、创建带位置属性的高级版产品和设备;
- 2、用产品来创建场景;
- 3、上传设备位置。
其他的工作这个云产品都帮你做了,如果第三步楼主不是用代码,而是在控制台上直接设置,整个过程用不了10分钟,是不是挺简单?简单在页面点点,还发现了其他的功能,这个留着楼主下期分享。**
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
锌财经3月科技主题沙龙丨袋鼠云-云掣CEO徐进挺(丁原)受邀探讨“未来智能时代下的行业生存机会”
3月30日下午,锌财经在杭州·梦想E站创客之家举行”未来智能时代下的行业生存机会“的主题沙龙。 图为袋鼠云-云掣科技CEO丁原分享 智能化是科技领域的一个重要研究方向,未来更多的人工智能产品(智能体)将会走向各行各业。未来智能体将会逐步落地应用,从另一个角度来说传统行业将会在智能时代迎来新的发展和挑战。 本次沙龙,锌财经邀请了钉钉副总裁张斯成、中国移动杭州研发中心市场拓展部副总经理浦贵阳、小亚通创始人兼CEO陈一锴、葫芦回收创始人王旭东,云掣科技CEO徐进挺(花名:丁原)等行业资深人士及企业代表,与锌财经创始人潘越飞一起从物联网、企业服务、智能设备、电商服务等方面探讨了智能时代下企业的生存机会。 01 @丁原分享 探讨智能时代下的企业技术服务发展机会 在大环境下,作为阿里云生态领先的企业云MSP服务商,云掣科技CEO丁原与大家共同探讨未来智能时代,企业技术服务的发展业务机会在哪里? 图为云掣丁总在沙龙中正在进行主题分享 今天,很多创业公司包括传统企业都在云上,目前已有100万家用户在使用阿里云,未来99%的企业都会把自己的IT系统放在云上。 企业再做IaaS已经空间不大了,我们看到现在...
- 下一篇
物联网数据可视化很难???你只需要它~~~
楼主是个喜欢探索的好猿,自从上次玩了下阿里云物联网数据分析的二维可视化以后,发现还有很多新玩法可以解锁(参见楼主的上一篇博文将你的物联网设备位置快速接入到地图上,只需要10分钟!)。说到这里,楼主的眼睛又开始冒星星了。 楼主的吐槽 楼主在的公司总是会接很多可视化大屏项目,什么智慧城市,智慧物流,智慧园区bulabulabula……,技术含量不说多高,但是看起来确实很抓人眼球。是向领导汇报,咳咳,不对,是提升用户体验的不二利器。 做过可视化大屏的都知道,可视化大屏有很多现成的可视化控件可以用,比如echarts,d3js之类。这些控件都已经很成熟,只要用熟练了,效果不会太差,而真正比较让人头疼的地方,在于大屏中用到的三方地图之类的组件、监控、从端上到大屏的数据打通之类的东西。 说到这里,有人会发现,之前楼主玩的二维可视化好像没有数据大屏能力,它只是解决了地图展示,数据打通的工作,可视化大屏组件从哪里来呢?别忘了,阿里云上还有DataV这个专门为大屏打造的产品。下面跟着楼主一起来快速打造一个从终端设备到可视化大屏,一体化打通的智能物联网可视化系统吧。 二维可视化分享功能 之前楼主在玩物联网...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS关闭SELinux安全模块
- Red5直播服务器,属于Java语言的直播服务器