# IOT 服务端 [使用aedes作为MQTT服务](https://github.com/moscajs/aedes#readme) [使用fastify作为http服务](https://github.com/fastify/fastify) [使用sqlite3作为数据存储](https://github.com/TryGhost/node-sqlite3) 服务框架使用http+mqtt+sqlite3,以轻量化为目的。整个原理采用IM群聊方式进行设备管理 1. 设备: 1. 存储: 1. wifi相关信息、房间号、设备唯一ID(芯片ID)、设备类型、软件版本、设备电量、 2. 接收:(下发) 1. 接收来自管理端的配置信息:wifi 房间号,唯一设备ID等 2. 接收来自房间的控制信息:执行命令 3. 发送:(上传) 2. 订阅房间号后发送设备状态等相关信息 4. 订阅: 1. 主动订阅房间号 2. 被动订阅管理端(由服务端完成) 2. 管理端(网页) 1. 对房间进行增删改查操作 2. 对设备进行相关配置,分配房间号,IOT软件升级、配置Wi-Fi等 3. 对房间中的设备进行增删改查,控制等操作,房间外的设备(不在线的可以删除)其他不允许控制操作 4. 设备统计(包括未分配房间的设备,未分配设备只显示状态),在房间中显示各设备状态 5. 控制设备时,需要下发设备唯一ID 6. 在登录的管理中可以对房间设备进行控制,如打开或关闭某个设备,以登录管理员进行指令下发 3. 服务端 1. 主动对连接设备进行管理号的订阅,方便后面统计管理设备 2. 增加http-jwt鉴权 3. splite3 1. 存储房间,设备,日志等相关数据 2. 为管理端提供数据支撑 4. mqtt 1. 终端连接mqtt服务器时需要用户名和密码进行认证,认证通过后才能连接 1. 对已连接设备进行主动订阅,并下发唯一设备id: 设备连接时需要提供名称,唯一ID=名称+uuid 4. 日志 1. 设备日志: 1. 设备连接、断开、配置、状态、错误等 2. 设备操作,接收到某设备指令或者执行某中操作的日志 3. 管理员操作日志,如添加设备、修改设备、删除设备、添加房间、修改房间、删除房间发送给某设备执行的操作等 ## Run ``` 1. yarn build 2. ./server ``` ## Debug ``` 1. yarn 2. node index.js 3. node>=18.0.0 ```