在 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 报告状态文档以获取更多信息。