gpt4 book ai didi

javascript - AJAX GET 命令获取灯的状态

转载 作者:行者123 更新时间:2023-11-29 15:55:58 26 4
gpt4 key购买 nike

我正在尝试制作一个 html 应用程序以在允许控制 phillips hue 灯的本地主机中运行。我正在调整 EVOThings 基本代码来执行此操作。现在我需要做一个函数来了解每个灯泡的状态以在 HMI 上刷新它,但我对 AJAX 代码不太满意。如果我在 API 中执行 GET 命令,我会得到这样的响应, Example of a GET response

{
"1": {
"state": {
"on": true,
"bri": 172,
"hue": 0,
"sat": 0,
"effect": "none",
"xy": [
0.3124,
0.3301
],
"ct": 0,
"alert": "select",
"colormode": "xy",
"mode": "homeautomation",
"reachable": false
},
"swupdate": {
"state": "notupdatable",
"lastinstall": null
},
"type": "Extended color light",
"name": "Hue color lamp 1",
"modelid": "LCT015",
"manufacturername": "Philips",
"productname": "Hue color lamp",
"capabilities": {
"certified": true,
"control": {
"mindimlevel": 1000,
"maxlumen": 806,
"colorgamuttype": "other",
"ct": {
"min": 0,
"max": 65535
}
},
"streaming": {
"renderer": false,
"proxy": false
}
},
"config": {
"archetype": "sultanbulb",
"function": "mixed",
"direction": "omnidirectional"
},
"uniqueid": "00:17:88:01:04:57:b0:ac-0b",
"swversion": "1.29.0_r21169",
"swconfigid": "3416C2DD",
"productid": "Philips-LCT015-1-A19ECLv5"
},

我有一个 AJAX PUT 函数来改变灯泡状态,

 app.lightSetState = function(lightId, state)
{
$.ajax({
type: 'PUT',
dataType: 'json',
url: 'http://' + app.getHueBridgeIpAddress() +'/api/' +
app.user + '/lights/' + lightId + '/state',
data: JSON.stringify(state),
success: function(data) { },
error: function(a, err) { }
});
};


//turn device on
app.lightOn = function()
{
app.lightSetState(app.lightId, {"on":true});
};


//turn device off
app.lightOff = function()
{
app.lightSetState(app.lightId, {"on":false});
};

现在我认为解决方案应该是这样的,

 app.lightGetState = function(lightId, state)
{
$.ajax({
type: 'GET',
dataType: 'json',
url: 'http://' + app.getHueBridgeIpAddress() +'/api/' +
app.user + '/lights/' + lightId,
data: ............. ,
success: ............ ,
error:
});
};

有人可以帮助我吗?我愿意接受任何关于进行此状态刷新的建议。

最好的问候:)

最佳答案

您声明通过调用 URL 获得 JSON 响应,因此:

function getState(app, lightId)
{
return $.ajax({
type: 'GET',
async: false,
dataType: 'json',
url: 'http://' + app.getHueBridgeIpAddress() +'/api/' + app.user + '/lights/' + lightId,
success: function(data) {
return data;
},
error: function(a, err) {}
});
};

var jsontext = JSON.parse(getState(app,lightId));
app.lightGetState = jsontext[1].state.on;

实际上你真的不应该使用 async: false 因为它已经过时了。您应该删除 return 方法并在 success: 函数中进行处理。

作为解释:您在 GET 示例中显示的数据是 JSON,因此您需要将其解析为一个我称为 jsontext 的对象。棘手的一点是 key 是“1”,但是一旦我们有了它 (jsontext[1]),我们就会得到 state key ,然后是 on 键,它将返回 'true''false',您可以在以后的代码中使用这些字符串

关于javascript - AJAX GET 命令获取灯的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57939087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com