{"id":34023626,"url":"https://github.com/robamu-org/tmtccmd","last_synced_at":"2026-04-07T15:32:56.560Z","repository":{"id":37496883,"uuid":"348102825","full_name":"robamu-org/tmtccmd","owner":"robamu-org","description":"TMTC Commander Core","archived":false,"fork":false,"pushed_at":"2026-01-14T11:22:06.000Z","size":7266,"stargazers_count":23,"open_issues_count":0,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-16T21:31:27.111Z","etag":null,"topics":["ccsds","cfdp","communication","cubesat","ecss","pus-standard","python","space"],"latest_commit_sha":null,"homepage":"","language":"Python","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/robamu-org.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","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":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-03-15T19:47:55.000Z","updated_at":"2026-01-14T11:22:10.000Z","dependencies_parsed_at":"2023-10-04T16:23:10.297Z","dependency_job_id":"98bd51d3-7406-478b-838d-fa40165ce4f3","html_url":"https://github.com/robamu-org/tmtccmd","commit_stats":{"total_commits":1504,"total_committers":13,"mean_commits":115.6923076923077,"dds":0.2706117021276596,"last_synced_commit":"7c5a9a882e969964399d7047aaad885bdf775441"},"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"purl":"pkg:github/robamu-org/tmtccmd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robamu-org%2Ftmtccmd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robamu-org%2Ftmtccmd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robamu-org%2Ftmtccmd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robamu-org%2Ftmtccmd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robamu-org","download_url":"https://codeload.github.com/robamu-org/tmtccmd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robamu-org%2Ftmtccmd/sbom","scorecard":{"id":779723,"data":{"date":"2025-08-18","repo":{"name":"github.com/robamu-org/tmtccmd","commit":"ceee217fd48e9588deedd712eeece31e2662367f"},"scorecard":{"version":"v5.2.1-41-g40576783","commit":"40576783fda6698350fcbbeaea760ff827433034"},"score":3.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/13 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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#maintained"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#packaging"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#token-permissions"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#dangerous-workflow"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE-APACHE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE-APACHE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#branch-protection"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#vulnerabilities"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#binary-artifacts"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#fuzzing"}},{"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/ci.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/robamu-org/tmtccmd/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/robamu-org/tmtccmd/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/robamu-org/tmtccmd/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/robamu-org/tmtccmd/ci.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:24","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:25","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:29","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:38","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   4 pipCommand 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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T04:37:27.899Z","repository_id":37496883,"created_at":"2025-08-23T04:37:27.899Z","updated_at":"2025-08-23T04:37:27.899Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31518567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"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":["ccsds","cfdp","communication","cubesat","ecss","pus-standard","python","space"],"created_at":"2025-12-13T16:01:46.014Z","updated_at":"2026-04-07T15:32:56.555Z","avatar_url":"https://github.com/robamu-org.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e \u003cimg src=\"misc/logo.png\" width=\"40%\"\u003e \u003c/p\u003e\n\nTMTC Commander [![Documentation Status](https://readthedocs.org/projects/tmtccmd/badge/?version=latest)](https://tmtccmd.readthedocs.io/en/latest/?badge=latest)\n[![ci](https://github.com/robamu-org/tmtccmd/actions/workflows/ci.yml/badge.svg)](https://github.com/robamu-org/tmtccmd/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/robamu-org/tmtccmd/branch/main/graph/badge.svg?token=BVOE3A4WE4)](https://codecov.io/gh/robamu-org/tmtccmd)\n[![PyPI version](https://badge.fury.io/py/tmtccmd.svg)](https://badge.fury.io/py/tmtccmd)\n====\n\n## Overview\n\n- [Documentation](https://tmtccmd.readthedocs.io/en/latest/)\n- [Project Homepage](https://github.com/robamu-org/tmtccmd)\n\nThis is a small Python framework targeted towards the testing of remote systems like satellites\nand rovers. It simplifies sending and receiving TMTCs (Telemetry and Telecommands)\nand testing via different communication interfaces. This tool can be\nused either as a command line tool or as a GUI tool which requires a PyQt6 installation.\n\n## Features\n\n- Generic communication interface abstraction which can also be used without the other components\n  of the library if the goal is to separate the packet logic from the communication interface.\n  The dedicated documentation chapter contains a more information and examples.\n- Special support for [Packet Utilisation Standard (PUS)](https://ecss.nl/standard/ecss-e-st-70-41c-space-engineering-telemetry-and-telecommand-packet-utilization-15-april-2016/)\n  packets and [CCSDS Space Packets](https://public.ccsds.org/Pubs/133x0b2e1.pdf).\n  This library uses the [spacepackets](https://github.com/us-irs/py-spacepackets) library for most\n  packet implementations.\n- Support for both CLI and GUI usage.\n- Flexibility in the way to specify telecommands to send and how to handle incoming telemetry.\n  This is done by requiring the user to specify callbacks for both TC specification and TM handling.\n- One-Queue Mode for simple command sequences and Multi-Queue for more complex command sequences.\n- Listener mode to only listen to incoming telemetry.\n- Some components are tailored towards usage with the\n  [Flight Software Framework (FSFW)](https://absatsw.irs.uni-stuttgart.de/index.html) and the\n  [sat-rs framework](https://absatsw.irs.uni-stuttgart.de/sat-rs.html)\n\nThe framework currently supports the following communication interfaces (among others):\n\n1. TCP/IP with UDP and TCP. The TCP interface currently only supports sending CCSDS space packets\n   and is able to parse those packets from the received data stream.\n2. Serial Communication with a transport layer using [COBS](https://pypi.org/project/cobs/).\n\nIt is also possible to supply custom interfaces.\n\n## Examples\n\nThe [`examples`](https://github.com/robamu-org/tmtccmd/tree/main/examples) folder contains a simple\nexample using a  dummy communication interface. It sends a PUS ping telecommand and then reads the\nping reply and  the verification replies back from the dummy interface. Assuming, the package was\ninstalled in a virtual environment like shown in the [installation chapter](#install), it can be\nrun like this for the CLI mode:\n\n```sh\ncd examples\n./tmtcc.py\n```\n\nor like this for the GUI mode:\n\n```sh\ncd examples\n./tmtcc.py -g\n```\n\nThe [EIVE](https://egit.irs.uni-stuttgart.de/eive/eive-tmtc) and\n[SOURCE](https://git.ksat-stuttgart.de/source/tmtc) project implementation of the TMTC commander\nprovide more complex implementations.\n\n## Tests\n\nTo run the tests, install the test requirements first with the following command, assuming\na virtual environment:\n\n```sh\nuv pip install .[test]\n```\n\nAll tests are provided in the `src/test` folder and can be run with coverage information\nby running\n\n```sh\ncoverage run -m pytest\n```\n\nprovided that `pytest` and `coverage` were installed with\n\n```sh\nuv pip install coverage pytest\n```\n\n## \u003ca id=\"install\"\u003e\u003c/a\u003e Installation\n\nIt is recommended to use a virtual environment when installing this library. The steps here\nassume you have [set up and activated the environment](https://docs.python.org/3/tutorial/venv.html).\n\nTo install the full version with GUI support, run the following command to install from the cloned\nsource code\n\n```sh\nuv pip install .[gui]\n```\n\nYou can omit `[gui]` for a CLI only installation. Alternatively you can also install the package\nfrom PyPI with `pip install tmtccmd[gui]`.\n\n## Documentation\n\nThe documentation is built with Sphinx\n\nInstall the required dependencies first:\n\n```sh\nuv pip install -r docs/requirements.txt\n```\n\nThen the documentation can be built with\n\n```sh\ncd docs\nmake html\n```\n\nThe doctests can be run with the following command\n\n```sh\ncd docs\nmake doctest\n```\n\n## Using PyCharm\n\nWhen using PyCharm and running the application from PyCharm, it is recommended to set\nthe `Emulate terminal in output console` option. This is because packages like `prompt-toolkit`\nrequire a complete terminal for features like auto-complete to work.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobamu-org%2Ftmtccmd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobamu-org%2Ftmtccmd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobamu-org%2Ftmtccmd/lists"}