unreal4u / ds18b20-sensor-read
将读取DS18B20传感器的w1_slave文件并将输出发送到MQTT代理
v1.0.3
2018-12-06 23:13 UTC
Requires
- php: >=7.0.0
- monolog/monolog: ~1.23
- unreal4u/file-operations: ~0.4.1
- unreal4u/mqtt: ^1.1
This package is auto-updated.
Last update: 2024-08-26 09:40:16 UTC
README
此包将读取rpi3 1-wire传感器并将这些读取输出发送到MQTT代理。
此包的工作原理
步骤0:
确保您的RPi3上已安装正在运行的php7。如何做到这一点超出了本应用的范畴。别忘了还要安装composer。我将假设它安装在 usr/bin/composer.phar
。
步骤1:
在一个新目录中安装库,最小稳定性如此之高,是因为这个类上的许多依赖还没有任何稳定的发布版本,这将在未来改变
mkdir sensor-readout cd sensor-readout /bin/cat <<EOM >composer.json { "minimum-stability": "dev", "require": { "unreal4u/ds18b20-sensor-read": "dev-master" } } EOM composer.phar install -o --no-dev
步骤2:
创建一个名为 sensors/
的文件夹,并在其中创建指向实际传感器ID的符号链接。将符号链接作为您传感器的名称,此名称将用于主题名称和一般日志记录,例如
mkdir sensors
cd sensors/
ln -s /sys/bus/w1/devices/w1_bus_master1/XX-YYYYYYYYYYYY workshop
ln -s /sys/bus/w1/devices/w1_bus_master1/ZZ-ABCDEFABCDEF kitchen
使传感器实际工作超出了本应用的范畴,您必须自己找出如何做到这一点。
步骤3:
创建一个配置文件。创建一个新的配置文件,该文件扩展了 BaseConfig.php
并调整您在环境中使用的值
<?php // Filename: app/ProductionConfig.php declare(strict_types=1); use unreal4u\DS18B20Sensor\Configuration\BaseConfig; class ProductionConfig extends BaseConfig { public function getMQTTCredentials(): array { return array_merge(parent::getMQTTCredentials(), [ 'clientId' => 'sensorWriter', // Which clientId this client will pass on to the broker 'host' => '192.168.1.45', // The host of the broker 'user' => 'XXXXXXXX', // Optional username 'pass' => 'YYYYYYYY', // Optional password ]); } }
步骤4:
创建您的项目!我这里包含了我当前设置的一个小例子,您也可以看看 examples/index.php
作为例子并继续!我将假设您已创建一个 app
文件夹,在其中创建了您自己的配置和可运行文件
<?php // Filename: app/run.php use Monolog\Handler\StreamHandler; use Monolog\Logger; use unreal4u\DS18B20Sensor\Base; chdir(__DIR__ . '/../'); include 'vendor/autoload.php'; include 'app/ProductionConfig.php'; // Initialize objects we'll need $logger = new Logger('main'); $logger->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG)); $baseProgram = new Base(new ProductionConfig(), $logger); $baseProgram->runProgram(); $logger->info('Program finished running');
步骤5:
设置一个cron作业,每X分钟运行一次以读取传感器。
cron示例
# Every 2 minutes: */2 * * * * /usr/bin/php /home/pi/ds18b20-sensors-readout/app/run.php # Every 1 minute: * * * * * /usr/bin/php /home/pi/ds18b20-sensors-readout/app/run.php # Every 5 minutes: */5 * * * * /usr/bin/php /home/pi/ds18b20-sensors-readout/app/run.php
已知问题
- 如果传感器有任何问题,此包将静默失败。这可能在将来改变
- 到目前为止还没有使用Logger,这也会在未来改变,以便更容易地确定问题区域
- 一些未来的想法:能够同时向多个主题发布
享受!