javascript - Nodejs-异步函数-TypeError:无法设置未定义的属性“温度”
问题描述
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;
}
};
我几乎得到了一切,我的休息电话工作正常,我正在返回我的数据。但是当我尝试将查询结果分配给属性温度时,我收到以下错误:
TypeError:无法设置未定义的属性“温度”
请,有人可以解释我做错了什么吗?我不是 Javascript 开发人员,第一次使用它来自 C#/Python。
解决方案
初学者错误,通过裁判正确的对象来修复。
推荐阅读
- javascript - 为什么 touch 方法不能接收到 className 的参数?
- azure-web-app-service - Blazorhosted ASP.NET Core 3 作为 Azure 应用服务
- c++ - 静态初始化插件工厂
- javascript - 如何在不同的页面有来自你的不同评论
- javascript - 如何从 javascript 字符串的末尾删除可变数量的字符
- google-apps-script - 从 A1 表示法转换为字符串/列表表示法?
- oracle - PL/SQL 记录填充
- xml - XSLT 使用单引号
- c# - 如何枚举 NVMe (M2) 驱动器并在 c# 中获取它们的温度?
- flutter - 页面重新加载后 Flutter StreamBuilder 无法正常工作