{"id":29859483,"url":"https://github.com/mictronics/mesh-observer","last_synced_at":"2026-04-20T03:37:52.486Z","repository":{"id":306805166,"uuid":"1027254269","full_name":"Mictronics/mesh-observer","owner":"Mictronics","description":"Python script that is passively monitoring the debug log of a Meshtastic device or native meshtasticd service. Creates statistical graphs and web content from the collected data about mesh traffic and load.","archived":false,"fork":false,"pushed_at":"2026-02-18T17:42:18.000Z","size":316,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-18T20:56:35.579Z","etag":null,"topics":["d3graph","mesh","meshtastic","observer","pandas","python","seaborn"],"latest_commit_sha":null,"homepage":"https://www.mictronics.de/bayern-mesh/","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mictronics.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-27T16:32:42.000Z","updated_at":"2026-02-18T17:42:22.000Z","dependencies_parsed_at":"2025-08-29T16:16:55.984Z","dependency_job_id":"5158814d-e8d2-4293-8490-d63b487768cc","html_url":"https://github.com/Mictronics/mesh-observer","commit_stats":null,"previous_names":["mictronics/mesh-observer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Mictronics/mesh-observer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mictronics%2Fmesh-observer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mictronics%2Fmesh-observer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mictronics%2Fmesh-observer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mictronics%2Fmesh-observer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mictronics","download_url":"https://codeload.github.com/Mictronics/mesh-observer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mictronics%2Fmesh-observer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32032043,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"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":["d3graph","mesh","meshtastic","observer","pandas","python","seaborn"],"created_at":"2025-07-30T02:32:37.681Z","updated_at":"2026-04-20T03:37:52.474Z","avatar_url":"https://github.com/Mictronics.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meshtastic Observer\n\nA Python script that is monitoring a (via serial interface) connected Meshtastic node or a local running, native meshtasticd service through the system journal.\n\nThe monitoring is purely passive by line parsing the nodes debug log. No Meshtastic API is used and no packets are transmitted.\n\n## Installation\n\nRun the following commands for repository cloning, creation of a Python virtual environment and installation of dependencies.\n\n```bash\n# Install dependencies\nsudo apt install libsystemd-journal-dev\n\n# Clone repository\ngit clone https://github.com/Mictronics/mesh-observer.git\n\n# Create Python virtual environment\ncd mesh-observer\npython -m venv .venv\n\n# Activate the virtual environment\nsource .venv/bin/activate\n\n# Install dependencies\npip install -r requirements.txt\n```\n\n## Create database\n```bash\n# Run the following command\npython3 create_database.py\n\n# This will create an empty sqlite3 database from network.sqlite3.sql\n```\n\n## Create FTP credentials\nThe script will upload the generated web content automatically to a remote web server.\n\nCreate a Python file named `ftp_credentials.py`with the following content.\n```python\nimport os\n\n__hostname__ = \"ftp server domain\"\n__username__ = \"ftp username\"\n__password__ = \"ftp password\"\n__local_folder__ = os.getcwd() + \"/web\"\n__remote_folder__ = \"/\"\n\n# Change above credentials and remote folder as required.\n```\n\nIn case you don't need FTP upload than comment the `ftp_upload`lines in daily and hourly runner threads sourcecode.\n\n## Run script manually\n```bash\n# In mesh-observer folder: activate the virtual environment\nsource .venv/bin/activate\n\n# Run the script for a Meshtastic device connected via serial interface (USB)\n# Change the ttyUSB0 for your connected serial device\npython3 meshtastic_observer_serial.py --dev /dev/ttyUSB0\n\n# Run the script for a locally running meshtasticd service\n# meshtasticd service needs to be configured for logging up to level debug\npython3 meshtastic_observer.py\n```\n\n## Configuration\n\nConfiguration of the systemd journal and meshtasticd native service is required when running on Linux.\n\nmeshtasticd native service will create a hugh journal log when the debug level is configured. Therefore the journal will be stored in memory and size limited to avoid excessive disk usage.\n\n```bash\n# Open the journal daemon configuration\nsudo nano /etc/systemd/journald.conf\n\n# Uncomment and change at least the following two lines\n# Journal is stored in volatile memory\n# Limit size to 48 MByte during runtime\n[Journal]\nStorage=volatile\nRuntimeMaxUse=48M\n\n# Adjust limit as desired\n```\n\nActivate the debug level log in journal for meshtasticd native service.\n```bash\n# Open meschtasticd configuration\nsudo nano /etc/meshtasticd/config.yaml\n\n# Set log level to debug\nLogging:\n  LogLevel: debug # debug, info, warn, error\n```\n\n## Create systemd service\n```bash\n# Open meshobserver.service and change the folder names to your repository clone location\n# Copy the service file\nsudo cp meshobserver.service /usr/lib/systemd/system/meshobserver.service\n\n# Reload systemd services\nsudo systemctl daemon-reload\n\n# Enable and run service\nsudo systemctl enable --now meshobserver.service\n\n# Check service status\nsudo systemctl status meshobserver.service\n\n# Check debug log of service\nsudo journalctl -u meshobserver.service -f\n```\n\n## Customization\n\nYou may change the textual content in _index.html.j2_ in case you are running this script for your local mesh and publish the web content.\n\n## Web content output\n\nWeb content will be generated in the _./web_ sub-folder. Statistical graph for each node in _./web/images_. Open the generated _index.html_ in browser.\n\n## npm package\nNo, I will not create an npm package for this.\n\nThis is some pragmatic, individual code for personal use. Feel free to create pull requests in case you want to change or improve the sourcecode. Contribution appreciated.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmictronics%2Fmesh-observer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmictronics%2Fmesh-observer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmictronics%2Fmesh-observer/lists"}