Skip to content

Commit

Permalink
Add information if color, infrared and multizone are supported
Browse files Browse the repository at this point in the history
  • Loading branch information
meisenzahl committed Jun 14, 2019
1 parent ead23a7 commit 99003f3
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/lifx/LifxLamp.vala
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,18 @@ namespace Lifx {
this._obj.set_boolean_member ("supportsInfrared", value);
}
}

public bool supports_multizone {
get {
if (!this._obj.has_member ("supportsMultizone")) {
this.supports_multizone = false;
}

return this._obj.get_boolean_member ("supportsMultizone");
}
set {
this._obj.set_boolean_member ("supportsMultizone", value);
}
}
}
}
72 changes: 72 additions & 0 deletions src/lifx/Packet.vala
Original file line number Diff line number Diff line change
Expand Up @@ -87,80 +87,152 @@ namespace Lifx {
case 33: // StateVersion
uint32 product = buffer.readUInt32LE (i + 4);
string model = "";
bool supports_color = false;
bool supports_infrared = false;
bool supports_multizone = false;

// https://lan.developer.lifx.com/v2.0/docs/lifx-products
switch (product) {
case 1:
model = "Original 1000";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
case 3:
model = "Color 650";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
case 10:
model = "White 800 (Low Voltage)";
supports_color = false;
supports_infrared = false;
supports_multizone = false;
break;
case 11:
model = "White 800 (High Voltage)";
supports_color = false;
supports_infrared = false;
supports_multizone = false;
break;
case 18:
model = "White 900 BR30 (Low Voltage)";
supports_color = false;
supports_infrared = false;
supports_multizone = false;
break;
case 20:
model = "Color 1000 BR30";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
case 22:
model = "Color 1000";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
case 27:
case 43:
model = "LIFX A19";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
case 28:
case 44:
model = "LIFX BR30";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
case 29:
case 45:
model = "LIFX+ A19";
supports_color = true;
supports_infrared = true;
supports_multizone = false;
break;
case 30:
case 46:
model = "LIFX+ BR30";
supports_color = true;
supports_infrared = true;
supports_multizone = false;
break;
case 31:
model = "LIFX Z";
supports_color = true;
supports_infrared = false;
supports_multizone = true;
break;
case 32:
model = "LIFX Z 2";
supports_color = true;
supports_infrared = false;
supports_multizone = true;
break;
case 36:
case 37:
model = "LIFX Downlight";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
case 38:
model = "LIFX Beam";
supports_color = true;
supports_infrared = false;
supports_multizone = true;
break;
case 49:
case 59:
model = "LIFX Mini";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
case 50:
case 60:
model = "LIFX Mini Day and Dusk";
supports_color = false;
supports_infrared = false;
supports_multizone = false;
break;
case 51:
case 61:
model = "LIFX Mini White";
supports_color = false;
supports_infrared = false;
supports_multizone = false;
break;
case 52:
model = "LIFX GU10";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
case 55:
model = "LIFX Tile";
supports_color = true;
supports_infrared = false;
supports_multizone = false;
break;
default:
model = "unknown";
supports_color = false;
supports_infrared = false;
supports_multizone = false;
break;
}
this.payload.set_string_member ("manufacturer", "LIFX");
this.payload.set_string_member ("model", model);
this.payload.set_boolean_member ("supportsColor", supports_color);
this.payload.set_boolean_member ("supportsInfrared", supports_infrared);
this.payload.set_boolean_member ("supportsMultizone", supports_multizone);
break;
case 107: // State
this.payload.set_int_member ("hue", buffer.readUInt16LE (i));
Expand Down
6 changes: 6 additions & 0 deletions src/lifx/Service.vala
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,19 @@ namespace Lifx {
if (this.thingMap.has_key (packet.target)) {
(this.thingMap.get (packet.target) as Lifx.LifxLamp).manufacturer = packet.payload.get_string_member ("manufacturer");
(this.thingMap.get (packet.target)as Lifx.LifxLamp).model = packet.payload.get_string_member ("model");
(this.thingMap.get (packet.target)as Lifx.LifxLamp).supports_color = packet.payload.get_boolean_member ("supportsColor");
(this.thingMap.get (packet.target)as Lifx.LifxLamp).supports_infrared = packet.payload.get_boolean_member ("supportsInfrared");
(this.thingMap.get (packet.target)as Lifx.LifxLamp).supports_multizone = packet.payload.get_boolean_member ("supportsMultizone");

this.onUpdatedThing (this.thingMap.get (packet.target));
} else {
var thing = new Lifx.LifxLamp ();
thing.id = packet.target;
thing.manufacturer = packet.payload.get_string_member ("manufacturer");
thing.model = packet.payload.get_string_member ("model");
thing.supports_color = packet.payload.get_boolean_member ("supportsColor");
thing.supports_infrared = packet.payload.get_boolean_member ("supportsInfrared");
thing.supports_multizone = packet.payload.get_boolean_member ("supportsMultizone");

this.thingMap.set (thing.id, thing);
this.onNewThing (thing);
Expand Down

0 comments on commit 99003f3

Please sign in to comment.