set_state
Control LIFX smart lights by adjusting power, color, brightness, and infrared settings for selected lights.
Instructions
Set the state of lights
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | LIFX API token | |
| selector | No | Selector for filtering lights (default: 'all') | |
| power | No | Power state | |
| color | No | Color string | |
| brightness | No | Brightness (0.0 to 1.0) | |
| duration | No | Duration in seconds | |
| infrared | No | Infrared brightness (0.0 to 1.0) | |
| fast | No | Fast mode (skip confirmation) |
Implementation Reference
- src/index.ts:299-329 (handler)The handler for the 'set_state' tool. Parses arguments, builds request body excluding undefined values, sends PUT request to LIFX /lights/{selector}/state endpoint, and returns success message with response.case "set_state": { const { token, selector = "all", ...stateParams } = args as { token: string; selector?: string; power?: string; color?: string; brightness?: number; duration?: number; infrared?: number; fast?: boolean; }; const body = Object.fromEntries( Object.entries(stateParams).filter(([_, value]) => value !== undefined) ); const result = await makeLIFXRequest(`/lights/${selector}/state`, { method: "PUT", body, token, }); return { content: [ { type: "text", text: `State updated successfully for selector "${selector}". ${JSON.stringify(result, null, 2)}`, }, ], }; }
- src/index.ts:154-172 (registration)Registration of the 'set_state' tool in the list_tools response, including name, description, and input schema definition.{ name: "set_state", description: "Set the state of lights", inputSchema: { type: "object", properties: { token: { type: "string", description: "LIFX API token" }, selector: { type: "string", description: "Selector for filtering lights (default: 'all')" }, power: { type: "string", enum: ["on", "off"], description: "Power state" }, color: { type: "string", description: "Color string" }, brightness: { type: "number", minimum: 0, maximum: 1, description: "Brightness (0.0 to 1.0)" }, duration: { type: "number", minimum: 0, description: "Duration in seconds" }, infrared: { type: "number", minimum: 0, maximum: 1, description: "Infrared brightness (0.0 to 1.0)" }, fast: { type: "boolean", description: "Fast mode (skip confirmation)" }, }, required: ["token"], }, }, {
- src/index.ts:72-114 (helper)Helper function used by the set_state handler (and others) to make authenticated HTTP requests to the LIFX API.async function makeLIFXRequest( endpoint: string, options: { method?: string; body?: any; token: string; } ): Promise<any> { const { method = "GET", body, token } = options; const url = `${LIFX_API_BASE}${endpoint}`; const headers: Record<string, string> = { "Authorization": `Bearer ${token}`, "User-Agent": USER_AGENT, }; if (body && (method === "POST" || method === "PUT")) { headers["Content-Type"] = "application/json"; } try { const response = await fetch(url, { method, headers, body: body ? JSON.stringify(body) : undefined, }); if (!response.ok) { const errorText = await response.text(); throw new Error(`LIFX API error: ${response.status} ${response.statusText} - ${errorText}`); } // Some endpoints return empty responses const contentType = response.headers.get("content-type"); if (contentType?.includes("application/json")) { return await response.json(); } return await response.text(); } catch (error) { throw new Error(`Failed to make LIFX API request: ${error instanceof Error ? error.message : String(error)}`); } }