前言

在物联网这个巨大的世界里,拥有一台物联网服务器是多么美妙啊。正如我们自己制作的衣服更合身一样,我们自己打造的物联网服务也更灵活。

2022/3/9搭建服务

第一次建立服务,但是感觉在安全方面问题很大。每台设备都可以连接,每台设备都可以自由发布和订阅话题。它与公共MQTT服务器没有太大区别。

2022/3/10增加认证

每台设备通过预先分配的(账户名+密码+设备ID)登录。如果同一(账户名+密码+设备ID)设备被恶意制造。在重新连接机制的情况下,两个设备会不断地将对方踢出线路。导致通信不稳定。当然,这是我测试的故意后果,现实中很少见。设备登录安全性有待今后进一步提高。

当所有设备都有独立的账号密码时,将考虑设备的通信独立性。为每个设备分配其可以订阅和发布的主题。设备之间的订阅和发布是独立的。设备A无法订阅设备B的主题,设备B无法订阅设备A的主题,发布也是如此。稍后我可能会添加全局主题和局部主题。

2022/3/11增加令牌认证机制

单纯的 (账户名+密码+设备ID)认证,会存在很大的安全隐患。在MQTT认证时如果没有开启 TLS/SSL双向认证机制的时,可以对报文进行 抓包,会导致设备密码泄露。为了解决这个问题,打算把 web安全当中 令牌认证机制搬过来。所以我对原有的设备认证机制做了很大的改动,为了能够在MQTT当中使用令牌认证机制。

当我在做压测时发现服务器负载比往常高,这是令牌认证机制导致的,令牌认证机制虽好,但会降低认证效率。为了解决这个问题,后面增加了 令牌桶。增加 令牌桶使得认证效率提高。且更灵活的管理 令牌失效时间

2022/3/13客户端调试

我的 客户端用的是 Esp8266Esp8266在每次认证时都从 腾讯NTP服务器获取当前时间,md5(token+ts)生成令牌,提交认证。

串口打印结果

但遇到一个问题,几次认证失败后,导致Esp8266内存不够,重启,结果如图所示。

Esp8266意外重启

2022/03/15 客户端调试

增加debug调试模式

关闭debug模式后串口打印结果

增加一站式配置参数

填写参数即可用

特色:一行代码启动所有业务

void setup()
{
  application_initialize(); /* 应用程序初始化 */
}

特色:已封装函数块,无需关心底层业务逻辑

/**********************************************************************
MQTT接收消息在下面,可自由发挥
***********************************************************************/
//当MQTT收到消息
void mqtt_client_recived(){
  Serial.println(mqtt_client_recived_data);
}
/**********************************************************************
MQTT接收消息在上面,可自由发挥
***********************************************************************/

原创文章,转载注明出处

2022/03/16

当实现 服务端设备逐渐完善时,又多了一个问题。因为我在服务端做的安全防护比较多。所以在硬件对接服务器时,需要人工配置很多参数。需要配置的参数如下。

  1. MQTT服务器地址

    1. 为了方便维护,给每台设备分配不同的服务器地址
  2. NTP服务器地址

    1. NTP服务器大部分情况下都是不会变的,但还是需要分配一下
  3. 设备账户

    1. 给每个设备分配一个账户,设备才能登录
  4. 设备ID

    1. 设备ID是设备接入节点的唯一标识
  5. 设备密钥

    1. 每次建立连接的时候,都需要依赖设备的唯一密钥
  6. 设备主题

    1. 设备主题当前设备独享的,其他设备无权限订阅/发布

当这么多参数需要配置时,就会很繁琐,自从人类会使用工具那一刻起,就因该考虑怎么用工具减少工作.于是我做了一个自动配置如上参数的工具.能够实现对参数的一键配置.按照凡人通俗易懂的理解,可以解释为一键注册.

2022/03/17

设备一键注册完成时,还是感觉不太方便.

于是又开发了个工具(AmCodeBuilder),实现了 代码自动生成.

Arduino代码自动生成

2022/03/18

当我实现了代码自动生成后,又多了一个想法.

想把这么方便的东西给更多的人使用,想搭建一个微型网站,起名为 自由物联+

  1. 用户登录注册(Authing)
  2. 开源广场
  3. 设备管理
  4. 完善了arduino代码的生成

    1. 以前只能生成单页代码,目前能生成完整的arduino项目,并且提供压缩打包下载.
最后修改:2022 年 06 月 13 日
如果觉得我的文章对你有用,请随意赞赏