一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于MVVM框架和MQTT协议的智能家居数据同步方法及装置与流程

2021-09-22 22:14:00 来源:中国专利 TAG:框架 智能家居 装置 协议 数据同步

基于mvvm框架和mqtt协议的智能家居数据同步方法及装置
技术领域
1.本说明书一个或多个实施例涉及物联网技术领域,尤其涉及一种基于mvvm框架和mqtt协议的智能家居数据同步方法及装置。


背景技术:

2.在智能家居系统中,家电控制系统、灯光控制系统、家居安防系统、影音娱乐控制系统等都使用了mqtt(全称为message queuing telemetry transport,中文为消息队列遥测传输)协议进行数据传输和通信。在移动手机应用层面,通常使用mvvm(全称为model

view

viewmodel,即数据模型

视图

视图模型)的架构开发应用软件控制智能家居系统。其中,mvvm是一种软件架构模式,它通过其中的viewmodel将视图数据和ui(全称为user interface,即用户交互接口)进行绑定,实现了视图数据对ui的驱动。其中,mqtt是一种基于发布/订阅(即publish/subscribe)模式的"轻量级"通讯协议,在一些使用mvvm作为应用开发架构的应用软件中,会出现用户在频繁操作手机端的ui界面造成ui界面发生数据跳变的现象。
3.举例来说,用户使用手机app将冰箱的舱室温度设置为

5摄氏度,手机ui界面展示温度为

5摄氏度,手机端将相关的第一控制指令通过mqtt协议发送到智能家居设备;此时用户继续设置冰箱温度为0摄氏度,手机ui界面也展示温度为0摄氏度,并再次发送第二控制指令到智能家居设备,此时冰箱设备端对第一控制指令响应并返回数据到手机端,告知当前冰箱

5摄氏度设置成功,该

5摄氏度的数据通过viewmodel层会立即修改手机ui,手机端界面将从当前显示的0度变为

5度。再过一个时间间隔,冰箱设备端对第二控制指令响应并返回数据到手机端,告知当前冰箱0摄氏度设置成功,导致手机端ui显示从

5度跳变0度,可见由于设备端的延迟反馈造成数据的跳变,大大影响用户的使用体验。


技术实现要素:

