Я подключил датчик DHT22 к Raspberry pi 4 на прямую к GPIO.
Установил библиотеку Adafruit_DHT
Успешно скопировал плагин получения температуры процессора vcgencmd
и изменил его для получения температуры с DHT
dht_t_21.js
/**
* dht_t_21
*/
const child = require('child_process');
const plugin = require('ih-plugin-api')();
plugin.params
.get()
.then(params => {
let interval = params.interval > 0 ? params.interval : 5;
setInterval(pollAndSend, interval * 1000);
})
.catch(e => {
plugin.exit(1, 'ERROR! ' + JSON.stringify(e));
});
function pollAndSend() {
// plugin.log('pollAndSend');
child.exec('sudo /home/pi/adafruit_python_DHT/examples/AdafruitDHT.py 22 21', (error, stdout, stderr) => {
let err = 1;
let value;
if (error) {
plugin.log(`exec error: ${error}`);
} else if (stderr) {
plugin.log(`stderr: ${stderr}`);
} else if (stdout) {
plugin.log(`stdout: ${stdout}`);
if (stdout && stdout.substr(0, 4) == 'temp') value = parseFloat(stdout.split('=').pop());
err = value == undefined ? 1 : 0;
} else {
plugin.log(`EMPTY stdout!!`);
}
plugin.sendData([{ id: 'dht_t_21_TEMP', value, err }]);
});
}
dht_t_21.ih
{
"id":"dht_t_21",
"description":"dht_t_21",
"cross":true,
"version":"0.1"
}
dht_t_21.json
{
"name": "dht_t_21",
"description": "dht_t_21",
"module": "dht_t_21.js",
"single": 1,
"hardchannels": 1,
"params": [
{
"name": "interval",
"note": "Интервал получения значений",
"type": "number",
"val": 60
}
],
"channels": [{ "id": "dht_t_21_TEMP", "desc": "SensorA" }],
"genrules": {
"SensorA": {
"cl": "SensorA"
}
}
}
К сожалению все файлы одним архивом не могу загрузить
Неудобство заключается в том, что нужно создавать такой плагин под каждый датчик. И мне не нравиться что нужно обращаться к датчику через команду sudo
.
Подскажите пожалуйста, как это реализовать более удобным и надежным способом ?