{"id":17209939,"url":"https://github.com/brocaar/chirpstack-simulator","last_synced_at":"2025-10-09T16:31:36.628Z","repository":{"id":52793679,"uuid":"241836397","full_name":"brocaar/chirpstack-simulator","owner":"brocaar","description":"Simulator utility for the ChirpStack open-source LoRaWAN Network-Server.","archived":false,"fork":false,"pushed_at":"2024-07-25T18:53:43.000Z","size":38,"stargazers_count":71,"open_issues_count":8,"forks_count":56,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-09-24T14:47:54.174Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.chirpstack.io","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/brocaar.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-02-20T08:54:44.000Z","updated_at":"2025-09-04T17:07:26.000Z","dependencies_parsed_at":"2024-11-23T21:01:14.114Z","dependency_job_id":null,"html_url":"https://github.com/brocaar/chirpstack-simulator","commit_stats":{"total_commits":24,"total_committers":4,"mean_commits":6.0,"dds":0.125,"last_synced_commit":"172a3a07c2796d0fcdfe5cf985c964397a71e6c4"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brocaar/chirpstack-simulator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brocaar%2Fchirpstack-simulator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brocaar%2Fchirpstack-simulator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brocaar%2Fchirpstack-simulator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brocaar%2Fchirpstack-simulator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brocaar","download_url":"https://codeload.github.com/brocaar/chirpstack-simulator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brocaar%2Fchirpstack-simulator/sbom","scorecard":{"id":254304,"data":{"date":"2025-08-11","repo":{"name":"github.com/brocaar/chirpstack-simulator","commit":"172a3a07c2796d0fcdfe5cf985c964397a71e6c4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":1,"reason":"Found 3/24 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile-devel:1: pin your Docker image by updating golang:1.18-alpine to golang:1.18-alpine@sha256:77f25981bd57e60a510165f3be89c901aec90453fd0f1c5a45691f6cb1528807","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0322 / GHSA-cg3q-j54f-5p7p","Warn: Project is vulnerable to: GO-2020-0015 / GHSA-5rcv-m4m3-hfh7","Warn: Project is vulnerable to: GO-2021-0113 / GHSA-ppp9-7jff-5vj2","Warn: Project is vulnerable to: GO-2022-1059 / GHSA-69ch-w2m2-3vjp","Warn: Project is vulnerable to: GO-2023-2153 / GHSA-m425-mq94-257g / GHSA-qppj-fm5r-hxr3"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T09:15:12.327Z","repository_id":52793679,"created_at":"2025-08-17T09:15:12.327Z","updated_at":"2025-08-17T09:15:12.327Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001766,"owners_count":26083171,"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-10-09T02:00:07.460Z","response_time":59,"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":"2024-10-15T02:52:54.045Z","updated_at":"2025-10-09T16:31:36.315Z","avatar_url":"https://github.com/brocaar.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ChirpStack Simulator\n\nChirpStack Simulator is an open-source simulator for the [ChirpStack](https://www.chirpstack.io)\nopen-source LoRaWAN\u003csup\u003e\u0026reg;\u003c/sup\u003e Network-Server (v4). It simulates\na configurable number of devices and gateways, which will be automatically\ncreated on starting the simulation.\n\nThis project has been developed together with [TWTG](https://www.twtg.io/).\n\n## Building\n\nThe recommended way to compile the simulator code is using [Docker Compose](https://docs.docker.com/compose/).\nExample:\n\n```bash\ndocker-compose run --rm chirpstack-simulator make clean build\n```\n\nThe binary will be located under `build/chirpstack-simulator`.\n\n## Configuration\n\nFor generating a configuration template, use the following command:\n\n```bash\n./build/chirpstack-simulator configfile \u003e chirpstack-simulator.toml\n```\n\n### Example\n\n```toml\n[general]\n# Log level\n#\n# debug=5, info=4, warning=3, error=2, fatal=1, panic=0\nlog_level=4\n\n\n# ChirpStack configuration.\n[chirpstack]\n\n  # API configuration.\n  #\n  # This configuration is used to automatically create the:\n  #   * Device profile\n  #   * Gateways\n  #   * Application\n  #   * Devices\n  [chirpstack.api]\n\n  # JWT token.\n  #\n  # API key to connect to the ChirpStack API. This API key can created within\n  # the ChirpStack web-interface.\n  api_key=\"PUT_YOUR_API_KEY_HERE\"\n\n  # Server.\n  #\n  # This must point to the API interface of ChirpStack.\n  # If the server is running on the same machine, keep this to the\n  # default value.\n  server=\"127.0.0.1:8080\"\n\n  # Insecure.\n  #\n  # Set this to true when the endpoint is not using TLS.\n  insecure=true\n\n\n  # MQTT integration configuration.\n  #\n  # This integration is used for counting the number of uplinks that are\n  # published by the ChirpStack MQTT integration.\n  [chirpstack.integration.mqtt]\n\n  # MQTT server.\n  server=\"tcp://127.0.0.1:1883\"\n\n  # Username.\n  username=\"\"\n\n  # Password.\n  password=\"\"\n\n\n  # MQTT gateway backend.\n  [chirpstack.gateway.backend.mqtt]\n\n  # MQTT server.\n  server=\"tcp://127.0.0.1:1883\"\n\n  # Username.\n  username=\"\"\n\n  # Password.\n  password=\"\"\n\n\n# Simulator configuration.\n[[simulator]]\n\n# Tenant ID.\n#\n# It is recommended to create a new tenant for simulations.\ntenant_id=\"PUT_YOUR_TENANT_ID_HERE\"\n\n# Duration.\n#\n# This defines the duration of the simulation. If set to '0s', the simulation\n# will run until terminated.\nduration=\"5m\"\n\n# Activation time.\n#\n# This is the time that the simulator takes to activate the devices. This\n# value must be less than the simulator duration.\nactivation_time=\"1m\"\n\n  # Device configuration.\n  [simulator.device]\n\n  # Number of devices to simulate.\n  count=1000\n\n  # Uplink interval.\n  uplink_interval=\"5m\"\n\n  # FPort.\n  f_port=10\n\n  # Payload (HEX encoded).\n  payload=\"010203\"\n\n  # Frequency (Hz).\n  frequency=868100000\n\n  # Bandwidth (Hz).\n  bandwidth=125000\n\n  # Spreading-factor.\n  spreading_factor=7\n\n  # Gateway configuration.\n  [simulator.gateway]\n\n  # Min number of receiving gateways.\n  min_count=3\n\n  # Max number of receiving gateways.\n  max_count=5\n\n  # Event topic template.\n  event_topic_template=\"eu868/gateway/{{ .GatewayID }}/event/{{ .Event }}\"\n\n  # Command topic template.\n  command_topic_template=\"eu868/gateway/{{ .GatewayID }}/command/{{ .Command }}\"\n\n\n# Prometheus metrics configuration.\n#\n# Using Prometheus (and Grafana), it is possible to visualize various\n# simulation metrics like:\n#   * Join-Requests sent\n#   * Join-Accepts received\n#   * Uplinks sent (by the devices)\n#   * Uplinks sent (by the gateways)\n#   * Uplinks sent (by the ChirpStack MQTT integration)\n[prometheus]\n\n# IP:port to bind the Prometheus endpoint to.\n#\n# Metrics can be retrieved from /metrics.\nbind=\"0.0.0.0:9000\"\n```\n\n## Running the simulator\n\nTo start the simulator, execute the following command:\n\n```bash\n./build/chirpstack-simulator -c chirpstack-simulator.toml\n```\n\nWhen a duration has been configured, then the simulation will stop after\nthe given interval. Note that this does not terminate the process! This makes\nit possible to still read Prometheus metrics after the simulation has been\ncompleted.\n\nRegardless if a duration has been configured or not, the simulator can be\nterminated. When sending an interrupt signal once, the simulation will be\nterminated and the simulator will clean up the created gateways, devices,\napplication and device-profile. When sending an interrupt for the second time,\nthe simulator will be terminated immediately.\n\n## Prometheus metrics\n\nThe ChirpStack Simulator provides various metrics that can be collected using\n[Prometheus](https://prometheus.io/) and visualized using [Grafana](https://grafana.com/).\n\n* `device_uplink_count`: The number of uplinks sent by the devices\n* `device_join_request_count`: The number of join-requests sent by the devices\n* `device_join_accept_count`: The number of join-accepts received by the devices\n* `application_uplink_count`: The number of uplinks published by the application integration\n* `gateway_uplink_count`: The number of uplinks sent by the gateways\n* `gateway_downlink_count`: The number of downlinks received by the gateways\n\n## License\n\nChirpStack Simulator is distributed under the MIT license. See also\n[LICENSE](https://github.com/brocaar/chirpstack-simulator/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrocaar%2Fchirpstack-simulator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrocaar%2Fchirpstack-simulator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrocaar%2Fchirpstack-simulator/lists"}