Interpreting Product ID in StateVersion message

This is sort of a followup to my previous question about displaying the firmware version. The new question is about displaying the hardware version, as returned in the StateVersion message.

The vendor and version fields seem straightforward, since it appears that LIFX is vendor 1, and I assume version can just be displayed as a single integer. (Although it’s probably not something that needs to be displayed most of the time.)

What I’m most interested in is the product. Presumably product 1 is the Original 1000, since that’s what my Original 1000s return. But there are two other products: the White 800 and the Color 650. I assume one is product 2 and one is product 3, but which is which?

More generally, it would be nice to have a table which would map Product IDs to product names, and ideally some other metadata like whether color is supported, the maximum number of lumens, and so forth. And then keep this table updated as new products are released.


Here is a list of the IDs for currently released bulbs

| Vendor | Product | Name         |
|      1 |       1 | The Original |
|      1 |       2 | Color 650    |
|      1 |       3 | White 800    |

You are right, there needs to be something properly documented, leave it with me.


(And “thanks” was going to be my whole post, but the forum software told me my post had to be 20 characters, and that I should try the :heart: button. So, I :heart: this table!)

It means this button:

It keeps the conversations concise. Plus liked posts count towards your forum reputation (not that it matters for me, I’m an admin).

1 Like

I just bought a White 800, and it’s coming back as Vendor 1, Product 10.

Is that Hex 0x10 or decimal 10. If you got back 0x10 then you might have caught the bulb while it is in bootloader mode, if you got decimal 10, then something is a bit weird. Can you send me the packet data in a private message?

Also now that we have released the High voltage version of the White 800 I should provide the new table.

| Vendor | Product | Name                   |
|      1 |       1 | The Original           |
|      1 |       2 | Color 650              |
|      1 |       3 | White 800 Low Voltage  |
|      1 |       4 | White 800 High Voltage |

@daniel_hall would definitely appreciate having this topic kept up to date as products are released.

1 Like

In addition, it would be nice if the names could match the names used in the HTTP API.

For the record, I’m getting decimal 10. (Already sent this to Daniel in a PM.)

Okay, this is what happens when I try to read firmware code myself instead of deferring to the firmware developers. Basically all the information I’ve given you so far is incorrect (Boooo!). Basically I read the wrong internal header file.

Here is a correct table from the firmware team, I’ll get this up on the documentation site ASAP. The values are all decimal.

| Vendor | Product | Name                     |
|      1 |       1 | Original 1000            |
|      1 |       3 | Color 650                |
|      1 |      10 | White 800 (Low Voltage)  |
|      1 |      11 | White 800 (High Voltage) |

Now officially documented. I’ll endeavor to keep this page updated, but if you notice something missing, just ping me and we’ll get it added.


Whoops! Thanks @daniel_hall

I wrote a program to scrape the table and produce JSON output.

1 Like

@daniel_hall can we get that sync’d to the protocol-docs repo?

@ppelleti the markdown might be nicer to parse (or not).

Whoa whoa! You guys shouldn’t have to parse that table off our docs in order to get something machine readable. Its my job to make things easy for you!

I’m currently dealing with a bunch of things, but once I get a chance I’ll work out the best way for us to publish a machine readable (probably JSON) file at a stable URL. Then you can either download it at runtime, or as part of your build process for your apps.


There is now a machine readable version of this table up on our Github page. Please feel free to bug me if I forget to update it for new product releases.

It would be nice if the JSON file could also contain the identifier returned by the cloud API’s “List Lights” command, such as lifx_original_a21 or lifx_white_a19. The motivation is that I want to be able to provide users of my API with the same information, regardless of whether they’re using the LAN protocol backend or the cloud API backend.

1 Like

Sounds like a reasonable request. I’ll add it to my todo list. :smiley:

1 Like