{"id":23120789,"url":"https://github.com/efc/homebridge-smooth-light","last_synced_at":"2026-05-15T20:32:24.881Z","repository":{"id":84572095,"uuid":"459454743","full_name":"efc/homebridge-smooth-light","owner":"efc","description":"Homebridge plugin for an HSV-capable light strip","archived":false,"fork":false,"pushed_at":"2022-02-15T09:00:43.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-07T22:17:32.537Z","etag":null,"topics":["homebridge","homekit","maker","neopixel-strips"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/efc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-02-15T06:26:31.000Z","updated_at":"2022-02-15T15:18:14.000Z","dependencies_parsed_at":"2024-02-21T07:00:17.699Z","dependency_job_id":null,"html_url":"https://github.com/efc/homebridge-smooth-light","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/efc/homebridge-smooth-light","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efc%2Fhomebridge-smooth-light","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efc%2Fhomebridge-smooth-light/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efc%2Fhomebridge-smooth-light/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efc%2Fhomebridge-smooth-light/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/efc","download_url":"https://codeload.github.com/efc/homebridge-smooth-light/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efc%2Fhomebridge-smooth-light/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33078899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:25:35.270Z","status":"ssl_error","status_checked_at":"2026-05-15T20:25:34.732Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["homebridge","homekit","maker","neopixel-strips"],"created_at":"2024-12-17T06:14:03.330Z","updated_at":"2026-05-15T20:32:24.876Z","avatar_url":"https://github.com/efc.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# homebridge-smooth-light\n[![NPM Version](https://img.shields.io/npm/v/homebridge-smooth-light.svg)](https://www.npmjs.com/package/homebridge-smooth-light)\n\n## Description\n\nThis [Homebridge](https://github.com/homebridge/homebridge) plugin exposes a web-based light strip to Apple's [HomeKit](http://www.apple.com/ios/home/). This plugin expects the light strip to expose a specific REST API to allow Homebridge to change the brightness and color of the device. It also expects that once the lock completes the requested action, it will inform a Homebridge \"listener\" which will then inform HomeKit of the light's new state.\n\n## Motivation\n\nWe built a light strip with a microcontroller and wanted to be able to control it with HomeKit. Homebridge looked like the best bet, but we wanted a light plugin that could allow our microcontroller to handle the color and brightness silmultaneously (so that we would always know what HomeKit intended for both). We also wanted to include a one-time token in each transaction between Homebridge and the device so that light would not accept instructions from an unknown source. We don't believe in security-by-firewall, we believe that we should not trust even our home network.\n\n## Installation\n\n1. Install [Homebridge](https://github.com/homebridge/homebridge#installation)\n2. Install this plugin in a directory on the same server\n3. Use `sudo npm link` to link that installation to your Node package manager\n4. Update your `config.json`\n\nNote, once we have a real NPM package available we should simplify this installation procedure.\n\n## Configuration\n\nThe configuration of each accessory using this plugin is done by directly editing a bit of JSON in the Homebridge application. The configuration will look something like this.\n\n```json\n\"accessories\": [\n     {\n       \"accessory\": \"SmoothLight\",\n       \"name\": \"Smooth Light\",\n       \"deviceRoot\": \"http://host.org:port/path\",\n     }\n]\n```\n### Core configuration\n\nNone of these core items have default values, so you must define them in the configuration.\n\n| Key          | Description                    |\n| ------------ | ------------------------------ |\n| `accessory`  | Must be `SmoothLight`          |\n| `name`       | Name to appear in the Home app |\n| `deviceRoot` | Root URL of your device        |\n\n### Optional configuration\n\nEach of these optional items either has a default value or is not necessary to the operation of the plugin. Of course, you may override any of these default values.\n\n| Key            | Description                                                                                   | Default    |\n| -------------- | --------------------------------------------------------------------------------------------- | ---------- |\n| `listenerPort` | Port for your HTTP listener (only one listener per port)                                      | `8282`     |\n| `pollInterval` | Time (in seconds) between device polls                                                        | `300`      |\n| `timeout`      | Time (in seconds) until the accessory will be marked as _Not Responding_ if it is unreachable | `3`        |\n| `method`       | HTTP method used to communicate with the device                                               | `GET`      |\n| `username`     | Username if HTTP authentication is enabled                                                    | N/A        |\n| `password`     | Password if HTTP authentication is enabled                                                    | N/A        |\n| `model`        | Appears under the _Model_ field for the accessory                                             | plugin     |\n| `serial`       | Appears under the _Serial_ field for the accessory                                            | deviceRoot |\n| `manufacturer` | Appears under the _Manufacturer_ field for the accessory                                      | author     |\n| `firmware`     | Appears under the _Firmware_ field for the accessory                                          | version    |\n| `tokenTimeout` | Time (seconds) until a validation token becomes invalid, use `0` to ignore validation tokens  | `2`        |\n\n## Device API\n\nThe device is the microcontroller managing the light itself. We expect that this device is on the network and running a web server capable of responding to the following REST requests.\n\n### Status\n```\n/status?token=RANDOM_STRING\n```\n\nAsks the device to report its status. The device will respond with JSON describing the on/off state as well as the hue, saturation, and brightness values.\n\n```\n{\n  \"is_on\": true,\n  \"hue\": 120.0,\n  \"saturation\": 100.0,\n  \"brightness\": 10.0\n}\n```\n\n### Set Hue\n\n```\n/hue/set/FLOAT_VALUE?token=RANDOM_STRING\n```\n\nAsks the device to set its hue to the given float value. This value should be in the range of 0 (red) to 120 (green) to 240 (blue) to 360 (red again). The response will be ignored. The `token` value will be one that the listener is prepared to validate with a `/validate` call.\n\n\n### Set Saturation\n\n```\n/saturation/set/FLOAT_VALUE?token=RANDOM_STRING\n```\n\nAsks the device to set its saturation to the given float value. This value should be in the range of 0 (white) to 100 (the current hue). The response will be ignored. The `token` value will be one that the listener is prepared to validate with a `/validate` call.\n\n\n### Set Brightness\n\n```\n/brightness/set/FLOAT_VALUE?token=RANDOM_STRING\n```\n\nAsks the device to set its brightness to the given float value. This value should be in the range of 0 (off) to 100 (as bright as possible). The response will be ignored. The `token` value will be one that the listener is prepared to validate with a `/validate` call.\n\nNote that a brightness value of 0 should turn the light off, but should probably keep the previously set brightness in place so that turning the light on again brings it directly back to the same brightness.\n\n\n## Listener API\n\nThe listener will be set up by this plugin using the Homebridge's own host name and the `listenerPort` supplied in the configuration. You will have to configure your device to communicate with this specific listener. The listener server responds to the following REST requests.\n\n\n### Validate\n\n```\n/validate?token=STRING\n```\n\nAsks the Homebridge listener to validate a token. The listener will respond with 1 if the token was valid or 0 if the token was invalid. This token should be the same token that the device received with the calls to its own API. The listener will respond `valid` if the token is valid, any other response should be considered invalid.\n\nNote that if the `tokenTimeout` supplied in the configuration is set to `0` (zero), then any string you try to validate will be accepted as valid. This effectively breaks security, but can make certain testing easier.\n\n## Changelog\n\n### 1.0.0\n\nInitial version. This plugin owes a lot to [homebridge-http-rgb-push](https://github.com/QuickSander/homebridge-http-rgb-push). While we made quite a few changes, that plugin showed us how all this fits together and works.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fefc%2Fhomebridge-smooth-light","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fefc%2Fhomebridge-smooth-light","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fefc%2Fhomebridge-smooth-light/lists"}