Raspberry pi - wsgi 脚本中的 AdaFruit DHT(非 root)

Raspberry pi - AdaFruit DHT in wsgi script (non-root)

使用 https://github.com/adafruit/Adafruit_Python_DHT and a DHT22 temp/humidity sensor (https://www.adafruit.com/products/393 中的 ADAFRUIT_DHT python 库,我可以轻松读取温度和湿度值。

问题是,我需要 运行 我的脚本作为 root,以便与 GPIO 引脚交互。这根本不可能,当 运行 通过网站通过 wsgi 连接我的脚本时,因为 apache 不允许我(出于充分的理由)将 WSGIDaemonProcess 的用户设置为 root。

我有 pigpiod 运行ning 允许我通过它与 GPIO 交互,作为一个非根用户,但是,ADAFRUIT_DHT 不通过守护进程,并直接与 GPIO 交互。我不是 100% 确定 pigpio 守护程序是否足够快以进行位碰撞,需要解码来自 DHT22 单元的响应,但是,也许。

那么,有没有办法让我强制 ADAFRUIT_DHT 库不需要 运行 作为 root,或者,是否有可用的库替代品可以完成我正在做的事情正在寻找?

创建一个以 root 身份运行并侦听本地 Unix 或 TCP 套接字的小型服务器。当另一个进程连接时,您的服务器从传感器和 returns 读取数据。

现在您的 WSGI 进程只需要连接到侦听套接字的权限,这可以通过 Unix 套接字上的权限轻松管理,或者简单地将访问控制扔到风中并打开绑定到本地主机地址的 TCP 套接字(这样只有本地机器上的进程才能连接)。

这样做有几个好处...例如,您现在可以让多个程序同时使用温度数据,而无需担心设备争用(因为实际上只有温度服务器在读取数据)。您甚至可以实施短期缓存以提供更快的响应。

此外,请注意有一个 raspberry pi specific stackexchange

pigpio当然可以读取DHT11/22等传感器。

有两个使用守护程序的示例(这意味着不需要 root 权限)。

DHT11/21/22/33/44 Sensor 用 C 编写,自动检测模型。

DHT22 写在 Python 中,它只处理 DHT22(github 有一个 DHT11 示例)。

这两个示例都可能提供可靠的结果(读取错误率优于万分之一,而不是低于十分之一)。