{"id":19316810,"url":"https://github.com/rkusa/datis","last_synced_at":"2025-04-22T17:30:32.736Z","repository":{"id":34161340,"uuid":"146989369","full_name":"rkusa/DATIS","owner":"rkusa","description":"DCS World Automatic Terminal Information Service (ATIS) broadcasted through Simple Radio Standalone (SRS)","archived":false,"fork":false,"pushed_at":"2023-03-25T01:26:29.000Z","size":5317,"stargazers_count":95,"open_issues_count":34,"forks_count":22,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-18T20:33:15.922Z","etag":null,"topics":["atis","dcs","dcs-world","dcsworld","srs"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/rkusa.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-09-01T10:31:40.000Z","updated_at":"2025-01-27T11:33:30.000Z","dependencies_parsed_at":"2023-02-12T06:01:30.047Z","dependency_job_id":"607a029a-4449-4acd-89f0-ad795e751414","html_url":"https://github.com/rkusa/DATIS","commit_stats":null,"previous_names":[],"tags_count":57,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkusa%2FDATIS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkusa%2FDATIS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkusa%2FDATIS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rkusa%2FDATIS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rkusa","download_url":"https://codeload.github.com/rkusa/DATIS/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250287341,"owners_count":21405588,"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":["atis","dcs","dcs-world","dcsworld","srs"],"created_at":"2024-11-10T01:12:48.064Z","updated_at":"2025-04-22T17:30:30.110Z","avatar_url":"https://github.com/rkusa.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DATIS\n\nDCS World Automatic Terminal Information Service (ATIS) broadcasted through [Simple Radio Standalone](https://github.com/ciribob/DCS-SimpleRadioStandalone). Automatically starts within DCS, extracts weather information from the currently running mission, generates various report, converts it to speech and broadcasts it through SRS.\n\n[Changelog](./CHANGELOG.md) | [Troubleshooting](./docs/Troubleshooting.md) | [Prebuild Releases](https://github.com/rkusa/DATIS/releases)\n\nExample Report:\n\n\u003e This is Batumi information Alpha. Runway in use is 13. Wind 140 at 9 knots. Visibility 0.5. Cloud conditions overcast 5, rain. Temperature 20.9 celcius. ALTIMETER 2933. REMARKS. 993 hectopascal. QFE 2930 or 992. End information Alpha.\n\nExample Carrier Report:\n\n\u003e 99, Mother's wind 140 at 9 knots, altimeter 2933, CASE 1, BRC 276, expected final heading 267, report initial\n\n## Features\n\nATIS stations are not the only report kind this mod supports, all supported report kinds are:\n\n- **ATIS stations**: Automatic Terminal Information Service broadcasts.\n- **Carrier reports**: Report information relevant to carrier recoveries.\n- **Broadcast of custom message**: Convert a custom message to speech and broadcast it through SRS.\n- **Weather stations**: Similar report to ATIS stations, but not connected to an airfield. Can be used to report weather conditions at various parts of the map, like shooting ranges.\n\nThe mods uses the Window' built-in TTS by default, but can also either use Google Cloud's TTS, AWS Polly, or a combination of all of them (tip: setup both Google Cloud and Amazon Web Services to have a greater choice of different voices).\n\n## Migrate to 3.x.x\n\nThe plugin settings have been removed from the DCS settings screen. DATIS is now configured through a config file at `Saved Games\\DCS.openbeta\\Config\\DATIS.json`, see [Settings](./docs/Settings.md).\nThis has been done, because each mission you save contains all your plugin settings. This included the cloud provider access keys set for DATIS. The change has been made to prevent the accidential sharing of those credentials.\n\n## Installation\n\n[Build it](#build) yourself and use the content inside the `mod` directory or use the pre-build mod from one of the [releases](https://github.com/rkusa/DATIS/releases).\n\n1. Copy the content (`Mods` and `Scripts` directory) into `Saved Games\\DCS.openbeta\\`.\n2. Optional: Customize your settings, see [Settings](./docs/Settings.md)\n\nOnce you start a mission that contains a pattern as described in the next section, DATIS runs automatically.\nIt thereby expects a SRS server to run locally on the default SRS ports.\n\nIf DATIS isn't working, you might find some helpful information in the log file at `DCS.openbeta\\Logs\\DATIS.log`.\n\nFor information about the free tier of GCloud, AWS and Azure see:\n- https://cloud.google.com/text-to-speech/pricing\n- https://aws.amazon.com/polly/pricing/\n- https://azure.microsoft.com/en-us/pricing/details/cognitive-services/speech-services/\n\n## Setup\n\n### Setup ATIS stations\n\nATIS stations can be added to your mission by either\n- adding the following pattern to your mission situation, or\n- by adding a static unit to your mission, e.g. a communication tower (the kind of static unit doesn't matter though), and name the static unit using the following pattern.\n\n\n```\nATIS {Airfield} {ATIS Frequency}[, OPTION {VALUE}]*\n```\n\nAvailable settings:\n\n- `VOICE {VOICE NAME}`: Set the TTS provider and voice to be used for this station. If not provided, the TTS provider and voice defaults to the one set up in the DCS special settings. Available voices are:\n  - Windows: `WIN` or `WIN:voice`: Available voice names are: `Catherine` (en-AU), `James` (en-AU), `Linda` (en-CA), `Richard` (en-CA), `George` (en-GB), `Hazel` (en-GB), `Susan` (en-GB), `Sean` (en-IE), `Heera` (en-IN), `Ravi` (en-IN), `David` (en-US), `Zira` (en-US), `Mark` (en-US). Make sure  to install the corresponding voice package (for the language of the voice) for the voices to be available.\n  - Google Gloud (`GC:{VOICE NAME}`): For available voices see https://cloud.google.com/text-to-speech/docs/voices. Use the name from the `Voice name` column. All voices starting with `en-` are supported. Keep in mind that `en-US-Wavenet-*` voices come with a smaller free quota, see [Gcloud TTS pricing](https://cloud.google.com/text-to-speech/pricing).\n  - AWS (`AWS:{VOICE NAME}`): For available voices see https://docs.aws.amazon.com/polly/latest/dg/voicelist.html. Use the name from the `Name/ID` column (without `*` prefixes). All English voices are supported.\n  - Azure (`AZURE:{VOICE NAME}`): For available voices see https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/language-support#standard-voices. Use the name from the `Voice name` column. All `en-US` voices are supported.\n- `TRAFFIC {FREQUENCY}`: An optional traffic frequency that, if provided, is mentioned as part of the ATIS report.\n- `INFO {INFO LETTER}`: Allows you to override the dynamic rotating selection of the ATIS information letter if your mission requires a specific and constant value.\n- `ACTIVE {RUNWAY OVERRIDE}`: Can be used if the SPINS for the airfield differ from the prevailing winds and you want to override the calculated active runway. Use `ACTIVE {RUNWAY ARRIVAL}/{RUNWAY DEPARTURE}` to specify separate arrival and departure runways.\n- `NO HPA`: Disable adding pressures in hectopascals to the remarks section.\n- `NO QFE`: Disable inclusion of QFE in the remarks section.\n\nExamples:\n\n```\nATIS Kutaisi 251.000\nATIS Batumi 131.5\nATIS Senaki-Kolkhi 145\nATIS Kutaisi 251.000, TRAFFIC 252.000\nATIS Kutaisi 251.000, VOICE en-US-Standard-E\nATIS Kutaisi 251.000, TRAFFIC 252.000, VOICE en-US-Standard-E\nATIS Kutaisi 251.000, TRAFFIC 252.000, VOICE GC:en-US-Wavenet-B\nATIS Kutaisi 251.000, TRAFFIC 252.000, VOICE AWS:Nicole\nATIS Kutaisi 251.000, TRAFFIC 252.000, VOICE WIN\nATIS Kutaisi 251.000, TRAFFIC 252.000, INFO Q, ACTIVE 21L, NO QFE, NO HPA\nATIS Kutaisi 251.000, TRAFFIC 252.000, INFO Q, ACTIVE 21L.03R, NO QFE, NO HPA\n```\n\n![Example](./docs/static.jpg)\n\n### Setup Carrier Reports\n\nName your carrier unit (unit not group!) using the following pattern:\n\n```\nCARRIER {Name} {Frequency}[, VOICE {VOICE NAME}]\n```\n\n![Example](./docs/carrier.jpg)\n\n### Setup Broadcast of Custom Messages\n\nPlace a unit (doesn't matter if it is a static unit, a plane, a vehicle, ...) and name it (the unit not the group!) using the following pattern:\n\n```\nBROADCAST {Frequency}[, VOICE {VOICE NAME}]: {Message}\n```\n\nExample:\n\n```\nBROADCAST 251.000, VOICE AWS:Brian: Help help!\n```\n\n### Setup Broadcast of Weather Stations\n\nPlace a unit (doesn't matter if it is a static unit, a plane, a vehicle, ...) and name it (the unit not the group!) using the following pattern:\n\n```\nWEATHER {Station Name} {Frequency}[, VOICE {VOICE NAME}]\n```\n\nExample:\n\n```\nWEATHER Mountain Range 251.000, VOICE en-US-Standard-E\n```\n\n## Development\n\n### Crates\n\n- [**datis-cmd**](./crates/datis-cmd) - A utility to start DATIS from the command line. Mostly intended for testing-purposes.\n- [**datis-core**](./crates/datis-core) - The core functionality: generating the report and talking to SRS.\n- [**datis-module**](./crates/datis-module) - A Lua module that can be integrated into DCS to automatically start ATIS stations.\n- [**radio-station**](./crates/datis-station) - A command line utility to play OGG/OPUS audio files through a specified SRS frequency.\n- [**srs**](./crates/srs) - A re-usable Rust SRS client that is used for all the other crates.\n- [**win-media**](./crates/win-media) - Bindings to a subset of the Windows Runtime (separate crate to reduce the compile time during development).\n- [**win-tts**](./crates/win-tts) - A library to convert text to speech using the Window Runtime.\n\n### Build\n\nInstead of building you can also use the pre-build mod from one of the [releases](https://github.com/rkusa/DATIS/releases).\nOtherwise, build with [Rust (stable)](https://rustup.rs/):\n\n```\ncargo build --release --package datis\n```\n\n### Run tests\n\n```bash\ncargo test\n```\n\n### Format code\n\n```bash\ncargo fmt\n```\n\nThis requires you to have `rustfmt` on your toolchain. It can be installed via `rustup component add rustfmt`.\n\n## License\n\n[MIT](./LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frkusa%2Fdatis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frkusa%2Fdatis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frkusa%2Fdatis/lists"}