将你的物联网设备位置快速接入到地图上,只需要10分钟!

简介: 楼主作为一个物联网方面的萌新,喜欢玩玩阿里云物联网平台的各种现成功能,然后和自己的设备做下简单组合,往往就能实现一些之前比较麻烦的功能。最近看到阿里云物联网平台新上了一个数据分析菜单,对于动手党来说,先别管什么东西?玩玩先。

楼主作为一个物联网方面的萌新,喜欢玩玩阿里云物联网平台的各种现成功能,然后和自己的设备做下简单组合,往往就能实现一些之前比较麻烦的功能。最近看到阿里云物联网平台新上了一个数据分析菜单,对于动手党来说,先别管什么东西?玩玩先。


在产品和服务里,搜物联网,先进物联网平台控制台。
image

看到这个数据分析目录了么,就是这个新出现的目录。

image

简单点点几个功能目录,发现除了最后一个空间数据可视化以外,都是和数据相关的,看来大数据和物联网结合的潮流已经势不可挡了,不过像楼主这种普通码农,手上的设备有限,数据更是没有多少,这些功能看来短时间是用不上了,不过点到最后一个空间数据可视化,楼主的眼睛开始冒小星星了。

image


创建场景

先点下创建场景,看到可以选择产品或者设备组,但是在产品的下拉菜单里没有找到我的产品,问号脸???
image

看了上面有个文档链接,进去有个视频教程,15分钟的样子,讲的内容很全,从创建设备到配置地图都有。快快看一下,知道原因了,这个功能需要高级版设备(其实在页面上已经提示了,但是眼睛太大没有看到,o(╯□╰)o)。so,建一个呗,反正又不要钱。


创建产品和设备

image

高级版的设备,有不少现成的类型可以选,我在这里选了一个自定义的设备,然后用这个产品新建了几个设备三元组:

image

这个时候再回到二维可视化这里,就能看到刚才新建的产品了:

image
新建好的场景进来是这样的:
image
提示设备没有位置。


上传设备位置

下一步就是如何给楼主的设备设置位置了,看了下官方的设备定位文档链接,有两种方法,一种是在设备详情页面给设备给个位置的标签,就像下面图上的这样,用鼠标在地图上选一下设备的位置,这种方式估计是为了给没有gps模块、同时位置又不怎么变动的设备用的;

image
image
image

作为程序员的楼主,怎么能用这么偷懒的办法呢,还有一种办法是给设备添加一个代表位置的属性,然后把经纬度通过这个属性post到云端来。楼主手上没有gps模块的设备,不过可以用阿里云提供的mqtt客户端sdk程序模拟一个设备来做测试。SDK的版本有很多,C、java、python、nodejs等等,楼主这里为了方便,就用java版本的sdk在自己的本本上直接跑了。阿里云物联网java SDK的链接在这里,有一个demo功能,我直接下回来改改,image

这里楼主因为建产品的时候选择的自定义的产品,根据官方文档,要给产品添加位置属性才可以,楼主在添加标准属性的时候,搜了下位置关键字,选了个和官方文档上一样的标识符是GeoLocation的属性(后面有属性的试用类别,楼主根本没有care,^_^):

image

下面就是跑代码把设备位置传上来了,很激动有木有!

把设备三元组填到demo的device_id.json文件里。如图:
image
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串,子属性的名字点击下面框出来的红框里的编辑查看:
image
填好以后的test_case.json长这个样子:
image
这里碰到一个坑,楼主只填写了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"}

说明上传成功,哈哈,开心。
这个时候再看看我的场景:
image

**大功告成,总结一下,总共三个步骤,

  • 1、创建带位置属性的高级版产品和设备;
  • 2、用产品来创建场景;
  • 3、上传设备位置。

