该项目使用 Apple 的 homekit 和树莓派 ( https://github.com/KhaosT/HAP-NodeJS ) 上的 node.js 服务器来打开/关闭设备等。因此,当 vaule 为 true(1) 时,Light_accessory.js 会使用子进程和接线 pi 打开灯(继电器)。当值为 false(0) 时,还需要关闭灯(gpio write 7 1)。我尝试向其中添加 IF 语句(接近末尾),但我不断从 if 语句中收到语法错误。不知道为什么。//沮丧。
// HomeKit types required
var types = require("./types.js")
var exports = module.exports = {};
var exec = require('child_process').exec;
var execute = function(accessory, characteristic, value) {
console.log("executed accessory: " + accessory + ", and characteristic: " + characteristic + ", with value: " + value + ".");
}
exports.accessory = {
displayName: "Light",
username: "1A:2B:4A:4D:5E:FF",
pincode: "031-45-154",
services: [{
sType: types.ACCESSORY_INFORMATION_STYPE,
characteristics: [{
cType: types.NAME_CTYPE,
onUpdate: null,
perms: ["pr"],
format: "string",
initialValue: "Light 0",
supportEvents: false,
supportBonjour: false,
manfDescription: "Bla",
designedMaxLength: 255
}, {
cType: types.MANUFACTURER_CTYPE,
onUpdate: null,
perms: ["pr"],
format: "string",
initialValue: "Oltica",
supportEvents: false,
supportBonjour: false,
manfDescription: "Bla",
designedMaxLength: 255
}, {
cType: types.MODEL_CTYPE,
onUpdate: null,
perms: ["pr"],
format: "string",
initialValue: "Rev-1",
supportEvents: false,
supportBonjour: false,
manfDescription: "Bla",
designedMaxLength: 255
}, {
cType: types.SERIAL_NUMBER_CTYPE,
onUpdate: null,
perms: ["pr"],
format: "string",
initialValue: "A1S2NASF88EW",
supportEvents: false,
supportBonjour: false,
manfDescription: "Bla",
designedMaxLength: 255
}, {
cType: types.IDENTIFY_CTYPE,
onUpdate: null,
perms: ["pw"],
format: "bool",
initialValue: false,
supportEvents: false,
supportBonjour: false,
manfDescription: "Identify Accessory",
designedMaxLength: 1
}]
}, {
sType: types.LIGHTBULB_STYPE,
characteristics: [{
cType: types.NAME_CTYPE,
onUpdate: null,
perms: ["pr"],
format: "string",
initialValue: "Light 1",
supportEvents: false,
supportBonjour: false,
manfDescription: "Bla",
designedMaxLength: 255
}, {
cType: types.POWER_STATE_CTYPE,
onUpdate:
if ((function(value)) == 1) {
exec('gpio write 7 0' + value,function(error, stdout, stderr) {}
},
if ((function(value)) == 0) {
exec('gpio write 7 1' + value,function(error, stdout, stderr) {}
},
);
},
perms: ["pw", "pr", "ev"],
format: "bool",
initialValue: false,
supportEvents: false,
supportBonjour: false,
manfDescription: "Turn On the Light",
designedMaxLength: 1
},
}]
}]
}
最佳答案
我注意到的第一件事是你混淆了一个对象和一个代码块。您可以阅读有关 JSON 的内容,这将使您熟悉 javascript 对象(不同,here 是一个简短的解释),但希望这会有所帮助。
您不能将代码块直接放入对象中。对象有一个键
,然后有一个值
。请注意此处的代码
onUpdate:
if ((function(value)) == 1) { // ...
onUpdate
将是您的 key ,然后您直接开始进入代码块。
因此,将代码块放入对象的方法是使用函数。如果你做类似的事情..
onUpdate: function () {
if (value == 1) {
// do something
} else {
// do something else
}
这将使您的 onUpdate 现在成为您可以调用的函数。
我还没有通读你代码中的所有内容,但这肯定是一个语法问题,不会让你编译。
另外看看你的 if ((function(value)) == 1)
逻辑对我来说似乎是一种代码味道(即我不确定它是错误的,但看起来很有趣)。我认为你需要一个函数名称而不是关键字函数,但我对此也不是 100% 确定。
希望这能让您朝着正确的方向前进。
编辑:
现在我坐在办公 table 前,我正在重新阅读您的代码,看起来您的导出对象还有另一个问题。您的导出对象如下所示
export.accessory = {
displayName : 'string-value',
username : 'string-value',
pincode : 'string-value',
services : [{array: 'of-objects'}],
}, { // LOOKIE HERE
// fill in the rest
}
}
请注意,LOOKIE HERE
部分实际上正在关闭 export.accessory
对象。对象的 、
和延续是错误的。你可以把那条线去掉,就可以解决这个问题。
请记住,对象需要一个{'key':'value'}
,因此您不能只在需要名称的对象中设置对象。
您可以用来帮助管理此问题的一个好技术是预先创建值,然后导出它们,看看这个
var displayName = 'name';
var username = 'user-name';
var characteristics = [{},{},{}];
var someObject = {};
var someFunction = function () {};
export.accessory = {
displayName : displayName,
username : username,
characteristics : characteristics,
someObject : someObject,
someFunction : someFunction
}
请注意,每个键/值对的 object.accessory
中的第一个单词(:
左侧)是键的名称,第二个单词是键的名称。 (:
右侧)是对上面创建的变量的引用。
我希望这有帮助。
关于javascript - 令人沮丧的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27936134/