3.5 数据库的设计
由于各个模块都需要相应的数据库来存储数据,当用户通过手机软件终端对家电信息进行查询时,就会通过服务器调用数据库的数据再返回至软件终端。
3.5.1 登录模块数据表格设计
登录模块的数据库主要存储的是用户的账号相关信息。将他的 ID、账号名称和密码放在单个 user 表中,可以更快的验证用户的身份。表 3-8 即为 user 表。用户的登录密码存储在 pwd 字段中,为了保证用户的密码安全性,不被泄露,pwd 字段需要先经过加密再存储。
在用户存储密码时,密码的加密方式是 md5,之后再将其存储到数据库中。当用户登录的时候,将其输入的密码同样进行加密,然后与数据库中的密码比较得出结果,对用户的身份进行确认。
当用户注册的时候,需要填写一些个人的资料,user_info表就是用来存储这些信息的,如表 3-9 所示。这些个人信息有用户名、密码、邮箱、个人电话、联系地址等,联系地址分为省、市、区三个字段存储。主键 userID 可以将两张表格联系起来。
3.5.2 窗帘模块数据表格设计
窗帘模块的信息存储在 curtain 表中,如表 3-10 所示。curtain 表包含的信息有窗帘的ID 节点,窗帘的名称和开关状态,用户 ID 和所属房间 ID.通过 userID 可以链接到 user表以查询窗帘的用户的详细信息。nodeID 是窗帘的传感器节点的出厂 ID.窗帘的状态由curtainState 显示,打开时为 0,而合上时为 100.其他的开合状态由 0 到 100 的数字表示。
3.5.3 灯光模块数据表格设计
light 表格用于存储灯光模块中的相关信息,如表 3-11 所示。light 表含有灯光节点 ID,灯光名称,灯光状态、所属的用户 ID 以及所属房间 ID.userID 可以链接到 user 表,查询到该灯光所对应的用户信息。nodeID 代表的是传感器出厂的节点 ID,灯光的状态可以由lightState 进行查询,打开为 0,关闭为 1.
3.5.4 温湿度模块数据表格设计
温湿度模块的数据库表格需要分别存储温湿度传感器的信息和温湿度数据的信息,因此设计了两张表格,分别为 sensirion 表和 sensirion_data 表。
表 3-12 是 sensirion 表,存储了传感器节点的相关信息,比如温湿度传感器节点的 ID、传感器的名称、传感器所属的用户、传感器所属的房间以及最近测量的温湿度值。userID可以链接到 user 表中,查询到该温湿度节点的用户的个人信息。距离当前最近测量出的温度值存放在 temperature 字段中,湿度值存放在 humidity 字段中。
由于用户需要对温湿度进行实时的监测与控制,温度值和湿度值是每隔一段时间就要上传到服务器中的。因此存储的数据量会比较大,为了提升查询和上传的速度,改善用户体验,本系统在 sensirion_data 表中存储温湿度传感器节点上传的相应数据。如表 3-13 所示。该表只存储相应时间的温度值与湿度值,传感器的其他信息存储在 sensirion 表中。
3.5.5 可燃气体模块数据表格设计
与温湿度模块类似,烟雾与可燃气体模块的数据库表格需要分别存储可燃气的传感器节点信息和传感器节点上传的相关数据。因此该模块的数据表格有两张,分别为 gas 表和gas_data 表。表 3-14 是 gas 表,存储的是烟雾与可燃气体的传感器相关信息,比如传感器节点 ID、可燃气传感器的名称、可燃气体的最近测量值以及所属房间等。userID 可以链接到 user 表中,可以查询到该节点所对应的用户的个人信息。gasValue 存储的是最近时间段测到的可燃气体值。
由于用户需要对家中的烟雾与燃气体情况进行实时的监测,为了保证家中的安全并方便用户掌握家中的信息,可燃气体数据需要每隔一小段时间就上传至服务器并进行历史存储。如此庞大的数据量需要另行存储才能保证系统的快速上传和查询,保证用户的使用体验。因此本系统在gas_data表格中存储烟雾与可燃气体传感器上传的数据。如表3-15所示。该表只存储上传时间和对应时间的可燃气气体浓度,传感器的其他信息存储在 gas 表中。
3.6 本章小结
本章主要设计了智能家居系统的架构和整体方案。首先是对系统的总体设计进行描述,接着分别分析了系统的功能上的要求和性能上所要达到的目标,从而得出系统的全面架构,包括数据采集终端节点的设计和系统软件终端的设计。随后对数据采集终端节点的设计进行了详细的介绍,系统的硬件部分采用 ESP8266 模块和 Arduino 模块相结合的方式来实现系统的控制与数据交互。多个数据采集终端节点组成了室内环境监控系统,对室内的不同家电进行开关控制,监测房内的温湿度以及可燃气是否泄露。室内环境监控系统包括四个子系统,分别是窗帘控制系统、灯光控制系统、温湿度监控系统以及烟雾与可燃气体监控系统。Arduino 模块是数据采集终端节点的核心控制器,其内部主控程序是 C 语言。最后设计了数据库,对不同子系统的数据库分别进行了设计。