4.本说明书一个或多个实施例描述了一种基于mvvm框架和mqtt协议的智能家居数据同步方法及装置,可以减少交互界面中显示内容跳变的现象。
5.本技术提供的基于mvvm框架和mqtt协议的智能家居数据同步方法,所述方法由基于所述mvvm框架开发的智能家居客户端执行,且所述智能家居客户端与智能家居设备之间通过mqtt协议进行数据传输,方法包括:
6.在智能家居客户端的交互界面打开时,启动轮询器,实时检测用户是否在所述交互界面上进行操作,并当检测到用户在所述交互界面上进行操作时将预设中断标识设置为第一值,所述预设中断标识的初始值为第二值;其中,所述轮询器用于每隔预设时长检测一次所述预设中断标识;
7.响应于用户在所述交互界面上的每一次操作,根据本次操作后所述交互页面的状态对预设创建的交互对象进行数据更新,并向所述智能家居设备发送对应的控制指令;所述交互对象用于表征所述交互页面的当前状态;
8.在接收到所述智能家居设备在执行所述控制指令后返回的反馈信息后,根据所述反馈信息对预先创建的设备对象进行数据更新;所述设备对象用于表征所述智能家居设备的当前状态;
9.在每一次轮询中,若所述轮询器检测到所述预设中断标识为所述第一值,则将所述预设中断标识设置为第二值,并等待下一次轮询;若所述轮询器检测到所述预设中断标识为所述第二值,则将所述设备对象赋值给所述交互对象,根据更新后的交互对象对所述交互界面进行更新,并等待下一次轮询。
10.本技术提供的基于mvvm框架和mqtt协议的智能家居数据同步装置,所述装置位于基于所述mvvm框架开发的智能家居客户端上,且所述智能家居客户端与智能家居设备之间通过mqtt协议进行数据传输,装置包括:
11.轮询检测模块,用于在智能家居客户端的交互界面打开时,启动轮询器,实时检测用户是否在所述交互界面上进行操作,并当检测到用户在所述交互界面上进行操作时将预设中断标识设置为第一值,所述预设中断标识的初始值为第二值;其中,所述轮询器用于每隔预设时长检测一次所述预设中断标识;
12.第一更新模块,用于响应于用户在所述交互界面上的每一次操作,根据本次操作后所述交互页面的状态对预设创建的交互对象进行数据更新,并向所述智能家居设备发送对应的控制指令;所述交互对象用于表征所述交互页面的当前状态;
13.第二更新模块,用于在接收到所述智能家居设备在执行所述控制指令后返回的反馈信息后,根据所述反馈信息对预先创建的设备对象进行数据更新;所述设备对象用于表征所述智能家居设备的当前状态;
14.第三更新模块,用于在每一次轮询中,若所述轮询器检测到所述预设中断标识为所述第一值,则将所述预设中断标识设置为第二值,并等待下一次轮询;若所述轮询器检测到所述预设中断标识为所述第二值,则将所述设备对象赋值给所述交互对象,根据更新后的交互对象对所述交互界面进行更新,并等待下一次轮询。
15.本发明提供的基于mvvm框架和mqtt协议的智能家居数据同步方法及装置,将设备状态和交互界面的状态分别存储,并且设置了一个预设中断标识来表征用户是否正在交互界面上操作,并设置了一个轮询器,轮询器每隔预设时长进行一次预设中断标识的检测。当预设中断标识为第一值时说明用户在交互界面上正在操作,此时只是将预设中断标识修改为第二值,等待下一次轮询。而只有在预设中断标识为第二值时才会根据设备对象对交互对象进行更新,进而对交互界面进行更新。可见并不是在一接收到智能家居设备返回的设备状态后就对交互界面进行更新,而是在用户没有在交互界面上操作后,才对交互界面进行更新。而且并非是在用户一不在交互界面上进行操作后就对交互界面进行更新,而是到达轮询器的检测时间后才对交互界面进行更新。也就是说,因此采用轮询器对预设中断标识进行检测的方式,即便用户没有在交互界面上进行操作,只有达到轮询器的检测时间才会有可能对用户界面进行更新。通过这种方式尽可能延后对交互界面的更新,尽可能根据用户对交互界面的最后一次操作所对应的设备状态对交互界面进行更新,从而尽可能的减少因为智能家居设备延迟返回设备状态而造成的界面数据发生跳变的问题,提高用户的使用体验。
附图说明
16.为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
17.图1是本说明书一个实施例中基于mvvm框架和mqtt协议的智能家居数据同步方法的流程示意图;
18.图2是本说明书一个实施例中基于mvvm框架和mqtt协议的智能家居数据同步装置的结构示意图。
具体实施方式
19.下面结合附图,对本说明书提供的方案进行描述。
20.本技术实施例提供一种基于mvvm框架和mqtt协议的智能家居数据同步方法,所述方法由基于所述mvvm框架开发的智能家居客户端执行,且所述智能家居客户端与智能家居设备之间通过mqtt协议进行数据传输。
21.如图1所示,所述方法包括:
22.s110、在智能家居客户端的交互界面打开时,启动轮询器,实时检测用户是否在所述交互界面上进行操作,并当检测到用户在所述交互界面上进行操作时将预设中断标识设置为第一值,所述预设中断标识的初始值为第二值;其中,所述轮询器用于每隔预设时长检测一次所述预设中断标识;
23.也就是说,在交互界面打开时,启动轮询器,同时开始实时检测用户是否在交互界面上进行操作,并根据检测结果对预设中断标识进行设置。
24.其中,中断标识的初始值为第二值,当检测到用户在交互界面上进行操作时就会将中断标识更新为第一值,当用户没有在交互界面上进行操作时中断标识保持不变。可见,预设中断标识在第一值和第二值之间变换,因此预设中断标识可以但不限于采用布尔类型。例如,第一值为真,第二值为假。
25.其中,当智能家居客户端的交互界面启动时,就会启动轮询器,轮询器的作用是按照预设时长检测预设中断标识。例如,预设时长为4s,每隔4s轮询器就执行一次检测,具体检测预设中断标识目前是第一值还是第二值。
26.s120、响应于用户在所述交互界面上的每一次操作,根据本次操作后所述交互页面的状态对预设创建的交互对象进行数据更新,并向所述智能家居设备发送对应的控制指令;所述交互对象用于表征所述交互页面的当前状态;
27.这里设置了一个交互对象,用来标识所述交互页面的当前状态。用户每在交互界面上操作一次,交互界面的显示内容被修改一次,对交互对象就需要更新一次,例如,交互界面上开始显示冰箱温度为0摄氏度,用户在交互界面上更改冰箱温度为

1摄氏度,此时交互对象就会更新为冰箱温度为

1摄氏度;用户接着在交互界面上更改冰箱温度为

2摄氏度,此时交互对象就会更新为冰箱温度为

2摄氏度;接着用户又将冰箱温度更改为

3摄氏度,此时交互对象就会更新为冰箱温度为

