python-cozify icon indicating copy to clipboard operation
python-cozify copied to clipboard

Ambient temperature and color temperature both reported under the same key

Open japsu opened this issue 4 years ago • 3 comments

So today I installed some IKEA Trådfri bulbs and immediately my alerts tell me my house is on fire. Like, 4000 degrees on fire. 🔥🚒

Turns out device["state"]["temperature"] can be either ambient temperature (degrees Celsius) or color temperature (degrees Kelvin), depending on the device. They can be distinguished by having either "COLOR_TEMP" or "TEMPERATURE" in device["capabilities"]["values"] (but can there be a device that has both?).

Not sure if this should be fixed in the Cozify API instead of this library, but I bet this is something that affects many users of this library, and having the heuristic in the library would save us from replicating this heuristic everywhere that needs to distinguish ambient temperature from color temperature.

japsu avatar Jul 25 '20 14:07 japsu

Interesting issue! I have the same lights and have indeed not run into it due to the intent filtering. There is an option to do AND filtering which allows you to filter for a set to make it triple sure. I don't believe the two values would ever coexist but I'll have a think of there's an opinionated way to make it less of a pitfall. Ideas are of course welcome.

On Sat, Jul 25, 2020, 17:45 Santtu Pajukanta [email protected] wrote:

So today I installed some IKEA Trådfri bulbs and immediately my alerts tell me my house is on fire. Like, 4000 degrees on fire. 🔥🚒

Turns out device["state"]["temperature"] can be either ambient temperature (degrees Celsius) or color temperature (degrees Kelvin), depending on the device. They can be distinguished by having either "COLOR_TEMP" or "TEMPERATURE" in device["capabilities"]["values"] (but can there be a device that has both?).

Not sure if this should be fixed in the Cozify API instead of this library, but I bet this is something that affects many users of this library, and having the heuristic in the library would save us from replicating this heuristic everywhere that needs to distinguish ambient temperature from color temperature.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/Artanicus/python-cozify/issues/15, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAM27KK23NGK7SXWZR23VXDR5LVX3ANCNFSM4PHPVLZQ .

jinnatar avatar Jul 25 '20 18:07 jinnatar

I'm exporting all available values to Prometheus using an exporter I wrote. So in this case it's not viable to ask for only devices that sport capabilities.TEMPERATURE.

I ended up doing this:

            # HACK: Both temperature and color temperature are reported under same key, bad
            capabilities = device.get("capabilities", {}).get("values", [])
            if (
                key == "cozify_temperature" and
                "COLOR_TEMP" in capabilities and
                "TEMPERATURE" not in capabilities
            ):
                key = "cozify_color_temperature"

Here's the whole setup for reference: japsu/kotiscale

japsu avatar Jul 25 '20 18:07 japsu

Looking back at this, I think the tsdb way of dealing with the issue would be to export not only the datapoint but also key variables as tags (edit: i.e. also export the capabilities of the devices). That way you have the full dataset on the Prometheus side and can make sane choices on that side.

But, with that said, it's still annoying that they share a key so I'll keep thinking what can be done about it. Will at least add some documentation.

jinnatar avatar Mar 25 '21 07:03 jinnatar