摘要:初学阿里云IoT Studio时,常遇到“数据格式验证出错”的错误,有很多同学不知道怎么处理,本文向大家介绍一下解决方法。

目录

1.问题描述

2.原因分析

3.解决方法


1.问题描述

我们学习阿里云物联网,一般都是从一个简单的智能灯开始做的。

智能灯涉及到硬件、网络、云平台,甚至是手机APP等多方面的知识。

任何一个环节出问题,都可能导致想实现的功能得不到实现,想看到的结果看不到。

不过别担心,我的文章为大家详细介绍了如何实现一个机遇阿里云物联网平台和arduino d1模块的智能灯。

详细链接是:

从arduino板开始做到阿里云app控制--WeMos D1或ESP8266连接阿里云文章合集及源代码

从arduino入门阿里云物联网平台非常适合,硬件成本低,编程简单,云平台的知识一点都不少学。许多同学已经成功实现了自己的智能灯。

近期给我留言的同学,可以分为2类:

第一类是想学习使用android studio来制作自己的APP,摆脱第三方平台的束缚,代价是需要更多的知识积累才行。

第二类是学习阿里云原生的IoT Studio,使用平台提供的无代码工具生成专业的物联网网络应用和移动应用,代价是需要自己的域名和公网IP。

其中,提出第二类问题的同学,又在入门IoT Studio的时候,遇到了一些基本的问题。这些问题只靠看阿里云官方文档是解决不了的。这些问题中,最多的就是“数据格式验证出错”问题。

我们一般是设计一个按钮(用来控制),一个指示灯(用来显示)。

可是当实际设计的时候,却发现,按钮数据源配置完成,验证数据格式的时候,提示错误。

错误提示如下:“数据格式验证出错”。设备模拟数据的数据格式不满足【组件】的数据格式要求,【组件】要求数据必须为【布尔】格式类型,请参考以下数据结构。

我们反复检查,无论是产品,还是设备,属性中的“主灯开关”的确是布尔型没有错误。

那么发生这个问题的原因是什么呢?

2.原因分析

原因是因为设备没有向云平台报送过属性。

仔细看一下设备数据源配置完之后的界面,就发现按钮上方显示一个红色的提示字符串

“该设备未上报过属性数据,你可以通过“在线模拟”模拟设备数据,并通过“推送”来上报”。

这是为什么呢?

是因为设备没有上报过属性!提示就是答案!

可是我们明明编写了智能灯的响应程序了啊,云平台下发的指令我们已经做出响应了啊,云平台让我们关闭就关闭,让我们打开就打开。

问题还真的在这个地方。

因为根据mqtt通信协议,IoT Studio的控件向外publish一个topic之后,订阅这个topic的物联网设备会收到属性改变的指令,然后做出硬件上的改变。

但这个通信过程还没有结束,因为IoT Studio的控件不知道硬件是否真的已经做出有效的反应了。因此硬件需要向云平台的topic也publish一个当前的状态,告诉平台属性变化成功。

当云平台订阅了这个topic之后,收到这个指令,就明白当前的状态是什么,然后就将按钮控件的状态“显示”为指定的状态。

没错,就是“显示”。也就是说,云平台控件同时兼顾着两个功能:publish和subscribe。

如果没有收到反馈,它就不知道怎么样显示自己的状态了,就会报错。

我们通过日志来观察。

如果没有返回值,那么通过IOT Studio 会导致关不掉,或者开不开。

日志如下图所示,只会显示服务调用的内容。

如果为代码添加返回值,也就是做出响应之后,返回当前的状态的话。

日志是这样子的,除了物模型服务调用,还有物模型和物模型消息两种日志。按钮也能够正常操作了。

知道了问题的症结,那么解决方法也就很容易理解了。

3.解决方法

大家做的硬件可能五花八门,但是问题解决方法大体上是一致的,

解决方法:就是做出硬件响应之后,要向云平台publish当前的状态。

下面以我的文章中提到的硬件和软件为例,具体可以参考文章:

从arduino板开始做到阿里云app控制--WeMos D1或ESP8266连接阿里云文章合集及源代码

硬件使用的是arduino d1模块

源代码用的是文章中的源代码。

如果我们要让设备向云平台publish属性改变,应该做出一定的修改。

