{"id":42761236,"url":"https://github.com/starwit/sae-position-source","last_synced_at":"2026-01-29T20:34:10.951Z","repository":{"id":306441700,"uuid":"1023691168","full_name":"starwit/sae-position-source","owner":"starwit","description":"Reads from a GPS receiver and outputs a stream of position messages.","archived":false,"fork":false,"pushed_at":"2025-09-11T08:26:55.000Z","size":126,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-11T11:39:36.193Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/starwit.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-21T14:42:42.000Z","updated_at":"2025-08-19T07:51:50.000Z","dependencies_parsed_at":"2025-08-19T00:08:08.551Z","dependency_job_id":null,"html_url":"https://github.com/starwit/sae-position-source","commit_stats":null,"previous_names":["starwit/sae-position-source"],"tags_count":11,"template":false,"template_full_name":"starwit/sae-stage-template","purl":"pkg:github/starwit/sae-position-source","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/starwit%2Fsae-position-source","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/starwit%2Fsae-position-source/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/starwit%2Fsae-position-source/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/starwit%2Fsae-position-source/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/starwit","download_url":"https://codeload.github.com/starwit/sae-position-source/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/starwit%2Fsae-position-source/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28884291,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T19:55:09.949Z","status":"ssl_error","status_checked_at":"2026-01-29T19:55:08.490Z","response_time":59,"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":[],"created_at":"2026-01-29T20:34:10.893Z","updated_at":"2026-01-29T20:34:10.945Z","avatar_url":"https://github.com/starwit.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SAE Position Source\nThis component provides geographical location for an SAE instance. It sends either a statically configured position, or reads from an USB GPS device.\n\n## Prerequisites\n- python 3.11, you can switch between python versions with pyenv:\n  - see https://github.com/pyenv/pyenv/wiki#suggested-build-environment\n  - `curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash`\n  - choose environment with `pyenv local 3.11.9`\n- Virtual env (e.g. sudo apt install python3.11-venv)\n- Install Poetry\n    ```\n    sudo apt install pipx\n    pipx install poetry==2.1.3\n    ```\n- Install Docker with compose plugin\n- Running instance of starwit-awareness-engine, anomaly detection and Valkey\n\n## Setup\n- Create virtual environment with `python3 -m venv .venv \u0026\u0026 source .venv/bin/activate`\n- Run `poetry install`, this should install all necessary dependencies\n- Run `poetry run python main.py`. If you see log messages like `Received anomaly message from pipeline`, everything works as intended.\n\n## Configuration\nThis code employs pydantic-settings for configuration handling. On startup, the following happens:\n1. Load defaults (see `config.py`)\n2. Read settings `settings.yaml` if it exists\n3. Search through environment variables if any match configuration parameters (converted to upper_snake_case, nested levels delimited by `__`), overwriting the corresponding setting\n4. Validate settings hierarchy if all necessary values are filled, otherwise Pydantic will throw a hopefully helpful error\n\nThe `settings.template.yaml` should always reflect a correct and fully fledged settings structure to use as a starting point for users.\n\n## Test GPS command reader\n- Use `[\"bash\", \"-c\", \"while IFS= read -r line; do echo \\\"$line\\\" | cut -d';' -f2-; sleep 0.1; done \u003c test.log\"]` as a command in your `settings.yaml` to feed a log file (with timestamps; remove the cut command if your log file contains just NMEA sentences) in 100ms intervals to the position source\n\n## Github Workflows and Versioning\n\nThe following Github Actions are available:\n\n* [PR build](.github/workflows/pr-build.yml): Builds python project for each pull request to main branch. `poetry install` and `poetry run pytest` are executed, to compile and test python code.\n* [Build and publish latest image](.github/workflows/build-publish-latest.yml): Manually executed action. Same like PR build. Additionally puts latest docker image to internal docker registry.\n* [Create release](.github/workflows/create-release.yml): Manually executed action. Creates a github release with tag, docker image in internal docker registry, helm chart in chartmuseum by using and incrementing the version in pyproject.toml. Poetry is updating to next version by using \"patch, minor and major\" keywords. If you want to change to non-incremental version, set version in directly in pyproject.toml and execute create release afterwards.\n\n## Dependabot Version Update\n\nWith [dependabot.yml](.github/dependabot.yml) a scheduled version update via Dependabot is configured. Dependabot creates a pull request if newer versions are available and the compilation is checked via PR build.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstarwit%2Fsae-position-source","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstarwit%2Fsae-position-source","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstarwit%2Fsae-position-source/lists"}