You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

73 lines
15 KiB

package lifx
import "encoding/json"
type ProductMap struct {
Vid uint32 `json:"vid"`
Name string `json:"name"`
Defaults struct {
Hev bool `json:"hev"`
Color bool `json:"color"`
Chain bool `json:"chain"`
Matrix bool `json:"matrix"`
Relays bool `json:"relays"`
Buttons bool `json:"buttons"`
Infrared bool `json:"infrared"`
Multizone bool `json:"multizone"`
TemperatureRange []int `json:"temperature_range"`
ExtendedMultiZone bool `json:"extended_multizone"`
} `json:"defaults"`
Products []ProductMapEntry `json:"products"`
}
type ProductMapEntry struct {
Pid uint32 `json:"pid"`
Name string `json:"name"`
Features struct {
Color bool `json:"color"`
Chain bool `json:"chain"`
Matrix bool `json:"matrix"`
Infrared bool `json:"infrared"`
MultiZone bool `json:"multizone"`
TemperatureRange []int `json:"temperature_range,omitempty"`
MinExtMzFirmware int `json:"min_ext_mz_firmware,omitempty"`
MinExtMzFirmwareComponents []int `json:"min_ext_mz_firmware_components,omitempty"`
Relays bool `json:"relays,omitempty"`
Buttons bool `json:"buttons,omitempty"`
Hev bool `json:"hev,omitempty"`
} `json:"features"`
Upgrades []struct {
Major uint16 `json:"major"`
Minor uint16 `json:"minor"`
Features struct {
TemperatureRange []int `json:"temperature_range,omitempty"`
ExtendedMultizone *bool `json:"extended_multizone,omitempty"`
} `json:"features"`
} `json:"upgrades"`
}
var productMap ProductMap
func findProduct(vendorId uint32, productId uint32) *ProductMapEntry {
if vendorId != productMap.Vid {
return nil
}
for _, entry := range productMap.Products {
if entry.Pid == productId {
return &entry
}
}
return nil
}
func init() {
// Source: https://github.com/LIFX/products
// Commit: 2734460e132dd7ed32c3c0132345a758d47ff80b
err := json.Unmarshal([]byte(`{"vid":1,"name":"LIFX","defaults":{"hev":false,"color":false,"chain":false,"matrix":false,"relays":false,"buttons":false,"infrared":false,"multizone":false,"temperature_range":null,"extended_multizone":false},"products":[{"pid":1,"name":"LIFX Original 1000","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[]},{"pid":3,"name":"LIFX Color 650","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[]},{"pid":10,"name":"LIFX White 800 (Low Voltage)","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2700,6500]},"upgrades":[]},{"pid":11,"name":"LIFX White 800 (High Voltage)","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2700,6500]},"upgrades":[]},{"pid":15,"name":"LIFX Color 1000","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[]},{"pid":18,"name":"LIFX White 900 BR30 (Low Voltage)","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[]},{"pid":19,"name":"LIFX White 900 BR30 (High Voltage)","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[]},{"pid":20,"name":"LIFX Color 1000 BR30","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[]},{"pid":22,"name":"LIFX Color 1000","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[]},{"pid":27,"name":"LIFX A19","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":28,"name":"LIFX BR30","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":29,"name":"LIFX A19 Night Vision","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":30,"name":"LIFX BR30 Night Vision","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":31,"name":"LIFX Z","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":true,"temperature_range":[2500,9000]},"upgrades":[]},{"pid":32,"name":"LIFX Z","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":true,"temperature_range":[2500,9000],"min_ext_mz_firmware":1532997580,"min_ext_mz_firmware_components":[2,77]},"upgrades":[{"major":2,"minor":77,"features":{"extended_multizone":true}},{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":36,"name":"LIFX Downlight","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":37,"name":"LIFX Downlight","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":38,"name":"LIFX Beam","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":true,"temperature_range":[2500,9000],"min_ext_mz_firmware":1532997580,"min_ext_mz_firmware_components":[2,77]},"upgrades":[{"major":2,"minor":77,"features":{"extended_multizone":true}},{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":39,"name":"LIFX Downlight White to Warm","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":40,"name":"LIFX Downlight","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":43,"name":"LIFX A19","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":44,"name":"LIFX BR30","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":45,"name":"LIFX A19 Night Vision","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":46,"name":"LIFX BR30 Night Vision","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[{"major":2,"minor":80,"features":{"temperature_range":[1500,9000]}}]},{"pid":49,"name":"LIFX Mini Color","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":50,"name":"LIFX Mini White to Warm","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,6500]},"upgrades":[{"major":3,"minor":70,"features":{"temperature_range":[1500,9000]}}]},{"pid":51,"name":"LIFX Mini White","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2700,2700]},"upgrades":[]},{"pid":52,"name":"LIFX GU10","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":53,"name":"LIFX GU10","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":55,"name":"LIFX Tile","features":{"color":true,"chain":true,"matrix":true,"infrared":false,"multizone":false,"temperature_range":[2500,9000]},"upgrades":[]},{"pid":57,"name":"LIFX Candle","features":{"color":true,"chain":false,"matrix":true,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":59,"name":"LIFX Mini Color","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":60,"name":"LIFX Mini White to Warm","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,6500]},"upgrades":[{"major":3,"minor":70,"features":{"temperature_range":[1500,9000]}}]},{"pid":61,"name":"LIFX Mini White","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2700,2700]},"upgrades":[]},{"pid":62,"name":"LIFX A19","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":63,"name":"LIFX BR30","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":64,"name":"LIFX A19 Night Vision","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":65,"name":"LIFX BR30 Night Vision","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":66,"name":"LIFX Mini White","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2700,2700]},"upgrades":[]},{"pid":68,"name":"LIFX Candle","features":{"color":false,"chain":false,"matrix":true,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":70,"name":"LIFX Switch","features":{"color":false,"relays":true,"chain":false,"matrix":false,"buttons":true,"infrared":false,"multizone":false},"upgrades":[]},{"pid":71,"name":"LIFX Switch","features":{"color":false,"relays":true,"chain":false,"matrix":false,"buttons":true,"infrared":false,"multizone":false},"upgrades":[]},{"pid":81,"name":"LIFX Candle White to Warm","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2200,6500]},"upgrades":[]},{"pid":82,"name":"LIFX Filament Clear","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2100,2100]},"upgrades":[]},{"pid":85,"name":"LIFX Filament Amber","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2000,2000]},"upgrades":[]},{"pid":87,"name":"LIFX Mini White","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2700,2700]},"upgrades":[]},{"pid":88,"name":"LIFX Mini White","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2700,2700]},"upgrades":[]},{"pid":89,"name":"LIFX Switch","features":{"color":false,"relays":true,"chain":false,"matrix":false,"buttons":true,"infrared":false,"multizone":false},"upgrades":[]},{"pid":90,"name":"LIFX Clean","features":{"hev":true,"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":91,"name":"LIFX Color","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":92,"name":"LIFX Color","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":93,"name":"LIFX A19 US","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":94,"name":"LIFX BR30","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":96,"name":"LIFX Candle White to Warm","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2200,6500]},"upgrades":[]},{"pid":97,"name":"LIFX A19","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":98,"name":"LIFX BR30","features":{"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":99,"name":"LIFX Clean","features":{"hev":true,"color":true,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":100,"name":"LIFX Filament Clear","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2100,2100]},"upgrades":[]},{"pid":101,"name":"LIFX Filament Amber","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[2000,2000]},"upgrades":[]},{"pid":109,"name":"LIFX A19 Night Vision","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":110,"name":"LIFX BR30 Night Vision","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":111,"name":"LIFX A19 Night Vision","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":112,"name":"LIFX BR30 Night Vision Intl","features":{"color":true,"chain":false,"matrix":false,"infrared":true,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":113,"name":"LIFX Mini WW US","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]},{"pid":114,"name":"LIFX Mini WW Intl","features":{"color":false,"chain":false,"matrix":false,"infrared":false,"multizone":false,"temperature_range":[1500,9000]},"upgrades":[]}]}`), &productMap)
if err != nil {
panic(err)
}
}