{"id":37085705,"url":"https://github.com/barleybobs/ecowater-softener","last_synced_at":"2026-01-14T10:32:38.736Z","repository":{"id":57425524,"uuid":"399819899","full_name":"barleybobs/ecowater-softener","owner":"barleybobs","description":"A small python library to pull data from Ecowater water softeners","archived":false,"fork":false,"pushed_at":"2024-10-01T20:51:33.000Z","size":57,"stargazers_count":10,"open_issues_count":2,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-27T17:55:38.351Z","etag":null,"topics":["ecowater","iot","python","python-library","water-softener"],"latest_commit_sha":null,"homepage":"https://github.com/barleybobs/ecowater-softener","language":"Python","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/barleybobs.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}},"created_at":"2021-08-25T12:59:08.000Z","updated_at":"2025-01-25T15:02:15.000Z","dependencies_parsed_at":"2022-08-29T22:00:10.332Z","dependency_job_id":null,"html_url":"https://github.com/barleybobs/ecowater-softener","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/barleybobs/ecowater-softener","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barleybobs%2Fecowater-softener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barleybobs%2Fecowater-softener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barleybobs%2Fecowater-softener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barleybobs%2Fecowater-softener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barleybobs","download_url":"https://codeload.github.com/barleybobs/ecowater-softener/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barleybobs%2Fecowater-softener/sbom","scorecard":{"id":225924,"data":{"date":"2025-08-11","repo":{"name":"github.com/barleybobs/ecowater-softener","commit":"be8be30d762aa19e3b0b78352ef146dd1ff2cafd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/29 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":"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":-1,"reason":"No tokens found","details":null,"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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: 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 'main'"],"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 2 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"}}]},"last_synced_at":"2025-08-17T03:48:57.550Z","repository_id":57425524,"created_at":"2025-08-17T03:48:57.550Z","updated_at":"2025-08-17T03:48:57.550Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28417486,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:25:19.714Z","status":"ssl_error","status_checked_at":"2026-01-14T10:22:49.371Z","response_time":107,"last_error":"SSL_read: 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":["ecowater","iot","python","python-library","water-softener"],"created_at":"2026-01-14T10:32:38.030Z","updated_at":"2026-01-14T10:32:38.728Z","avatar_url":"https://github.com/barleybobs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **V2.0.0 BREAKING CHANGES**\r\n**For version 2.0.0 the library has been rewritten and methods have changed.**\r\n\r\n# Ecowater Softener\r\n\r\necowater-softener is a Python library for collecting information from Ecowater water softeners.\r\n\r\n## Installation\r\n\r\nUse the package manager [pip](https://pip.pypa.io/en/stable/) to install ecowater.\r\n\r\n```bash\r\npip install ecowater-softener\r\n```\r\n\r\n## Usage\r\n\r\nLiquids are measured in **US Gallons**, liquid speeds are measured in **US Gallons per Minute (gpm)**, and weights are measured in **Pounds (lbs)**\r\n\r\nImporting the library\r\n\r\n```python\r\nimport ecowater_softener\r\n```\r\n\r\n### Account\r\n\r\nInitialize Ecowater account using username and password credentials\r\n\r\n```python\r\necowater_account = ecowater_softener.EcowaterAccount('username', 'password')\r\n```\r\n\r\n### Devices\r\n\r\nRetrieve a list of all devices associated with the Ecowater account\r\n\r\n```python\r\ndevices = ecowater_account.get_devices()\r\n```\r\n\r\nAccess the first device from the list of devices\r\n\r\n```python\r\ndevice = devices[0]\r\n```\r\n\r\nGet / Update the devices values (Needs to be ran before accessing data or the data will return None)\r\n\r\n```python\r\ndevice.update()\r\n```\r\n\r\n### Device Info\r\n\r\nGet the device model (string)\r\n\r\n```python\r\nmodel = device.model\r\n```\r\n\r\nGet the device serial number (string)\r\n\r\n```python\r\nserial_number = device.serial_number\r\n```\r\n\r\nGet the device software version (string)\r\n\r\n```python\r\nsoftware_version = device.software_version\r\n```\r\n\r\nGet the signal strength (rssi) (integer)\r\n\r\n```python\r\nrssi = device.rssi\r\n```\r\n\r\nGet the device ip address (string)\r\n\r\n```python\r\nip_address = device.ip_address\r\n```\r\n\r\n### Water\r\n\r\nGet the average daily water usage (integer)\r\n\r\n```python\r\nwater_use_avg_daily = device.water_use_avg_daily\r\n```\r\n\r\nGet the amount of water used today (integer)\r\n\r\n```python\r\nwater_use_today = device.water_use_today\r\n```\r\n\r\nGet the current amount of available water (integer)\r\n\r\n```python\r\nwater_available = device.water_available\r\n```\r\n\r\n### Water Flow\r\n\r\nGet the current water flow rate (float)\r\n\r\n```python\r\ncurrent_water_flow = device.current_water_flow\r\n```\r\n\r\n### Salt\r\n\r\nGet the current salt level as a percentage (float)\r\n\r\n```python\r\nsalt_level_percentage = device.salt_level_percentage\r\n```\r\n\r\nGet the number of days until the device runs out of salt (integer)\r\n\r\n```python\r\nout_of_salt_days = device.out_of_salt_days\r\n```\r\n\r\nGet the estimated date when the device will run out of salt (datetime.date)\r\n\r\n```python\r\nout_of_salt_date = device.out_of_salt_date\r\n```\r\n\r\nGet the salt type, either \"NaCl\" or \"KCl\" (string)\r\n\r\n```python\r\nsalt_type = device.salt_type\r\n```\r\n\r\n### Rock\r\n\r\nGet the average amount of rock removed daily (float)\r\n\r\n```python\r\nrock_removed_avg_daily = device.rock_removed_avg_daily\r\n```\r\n\r\nGet the total amount of rock removed by the device over its lifetime (float)\r\n\r\n```python\r\nrock_removed = device.rock_removed\r\n```\r\n\r\n### Recharge\r\n\r\nGet the recharge status, either \"None\", \"Scheduled\", or \"Recharging\" (string)\r\n\r\n```python\r\nrecharge_status = device.recharge_status\r\n```\r\n\r\nCheck if recharge is enabled (boolean)\r\n\r\n```python\r\nrecharge_enabled = device.recharge_enabled\r\n```\r\n\r\nCheck if a recharge is scheduled (boolean)\r\n\r\n```python\r\nrecharge_scheduled = device.recharge_scheduled\r\n```\r\n\r\nCheck if recharging currently (boolean)\r\n\r\n```python\r\nrecharge_recharging = device.recharge_recharging\r\n```\r\n\r\nGet the number of days since the last recharge was performed (integer)\r\n\r\n```python\r\nlast_recharge_days = device.last_recharge_days\r\n```\r\n\r\nGet the date of the last recharge (datetime.date)\r\n\r\n```python\r\nlast_recharge_date = device.last_recharge_date\r\n```\r\n\r\n\r\n\r\n\r\n\r\n## Credits\r\n\r\n-   [Kyle Johnson](https://github.com/kylejohnson) for his work on using python to interface with Ecowater water softeners. Most of this libraries code was originally built upon code which he wrote. You can read his article regarding scraping data from Ecowater water softeners at https://gnulnx.net/2020/02/18/ecowater-api-scraping/\r\n-   [@rewardone](https://github.com/rewardone) for creating [ayla-iot-unofficial](https://github.com/rewardone/ayla-iot-unofficial) which is used to fetch the data\r\n-   [Jeff Rescignano](https://github.com/JeffResc) for creating [sharkiq](https://github.com/JeffResc/sharkiq) which [ayla-iot-unofficial](https://github.com/rewardone/ayla-iot-unofficial) is based on.\r\n\r\n## Contributing\r\n\r\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\r\n\r\n## License\r\n\r\n[MIT](https://choosealicense.com/licenses/mit/)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarleybobs%2Fecowater-softener","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarleybobs%2Fecowater-softener","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarleybobs%2Fecowater-softener/lists"}