Hallo liebe Community,
ich habe einen Feuchtigkeitssensor, dessen Messwert in einer Textdatei steht. Ich nutze das recht simple Plugin homebridge-humidity-file, um den Wert auszulesen und in HomeKit anzuzeigen. Das funktioniert auch tadellos. Nun habe ich versucht, das Plugin zu ergänzen, sodass der Sensor um einen Kontaktsensor erweitert wird, der je nach Über-/Unterschreiten eines definierten Grenzwertes geschlossen bzw. geöffnet ist.
Das darum ergänzte Plugin liest weiterhin korrekt die Messwerte aus, zeigt mir auch den Kontaktsensor an, der ist nun aber unabhängig vom definierten Grenzwert immer geschlossen. Der Fehler dürfte darin liegen, dass ich in der Bedingung this.getState.bind(this) benutze. Ich kenne mich leider überhaupt nicht mit dieser ganzen JS/Node/HomeBridge-Logik aus, vermute aber, dass das nicht den puren Messwert zurückspielt und man daher immer in die Else-Anweisung reinläuft.
var fs = require('fs');
var Service, Characteristic;
module.exports = function(homebridge) {
Service = homebridge.hap.Service;
Characteristic = homebridge.hap.Characteristic;
homebridge.registerAccessory("homebridge-humidity-file", "HumidityFile", HumidityFileAccessory);
}
function HumidityFileAccessory(log, config) {
this.log = log;
this.name = config["name"];
this.filePath = config["file_path"];
this.humidityAlertLevel = config["humidity_alert_level"];
this.service = new Service.HumiditySensor(this.name);
this.service
.getCharacteristic(Characteristic.CurrentRelativeHumidity)
.on('get', this.getState.bind(this));
this.service
.getCharacteristic(Characteristic.ContactSensorState)
.updateValue(this.getState.bind(this) <= this.humidityAlertLevel ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED);
}
HumidityFileAccessory.prototype.getState = function(callback) {
fs.readFile(this.filePath, 'utf8', function(err, data) {
if (err) {
callback(err);
return
}
callback(null, parseFloat(data))
})
}
HumidityFileAccessory.prototype.getServices = function() {
return [this.service];
}
Alles anzeigen
Was muss ich stattdessen schreiben?
Vielen Dank für eure Hilfe!