/proc/loadavg 中记载了系统的负载情况,内容格式是

1.41 1.61 1.79 6/149 2331

内容是 5分钟 10分钟 15分钟 内的平均负载
第四个值是 活动进程数/进程总数
最后一个是最近运行进程的进程ID号

至于 mosquitto 是啥就不多说了。如果是简单的权限验证使用配置文档基本上是可以完全胜任了,但是要对数据库中的帐号进行权限认证,那就得使用插件来实现了。

mosquitto 的ACL插件是以 so (windows dll) 的形式提供的,在 mosquitto 的安装包中就已经包含了编写插件所需的头文件。

  • mosquitto.h
  • mosquitto_plugin.h

我们要做的就是实现 mosquitto_plugin.h 头文件中所声明的所有函数。

  • mosquitto_auth_plugin_version
  • mosquitto_auth_plugin_init
  • mosquitto_auth_plugin_cleanup
  • mosquitto_auth_security_init
  • mosquitto_auth_security_cleanup
  • mosquitto_auth_acl_check
  • mosquitto_auth_unpwd_check
  • mosquitto_auth_psk_key_get

详细的用法和参数说可以参考 mosquitto_plugin.h 中的注释。

mosquitto_auth_acl_check 这个函数是用来检测客户端是否有权限来 publishsubscriptions

  • MOSQ_ERR_SUCCESS
  • MOSQ_ERR_ACL_DENIED
  • MOSQ_ERR_UNKNOWN

可以返回这三类值,来决定客户端的权限。

mosquitto_auth_unpwd_check 用户名密码的认证函数,只有通过这个函数检测的客户端才可以正常登录。

  • MOSQ_ERR_SUCCESS
  • MOSQ_ERR_AUTH
  • MOSQ_ERR_UNKNOWN

库的编译参数:

gcc -I<path to mosquitto_plugin.h> -fPIC -shared plugin.c -o plugin.so

修改 mosquitto.conf 文件,去掉 auth_plugin 前的注释,并在后面写上插件所在的 path 重启 mosquitto 后就会自动加载插件了。

在 arduino 与外界通讯参数多了解析起来就很麻烦。平时工作中网络通讯都用的 protobuf 来实现。就想能不能在 arduino 中也使用 protobuf,使用官方的C++库是不可能的了,编译出来的体积足以撑爆芯片的所有可用的空间。好在发现了一个第三方的 protobuf 实现库 nanopb,它可以以极低的资源占用来解析 protobuf,使用起来也不算麻烦。

编写 proto 协议描述文件

my.proto
message test {
    optional string name = 1;
    optional int32 id = 2;
}

编译 proto 文件

protoc -omy.pb my.proto

生成 nanopb 专用的输出格式

nanopb_generator my.pb

生成出 my.pb.h my.pb.c

与 arduino 代码对接

在 nanopb 里有这么些代码文件

这是 nanopb 的基础文件

  • pb.h
  • pb_common.h
  • pb_common.c

编码 protobuf 要用到的

  • pb_encode.h
  • pb_encode.c

解码 protobuf 要用到的

  • pb_decode.h
  • pb_decode.c

基础文件一定是要加的,编码解码的代码文件根据需要加入,生成的 my.pb.h my.pb.c 也需要加入进来。

在 http 段中增加如下开关可以关闭 nginx 在 302 转发中附加端口号,而导致网页无法打开的问题。
port_in_redirect off;

参数说明

  • c 创建包裹
  • x 解开包裹
  • v 显示详细信息
  • z 启用gzip算法
  • f 源文件
  • t 列出包裹内容
  • C 目标文件夹

打包文件

tar -cvzf packages.tar.gz ./packages

解包文件

tar -xvzf packages.tar.gz -C /home/u2nn

查看包裹内容

tar -tf packages.tar.gz

其他

注意 tar 打包所包含的路径信息。
tar -cvzf xxx.tgz xxx/yyy/ddd 打包的根就是 xxx
tar -cvzf xxx.tgz ../../xxx/yyy 打包的根就是 xxx