{"id":30692919,"url":"https://github.com/pytlicek/yaesu_con","last_synced_at":"2025-09-02T05:07:00.940Z","repository":{"id":311912712,"uuid":"1045564592","full_name":"Pytlicek/yaesu_con","owner":"Pytlicek","description":"FT991A Connection script","archived":false,"fork":false,"pushed_at":"2025-08-27T11:38:29.000Z","size":12,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-27T20:42:26.199Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Pytlicek.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}},"created_at":"2025-08-27T11:28:51.000Z","updated_at":"2025-08-27T11:38:32.000Z","dependencies_parsed_at":"2025-08-27T20:42:38.121Z","dependency_job_id":"7e792731-efac-4293-bca8-d132b33d3e94","html_url":"https://github.com/Pytlicek/yaesu_con","commit_stats":null,"previous_names":["pytlicek/yaesu_con"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Pytlicek/yaesu_con","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pytlicek%2Fyaesu_con","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pytlicek%2Fyaesu_con/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pytlicek%2Fyaesu_con/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pytlicek%2Fyaesu_con/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Pytlicek","download_url":"https://codeload.github.com/Pytlicek/yaesu_con/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pytlicek%2Fyaesu_con/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273233235,"owners_count":25068731,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-02T02:00:09.530Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2025-09-02T05:06:55.712Z","updated_at":"2025-09-02T05:07:00.925Z","avatar_url":"https://github.com/Pytlicek.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Yaesu FT-991A Symlink Helper\n\nThis Python script automatically creates and maintains a stable symlink to the USB–UART device  \n(Silicon Labs CP210x, `tty.SLAB_USBtoUART`) for use with [Hamlib](https://hamlib.github.io/) (`rigctl`).\n\nThe goal is to provide a consistent serial port path for applications connecting to a Yaesu FT-991A,  \nregardless of which `/dev/tty.SLAB_USBtoUART*` device node the OS assigns after reconnecting the radio.\n\n## Features\n\n- Scans for available `/dev/tty.SLAB_USBtoUART*` and `/dev/cu.SLAB_USBtoUART*` ports  \n- Tests each port using `rigctl` (`hamlib`) with the `f` (frequency) command  \n- If a working port is found, creates a symlink (`/tmp/tty.SLAB_USBtoUARTx`) pointing to the correct device  \n- If an existing symlink works, no changes are made  \n- If the linked port stops responding, the script searches for a new one and updates the symlink  \n\n## Requirements\n\n- Python 3.10+  \n- [Hamlib](https://hamlib.github.io/) installed (`rigctl` available in PATH)  \n- OS: macOS / Linux  \n- Radio: Yaesu FT-991A (Hamlib model ID `1035`)  \n\n## Installation\n\nClone the repository and make the script executable:\n\n```bash\ngit clone https://github.com/\u003cyour_repo\u003e/yaesu_symlink_helper.git\ncd yaesu_symlink_helper\nchmod +x 991a.py\n````\n\n## Usage\n\nRun manually:\n\n```bash\n./991a.py\n```\n\nThe result will be a symlink created (or maintained):\n\n```\n/tmp/tty.SLAB_USBtoUARTx -\u003e /dev/tty.SLAB_USBtoUART\n```\n\n### Cron job example\n\nIt is recommended to run the script periodically (e.g. once per minute) to ensure the symlink is always valid.\nAdd this to your crontab (`crontab -e`):\n\n```\n* * * * * /Users/tomas/Development/Python_Tools/yaesu_con/991a.py \u003e /var/log/flrig_991a.log 2\u003e\u00261\n```\n\nThis will check the port every minute and refresh the symlink if necessary.\n\n## Notes\n\n* The symlink is created in `/tmp`, which is cleared on reboot. The cron job will recreate it automatically.\n* On macOS, applications often work better with `/dev/cu.*` ports than with `/dev/tty.*`. The script tests both and uses whichever responds.\n* If you prefer a different symlink path (e.g. `/usr/local/dev/tty.SLAB_USBtoUARTx`) or need a different Hamlib model ID, adjust the constants in the script header.\n* On MacOS: `brew install autoconf automake pkg-config libev libfuse libusb` `brew install hamlib` or `brew update \u0026\u0026 brew upgrade hamlib`\n\n---\n\n⚡ If you don’t want to rely on cron, you can set up a persistent service:\n\n* `systemd` service on Linux\n* `launchd` plist on macOS\n  so the symlink is automatically maintained in the background.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpytlicek%2Fyaesu_con","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpytlicek%2Fyaesu_con","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpytlicek%2Fyaesu_con/lists"}