void powerCallback(JsonVariant p)
{int PowerSwitch = p["LightSwitch"];if (PowerSwitch == 1){//看是否会响应云平台的内容Serial.println("Switch=1  ");digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage levelAliyunIoTSDK::send("LightSwitch", 1);}else{//是否会响应平台的内容Serial.println("Switch=0");digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGHAliyunIoTSDK::send("LightSwitch", 0);}
}

这样就实现了对硬件操作之后,再向云平台publish的操作。当云平台的topic做出改变之后,就可以显示正确的状态了。

效果如下图,首先在IoT Studio的编辑界面,按钮上方的红色提示文字消失了。其次是实际运行这个页面之后,能够正常控制LED灯的开关了。

阿里云IoT Studio遇到“数据格式验证出错”怎么解决?相关推荐

  1. 阿里云IOT入门教程(三)阿里云IOT Studio自建手机App控制Wemos D1 Mini( ESP8266 )板载灯亮灭

    阿里云IOT入门教程(一)阿里云IOT Studio自建手机App控制Wemos D1 Mini( ESP8266 )板载灯亮灭 概述 所需材料 Mqtt预备知识 hacklab端开发 * 硬件端上报 ...

  2. 物联网控制APP入门专题(二)---阿里云iot studio移动可视化功能基本操作

    微信小程序连接阿里云物联网平台云端API实现物联操控 03-25 其中包含cryptojs.uuid生成模块,还有用于微信小程序连接阿里云物联网平台云端API的专属sdk,已结实现效果demo,只需填 ...

  3. 更听话的温室大棚系统-阿里云ioT Studio实现动态业务逻辑

    需求: 用阿里云物联网平台开发的温室大棚物联网系统,正在建设过程中,目前的系统是后台设置好了温度.湿度,光照度的阀值,达到设置值就动作设备,考虑到交付后,这些值可能要变动,每次叫我去设置,也很麻烦,于 ...

  4. 基于阿里云IOT Studio和STM32的电机远程监测设计

    今天来总结一下用阿里云的IOT Studio做的一个电机远程监控的小系统吧! 说来话长,在去年九月份的时候,我踏入了研究生的行列.我的导师是搞电机方向的,但我本科是测控的,考虑我的基础,导师给我推荐了 ...

  5. 阿里云--IOT Studio初学

    1.初学基于阿里云IOT云平台应用开发 1.1 阿里云的-物联网应用开发-IOT Studio 此次使用阿里云的-物联网应用开发-IOT Studio;物联网应用开发(IoT Studio,阿里云:h ...

  6. 使用阿里云IoT Studio建立物模型可视化界面

    使用阿里云IoT Studio建立物模型可视化界面 上一篇文章介绍了如何使用ESP-01S上报数据到物模型:https://blog.csdn.net/weixin_46251230/article/ ...

  7. 阿里云IoT Studio升级版新增解决方案引擎,大幅提升方案交付效率

    简介:8月25日,阿里云发布IoT Studio升级版,新增了解决方案引擎,让设备方案商复用之前搭建的解决方案模板进行简单的定制化修改,即可交付.使整个物联网解决方案的交付过程由几个月,缩短到几小时, ...

  8. 阿里云IoT Studio升级版新增解决方案引擎 大幅提升方案交付效率

    简介: 8月25日,阿里云发布IoT Studio升级版,新增了解决方案引擎,让设备方案商复用之前搭建的解决方案模板进行简单的定制化修改,即可交付.使整个物联网解决方案的交付过程由几个月,缩短到几小时 ...

  9. 阿里云 IoT Studio 升级版新增解决方案引擎 大幅提升方案交付效率

    8月25日,阿里云发布IoT Studio升级版,新增了解决方案引擎,让设备方案商复用之前搭建的解决方案模板进行简单的定制化修改,即可交付.使整个物联网解决方案的交付过程由几个月,缩短到几小时,用户经 ...

最新文章

  1. python3 的乐趣进度条
  2. display:inline-block之用法
  3. Eclipse 中修改java编译版本
  4. 飞鸽传书谈哈希表之数学原理
  5. 构建之法第三章学习小记
  6. 【微收藏】FourShadows.js – 时间感知的算法驱动的图标阴影JS库
  7. volatile简记
  8. 《软件调试》第二版正式发售,看雪给你早鸟价
  9. 这可能是有史以来最详细的JNI入门教程
  10. 计算机 行列式,行列式计算器
  11. 苹果电脑在哪里改计算机id,苹果MAC电脑如何更改ID账号
  12. matlab FCM算法实现
  13. 会员直推奖php程序_直推奖+对碰奖+*奖+互助奖+见点奖
  14. Codeforces Round #507 (Div. 2, based on Olympiad of Metropolises) B. Shashlik Cooking
  15. 计算机如何认硬盘,电脑怎样识别大容量的硬盘?
  16. [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  17. 一米村长讲故事机器人_村长讲故事 | 牛牛特工队番外
  18. 华为荣耀7i刷linux,奇兔刷机独家支持华为荣耀7i一键刷机 全网首发刷机ROM包
  19. 使用Factory IO连接TIA Portal 自动化仿真
  20. 那些35岁的程序员哪里去了?

热门文章

  1. 【c++师傅领进门,修行靠个人】第七篇:C++模板
  2. 图像的边缘检测-三种方法
  3. 七夕送什么礼物好?小众又高级的产品礼物推荐
  4. 给大家分享一下,免费的云服务器
  5. 第五十章 SQL命令 HAVING(一)
  6. Java练习:求圆、正方形面积,显示学生考试的总分和平均分,之后显示大于考试平均分的成绩信息。
  7. Log4j中conversionPattern的含义
  8. mysql safe 配置 my.cnf_linux下mysql配置文件my.cnf最详细解释
  9. (轉貼) 問鼎北市/欣然接受敗選 宋楚瑜告別演說:正式退出政壇 (News)
  10. 业务重要?还是技术重要?