3摄氏度,交互对象随着用户在交互界面上的操作而更新。
28.当然,用户每在交互界面上进行一次操作,客户端就会发送一次控制指令,在上例中,用户在交互界面上更改冰箱温度为

1摄氏度,此时客户端就会向冰箱发送设置为

1摄氏度的控制指令;用户接着在交互界面上更改冰箱温度为

2摄氏度,此时客户端就会像冰箱发送设置为

2摄氏度的控制指令;接着用户又将冰箱温度更改为

3摄氏度,此时客户端就会向冰箱发送设置为

3摄氏度的控制指令。
29.可理解的是,当用户在交互界面上操作时,客户端就会把中断标识设置为第一值。
30.s130、在接收到所述智能家居设备在执行所述控制指令后返回的反馈信息后,根据所述反馈信息对预先创建的设备对象进行数据更新;所述设备对象用于表征所述智能家居设备的当前状态;
31.可理解的是,智能家居设备每收到一条控制指令,都会根据控制指令进行相应的操作,例如接收到一个将冰箱温度更改为

3摄氏度的控制指令,则智能冰箱就会对温度进行调节,并在调节成功后会向客户端返回将冰箱温度成功更改为

3摄氏度的反馈信息,在反馈信息中体现了此时的冰箱状态:冰箱温度为

3摄氏度。在接收到反馈信息后,对设备对象进行更新。
32.可理解的是,智能家居设备每收到一条控制指令,就会执行该控制指令,并在执行控制指令后向客户端返回反馈信息,客户端每次收到反馈信息,都会对设备对象进行更新,以使设备对象表征智能家居设备的当前状态。
33.s140、在每一次轮询中,若所述轮询器检测到所述预设中断标识为所述第一值,则将所述预设中断标识设置为第二值,并等待下一次轮询;若所述轮询器检测到所述预设中断标识为所述第二值,则将所述设备对象赋值给所述交互对象,根据更新后的交互对象对所述交互界面进行更新,并等待下一次轮询。
34.可理解的是,在一次轮询中,轮询器检测到预设中断标识有两种情况:一种是预设中断标识为第一值,一种是预设中断标识为第二值。
35.当预设中断标识为第一值时表明用户还在交互界面上操作,此时不根据设备的状态对交互界面进行更新。而且,将预设中断标识更新为第二值。由于本技术中客户端会实时检测用户是否在交互界面上操作,当检测到用户还在交互界面上操作时,客户端会将预设中断标识设置为第一值,而如果没有检测到用户在交互界面上操作时,客户端就不会对预设中断标识进行更新,即预设中断标识就会保持第二值不变。这样此次轮询结束,等待下一次轮询,即等待预设时长检测预设中断标识是第一值还是第二值。
36.当用户频繁操作时,客户端会随着用户的操作对交互对象进行更新,发送控制指令给智能家居设备,并且此时不会执行设备对象与交互对象之间的数据同步。当客户端接收到设备状态后,等待达到轮询器的检测时间后,检测预设中断标识是第一值还是第二值,如果是第二值,就将设备对象同步到交互对象,进而对交互界面进行更新。
37.在具体实施时,若所述轮询器检测到所述预设中断标识为所述第二值,在将所述设备对象赋值给所述交互对象之前,所述方法还可以包括:判断所述设备对象和所述交互对象是否一致;若不一致,则执行将所述设备对象赋值给所述交互对象的步骤。
38.也就是说,如果设备对象和交互对象是一致的,就没有必要对交互对象进行更新,而在设备对象和交互对象不一致时,才对根据设备对象对交互对象进行更新,进而对交互界面进行更新。
39.可理解的是,由于将交互界面的状态数据和设备状态分开存储,而并非采用一份数据,从而避免了客户端一接收到设备状态就直接对交互界面进行修改。
40.当预设中断标识为第二值,则表明用户当前没有在交互界面上进行操作,此时可以根据设备的状态对交互界面进行更新。具体更新过程为:将设备对象赋值给交互对象,也就是说根据设备对象对交互对象进行更新,使交互对象与设备对象一致。然后触发交互界面的更新,即根据更新后的交互对象对所述交互界面进行更新。可见这里并不是在一接收到智能家居设备返回的设备状态后就对交互界面进行更新,而是在用户没有在交互界面上操作后,才对交互界面进行更新。而且并非是在用户一不在交互界面上进行操作后就对交互界面进行更新,而是到达轮询器的检测时间后才对交互界面进行更新。也就是说,因此采用轮询器对预设中断标识进行检测的方式,即便用户没有在交互界面上进行操作,只有达到轮询器的检测时间才会有可能对用户界面进行更新。通过这种方式尽可能延后对交互界面的更新,尽可能根据用户对交互界面的最后一次操作所对应的设备状态对交互界面进行更新,从而尽可能的减少因为智能家居设备延迟返回设备状态而造成的界面数据发生跳变的问题。
41.在本发明中,客户端为基于mvvm架构开发,且客户端和智能家居设备之间通过mqtt协议进行通信。本发明主要是针对在通信过程中,交互界面上显示的内容和设备返回的设备状态不一致而产生的数据同步问题的一种解决方案。在本发明中,将存储设备状态的设备对象和存储交互界面状态的交互对象分离,并通过延迟一端时间再进行同步的方式,解决客户端的交互界面上的数据跳变问题,提高用户的使用体验。
42.在具体实施时,客户端和智能家居设备有可能会因为数据量较大而出现解析错误的问题,为了尽量避免解析错误,客户端可以采用如下步骤对接收到的数据进行处理:
43.s10、对接收到所述智能家居设备发送来的数据子包时,将在所述数据子包放入缓存队列中;其中,所述智能家居设备将反馈信息、反馈信息的总长度和对应的数据类型生成一个数据长包,所述数据长包中包含长度字段、类型字段和数据字段,所述长度字段用于存储所述反馈信息的总长度,所述类型字段用于存储所述数据类型,所述数据字段用于存储所述反馈信息;根据预设长度将所述数据长包划分为多个数据子包,在每一个数据子包中添加设备标识字段和指令标识字段,并逐个发送给智能家居客户端;所述指令标识字段用于存储对应的控制指令对应的指令标识;
44.这里,对每一个数据子包中添加设备标识字段,用来标识数据子包来源于哪一个设备,因为在智能家居环境中存在多个智能家居设备,例如,冰箱、电视、扫地机器人等。为了区分不同的家居智能设置,为每一个智能家居设备设置了一个对应的设备标识。这样当客户端接收到一个数据子包时就知道数据子包来自于哪一个智能家居设备返回的数据。
45.这里,还在每一个数据子包中添加了指令标识字段,用来标识这个数据子包是针对哪一个控制指令的反馈,因为用户有可能在交互界面上进行频繁操作,多次操作会产生多个控制指令,为了对多个控制指令进行区分,这里在每一个数据子包中设置一个指令标识字段。
46.通过指令标识字段和设备标识字段可以对数据子包的来源和针对哪一个控制指令进行区分,不会造成混淆。
47.其中,长度字段用来标识反馈信息的总长度,占用一个字节即可。类型字段用来标
识反馈信息的类型,信息的类型有多种,例如,文字、图片、视频等,但是在本技术中反馈信息为文字,如果接收到的是其它类型,则说明反馈信息是错误的。类型字段占用一个字节即可。数据字段用于存储反馈信息,例如,将冰箱成功设置为

