{"id":19878382,"url":"https://github.com/skrollme/homebridge-eveatmo","last_synced_at":"2026-04-03T13:02:02.025Z","repository":{"id":54861690,"uuid":"99036056","full_name":"skrollme/homebridge-eveatmo","owner":"skrollme","description":"Homebridge plugin which adds an old Netatmo weatherstation as HomeKit device and tries to act like Elgato Eve Room/Weather","archived":false,"fork":false,"pushed_at":"2026-03-27T15:17:20.000Z","size":422,"stargazers_count":72,"open_issues_count":6,"forks_count":7,"subscribers_count":10,"default_branch":"master","last_synced_at":"2026-03-28T00:46:43.425Z","etag":null,"topics":["homebridge","homebridge-netatmo","homebridge-plugin","homekit","netatmo","netatmo-weather-station"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/skrollme.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://www.paypal.me/skroll"]}},"created_at":"2017-08-01T19:29:55.000Z","updated_at":"2026-03-27T15:21:35.000Z","dependencies_parsed_at":"2025-02-23T19:11:53.538Z","dependency_job_id":"22cf6a11-2b09-480f-bf1a-97fac2d469cb","html_url":"https://github.com/skrollme/homebridge-eveatmo","commit_stats":{"total_commits":158,"total_committers":8,"mean_commits":19.75,"dds":"0.31645569620253167","last_synced_commit":"6369e987bcbbd4d63771345088a8ff4b6c74a62e"},"previous_names":[],"tags_count":68,"template":false,"template_full_name":null,"purl":"pkg:github/skrollme/homebridge-eveatmo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrollme%2Fhomebridge-eveatmo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrollme%2Fhomebridge-eveatmo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrollme%2Fhomebridge-eveatmo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrollme%2Fhomebridge-eveatmo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skrollme","download_url":"https://codeload.github.com/skrollme/homebridge-eveatmo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skrollme%2Fhomebridge-eveatmo/sbom","scorecard":{"id":830133,"data":{"date":"2025-08-11","repo":{"name":"github.com/skrollme/homebridge-eveatmo","commit":"e425824bbeb77a4e172263cf5cb83459c64de0e4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"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":"Maintained","score":5,"reason":"6 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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:14: update your workflow using https://app.stepsecurity.io/secureworkflow/skrollme/homebridge-eveatmo/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/skrollme/homebridge-eveatmo/build.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/build.yml:23","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":"Code-Review","score":1,"reason":"Found 2/19 approved changesets -- score normalized to 1","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":"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":"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 14 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3"],"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-23T17:33:31.449Z","repository_id":54861690,"created_at":"2025-08-23T17:33:31.449Z","updated_at":"2025-08-23T17:33:31.449Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31352315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T08:03:20.796Z","status":"ssl_error","status_checked_at":"2026-04-03T08:00:37.834Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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","homebridge-netatmo","homebridge-plugin","homekit","netatmo","netatmo-weather-station"],"created_at":"2024-11-12T17:05:25.158Z","updated_at":"2026-04-03T13:02:02.016Z","avatar_url":"https://github.com/skrollme.png","language":"JavaScript","funding_links":["https://www.paypal.me/skroll"],"categories":[],"sub_categories":[],"readme":"# homebridge-eveatmo\n\n[![npm](https://img.shields.io/npm/v/homebridge-eveatmo.svg?style=flat)](https://www.npmjs.com/package/homebridge-eveatmo)\n[![npm](https://img.shields.io/npm/dt/homebridge-eveatmo.svg?style=flat)](https://www.npmjs.com/package/homebridge-eveatmo)\n[![GitHub last commit](https://img.shields.io/github/last-commit/skrollme/homebridge-eveatmo.svg?style=flat)](https://github.com/skrollme/homebridge-eveatmo)\n[![verified-by-homebridge](https://img.shields.io/badge/homebridge-verified-blueviolet?color=%23491F59\u0026style=flat)](https://github.com/homebridge/homebridge/wiki/Verified-Plugins)\n\nThis is a [homebridge](https://github.com/nfarina/homebridge) plugin which lets you integrate your non-HomeKit Netatmo Weatherstation and Indoor Air Quality monitor into HomeKit.\n\nWhilst the original [homebridge-netatmo](https://github.com/planetk/homebridge-netatmo)-plugin goes a mostly HomeKit-standard approach (predefined services, characteristics, ...), this plugin tries to mimic the Elgato Eve devices as close as possible.\n\n## :rotating_light: Warning\n\nSince Netatmo announced a change to their authentication policies it was also necessary to update this plugin's authentication-mechanism.\n**From 1.0.0 it is not recommended to use username/password auth anymore although it is technically still supported in the latest release (1.1.0).**\n\nYou need to generate an OAuth _refresh_token_ on your app's page at [dev.netatmo.com](https://dev.netatmo.com/apps/) instead. For more details see the instructions below or take a look at this issue: \u003chttps://github.com/skrollme/homebridge-eveatmo/issues/62\u003e. Since some users have still unidentified problems with the new authentication-mechanism you can keep using the username/password auth, but it can be shut down by netatmo at any time.\n\n## Configuration\n\nBecause this plugin's base was taken from [homebridge-netatmo](https://github.com/planetk/homebridge-netatmo) (see above) you can adapt its config. Just use the plattform-code \"eveatmo\" and remove \"ttl\" and/or the other \"refresh_\" properties for the beginning.\n\nYou can also configure this plugin via [ConfigUI-X's settings](https://github.com/oznu/homebridge-config-ui-x/wiki/Developers:-Plugin-Settings-GUI) feature.\n\n``` json\n\"platforms\": [\n        {\n            \"platform\": \"eveatmo\",\n            \"name\": \"eveatmo platform\",\n            \"extra_co2_sensor\": false,\n            \"co2_alert_threshold\": 1000,\n            \"weatherstation\": true,\n            \"airquality\": false,\n            \"ttl\": 540,\n            \"log_info_msg\", true,\n            \"auth\": {\n              \"client_id\": \"XXXXX Create at https://dev.netatmo.com/\",\n                \"client_secret\": \"XXXXX Create at https://dev.netatmo.com/\",\n                \"refresh_token\": \"a valid refresh token for the given client_id\",\n                \"grant_type\": \"refresh_token\"\n                \n                ... or if you use password-grant ...\n                \n                \"client_id\": \"XXXXX Create at https://dev.netatmo.com/\",\n                \"client_secret\": \"XXXXX Create at https://dev.netatmo.com/\",\n                \"username\": \"your netatmo account's mail-address\",\n                \"password\": \"your netatmo account's password\",\n                \"grant_type\": \"password\"\n            }\n        }\n    ],\n```\n\n- **weatherstation** Enables support for Netatmo's WeatherStation. Default value is _true_\n- **airquality** Enables support for Netatmo's Indoor Air Quality monitor. Default value is _false_\n- **extra_aq_sensor: (optional)** Adds an extra AirQuality sensor which is available via Apple's stock Home.app, reporting CO2 level. Default value is _true_\n- **extra_co2_sensor: (optional)** Adds an extra CO2 sensor which is available via Apple's stock Home.app, too. Default value is _false_\n- **co2_alert_threshold (optional):** Sets the co2-level [ppm] at which the sensors switch to alert-state\n- **ttl: (optional)** Seconds between two Netatmo API polls. Lower is not neccessarily better! The weatherstation itself collects one value per 5minutes, so going below 300s makes no sense. Default value is _540_ (=9min)\n- **auth:** Credentials for the Netatmo API (see below)\n- **log_info_msg: (optional)** Outputs log messages with loglevel set to info. Default value is _true_\n- **module_suffix: (optional)** If this is set, the Netatmo's devicename will not be prepended to the modulename. Instead this config-value will be appended - with a space - to the module name\n\n### Control Accessories by device ID\n\nControlling devices can be done on a finer level by id. The id of a netatmo device or module basically is it's mac address.\n\nIn order to include or exclude a specific device, the corresponding id can be included in a whitelist resp. blacklist.\n\nIf the whitelist contains at least one entry, all other ids will be excluded.\n\n\u003cpre\u003e\n\n    \"platforms\": [\n        {\n            \"platform\": \"eveatmo\",\n\n            ...\n\n            \u003cb\u003e\"whitelist\": [\n              \"aa:bb:cc:11:22:33\"\n            ],\n            \"blacklist\": [\n              \"01:02:03:04:05:06\",\n              \"01:23:45:67:89:ab\"\n            ],\u003c/b\u003e\n\n            ...\n\n        }\n    ],\n\n\u003c/pre\u003e\n\n## Netatmo API authentication\n\nThere are two methods to authenticate against the Netatmo API, but first 4 steps are always the same:\n\n1. Register at \u003chttp://dev.netatmo.com\u003e as a developer\n2. After successful registration create your own app by using the menu entry \"CREATE AN APP\"\n3. On the following page, enter a name for your app. Any name can be chosen. All other fields of the form (like _callback_url_, etc.) can be left blank.\n4. After successfully submitting the form the overview page of your app should show _client_id_ and _client_secret_.\n\n### \"refresh_token\" grant\n\nThis one is **recommended** by Netatmo because it is more secure since you do not have to store your username and password in homebridge's config file.\nThe downside is, that it is a little bit less stable, especially when homebridge is not running constantly.\nThis is because the plugin always gets a short-lived token to fetch data for some time. When the token expires, the plugin has to fetch a new one from the API.\n\n1. Do an initial auth with the newly created app via the \"Token generator\" on your app's page \u003chttps://dev.netatmo.com/apps/\u003e to get a _refresh_token_\n2. Add the _client_id_, the _client_secret_ and the _refresh_token_ to the config's _auth_-section\n3. The plugin will use the _refresh_token_ from the config to retrieve and refresh _auth_tokens_. It will also store newly retrieved tokens in a file (_netatmo-token.js_) in your homebridge config directory. If you delete the _netatmo-token.js_ file, you may have to regenerate a new _refresh_token_ like in step 5) if your initial _refresh_token_ (from the _config.json_) already has expired\n\n### \"password\" grant\n\nThis one is my preferred method, because in a single-user scenario and a most likely \"at home and self-hosted\"-setup it is totally fine for me. Netatmo deprecated this method but it is usable in cases where the user (here: homebridge) and the account (where the weatherstation is linked to) are the same.\nSince this is the normal use-case for this homebridge-plugin I use this as long it is possible.\n\n1. Add the _client_id_, the _client_secret_, the _username_ (your account email) and the _password_ (your account password) to the config's _auth_-section\n\n### Retrieve _client_id_, _client_secret_ and _refresh_token_\n\n## Siri Voice Commands\n\nHere are sample English voice commands:\n\n- How cool is it in the ROOM NAME?\n- How warm is it in the ROOM NAME?\n- How humid is it in the ROOM NAME?\n- What's the temperature in my ROOM NAME?\n- What's the humidity in my ROOM NAME?\n- What's the air quality in my ROOM NAME?\n- What's the CO2 level in my ROOM NAME?\n- What's the carbon dioxide level in my ROOM NAME?\n\nSiri understands variations of each command:\n\n- What's the temperature ROOM NAME?\n- What's the temperature in ROOM NAME?\n- What's the temperature in my ROOM NAME?\n- What's the temperature in the ROOM NAME?\n- What's the temperature down in my ROOM NAME?\n- What's the temperature down in the ROOM NAME?\n\nSiri voice commands may vary by language. Since this plugin tries to mimic the Elgato Eve devices, you can search the Eve blog for articles listing voice commands in your language.\n\nBlog posts with English commands:\n\n- \u003chttps://blog.evehome.com/fun-with-siri/\u003e\n- \u003chttps://blog.evehome.com/tip-siri-names/\u003e\n\nBlog posts with German commands:\n\n- \u003chttps://blog.evehome.com/de/spass-mit-siri/\u003e\n- \u003chttps://blog.evehome.com/de/tipp-siri-namen/\u003e\n\n## Changelog\n\nsee [CHANGELOG.md](https://github.com/skrollme/homebridge-eveatmo/blob/master/CHANGELOG.md)\n\n## Thanks and disclaimer\n\nThis plugin's basic structure and most of its basic code is a fork (ok, lets say \"copy\") of [homebridge-netatmo](https://github.com/planetk/homebridge-netatmo). So big thanks to @planetk and all the other contributors of this project.\n\nAlso big thanks to @gomfunkel and @simont77 for [this gist](https://gist.github.com/gomfunkel/b1a046d729757120907c) and its [fork](https://gist.github.com/simont77/3f4d4330fa55b83f8ca96388d9004e7d), @KhaosT for [this gist](https://gist.github.com/KhaosT/e365acfd589ce840a403), @mplewis for [this gist](https://gist.github.com/mplewis/def678dc4b6e63a86905) and @0ff for [this (almost) working Eve Weather imitating homebridge-plugin](https://gist.github.com/0ff/668f4b7753c80ad7b60b) and once again special thanks to @simont77 for his endurance in digging deeper in Eve's custom characteristics and its protocols.\n\nThanks go also to the following direct contributors:\n\n- @jason-klein (\u003chttps://github.com/skrollme/homebridge-eveatmo/pull/28\u003e)\n- @lisanet (\u003chttps://github.com/skrollme/homebridge-eveatmo/pull/36\u003e)\n- @foliveira (\u003chttps://github.com/skrollme/homebridge-eveatmo/pull/52\u003e)\n- @RyanHS7VM (\u003chttps://github.com/skrollme/homebridge-eveatmo/pull/54\u003e)\n- @smhex (\u003chttps://github.com/skrollme/homebridge-eveatmo/pull/65\u003e)\n- @Tellicious (\u003chttps://github.com/skrollme/homebridge-eveatmo/pull/76\u003e)\n\n**Since Netatmo announced some changes on what kind of authentication their API will support and I did not found a good solution to override the code of the [netatmo](https://github.com/karbassi/netatmo)-dependency to continue working, this module contains an altered full-copy of the module. All credits for the original code go to the respective authors.**\n\n## What else\n\nLike this and want to express your feelings? Please buy me a beer :beers: ...\n\n[![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://www.paypal.me/skroll)\n\nCheers and Thanks go to:\n\n- @DJay79 :beers: :beers:\n- s.k**********r@aon.at :beers:\n- C. Schneider :beers:\n- S. Eisenkrämer :beers:\n- C. Kowalczyk :beers:\n- A. Svensson :beers:\n- C. Lorenz 💰\n- C. Groeber 💰\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskrollme%2Fhomebridge-eveatmo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskrollme%2Fhomebridge-eveatmo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskrollme%2Fhomebridge-eveatmo/lists"}