{"id":44332423,"url":"https://github.com/bringauto/etna","last_synced_at":"2026-02-11T10:10:02.130Z","repository":{"id":42662896,"uuid":"449657659","full_name":"bringauto/etna","owner":"bringauto","description":"BringAuto Etna - Fleet Management simulation for developement and testing","archived":false,"fork":false,"pushed_at":"2025-06-19T08:49:54.000Z","size":209,"stargazers_count":2,"open_issues_count":3,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-19T09:43:29.860Z","etag":null,"topics":["autonomous","autonomy","fleet-protocol","virtual-environment","virtualenv"],"latest_commit_sha":null,"homepage":"","language":"Python","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/bringauto.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":"2022-01-19T11:07:42.000Z","updated_at":"2025-01-31T07:59:23.000Z","dependencies_parsed_at":"2023-12-22T13:31:52.762Z","dependency_job_id":"3055ec15-dafd-4454-ae0b-11e865e11579","html_url":"https://github.com/bringauto/etna","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/bringauto/etna","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringauto%2Fetna","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringauto%2Fetna/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringauto%2Fetna/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringauto%2Fetna/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bringauto","download_url":"https://codeload.github.com/bringauto/etna/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringauto%2Fetna/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29331749,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T06:13:03.264Z","status":"ssl_error","status_checked_at":"2026-02-11T06:12:55.843Z","response_time":97,"last_error":"SSL_read: 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":["autonomous","autonomy","fleet-protocol","virtual-environment","virtualenv"],"created_at":"2026-02-11T10:10:01.565Z","updated_at":"2026-02-11T10:10:02.121Z","avatar_url":"https://github.com/bringauto.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BringAuto virtual development platform\n\nIt's intended to simplify development for [Fleet] and The Autonomy developers.\n\nThe system can be used by docker compose stored at the git root of this repository.\n\nThere are multiple containers:\n\n- **VerneMQ MQTT broker** (bringauto/vernemq)\n- **Virtual Vehicle** - Mission module client implementation (it connects to Module Gateway and simulates a Mission module's autonomy device)\n- **Virtual PLC** - IO module client\n- **Module Gateway** - cpp implementation of Module Gateway with Mission, IO and example module support\n- **External Server** - server implementation with Mission, IO and example module support\n- **HTTP API Server** - tool for communication with final endpoint, used by mission module\n- **Integration Layer** - a bridge between the HTTP API and the Fleet Management API\n- **Fleet Management API** - an API that handles creating orders for cars and displaying their state\n- **Virtual Fleet Management** - application simulating Fleet Management. It creates orders for cars.\n- **PostgreSQL Database** - storage of the HTTP API keys and the messages sent via the API\n- **Mission Module Display Tool** - a simple web server to display the positions of vehicles on a map\n- **Log Files Initialization Service** - a Ubuntu based container which sets correct permissions for docker_volumes\n\n## Container Repositories\n\nBelow are the links to the repositories of the containers. Most of the containers are public on GitHub, but some are private.\n\n- [VerneMQ docker repository](https://github.com/bringauto/vernemq-docker)\n- [VerneMQ repository](https://github.com/bringauto/vernemq)\n- [Virtual Vehicle repository](https://github.com/bringauto/virtual-vehicle)\n- [Virtual PLC repository](https://gitlab.bringauto.com/bring-auto/hardware/firmware/virtual-plc-arduino-opta)\n- [Module Gateway repository](https://github.com/bringauto/module-gateway)\n- [External Server repository](https://github.com/bringauto/external-server)\n- [HTTP API repository](https://github.com/bringauto/fleet-protocol-http-api)\n- [Fleet Management API repository](https://github.com/bringauto/fleet-management-http-client-go)\n- [Virtual Fleet Management repository](https://github.com/bringauto/virtual-fleet-management)\n- [Mission Module Display Tool repository](https://github.com/bringauto/mission-module-display-tool)\n\n## Fleet Protocol\n\nTo read more about the system architecture look at Fleet Protocol v2 documentation:\n\n- [Summary]\n- [Fleet Protocol Requirements]\n- [Internal Client]\n- [Module Gateway]\n- [External Server]\n- [Modules]\n- [Message Structure]\n- [Internal Client design]\n- [Module Gateway design]\n- [External Server design]\n- [HTTP API]\n- [HTTP API Wait Mechanism]\n\nTo use Fleet Protocol v1, use the latest v1 release on [GitHub](https://github.com/bringauto/etna/tree/v1.2.2).\n\n## Requirements\n\n- install Docker (version \u003e= 20.10)\n- install docker compose (version \u003e= 1.29)\n\n## Usage\n\nDocker compose file has multiple profiles so the developer can disable/enable parts of the system he needs\n\n### Docker compose profiles\n\n#### Profiles that start logical groups of containers\n\n- **all** - start all containers\n- **for-virtual-fleet** - start the fleet protocol HTTP API server, the related PostgreSQL database, the fleet management integration layer, virtual fleet management, the fleet management HTTP API server and the mission module display tool\n- **for-virtual-fleet-without-fleet-management** - start the same containers as `for-virtual-fleet` but without the virtual fleet management\n- **core** - start only internal clients and Module Gateway\n- **http-api** - start fleet protocol HTTP API server and the related PostgreSQL database\n- **cloud** - start all the cloud services (exclude components deployed on a car)\n- **external-server** - start only the External Server\n\n#### Profiles that start all containers except the ones specified\n\n- **without-module-gateway** - do not start Module Gateway\n- **without-external-server** - do not start External Server\n- **without-devices** - do not start internal clients\n- **without-fleet-management** - do not start Virtual Fleet Management\n- **without-mqtt** - do not start MQTT vernemq broker\n\n#### Profiles that start only one container\n\n- **virtual-vehicle** - start only the Virtual Vehicle\n- **virtual-plc** - start only the Virtual PLC\n- **mqtt** - start only the MQTT VerneMQ broker\n- **module-gateway** - start only the Module Gateway\n- **external-server** - start only the External Server\n\nNow you can run `docker compose --profile \u003cprofile\u003e up` where `profile` is the name of the profile above.\n\nTo run components with different arguments you can edit the configuration files placed under `configuration/\u003ccomponent_name\u003e/` where `component_name` is the name of the component.\n\n### HTTP API\n\nTo show the OpenAPI specification (the service must be running), visit [http://localhost:8080/v2/protocol/openapi.json](http://localhost:8080/v2/protocol/openapi.json).\nTo explore the API endpoints and entities, visit [http://localhost:8080/v2/protocol/ui](http://localhost:8080/v2/protocol/ui). More on Swagger UI\nis [here](https://swagger.io/tools/swagger-ui/).\n\nThe HTTP API requires authentication via API keys. To access all its endpoints, you can use the\nkey `ProtocolStaticAccessKey`.\n\nThe database access information and message cleanup can be set in the `configuration/http-api/config.json` (this config\noverwrites the original config from the http-api image).\n\n### Fleet Management API\n\nTo show the OpenAPI specification (the service must be running), visit [http://localhost:8081/v2/management/openapi.json](http://localhost:8081/v2/management/openapi.json).\nTo explore the API endpoints and entities, visit [http://localhost:8081/v2/management/ui](http://localhost:8081/v2/management/ui). More on Swagger UI\nis [here](https://swagger.io/tools/swagger-ui/).\n\nThe Fleet Management API requires authentication via API keys. To access all its endpoints, you can use the\nkey `ManagementStaticAccessKey`.\n\nThe database access information and the number of stored states and orders can be set\nin `configuration/management-api/config.json` (this config overwrites the original config from the management-api\nimage).\n\n### Virtual Fleet Management\n\nSimulates the Fleet Management ([documentation](https://github.com/bringauto/virtual-fleet-management/blob/main/README.md).\n\nThe Virtual Fleet Management uses `env` variables to set:\n\n- **ETNA_VFM_SCENARIO** : Changes the scenario that the Virtual Fleet Management will use.\n- **ETNA_VFM_CONFIG** : Changes the configuration of the Virtual Fleet Management.\n\nAll the scenarios and configurations must be stored in the `configuration/virtual-fleet-management` directory, so the docker container has access to it.\nBoth variables have default values, so the Virtual Fleet Management can be started without setting them.\n\n### Mission module display tool\n\nThe Mission Module Display Tool runs a simple web server to display the positions of vehicles on a map. By default, the server is available at `http://localhost:5000`. It utilizes the fleet protocol HTTP API to retrieve vehicle positions. Comprehensive documentation can be found [here](https://github.com/bringauto/mission-module-display-tool/blob/main/README.md).\n\n### Common Issues\n\n- external-server and module-gateway connect sequence\n  - mqtt tends to be unstable in some cases, which could lead to problems in ES and MG communication. Consider\n      changing the mqtt_timeout in ES config if there are connection problems (numbers greater than 15 and no multiples\n      of 15 should be used)\npostgresql databases - are created only on container creation (if you have an old container, it needs to be deleted)\n- http APIs\n  - by default API containers wait for the postgresql database to be available. If the database fails to initialize,\n      the containers won't start\n\n## MQTT IP and Port\n\nThe MQTT uses a standard plain (not encrypted) connection on port 1883 and an SSL-encrypted connection on port 8883.\n\nThere are [pregenerated certificate files] for both, server and client, however, it is not recommended to use those, and\nthey are there for Etna to work out-of-box.\n\nIf you generate new certificate files they must have the same name as the original, otherwise, you have to change the\npaths in file `configuration/mosquitto/mosquitto.conf`.\n\n\u003e Directory `configuration/mosquitto/certs`, include files `cacert.pem` (certificate authority), `server.crt` (signed\n\u003e certificate for the server) and `server.key` (servers private key).\n\n## Topics to listen\n\nEach MQTT topic consists of `company_name` and `car_name`.\n\nBringAuto has the following MQTT topics\n\n- \\\u003ccompany_name\u003e/\\\u003cvehicle_name\u003e/module_gateway\n- \\\u003ccompany_name\u003e/\\\u003cvehicle_name\u003e/external_server\n\nwhere each variable can be changed by the .env file, variable names to be saved there are in parentheses.\n\n- `company_name` is by default set to \"bringauto\" (COMPANY)\n- `vehicle_name` is by default set to \"virtual_vehicle\" (VEHICLE_NAME)\n\nActual MQTT topics to which developers can connect by default settings are:\n\n- bringauto/virtual_vehicle/module_gateway\n- bringauto/virtual_vehicle/external_server\n\n## Logs\n\nLogs for each component can be found in the `docker_volumes` directory.\n\u003e The component directories are pre-created in the repository. To avoid permission problems associated with docker\n\u003e volumes, a service automatically sets the correct ownership of files before running other components.\n\nIn case of a problem, please attach the `docker_volumes` directory to the Bug report.\n\n## Example scripts\n\nThere are example scripts for sniffing communication and seeing the basics [scripts/]\n\n## Testing scenarios\n\nTesting scenarios for the system can be found in the [tests/etna-testing-scenarios.md](tests/etna-testing-scenarios.md) file.\n\n## Bug solving\n\nDocker container can have error similar to this:\n\n``` log\nError: Invalid require_certificate value (false\nError found at /mosquitto/config/mosquitto.conf:2.\n```\n\nIf this happens, make sure the mentioned file uses LF line ending. (CRLF doesn't work)\n\n[Fleet]: https://github.com/bringauto/fleet\n\n[pregenerated certificate files]: configuration/mosquitto/certs\n\n[scripts/]: scripts/\n\n[Summary]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/summary\n\n[Fleet Protocol Requirements]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/protocol-requirements\n\n[Internal Client]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/internal-client\n\n[Module Gateway]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/module-gateway\n\n[External Server]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/external-server\n\n[Modules]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/modules\n\n[Message Structure]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/message-structure\n\n[Internal Client design]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/internal-client-design\n\n[Module Gateway design]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/module-gateway-design\n\n[External Server design]: https://ref.bringautofleet.com/r/protocol/v2/2.0.1/external-server-design\n\n[HTTP API]: https://ref.bringautofleet.com/r/protocol/http-api/1.0.0/http-api\n\n[HTTP API Wait Mechanism]: https://ref.bringautofleet.com/r/protocol/http-api/1.0.0/wait-mechanism\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbringauto%2Fetna","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbringauto%2Fetna","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbringauto%2Fetna/lists"}