Open lwitzani opened 3 years ago
Without coming onsite and taking a look, my guess is account permissions. And the account you are using on the command line is different than the one running homebridge. Is the account running home bridge also parmissioned to access the sensor?
I thought the same, that is why i tried it with the homebridge user as following:
pi@raspberrypi:~ $ sudo su homebridge
homebridge@raspberrypi:/home/pi $ dht22
0 21.8 C 46.0 %
homebridge@raspberrypi:/home/pi $ sudo dht22
0 21.9 C 46.0 %
I made sure that homebridge-config-ui-x has all the rights it can get...
The homebridge user now even has passwordless sudo. I used
sudo visudo
and added the line
homebridge ALL=(ALL) NOPASSWD: ALL
But still same problem...nothing changed
is the dht22 command actually used? I can't find its usage in the index.js. There you use sensor.read( from the node-dht-sensor lib. I took a closer look to that and noticed if i run the code
var sensor = require("../lib").promises;
// You can use `initialize` and `setMaxTries` just like before
sensor.setMaxRetries(10);
sensor.initialize(22, 4);
// You can still use the synchronous version of `read`:
// var readout = sensor.readSync(22, 4);
sensor.read(22, 4).then(
function(res) {
console.log(
`temp: ${res.temperature.toFixed(1)}°C, ` +
`humidity: ${res.humidity.toFixed(1)}%`
);
},
function(err) {
console.error("Failed to read sensor data:", err);
}
);
copied from https://github.com/momenso/node-dht-sensor then i also get as result
pi@raspberrypi:/usr/local/lib/node_modules/homebridge-dht/node_modules/node-dht-sensor/lib $ sudo node fake.js
Failed to read sensor data: [Error: failed to read sensor]
and the part "Error: failed to read sensor" is the exact message i get in homebridge so maybe there is a problem with this lib?
I've rewritten (quick and dirty) some of your code so the dht22 executable is actually used...now it works The part i changed is:
DhtAccessory.prototype = {
getDHTTemperature: function (callback) {
exec('dht22',
function (error, stdout, stderr) {
if (!error) {
var splitInfo = stdout.split(' ');
temperature = splitInfo[1];
humidity = splitInfo[3];
this.log("DHT Status: %s, Temperature: %s°C, Humidity: %s%", 0, roundInt(temperature), roundInt(humidity));
this.humidityService
.getCharacteristic(Characteristic.CurrentRelativeHumidity).updateValue(roundInt(humidity));
callback(error, roundInt(temperature));
} else {
this.log.error("Error:", error);
callback(error);
}
}.bind(this));
},
Will check tomorrow if i can further improve it for myself. Thanks anyway! Cheers
If you go back thru the version history about 18-24 months ago I switched from this approach ( of calling an exec ) to the library as a lot of people had issues with getting the binary working. The included binary is from the old version of the code.
hi i have the same problem, i was using a dht11 and it worked perfect, now i use a dht22 (it is more accurate) and i get: “[dht22] Error: [Error: failed to read sensor]” have you found any solution to this problem? (I apologize I am a very beginner)
As i mentioned, i used the code i wrote myself (which is similar to his actual code from some months ago). Works for me. Sry
perfect, I'll try your code, thank you very much
Good evening @lwitzani , I have tried to paste your code in index.js replacing the original code with yours, but when restarting the raspberry and running homebridge again I get this error:
[2021-2-1 21:09:41] [dht22] Error: Error: spawn dht22 ENOENT at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19) at onErrorNT (internal/child_process.js:469:16) at processTicksAndRejections (internal/process/task_queues.js:84:21) { errno: 'ENOENT', code: 'ENOENT', syscall: 'spawn dht22', path: 'dht22', spawnargs: [], cmd: 'dht22' }
maybe if we can solve it together we could update index.js in the plugin, where can I be failing? I apologize for my little knowledge
The root cause of this problem is mentioned at momenso/node-dht-sensor#116 .
To fix this, you'll first need to go to /usr/local/lib/node_modules/homebridge-dht/node_modules/node-dht-sensor/src
, apply the change Here,
Then go to /usr/local/lib/node_modules/homebridge-dht/node_modules/node-dht-sensor
, run node-gyp configure
and node-gyp build
.
Then restart the home-assistant, you should have readings now.
Hi, hope you are still around :) thx for the plugin.
I can't get it to work :(.
I installed the homebridge plugin via homebridge-config-ui-x. My config is:
I installed the BCM2835 library etc and i can run dht22 in my terminal as normal pi user and also as homebridge user. It returns something like
When i boot my homebridge, the init stuff is
But later when it actually runs it there is the error
Any idea what this could be?