{"id":37074582,"url":"https://github.com/digidotcom/python-devicecloud","last_synced_at":"2026-01-14T08:47:18.094Z","repository":{"id":20798861,"uuid":"24084177","full_name":"digidotcom/python-devicecloud","owner":"digidotcom","description":"Python client library for the Digi Device Cloud Web Services API","archived":false,"fork":false,"pushed_at":"2025-09-04T06:55:11.000Z","size":7774,"stargazers_count":39,"open_issues_count":3,"forks_count":19,"subscribers_count":45,"default_branch":"master","last_synced_at":"2026-01-09T10:28:08.553Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.digi.com/cloud/digi-device-cloud","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/digidotcom.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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":"2014-09-16T03:36:58.000Z","updated_at":"2025-09-03T23:53:18.000Z","dependencies_parsed_at":"2024-06-21T20:40:56.429Z","dependency_job_id":null,"html_url":"https://github.com/digidotcom/python-devicecloud","commit_stats":{"total_commits":214,"total_committers":24,"mean_commits":8.916666666666666,"dds":0.6308411214953271,"last_synced_commit":"a962ae34f2f919eb094c669e383e5a9e4d29a711"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/digidotcom/python-devicecloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digidotcom%2Fpython-devicecloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digidotcom%2Fpython-devicecloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digidotcom%2Fpython-devicecloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digidotcom%2Fpython-devicecloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/digidotcom","download_url":"https://codeload.github.com/digidotcom/python-devicecloud/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digidotcom%2Fpython-devicecloud/sbom","scorecard":{"id":341864,"data":{"date":"2025-08-11","repo":{"name":"github.com/digidotcom/python-devicecloud","commit":"4940d6f6364a79900a12281c1b243f6c9d42638c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.6,"checks":[{"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":"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":"Code-Review","score":0,"reason":"Found 1/27 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":"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":"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: pipCommand not pinned by hash: make.sh:4","Warn: pipCommand not pinned by hash: make.sh:5","Warn: downloadThenRun not pinned by hash: toxtest.sh:19","Warn: pipCommand not pinned by hash: toxtest.sh:42","Info:   0 out of   3 pipCommand dependencies pinned","Info:   0 out of   1 downloadThenRun 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":"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: Mozilla Public 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 4 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":0,"reason":"17 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2024-230 / GHSA-248v-346w-9cwc","Warn: Project is vulnerable to: PYSEC-2022-42986 / GHSA-43fp-rhv2-5gv8","Warn: Project is vulnerable to: PYSEC-2023-135 / GHSA-xqr8-7jwr-rhp7","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: PYSEC-2023-207 / GHSA-gwvm-45gx-3cf8","Warn: Project is vulnerable to: PYSEC-2019-133 / GHSA-mh33-7rrq-662w","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2019-132 / GHSA-r64q-w8jr-g9qp","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f","Warn: Project is vulnerable to: PYSEC-2020-148 / GHSA-wqvq-5m8c-6g24","Warn: Project is vulnerable to: PYSEC-2018-32 / GHSA-www2-v7xj-xrc6","Warn: Project is vulnerable to: PYSEC-2021-108"],"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-18T06:05:50.828Z","repository_id":20798861,"created_at":"2025-08-18T06:05:50.828Z","updated_at":"2025-08-18T06:05:50.828Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414693,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","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":[],"created_at":"2026-01-14T08:47:15.286Z","updated_at":"2026-01-14T08:47:18.079Z","avatar_url":"https://github.com/digidotcom.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Python Device Cloud Library\n===========================\n\n[![Latest Version](https://img.shields.io/pypi/v/devicecloud.svg)](https://pypi.python.org/pypi/devicecloud/)\n[![License](https://img.shields.io/badge/license-MPL%202.0-blue.svg)](https://github.com/digidotcom/python-devicecloud/blob/master/LICENSE)\n\nBe sure to check out the [full documentation](https://digidotcom.github.io/python-devicecloud). A [Changelog](https://github.com/digidotcom/python-devicecloud/blob/master/CHANGELOG.md) is also available.\n\nOverview\n--------\n\nPython-devicecloud is a library providing simple, intuitive access to [Digi Remote Manager](https://www.digi.com/products/iot-software-services/digi-remote-manager) for clients written in Python.\n\nThe library wraps Digi Remote Manager's REST API and hides the details of forming HTTP requests in order to gain access to device information, file data, streams, and other features of Digi Remote Manager. The API can be found [here](https://doc-remotemanager.digi.com/).\n\nThe primary target audience for this library is individuals interfacing with Digi Remote Manager from the server side or developers writing tools to aid device development.\n\nExample\n-------\n\nThe library provides access to a wide array of features, but here is a couple quick examples to give you a taste of what the API looks like.\n\n```python\nfrom devicecloud import DeviceCloud\n\ndc = DeviceCloud('user', 'pass')\n\n# show the MAC address of all devices that are currently connected\n#\n# This is done using Device Cloud DeviceCore functionality\nprint \"== Connected Devices ==\"\nfor device in dc.devicecore.get_devices():\n    if device.is_connected():\n        print device.get_mac()\n\n# get the name and current value of all data streams having values\n# with a floating point type\n#\n# This is done using Device Cloud stream functionality\nfor stream in dc.streams.get_streams():\n    if stream.get_data_type().lower() in ('float', 'double'):\n        print \"%s -\u003e %s\" % (stream.get_stream_id(), stream.get_current_value())\n```\n\nFor more examples and detailed documentation, be sure to check out the [Full API Documentation](https://digidotcom.github.io/python-devicecloud).\n\nInstallation\n------------\n\nThis library can be installed using [pip](https://github.com/pypa/pip). Python versions 2.7+ and 3+ are supported by the library.\n\n```sh\npip install devicecloud\n```\n\nIf you already have an older version of the library installed, you can upgrade to the latest version by doing\n\n```sh\npip install --upgrade devicecloud\n```\n\nSupported Features\n------------------\n\nEventually, it is hoped that there will be complete feature parity between Device Cloud API and this library.  For now, however, that is not the case.  The current features are supported by the library:\n\n* Getting basic device information via DeviceCore\n* Provision and Delete devices via DeviceCore\n* Listing devices associated with a device cloud account\n* Interacting with Device Cloud Data Streams\n  * Create Streams\n  * Get Stream (by id)\n  * List all streams\n  * Get metadata for a stream\n  * Write a single datapoint to a stream\n  * Write many datapoints to a stream (homogeneous bulk write)\n  * Write many datapoints to multiple streams (heterogeneous bulk write)\n  * Read data points from a stream (includes control over order of\n    returned data set as well as allowing for retrieving data\n    roll-ups, etc.)\n* Support for accessing Device Cloud FileData store\n  * Get filedata matching a provided condition (path, file extension,\n    size, etc.)\n  * Write files to filedata store\n  * Recursively walk filedata directory tree from some root location\n  * Get full metadata and contents of files and directories.\n* Low level support for performing basic SCI commands with limited parsing\n  of results and support for only a subset of available services/commands.\n* APIs to make direct web service calls to Device Cloud with some details\n  handled by the library (see DeviceCloudConnection and 'ws' documentation)\n* Device Provisioning via Mac Address, IMEI or Device ID\n* Monitors\n* Creating a TCP or HTTP monitor\n\nThe following features are *not* supported at this time.  Feedback on\nwhich features should be highest priority is always welcome.\n\n* Alarms\n* Scheduled Operations\n* Asynchronous SCI requests\n* High level access to many SCI/RCI operations\n* DeviceMetaData\n* DeviceVendor\n* FileDataHistory\n* NetworkInterface support\n* XBee specific support (XBeeCore)\n* Smart Energy APIs\n* SMS Support\n* SM/UDP Support\n* Carrier Information Access\n\nContributing\n------------\n\nContributions to the library are very welcome in whatever form can be provided.  This could include issue reports, bug fixes, or features additions.  For issue reports, please [create an issue against the Github project](https://github.com/digidotcom/python-devicecloud/issues).\n\nFor code changes, feel free to fork the project on Github and submit a pull request with your changes.  Additional instructions for developers contributing to the project can be found in the [Developer's Guide](https://github.com/digidotcom/python-devicecloud/blob/master/CONTRIBUTING.md).\n\nLicense\n-------\n\nThis software is open-source software.\n\nCopyright (c) 2015-2025 Digi International Inc.\n\nThis Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain one at https://mozilla.org/MPL/2.0/.\n\nDigi, Digi International, the Digi logo, the Digi website, Digi Device Cloud, Digi Remote Manager, and Digi Cloud Connector are trademarks or registered trademarks of Digi International Inc. in the United States and other countries worldwide. All other trademarks are the property of their respective owners.\n\nTHE SOFTWARE AND RELATED TECHNICAL INFORMATION IS PROVIDED \"AS IS\"\nWITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT\nLIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL DIGI OR ITS\nSUBSIDIARIES BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT\nOF OR IN CONNECTION WITH THE SOFTWARE AND TECHNICAL INFORMATION\nHEREIN, INCLUDING ALL SOURCE AND OBJECT CODES, IRRESPECTIVE OF HOW IT\nIS USED. YOU AGREE THAT YOU ARE NOT PROHIBITED FROM RECEIVING THIS\nSOFTWARE AND TECHNICAL INFORMATION UNDER UNITED STATES AND OTHER\nAPPLICABLE COUNTRY EXPORT CONTROL LAWS AND REGULATIONS AND THAT YOU\nWILL COMPLY WITH ALL APPLICABLE UNITED STATES AND OTHER COUNTRY EXPORT\nLAWS AND REGULATIONS WITH REGARD TO USE AND EXPORT OR RE-EXPORT OF THE\nSOFTWARE AND TECHNICAL INFORMATION.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigidotcom%2Fpython-devicecloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdigidotcom%2Fpython-devicecloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigidotcom%2Fpython-devicecloud/lists"}