我正在设置一个Pi桌面作为支持基于节点red/mqtt的家庭自动化系统的基础(在未来SD故障的情况下寻找稳健性),使用保留SD上的"引导"分区的方法,而不是永久的ROM mod设置方法。我正在使用Peter Scargill的"脚本"的最新版本(2018年3月16日)来设置节点red/mqtt环境。
我基于整个事情的操作系统映像是 raspbian-2017-07-05。
在调用"脚本"时,Pi Desktop SD->SSD 克隆和 SSD 分区已设置 SD,SD 是"启用"的活动根环境。我的假设是在尝试复制SSD上的安装之前,使SD环境在所有系统中正常运行。尽我所能,我试图确保SD和SSD上的根分区尽可能接近相同,再次用于SSD故障时的恢复目的。
在此调用之前,我已经成功地在尚未安装 Pi Desktop 的单独 SD 上运行了"脚本"。
然而,在Pi Desktop SD上,在完成"脚本"安装后,Apache和Node Red可以运行,但Node Red不会连接到新安装的本地Mosquitto MQTT代理。
在第 642 行,"脚本"使用sudo systemctl start mosquitto
在安装后立即启动服务器,然后sudo systemctl enable mosquitto
设置重新启动后自动 mqtt 启动。
重新启动后,如果调用ps -ef | grep mosq && netstat -tln | grep 1883
,结果为:
pi@vistacontrol:~ $ !188
ps -ef | grep mosq && netstat -tln | grep 1883
pi 2939 2914 0 03:31 pts/0 00:00:00 grep --color=auto mosq
mosquit+ 10851 1 0 Apr08 ? 00:00:30 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN
tcp6 0 0 :::1883 :::* LISTEN
尝试使用本地代理 IP 地址将 MQTT 节点配置为红色节点127.0.0.1
会导致黄色"连接"点,并且没有节点红色吞吐量。
经过多次故障排除尝试,我终于发现,如果我使用sudo /etc/init.d/mosquitto stop
停止 MQTT 服务器,请使用mosquitto -d
重新启动它,然后ps -ef | grep mosq && netstat -tln | grep 1883
结果是:
pi@vistacontrol:~ $ ps -ef | grep mosq && netstat -tln | grep 1883
pi 3388 1 0 03:50 ? 00:00:00 mosquitto -d
pi 3390 2914 0 03:50 pts/0 00:00:00 grep --color=auto mosq
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN
tcp6 0 0 :::1883 :::* LISTEN
如果我随后将 MQTT 节点代理设置重新配置为 rpi 的网络 IP 地址的设置,则节点红色 MQTT 节点将开始工作。
有没有人能够指出我在哪里和我可能会寻找什么来澄清为什么这两种方法之间的区别。我认为任何其他尝试应用 U 盘替代方法以完全依赖 SD 的用户,即使不使用 Pi Desktop 也会遇到类似的困难。
如果没有确切看到您如何配置 Node-RED,这有点难以解决,但我会有一个猜测。
有问题的脚本将 Mosquitto 设置为在通过本机 MQTT 侦听器(但奇怪的是 websocket 侦听器)连接时需要用户名和密码。
因此,为了使用 Node-RED 中的默认协议设置进行连接,您需要指定用户名和密码(默认为 admin/password123)。
当您停止 mosquitto 服务并手动重新启动它时,这样做的原因是该服务设置为指向已安装的配置文件/etc/mosquitto/mosquitto.conf
当您手动启动它时,您没有指定配置文件(mosquitto 不默认加载任何配置文件),因此您正在删除需要用户名/密码的选项。