其他的工作这个云产品都帮你做了,如果第三步楼主不是用代码,而是在控制台上直接设置,整个过程用不了10分钟,是不是挺简单?简单在页面点点,还发现了其他的功能,这个留着楼主下期分享。**

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
3天前
|
传感器 监控 物联网
物联网卡在不同应用设备中的基本操作
物联网卡(IoT SIM卡)在物联网(IoT)设备中扮演着至关重要的角色,它们为设备提供网络连接能力,使得设备能够远程交换数据。物联网卡的应用设备广泛,涵盖了从智能家居、智能城市、工业自动化到远程监控等多个领域。以下是物联网卡在不同应用设备中的基本操作流程概述:
|
3天前
|
监控 安全 物联网
智能家居安全:物联网设备的风险与防护
在智能家居的便捷背后,潜藏着不容忽视的安全风险。本文旨在揭示物联网设备可能遭遇的网络攻击类型,并探讨如何通过合理的预防措施来加固我们的智能家园。从技术角度出发,我们将深入分析黑客入侵的途径,并提出有效的防御策略,以期为打造一个更安全的智能家居环境提供指导。
11 1
|
15天前
|
机器学习/深度学习 安全 物联网
智能家居安全:物联网设备的双刃剑
【8月更文挑战第28天】 随着物联网技术的飞速发展,智能家居已成为现代生活的一部分。然而,随之而来的安全问题也日益凸显。本文将深入探讨智能家居中的安全挑战,分析物联网设备如何成为一把双刃剑,既带来便利也可能引发风险。通过案例分析和专家建议,为读者提供实用的防护措施和未来趋势的展望。
|
29天前
|
安全 物联网 网络安全
智能家居安全:物联网设备的风险与防护
【8月更文挑战第14天】 随着物联网技术的飞速发展,智能家居已经走进千家万户。然而,智能设备的便利性背后隐藏着潜在的安全风险。本文将探讨智能家居面临的主要安全挑战,并提供实用的防护措施,帮助用户构建一个更安全的智能生活环境。
|
1月前
|
安全 物联网 网络安全
智能家居安全:物联网设备的风险与防护措施
随着物联网技术的飞速发展,智能家居已成为现代生活的一部分。然而,智能设备的便利性背后隐藏着安全隐患。本文将深入探讨物联网设备面临的主要风险,并提供有效的防护措施,帮助用户构建一个更安全的智能家居环境。
56 7
|
29天前
|
监控 安全 物联网
智能家居安全:物联网设备中的漏洞与防护
随着物联网的飞速发展,智能家居设备已步入千家万户。然而,这些便捷的科技产品也带来了安全隐患。本文旨在揭示智能家居设备中存在的安全漏洞,并提供针对性的防护措施。通过深入浅出的分析,我们希望能增强用户的安全意识,并采取有效行动保护自己的数字家园。
|
29天前
|
监控 物联网 关系型数据库
使用PostgreSQL触发器解决物联网设备状态同步问题
在物联网监控系统中,确保设备状态(如在线与离线)的实时性和准确性至关重要。当设备状态因外部因素改变时,需迅速反映到系统内部。因设备状态数据分布在不同表中,直接通过应用同步可能引入复杂性和错误。采用PostgreSQL触发器自动同步状态变化是一种高效方法。首先定义触发函数,在设备状态改变时更新管理模块表;然后创建触发器,在状态字段更新后执行此函数。此外,还需进行充分测试、监控性能并实施优化,以及在触发函数中加入错误处理和日志记录功能。这种方法不仅提高自动化程度,增强数据一致性与实时性,还需注意其对性能的影响并采取优化措施。
|
8天前
|
机器学习/深度学习 人工智能 算法
物联网(IoT)就像是一个大型派对,无数的设备都在欢快地交流着信息
【9月更文挑战第4天】在这个万物互联的时代,物联网(IoT)犹如一场盛大的派对,各类设备欢聚一堂。然而,如何让这些设备互相理解并协同工作呢?这就需要机器学习与人工智能的助力。例如,智能空调通过学习你的使用习惯来调节温度,使你更加舒适;智能安防系统则能识别异常行为并及时报警,保障家庭安全。此外,智能农业、交通等领域也因机器学习和人工智能的应用变得更加高效。下面通过一个简单的温度预测代码示例,展示机器学习在物联网中的实际应用,让我们一起感受其强大潜力。
14 0
|
19天前
|
物联网 C语言
C语言与物联网:设备间的通信与控制
C语言与物联网:设备间的通信与控制
32 0
|
22天前
|
监控 安全 物联网
智能家居安全:物联网设备的风险与防护
随着物联网技术的飞速发展,智能家居设备已步入千家万户。然而,随之而来的安全问题也日益凸显。本文将深入探讨智能家居面临的安全挑战,并提供实用的防护措施,旨在帮助用户构建一个更加安全的智能生活环境。

相关产品

  • 物联网平台