JavaScript初学者在这里,我正在尝试使用hap-nodejs模块在Nodejs中运行一些东西。
我的主文件如下所示:
const config = require('../config');
const Syno = require('synology');
const docker = new Docker(config.dockerode);
const storage = require('node-persist');
const os = require('os');
storage.initSync();
const {Bridge, uuid, Categories} = require('hap-nodejs');
const TemperatureSensorAccessory = require('./TempGageAccessory');
const name = config.bridge.deviceName.replace('$hostname', os.hostname()).replace(/\./, ' ');
const bridge = new Bridge(name, uuid.generate('Remote Bridge'));
bridge.publish({
username: config.bridge.mac,
port: config.bridge.port,
pincode: config.bridge.pincode,
category: Categories.BRIDGE
});
async function publishSynology()
{
const dev = new TemperatureSensorAccessory('NAS_SYS_TEMP');
bridge.addBridgedAccessories({
accessory: dev.getAccessory()
});
}
publishSynology();和我的/TempGageAccessory.js文件,问题在这里:
const {Accessory, Service, Characteristic, uuid, Categories} = require('hap-nodejs');
const Syno = require('synology');
const {emitter, docker} = require('./DockerKit');
module.exports = class TemperatureSensorAccessory {
constructor(name) {
console.log('Constructing ' + name);
this.TemperatureSensor = {
name,
model: 'Synology NAS Temperature Sensor',
category: Categories.SENSOR,
description: name,
setTemperature: function () {
let syno = new Syno({
host : '10.0.0.1',
port : '5656',
secure : 'true',
user : 'user',
password: 'password'
});
syno.query('/webapi/entry.cgi', {
api : 'SYNO.Core.System',
version: 1,
method : 'info'
}, function(err, data) {
if (err) return console.error(err);
console.log(data['data']['sys_temp']);
this.temperature = parseFloat(data['data']['sys_temp']);
return parseFloat(data['data']['sys_temp']);
});
},
temperature: 0.0,
getTemperature: async function () {
console.log('[' + name + '] Getting Temperature' + this.temperature);
return this.temperature;
},
uuid: uuid.generate('hap-nodejs:accessoires:temperaturesensor:synology:' + name),
accessory: null
};
const that = this;
that.TemperatureSensor.setTemperature();
that.getAccessory().getService(Service.TemperatureSensor).getCharacteristic(Characteristic.On).updateValue(that.TemperatureSensor.temperature);
}
getAccessory() {
if (!this.TemperatureSensor.accessory) {
let acc;
acc = new Accessory(this.TemperatureSensor.name, this.TemperatureSensor.uuid);
acc.username = '8a:bc:80:74:de:16';
acc.pincode = '123-45-678';
acc
.addService(Service.TemperatureSensor, this.TemperatureSensor.name)
.getCharacteristic(Characteristic.CurrentTemperature)
.on('get', async(cb) => {
// return our current value
cb(null, await this.TemperatureSensor.getTemperature());
});
this.TemperatureSensor.accessory = acc;
return acc;
} else return this.TemperatureSensor.accessory;
}
};我得到了几乎所有的东西,我的rest调用工作得很好,我正在返回我的数据。但是当我尝试将查询结果赋给属性temperature时,我得到了以下错误:
TypeError:无法设置未定义的“temperature”属性
有人能解释一下我做错了什么吗?我不是Javascript开发人员,第一次使用它来自C#/Python。
发布于 2020-04-28 03:47:16
初学者错误,通过裁判到正确的对象修复。
https://stackoverflow.com/questions/61449823
复制相似问题