{"id":20159460,"url":"https://github.com/tritter/homebridge-brewer","last_synced_at":"2025-08-30T12:41:59.845Z","repository":{"id":55775230,"uuid":"344442410","full_name":"tritter/homebridge-brewer","owner":"tritter","description":"Coffee brewer home bridge plugin","archived":false,"fork":false,"pushed_at":"2023-06-30T05:38:24.000Z","size":2891,"stargazers_count":23,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-20T15:47:35.566Z","etag":null,"topics":["homebridge","homebridge-brewer","homebridge-plugins","machine","nespresso","nespresso-ble"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tritter.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}},"created_at":"2021-03-04T10:55:29.000Z","updated_at":"2024-10-15T00:39:45.000Z","dependencies_parsed_at":"2025-04-09T23:46:02.707Z","dependency_job_id":null,"html_url":"https://github.com/tritter/homebridge-brewer","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":"homebridge/homebridge-plugin-template","purl":"pkg:github/tritter/homebridge-brewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tritter%2Fhomebridge-brewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tritter%2Fhomebridge-brewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tritter%2Fhomebridge-brewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tritter%2Fhomebridge-brewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tritter","download_url":"https://codeload.github.com/tritter/homebridge-brewer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tritter%2Fhomebridge-brewer/sbom","scorecard":{"id":899162,"data":{"date":"2025-08-11","repo":{"name":"github.com/tritter/homebridge-brewer","commit":"8694b72d1144263f11f562220df1df9d4badc549"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.5,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/tritter/homebridge-brewer/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/tritter/homebridge-brewer/build.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/build.yml:24","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"13 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T14:53:30.429Z","repository_id":55775230,"created_at":"2025-08-24T14:53:30.429Z","updated_at":"2025-08-24T14:53:30.429Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272410638,"owners_count":24930278,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-27T02:00:09.397Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","homebridge-brewer","homebridge-plugins","machine","nespresso","nespresso-ble"],"created_at":"2024-11-14T00:08:13.958Z","updated_at":"2025-08-30T12:41:59.826Z","avatar_url":"https://github.com/tritter.png","language":"TypeScript","funding_links":["https://www.buymeacoffee.com/tritter"],"categories":[],"sub_categories":[],"readme":"# homebridge-brewer\n[![verified-by-homebridge](https://badgen.net/badge/homebridge/verified/purple)](https://github.com/homebridge/homebridge/wiki/Verified-Plugins)\n[![npm](https://img.shields.io/npm/v/homebridge-brewer.svg)](https://www.npmjs.com/package/homebridge-brewer) [![npm](https://img.shields.io/npm/dt/homebridge-brewer.svg)](https://www.npmjs.com/package/homebridge-brewer)\n\n\u003cimg src=\"https://github.com/tritter/homebridge-brewer/blob/master/.img/sample.jpg?raw=true\" height=250 \u003e\n\u003cimg src=\"https://github.com/tritter/homebridge-brewer/blob/master/.img/homekit.jpg?raw=true\" height=250 \u003e\n\n\n[Homebridge](https://github.com/nfarina/homebridge) plugin for brewing coffee with your Nespresso machines using [HomeKit](https://www.apple.com/ios/home/) accessories.\n\n## Features\nWith this plugin you can brew coffee using Siri and schedule your coffee within your 'Good Morning' Scene! The plugin exposes the following switches to Homekit: Ristretto, Espresso, Lungo, Americano, Water.\nBesides, there are also sensors: \n\n| Sensor | Description |\n|----------|----------|\n|Brewing| Opens whenever the brew starts, closes when the brew finishes. |\n|Descealing Needed| Opens whenever descealing is needed. |\n|No Capsules| Opens whenever you ran out of capsules. (Make sure to setup correctly) |\n|No Water| Opens whenever there is no water in the tank. |\n|Slider| Opens/Closes together with the capsule-slider on your machine. |\n|Tray Error| Opens whenever a capsule jams the tray or whenever the capsule tray is full. |\n\n### Capsule Count\nThe status of the capsule count is reflected using the battery level inside the Home App. By default the 'max_capsule_count' count is 0, this is the maximum number your machine can decrement. First make sure to setup the amount of capsules left inside the Nespresso App. *Whenever this plugin runs, you can't connect via the app, because the machine can only connect one device at a time!*\n\n\u003cimg src=\"https://github.com/tritter/homebridge-brewer/blob/master/.img/capsules_left.jpg?raw=true\" height=250 \u003e\n\nLet's say 500. This means that the battery percentage will be 50%; 500 capsules left of the max_capsule_count 1000. Below 10% Homekit will provide a low battery warning to remind you to order new cups.\n\n## Installation\nMake sure your system matches the prerequisites. Also when using a weaker Bluetooth Homekit-Server (especially a Raspberry Pi), make sure its *close to the machine* before taking it furhter away. The Nespresso machines require a strong connection otherwise you will see random disconnects before the brew even started. Whenever it works you can try to move the Homekit-Server further away.\n\n[Noble](https://github.com/noble/noble) is BLE central module library for [Node.js](https://nodejs.org/) used to communicate with the coffee machines.\n\n These libraries and their dependencies are required by the [Noble](https://www.npmjs.com/package/noble) library and provide access to the kernel Bluetooth subsystem:\n\n```sh\nsudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev\n```\n\nFor more information see the [Noble documentation](https://github.com/noble/noble#readme).\n\n### Install homebridge and this plugin\n```\n[sudo] npm install -g --unsafe-perm homebridge\n[sudo] npm install -g --unsafe-perm homebridge-brewer\n```\n\n## Homebridge configuration\nUpdate your Homebridge `config.json` file. See [config-sample.json](config-sample.json) for a complete example.\n\n```json\n\"platforms\": [\n        {\n            \"machines\": [\n                {\n                    \"name\": \"Expert_AHD34DDBADCC\",\n                    \"token\": \"DA-03-4B-BB-AA-CC-AA-CC\",\n                    \"temperature\": \"Medium\"\n                }\n            ],\n            \"platform\": \"Brewer\"\n        }\n    ],\n```\n\n\n| Key                     | Default         | Description                                                                                                                                                                                                 |\n|-------------------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `Brewer`|\"Brewer\"| Mandatory. The name provided to Homebridge. Must be \"Brewer\".|\n| `machines`|[]|Array of configured machines, is needed if you want to display one. (Multiple are supported)|\n| `displayName`|\"Coffee\"| The name of this accessory. This will appear in your Home-app. \n| `name`|| Mandatory. The bluetooth name of the machine, can be found on your phone or pc, or any bluetooth discovery app. (see below)\n| `token`||Authentication token which is required to send any commands see below ho to gather one. Make sure the format is exactly \"XX-XX-XX-XX-XX-XX-XX-XX\"|\n| `temperature`|\"Medium\"| Mandatory. The temperature which is used to brew your coffees. Can be set to \"Low\", \"Medium\" and \"High\".\n| `disabled_beverages`|[]| Optional. Disable the exposed switches, can be set to a list of items that shouldn't be exposed to the Home-app: [\"ristretto\", \"espresso\", \"lungo\", \"americano\", \"water\"]\n| `max_capsule_count`|0| Optional. Set your maximum capsule count. The capsule count is displayed as battery percentage: 500 of 1000 (capsule_count) == 50%. Value can be between 1-1000, 0 is disabled (default)\n\n## Name\nYou can find the name quite easily add the platform and check the homebridge log. If your homebridge server has bluetooth enabled and is close enough to the machine you will see something like this:\n```[3/19/2021, 9:19:27 PM] [Brewer] Found new device, please add configuration for: \"Expert_AHD34DDBADCC\"```\nThe value \"Expert_AHD34DDBADCC\" should be used for the name in the configuration.\n\n\n## Token\n-----------------\nIn order to retrieve the [token](https://gist.github.com/farminf/94f681eaca2760212f457ac59da99f23) (you need to snoop the bluetooth packets:\n\n* Use an Android-Phone\n* Go to developer options in settings, enable [BLE HCI snoop](https://urish.medium.com/reverse-engineering-a-bluetooth-lightbulb-56580fcb7546)\n* Start the Nespresso App (you need to have registered this and connected to your machine already)\n* Brew a cup of coffee\n* Stop BLE HCI snoop.\n* Connect the mobile to USB/PC and copy or email the file (location: \\\\#{name}\\Phone\\Android\\data\\btsnoop_hci.log)\n* Use the shell to extract find the token:\n```\nhexdump -v -e '/1 \"%02X \"' btsnoop_hci.log | grep -o '0B 00 04 00 12 14 00 \\\u003c.. .. .. .. .. .. .. ..\\\u003e'\n```\nThis will search hexdump the log file (btsnoop_hci.log) and then grep for the sequence and 8bytes wildcards \u003c..\u003e, which is the authKey. Write between the bytes dashes to match the pattern which is required by this plugin. For example you will find:\n```\n0B 00 04 00 12 14 00 DA 03 4B BB AA CC AA CC\n```\nTake the last part (8 bytes) to creat the token:\n\n`DA-03-4B-BB-AA-CC-AA-CC`\n\n\n## Legal\n\n*Nespresso* is an registered trademarks of Nestlé Nespresso S.A.\n\nThis project is in no way affiliated with, authorized, maintained, sponsored or endorsed by *Nespresso* or any of its affiliates or subsidiaries.\n\n## Credits\nThese users/repositories helped making the Homekit integration possible:\n\n[@farminf](https://gist.github.com/farminf) - https://gist.github.com/farminf/94f681eaca2760212f457ac59da99f23\n\n[@fsalomon](https://github.com/fsalomon/nespresso-expert-ble/commits?author=fsalomon) - https://github.com/fsalomon/nespresso-expert-ble\n\n[@petergullberg](https://github.com/petergullberg) - https://github.com/petergullberg/brewbutton\n\nAnd me and yes, I like coffe ;)\n\u003cbr\u003e[\u003cimg src=\"https://github.com/tritter/homebridge-brewer/blob/master/.img/coffee-button.png?raw=true\" height=50 \u003e](https://www.buymeacoffee.com/tritter)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftritter%2Fhomebridge-brewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftritter%2Fhomebridge-brewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftritter%2Fhomebridge-brewer/lists"}