{"id":20690300,"url":"https://github.com/ftl/hamdeck","last_synced_at":"2025-07-30T01:36:21.421Z","repository":{"id":61014137,"uuid":"284103340","full_name":"ftl/hamdeck","owner":"ftl","description":"Control and automate your ham radio station using an Elgato Stream Deck device.","archived":false,"fork":false,"pushed_at":"2024-12-22T13:17:02.000Z","size":553,"stargazers_count":20,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-29T16:51:14.495Z","etag":null,"topics":["amateur-radio","amateurradio","ham-radio","hamradio","streamdeck"],"latest_commit_sha":null,"homepage":"","language":"Go","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/ftl.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}},"created_at":"2020-07-31T18:25:29.000Z","updated_at":"2025-01-17T17:04:31.000Z","dependencies_parsed_at":"2024-06-19T17:41:34.430Z","dependency_job_id":"64808faf-a0a8-4fa8-b96b-5f728a84e032","html_url":"https://github.com/ftl/hamdeck","commit_stats":{"total_commits":77,"total_committers":2,"mean_commits":38.5,"dds":"0.35064935064935066","last_synced_commit":"e94eaf92bb8f37be34c9653d05ca99b6ca1a95c3"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ftl%2Fhamdeck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ftl%2Fhamdeck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ftl%2Fhamdeck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ftl%2Fhamdeck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ftl","download_url":"https://codeload.github.com/ftl/hamdeck/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250284110,"owners_count":21405288,"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","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":["amateur-radio","amateurradio","ham-radio","hamradio","streamdeck"],"created_at":"2024-11-16T23:12:34.358Z","updated_at":"2025-04-22T16:56:16.451Z","avatar_url":"https://github.com/ftl.png","language":"Go","readme":"# HamDeck\n\nHamDeck allows you to control and automate your ham radio station using an Elgato Stream Deck device. You can define buttons using a JSON configuration file. HamDeck connects to the local pulseaudio server, to a Hamlib rigctld server, or to ExpertSDR through the TCI protocol. Currently the following actions are implemented as Stream Deck buttons:\n\n* Toggle the mute state of a pulseaudio sink, source, sink input, or source output.\n* Call any simple Hamlib set command (e.g. `vfo_op BAND_UP`).\n* Set the mode of your radio through Hamlib or TCI.\n* Switch to a specific frequency band through Hamlib or TCI.\n* Set the output power level of your radio through Hamlib or TCI.\n* Control the TX state (MOX) of your radio through Hamlib or TCI.\n* Select the VFO of your radio through Hamlib.\n* Get an indication on the mode buttons which modes are suitable to the current frequency according to the IARU Region 1 bandplan.\n* Jump to the center of the closest band portion suitable for your currently selected mode (press the mode button \u003e 1s).\n* Control the major volume of ExpertSDR through TCI.\n* Set a mode and a custom filter band through TCI.\n\nThis tool is written in Go on Linux. It might also work on OSX or Windows, but I did not try that out.\n\n## Build\n\nBinary data, e.g. icons, are stored in the sub-directories of `pkg/bindata`. All files are automatically embedded using the Go embed package (new with Go 1.16) when the `hamdeck` binary is compiled.\n\nTo build the `hamdeck` binary simply run\n\n```\ngo build\n```\n\n## Configuration\n\nHamDeck reads a JSON file on startup that must contain the definitions of all buttons. By default it uses the file `~/.config/hamradio/hamdeck.json`. The configuration file is not created automatically, you must create your configuration file manually. See [example_conf.json](./example_conf.json) for an example of a configuration file.\n\nWith the command line parameter `--config=\u003cconfig_filename.json\u003e` you can define an alternative configuration file. This is handy if you want to have several different setups of your Stream Deck (e.g. one for rag chewing and one for contest operation).\n\nThe buttons for Hamlib and TCI are only available if you provide a corresponding host address (and port if it deviates from the standard):\n\n* Use the `--hamilb` command line parameter to connect to a Hamlib rigctld server (e.g. `--hamlib=localhost:4532`).\n* Use the `--tci` command line parameter to connect to a ExpertSDR instance through the TCI protocol (e.g. `--hamlib=localhost:40001`).\n\nYou can have both connections open at the same time.\n\n## Install from Source\n\nThe following describes the steps how to install `hamdeck` on an Ubuntu 20.04 LTS (Focal Fossa) to start automatically when you plug-in your the Stream Deck device.\n\n1. Installing the binary:\n\n```\ngo install github.com/ftl/hamdeck\nwhich hamdeck\n```\n\nThe last command will give you the path to the installed binary, which you will need later.\n\n2. Adding UDEV rules for the stream deck\n\nCreate `/etc/udev/rules.d/99-hamdeck.rules` with the following content:\n\n```\nACTION==\"add\", SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"0fd9\", ATTRS{idProduct}==\"0060\", MODE:=\"666\", GROUP=\"plugdev\", SYMLINK=\"hamdeck\", TAG+=\"systemd\", ENV{SYSTEMD_WANTS}=\"hamdeck.service\"\nACTION==\"add\", SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"0fd9\", ATTRS{idProduct}==\"0063\", MODE:=\"666\", GROUP=\"plugdev\", SYMLINK=\"hamdeck\", TAG+=\"systemd\", ENV{SYSTEMD_WANTS}=\"hamdeck.service\"\nACTION==\"add\", SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"0fd9\", ATTRS{idProduct}==\"006c\", MODE:=\"666\", GROUP=\"plugdev\", SYMLINK=\"hamdeck\", TAG+=\"systemd\", ENV{SYSTEMD_WANTS}=\"hamdeck.service\"\nACTION==\"add\", SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"0fd9\", ATTRS{idProduct}==\"006d\", MODE:=\"666\", GROUP=\"plugdev\", SYMLINK=\"hamdeck\", TAG+=\"systemd\", ENV{SYSTEMD_WANTS}=\"hamdeck.service\"\n\nACTION==\"remove\", SUBSYSTEM==\"usb\", ENV{PRODUCT}==\"fd9/60/*\", TAG+=\"systemd\"\nACTION==\"remove\", SUBSYSTEM==\"usb\", ENV{PRODUCT}==\"fd9/63/*\", TAG+=\"systemd\"\nACTION==\"remove\", SUBSYSTEM==\"usb\", ENV{PRODUCT}==\"fd9/6c/*\", TAG+=\"systemd\"\nACTION==\"remove\", SUBSYSTEM==\"usb\", ENV{PRODUCT}==\"fd9/6d/*\", TAG+=\"systemd\"\n```\n\n(See [systemd devices](https://www.freedesktop.org/software/systemd/man/systemd.device.html) and [systemd #7587](https://github.com/systemd/systemd/issues/7587) for a little bit of background about the UDEV rules.)\n\n3. Adding a service definition for `hamdeck`\n\nCreate `/etc/systemd/system/hamdeck.service` with the following content:\n\n```\n[Unit]\nDescription=HamDeck\nAfter=syslog.target dev-streamdeck.device\nBindsTo=dev-hamdeck.device\n\n[Service]\nExecStart=\u003chamdeck binary, see above\u003e --syslog --config=\u003cyour config file\u003e\n```\n\n## Install the DEB Package\n\nUnder [https://github.com/ftl/hamdeck/releases/latest](https://github.com/ftl/hamdeck/releases/latest) you find the latest release of HamDeck als DEB package. This can be used to install HamDeck on distributions that are based on Debian (e.g. Ubuntu). The package installs the following files:\n\n* `/usr/bin/hamdeck` - the executable binary\n* `/lib/systemd/system/hamdeck.service` - the systemd service definition\n* `/lib/udev/99-hamdeck.rules` - the udev rules\n* `/usr/share/hamdeck/example_conf.json` - an example configuration that is used by the systemd service by default\n\nAfter installing the package, you should adapt `/lib/system/system/hamdeck.service` and `/usr/share/hamdeck/example_conf.json` according to your needs.\n\n## Links\n\n* [Wiki](https://github.com/ftl/hamdeck/wiki)\n\n## License\n\nThis tool is published under the [MIT License](https://www.tldrlegal.com/l/mit).\n\nThis repository and also the binary contains images from [https://material.io](https://material.io/resources/icons/), which are licensed under the [Apache license version 2.0](https://www.apache.org/licenses/LICENSE-2.0.html).\n\nThis repository and also the binary contains the DejaVuSans font version 2.37 from [https://dejavu-fonts.github.io/](https://dejavu-fonts.github.io/), which is licensed under a [free license](https://dejavu-fonts.github.io/License.html).\n\nCopyright [Florian Thienel](http://thecodingflow.com/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fftl%2Fhamdeck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fftl%2Fhamdeck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fftl%2Fhamdeck/lists"}