{"id":13581992,"url":"https://github.com/dh1tw/remoteRotator","last_synced_at":"2025-04-06T10:33:11.499Z","repository":{"id":77272364,"uuid":"102233442","full_name":"dh1tw/remoteRotator","owner":"dh1tw","description":"remoteRotator lets you expose a local antenna rotator (azimuth / elevation) to the network","archived":false,"fork":false,"pushed_at":"2024-09-03T21:09:20.000Z","size":10721,"stargazers_count":44,"open_issues_count":5,"forks_count":5,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-11-05T21:45:35.760Z","etag":null,"topics":["amateur-radio","antenna","golang","hamradio","rotator-controller","tcp"],"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/dh1tw.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":"2017-09-03T01:27:02.000Z","updated_at":"2024-09-03T21:09:18.000Z","dependencies_parsed_at":"2024-06-20T05:54:20.331Z","dependency_job_id":"0ef5706a-15f7-4e39-8a30-9326a416d9ac","html_url":"https://github.com/dh1tw/remoteRotator","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dh1tw%2FremoteRotator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dh1tw%2FremoteRotator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dh1tw%2FremoteRotator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dh1tw%2FremoteRotator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dh1tw","download_url":"https://codeload.github.com/dh1tw/remoteRotator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247470564,"owners_count":20944146,"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","antenna","golang","hamradio","rotator-controller","tcp"],"created_at":"2024-08-01T15:02:22.228Z","updated_at":"2025-04-06T10:33:08.969Z","avatar_url":"https://github.com/dh1tw.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# RemoteRotator\n\n![Build Status](https://github.com/dh1tw/remoteRotator/workflows/Cross%20Platform%20build/badge.svg?branch=master)\n[![Go Report Card](https://goreportcard.com/badge/github.com/dh1tw/remoteRotator)](https://goreportcard.com/report/github.com/dh1tw/remoteRotator)\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://img.shields.io/badge/license-MIT-blue.svg)\n[![Coverage Status](https://coveralls.io/repos/github/dh1tw/remoteRotator/badge.svg?branch=master)](https://coveralls.io/github/dh1tw/remoteRotator?branch=master)\n[![Downloads](https://img.shields.io/github/downloads/dh1tw/remoteRotator/total.svg?maxAge=1800)](https://github.com/dh1tw/remoteRotator/releases)\n\n[![Alt text](https://i.imgur.com/lcHhslZ.png \"remoteRotator WebUI\")](https://demo.rotator.shackbus.org)\n\nremoteRotator is a command line application that makes your azimuth / elevation antenna rotators available on the network. \nIt is available for Linux/Windows/MacOS and is written in the programming language [Go](https://golang.org).\n\nTo get a first impression, you're welcome to play with our public demo at [demo.rotator.shackbus.org](https://demo.rotator.shackbus.org).\n\n## Supported Rotators\n\nremoteRotator supports the following protocols:\n- [Yaesu GS-232A](https://www.yaesu.com/downloadFile.cfm?FileID=820\u0026FileCatID=155\u0026FileName=GS232A.pdf\u0026FileContentType=application%2Fpdf)\n- [Yaesu GS-232B](https://www.passion-radio.com/index.php?controller=attachment\u0026id_attachment=782)\n\nThis is a list of rotator controllers that are known to work well with remoteRotator:\n- [Yaesu Control Interfaces](https://www.yaesu.com/downloadFile.cfm?FileID=820\u0026FileCatID=155\u0026FileName=GS232A.pdf\u0026FileContentType=application%2Fpdf)\n- [K3NG Open Source Rotator Controller (implements Yaesu GS232A)](https://github.com/k3ng/k3ng_rotator_controller)\n- [RemoteQTH Azimuth Rotator Interface (K3NG firmware)](https://remoteqth.com/single-rotator-interface.php)\n- [EA4TX ARS (implements Yaesu GS232A)](https://ea4tx.com/en/)\n- [ERC Easy-Rotator-Control (implements Yaesu GS232A)](https://www.schmidt-alba.de/eshop/)\n- [CG Antenna RTC-200 (implements Yaesu GS232B)](https://www.cgantenna.be/product_rtc200.html)\n- Dummy rotator (great for playing around with remoteRotator)\n\nIf your rotator controller is not supported, feel free to open an [issue](https://github.com/dh1tw/remoteRotator/issues).\nIt is relatively easy to add more rotator controllers / protocols.\n\n## Supported Transportation Protocols\n\n- [NATS](https://nats.io) (preferred)\n- HTTP + Websockets + MDNS (will be deprecated)\n\n# License\n\nremoteRotator is published under the permissive [MIT license](https://github.com/dh1tw/remoteRotator/blob/master/LICENSE).\n\n## Download\n\nYou can download a tarball / zip archive with the compiled binary for\n\n- MacOS (amd64)\n- Linux (arm,386,amd64)\n- Windows (386,amd64)\n\n from the [releases](https://github.com/dh1tw/remoteRotator/releases) page.\n\nremoteRotator works well on SoC boards like the Raspberry / Orange / Banana Pis.\nThe application is just a single executable.\n\n## Dependencies\n\nremoteRotator does not have any runtime dependencies.\n\n## Getting started\n\nremoteRotator provides a series of nested commands and flags.\n\n```bash\n$ ./remoteRotator\n```\n\n```text\nNetwork interface for Rotators\n\nUsage:\n  remoteRotator [command]\n\nAvailable Commands:\n  enumerate   discover and list all available rotators on the network\n  help        Help about any command\n  server      remoteRotator Server\n  version     Print the version number of remoteRotator\n  web         webserver providing access to all rotators on the network\n\nFlags:\n      --config string   config file (default is $HOME/.remoteRotator.yaml)\n  -h, --help            help for remoteRotator\n\nUse \"remoteRotator [command] --help\" for more information about a command.\n```\n\nSo let's fire up a remoteRotator server for your rotator:\n\nFirst, identify the serial port to which your rotator is connected. On Windows,\nthis will be something like `COMx` (e.g. `COM3`), on Linux / MacOS it will be\na device in the `/dev/` folder (e.g. `/dev/ttyACM0`).\n\nAll parameters can be set either in a config file (see below) or through pflags.\nTo get a list of supported flags for the lan server, execute:\n\n```bash\n$ ./remoteRotator server lan --help\n```\n\n```text\nThe lan server allows you to expose a rotator on your local area network.\nBy default, the rotator will only be listening on the loopback adapter. In\norder to make it available and discoverable on the local network, a network\nconnected adapter has to be selected.\n\nremoteRotator supports access via TCP, emulating the Yaesu GS232A protocol\n(disabled by default) and through a web interface (HTTP + Websocket).\n\nYou can select the following rotator types:\n1. Yaesu (GS232 compatible)\n2. Dummy (great for testing)\n\nremoteRotator allows to assign a series of meta data to a rotator:\n1. Name\n2. Azimuth/Elevation minimum value\n3. Azimuth/Elevation maximum value\n4. Azimuth Mechanical stop\n\nThe metadata enriches the rotator representation in the web interface \nfor example by colorizing the rotator range or indicating the mechanical stop.\n\nUsage:\n  remoteRotator server lan [flags]\n\nFlags:\n      --azimuth-max int        metadata: maximum azimuth (in deg) (default 360)\n      --azimuth-min int        metadata: minimum azimuth (in deg)\n      --azimuth-stop int       metadata: mechanical azimuth stop (in deg)\n  -b, --baudrate int           baudrate (default 9600)\n      --discovery-enabled      make rotator discoverable on the network (default true)\n      --elevation-max int      metadata: maximum elevation (in deg) (default 180)\n      --elevation-min int      metadata: minimum elevation (in deg)\n      --has-azimuth            rotator supports Azimuth (default true)\n      --has-elevation          rotator supports Elevation\n  -h, --help                   help for lan\n      --http-enabled           enable HTTP Server (default true)\n  -w, --http-host string       Host (use '0.0.0.0' to listen on all network adapters) (default \"127.0.0.1\")\n  -k, --http-port int          Port for the HTTP access to the rotator (default 7070)\n  -n, --name string            Name tag for the rotator (default \"myRotator\")\n      --pollingrate duration   rotator polling rate (default 1s)\n  -P, --portname string        portname / path to the rotator (e.g. COM1) (default \"/dev/ttyACM0\")\n      --tcp-enabled            enable TCP Server\n  -u, --tcp-host string        Host (use '0.0.0.0' to listen on all network adapters) (default \"127.0.0.1\")\n  -p, --tcp-port int           TCP Port (default 7373)\n  -t, --type string            Rotator type (supported: yaesu, dummy (default \"yaesu\")\n\nGlobal Flags:\n      --config string   config file (default is $HOME/.remoteRotator.yaml)\n```\n\nSo in order to launch remoteRotator on Windows with a Yaesu rotator connected at\nCOM3 an having the web HTTP server listening on your local network, we would call:\n\n```bash\n$ remoteRotator.exe server lan -w \"0.0.0.0\" -P \"COM3\" -t yaesu\n```\n\n```text\nno config file found\n2017/12/08 16:50:25 added rotator (myRotator)\n2017/12/08 16:50:25 Listening on 0.0.0.0:7070 for HTTP connections\n```\n\n## Connecting via TCP / Telnet\n\nIf you have an application (e.g. [arsvcom](https://ea4tx.com/en/arsvcom/) or\n[pstrotator](http://www.qsl.net/yo3dmu/index_Page346.htm)) that can talk to\na Yaesu compatible rotator, you can point that application to remoteRotator's\nbuilt-in TCP server (although disabled by default).\n\nLet's start a dummy rotator instance on Linux and enable the build-in TCP\nserver:\n\n``` bash\n$ ./remoteRotator server lan -t dummy --tcp-enabled\n```\n\n``` text\nno config file found\n2017/12/08 16:50:25 added rotator (myRotator)\n2017/12/08 16:50:25 listening on 127.0.0.1:7070 for HTTP connections\n2017/12/08 16:50:25 listening on 127.0.0.1:7373 for TCP connections\n2017/12/08 16:50:25 discovery disabled; the HTTP server must listen on an accessible network interface (e.g. 0.0.0.0)\n```\n\nFor testing, we connect directly via telnet:\n\n``` text\n$ telnet localhost 7373\nTrying ::1...\nConnected to localhost.\nEscape character is '^]'.\n\n?\u003eC\n+0303\nC2\n+0303+0000\nM310\n+0303+0000\n+0304+0000\n+0305+0000\n+0306+0000\n+0307+0000\n+0307+0000\n+0308+0000\n+0309+0000\n+0310+0000\n```\n\n## Web Interface\n\n![Alt text](https://i.imgur.com/wPup7BJ.png \"remoteRotator WebUI\")\n\nA more comfortable way of accessing the rotator is through a web Interface.\nYou can specify the host and port in the settings above, or deactivate the\nbuilt-in webserver if you don't need it.\n\nThe red arrow indicates the heading of the rotator and the yellow arrow\nindicates the preset value to which the rotator will turn. The yellow arrow\ndisappears when the desired direction has been reached.\n\nThe dotted red line indicates the mechanical stop of the rotator.\nA green arc segment indicates a limited turning radius for this rotator.\nA blue arc segment indicates the mechanical overlap supported by this rotator.\nThese indicators are just visual helpers and are configurable through command line\nflags or in the config file.\n\n## Web Interface (Aggregator)\n\n![Alt text](https://i.imgur.com/lcHhslZ.png \"remoteRotator WebUI\")\n\nIf you have multiple rotators, you might want to use the dedicated aggregation\nweb server. The following example starts the webserver on port 6005 and listens\non all network interfaces.\n\n``` text\n$ remoteRotator web -w \"0.0.0.0\" -k 6005\n```\n\nThe Webserver automatically discovers the available remoteRotator instances\nin your local network and adds them from the web interface. Depending on which transport you have chosen, the discovery process is either done through MDNS (lan)\nor NATS. The discovery functionality doesn't require any configuration.\n\n## Config file\n\nThe repository contains an example configuration file. By convention, it is called\n`.remoteRotator.[yaml|toml|json]` and is located by default either in the\nhome directory or the directory where the remoteRotator executable is located.\nThe format of the file can either be in\n[yaml](https://en.wikipedia.org/wiki/YAML),\n[toml](https://github.com/toml-lang/toml), or\n[json](https://en.wikipedia.org/wiki/JSON).\n\nThe first line after starting remoteRotator will indicate if / which config\nfile has been found.\n\nIf you have several rotators, you have to create a configuration file for\neach of them and specify them with the --config flag.\n\nPriority:\n\n1. Pflags (e.g. -p 4040 -t dummy)\n2. Values from config file\n3. Default values\n\n## Behaviour on Errors\n\nIf an error occurs from which remoteRotator can not recover, the application\nexits. This typically happens when the connection with the rotator has been\nlost or if the rotator is not responding anymore.\nIt is recommended to execute remoteRotator as a service under the supervision\nof a scheduler, like [systemd](https://en.wikipedia.org/wiki/Systemd).\n\n## Bug reports, Questions \u0026 Pull Requests\n\nPlease use the Github [Issue tracker](https://github.com/dh1tw/remoteRotator/issues)\nto report bugs and ask questions! If you would like to contribute to remoteRotator,\n[pull requests](https://help.github.com/articles/creating-a-pull-request/) are\nwelcome! However please consider providing unit tests with the PR to verify\nthe proper behavior.\n\nIf you file a bug report, please include always the version of remoteRotator\nyou are running:\n\n``` bash\n$ ./remoteRotator version\n```\n\n``` text\ncopyright Tobias Wellnitz, DH1TW, 2020\nremoteRotator Version: v0.6.0, darwin/arm64, BuildDate: 2021-04-18T03:35:42+02:00, Commit: 00fe466\n```\n\n## Documentation\n\nThe auto-generated documentation can be found at\n[pkg.go.dev](https://pkg.go.dev/github.com/dh1tw/remoteRotator).\n\n## How to build\n\nTo compile remoteRotator from the sources, you need to have\n[Go \u003e= 1.16](https://golang.org) installed and configured.\n\nInstall the dependencies if you haven't already\n\n``` bash\n$ sudo apt-get install git build-essential upx\n```\n\nDownload, prepare and compile remoteRotator under Linux/MacOS:\n\n``` bash\n$ mkdir -p $GOPATH/src/github.com/dh1tw \u0026\u0026 cd \"$_\"\n$ git clone https://github.com/dh1tw/remoteRotator.git\n$ cd remoteRotator\n$ go get ./...\n$ make install-deps\n$ make generate\n$ make\n```\n\n## How to execute the tests\n\nAll critical packages have their own set of unit tests. The tests can be\nexecuted with the following commands:\n\n``` bash\n$ cd $GOPATH/src/github.com/dh1tw/remoteRotator\n$ go test -v -race ./...\n```\n\nThe data race detector might not be available on all platforms / operating\nsystems.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdh1tw%2FremoteRotator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdh1tw%2FremoteRotator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdh1tw%2FremoteRotator/lists"}