5摄氏度的信息。数据字段可能需要占用多个字节。有些反馈信息的信息量比较大,占用的字节就比较多,这样一个数据子包就放不下,因此需要多个数据子包存储。例如,分为两个数据子包,一个数据子包中可能包括长度字段、类型字段和数据字段的一部分,另一个数据子包中包括另一个数字字段的其余部分。再例如,分为三个数据子包括:第一个数据子包中包括长度字段、数据字段的一部分;第二个数据子包中包括数据字段中的剩余部分;第三个数据子包中包括类型字段。所有数据子包形成上述数据长包。
48.s20、在所述缓存队列中取出一个数据子包,判断所述数据子包对应的所述设备标识字段中的设备标识是否为预先构建的配置集中的设备标识,若是,则判断所述指令标识字段中的指令标识是否为客户端所发送的控制指令对应的标识;若是,则执行s30;
49.在客户端维护了一个配置集,在配置集中设置了多个设备标识,例如,张某某家的冰箱标识、扫地机器人标识、电视标识、音响标识等多个智能家居设备的标识。只有数据子包中的设备标识字段中的设备标识属于配置集中的设备标识,才会进行后续判断步骤。在后续判断步骤中,判断指令标识字段中的指令标识是否为客户端发送的控制指令对应的标识,如果是则进入后续步骤,否则退出数据的解析过程。
50.s30、对所述数据子包进行解析得到所述数据子包中包含的各个字段中的内容;这里通过对数据子包进行解析便可以得到该数据子包中各个字段中的内容,从而执行后续的步骤。
51.s40、根据当前已经解析的相同设备标识和指令标识的数据子包,确定是否已经解析出数据类型字段;若已经解析出所述数据类型字段,则判断所述数据类型字段中的数据类型是否预设数据类型;若是,则根据当前已经解析的相同设备标识和指令标识的数据子包,确定是否已经解析出长度字段;若已经解析出所述长度字段,则判断在相同设备标识的数据子包中解析出的数据字段中的数据流的长度之和是否达到所述长度字段中反馈信息的总长度;
52.这里,判断是否解析出类型字段,并判断类型字段中的数据类型是否为预设数据类型,预设数据类型可以为文字类型。如果根据当前已经解析的相同设备标识和指令标识的数据子包,确定未解析出数据类型字段,则在所述缓存队列中取出下一个相同设备标识和指令标识的数据子包,并返回s30。
53.当然,如果所述数据子包的所述数据类型字段中的数据类型不是预设数据类型,则执行结束当前设备标识和指令标识的数据子包的解析。
54.在该步骤中还判断是否解析出长度字段,并判断目前已经解析出的各个数据子包中数据字段的总长度是否达到长度字段中的总长度,如果已经达到,说明针对这个控制指令、这个智能家居设备的反馈信息接收完毕。
55.当然,在s40中,如果根据当前已经解析的相同设备标识和指令标识的数据子包确定未解析出所述长度字段,则可以在所述缓存队列中取出下一个相同设备标识和指令标识的数据子包,并返回s30。
56.s50、若所述长度之和达到所述反馈信息的总长度,则接收完成,并根据接收到的
反馈信息对预先创建的设备对象进行数据更新;
57.可理解的是,在长度之和达到长度字段中的总长度后,接收完毕,此时就可以采用反馈信息对设备对象进行更新。
58.s60、若所述长度之和小于所述反馈信息的总长度,则在所述缓存队列中取出下一个相同设备标识和指令标识的数据子包,并返回s30。
59.当然,如果长度之和小于长度字段中的总长度,说明还没有接收完毕,继续从缓存队列中提取下一个设备标识和指令标识均相同的数据子包,继续进行解析。
60.通过上述s10~s60,对设备标识、指令标识对数据子包进行唯一确定,避免解析错误。同时在数据子包中设置了长度字段和类型字段,根据类型字段对数据子包中的数据类型进行限制,通过长度字段判断各个数据子包是否解析完成,可以实现在反馈信息的数据量较大的情况下对数据子包的准确解析,减少因数据量大而出现解析错误的问题。
61.第二方面,本发明还提供一种基于mvvm框架和mqtt协议的智能家居数据同步装置,所述装置位于基于所述mvvm框架开发的智能家居客户端上,且所述智能家居客户端与智能家居设备之间通过mqtt协议进行数据传输,如图所示,所述装置100包括:
62.轮询检测模块110,用于在智能家居客户端的交互界面打开时,启动轮询器,实时检测用户是否在所述交互界面上进行操作,并当检测到用户在所述交互界面上进行操作时将预设中断标识设置为第一值,所述预设中断标识的初始值为第二值;其中,所述轮询器用于每隔预设时长检测一次所述预设中断标识;
63.第一更新模块120,用于响应于用户在所述交互界面上的每一次操作,根据本次操作后所述交互页面的状态对预设创建的交互对象进行数据更新,并向所述智能家居设备发送对应的控制指令;所述交互对象用于表征所述交互页面的当前状态;
64.第二更新模块130,用于在接收到所述智能家居设备在执行所述控制指令后返回的反馈信息后,根据所述反馈信息对预先创建的设备对象进行数据更新;所述设备对象用于表征所述智能家居设备的当前状态;
65.第三更新模块140,用于在每一次轮询中,若所述轮询器检测到所述预设中断标识为所述第一值,则将所述预设中断标识设置为第二值,并等待下一次轮询;若所述轮询器检测到所述预设中断标识为所述第二值,则将所述设备对象赋值给所述交互对象,根据更新后的交互对象对所述交互界面进行更新,并等待下一次轮询。
66.在具体实施时,若轮询检测模块通过所述轮询器检测到所述预设中断标识为所述第二值,则所述第三更新模块在将所述设备对象赋值给所述交互对象之前,判断所述设备对象和所述交互对象是否一致;若不一致,则执行将所述设备对象赋值给所述交互对象的步骤。
67.在具体实施时,所述预设中断标识为布尔类型,所述第一值为真,所述第二值为假。
68.可理解的是,第二方面提供的装置与第一方面提供的方法相对应,第二方面中有关内容的解释、举例、有益效果、具体实施方式等内容可以参考第一方面中的相应部分,此处不再赘述。
69.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实
施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
70.本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、挂件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
71.以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