在 Google SmartHome API 的 reportState 中,temperatureK 和 spectrumRgb 似乎无法协同工作
In reportState of the Google SmartHome API, temperatureK & spectrumRgb doesn't seem to work together
我正在尝试让 Google 智能家居 API 在 Gladys Assistant(它是一个开源家庭自动化软件)上运行,但我很难做到 Google 集成测试通过。
这是我的 onSync:
onSync
{
"requestId": "9164924531720238290",
"payload": {
"agentUserId": "9aba8230-9e8d-47b7-9d1c-f4dd8725aad3",
"devices": [
{
"id": "mqtt-lamp-temperature",
"type": "action.devices.types.LIGHT",
"traits": [
"action.devices.traits.ColorSetting",
"action.devices.traits.Brightness",
"action.devices.traits.OnOff"
],
"name": {
"name": "Lampe Temperature"
},
"attributes": {
"colorModel": "rgb",
"colorTemperatureRange": {
"temperatureMinK": 2000,
"temperatureMaxK": 9000
}
},
"deviceInfo": {
"model": null
},
"roomHint": "Grand Salon",
"willReportState": true
}
]
}
}
这是我发送给 reportState 的内容:
reportState
{
online: true,
color: { temperatureK: 3000, spectrumRgb: 8388863 },
on: true
}
这是 onQuery 返回给 Google API:
onQuery
{
'mqtt-lamp-temperature': {
online: true,
color: { temperatureK: 3000, spectrumRgb: 8388863 },
on: true
}
}
但这就是 Google 在集成测试中看到的:
AssertionError: Expected state to include:
{"color":{"temperatureK":{"xRange":[2600,3200]}}},
actual state: {"color":{"spectrumRGB":8388863},"on":true,"online":true}: expected false to be true
似乎Google在spectrumRgb属性出现的时候完全忽略了temperatureK属性
为了证实我的理论,我尝试创建一个 lamp 只有 spectrumRgb 和只有 temperatureK 的灯,然后它完美地工作。问题是,在那种情况下,一些测试被跳过了,我想我不会得到 Google 的验证。
我的问题是:
为什么这些属性不能一起工作?光不能通过它的温度和它的 RGB 来控制吗?
你看到我的实现有什么奇怪的地方吗?
非常感谢您的帮助!
来自docs:
Color temperature is a linear scale and a subset of the RGB/HSV full spectrum color models.
您目前正在尝试向您的灯发送两种不同的颜色设置 (orange-ish in kelvin, deep pink in rgb),这是您 运行 遇到的问题的一部分。
您已在 SYNC
中设置设备以同时支持 RGB 和温度,但在 QUERY
/EXECUTE
意图中,您需要发送 temperatureK 或 rgb 光谱值,不能同时使用。
您好,您的 JSON Query 和 ReportState 格式不同,在 ReportState 中也包含设备 ID,请阅读 google 报告状态文档以获取更多信息。
我正在尝试让 Google 智能家居 API 在 Gladys Assistant(它是一个开源家庭自动化软件)上运行,但我很难做到 Google 集成测试通过。
这是我的 onSync:
onSync
{
"requestId": "9164924531720238290",
"payload": {
"agentUserId": "9aba8230-9e8d-47b7-9d1c-f4dd8725aad3",
"devices": [
{
"id": "mqtt-lamp-temperature",
"type": "action.devices.types.LIGHT",
"traits": [
"action.devices.traits.ColorSetting",
"action.devices.traits.Brightness",
"action.devices.traits.OnOff"
],
"name": {
"name": "Lampe Temperature"
},
"attributes": {
"colorModel": "rgb",
"colorTemperatureRange": {
"temperatureMinK": 2000,
"temperatureMaxK": 9000
}
},
"deviceInfo": {
"model": null
},
"roomHint": "Grand Salon",
"willReportState": true
}
]
}
}
这是我发送给 reportState 的内容:
reportState
{
online: true,
color: { temperatureK: 3000, spectrumRgb: 8388863 },
on: true
}
这是 onQuery 返回给 Google API:
onQuery
{
'mqtt-lamp-temperature': {
online: true,
color: { temperatureK: 3000, spectrumRgb: 8388863 },
on: true
}
}
但这就是 Google 在集成测试中看到的:
AssertionError: Expected state to include:
{"color":{"temperatureK":{"xRange":[2600,3200]}}},
actual state: {"color":{"spectrumRGB":8388863},"on":true,"online":true}: expected false to be true
似乎Google在spectrumRgb属性出现的时候完全忽略了temperatureK属性
为了证实我的理论,我尝试创建一个 lamp 只有 spectrumRgb 和只有 temperatureK 的灯,然后它完美地工作。问题是,在那种情况下,一些测试被跳过了,我想我不会得到 Google 的验证。
我的问题是:
为什么这些属性不能一起工作?光不能通过它的温度和它的 RGB 来控制吗?
你看到我的实现有什么奇怪的地方吗?
非常感谢您的帮助!
来自docs:
Color temperature is a linear scale and a subset of the RGB/HSV full spectrum color models.
您目前正在尝试向您的灯发送两种不同的颜色设置 (orange-ish in kelvin, deep pink in rgb),这是您 运行 遇到的问题的一部分。
您已在 SYNC
中设置设备以同时支持 RGB 和温度,但在 QUERY
/EXECUTE
意图中,您需要发送 temperatureK 或 rgb 光谱值,不能同时使用。
您好,您的 JSON Query 和 ReportState 格式不同,在 ReportState 中也包含设备 ID,请阅读 google 报告状态文档以获取更多信息。