mirror of
https://github.com/pablorevilla-meshtastic/meshview.git
synced 2026-11-01 03:25:47 +01:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b19b51d6a6 | ||
|
|
414beaaab0 |
No files matched your search
@@ -1,10 +0,0 @@
|
||||
# This keeps Docker from including hostOS virtual environment folders
|
||||
env/
|
||||
.venv/
|
||||
|
||||
# Database files and backups
|
||||
*.db
|
||||
*.db-shm
|
||||
*.db-wal
|
||||
backups/
|
||||
*.db.gz
|
||||
@@ -1,54 +0,0 @@
|
||||
name: Build container
|
||||
|
||||
on:
|
||||
push:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
# list of Docker images to use as base name for tags
|
||||
images: |
|
||||
ghcr.io/${{ github.repository }}
|
||||
# generate Docker tags based on the following events/attributes
|
||||
tags: |
|
||||
type=ref,event=branch
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
# publish :latest from the default branch
|
||||
type=raw,value=latest,enable={{is_default_branch}}
|
||||
- name: Login to GitHub Container Registry
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
file: ./Containerfile
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
platforms: linux/amd64,linux/arm64
|
||||
# optional cache (speeds up rebuilds)
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
@@ -1,39 +0,0 @@
|
||||
name: Ruff
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- "**/*.py"
|
||||
- "pyproject.toml"
|
||||
- "ruff.toml"
|
||||
- ".pre-commit-config.yaml"
|
||||
|
||||
jobs:
|
||||
ruff:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.13"
|
||||
|
||||
- name: Cache Ruff
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/ruff
|
||||
key: ruff-${{ runner.os }}-${{ hashFiles('**/pyproject.toml', '**/ruff.toml') }}
|
||||
|
||||
- name: Install Ruff
|
||||
run: pip install "ruff==0.13.3"
|
||||
|
||||
# Lint (with GitHub annotation format for inline PR messages)
|
||||
- name: Ruff check
|
||||
run: ruff check --output-format=github .
|
||||
|
||||
# Fail PR if formatting is needed
|
||||
- name: Ruff format (check-only)
|
||||
run: ruff format --check .
|
||||
|
||||
# TODO: Investigate only applying to changed files and possibly apply fixes
|
||||
-45
@@ -1,48 +1,3 @@
|
||||
env/*
|
||||
__pycache__/*
|
||||
meshview/__pycache__/*
|
||||
alembic/__pycache__/*
|
||||
|
||||
# Database files
|
||||
packets.db
|
||||
packets*.db
|
||||
*.db
|
||||
*.db-shm
|
||||
*.db-wal
|
||||
|
||||
# Database backups
|
||||
backups/
|
||||
*.db.gz
|
||||
|
||||
# Process files
|
||||
meshview-db.pid
|
||||
meshview-web.pid
|
||||
|
||||
# Config and logs
|
||||
/table_details.py
|
||||
config.ini
|
||||
*.log
|
||||
*.status.json
|
||||
|
||||
# Screenshots
|
||||
screenshots/*
|
||||
|
||||
# Python
|
||||
python/nanopb
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
.Python
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
packets.db-journal
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
repos:
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
rev: v0.13.3 # pin the latest you’re comfortable with
|
||||
hooks:
|
||||
- id: ruff
|
||||
args: [--fix, --exit-non-zero-on-fix] # fail if it had to change files
|
||||
- id: ruff-format
|
||||
|
||||
@@ -1,204 +0,0 @@
|
||||
# AI Agent Guidelines for Meshview
|
||||
|
||||
This document provides context and guidelines for AI coding assistants working on the Meshview project.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Meshview is a real-time monitoring and diagnostic tool for Meshtastic mesh networks. It provides web-based visualization and analysis of network activity, including:
|
||||
|
||||
- Real-time packet monitoring from MQTT streams
|
||||
- Interactive map visualization of node locations
|
||||
- Network topology graphs showing connectivity
|
||||
- Message traffic analysis and conversation tracking
|
||||
- Node statistics and telemetry data
|
||||
- Packet inspection and traceroute analysis
|
||||
|
||||
## Architecture
|
||||
|
||||
### Core Components
|
||||
|
||||
1. **MQTT Reader** (`meshview/mqtt_reader.py`) - Subscribes to MQTT topics and receives mesh packets
|
||||
2. **Database Manager** (`meshview/database.py`, `startdb.py`) - Handles database initialization and migrations
|
||||
3. **MQTT Store** (`meshview/mqtt_store.py`) - Processes and stores packets in the database
|
||||
4. **Web Server** (`meshview/web.py`, `main.py`) - Serves the web interface and API endpoints
|
||||
5. **API Layer** (`meshview/web_api/api.py`) - REST API endpoints for data access
|
||||
6. **Models** (`meshview/models.py`) - SQLAlchemy database models
|
||||
7. **Decode Payload** (`meshview/decode_payload.py`) - Protobuf message decoding
|
||||
|
||||
### Technology Stack
|
||||
|
||||
- **Python 3.13+** - Main language
|
||||
- **aiohttp** - Async web framework
|
||||
- **aiomqtt** - Async MQTT client
|
||||
- **SQLAlchemy (async)** - ORM with async support
|
||||
- **Alembic** - Database migrations
|
||||
- **Jinja2** - Template engine
|
||||
- **Protobuf** - Message serialization (Meshtastic protocol)
|
||||
- **SQLite/PostgreSQL** - Database backends (SQLite default, PostgreSQL via asyncpg)
|
||||
|
||||
### Key Patterns
|
||||
|
||||
- **Async/Await** - All I/O operations are asynchronous
|
||||
- **Database Migrations** - Use Alembic for schema changes (see `docs/Database-Changes-With-Alembic.md`)
|
||||
- **Configuration** - INI file-based config (`config.ini`, see `sample.config.ini`)
|
||||
- **Modular API** - API routes separated into `meshview/web_api/` module
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
meshview/
|
||||
├── alembic/ # Database migration scripts
|
||||
├── docs/ # Technical documentation
|
||||
├── meshview/ # Main application package
|
||||
│ ├── static/ # Static web assets (HTML, JS, CSS)
|
||||
│ ├── templates/ # Jinja2 HTML templates
|
||||
│ ├── web_api/ # API route handlers
|
||||
│ └── *.py # Core modules
|
||||
├── main.py # Web server entry point
|
||||
├── startdb.py # Database manager entry point
|
||||
├── mvrun.py # Combined runner (starts both services)
|
||||
├── config.ini # Runtime configuration
|
||||
└── requirements.txt # Python dependencies
|
||||
```
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### Setup
|
||||
|
||||
1. Use Python 3.13+ virtual environment
|
||||
|
||||
### Running
|
||||
|
||||
- **Database**: `./env/bin/python startdb.py`
|
||||
- **Web Server**: `./env/bin/python main.py`
|
||||
- **Both**: `./env/bin/python mvrun.py`
|
||||
|
||||
|
||||
## Code Style
|
||||
|
||||
- **Line length**: 100 characters (see `pyproject.toml`)
|
||||
- **Linting**: Ruff (configured in `pyproject.toml`)
|
||||
- **Formatting**: Ruff formatter
|
||||
- **Type hints**: Preferred but not strictly required
|
||||
- **Async**: Use `async def` and `await` for I/O operations
|
||||
|
||||
## Important Files
|
||||
|
||||
### Configuration
|
||||
- `config.ini` - Runtime configuration (server, MQTT, database, cleanup)
|
||||
- `sample.config.ini` - Template configuration file
|
||||
- `alembic.ini` - Alembic migration configuration
|
||||
|
||||
### Database
|
||||
- `meshview/models.py` - SQLAlchemy models (Packet, Node, Traceroute, etc.)
|
||||
- `meshview/database.py` - Database initialization and session management
|
||||
- `alembic/versions/` - Migration scripts
|
||||
|
||||
### Core Logic
|
||||
- `meshview/mqtt_reader.py` - MQTT subscription and message reception
|
||||
- `meshview/mqtt_store.py` - Packet processing and storage
|
||||
- `meshview/decode_payload.py` - Protobuf decoding
|
||||
- `meshview/web.py` - Web server routes and handlers
|
||||
- `meshview/web_api/api.py` - REST API endpoints
|
||||
|
||||
### Templates
|
||||
- `meshview/templates/` - Jinja2 HTML templates
|
||||
- `meshview/static/` - Static files (HTML pages, JS, CSS)
|
||||
|
||||
## Common Tasks
|
||||
|
||||
### Adding a New API Endpoint
|
||||
|
||||
1. Add route handler in `meshview/web_api/api.py`
|
||||
2. Register route in `meshview/web.py` (if needed)
|
||||
3. Update `docs/API_Documentation.md` if public API
|
||||
|
||||
### Database Schema Changes
|
||||
|
||||
1. Modify models in `meshview/models.py`
|
||||
2. Create migration: `alembic revision --autogenerate -m "description"`
|
||||
3. Review generated migration in `alembic/versions/`
|
||||
4. Test migration: `alembic upgrade head`
|
||||
5. **Never** modify existing migration files after they've been applied
|
||||
|
||||
### Adding a New Web Page
|
||||
|
||||
1. Create template in `meshview/templates/`
|
||||
2. Add route in `meshview/web.py`
|
||||
3. Add navigation link if needed (check existing templates for pattern)
|
||||
4. Add static assets if needed in `meshview/static/`
|
||||
|
||||
### Processing New Packet Types
|
||||
|
||||
1. Check `meshview/decode_payload.py` for existing decoders
|
||||
2. Add decoder function if new type
|
||||
3. Update `meshview/mqtt_store.py` to handle new packet type
|
||||
4. Update database models if new data needs storage
|
||||
|
||||
|
||||
## Key Concepts
|
||||
|
||||
### Meshtastic Protocol
|
||||
- Uses Protobuf for message serialization
|
||||
- Packets contain various message types (text, position, telemetry, etc.)
|
||||
- MQTT topics follow pattern: `msh/{region}/{subregion}/#`
|
||||
|
||||
### Database Schema
|
||||
- **packet** - Raw packet data
|
||||
- **node** - Mesh node information
|
||||
- **traceroute** - Network path information
|
||||
- **packet_seen** - Packet observation records
|
||||
|
||||
### Real-time Updates
|
||||
- Web pages use Server-Sent Events (SSE) for live updates
|
||||
- Map and firehose pages auto-refresh based on config intervals
|
||||
- API endpoints return JSON for programmatic access
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Always use async/await** for database and network operations
|
||||
2. **Use Alembic** for all database schema changes
|
||||
3. **Follow existing patterns** - check similar code before adding new features
|
||||
4. **Update documentation** - keep `docs/` and README current
|
||||
5. **Test migrations** - verify migrations work both up and down
|
||||
6. **Handle errors gracefully** - log errors, don't crash on bad packets
|
||||
7. **Respect configuration** - use `config.ini` values, don't hardcode
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
- **Don't modify applied migrations** - create new ones instead
|
||||
- **Don't block the event loop** - use async I/O, not sync
|
||||
- **Don't forget timezone handling** - timestamps are stored in UTC
|
||||
- **Don't hardcode paths** - use configuration values
|
||||
- **Don't ignore MQTT reconnection** - handle connection failures gracefully
|
||||
|
||||
## Resources
|
||||
|
||||
- **Main README**: `README.md` - Installation and basic usage
|
||||
- **Docker Guide**: `README-Docker.md` - Container deployment
|
||||
- **API Docs**: `docs/API_Documentation.md` - API endpoint reference
|
||||
- **Migration Guide**: `docs/Database-Changes-With-Alembic.md` - Database workflow
|
||||
- **Contributing**: `CONTRIBUTING.md` - Contribution guidelines
|
||||
|
||||
## Version Information
|
||||
|
||||
- **Current Version**: 3.0.0 (November 2025)
|
||||
- **Python Requirement**: 3.13+
|
||||
- **Key Features**: Alembic migrations, automated backups, Docker support, traceroute return paths
|
||||
|
||||
|
||||
## Rules for robots
|
||||
- Always run ruff check and ruff format after making changes (only on python changes)
|
||||
|
||||
|
||||
---
|
||||
|
||||
When working on this project, prioritize:
|
||||
1. Maintaining async patterns
|
||||
2. Following existing code structure
|
||||
3. Using proper database migrations
|
||||
4. Keeping documentation updated
|
||||
5. Testing changes thoroughly
|
||||
|
||||
|
||||
|
||||
-130
@@ -1,130 +0,0 @@
|
||||
# Contributing to Meshview
|
||||
|
||||
First off, thanks for taking the time to contribute! ❤️
|
||||
All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for ways to help and details about how this project handles contributions. Please read the relevant section before getting started — it will make things smoother for both you and the maintainers.
|
||||
|
||||
The Meshview community looks forward to your contributions. 🎉
|
||||
|
||||
> And if you like the project but don’t have time to contribute code, that’s fine! You can still support Meshview by:
|
||||
> - ⭐ Starring the repo on GitHub
|
||||
> - Talking about Meshview on social media
|
||||
> - Referencing Meshview in your own project’s README
|
||||
> - Mentioning Meshview at local meetups or to colleagues/friends
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Code of Conduct](#code-of-conduct)
|
||||
- [I Have a Question](#i-have-a-question)
|
||||
- [I Want to Contribute](#i-want-to-contribute)
|
||||
- [Reporting Bugs](#reporting-bugs)
|
||||
- [Suggesting Enhancements](#suggesting-enhancements)
|
||||
- [Your First Code Contribution](#your-first-code-contribution)
|
||||
- [Improving the Documentation](#improving-the-documentation)
|
||||
- [Styleguides](#styleguides)
|
||||
- [Commit Messages](#commit-messages)
|
||||
- [Join the Project Team](#join-the-project-team)
|
||||
|
||||
---
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
Meshview is an open and welcoming community. We want everyone to feel safe, respected, and valued.
|
||||
|
||||
### Our Standards
|
||||
- Be respectful and considerate in all interactions.
|
||||
- Welcome new contributors and help them learn.
|
||||
- Provide constructive feedback, not personal attacks.
|
||||
- Focus on collaboration and what benefits the community.
|
||||
|
||||
Unacceptable behavior includes harassment, insults, hate speech, personal attacks, or publishing others’ private information without permission.
|
||||
|
||||
---
|
||||
|
||||
## I Have a Question
|
||||
|
||||
> Before asking, please read the [documentation](docs/README.md) if available.
|
||||
|
||||
1. Search the [issues list](../../issues) to see if your question has already been asked.
|
||||
2. If not, open a [new issue](../../issues/new) with the **question** label.
|
||||
3. Provide as much context as possible (OS, Python version, database type, etc.).
|
||||
|
||||
---
|
||||
|
||||
## I Want to Contribute!
|
||||
|
||||
### Legal Notice
|
||||
By contributing to Meshview, you agree that:
|
||||
- You authored the content yourself.
|
||||
- You have the necessary rights to the content.
|
||||
- Your contribution can be provided under the project’s license.
|
||||
|
||||
---
|
||||
|
||||
### Reporting Bugs
|
||||
|
||||
Before submitting a bug report:
|
||||
- Make sure you’re using the latest Meshview version.
|
||||
- Verify the issue is not due to a misconfigured environment (SQLite/MySQL, Python version, etc.).
|
||||
- Search existing [bug reports](../../issues?q=label%3Abug).
|
||||
- Collect relevant information:
|
||||
- Steps to reproduce
|
||||
- Error messages / stack traces
|
||||
- OS, Python version, and database backend
|
||||
- Any logs (`meshview-db.service`, `mqtt_reader.py`, etc.)
|
||||
|
||||
How to report:
|
||||
- Open a [new issue](../../issues/new).
|
||||
- Use a **clear and descriptive title**.
|
||||
- Include reproduction steps and expected vs. actual behavior.
|
||||
|
||||
---
|
||||
|
||||
### Suggesting Enhancements
|
||||
|
||||
Enhancements are tracked as [issues](../../issues). Before suggesting:
|
||||
- Make sure the feature doesn’t already exist.
|
||||
- Search for prior suggestions.
|
||||
- Check that it fits Meshview’s scope (mesh packet analysis, visualization, telemetry, etc.).
|
||||
|
||||
When submitting:
|
||||
- Use a **clear and descriptive title**.
|
||||
- Describe the current behavior and what you’d like to see instead.
|
||||
- Include examples, screenshots, or mockups if relevant.
|
||||
- Explain why it would be useful to most Meshview users.
|
||||
|
||||
---
|
||||
|
||||
### Your First Code Contribution
|
||||
|
||||
We love first-time contributors! 🚀
|
||||
|
||||
If you’d like to start coding:
|
||||
1. Fork the repository and clone it locally.
|
||||
2. Set up the development environment:
|
||||
3. Run the app locally
|
||||
4. Create a new branch from `develop`, make your changes, commit, and push.
|
||||
5. Open a pull request against the `develop` branch.
|
||||
|
||||
---
|
||||
|
||||
### Improving the Documentation
|
||||
|
||||
Docs are just as important as code. You can help by:
|
||||
- Fixing typos or broken links.
|
||||
- Clarifying confusing instructions.
|
||||
- Adding examples (e.g., setting up Nginx as a reverse proxy, SQLite vs. MySQL setup).
|
||||
- Writing or updating tutorials.
|
||||
|
||||
---
|
||||
|
||||
## Join the Project Team
|
||||
|
||||
Meshview is a community-driven project. If you consistently contribute (code, documentation, or community help), we’d love to invite you as a maintainer.
|
||||
|
||||
Start by contributing regularly, engaging in issues/PRs, and helping others.
|
||||
|
||||
---
|
||||
|
||||
✨ That’s it! Thanks again for being part of Meshview. Every contribution matters.
|
||||
@@ -1,79 +0,0 @@
|
||||
# Build Image
|
||||
# Uses python:3.13-slim because no native dependencies are needed for meshview itself
|
||||
# (everything is available as a wheel)
|
||||
|
||||
FROM docker.io/python:3.13-slim AS meshview-build
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends curl patch && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Add a non-root user/group
|
||||
ARG APP_USER=app
|
||||
RUN useradd -m -u 10001 -s /bin/bash ${APP_USER}
|
||||
|
||||
# Install uv and put it on PATH system-wide
|
||||
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
|
||||
&& install -m 0755 /root/.local/bin/uv /usr/local/bin/uv
|
||||
|
||||
WORKDIR /app
|
||||
RUN chown -R ${APP_USER}:${APP_USER} /app
|
||||
|
||||
# Copy deps first for caching
|
||||
COPY --chown=${APP_USER}:${APP_USER} pyproject.toml uv.lock* requirements*.txt ./
|
||||
|
||||
# Optional: wheels-only to avoid slow source builds
|
||||
ENV UV_NO_BUILD=1
|
||||
RUN uv venv /opt/venv
|
||||
# RUN uv sync --frozen
|
||||
ENV VIRTUAL_ENV=/opt/venv
|
||||
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||
|
||||
RUN uv pip install --no-cache-dir --upgrade pip \
|
||||
&& if [ -f requirements.txt ]; then uv pip install --only-binary=:all: -r requirements.txt; fi
|
||||
|
||||
# Copy app code
|
||||
COPY --chown=${APP_USER}:${APP_USER} . .
|
||||
|
||||
# Patch config
|
||||
COPY --chown=${APP_USER}:${APP_USER} container/config.ini /app/sample.config.ini
|
||||
|
||||
# Clean
|
||||
RUN rm -rf /app/.git* && \
|
||||
rm -rf /app/.pre-commit-config.yaml && \
|
||||
rm -rf /app/*.md && \
|
||||
rm -rf /app/COPYING && \
|
||||
rm -rf /app/Containerfile && \
|
||||
rm -rf /app/Dockerfile && \
|
||||
rm -rf /app/container && \
|
||||
rm -rf /app/docker && \
|
||||
rm -rf /app/docs && \
|
||||
rm -rf /app/pyproject.toml && \
|
||||
rm -rf /app/requirements.txt && \
|
||||
rm -rf /app/screenshots
|
||||
|
||||
# Prepare /app and /opt to copy
|
||||
RUN mkdir -p /meshview && \
|
||||
mv /app /opt /meshview
|
||||
|
||||
# Use a clean container for install
|
||||
FROM docker.io/python:3.13-slim
|
||||
ARG APP_USER=app
|
||||
COPY --from=meshview-build /meshview /
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends graphviz && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
useradd -m -u 10001 -s /bin/bash ${APP_USER} && \
|
||||
mkdir -p /etc/meshview /var/lib/meshview /var/log/meshview && \
|
||||
mv /app/sample.config.ini /etc/meshview/config.ini && \
|
||||
chown -R ${APP_USER}:${APP_USER} /var/lib/meshview /var/log/meshview
|
||||
|
||||
# Drop privileges
|
||||
USER ${APP_USER}
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENTRYPOINT [ "/opt/venv/bin/python", "mvrun.py"]
|
||||
CMD ["--pid_dir", "/tmp", "--py_exec", "/opt/venv/bin/python", "--config", "/etc/meshview/config.ini" ]
|
||||
|
||||
EXPOSE 8081
|
||||
VOLUME [ "/etc/meshview", "/var/lib/meshview", "/var/log/meshview" ]
|
||||
@@ -1 +0,0 @@
|
||||
Containerfile
|
||||
@@ -0,0 +1,19 @@
|
||||
Meshview
|
||||
========
|
||||
|
||||
This project watches a MQTT topic for meshtastic messages, imports them to a
|
||||
database and has a web UI to view them.
|
||||
|
||||
Example
|
||||
-------
|
||||
An example instance, https://meshview.armooo.net, is running with with data
|
||||
from the MQTT topic msh/US/bayarea/#.
|
||||
|
||||
|
||||
Running
|
||||
-------
|
||||
$ python3 -m venv env
|
||||
$ ./env/bin/pip install -r requirements.txt
|
||||
$ ./env/bin/python main.py
|
||||
|
||||
Now you can hit http://localhost:8080/
|
||||
@@ -1,262 +0,0 @@
|
||||
# Running MeshView with Docker
|
||||
|
||||
MeshView container images are built automatically and published to GitHub Container Registry.
|
||||
The examples below use a Bash-compatible shell and Docker Compose v2 (`docker compose`).
|
||||
|
||||
## Quick Start
|
||||
|
||||
Prepare the configuration and persistent directories before starting the container:
|
||||
|
||||
```bash
|
||||
docker pull ghcr.io/pablorevilla-meshtastic/meshview:latest
|
||||
mkdir -p meshview/{config,data,logs,backups}
|
||||
|
||||
# First-time setup only: extract the image's bundled configuration.
|
||||
# --entrypoint bypasses the normal MeshView startup command.
|
||||
docker run --rm --entrypoint cat \
|
||||
ghcr.io/pablorevilla-meshtastic/meshview:latest \
|
||||
/etc/meshview/config.ini > meshview/config/config.ini
|
||||
|
||||
# Edit MQTT settings, site settings, and backup options before starting.
|
||||
nano meshview/config/config.ini
|
||||
|
||||
# On Linux, give the container user (UID 10001) ownership of writable data.
|
||||
sudo chown -R 10001 meshview/data meshview/logs meshview/backups
|
||||
sudo chmod -R u+rwX meshview/data meshview/logs meshview/backups
|
||||
# The configuration stays owned by you and must be readable by the container.
|
||||
chmod 755 meshview/config
|
||||
chmod 644 meshview/config/config.ini
|
||||
|
||||
docker run -d \
|
||||
--name meshview \
|
||||
--restart unless-stopped \
|
||||
-p 8081:8081 \
|
||||
-v "$(pwd)/meshview/config:/etc/meshview:ro" \
|
||||
-v "$(pwd)/meshview/data:/var/lib/meshview" \
|
||||
-v "$(pwd)/meshview/logs:/var/log/meshview" \
|
||||
-v "$(pwd)/meshview/backups:/var/lib/meshview/backups" \
|
||||
ghcr.io/pablorevilla-meshtastic/meshview:latest
|
||||
```
|
||||
|
||||
Run the config extraction only for a new installation: the redirection overwrites any
|
||||
existing `config.ini`. On Docker Desktop, host file permissions may be managed differently;
|
||||
the requirement is that UID 10001 can read the configuration and write data, logs, and backups.
|
||||
|
||||
Access the web interface at http://localhost:8081. Check startup with `docker logs -f meshview`.
|
||||
Database migrations run automatically when MeshView starts.
|
||||
|
||||
## Volume Mounts
|
||||
|
||||
| Container path | Purpose | Host directory in the examples |
|
||||
|----------------|---------|--------------------------------|
|
||||
| `/etc/meshview` | Read-only configuration containing `config.ini` | `meshview/config` |
|
||||
| `/var/lib/meshview` | SQLite database storage | `meshview/data` |
|
||||
| `/var/log/meshview` | File logs, when enabled | `meshview/logs` |
|
||||
| `/var/lib/meshview/backups` | Database backups, when enabled | `meshview/backups` |
|
||||
|
||||
An empty host configuration directory hides the image's bundled `config.ini` and prevents
|
||||
startup. There is no fallback when a mounted configuration directory lacks that file.
|
||||
If you omit the configuration mount entirely, the image's bundled configuration is used.
|
||||
|
||||
Stopping or restarting a container does not delete the database. Explicit host mounts make
|
||||
it straightforward to preserve and reuse data when removing or recreating containers.
|
||||
Without explicit mounts, the image declares anonymous volumes; do not rely on those being
|
||||
automatically reused by a replacement container, and do not delete them if you need their data.
|
||||
|
||||
## Docker Compose
|
||||
|
||||
Use the preparation steps from Quick Start, but skip its `docker run -d` command.
|
||||
Create `compose.yaml` **inside the `meshview` directory**, alongside `config`, `data`,
|
||||
`logs`, and `backups`:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
meshview:
|
||||
image: ghcr.io/pablorevilla-meshtastic/meshview:latest
|
||||
container_name: meshview
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8081:8081"
|
||||
volumes:
|
||||
- ./config:/etc/meshview:ro
|
||||
- ./data:/var/lib/meshview
|
||||
- ./logs:/var/log/meshview
|
||||
- ./backups:/var/lib/meshview/backups
|
||||
environment:
|
||||
TZ: America/Los_Angeles
|
||||
```
|
||||
|
||||
Start from that directory:
|
||||
|
||||
```bash
|
||||
cd meshview
|
||||
docker compose up -d
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
Choose either Compose or `docker run` to manage the installation. If switching from the
|
||||
Quick Start container to Compose, stop and remove the old container first, keeping its
|
||||
host directories: `docker stop meshview` followed by `docker rm meshview`.
|
||||
|
||||
## Configuration
|
||||
|
||||
Edit the extracted `config.ini` rather than replacing it with a partial configuration.
|
||||
Keep the container server listening on all interfaces:
|
||||
|
||||
```ini
|
||||
[server]
|
||||
bind = 0.0.0.0
|
||||
port = 8081
|
||||
```
|
||||
|
||||
Set your MQTT broker, topics, and credentials in the existing `[mqtt]` section. The broker
|
||||
must be reachable from the container; `localhost` refers to the container itself.
|
||||
|
||||
Keep the database path inside the mounted data directory:
|
||||
|
||||
```ini
|
||||
[database]
|
||||
connection_string = sqlite+aiosqlite:////var/lib/meshview/packets.db
|
||||
```
|
||||
|
||||
The four slashes after `sqlite+aiosqlite:` specify an absolute Linux path. PostgreSQL
|
||||
is also supported with a connection string such as
|
||||
`postgresql+asyncpg://user:pass@host:5432/meshview`.
|
||||
|
||||
After configuration changes, restart the application with `docker restart meshview`, or
|
||||
`docker compose restart meshview` for a Compose installation.
|
||||
|
||||
### Database Backups
|
||||
|
||||
Enable backups in the existing `[cleanup]` section:
|
||||
|
||||
```ini
|
||||
[cleanup]
|
||||
backup_enabled = True
|
||||
backup_dir = /var/lib/meshview/backups
|
||||
backup_hour = 2
|
||||
backup_minute = 00
|
||||
```
|
||||
|
||||
Both startup examples mount this directory to `meshview/backups` on the host. Backups
|
||||
remain disabled until you enable them in the configuration.
|
||||
|
||||
## Available Tags
|
||||
|
||||
| Tag | Description |
|
||||
|-----|-------------|
|
||||
| `latest` | Latest build from the repository's default branch |
|
||||
| Branch name | Builds published for that branch |
|
||||
| `3.0.6` | Example version tag; use a version published in the registry |
|
||||
|
||||
## Updating
|
||||
|
||||
For a Compose installation, run from the directory containing `compose.yaml`:
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
For a `docker run` installation, run from the same parent directory used in Quick Start:
|
||||
|
||||
```bash
|
||||
docker pull ghcr.io/pablorevilla-meshtastic/meshview:latest
|
||||
docker stop meshview
|
||||
docker rm meshview
|
||||
|
||||
docker run -d \
|
||||
--name meshview \
|
||||
--restart unless-stopped \
|
||||
-p 8081:8081 \
|
||||
-v "$(pwd)/meshview/config:/etc/meshview:ro" \
|
||||
-v "$(pwd)/meshview/data:/var/lib/meshview" \
|
||||
-v "$(pwd)/meshview/logs:/var/log/meshview" \
|
||||
-v "$(pwd)/meshview/backups:/var/lib/meshview/backups" \
|
||||
ghcr.io/pablorevilla-meshtastic/meshview:latest
|
||||
```
|
||||
|
||||
Preserve any custom ports, mounts, or environment settings when recreating the container.
|
||||
Do not repeat the first-time configuration extraction during updates. Pulling an image
|
||||
and merely restarting an existing container does not switch it to the new image.
|
||||
|
||||
## Logs
|
||||
|
||||
```bash
|
||||
docker logs meshview
|
||||
docker logs -f meshview
|
||||
docker logs --tail 100 meshview
|
||||
```
|
||||
|
||||
For Compose installations, `docker compose logs -f meshview` also works.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Container won't start
|
||||
|
||||
Check `docker logs meshview`. Verify that the mounted `config` directory contains a
|
||||
readable `config.ini`, and that the database and log directories are writable by UID 10001.
|
||||
|
||||
### Docker Desktop reports mounts denied
|
||||
|
||||
Make sure the installation directory is shared with Docker Desktop under Settings →
|
||||
Resources → File Sharing. Bind-mount source paths must exist on the Docker daemon's
|
||||
host; a remote daemon cannot mount directories that exist only on your client.
|
||||
|
||||
### Database permission issues
|
||||
|
||||
From the parent directory containing `meshview`, repair writable directory ownership:
|
||||
|
||||
```bash
|
||||
sudo chown -R 10001 meshview/data meshview/logs meshview/backups
|
||||
sudo chmod -R u+rwX meshview/data meshview/logs meshview/backups
|
||||
```
|
||||
|
||||
Setting permissions to `755` alone does not let UID 10001 write to directories owned
|
||||
by another user. SQLite also needs to create journal/WAL files beside the database.
|
||||
|
||||
### Can't connect to MQTT
|
||||
|
||||
Check the broker hostname, port, credentials, and topics in `config.ini`.
|
||||
Test DNS resolution and a TCP connection using Python, which is included in the image:
|
||||
|
||||
```bash
|
||||
# Replace the hostname and port with your configured broker.
|
||||
docker exec meshview /opt/venv/bin/python -c \
|
||||
'import socket; s = socket.create_connection(("mqtt.meshtastic.org", 1883), timeout=10); print("TCP connection successful"); s.close()'
|
||||
```
|
||||
|
||||
This checks network connectivity, not MQTT authentication or topic permissions.
|
||||
The image does not include `ping`.
|
||||
|
||||
### Port already in use
|
||||
|
||||
Change the host port (left side) to `8082`, keeping the container port at `8081`:
|
||||
|
||||
```bash
|
||||
-p 8082:8081
|
||||
```
|
||||
|
||||
For Compose, use `"8082:8081"` under `ports`. Access http://localhost:8082.
|
||||
|
||||
## Building Your Own Image
|
||||
|
||||
```bash
|
||||
git clone https://github.com/pablorevilla-meshtastic/meshview.git
|
||||
cd meshview
|
||||
docker build -f Containerfile -t meshview:local .
|
||||
```
|
||||
|
||||
Use `meshview:local` instead of the registry image in the setup and run commands.
|
||||
|
||||
## Security Notes
|
||||
|
||||
- The container runs as a non-root user (`app`, UID 10001).
|
||||
- No privileged access is required.
|
||||
- The examples publish port 8081 on the host; configuration is mounted read-only.
|
||||
- Database, file logs, and backups use the mounted directories shown above.
|
||||
|
||||
## Support
|
||||
|
||||
- GitHub Issues: https://github.com/pablorevilla-meshtastic/meshview/issues
|
||||
- Documentation: https://github.com/pablorevilla-meshtastic/meshview
|
||||
@@ -1,706 +0,0 @@
|
||||
|
||||
# Meshview
|
||||

|
||||
|
||||
The project serves as a real-time monitoring and diagnostic tool for the Meshtastic mesh network. It provides detailed insights into network activity, including message traffic, node positions, and telemetry data.
|
||||
|
||||
### Version 3.0.9 — October 2026
|
||||
|
||||
- Protobufs: refreshed Meshtastic schemas and Python type stubs to upstream commit `569a2b3ae7b6bda1a7ab177463a55d8ede3bef53`; updated the refresh script to handle custom metadata options.
|
||||
- Live map: added animated packet traces from senders to reporting gateways and configurable channel colors through the optional `[map_channel_colors]` section in `config.ini`.
|
||||
- Daily snapshots: new snapshots report activity for the previous complete UTC day, including newly imported packets, unique packet senders observed that day, and gateways that reported packets that day. Existing historical snapshots keep their original counts.
|
||||
- Node tracking: record nodes from packet activity before their node information arrives, and preserve known positions when map reports have missing or invalid coordinates.
|
||||
- Neighbor SNR chart: show the last seven days and the 15 neighbors with the most data points, distinguish neighbors with identical short names, and fix CSV export.
|
||||
- MQTT reliability: skip malformed messages and invalid node IDs without stopping packet ingestion.
|
||||
- Security and privacy: escape mesh-provided text in web pages, restrict language and static file requests to their intended directories, and prevent payload searches from matching redacted direct messages.
|
||||
- Coverage API: validate and bound request parameters, and run coverage calculations off the event loop to keep the web server responsive.
|
||||
- Contributors: thanks to [nullrouten0](https://github.com/nullrouten0) and Nathan for the neighbor SNR chart, MQTT reliability, security, privacy, and coverage API fixes; Manuel Villaverde for improving map channel color visibility; and [Pablo Revilla](https://github.com/pablorevilla-meshtastic) for the live map, node tracking, and daily snapshot updates.
|
||||
|
||||
### Version 3.0.8 — September 2026
|
||||
- Map updates: added OpenTopoMap as a selectable base map, improved map controls, and fixed several map/node display edge cases.
|
||||
- Traceroute: added a dedicated traceroute page, corrected route path orientation in graph edges, and improved traceroute API/documentation support.
|
||||
- Routing display: show ROUTING ACK/NAK packets clearly instead of reporting misleading `error_reason: NONE` values.
|
||||
- MQTT/decryption: expanded Meshtastic one-byte PSK shorthand support in `mqtt.secondary_keys`.
|
||||
- Health/maintenance: added cleanup status reporting to the health page and fixed timezone handling in health reporting.
|
||||
- UI/API fixes: improved Firehose, Node, and Top channel handling, including showing all channels where expected.
|
||||
- Contributors: thanks to [giannoug](https://github.com/giannoug) for fixes to ROUTING ACK/NAK display, `mqtt.secondary_keys` PSK shorthand handling, and traceroute path orientation, plus jschrempp and the Meshview community for testing and feedback included in this release.
|
||||
|
||||
### Version 3.0.7 — May 2026
|
||||
- Reliability report: added a dedicated reliability page for checking how well a selected node is heard across the mesh, including heard/missed status, packet counts, hop counts, gateway tables, and a map view.
|
||||
- Node list/map UX: added node list filtering for wider active-node ranges, included all database nodes where appropriate, and made map node colors persistent across reboots.
|
||||
- QR/API fixes: corrected QR code generation when a node role is missing or unavailable.
|
||||
- Database cleanup: removed stored node public key data and added the Alembic migration to drop `node.public_key`.
|
||||
- Protobufs: refreshed Meshtastic protobuf Python modules to upstream commit
|
||||
- Tooling: improved the protobuf updater so it supports raw commit SHAs, the newer upstream `meshtastic/*.proto` layout, generated `.pyi` stubs, and the vendored `nanopb`/`serial_hal` outputs.
|
||||
|
||||
### Version 3.0.6 — March 2026
|
||||
- Daily snapshots: added the `daily_snapshot` table, scheduled snapshot capture, and `/api/snapshots/daily` for historical node, packet, and gateway counts.
|
||||
Each new snapshot stores packets imported during the previous complete UTC day,
|
||||
labeled with that day's date. Node and gateway counts are database totals at capture
|
||||
time. Existing historical snapshots retain their previously stored packet totals.
|
||||
- Stats/UI: expanded stats views with snapshot data and added channel filters to Chat and Firehose.
|
||||
- Map/node fixes: corrected node location handling, map popup behavior, packet page display, and node list sorting.
|
||||
- Ingestion/API reliability: improved duplicate `PacketSeen` handling, guarded invalid node info packets, and made traceroute/edge APIs more tolerant of decode failures.
|
||||
- Language support: added Russian translations.
|
||||
|
||||
### Version 3.0.5 — February 2026
|
||||
- **IMPORTANT:** the predicted coverage feature requires the extra `pyitm` dependency. If it is not installed, the coverage API will return 503.
|
||||
- Ubuntu install (inside the venv): `./env/bin/pip install pyitm`
|
||||
- Coverage: predicted coverage overlay (Longley‑Rice area mode) with perimeter rendering and documentation.
|
||||
- UI: added QR code display for quick node/app access.
|
||||
- Gateways: persistent gateway tracking (`is_mqtt_gateway`) and UI indicators in nodes, map popups, and stats.
|
||||
- Map UX: deterministic jitter for overlapping nodes; edges follow jittered positions.
|
||||
- Tooling: Meshtastic protobuf updater script with `--check` and `UPSTREAM_REV.txt` tracking.
|
||||
|
||||
|
||||
### Version 3.0.4 — Late January 2026
|
||||
- Database: multi‑DB support, PostgreSQL scripts, WAL config for SQLite, cleanup query timing fixes, removal of import time columns, and various time‑handling fixes.
|
||||
- UI/UX: extensive updates to node.html, nodelist.html, top.html, and packet.html (paging, stats, distance, status/favorites), plus net view changes to 12‑hour window.
|
||||
- API/logic: weekly mesh query fix, node list performance improvement, backwards‑compatibility and other bug fixes.
|
||||
- MQTT reader: configurable skip‑node list and secondary decryption keys.
|
||||
- Docs/ops: multiple documentation updates, updated site list, container workflow fixes/tests, README updates.
|
||||
|
||||
### Version 3.0.2 — January 2026
|
||||
- Changes to the Database to will make it so that there is a need for space when updating to the latest. SQlite requires to rebuild the database when droping a column. ( we are droping some of the old columns) so make sure you have 1.2x the size of the db of space in your environment. Depending on how big your db is it would take a long time.
|
||||
|
||||
### Version 3.0.1 — December 2025
|
||||
|
||||
#### 🌐 Multi-Language Support (i18n)
|
||||
- New `/api/lang` endpoint for serving translations
|
||||
- Section-based translation loading (e.g., `?section=firehose`)
|
||||
- Default language controlled via config file language section
|
||||
- JSON-based translation files for easy expansion
|
||||
- Core pages updated to support `data-translate-lang` attributes
|
||||
|
||||
### 🛠 Improvements
|
||||
- Updated UI elements across multiple templates for localization readiness
|
||||
- General cleanup to support future language additions
|
||||
|
||||
### Version 3.0.0 update - November 2025
|
||||
|
||||
**Major Infrastructure Improvements:**
|
||||
|
||||
* **Database Migrations**: Alembic integration for safe schema upgrades and database versioning
|
||||
* **Automated Backups**: Independent database backup system with gzip compression (separate from cleanup)
|
||||
* **Development Tools**: Quick setup script (`setup-dev.sh`) with pre-commit hooks for code quality
|
||||
* **Docker Support**: Pre-built containers now available on GitHub Container Registry with automatic builds - ogarcia
|
||||
|
||||
**New Features:**
|
||||
|
||||
* **Traceroute Return Path**: Log and display return path data for traceroute packets - jschrempp
|
||||
* **Microsecond Timestamps**: Added `import_time_us` columns for higher precision time tracking
|
||||
|
||||
**Technical Improvements:**
|
||||
|
||||
* Migration from manual SQL to Alembic-managed schema
|
||||
* Container images use `uv` for faster dependency installation
|
||||
* Python 3.13 support with slim Debian-based images
|
||||
* Documentation collection in `docs/` directory
|
||||
* API routes moved to separate modules for better organization
|
||||
* /version and /health endpoints added for monitoring
|
||||
|
||||
See [README-Docker.md](README-Docker.md) for container deployment and [docs/](docs/) for technical documentation.
|
||||
|
||||
### Version 2.0.7 update - September 2025
|
||||
* New database maintenance capability to automatically keep a specific number of days of data.
|
||||
* Added configuration for update intervals for both the Live Map and the Firehose pages.
|
||||
|
||||
### Version 2.0.6 update - August 2025
|
||||
* New Live Map (Shows packet feed live)
|
||||
* New API /api/config (See API documentation)
|
||||
* New API /api/edges (See API documentation)
|
||||
* Adds edges to the map (click to see traceroute and neighbours)
|
||||
|
||||
|
||||
### Version 2.0.4 update - August 2025
|
||||
* New statistic page with more data.
|
||||
* New API /api/stats (See API documentation).
|
||||
* Inprovement on "See Everything" and "Conversation" pages.
|
||||
* Tracking of replies with links to original message.
|
||||
|
||||
### Version 2.0.3 update - June 2025
|
||||
* Moved more graphs to eCharts.
|
||||
* Addedd smooth updating for "Conversations" and "See everything" sections.
|
||||
* Now you can turn on and off "Quick Links".
|
||||
* Network graphs are now dynamically generated depending on your mesh and the presets in use.
|
||||
* Download node's packet information for the last 3 days to .csv file.
|
||||
* Display distance traveled by packet.
|
||||
### Key Features
|
||||
|
||||
* **Live Data Visualization**: Users can view real-time data from the mesh network, including text messages, GPS positions, and node information.
|
||||
|
||||
* **Interactive Map**: The site offers an interactive map displaying the locations of active nodes, helping users identify network coverage areas.
|
||||
|
||||
* **Mesh Graphs**: Visual representations of the network's structure and connectivity are available, illustrating how nodes are interconnected.
|
||||
|
||||
* **Packet Analysis**: Detailed information on individual data packets transmitted within the network can be accessed, including payload content and transmission paths.
|
||||
|
||||
* **Node Statistics**: Users can explore statistics related to network traffic, such as top contributors and message volumes.
|
||||
|
||||
Samples of currently running instances:
|
||||
|
||||
| Area | URL | Version | Nodes | Last Updated |
|
||||
| --- | --- | --- | ---: | --- |
|
||||
| Polski Mesh | https://meshview.format.ovh | 3.0.6 (65386be) | 4,827 | 4/1/2026, 12:12:25 PM |
|
||||
| Poland | https://meshview.szastan.pl | 3.0.5 (unknown) | 4,194 | 4/1/2026, 12:12:39 PM |
|
||||
| Spain | https://meshview.meshtastic.es | 3.0.5 (unknown) | 2,466 | 4/1/2026, 12:11:17 PM |
|
||||
| San Francisco Bay Area | https://meshview.bayme.sh | 3.0.5 (bdf70da) | 1,983 | 4/1/2026, 12:11:08 PM |
|
||||
| Southern California | https://meshview.socalmesh.org | 3.0.5 (unknown) | 1,205 | 4/1/2026, 12:11:50 PM |
|
||||
| Oregon (USA) | https://meshview.meshoregon.com | 3.0.5 (bdf70da) | 1,167 | 4/1/2026, 12:11:41 PM |
|
||||
| Australia/ New Zeland | https://my.meshview.world/anz | plus 1.0.0 | 1,165 | 4/1/2026, 12:11:59 PM |
|
||||
| Hessen - Germany | https://meshview.lsinfra.de | 3.0.5 (unknown) | 1,082 | 4/1/2026, 12:11:30 PM |
|
||||
| New York City | https://meshview.nyme.sh | 3.0.5 (bdf70da) | 984 | 4/1/2026, 12:11:26 PM |
|
||||
| Salt Lake City (USA) | https://meshview.freq51.net | — | 801 | 4/1/2026, 12:11:36 PM |
|
||||
| Salzburg / Austria | https://meshview-salzburg.jmt.gr | — | 748 | 4/1/2026, 12:11:21 PM |
|
||||
| North Georgia / East Tennessee - USA | https://view.mtnme.sh | 3.0.3 (ff30623) | 730 | 4/1/2026, 12:11:33 PM |
|
||||
| Canada | https://mv.canadaverse.org | 3.0.1 (unknown) | 674 | 4/1/2026, 12:12:06 PM |
|
||||
| Pioneer Valley, Massachusetts (USA) | https://meshview.pvmesh.org | 3.0.4 (018e16e) | 560 | 4/1/2026, 12:11:44 PM |
|
||||
| Western Pennsylvania (USA) | https://map.wpamesh.net | 3.0.5 (unknown) | 447 | 4/1/2026, 12:11:38 PM |
|
||||
| Great Britan | https://my.meshview.world/gb | plus 1.0.0 | 421 | 4/1/2026, 12:12:03 PM |
|
||||
| Chicago (USA) | https://meshview.chicagolandmesh.org | 3.0.5 (unknown) | 420 | 4/1/2026, 12:12:41 PM |
|
||||
| Georgia (USA) | https://meshview.gamesh.net | 3.0.1 (unknown) | 384 | 4/1/2026, 12:11:45 PM |
|
||||
| Brazil | https://my.meshview.world/brazil | plus 1.0.0 | 364 | 4/1/2026, 12:12:01 PM |
|
||||
| Mexico | https://my.meshview.world/mexico | plus 1.0.0 | 268 | 4/1/2026, 12:11:59 PM |
|
||||
| Northeast Ohio | https://meshview.neomesh.org | 3.0.5 (unknown) | 264 | 4/1/2026, 12:11:52 PM |
|
||||
| South Africa | https://my.meshview.world/za | plus 1.0.0 | 263 | 4/1/2026, 12:12:07 PM |
|
||||
| Argentina | https://my.meshview.world/argentina | plus 1.0.0 | 258 | 4/1/2026, 12:12:00 PM |
|
||||
| Northwest Indiana (USA) | https://meshview.nwimesh.net | 3.0.5 (2cc53dc) | 219 | 4/1/2026, 12:12:08 PM |
|
||||
| Louisiana (USA) | https://meshview.louisianamesh.org | — | 78 | 4/1/2026, 12:11:51 PM |
|
||||
| Chile | https://my.meshview.world/chile | plus 1.0.0 | 58 | 4/1/2026, 12:12:06 PM |
|
||||
| Colombia | https://meshview.meshcolombia.co | 3.0.5 (2cc53dc) | 55 | 4/1/2026, 12:11:46 PM |
|
||||
| Croatia | https://map.cromesh.eu | — | 0 | 4/1/2026, 12:11:45 PM |
|
||||
| Saint Louis (USA) | https://meshview.meshstl.org | 3.0.5 (2cc53dc) | 0 | 4/1/2026, 12:11:51 PM |
|
||||
| Southwest Louisiana (USA) | https://www.swlamesh.com | — | 0 | 4/1/2026, 12:11:46 PM |
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
### Updating from 2.x to 3.x
|
||||
We are adding the use of Alembic. If using GitHub
|
||||
Update your codebase by running the pull command
|
||||
```bash
|
||||
cd meshview
|
||||
git pull origin master
|
||||
```
|
||||
Install Alembic in your environment
|
||||
```bash
|
||||
./env/bin/pip install alembic
|
||||
```
|
||||
Start your scripts or services. This process will update your database with the latest schema.
|
||||
|
||||
## Installing
|
||||
|
||||
### Using Docker (Recommended)
|
||||
|
||||
The easiest way to run MeshView is using Docker. Pre-built images are available from GitHub Container Registry.
|
||||
|
||||
See **[README-Docker.md](README-Docker.md)** for complete Docker installation and usage instructions.
|
||||
|
||||
### Manual Installation
|
||||
|
||||
Requires **`python3.13`** or above.
|
||||
|
||||
Clone the repo from GitHub:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/pablorevilla-meshtastic/meshview.git
|
||||
cd meshview
|
||||
```
|
||||
|
||||
#### Quick Setup (Recommended)
|
||||
|
||||
Run the development setup script:
|
||||
|
||||
```bash
|
||||
./setup-dev.sh
|
||||
```
|
||||
|
||||
This will:
|
||||
- Create Python virtual environment
|
||||
- Install all requirements
|
||||
- Install development tools (pre-commit, pytest)
|
||||
- Set up pre-commit hooks for code formatting
|
||||
- Create config.ini from sample
|
||||
|
||||
#### Manual Setup
|
||||
|
||||
Create a Python virtual environment:
|
||||
|
||||
```bash
|
||||
python3 -m venv env
|
||||
```
|
||||
|
||||
Install the environment requirements:
|
||||
|
||||
```bash
|
||||
./env/bin/pip install -r requirements.txt
|
||||
```
|
||||
|
||||
Install `graphviz` on MacOS or Debian/Ubuntu Linux:
|
||||
|
||||
```bash
|
||||
sudo apt-get install graphviz
|
||||
```
|
||||
|
||||
Copy `sample.config.ini` to `config.ini`:
|
||||
|
||||
```bash
|
||||
cp sample.config.ini config.ini
|
||||
```
|
||||
|
||||
Edit `config.ini` to match your MQTT and web server settings:
|
||||
|
||||
|
||||
```bash
|
||||
nano config.ini
|
||||
```
|
||||
|
||||
> **NOTE**
|
||||
> On MacOS set the bind configuration line to
|
||||
> ```
|
||||
> bind = 127.0.0.1
|
||||
> ```
|
||||
|
||||
Example:
|
||||
|
||||
```ini
|
||||
# -------------------------
|
||||
# Server Configuration
|
||||
# -------------------------
|
||||
[server]
|
||||
# The address to bind the server to. Use * to listen on all interfaces.
|
||||
bind = *
|
||||
|
||||
# Port to run the web server on.
|
||||
port = 8081
|
||||
|
||||
# Path to TLS certificate (leave blank to disable HTTPS).
|
||||
tls_cert =
|
||||
|
||||
# Path for the ACME challenge if using Let's Encrypt.
|
||||
acme_challenge =
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Site Appearance & Behavior
|
||||
# -------------------------
|
||||
[site]
|
||||
# The domain name of your site.
|
||||
domain =
|
||||
|
||||
# Select language (this represents the name of the json file in the /lang directory)
|
||||
language = es
|
||||
|
||||
# Site title to show in the browser title bar and headers.
|
||||
title = Bay Area Mesh
|
||||
|
||||
# A brief message shown on the homepage.
|
||||
message = Real time data from around the bay area and beyond.
|
||||
|
||||
# Enable or disable site features (as strings: "True" or "False").
|
||||
nodes = True
|
||||
conversations = True
|
||||
everything = True
|
||||
graphs = True
|
||||
stats = True
|
||||
net = True
|
||||
map = True
|
||||
top = True
|
||||
# Show the API documentation link in the navigation bar (default: True).
|
||||
api = True
|
||||
|
||||
# Map boundaries (used for the map view).
|
||||
# Defaults will show the San Francisco Bay Area
|
||||
map_top_left_lat = 39
|
||||
map_top_left_lon = -123
|
||||
map_bottom_right_lat = 36
|
||||
map_bottom_right_lon = -121
|
||||
|
||||
# Updates intervals in seconds, zero or negative number means no updates
|
||||
# defaults will be 3 seconds
|
||||
map_interval=3
|
||||
firehose_interval=3
|
||||
|
||||
# Weekly net details
|
||||
weekly_net_message = Weekly Mesh check-in. We will keep it open on every Wednesday from 5:00pm for checkins. The message format should be (LONG NAME) - (CITY YOU ARE IN) #BayMeshNet.
|
||||
net_tag = #BayMeshNet
|
||||
|
||||
# -------------------------
|
||||
# MQTT Broker Configuration
|
||||
# -------------------------
|
||||
[mqtt]
|
||||
# MQTT server hostname or IP.
|
||||
server = mqtt.bayme.sh
|
||||
|
||||
# Topics to subscribe to (as JSON-like list, but still a string).
|
||||
topics = ["msh/US/bayarea/#", "msh/US/CA/mrymesh/#", "msh/US/CA/sacvalley"]
|
||||
|
||||
# Port used by MQTT (typically 1883 for unencrypted).
|
||||
port = 1883
|
||||
|
||||
# MQTT username and password.
|
||||
username = meshdev
|
||||
password = large4cats
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Database Configuration
|
||||
# -------------------------
|
||||
[database]
|
||||
# SQLAlchemy async connection string.
|
||||
# Examples:
|
||||
# sqlite+aiosqlite:///packets.db
|
||||
# postgresql+asyncpg://user:pass@host:5432/meshview
|
||||
connection_string = sqlite+aiosqlite:///packets.db
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Database Cleanup Configuration
|
||||
# -------------------------
|
||||
[cleanup]
|
||||
# Enable or disable daily cleanup
|
||||
enabled = False
|
||||
# Number of days to keep records in the database
|
||||
days_to_keep = 14
|
||||
# Time to run daily cleanup (24-hour format)
|
||||
hour = 2
|
||||
minute = 00
|
||||
# Run VACUUM after cleanup
|
||||
vacuum = False
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Logging Configuration
|
||||
# -------------------------
|
||||
[logging]
|
||||
# Enable or disable HTTP access logs from the web server
|
||||
# When disabled, request logs like "GET /api/chat" will not appear
|
||||
# Application logs (errors, startup messages, etc.) are unaffected
|
||||
# Set to True to enable, False to disable (default: False)
|
||||
access_log = False
|
||||
# Database cleanup logfile location
|
||||
db_cleanup_logfile = dbcleanup.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## NOTE (PostgreSQL setup)**
|
||||
If you want to use PostgreSQL instead of SQLite:
|
||||
|
||||
Install PostgreSQL for your OS.
|
||||
Create a user and database:
|
||||
```
|
||||
`CREATE USER meshview WITH PASSWORD 'change_me';`
|
||||
`CREATE DATABASE meshview OWNER meshview;`
|
||||
```
|
||||
Update `config.ini` example:
|
||||
```
|
||||
`connection_string = postgresql+asyncpg://meshview:change_me@localhost:5432/meshview`
|
||||
```
|
||||
|
||||
## Running Meshview
|
||||
|
||||
Start the database manager:
|
||||
|
||||
```bash
|
||||
./env/bin/python startdb.py
|
||||
```
|
||||
|
||||
Start the web server:
|
||||
|
||||
```bash
|
||||
./env/bin/python main.py
|
||||
```
|
||||
|
||||
> **NOTE**
|
||||
> You can specify a custom config file with the `--config` flag:
|
||||
>
|
||||
> ```bash
|
||||
> ./env/bin/python startdb.py --config /path/to/config.ini
|
||||
> ./env/bin/python main.py --config /path/to/config.ini
|
||||
> ```
|
||||
|
||||
Open in your browser: http://localhost:8081/
|
||||
|
||||
---
|
||||
|
||||
## Running Meshview with `mvrun.py`
|
||||
|
||||
- `mvrun.py` starts both `startdb.py` and `main.py` in separate threads and merges the output.
|
||||
- It accepts several command-line arguments for flexible deployment.
|
||||
|
||||
```bash
|
||||
./env/bin/python mvrun.py
|
||||
```
|
||||
|
||||
**Command-line options:**
|
||||
- `--config CONFIG` - Path to the configuration file (default: `config.ini`)
|
||||
- `--pid_dir PID_DIR` - Directory for PID files (default: `.`)
|
||||
- `--py_exec PY_EXEC` - Path to the Python executable (default: `./env/bin/python`)
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# Use a specific config file
|
||||
./env/bin/python mvrun.py --config /etc/meshview/config.ini
|
||||
|
||||
# Store PID files in a specific directory
|
||||
./env/bin/python mvrun.py --pid_dir /var/run/meshview
|
||||
|
||||
# Use a different Python executable
|
||||
./env/bin/python mvrun.py --py_exec /usr/bin/python3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Setting Up Systemd Services (Ubuntu)
|
||||
|
||||
To run Meshview automatically on boot, create systemd services for `startdb.py` and `main.py`.
|
||||
> **NOTE**
|
||||
> You need to change the "User" and "/path/to/meshview" for your instance of the code on each service.
|
||||
|
||||
### 1. Service for `startdb.py`
|
||||
|
||||
Create:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/meshview-db.service
|
||||
```
|
||||
|
||||
Paste:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Meshview Database Initializer
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/path/to/meshview
|
||||
ExecStart=/path/to/meshview/env/bin/python /path/to/meshview/startdb.py --config /path/to/meshview/config.ini
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
User=yourusername
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
### 2. Service for `main.py`
|
||||
|
||||
Create:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/systemd/system/meshview-web.service
|
||||
```
|
||||
|
||||
Paste:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Meshview Web Server
|
||||
After=network.target meshview-db.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/path/to/meshview
|
||||
ExecStart=/path/to/meshview/env/bin/python /path/to/meshview/main.py --config /path/to/meshview/config.ini
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
User=yourusername
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
### 3. Enable and start the services
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reexec
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable meshview-db
|
||||
sudo systemctl enable meshview-web
|
||||
sudo systemctl start meshview-db
|
||||
sudo systemctl start meshview-web
|
||||
```
|
||||
|
||||
### 4. Check status
|
||||
|
||||
```bash
|
||||
systemctl status meshview-db
|
||||
systemctl status meshview-web
|
||||
```
|
||||
|
||||
**TIP**
|
||||
After editing `.service` files, always run:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
```
|
||||
|
||||
## 5. Database Maintenance
|
||||
### Database maintnance can now be done via the script itself here is the section from the configuration file.
|
||||
- Simple to setup
|
||||
- It will not drop any packets
|
||||
```
|
||||
# -------------------------
|
||||
# Database Cleanup Configuration
|
||||
# -------------------------
|
||||
[cleanup]
|
||||
# Enable or disable daily cleanup
|
||||
enabled = False
|
||||
# Number of days to keep records in the database
|
||||
days_to_keep = 14
|
||||
# Time to run daily cleanup (24-hour format)
|
||||
hour = 2
|
||||
minute = 00
|
||||
# Run VACUUM after cleanup
|
||||
vacuum = False
|
||||
|
||||
# -------------------------
|
||||
# Logging Configuration
|
||||
# -------------------------
|
||||
[logging]
|
||||
# Enable or disable HTTP access logs from the web server
|
||||
access_log = False
|
||||
# Database cleanup logfile location
|
||||
db_cleanup_logfile = dbcleanup.log
|
||||
```
|
||||
Once changes are done you need to restart the script for changes to load.
|
||||
|
||||
### Alternatively we can do it via your OS (This example is Ubuntu like OS)
|
||||
- Create and save bash script below. (Modify /path/to/file/ to the correct path)
|
||||
- Name it cleanup.sh
|
||||
- Make it executable.
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
DB_FILE="/path/to/file/packets.db"
|
||||
|
||||
# Stop DB service
|
||||
sudo systemctl stop meshview-db.service
|
||||
sudo systemctl stop meshview-web.service
|
||||
|
||||
sleep 5
|
||||
echo "Run cleanup..."
|
||||
# Run cleanup queries
|
||||
sqlite3 "$DB_FILE" <<EOF
|
||||
DELETE FROM packet
|
||||
WHERE import_time_us IS NOT NULL
|
||||
AND import_time_us < (strftime('%s','now','-14 days') * 1000000);
|
||||
SELECT 'packet deleted: ' || changes();
|
||||
DELETE FROM packet_seen
|
||||
WHERE import_time_us IS NOT NULL
|
||||
AND import_time_us < (strftime('%s','now','-14 days') * 1000000);
|
||||
SELECT 'packet_seen deleted: ' || changes();
|
||||
DELETE FROM traceroute
|
||||
WHERE import_time_us IS NOT NULL
|
||||
AND import_time_us < (strftime('%s','now','-14 days') * 1000000);
|
||||
SELECT 'traceroute deleted: ' || changes();
|
||||
DELETE FROM node
|
||||
WHERE last_seen_us IS NULL
|
||||
OR last_seen_us < (strftime('%s','now','-14 days') * 1000000);
|
||||
SELECT 'node deleted: ' || changes();
|
||||
VACUUM;
|
||||
EOF
|
||||
|
||||
# Start DB service
|
||||
sudo systemctl start meshview-db.service
|
||||
sudo systemctl start meshview-web.service
|
||||
|
||||
echo "Database cleanup completed on $(date)"
|
||||
|
||||
```
|
||||
- If you are using PostgreSQL, use this version instead (adjust credentials/DB name):
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
DB="postgresql://meshview@localhost:5432/meshview"
|
||||
RETENTION_DAYS=14
|
||||
BATCH_SIZE=100
|
||||
|
||||
PSQL="/usr/bin/psql"
|
||||
|
||||
echo "[$(date)] Starting batched cleanup..."
|
||||
|
||||
while true; do
|
||||
DELETED=$(
|
||||
$PSQL "$DB" -At -v ON_ERROR_STOP=1 <<EOF
|
||||
WITH cutoff AS (
|
||||
SELECT (EXTRACT(EPOCH FROM (NOW() - INTERVAL '${RETENTION_DAYS} days')) * 1000000)::bigint AS ts
|
||||
),
|
||||
old_packets AS (
|
||||
SELECT id
|
||||
FROM packet, cutoff
|
||||
WHERE import_time_us IS NOT NULL
|
||||
AND import_time_us < cutoff.ts
|
||||
ORDER BY id
|
||||
LIMIT ${BATCH_SIZE}
|
||||
),
|
||||
ps_del AS (
|
||||
DELETE FROM packet_seen
|
||||
WHERE packet_id IN (SELECT id FROM old_packets)
|
||||
RETURNING 1
|
||||
),
|
||||
tr_del AS (
|
||||
DELETE FROM traceroute
|
||||
WHERE packet_id IN (SELECT id FROM old_packets)
|
||||
RETURNING 1
|
||||
),
|
||||
p_del AS (
|
||||
DELETE FROM packet
|
||||
WHERE id IN (SELECT id FROM old_packets)
|
||||
RETURNING 1
|
||||
)
|
||||
SELECT COUNT(*) FROM p_del;
|
||||
EOF
|
||||
)
|
||||
|
||||
if [[ "$DELETED" -eq 0 ]]; then
|
||||
break
|
||||
fi
|
||||
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
echo "[$(date)] Packet cleanup complete"
|
||||
|
||||
echo "[$(date)] Cleaning old nodes..."
|
||||
|
||||
$PSQL "$DB" -v ON_ERROR_STOP=1 <<EOF
|
||||
DELETE FROM node
|
||||
WHERE last_seen_us IS NOT NULL
|
||||
AND last_seen_us < (
|
||||
EXTRACT(EPOCH FROM (NOW() - INTERVAL '${RETENTION_DAYS} days')) * 1000000
|
||||
);
|
||||
EOF
|
||||
|
||||
echo "[$(date)] Node cleanup complete"
|
||||
|
||||
$PSQL "$DB" -c "VACUUM (ANALYZE) packet_seen;"
|
||||
$PSQL "$DB" -c "VACUUM (ANALYZE) traceroute;"
|
||||
$PSQL "$DB" -c "VACUUM (ANALYZE) packet;"
|
||||
$PSQL "$DB" -c "VACUUM (ANALYZE) node;"
|
||||
|
||||
echo "[$(date)] Cleanup finished"
|
||||
```
|
||||
- Schedule running the script on a regular basis.
|
||||
- In this example it runs every night at 2:00am.
|
||||
|
||||
Open scheduler:
|
||||
```bash
|
||||
sudo crontab -e
|
||||
```
|
||||
Add schedule to the bottom of the file (modify /path/to/file/ to the correct path):
|
||||
```bash
|
||||
0 2 * * * /path/to/file/cleanup.sh >> /path/to/file/cleanup.log 2>&1
|
||||
```
|
||||
|
||||
Check the log file to see it the script run at the specific time.
|
||||
|
||||
---
|
||||
|
||||
## Technical Documentation
|
||||
|
||||
For more detailed technical documentation including database migrations, architecture details, and advanced topics, see the [docs/](docs/) directory.
|
||||
-120
@@ -1,120 +0,0 @@
|
||||
# A generic, single database configuration.
|
||||
|
||||
[alembic]
|
||||
# path to migration scripts
|
||||
# Use forward slashes (/) also on windows to provide an os agnostic path
|
||||
script_location = alembic
|
||||
|
||||
# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s
|
||||
# Uncomment the line below if you want the files to be prepended with date and time
|
||||
# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file
|
||||
# for all available tokens
|
||||
# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s
|
||||
|
||||
# sys.path path, will be prepended to sys.path if present.
|
||||
# defaults to the current working directory.
|
||||
prepend_sys_path = .
|
||||
|
||||
# timezone to use when rendering the date within the migration file
|
||||
# as well as the filename.
|
||||
# If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library.
|
||||
# Any required deps can installed by adding `alembic[tz]` to the pip requirements
|
||||
# string value is passed to ZoneInfo()
|
||||
# leave blank for localtime
|
||||
# timezone =
|
||||
|
||||
# max length of characters to apply to the "slug" field
|
||||
# truncate_slug_length = 40
|
||||
|
||||
# set to 'true' to run the environment during
|
||||
# the 'revision' command, regardless of autogenerate
|
||||
# revision_environment = false
|
||||
|
||||
# set to 'true' to allow .pyc and .pyo files without
|
||||
# a source .py file to be detected as revisions in the
|
||||
# versions/ directory
|
||||
# sourceless = false
|
||||
|
||||
# version location specification; This defaults
|
||||
# to alembic/versions. When using multiple version
|
||||
# directories, initial revisions must be specified with --version-path.
|
||||
# The path separator used here should be the separator specified by "version_path_separator" below.
|
||||
# version_locations = %(here)s/bar:%(here)s/bat:alembic/versions
|
||||
|
||||
# version path separator; As mentioned above, this is the character used to split
|
||||
# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep.
|
||||
# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas.
|
||||
# Valid values for version_path_separator are:
|
||||
#
|
||||
# version_path_separator = :
|
||||
# version_path_separator = ;
|
||||
# version_path_separator = space
|
||||
# version_path_separator = newline
|
||||
#
|
||||
# Use os.pathsep. Default configuration used for new projects.
|
||||
version_path_separator = os
|
||||
|
||||
# set to 'true' to search source files recursively
|
||||
# in each "version_locations" directory
|
||||
# new in Alembic version 1.10
|
||||
# recursive_version_locations = false
|
||||
|
||||
# the output encoding used when revision files
|
||||
# are written from script.py.mako
|
||||
# output_encoding = utf-8
|
||||
|
||||
# sqlalchemy.url will be set programmatically from meshview config
|
||||
# sqlalchemy.url = driver://user:pass@localhost/dbname
|
||||
|
||||
|
||||
[post_write_hooks]
|
||||
# post_write_hooks defines scripts or Python functions that are run
|
||||
# on newly generated revision scripts. See the documentation for further
|
||||
# detail and examples
|
||||
|
||||
# format using "black" - use the console_scripts runner, against the "black" entrypoint
|
||||
# hooks = black
|
||||
# black.type = console_scripts
|
||||
# black.entrypoint = black
|
||||
# black.options = -l 79 REVISION_SCRIPT_FILENAME
|
||||
|
||||
# lint with attempts to fix using "ruff" - use the exec runner, execute a binary
|
||||
# hooks = ruff
|
||||
# ruff.type = exec
|
||||
# ruff.executable = %(here)s/.venv/bin/ruff
|
||||
# ruff.options = --fix REVISION_SCRIPT_FILENAME
|
||||
|
||||
# Logging configuration
|
||||
[loggers]
|
||||
keys = root,sqlalchemy,alembic
|
||||
|
||||
[handlers]
|
||||
keys = console
|
||||
|
||||
[formatters]
|
||||
keys = generic
|
||||
|
||||
[logger_root]
|
||||
level = INFO
|
||||
handlers = console
|
||||
qualname =
|
||||
|
||||
[logger_sqlalchemy]
|
||||
level = WARNING
|
||||
handlers =
|
||||
qualname = sqlalchemy.engine
|
||||
|
||||
[logger_alembic]
|
||||
level = INFO
|
||||
handlers =
|
||||
qualname = alembic
|
||||
|
||||
[handler_console]
|
||||
class = StreamHandler
|
||||
args = (sys.stderr,)
|
||||
level = NOTSET
|
||||
formatter = generic
|
||||
|
||||
[formatter_generic]
|
||||
format = %(asctime)s %(filename)s:%(lineno)d [pid:%(process)d] %(levelname)s - %(message)s
|
||||
datefmt = %Y-%m-%d %H:%M:%S
|
||||
@@ -1 +0,0 @@
|
||||
Generic single-database configuration.
|
||||
-102
@@ -1,102 +0,0 @@
|
||||
import asyncio
|
||||
from logging.config import fileConfig
|
||||
|
||||
from sqlalchemy import pool
|
||||
from sqlalchemy.engine import Connection
|
||||
from sqlalchemy.ext.asyncio import async_engine_from_config
|
||||
|
||||
from alembic import context
|
||||
|
||||
# Import models metadata for autogenerate support
|
||||
from meshview.models import Base
|
||||
|
||||
# this is the Alembic Config object, which provides
|
||||
# access to the values within the .ini file in use.
|
||||
config = context.config
|
||||
|
||||
# Interpret the config file for Python logging.
|
||||
# This line sets up loggers basically.
|
||||
# Use disable_existing_loggers=False to preserve app logging configuration
|
||||
if config.config_file_name is not None:
|
||||
fileConfig(config.config_file_name, disable_existing_loggers=False)
|
||||
|
||||
# Add your model's MetaData object here for 'autogenerate' support
|
||||
target_metadata = Base.metadata
|
||||
|
||||
|
||||
def run_migrations_offline() -> None:
|
||||
"""Run migrations in 'offline' mode.
|
||||
|
||||
This configures the context with just a URL
|
||||
and not an Engine, though an Engine is acceptable
|
||||
here as well. By skipping the Engine creation
|
||||
we don't even need a DBAPI to be available.
|
||||
|
||||
Calls to context.execute() here emit the given string to the
|
||||
script output.
|
||||
|
||||
"""
|
||||
url = config.get_main_option("sqlalchemy.url")
|
||||
context.configure(
|
||||
url=url,
|
||||
target_metadata=target_metadata,
|
||||
literal_binds=True,
|
||||
dialect_opts={"paramstyle": "named"},
|
||||
)
|
||||
|
||||
with context.begin_transaction():
|
||||
context.run_migrations()
|
||||
|
||||
|
||||
def do_run_migrations(connection: Connection) -> None:
|
||||
"""Run migrations with the given connection."""
|
||||
context.configure(connection=connection, target_metadata=target_metadata)
|
||||
|
||||
with context.begin_transaction():
|
||||
context.run_migrations()
|
||||
|
||||
|
||||
async def run_async_migrations() -> None:
|
||||
"""Run migrations in async mode."""
|
||||
# Get configuration section
|
||||
configuration = config.get_section(config.config_ini_section, {})
|
||||
|
||||
# If sqlalchemy.url is not set in alembic.ini, try to get it from meshview config
|
||||
if "sqlalchemy.url" not in configuration:
|
||||
try:
|
||||
from meshview.config import CONFIG
|
||||
|
||||
configuration["sqlalchemy.url"] = CONFIG["database"]["connection_string"]
|
||||
except Exception:
|
||||
# Fallback to a default for initial migration creation
|
||||
configuration["sqlalchemy.url"] = "sqlite+aiosqlite:///packets.db"
|
||||
|
||||
connectable = async_engine_from_config(
|
||||
configuration,
|
||||
prefix="sqlalchemy.",
|
||||
poolclass=pool.NullPool,
|
||||
)
|
||||
|
||||
async with connectable.connect() as connection:
|
||||
await connection.run_sync(do_run_migrations)
|
||||
|
||||
await connectable.dispose()
|
||||
|
||||
|
||||
def run_migrations_online() -> None:
|
||||
"""Run migrations in 'online' mode with async support."""
|
||||
try:
|
||||
# Event loop is already running, schedule and run the coroutine
|
||||
import concurrent.futures
|
||||
|
||||
with concurrent.futures.ThreadPoolExecutor() as pool:
|
||||
pool.submit(lambda: asyncio.run(run_async_migrations())).result()
|
||||
except RuntimeError:
|
||||
# No event loop running, create one
|
||||
asyncio.run(run_async_migrations())
|
||||
|
||||
|
||||
if context.is_offline_mode():
|
||||
run_migrations_offline()
|
||||
else:
|
||||
run_migrations_online()
|
||||
@@ -1,26 +0,0 @@
|
||||
"""${message}
|
||||
|
||||
Revision ID: ${up_revision}
|
||||
Revises: ${down_revision | comma,n}
|
||||
Create Date: ${create_date}
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
${imports if imports else ""}
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = ${repr(up_revision)}
|
||||
down_revision: Union[str, None] = ${repr(down_revision)}
|
||||
branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
|
||||
depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
${upgrades if upgrades else "pass"}
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
${downgrades if downgrades else "pass"}
|
||||
@@ -1,45 +0,0 @@
|
||||
"""Add example table
|
||||
|
||||
Revision ID: 1717fa5c6545
|
||||
Revises: c88468b7ab0b
|
||||
Create Date: 2025-10-26 20:59:04.347066
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = '1717fa5c6545'
|
||||
down_revision: str | None = 'add_time_us_cols'
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
"""Create example table with sample columns."""
|
||||
op.create_table(
|
||||
'example',
|
||||
sa.Column('id', sa.Integer(), nullable=False, primary_key=True, autoincrement=True),
|
||||
sa.Column('name', sa.String(length=100), nullable=False),
|
||||
sa.Column('description', sa.Text(), nullable=True),
|
||||
sa.Column('value', sa.Float(), nullable=True),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False, server_default='1'),
|
||||
sa.Column(
|
||||
'created_at', sa.DateTime(), nullable=False, server_default=sa.text('CURRENT_TIMESTAMP')
|
||||
),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
)
|
||||
|
||||
# Create an index on the name column for faster lookups
|
||||
op.create_index('idx_example_name', 'example', ['name'])
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Remove example table."""
|
||||
op.drop_index('idx_example_name', table_name='example')
|
||||
op.drop_table('example')
|
||||
@@ -1,27 +0,0 @@
|
||||
"""Add is_mqtt_gateway to node
|
||||
|
||||
Revision ID: 23dad03d2e42
|
||||
Revises: a0c9c13e118f
|
||||
Create Date: 2026-02-13 00:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "23dad03d2e42"
|
||||
down_revision: str | None = "a0c9c13e118f"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.add_column("node", sa.Column("is_mqtt_gateway", sa.Boolean(), nullable=True))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_column("node", "is_mqtt_gateway")
|
||||
@@ -1,35 +0,0 @@
|
||||
"""Add first_seen_us and last_seen_us to node table
|
||||
|
||||
Revision ID: 2b5a61bb2b75
|
||||
Revises: ac311b3782a1
|
||||
Create Date: 2025-11-05 15:19:13.446724
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = '2b5a61bb2b75'
|
||||
down_revision: str | None = 'ac311b3782a1'
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# Add microsecond epoch timestamp columns for first and last seen times
|
||||
op.add_column('node', sa.Column('first_seen_us', sa.BigInteger(), nullable=True))
|
||||
op.add_column('node', sa.Column('last_seen_us', sa.BigInteger(), nullable=True))
|
||||
op.create_index('idx_node_first_seen_us', 'node', ['first_seen_us'], unique=False)
|
||||
op.create_index('idx_node_last_seen_us', 'node', ['last_seen_us'], unique=False)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# Remove the microsecond epoch timestamp columns and their indexes
|
||||
op.drop_index('idx_node_last_seen_us', table_name='node')
|
||||
op.drop_index('idx_node_first_seen_us', table_name='node')
|
||||
op.drop_column('node', 'last_seen_us')
|
||||
op.drop_column('node', 'first_seen_us')
|
||||
@@ -1,29 +0,0 @@
|
||||
"""add last altitude to node
|
||||
|
||||
Revision ID: 44612e74a798
|
||||
Revises: 4d2a7c9e1b30
|
||||
Create Date: 2026-10-28 10:37:11.340792
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = '44612e74a798'
|
||||
down_revision: str | None = '4d2a7c9e1b30'
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
with op.batch_alter_table("node") as batch_op:
|
||||
batch_op.add_column(sa.Column("last_altitude", sa.BigInteger(), nullable=True))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
with op.batch_alter_table("node") as batch_op:
|
||||
batch_op.drop_column("last_altitude")
|
||||
@@ -1,37 +0,0 @@
|
||||
"""Add packet index on from_node_id, portnum and import_time_us
|
||||
|
||||
Revision ID: 4d2a7c9e1b30
|
||||
Revises: e8f2c4b6d9a1
|
||||
Create Date: 2026-10-26 00:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "4d2a7c9e1b30"
|
||||
down_revision: str | None = "e8f2c4b6d9a1"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
INDEX_NAME = "idx_packet_from_node_portnum_time_us"
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# Lets the node QR endpoint read a node's NODEINFO packets without scanning all its packets.
|
||||
inspector = sa.inspect(op.get_bind())
|
||||
if INDEX_NAME not in {index["name"] for index in inspector.get_indexes("packet")}:
|
||||
op.create_index(
|
||||
INDEX_NAME,
|
||||
"packet",
|
||||
["from_node_id", "portnum", sa.text("import_time_us DESC")],
|
||||
unique=False,
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_index(INDEX_NAME, table_name="packet")
|
||||
@@ -1,35 +0,0 @@
|
||||
"""Add daily_snapshot table
|
||||
|
||||
Revision ID: 4f1d2a9c8b71
|
||||
Revises: 23dad03d2e42
|
||||
Create Date: 2026-03-05 00:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "4f1d2a9c8b71"
|
||||
down_revision: str | None = "23dad03d2e42"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.create_table(
|
||||
"daily_snapshot",
|
||||
sa.Column("snapshot_date", sa.Date(), nullable=False),
|
||||
sa.Column("node_count", sa.BigInteger(), nullable=False),
|
||||
sa.Column("packet_count", sa.BigInteger(), nullable=False),
|
||||
sa.Column("gateway_count", sa.BigInteger(), nullable=False),
|
||||
sa.Column("captured_at_us", sa.BigInteger(), nullable=False),
|
||||
sa.PrimaryKeyConstraint("snapshot_date"),
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_table("daily_snapshot")
|
||||
@@ -1,65 +0,0 @@
|
||||
"""Drop import_time columns.
|
||||
|
||||
Revision ID: 9f3b1a8d2c4f
|
||||
Revises: 2b5a61bb2b75
|
||||
Create Date: 2026-01-09 09:55:00.000000
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "9f3b1a8d2c4f"
|
||||
down_revision: str | None = "2b5a61bb2b75"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
conn = op.get_bind()
|
||||
inspector = sa.inspect(conn)
|
||||
|
||||
packet_indexes = {idx["name"] for idx in inspector.get_indexes("packet")}
|
||||
packet_columns = {col["name"] for col in inspector.get_columns("packet")}
|
||||
|
||||
with op.batch_alter_table("packet", schema=None) as batch_op:
|
||||
if "idx_packet_import_time" in packet_indexes:
|
||||
batch_op.drop_index("idx_packet_import_time")
|
||||
if "idx_packet_from_node_time" in packet_indexes:
|
||||
batch_op.drop_index("idx_packet_from_node_time")
|
||||
if "import_time" in packet_columns:
|
||||
batch_op.drop_column("import_time")
|
||||
|
||||
packet_seen_columns = {col["name"] for col in inspector.get_columns("packet_seen")}
|
||||
with op.batch_alter_table("packet_seen", schema=None) as batch_op:
|
||||
if "import_time" in packet_seen_columns:
|
||||
batch_op.drop_column("import_time")
|
||||
|
||||
traceroute_indexes = {idx["name"] for idx in inspector.get_indexes("traceroute")}
|
||||
traceroute_columns = {col["name"] for col in inspector.get_columns("traceroute")}
|
||||
with op.batch_alter_table("traceroute", schema=None) as batch_op:
|
||||
if "idx_traceroute_import_time" in traceroute_indexes:
|
||||
batch_op.drop_index("idx_traceroute_import_time")
|
||||
if "import_time" in traceroute_columns:
|
||||
batch_op.drop_column("import_time")
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
with op.batch_alter_table("traceroute", schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column("import_time", sa.DateTime(), nullable=True))
|
||||
batch_op.create_index("idx_traceroute_import_time", ["import_time"], unique=False)
|
||||
|
||||
with op.batch_alter_table("packet_seen", schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column("import_time", sa.DateTime(), nullable=True))
|
||||
|
||||
with op.batch_alter_table("packet", schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column("import_time", sa.DateTime(), nullable=True))
|
||||
batch_op.create_index("idx_packet_import_time", [sa.text("import_time DESC")], unique=False)
|
||||
batch_op.create_index(
|
||||
"idx_packet_from_node_time",
|
||||
["from_node_id", sa.text("import_time DESC")],
|
||||
unique=False,
|
||||
)
|
||||
@@ -1,43 +0,0 @@
|
||||
"""Add node_public_key table
|
||||
|
||||
Revision ID: a0c9c13e118f
|
||||
Revises: d4d7b0c2e1a4
|
||||
Create Date: 2026-02-06 00:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "a0c9c13e118f"
|
||||
down_revision: str | None = "d4d7b0c2e1a4"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.create_table(
|
||||
"node_public_key",
|
||||
sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True),
|
||||
sa.Column("node_id", sa.BigInteger(), nullable=False),
|
||||
sa.Column("public_key", sa.String(), nullable=False),
|
||||
sa.Column("first_seen_us", sa.BigInteger(), nullable=True),
|
||||
sa.Column("last_seen_us", sa.BigInteger(), nullable=True),
|
||||
)
|
||||
op.create_index("idx_node_public_key_node_id", "node_public_key", ["node_id"], unique=False)
|
||||
op.create_index(
|
||||
"idx_node_public_key_public_key",
|
||||
"node_public_key",
|
||||
["public_key"],
|
||||
unique=False,
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_index("idx_node_public_key_public_key", table_name="node_public_key")
|
||||
op.drop_index("idx_node_public_key_node_id", table_name="node_public_key")
|
||||
op.drop_table("node_public_key")
|
||||
@@ -1,31 +0,0 @@
|
||||
"""add route_return to traceroute
|
||||
|
||||
Revision ID: ac311b3782a1
|
||||
Revises: 1717fa5c6545
|
||||
Create Date: 2025-11-04 20:28:33.174137
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'ac311b3782a1'
|
||||
down_revision: str | None = '1717fa5c6545'
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# Add route_return column to traceroute table
|
||||
with op.batch_alter_table('traceroute', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('route_return', sa.LargeBinary(), nullable=True))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# Remove route_return column from traceroute table
|
||||
with op.batch_alter_table('traceroute', schema=None) as batch_op:
|
||||
batch_op.drop_column('route_return')
|
||||
@@ -1,74 +0,0 @@
|
||||
"""add import_time_us columns
|
||||
|
||||
Revision ID: add_time_us_cols
|
||||
Revises: c88468b7ab0b
|
||||
Create Date: 2025-11-03 14:10:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'add_time_us_cols'
|
||||
down_revision: str | None = 'c88468b7ab0b'
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# Check if columns already exist, add them if they don't
|
||||
conn = op.get_bind()
|
||||
inspector = sa.inspect(conn)
|
||||
|
||||
# Add import_time_us to packet table
|
||||
packet_columns = [col['name'] for col in inspector.get_columns('packet')]
|
||||
if 'import_time_us' not in packet_columns:
|
||||
with op.batch_alter_table('packet', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('import_time_us', sa.BigInteger(), nullable=True))
|
||||
op.create_index(
|
||||
'idx_packet_import_time_us', 'packet', [sa.text('import_time_us DESC')], unique=False
|
||||
)
|
||||
op.create_index(
|
||||
'idx_packet_from_node_time_us',
|
||||
'packet',
|
||||
['from_node_id', sa.text('import_time_us DESC')],
|
||||
unique=False,
|
||||
)
|
||||
|
||||
# Add import_time_us to packet_seen table
|
||||
packet_seen_columns = [col['name'] for col in inspector.get_columns('packet_seen')]
|
||||
if 'import_time_us' not in packet_seen_columns:
|
||||
with op.batch_alter_table('packet_seen', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('import_time_us', sa.BigInteger(), nullable=True))
|
||||
op.create_index(
|
||||
'idx_packet_seen_import_time_us', 'packet_seen', ['import_time_us'], unique=False
|
||||
)
|
||||
|
||||
# Add import_time_us to traceroute table
|
||||
traceroute_columns = [col['name'] for col in inspector.get_columns('traceroute')]
|
||||
if 'import_time_us' not in traceroute_columns:
|
||||
with op.batch_alter_table('traceroute', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('import_time_us', sa.BigInteger(), nullable=True))
|
||||
op.create_index(
|
||||
'idx_traceroute_import_time_us', 'traceroute', ['import_time_us'], unique=False
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# Drop indexes and columns
|
||||
op.drop_index('idx_traceroute_import_time_us', table_name='traceroute')
|
||||
with op.batch_alter_table('traceroute', schema=None) as batch_op:
|
||||
batch_op.drop_column('import_time_us')
|
||||
|
||||
op.drop_index('idx_packet_seen_import_time_us', table_name='packet_seen')
|
||||
with op.batch_alter_table('packet_seen', schema=None) as batch_op:
|
||||
batch_op.drop_column('import_time_us')
|
||||
|
||||
op.drop_index('idx_packet_from_node_time_us', table_name='packet')
|
||||
op.drop_index('idx_packet_import_time_us', table_name='packet')
|
||||
with op.batch_alter_table('packet', schema=None) as batch_op:
|
||||
batch_op.drop_column('import_time_us')
|
||||
@@ -1,94 +0,0 @@
|
||||
"""Add last_update_us to node and migrate data.
|
||||
|
||||
Revision ID: b7c3c2e3a1f0
|
||||
Revises: 9f3b1a8d2c4f
|
||||
Create Date: 2026-01-12 10:12:00.000000
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
from datetime import UTC, datetime
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "b7c3c2e3a1f0"
|
||||
down_revision: str | None = "9f3b1a8d2c4f"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def _parse_datetime(value):
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, datetime):
|
||||
dt = value
|
||||
elif isinstance(value, str):
|
||||
text = value.replace("Z", "+00:00")
|
||||
try:
|
||||
dt = datetime.fromisoformat(text)
|
||||
except ValueError:
|
||||
return None
|
||||
else:
|
||||
return None
|
||||
|
||||
if dt.tzinfo is None:
|
||||
return dt.replace(tzinfo=UTC)
|
||||
return dt.astimezone(UTC)
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
conn = op.get_bind()
|
||||
op.add_column("node", sa.Column("last_update_us", sa.BigInteger(), nullable=True))
|
||||
op.create_index("idx_node_last_update_us", "node", ["last_update_us"], unique=False)
|
||||
|
||||
node = sa.table(
|
||||
"node",
|
||||
sa.column("id", sa.String()),
|
||||
sa.column("last_update", sa.DateTime()),
|
||||
sa.column("last_update_us", sa.BigInteger()),
|
||||
)
|
||||
|
||||
rows = conn.execute(sa.select(node.c.id, node.c.last_update)).all()
|
||||
for node_id, last_update in rows:
|
||||
dt = _parse_datetime(last_update)
|
||||
if dt is None:
|
||||
continue
|
||||
last_update_us = int(dt.timestamp() * 1_000_000)
|
||||
conn.execute(
|
||||
sa.update(node).where(node.c.id == node_id).values(last_update_us=last_update_us)
|
||||
)
|
||||
|
||||
if conn.dialect.name == "sqlite":
|
||||
with op.batch_alter_table("node", schema=None) as batch_op:
|
||||
batch_op.drop_column("last_update")
|
||||
else:
|
||||
op.drop_column("node", "last_update")
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
conn = op.get_bind()
|
||||
op.add_column("node", sa.Column("last_update", sa.DateTime(), nullable=True))
|
||||
|
||||
node = sa.table(
|
||||
"node",
|
||||
sa.column("id", sa.String()),
|
||||
sa.column("last_update", sa.DateTime()),
|
||||
sa.column("last_update_us", sa.BigInteger()),
|
||||
)
|
||||
|
||||
rows = conn.execute(sa.select(node.c.id, node.c.last_update_us)).all()
|
||||
for node_id, last_update_us in rows:
|
||||
if last_update_us is None:
|
||||
continue
|
||||
dt = datetime.fromtimestamp(last_update_us / 1_000_000, tz=UTC).replace(tzinfo=None)
|
||||
conn.execute(sa.update(node).where(node.c.id == node_id).values(last_update=dt))
|
||||
|
||||
if conn.dialect.name == "sqlite":
|
||||
with op.batch_alter_table("node", schema=None) as batch_op:
|
||||
batch_op.drop_index("idx_node_last_update_us")
|
||||
batch_op.drop_column("last_update_us")
|
||||
else:
|
||||
op.drop_index("idx_node_last_update_us", table_name="node")
|
||||
op.drop_column("node", "last_update_us")
|
||||
@@ -1,22 +0,0 @@
|
||||
"""Compatibility placeholder for removed revision c6b1d8f2a9e3.
|
||||
|
||||
Revision ID: c6b1d8f2a9e3
|
||||
Revises: 4f1d2a9c8b71
|
||||
Create Date: 2026-03-05 00:00:00.000000
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "c6b1d8f2a9e3"
|
||||
down_revision: str | None = "4f1d2a9c8b71"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
pass
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
pass
|
||||
@@ -1,160 +0,0 @@
|
||||
"""Initial migration
|
||||
|
||||
Revision ID: c88468b7ab0b
|
||||
Revises:
|
||||
Create Date: 2025-10-26 20:56:50.285200
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'c88468b7ab0b'
|
||||
down_revision: str | None = None
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
# Get connection and inspector to check what exists
|
||||
conn = op.get_bind()
|
||||
inspector = sa.inspect(conn)
|
||||
existing_tables = inspector.get_table_names()
|
||||
|
||||
# Create node table if it doesn't exist
|
||||
if 'node' not in existing_tables:
|
||||
op.create_table(
|
||||
'node',
|
||||
sa.Column('id', sa.String(), nullable=False),
|
||||
sa.Column('node_id', sa.BigInteger(), nullable=True),
|
||||
sa.Column('long_name', sa.String(), nullable=True),
|
||||
sa.Column('short_name', sa.String(), nullable=True),
|
||||
sa.Column('hw_model', sa.String(), nullable=True),
|
||||
sa.Column('firmware', sa.String(), nullable=True),
|
||||
sa.Column('role', sa.String(), nullable=True),
|
||||
sa.Column('last_lat', sa.BigInteger(), nullable=True),
|
||||
sa.Column('last_long', sa.BigInteger(), nullable=True),
|
||||
sa.Column('channel', sa.String(), nullable=True),
|
||||
sa.Column('last_update', sa.DateTime(), nullable=True),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('node_id'),
|
||||
)
|
||||
op.create_index('idx_node_node_id', 'node', ['node_id'], unique=False)
|
||||
|
||||
# Create packet table if it doesn't exist
|
||||
if 'packet' not in existing_tables:
|
||||
op.create_table(
|
||||
'packet',
|
||||
sa.Column('id', sa.BigInteger(), nullable=False),
|
||||
sa.Column('portnum', sa.Integer(), nullable=True),
|
||||
sa.Column('from_node_id', sa.BigInteger(), nullable=True),
|
||||
sa.Column('to_node_id', sa.BigInteger(), nullable=True),
|
||||
sa.Column('payload', sa.LargeBinary(), nullable=True),
|
||||
sa.Column('import_time', sa.DateTime(), nullable=True),
|
||||
sa.Column('import_time_us', sa.BigInteger(), nullable=True),
|
||||
sa.Column('channel', sa.String(), nullable=True),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
)
|
||||
op.create_index('idx_packet_from_node_id', 'packet', ['from_node_id'], unique=False)
|
||||
op.create_index('idx_packet_to_node_id', 'packet', ['to_node_id'], unique=False)
|
||||
op.create_index(
|
||||
'idx_packet_import_time', 'packet', [sa.text('import_time DESC')], unique=False
|
||||
)
|
||||
op.create_index(
|
||||
'idx_packet_import_time_us', 'packet', [sa.text('import_time_us DESC')], unique=False
|
||||
)
|
||||
op.create_index(
|
||||
'idx_packet_from_node_time',
|
||||
'packet',
|
||||
['from_node_id', sa.text('import_time DESC')],
|
||||
unique=False,
|
||||
)
|
||||
op.create_index(
|
||||
'idx_packet_from_node_time_us',
|
||||
'packet',
|
||||
['from_node_id', sa.text('import_time_us DESC')],
|
||||
unique=False,
|
||||
)
|
||||
|
||||
# Create packet_seen table if it doesn't exist
|
||||
if 'packet_seen' not in existing_tables:
|
||||
op.create_table(
|
||||
'packet_seen',
|
||||
sa.Column('packet_id', sa.BigInteger(), nullable=False),
|
||||
sa.Column('node_id', sa.BigInteger(), nullable=False),
|
||||
sa.Column('rx_time', sa.BigInteger(), nullable=False),
|
||||
sa.Column('hop_limit', sa.Integer(), nullable=True),
|
||||
sa.Column('hop_start', sa.Integer(), nullable=True),
|
||||
sa.Column('channel', sa.String(), nullable=True),
|
||||
sa.Column('rx_snr', sa.Float(), nullable=True),
|
||||
sa.Column('rx_rssi', sa.Integer(), nullable=True),
|
||||
sa.Column('topic', sa.String(), nullable=True),
|
||||
sa.Column('import_time', sa.DateTime(), nullable=True),
|
||||
sa.Column('import_time_us', sa.BigInteger(), nullable=True),
|
||||
sa.ForeignKeyConstraint(
|
||||
['packet_id'],
|
||||
['packet.id'],
|
||||
),
|
||||
sa.PrimaryKeyConstraint('packet_id', 'node_id', 'rx_time'),
|
||||
)
|
||||
op.create_index('idx_packet_seen_node_id', 'packet_seen', ['node_id'], unique=False)
|
||||
op.create_index('idx_packet_seen_packet_id', 'packet_seen', ['packet_id'], unique=False)
|
||||
op.create_index(
|
||||
'idx_packet_seen_import_time_us', 'packet_seen', ['import_time_us'], unique=False
|
||||
)
|
||||
|
||||
# Create traceroute table if it doesn't exist
|
||||
if 'traceroute' not in existing_tables:
|
||||
op.create_table(
|
||||
'traceroute',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('packet_id', sa.BigInteger(), nullable=True),
|
||||
sa.Column('gateway_node_id', sa.BigInteger(), nullable=True),
|
||||
sa.Column('done', sa.Boolean(), nullable=True),
|
||||
sa.Column('route', sa.LargeBinary(), nullable=True),
|
||||
sa.Column('import_time', sa.DateTime(), nullable=True),
|
||||
sa.Column('import_time_us', sa.BigInteger(), nullable=True),
|
||||
sa.ForeignKeyConstraint(
|
||||
['packet_id'],
|
||||
['packet.id'],
|
||||
),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
)
|
||||
op.create_index('idx_traceroute_import_time', 'traceroute', ['import_time'], unique=False)
|
||||
op.create_index(
|
||||
'idx_traceroute_import_time_us', 'traceroute', ['import_time_us'], unique=False
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
# Drop traceroute table and indexes
|
||||
op.drop_index('idx_traceroute_import_time_us', table_name='traceroute')
|
||||
op.drop_index('idx_traceroute_import_time', table_name='traceroute')
|
||||
op.drop_table('traceroute')
|
||||
|
||||
# Drop packet_seen table and indexes
|
||||
op.drop_index('idx_packet_seen_import_time_us', table_name='packet_seen')
|
||||
op.drop_index('idx_packet_seen_packet_id', table_name='packet_seen')
|
||||
op.drop_index('idx_packet_seen_node_id', table_name='packet_seen')
|
||||
op.drop_table('packet_seen')
|
||||
|
||||
# Drop packet table and indexes
|
||||
op.drop_index('idx_packet_from_node_time_us', table_name='packet')
|
||||
op.drop_index('idx_packet_from_node_time', table_name='packet')
|
||||
op.drop_index('idx_packet_import_time_us', table_name='packet')
|
||||
op.drop_index('idx_packet_import_time', table_name='packet')
|
||||
op.drop_index('idx_packet_to_node_id', table_name='packet')
|
||||
op.drop_index('idx_packet_from_node_id', table_name='packet')
|
||||
op.drop_table('packet')
|
||||
|
||||
# Drop node table and indexes
|
||||
op.drop_index('idx_node_node_id', table_name='node')
|
||||
op.drop_table('node')
|
||||
# ### end Alembic commands ###
|
||||
@@ -1,34 +0,0 @@
|
||||
"""Drop last_update_us from node.
|
||||
|
||||
Revision ID: d4d7b0c2e1a4
|
||||
Revises: b7c3c2e3a1f0
|
||||
Create Date: 2026-01-12 10:20:00.000000
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "d4d7b0c2e1a4"
|
||||
down_revision: str | None = "b7c3c2e3a1f0"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
conn = op.get_bind()
|
||||
if conn.dialect.name == "sqlite":
|
||||
with op.batch_alter_table("node", schema=None) as batch_op:
|
||||
batch_op.drop_index("idx_node_last_update_us")
|
||||
batch_op.drop_column("last_update_us")
|
||||
else:
|
||||
op.drop_index("idx_node_last_update_us", table_name="node")
|
||||
op.drop_column("node", "last_update_us")
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.add_column("node", sa.Column("last_update_us", sa.BigInteger(), nullable=True))
|
||||
op.create_index("idx_node_last_update_us", "node", ["last_update_us"], unique=False)
|
||||
@@ -1,43 +0,0 @@
|
||||
"""Drop node_public_key table
|
||||
|
||||
Revision ID: e8f2c4b6d9a1
|
||||
Revises: c6b1d8f2a9e3
|
||||
Create Date: 2026-05-25 00:00:00.000000
|
||||
|
||||
"""
|
||||
|
||||
from collections.abc import Sequence
|
||||
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = "e8f2c4b6d9a1"
|
||||
down_revision: str | None = "c6b1d8f2a9e3"
|
||||
branch_labels: str | Sequence[str] | None = None
|
||||
depends_on: str | Sequence[str] | None = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.drop_index("idx_node_public_key_public_key", table_name="node_public_key")
|
||||
op.drop_index("idx_node_public_key_node_id", table_name="node_public_key")
|
||||
op.drop_table("node_public_key")
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.create_table(
|
||||
"node_public_key",
|
||||
sa.Column("id", sa.Integer(), primary_key=True, autoincrement=True),
|
||||
sa.Column("node_id", sa.BigInteger(), nullable=False),
|
||||
sa.Column("public_key", sa.String(), nullable=False),
|
||||
sa.Column("first_seen_us", sa.BigInteger(), nullable=True),
|
||||
sa.Column("last_seen_us", sa.BigInteger(), nullable=True),
|
||||
)
|
||||
op.create_index("idx_node_public_key_node_id", "node_public_key", ["node_id"], unique=False)
|
||||
op.create_index(
|
||||
"idx_node_public_key_public_key",
|
||||
"node_public_key",
|
||||
["public_key"],
|
||||
unique=False,
|
||||
)
|
||||
@@ -1,57 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# build-container.sh
|
||||
#
|
||||
# Script to build MeshView container images
|
||||
|
||||
set -e
|
||||
|
||||
# Default values
|
||||
IMAGE_NAME="meshview"
|
||||
TAG="latest"
|
||||
CONTAINERFILE="Containerfile"
|
||||
|
||||
# Parse arguments
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--tag|-t)
|
||||
TAG="$2"
|
||||
shift 2
|
||||
;;
|
||||
--name|-n)
|
||||
IMAGE_NAME="$2"
|
||||
shift 2
|
||||
;;
|
||||
--file|-f)
|
||||
CONTAINERFILE="$2"
|
||||
shift 2
|
||||
;;
|
||||
--help|-h)
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -t, --tag TAG Tag for the image (default: latest)"
|
||||
echo " -n, --name NAME Image name (default: meshview)"
|
||||
echo " -f, --file FILE Containerfile path (default: Containerfile)"
|
||||
echo " -h, --help Show this help"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
echo "Use --help for usage information"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "Building MeshView container image..."
|
||||
echo " Image: ${IMAGE_NAME}:${TAG}"
|
||||
echo " Containerfile: ${CONTAINERFILE}"
|
||||
echo ""
|
||||
|
||||
# Build the container
|
||||
docker build -f "${CONTAINERFILE}" -t "${IMAGE_NAME}:${TAG}" .
|
||||
|
||||
echo ""
|
||||
echo "Build complete!"
|
||||
echo "Run with: docker run --rm -p 8081:8081 ${IMAGE_NAME}:${TAG}"
|
||||
@@ -1,90 +0,0 @@
|
||||
# -------------------------
|
||||
# Server Configuration
|
||||
# -------------------------
|
||||
[server]
|
||||
# The address to bind the server to. Use * to listen on all interfaces.
|
||||
bind = 0.0.0.0
|
||||
|
||||
# Port to run the web server on.
|
||||
port = 8081
|
||||
|
||||
# Path to TLS certificate (leave blank to disable HTTPS).
|
||||
tls_cert =
|
||||
|
||||
# Path for the ACME challenge if using Let's Encrypt.
|
||||
acme_challenge =
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Site Appearance & Behavior
|
||||
# -------------------------
|
||||
[site]
|
||||
domain =
|
||||
language = en
|
||||
title = Bay Area Mesh
|
||||
message = Real time data from around the bay area and beyond.
|
||||
starting = /chat
|
||||
|
||||
nodes = True
|
||||
conversations = True
|
||||
everything = True
|
||||
graphs = True
|
||||
stats = True
|
||||
net = True
|
||||
map = True
|
||||
top = True
|
||||
|
||||
map_top_left_lat = 39
|
||||
map_top_left_lon = -123
|
||||
map_bottom_right_lat = 36
|
||||
map_bottom_right_lon = -121
|
||||
|
||||
map_interval = 3
|
||||
firehose_interal = 3
|
||||
|
||||
weekly_net_message = Weekly Mesh check-in. We will keep it open on every Wednesday from 5:00pm for checkins. The message format should be (LONG NAME) - (CITY YOU ARE IN) #BayMeshNet.
|
||||
net_tag = #BayMeshNet
|
||||
|
||||
|
||||
# -------------------------
|
||||
# MQTT Broker Configuration
|
||||
# -------------------------
|
||||
[mqtt]
|
||||
server = mqtt.meshtastic.org
|
||||
topics = ["msh/US/bayarea/#", "msh/US/CA/mrymesh/#", "msh/US/CA/sacvalley"]
|
||||
port = 1883
|
||||
username = meshdev
|
||||
password = large4cats
|
||||
skip_node_ids =
|
||||
secondary_keys =
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Database Configuration
|
||||
# -------------------------
|
||||
[database]
|
||||
connection_string = sqlite+aiosqlite:////var/lib/meshview/packets.db
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Database Cleanup Configuration
|
||||
# -------------------------
|
||||
[cleanup]
|
||||
enabled = False
|
||||
days_to_keep = 14
|
||||
hour = 2
|
||||
minute = 00
|
||||
vacuum = False
|
||||
|
||||
backup_enabled = False
|
||||
backup_dir = ./backups
|
||||
backup_hour = 2
|
||||
backup_minute = 00
|
||||
|
||||
|
||||
# -------------------------
|
||||
# Logging Configuration
|
||||
# -------------------------
|
||||
[logging]
|
||||
access_log = False
|
||||
db_cleanup_logfile = /var/log/meshview/dbcleanup.log
|
||||
@@ -1,37 +0,0 @@
|
||||
diff --git a/sample.config.ini b/sample.config.ini
|
||||
index 0e64980..494685c 100644
|
||||
--- a/sample.config.ini
|
||||
+++ b/sample.config.ini
|
||||
@@ -3,7 +3,7 @@
|
||||
# -------------------------
|
||||
[server]
|
||||
# The address to bind the server to. Use * to listen on all interfaces.
|
||||
-bind = *
|
||||
+bind = 0.0.0.0
|
||||
|
||||
# Port to run the web server on.
|
||||
port = 8081
|
||||
@@ -64,7 +64,7 @@ net_tag = #BayMeshNet
|
||||
# -------------------------
|
||||
[mqtt]
|
||||
# MQTT server hostname or IP.
|
||||
-server = mqtt.bayme.sh
|
||||
+server = mqtt.meshtastic.org
|
||||
|
||||
# Topics to subscribe to (as JSON-like list, but still a string).
|
||||
topics = ["msh/US/bayarea/#", "msh/US/CA/mrymesh/#", "msh/US/CA/sacvalley"]
|
||||
@@ -82,7 +82,7 @@ password = large4cats
|
||||
# -------------------------
|
||||
[database]
|
||||
# SQLAlchemy connection string. This one uses SQLite with asyncio support.
|
||||
-connection_string = sqlite+aiosqlite:///packets.db
|
||||
+connection_string = sqlite+aiosqlite:////var/lib/meshview/packets.db
|
||||
|
||||
|
||||
# -------------------------
|
||||
@@ -110,4 +110,4 @@ vacuum = False
|
||||
# Set to True to enable, False to disable (default: False)
|
||||
access_log = False
|
||||
# Database cleanup logfile
|
||||
-db_cleanup_logfile = dbcleanup.log
|
||||
+db_cleanup_logfile = /var/log/meshview/dbcleanup.log
|
||||
@@ -1,52 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script to create a blank migration for manual editing.
|
||||
|
||||
Usage:
|
||||
./env/bin/python create_example_migration.py
|
||||
|
||||
This creates an empty migration file that you can manually edit to add
|
||||
custom migration logic (data migrations, complex schema changes, etc.)
|
||||
|
||||
Unlike create_migration.py which auto-generates from model changes,
|
||||
this creates a blank template for you to fill in.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Add current directory to path
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from alembic.config import Config
|
||||
|
||||
from alembic import command
|
||||
|
||||
# Create Alembic config
|
||||
alembic_cfg = Config("alembic.ini")
|
||||
|
||||
# Set database URL from meshview config
|
||||
try:
|
||||
from meshview.config import CONFIG
|
||||
|
||||
database_url = CONFIG["database"]["connection_string"]
|
||||
alembic_cfg.set_main_option("sqlalchemy.url", database_url)
|
||||
print(f"Using database URL from config: {database_url}")
|
||||
except Exception as e:
|
||||
print(f"Warning: Could not load meshview config: {e}")
|
||||
print("Using default database URL")
|
||||
alembic_cfg.set_main_option("sqlalchemy.url", "sqlite+aiosqlite:///packets.db")
|
||||
|
||||
# Generate blank migration
|
||||
try:
|
||||
print("Creating blank migration for manual editing...")
|
||||
command.revision(alembic_cfg, autogenerate=False, message="Manual migration")
|
||||
print("✓ Successfully created blank migration!")
|
||||
print("\nNow edit the generated file in alembic/versions/")
|
||||
print("Add your custom upgrade() and downgrade() logic")
|
||||
except Exception as e:
|
||||
print(f"✗ Error creating migration: {e}")
|
||||
import traceback
|
||||
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
@@ -1,58 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Helper script to create Alembic migrations from SQLAlchemy model changes.
|
||||
|
||||
Usage:
|
||||
./env/bin/python create_migration.py
|
||||
|
||||
This will:
|
||||
1. Load your current models from meshview/models.py
|
||||
2. Compare them to the current database schema
|
||||
3. Auto-generate a migration with the detected changes
|
||||
4. Save the migration to alembic/versions/
|
||||
|
||||
After running this, review the generated migration file before committing!
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Add current directory to path
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from alembic.config import Config
|
||||
|
||||
from alembic import command
|
||||
|
||||
# Create Alembic config
|
||||
alembic_cfg = Config("alembic.ini")
|
||||
|
||||
# Set database URL from meshview config
|
||||
try:
|
||||
from meshview.config import CONFIG
|
||||
|
||||
database_url = CONFIG["database"]["connection_string"]
|
||||
alembic_cfg.set_main_option("sqlalchemy.url", database_url)
|
||||
print(f"Using database URL from config: {database_url}")
|
||||
except Exception as e:
|
||||
print(f"Warning: Could not load meshview config: {e}")
|
||||
print("Using default database URL")
|
||||
alembic_cfg.set_main_option("sqlalchemy.url", "sqlite+aiosqlite:///packets.db")
|
||||
|
||||
# Generate migration
|
||||
try:
|
||||
print("\nComparing models to current database schema...")
|
||||
print("Generating migration...\n")
|
||||
command.revision(alembic_cfg, autogenerate=True, message="Auto-generated migration")
|
||||
print("\n✓ Successfully created migration!")
|
||||
print("\nNext steps:")
|
||||
print("1. Review the generated file in alembic/versions/")
|
||||
print("2. Edit the migration message/logic if needed")
|
||||
print("3. Test the migration: ./env/bin/alembic upgrade head")
|
||||
print("4. Commit the migration file to version control")
|
||||
except Exception as e:
|
||||
print(f"\n✗ Error creating migration: {e}")
|
||||
import traceback
|
||||
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
@@ -1,361 +0,0 @@
|
||||
# Alembic Database Migration Setup
|
||||
|
||||
This document describes the automatic database migration system implemented for MeshView using Alembic.
|
||||
|
||||
## Overview
|
||||
|
||||
The system provides automatic database schema migrations with coordination between the writer app (startdb.py) and reader app (web.py):
|
||||
|
||||
- **Writer App**: Automatically runs pending migrations on startup
|
||||
- **Reader App**: Waits for migrations to complete before starting
|
||||
|
||||
## Architecture
|
||||
|
||||
### Key Components
|
||||
|
||||
1. **`meshview/migrations.py`** - Migration management utilities
|
||||
- `run_migrations()` - Runs pending migrations (writer app)
|
||||
- `wait_for_migrations()` - Waits for schema to be current (reader app)
|
||||
- `is_database_up_to_date()` - Checks schema version
|
||||
- Migration status tracking table
|
||||
|
||||
2. **`alembic/`** - Alembic migration directory
|
||||
- `env.py` - Configured for async SQLAlchemy support
|
||||
- `versions/` - Migration scripts directory
|
||||
- `alembic.ini` - Alembic configuration
|
||||
|
||||
3. **Modified Apps**:
|
||||
- `startdb.py` - Writer app that runs migrations before MQTT ingestion
|
||||
- `meshview/web.py` - Reader app that waits for schema updates
|
||||
|
||||
## How It Works - Automatic In-Place Updates
|
||||
|
||||
### ✨ Fully Automatic Operation
|
||||
|
||||
**No manual migration commands needed!** The database schema updates automatically when you:
|
||||
1. Deploy new code with migration files
|
||||
2. Restart the applications
|
||||
|
||||
### Writer App (startdb.py) Startup Sequence
|
||||
|
||||
1. Initialize database connection
|
||||
2. Create migration status tracking table
|
||||
3. Set "migration in progress" flag
|
||||
4. **🔄 Automatically run any pending Alembic migrations** (synchronously)
|
||||
- Detects current schema version
|
||||
- Compares to latest available migration
|
||||
- Runs all pending migrations in sequence
|
||||
- Updates database schema in place
|
||||
5. Clear "migration in progress" flag
|
||||
6. Start MQTT ingestion and other tasks
|
||||
|
||||
### Reader App (web.py) Startup Sequence
|
||||
|
||||
1. Initialize database connection
|
||||
2. **Check database schema version**
|
||||
3. If not up to date:
|
||||
- Wait up to 60 seconds (30 retries × 2 seconds)
|
||||
- Check every 2 seconds for schema updates
|
||||
- Automatically proceeds once writer completes migrations
|
||||
4. Once schema is current, start web server
|
||||
|
||||
### 🎯 Key Point: Zero Manual Steps
|
||||
|
||||
When you deploy new code with migrations:
|
||||
```bash
|
||||
# Just start the apps - migrations happen automatically!
|
||||
./env/bin/python startdb.py # Migrations run here automatically
|
||||
./env/bin/python main.py # Waits for migrations, then starts
|
||||
```
|
||||
|
||||
**The database updates itself!** No need to run `alembic upgrade` manually.
|
||||
|
||||
### Coordination
|
||||
|
||||
The apps coordinate using:
|
||||
- **Alembic version table** (`alembic_version`) - Tracks current schema version
|
||||
- **Migration status table** (`migration_status`) - Optional flag for "in progress" state
|
||||
|
||||
## Creating New Migrations
|
||||
|
||||
### Using the helper script:
|
||||
|
||||
```bash
|
||||
./env/bin/python create_migration.py
|
||||
```
|
||||
|
||||
### Manual creation:
|
||||
|
||||
```bash
|
||||
./env/bin/alembic revision --autogenerate -m "Description of changes"
|
||||
```
|
||||
|
||||
This will:
|
||||
1. Compare current database schema with SQLAlchemy models
|
||||
2. Generate a migration script in `alembic/versions/`
|
||||
3. Automatically detect most schema changes
|
||||
|
||||
### Manual migration (advanced):
|
||||
|
||||
```bash
|
||||
./env/bin/alembic revision -m "Manual migration"
|
||||
```
|
||||
|
||||
Then edit the generated file to add custom migration logic.
|
||||
|
||||
## Running Migrations
|
||||
|
||||
### Automatic (Recommended)
|
||||
|
||||
Migrations run automatically when the writer app starts:
|
||||
|
||||
```bash
|
||||
./env/bin/python startdb.py
|
||||
```
|
||||
|
||||
### Manual
|
||||
|
||||
To run migrations manually:
|
||||
|
||||
```bash
|
||||
./env/bin/alembic upgrade head
|
||||
```
|
||||
|
||||
To downgrade:
|
||||
|
||||
```bash
|
||||
./env/bin/alembic downgrade -1 # Go back one version
|
||||
./env/bin/alembic downgrade base # Go back to beginning
|
||||
```
|
||||
|
||||
## Checking Migration Status
|
||||
|
||||
Check current database version:
|
||||
|
||||
```bash
|
||||
./env/bin/alembic current
|
||||
```
|
||||
|
||||
View migration history:
|
||||
|
||||
```bash
|
||||
./env/bin/alembic history
|
||||
```
|
||||
|
||||
## Benefits
|
||||
|
||||
1. **Zero Manual Intervention**: Migrations run automatically on startup
|
||||
2. **Safe Coordination**: Reader won't connect to incompatible schema
|
||||
3. **Version Control**: All schema changes tracked in git
|
||||
4. **Rollback Capability**: Can downgrade if needed
|
||||
5. **Auto-generation**: Most migrations created automatically from model changes
|
||||
|
||||
## Migration Workflow
|
||||
|
||||
### Development Process
|
||||
|
||||
1. **Modify SQLAlchemy models** in `meshview/models.py`
|
||||
2. **Create migration**:
|
||||
```bash
|
||||
./env/bin/python create_migration.py
|
||||
```
|
||||
3. **Review generated migration** in `alembic/versions/`
|
||||
4. **Test migration**:
|
||||
- Stop all apps
|
||||
- Start writer app (migrations run automatically)
|
||||
- Start reader app (waits for schema to be current)
|
||||
5. **Commit migration** to version control
|
||||
|
||||
### Production Deployment
|
||||
|
||||
1. **Deploy new code** with migration scripts
|
||||
2. **Start writer app** - Migrations run automatically
|
||||
3. **Start reader app** - Waits for migrations, then starts
|
||||
4. **Monitor logs** for migration success
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Migration fails
|
||||
|
||||
Check logs in writer app for error details. To manually fix:
|
||||
|
||||
```bash
|
||||
./env/bin/alembic current # Check current version
|
||||
./env/bin/alembic history # View available versions
|
||||
./env/bin/alembic upgrade head # Try manual upgrade
|
||||
```
|
||||
|
||||
### Reader app won't start (timeout)
|
||||
|
||||
Check if writer app is running and has completed migrations:
|
||||
|
||||
```bash
|
||||
./env/bin/alembic current
|
||||
```
|
||||
|
||||
### Reset to clean state
|
||||
|
||||
⚠️ **Warning: This will lose all data**
|
||||
|
||||
```bash
|
||||
rm packets.db # Or your database file
|
||||
./env/bin/alembic upgrade head # Create fresh schema
|
||||
```
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
meshview/
|
||||
├── alembic.ini # Alembic configuration
|
||||
├── alembic/
|
||||
│ ├── env.py # Async-enabled migration runner
|
||||
│ ├── script.py.mako # Migration template
|
||||
│ └── versions/ # Migration scripts
|
||||
│ └── c88468b7ab0b_initial_migration.py
|
||||
├── meshview/
|
||||
│ ├── models.py # SQLAlchemy models (source of truth)
|
||||
│ ├── migrations.py # Migration utilities
|
||||
│ ├── mqtt_database.py # Writer database connection
|
||||
│ └── database.py # Reader database connection
|
||||
├── startdb.py # Writer app (runs migrations)
|
||||
├── main.py # Entry point for reader app
|
||||
└── create_migration.py # Helper script for creating migrations
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
Database URL is read from `config.ini`:
|
||||
|
||||
```ini
|
||||
[database]
|
||||
connection_string = sqlite+aiosqlite:///packets.db
|
||||
```
|
||||
|
||||
Alembic automatically uses this configuration through `meshview/migrations.py`.
|
||||
|
||||
## Important Notes
|
||||
|
||||
1. **Always test migrations** in development before deploying to production
|
||||
2. **Backup database** before running migrations in production
|
||||
3. **Check for data loss** - Some migrations may require data migration logic
|
||||
4. **Coordinate deployments** - Start writer before readers in multi-instance setups
|
||||
5. **Monitor logs** during first startup after deployment
|
||||
|
||||
## Example Migrations
|
||||
|
||||
### Example 1: Generated Initial Migration
|
||||
|
||||
Here's what an auto-generated migration looks like (from comparing models to database):
|
||||
|
||||
```python
|
||||
"""Initial migration
|
||||
|
||||
Revision ID: c88468b7ab0b
|
||||
Revises:
|
||||
Create Date: 2025-01-26 20:56:50.123456
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
# revision identifiers
|
||||
revision = 'c88468b7ab0b'
|
||||
down_revision = None
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
def upgrade() -> None:
|
||||
# Upgrade operations
|
||||
op.create_table('node',
|
||||
sa.Column('id', sa.String(), nullable=False),
|
||||
sa.Column('node_id', sa.BigInteger(), nullable=True),
|
||||
# ... more columns
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
|
||||
def downgrade() -> None:
|
||||
# Downgrade operations
|
||||
op.drop_table('node')
|
||||
```
|
||||
|
||||
### Example 2: Manual Migration Adding a New Table
|
||||
|
||||
We've included an example migration (`1717fa5c6545_add_example_table.py`) that demonstrates how to manually create a new table:
|
||||
|
||||
```python
|
||||
"""Add example table
|
||||
|
||||
Revision ID: 1717fa5c6545
|
||||
Revises: c88468b7ab0b
|
||||
Create Date: 2025-10-26 20:59:04.347066
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
def upgrade() -> None:
|
||||
"""Create example table with sample columns."""
|
||||
op.create_table(
|
||||
'example',
|
||||
sa.Column('id', sa.Integer(), nullable=False, primary_key=True, autoincrement=True),
|
||||
sa.Column('name', sa.String(length=100), nullable=False),
|
||||
sa.Column('description', sa.Text(), nullable=True),
|
||||
sa.Column('value', sa.Float(), nullable=True),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False, server_default='1'),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False,
|
||||
server_default=sa.text('CURRENT_TIMESTAMP')),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
|
||||
# Create an index on the name column for faster lookups
|
||||
op.create_index('idx_example_name', 'example', ['name'])
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Remove example table."""
|
||||
op.drop_index('idx_example_name', table_name='example')
|
||||
op.drop_table('example')
|
||||
```
|
||||
|
||||
**Key features demonstrated:**
|
||||
- Various column types (Integer, String, Text, Float, Boolean, DateTime)
|
||||
- Primary key with autoincrement
|
||||
- Nullable and non-nullable columns
|
||||
- Server defaults (for timestamps and booleans)
|
||||
- Creating indexes
|
||||
- Proper downgrade that reverses all changes
|
||||
|
||||
**To test this migration:**
|
||||
|
||||
```bash
|
||||
# Apply the migration
|
||||
./env/bin/alembic upgrade head
|
||||
|
||||
# Check it was applied
|
||||
./env/bin/alembic current
|
||||
|
||||
# Verify table was created
|
||||
sqlite3 packetsPL.db "SELECT sql FROM sqlite_master WHERE type='table' AND name='example';"
|
||||
|
||||
# Roll back the migration
|
||||
./env/bin/alembic downgrade -1
|
||||
|
||||
# Verify table was removed
|
||||
sqlite3 packetsPL.db "SELECT name FROM sqlite_master WHERE type='table' AND name='example';"
|
||||
```
|
||||
|
||||
**To remove this example migration** (after testing):
|
||||
|
||||
```bash
|
||||
# First make sure you're not on this revision
|
||||
./env/bin/alembic downgrade c88468b7ab0b
|
||||
|
||||
# Then delete the migration file
|
||||
rm alembic/versions/1717fa5c6545_add_example_table.py
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
- [Alembic Documentation](https://alembic.sqlalchemy.org/)
|
||||
- [SQLAlchemy Documentation](https://docs.sqlalchemy.org/)
|
||||
- [Async SQLAlchemy](https://docs.sqlalchemy.org/en/20/orm/extensions/asyncio.html)
|
||||
@@ -1,753 +0,0 @@
|
||||
# API Documentation
|
||||
|
||||
Base URL: `http(s)://<host>`
|
||||
|
||||
This reference covers all 16 GET routes registered in `meshview/web_api/api.py`,
|
||||
including `/health` and `/version`. The browser version is served at `/api.html`.
|
||||
Responses below are illustrative examples; actual values depend on stored data.
|
||||
Regenerate the browser reference after editing this file with
|
||||
`node scripts/build-api-docs.mjs`.
|
||||
|
||||
## Conventions
|
||||
|
||||
- Successful API responses are JSON. Explicit validation errors usually return JSON
|
||||
with an `error` field. Some unhandled errors return HTTP 500 with a plain-text
|
||||
body; check HTTP status and Content-Type before parsing an error response.
|
||||
- All routes are read-only. The application does not require an API token; a reverse
|
||||
proxy may impose authentication. There are no application-level write endpoints.
|
||||
- `*_us` timestamps and `since` use microseconds since the Unix epoch. Snapshot dates
|
||||
and statistics buckets use UTC. Node latitude/longitude integers must be divided
|
||||
by 10,000,000 to obtain degrees; coverage coordinates are already degrees.
|
||||
- Packet `id` and `storage_id` are database row IDs. Use these for the `packet_id`
|
||||
query/path parameters on packet, observation, count, and traceroute endpoints.
|
||||
A response field named `packet_id` on a packet object is instead its over-the-air
|
||||
Meshtastic ID. `reply_id`, when present, is also an over-the-air ID. These ID types
|
||||
are not interchangeable. Node IDs are numeric Meshtastic node numbers; the node
|
||||
object's `id` is a separate string identifier.
|
||||
- Use decimal node IDs throughout. The packet sender/recipient filters and the QR
|
||||
and coverage paths also accept Python-style `0x` hexadecimal numbers. This is
|
||||
not supported consistently by the other routes.
|
||||
- Public broadcast text is readable. Direct text messages on port 1 are returned as
|
||||
`<redacted>`. Request chat with `/api/packets?portnum=1`; there is no `/api/chat`
|
||||
route. Do not treat a decoded `payload` string as trusted HTML.
|
||||
|
||||
## Quick examples
|
||||
|
||||
```sh
|
||||
curl 'http://localhost:8081/api/nodes?days_active=3'
|
||||
curl 'http://localhost:8081/api/packets?portnum=1&limit=100'
|
||||
curl 'http://localhost:8081/api/stats/count'
|
||||
curl 'http://localhost:8081/api/coverage/1234?mode=perimeter&radius_km=20'
|
||||
```
|
||||
|
||||
## 1. Nodes API
|
||||
|
||||
### GET `/api/nodes`
|
||||
Returns a list of nodes, with optional filtering.
|
||||
|
||||
Query Parameters
|
||||
- `node_id` (optional, int): Exact node ID.
|
||||
- `role` (optional, string): Node role.
|
||||
- `channel` (optional, string): Channel name.
|
||||
- `hw_model` (optional, string): Hardware model.
|
||||
- `days_active` (optional, int): Nodes seen within the last N days. Omit for all
|
||||
nodes with a non-null last-seen timestamp; invalid integers are ignored.
|
||||
|
||||
Nodes are sorted by `short_name` ascending. `role` is normalized to uppercase;
|
||||
channel and hardware filters are exact matches. No pagination is implemented.
|
||||
|
||||
Errors: HTTP 500 with `{"error":"Failed to fetch nodes"}` for handler failures;
|
||||
the storage helper may return an empty list for database failures.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"nodes": [
|
||||
{
|
||||
"id": "!000004d2",
|
||||
"node_id": 1234,
|
||||
"long_name": "Alice",
|
||||
"short_name": "A",
|
||||
"hw_model": "T-Beam",
|
||||
"firmware": "1.2.3",
|
||||
"role": "client",
|
||||
"last_lat": 377749000,
|
||||
"last_long": -1224194000,
|
||||
"last_altitude": 125,
|
||||
"channel": "main",
|
||||
"is_mqtt_gateway": true,
|
||||
"first_seen_us": 1736283723456789,
|
||||
"last_seen_us": 1736370123456789
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
`last_altitude` is the latest reported altitude in meters above sea level, or `null`
|
||||
when unknown. It updates with valid node locations from position packets and map reports.
|
||||
Position packets without altitude preserve the previous value. Map reports lack altitude
|
||||
field presence, so zero values in map reports also preserve the previous value.
|
||||
Existing nodes receive altitude as new reports arrive.
|
||||
|
||||
---
|
||||
|
||||
## 2. Packets API
|
||||
|
||||
### GET `/api/packets`
|
||||
Returns packets with optional filters.
|
||||
|
||||
Query Parameters
|
||||
- `packet_id` (optional, decimal int): Return one packet by database row ID (overrides other filters).
|
||||
- `limit` (optional, int): Max packets to return, clamped 1-1000. Default: `50`.
|
||||
- `since` (optional, int): Only packets imported after this microsecond timestamp.
|
||||
- `portnum` (optional, int): Filter by port number.
|
||||
- `contains` (optional, string): Payload substring filter.
|
||||
- `from_node_id` (optional, int): Filter by sender node ID.
|
||||
- `channel` (optional, string): Filter by exact channel name before applying the packet limit.
|
||||
- `to_node_id` (optional, int): Filter by recipient node ID.
|
||||
- `node_id` (optional, int): Legacy filter matching either from or to node ID.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"packets": [
|
||||
{
|
||||
"id": 123,
|
||||
"storage_id": 123,
|
||||
"packet_id": 3314808102,
|
||||
"import_time_us": 1736370123456789,
|
||||
"channel": "main",
|
||||
"from_node_id": 5678,
|
||||
"to_node_id": 4294967295,
|
||||
"portnum": 1,
|
||||
"long_name": "Alice",
|
||||
"payload": "Hello, mesh!",
|
||||
"to_long_name": null,
|
||||
"reply_id": 122
|
||||
}
|
||||
],
|
||||
"latest_import_time": 1736370123456789
|
||||
}
|
||||
```
|
||||
|
||||
Notes
|
||||
- For `portnum=1` (text messages), packets are filtered to remove sequence-only payloads.
|
||||
- Results are newest first. `since` is strictly greater than the supplied timestamp.
|
||||
Store `latest_import_time` for the next poll and deduplicate by `id`. A bounded
|
||||
result can omit older records if more packets arrive than the requested limit;
|
||||
this endpoint is not a durable cursor or backfill API.
|
||||
- `latest_import_time` is returned only when the list response has a positive import
|
||||
timestamp; it is absent for empty results and single-packet lookups.
|
||||
- `packet_id` lookup returns `{"packets":[]}` with HTTP 200 when missing. Its objects
|
||||
omit `to_long_name` and `reply_id`; nullable `portnum` is possible in this mode.
|
||||
- `contains` is case-insensitive. With `portnum=1`, matching is performed on decoded
|
||||
displayed payload text (including redaction placeholders) after the database limit is applied, so fewer than `limit` results
|
||||
may be returned. For other requests, it searches stored payload bytes cast to text;
|
||||
this is not a general search over decoded protobuf fields.
|
||||
- Invalid `limit` falls back to 50. Invalid `since`, `portnum`, and node filters are
|
||||
logged and ignored. Invalid single-packet IDs return HTTP 400; handler failures
|
||||
return HTTP 500 with `{"error":"Failed to fetch packets"}`.
|
||||
|
||||
---
|
||||
|
||||
## 3. Channels API
|
||||
|
||||
### GET `/api/channels`
|
||||
Returns channels seen in a time period.
|
||||
|
||||
Query Parameters
|
||||
- `period_type` (optional, string): `hour` or `day`. Default: `hour`.
|
||||
- `length` (optional, int): Number of periods to look back. Default: `24`.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"channels": ["LongFast", "MediumFast", "ShortFast"]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Errors: storage/period failures return HTTP 200 with `channels: []` and an `error`
|
||||
field. Non-integer `length` is parsed outside that handler and can return HTTP 500.
|
||||
Use a positive integer length and the literal `hour` or `day`.
|
||||
|
||||
## 4. Stats API
|
||||
|
||||
### GET `/api/stats`
|
||||
Returns packet statistics aggregated by time periods, with optional filtering.
|
||||
|
||||
Query Parameters
|
||||
- `period_type` (optional, string): `hour` or `day`. Default: `hour`.
|
||||
- `length` (optional, int): Number of periods to include. Default: `24`.
|
||||
- `channel` (optional, string): Filter by channel (case-insensitive).
|
||||
- `portnum` (optional, int): Filter by port number.
|
||||
- `to_node` (optional, int): Filter by destination node ID.
|
||||
- `from_node` (optional, int): Filter by source node ID.
|
||||
- `node` (optional, int): If provided, return combined `sent` and `seen` totals for that node.
|
||||
|
||||
Response Example (series)
|
||||
```json
|
||||
{
|
||||
"period_type": "hour",
|
||||
"length": 24,
|
||||
"channel": "LongFast",
|
||||
"portnum": 1,
|
||||
"to_node": 12345678,
|
||||
"from_node": 87654321,
|
||||
"data": [
|
||||
{ "period": "2025-08-08 14:00", "count": 10 },
|
||||
{ "period": "2025-08-08 15:00", "count": 7 }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response Example (`node` totals)
|
||||
```json
|
||||
{
|
||||
"node_id": 12345678,
|
||||
"period_type": "hour",
|
||||
"length": 24,
|
||||
"sent": 0,
|
||||
"seen": 0
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
The series response contains only buckets with records, ordered oldest first;
|
||||
missing hours/days are not filled with zeroes. Periods are UTC strings.
|
||||
|
||||
Current `node`-mode limitation: the handler reads a `total` key that the statistics
|
||||
helper does not provide, so `sent` and `seen` currently return zero. It also uses
|
||||
recipient filtering for the second query, rather than gateway observations. This
|
||||
mode ignores the other filters. For usable sent/observation totals, request
|
||||
`/api/stats/count?from_node=1234&period_type=day&length=1` instead.
|
||||
|
||||
Errors: HTTP 400 for an unsupported `period_type`, non-integer `length`, `node`,
|
||||
`portnum`, `from_node`, or `to_node`. Storage failures can return HTTP 500.
|
||||
Use a positive `length`; the handler does not impose a positive lower bound.
|
||||
|
||||
### GET `/api/stats/count`
|
||||
Returns total packet counts, optionally filtered.
|
||||
|
||||
Query Parameters
|
||||
- `packet_id` (optional, int): Filter packet_seen by packet ID.
|
||||
- `period_type` (optional, string): `hour` or `day`.
|
||||
- `length` (optional, int): Number of periods to include.
|
||||
- `channel` (optional, string): Filter by channel.
|
||||
- `from_node` (optional, int): Filter by source node ID.
|
||||
- `to_node` (optional, int): Filter by destination node ID.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"total_packets": 12345,
|
||||
"total_seen": 67890
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Without filters, counts cover the whole retained database. With time, channel,
|
||||
or direction filters, omitted time settings default to `period_type=day&length=1`.
|
||||
`total_seen` counts observation rows for packets matching the packet import-time
|
||||
window, not distinct gateways. Channel matching is case-insensitive.
|
||||
|
||||
`packet_id` applies only to `total_seen` and overrides its other filters: it counts
|
||||
all observations of that database packet ID. It does not narrow `total_packets`.
|
||||
In particular, `packet_id` alone leaves `total_packets` as the global packet total.
|
||||
|
||||
Errors: HTTP 400 for non-integer ID/length filters. Unsupported `period_type` or
|
||||
storage failures can return HTTP 500; use `hour` or `day` and a positive length.
|
||||
|
||||
### GET `/api/stats/top`
|
||||
Returns nodes sorted by packets seen, with pagination.
|
||||
|
||||
Query Parameters
|
||||
- `period_type` (optional, string): `hour` or `day`. Default: `day`.
|
||||
- `length` (optional, int): Number of periods to include. Default: `1`.
|
||||
- `channel` (optional, string): Filter by channel.
|
||||
- `limit` (optional, int): Max nodes to return. Default: `20`, max `100`.
|
||||
- `offset` (optional, int): Pagination offset. Default: `0`.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"total": 250,
|
||||
"limit": 20,
|
||||
"offset": 0,
|
||||
"nodes": [
|
||||
{
|
||||
"node_id": 1234,
|
||||
"long_name": "Alice",
|
||||
"short_name": "A",
|
||||
"channel": "main",
|
||||
"sent": 100,
|
||||
"seen": 240,
|
||||
"avg": 2.4
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
`sent` counts packet records from each node; `seen` counts observation records for
|
||||
that sender's packets. `avg` is `round(seen / max(sent, 1), 2)`, not a distinct-gateway
|
||||
count. Windows are anchored to the newest packet and newest observation in the
|
||||
respective tables, not wall-clock time. Nodes with zero activity are included;
|
||||
`total` counts nodes matching the channel filter, not just active nodes.
|
||||
|
||||
Channel matching is exact. Use positive `length` and `limit`, and a nonnegative
|
||||
`offset`. Only the upper limit of 100 is enforced. Invalid numeric strings can
|
||||
return HTTP 500; any `period_type` other than the literal `hour` is treated as days.
|
||||
|
||||
## 5. Edges API
|
||||
|
||||
### GET `/api/edges`
|
||||
Returns network edges (connections between nodes) based on traceroutes and neighbor info.
|
||||
Traceroute edges are collected over the last 12 hours. Neighbor edges are based on
|
||||
port 71 packets.
|
||||
|
||||
A completed traceroute is observed as a response packet, whose `from`/`to` are reversed
|
||||
with respect to the traced path, so edges are built as `to -> route[] -> from`. `route[]`
|
||||
may contain `0xFFFFFFFF` placeholders for hops the mesh could not identify; the edges on
|
||||
either side of such a placeholder are omitted, because the nodes around an unknown hop
|
||||
are not neighbours.
|
||||
|
||||
Query Parameters
|
||||
- `type` (optional, string): `traceroute` or `neighbor`. If omitted, returns both.
|
||||
- `node_id` (optional, int): Filter edges to only those touching a node.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"edges": [
|
||||
{ "from": 12345678, "to": 87654321, "type": "traceroute" },
|
||||
{ "from": 11111111, "to": 22222222, "type": "neighbor" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Unknown `type` values return an empty edge list. Invalid `node_id` returns HTTP 400;
|
||||
storage failures can return HTTP 500. A missing node is not an error and normally
|
||||
returns an empty list. Neighbor edges come from the latest stored port-71 sample
|
||||
(the storage helper defaults to 50 packets), not the traceroute 12-hour window.
|
||||
|
||||
## 6. Daily Snapshots and Configuration
|
||||
|
||||
### GET `/api/snapshots/daily`
|
||||
|
||||
Returns stored daily snapshots. For new snapshots, `packet_count` is the number of
|
||||
packet records imported during `date` (00:00 UTC inclusive to the next midnight
|
||||
exclusive). The scheduled capture records the previous complete UTC day. Repeated
|
||||
observations of the same packet are not counted separately. `node_count` counts distinct
|
||||
packet senders whose packets were imported or observed during that UTC day (including
|
||||
observations of previously imported packets). `gateway_count` counts distinct MQTT
|
||||
gateways with packet observations imported during that day. These are activity counts,
|
||||
not database totals; recipients alone do not count as active nodes. Activity uses local
|
||||
import timestamps, not device timestamps. Older snapshots retain their originally stored
|
||||
counts and are not automatically converted. Counts depend on the packet and observation
|
||||
history still retained at capture time.
|
||||
|
||||
Query Parameters
|
||||
|
||||
- `length` (optional, int): Return the latest N snapshot records, clamped to 1-3650.
|
||||
Omit for all stored snapshots. Results are always ordered by date ascending.
|
||||
This is a record limit, not a guarantee of consecutive calendar dates.
|
||||
|
||||
Response Example
|
||||
|
||||
```json
|
||||
{"data":[{"date":"2026-10-24","node_count":143,"packet_count":28465,"gateway_count":17,"captured_at_us":1792886400000000}]}
|
||||
```
|
||||
|
||||
No stored snapshots returns `{"data":[]}`. Invalid `length` returns HTTP 400;
|
||||
storage failures return HTTP 500. `captured_at_us` is the capture time, which may
|
||||
be later than the day summarized by `date`.
|
||||
|
||||
### GET `/api/config`
|
||||
Returns a safe subset of server configuration.
|
||||
|
||||
`site.map_channel_colors` contains channel color overrides from the optional
|
||||
`[map_channel_colors]` INI section. Each entry is `channel = #RRGGBB`; invalid colors
|
||||
are omitted. Channel matching on the map ignores case, spaces, hyphens, and underscores.
|
||||
Unlisted channels use generated colors. For example:
|
||||
|
||||
```ini
|
||||
[map_channel_colors]
|
||||
LongFast = #4363d8
|
||||
LocalChat = #18aa18
|
||||
```
|
||||
|
||||
No query parameters are supported. Only the `site`, MQTT server/topics, and cleanup
|
||||
fields shown here are exposed; credentials and the database connection string are
|
||||
not returned. Feature flags and cleanup booleans are lowercase strings (`"true"` /
|
||||
`"false"`), not JSON booleans. Cleanup scheduling values are strings; map bounds are
|
||||
numbers and refresh intervals are integers. The removed `starting` option is not
|
||||
returned: `/` always serves the dashboard. `site.api` controls visibility of the API
|
||||
documentation link in the navigation bar, defaults to `"true"`, and can be disabled
|
||||
with `api = False` in `[site]`. This setting does not disable documentation or API
|
||||
routes. Restart the web server and reload the page after changing it. Handler
|
||||
failures return HTTP 500.
|
||||
|
||||
Restart the web server and reload the map after changing these settings. Omitting
|
||||
the section uses generated colors for every channel.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"site": {
|
||||
"domain": "example.com",
|
||||
"language": "en",
|
||||
"title": "Meshview",
|
||||
"message": "",
|
||||
"nodes": "true",
|
||||
"chat": "true",
|
||||
"everything": "true",
|
||||
"graphs": "true",
|
||||
"stats": "true",
|
||||
"net": "true",
|
||||
"map": "true",
|
||||
"top": "true",
|
||||
"api": "true",
|
||||
"map_top_left_lat": 39.0,
|
||||
"map_top_left_lon": -123.0,
|
||||
"map_bottom_right_lat": 36.0,
|
||||
"map_bottom_right_lon": -121.0,
|
||||
"map_interval": 3,
|
||||
"map_channel_colors": {"LongFast":"#4363d8"},
|
||||
"firehose_interval": 3,
|
||||
"weekly_net_message": "Weekly Mesh check-in message.",
|
||||
"net_tag": "#BayMeshNet",
|
||||
"version": "3.0.0"
|
||||
},
|
||||
"mqtt": {
|
||||
"server": "mqtt.example.com",
|
||||
"topics": ["msh/region/#"]
|
||||
},
|
||||
"cleanup": {
|
||||
"enabled": "false",
|
||||
"days_to_keep": "14",
|
||||
"hour": "2",
|
||||
"minute": "0",
|
||||
"vacuum": "false"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. Language API
|
||||
|
||||
### GET `/api/lang`
|
||||
Returns translation strings.
|
||||
|
||||
Query Parameters
|
||||
- `lang` (optional, string): Language code (e.g., `en`, `es`). Default from config or `en`.
|
||||
- `section` (optional, string): Return only one section (e.g., `nodelist`, `firehose`).
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"title": "Meshview",
|
||||
"search_placeholder": "Search..."
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Unknown or invalid language codes fall back to the English file. An unknown section
|
||||
returns HTTP 404. The response has no wrapper: it is either the full translation
|
||||
object or the requested section. Translation-file failures can return HTTP 500.
|
||||
|
||||
## 8. Packets Seen API
|
||||
|
||||
### GET `/api/packets_seen/{packet_id}`
|
||||
Returns packet_seen entries for a packet.
|
||||
|
||||
Path Parameters
|
||||
- `packet_id` (required, int): Packet ID.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"seen": [
|
||||
{
|
||||
"packet_id": 123,
|
||||
"node_id": 456,
|
||||
"rx_time": 1753188300,
|
||||
"hop_limit": 7,
|
||||
"hop_start": 0,
|
||||
"channel": "main",
|
||||
"rx_snr": 5.0,
|
||||
"rx_rssi": -90,
|
||||
"topic": "msh/region/#",
|
||||
"import_time_us": 1736370123456789
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
`node_id` identifies the observing MQTT gateway. `rx_time` is the device-provided
|
||||
receive time in Unix seconds, while `import_time_us` is local import time
|
||||
in microseconds. Signal fields can be null. Multiple rows can describe the same
|
||||
gateway; consumers wanting unique gateways must deduplicate them. Hop count is
|
||||
usually `max(0, hop_start - hop_limit)` when both values are known. Observations
|
||||
do not by themselves prove a direct radio link from the sender to that gateway.
|
||||
|
||||
No observations, including for an unknown packet, returns `{"seen":[]}` with HTTP
|
||||
200. Invalid path IDs return HTTP 400; handler failures return HTTP 500.
|
||||
|
||||
## 9. Traceroute API
|
||||
|
||||
### GET `/api/traceroute/{packet_id}`
|
||||
Returns traceroute details and derived paths for a packet.
|
||||
|
||||
Path Parameters
|
||||
- `packet_id` (required, int): Packet ID.
|
||||
|
||||
A completed traceroute is observed as a response packet, whose `from`/`to` are reversed
|
||||
with respect to the traced path. `initiator` and `target` resolve this: the forward path
|
||||
runs `initiator -> forward_hops -> target` and the return path runs
|
||||
`target -> reverse_hops -> initiator`, in both directions of travel. `forward_hops` and
|
||||
`reverse_hops` contain only the intermediate hops, never the endpoints.
|
||||
|
||||
A gateway usually reports a response that is still travelling home, so `reverse_hops` is
|
||||
often incomplete. `reverse_complete` says whether that observation had reached the
|
||||
initiator; only then does the corresponding `winning_paths.reverse` entry end at the
|
||||
initiator.
|
||||
|
||||
`winning_paths` is built from response observations, since a response proves the request
|
||||
reached the target. `complete` on a `unique_forward_paths` entry says whether some
|
||||
response reported that hop list, and so whether it is known to end at the target.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"packet": {
|
||||
"id": 123,
|
||||
"from": 222,
|
||||
"to": 111,
|
||||
"initiator": 111,
|
||||
"target": 222,
|
||||
"channel": "main"
|
||||
},
|
||||
"traceroute_packets": [
|
||||
{
|
||||
"index": 0,
|
||||
"gateway_node_id": 333,
|
||||
"done": true,
|
||||
"forward_hops": [444, 555],
|
||||
"reverse_hops": [555, 444],
|
||||
"reverse_complete": true
|
||||
}
|
||||
],
|
||||
"unique_forward_paths": [
|
||||
{ "path": [444, 555], "count": 2, "complete": true }
|
||||
],
|
||||
"unique_reverse_paths": [
|
||||
[555, 444]
|
||||
],
|
||||
"winning_paths": {
|
||||
"forward": [[111, 444, 555, 222]],
|
||||
"reverse": [[222, 555, 444, 111]]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
`traceroute_packets` can be empty even when the packet exists. Unknown database
|
||||
packet IDs return HTTP 404. Invalid integer IDs and storage failures can return
|
||||
HTTP 500; this handler does not implement a separate HTTP 400 validation branch.
|
||||
|
||||
## 10. Health API
|
||||
|
||||
### GET `/health`
|
||||
Returns service health and database status.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"status": "healthy",
|
||||
"timestamp": "2025-07-22T12:45:00+00:00",
|
||||
"version": "3.0.3",
|
||||
"git_revision": "abc1234",
|
||||
"cleanup": {
|
||||
"enabled": true,
|
||||
"days_to_keep": 14,
|
||||
"scheduled_time": "02:00",
|
||||
"vacuum": false,
|
||||
"status": "ok",
|
||||
"status_file": "dbcleanup.status.json",
|
||||
"last_run": {
|
||||
"status": "ok",
|
||||
"started_at": "2026-06-04T09:00:00+00:00",
|
||||
"completed_at": "2026-06-04T09:00:03+00:00",
|
||||
"cutoff_at": "2026-05-21T09:00:00+00:00",
|
||||
"days_to_keep": 14,
|
||||
"vacuum_requested": false,
|
||||
"vacuum_completed": false,
|
||||
"rows_deleted": {
|
||||
"packet": 1200,
|
||||
"packet_seen": 3400,
|
||||
"traceroute": 42,
|
||||
"node": 3
|
||||
},
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
"backup": {
|
||||
"enabled": true,
|
||||
"backup_dir": "./backups",
|
||||
"scheduled_time": "02:00",
|
||||
"status": "ok",
|
||||
"status_file": "dbbackup.status.json",
|
||||
"last_run": {
|
||||
"status": "ok",
|
||||
"started_at": "2026-06-04T09:00:00+00:00",
|
||||
"completed_at": "2026-06-04T09:00:02+00:00",
|
||||
"backup_dir": "./backups",
|
||||
"database_path": "packets.db",
|
||||
"backup_file": "backups/packets_backup_20260604_090000.db.gz",
|
||||
"original_size_bytes": 12939444,
|
||||
"compressed_size_bytes": 4211560,
|
||||
"compression_percent": 67.5,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
"database": "connected",
|
||||
"database_size": "12.34 MB",
|
||||
"database_size_bytes": 12939444
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
No query parameters. HTTP 200 reports `status: "healthy"` with database connectivity.
|
||||
A database failure returns HTTP 503 with `status: "unhealthy"` and
|
||||
`database: "disconnected"`. `seconds_since_last_message` is included only when a
|
||||
latest imported packet exists; SQLite size fields appear only when available.
|
||||
Cleanup and backup reports include configured schedules and status-file contents
|
||||
when present. Their status may be `disabled`, `unknown`, `error`, or the last job's
|
||||
recorded status; a failed backup/cleanup does not itself change the top-level HTTP
|
||||
status. The optional `last_run` objects depend on the job's stored report.
|
||||
|
||||
## 11. Version API
|
||||
|
||||
### GET `/version`
|
||||
Returns version metadata.
|
||||
|
||||
Response Example
|
||||
```json
|
||||
{
|
||||
"version": "3.0.3",
|
||||
"release_date": "2026-1-15",
|
||||
"git_revision": "abc1234",
|
||||
"git_revision_short": "abc1234"
|
||||
}
|
||||
```
|
||||
|
||||
No query parameters. HTTP 500 with an `error` field if version metadata cannot be
|
||||
retrieved. A revision may be `unknown` if Git metadata is unavailable.
|
||||
|
||||
## 12. Node Contact URL
|
||||
|
||||
### GET `/api/node/{node_id}/qr`
|
||||
|
||||
Returns a Meshtastic shared-contact URL as JSON, not a PNG or SVG image. The client
|
||||
can encode `meshtastic_url` in a QR code. No query parameters are supported.
|
||||
|
||||
Path Parameters
|
||||
|
||||
- `node_id` (required, int): Node number in decimal or `0x` hexadecimal form.
|
||||
|
||||
Response Example
|
||||
|
||||
```json
|
||||
{
|
||||
"node_id":1234,
|
||||
"long_name":"Alice",
|
||||
"short_name":"A",
|
||||
"role":"CLIENT",
|
||||
"meshtastic_url":"https://meshtastic.org/v/#BASE64URL_CONTACT"
|
||||
}
|
||||
```
|
||||
|
||||
The example contact payload is a placeholder, not an importable contact. The URL
|
||||
encodes node identity and available user metadata as a base64url SharedContact
|
||||
protobuf, with `manually_verified` false. Metadata can be null.
|
||||
|
||||
Errors: HTTP 400 for invalid IDs; HTTP 404 when the node is absent; HTTP 500 for
|
||||
contact serialization failures or unhandled storage errors.
|
||||
|
||||
## 13. Predicted Radio Coverage
|
||||
|
||||
### GET `/api/coverage/{node_id}`
|
||||
|
||||
Computes an ITM area-model prediction centered on the node's last stored position.
|
||||
This is a model prediction, not a measured coverage boundary or terrain profile.
|
||||
The optional `pyitm` dependency is required. Calculations run off the event loop
|
||||
and reuse cached model results. All parameters are optional except the node ID.
|
||||
|
||||
Path Parameters
|
||||
|
||||
- `node_id` (required, int): Node number in decimal or `0x` hexadecimal form.
|
||||
|
||||
Query Parameters
|
||||
|
||||
- `mode` (string, default `perimeter`): `perimeter` or `heatmap`. Currently every
|
||||
value other than the exact string `perimeter` selects the heatmap branch.
|
||||
- `freq_mhz` (number, default `907`): Frequency in MHz; range 1-10000.
|
||||
- `tx_dbm` (number, default `20`): Transmit power in dBm; range -50 to 60.
|
||||
- `tx_height_m` (number, default `5`): Transmit antenna height in meters; range 0-1000.
|
||||
- `rx_height_m` (number, default `1.5`): Receive antenna height in meters; range 0-1000.
|
||||
- `radius_km` (number, default `40`): Maximum distance in kilometers; range 1-200.
|
||||
- `step_km` (number, default `0.25`): Radial sample spacing in kilometers; range 0.05-50.
|
||||
- `reliability` (number, default `0.5`): ITM time fraction; range 0.01-0.99.
|
||||
- `threshold_dbm` (number, default `-120`): Perimeter received-power threshold in dBm;
|
||||
range -200 to 0. Ignored by heatmap computation, although still validated.
|
||||
|
||||
Numeric bounds are inclusive, values must be finite, and `radius_km / step_km`
|
||||
must not exceed 4000. Smaller steps increase computation cost.
|
||||
|
||||
Response Example (`mode=perimeter`)
|
||||
|
||||
```json
|
||||
{
|
||||
"mode":"perimeter",
|
||||
"threshold_dbm":-120.0,
|
||||
"perimeter":[[30.21,-93.20],[30.209,-93.198]]
|
||||
}
|
||||
```
|
||||
|
||||
`perimeter` contains `[latitude, longitude]` degree pairs for the furthest qualifying
|
||||
sample on each modeled bearing. Bearings with no qualifying sample are omitted;
|
||||
the list is not necessarily a closed GeoJSON polygon.
|
||||
|
||||
Response Example (`mode=heatmap`)
|
||||
|
||||
```json
|
||||
{
|
||||
"mode":"heatmap",
|
||||
"min_dbm":-130.0,
|
||||
"max_dbm":-80.0,
|
||||
"points":[[30.21,-93.20,-110.5]]
|
||||
}
|
||||
```
|
||||
|
||||
`points` contains `[latitude, longitude, received_power_dbm]` triples. Min/max values
|
||||
provide a color-scale range, extended from the defaults to include computed values.
|
||||
An empty perimeter or point list is a valid result when no samples qualify.
|
||||
|
||||
Errors: HTTP 400 for invalid IDs, nonnumeric/nonfinite/out-of-range parameters, or
|
||||
an excessive radius/step ratio; HTTP 404 for an unknown node or missing/zero-valued
|
||||
stored coordinates; HTTP 503 when `pyitm` is unavailable. Dependency availability is checked
|
||||
before numeric query validation and node lookup. Unexpected model/storage failures
|
||||
can return HTTP 500.
|
||||
@@ -1,37 +0,0 @@
|
||||
# Coverage
|
||||
|
||||
## Predicted coverage
|
||||
|
||||
Meshview can display a predicted coverage boundary for a node. This is a **model**
|
||||
estimate, not a guarantee of real-world performance.
|
||||
|
||||
### How it works
|
||||
|
||||
The coverage boundary is computed using the Longley-Rice / ITM **area mode**
|
||||
propagation model. Area mode estimates average path loss over generic terrain
|
||||
and does not use a terrain profile. This means it captures general distance
|
||||
effects, but **does not** account for terrain shadows, buildings, or foliage.
|
||||
|
||||
### What you are seeing
|
||||
|
||||
The UI draws a **perimeter** (not a heatmap) that represents the furthest
|
||||
distance where predicted signal strength is above a threshold (default
|
||||
`-120 dBm`). The model is run radially from the node in multiple directions,
|
||||
and the last point above the threshold forms the outline.
|
||||
|
||||
### Key parameters
|
||||
|
||||
- **Frequency**: default `907 MHz`
|
||||
- **Transmit power**: default `20 dBm`
|
||||
- **Antenna heights**: default `5 m` (TX) and `1.5 m` (RX)
|
||||
- **Reliability**: default `0.5` (median)
|
||||
- **Terrain irregularity**: default `90 m` (average terrain)
|
||||
|
||||
### Limitations
|
||||
|
||||
- No terrain or building data is used (area mode only).
|
||||
- Results are sensitive to power, height, and threshold.
|
||||
- Environmental factors can cause large real-world deviations.
|
||||
|
||||
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
# Database Changes With Alembic
|
||||
|
||||
This guide explains how to make database schema changes in MeshView using Alembic migrations.
|
||||
|
||||
## Overview
|
||||
|
||||
When you need to add, modify, or remove columns from database tables, you must:
|
||||
1. Update the SQLAlchemy model
|
||||
2. Create an Alembic migration
|
||||
3. Let the system automatically apply the migration
|
||||
|
||||
## Step-by-Step Process
|
||||
|
||||
### 1. Update the Model
|
||||
|
||||
Edit `meshview/models.py` to add/modify the column in the appropriate model class:
|
||||
|
||||
```python
|
||||
class Traceroute(Base):
|
||||
__tablename__ = "traceroute"
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
||||
# ... existing columns ...
|
||||
route_return: Mapped[bytes] = mapped_column(nullable=True) # New column
|
||||
```
|
||||
|
||||
### 2. Create an Alembic Migration
|
||||
|
||||
Generate a new migration file with a descriptive message:
|
||||
|
||||
```bash
|
||||
./env/bin/alembic revision -m "add route_return to traceroute"
|
||||
```
|
||||
|
||||
This creates a new file in `alembic/versions/` with a unique revision ID.
|
||||
|
||||
### 3. Fill in the Migration
|
||||
|
||||
Edit the generated migration file to implement the actual database changes:
|
||||
|
||||
```python
|
||||
def upgrade() -> None:
|
||||
# Add route_return column to traceroute table
|
||||
with op.batch_alter_table('traceroute', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('route_return', sa.LargeBinary(), nullable=True))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# Remove route_return column from traceroute table
|
||||
with op.batch_alter_table('traceroute', schema=None) as batch_op:
|
||||
batch_op.drop_column('route_return')
|
||||
```
|
||||
|
||||
### 4. Migration Runs Automatically
|
||||
|
||||
When you restart the application with `mvrun.py`:
|
||||
|
||||
1. The writer process (`startdb.py`) starts up
|
||||
2. It checks if the database schema is up to date
|
||||
3. If new migrations are pending, it runs them automatically
|
||||
4. The reader process (web server) waits for migrations to complete before starting
|
||||
|
||||
**No manual migration command is needed** - the application handles this automatically on startup.
|
||||
|
||||
### 5. Commit Both Files
|
||||
|
||||
Add both files to git:
|
||||
|
||||
```bash
|
||||
git add meshview/models.py
|
||||
git add alembic/versions/ac311b3782a1_add_route_return_to_traceroute.py
|
||||
git commit -m "Add route_return column to traceroute table"
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
### SQLite Compatibility
|
||||
|
||||
Always use `batch_alter_table` for SQLite compatibility:
|
||||
|
||||
```python
|
||||
with op.batch_alter_table('table_name', schema=None) as batch_op:
|
||||
batch_op.add_column(...)
|
||||
```
|
||||
|
||||
SQLite has limited ALTER TABLE support, and `batch_alter_table` works around these limitations.
|
||||
|
||||
### Migration Process
|
||||
|
||||
- **Writer process** (`startdb.py`): Runs migrations on startup
|
||||
- **Reader process** (web server in `main.py`): Waits for migrations to complete
|
||||
- Migrations are checked and applied every time the application starts
|
||||
- The system uses a migration status table to coordinate between processes
|
||||
|
||||
### Common Column Types
|
||||
|
||||
```python
|
||||
# Integer
|
||||
column: Mapped[int] = mapped_column(BigInteger, nullable=True)
|
||||
|
||||
# String
|
||||
column: Mapped[str] = mapped_column(nullable=True)
|
||||
|
||||
# Bytes/Binary
|
||||
column: Mapped[bytes] = mapped_column(nullable=True)
|
||||
|
||||
# DateTime
|
||||
column: Mapped[datetime] = mapped_column(nullable=True)
|
||||
|
||||
# Boolean
|
||||
column: Mapped[bool] = mapped_column(nullable=True)
|
||||
|
||||
# Float
|
||||
column: Mapped[float] = mapped_column(nullable=True)
|
||||
```
|
||||
|
||||
### Migration File Location
|
||||
|
||||
Migrations are stored in: `alembic/versions/`
|
||||
|
||||
Each migration file includes:
|
||||
- Revision ID (unique identifier)
|
||||
- Down revision (previous migration in chain)
|
||||
- Create date
|
||||
- `upgrade()` function (applies changes)
|
||||
- `downgrade()` function (reverts changes)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Migration Not Running
|
||||
|
||||
If migrations don't run automatically:
|
||||
|
||||
1. Check that the database is writable
|
||||
2. Look for errors in the startup logs
|
||||
3. Verify the migration chain is correct (each migration references the previous one)
|
||||
|
||||
### Manual Migration (Not Recommended)
|
||||
|
||||
If you need to manually run migrations for debugging:
|
||||
|
||||
```bash
|
||||
./env/bin/alembic upgrade head
|
||||
```
|
||||
|
||||
However, the application normally handles this automatically.
|
||||
@@ -1,14 +0,0 @@
|
||||
# Technical Documentation
|
||||
|
||||
This directory contains technical documentation for MeshView that goes beyond initial setup and basic usage.
|
||||
|
||||
These documents are intended for developers, contributors, and advanced users who need deeper insight into the system's architecture, database migrations, API endpoints, and internal workings.
|
||||
|
||||
## Contents
|
||||
|
||||
- [ALEMBIC_SETUP.md](ALEMBIC_SETUP.md) - Database migration setup and management
|
||||
- [TIMESTAMP_MIGRATION.md](TIMESTAMP_MIGRATION.md) - Details on timestamp schema changes
|
||||
- [API_Documentation.md](API_Documentation.md) - REST API endpoints and usage
|
||||
- [CODE_IMPROVEMENTS.md](CODE_IMPROVEMENTS.md) - Suggested code improvements and refactoring ideas
|
||||
|
||||
For initial setup and basic usage instructions, please see the main [README.md](../README.md) in the root directory.
|
||||
@@ -1,193 +0,0 @@
|
||||
# High-Resolution Timestamp Migration
|
||||
|
||||
This document describes the implementation of GitHub issue #55: storing high-resolution timestamps as integers in the database for improved performance and query efficiency.
|
||||
|
||||
## Overview
|
||||
|
||||
The meshview database now stores timestamps in two formats:
|
||||
1. **TEXT format** (`import_time`): Human-readable ISO8601 format with microseconds (e.g., `2025-03-12 04:15:56.058038`)
|
||||
2. **INTEGER format** (`import_time_us`): Microseconds since Unix epoch (1970-01-01 00:00:00 UTC)
|
||||
|
||||
The dual format approach provides:
|
||||
- **Backward compatibility**: Existing `import_time` TEXT columns remain unchanged
|
||||
- **Performance**: Fast integer comparisons and math operations
|
||||
- **Precision**: Microsecond resolution for accurate timing
|
||||
- **Efficiency**: Compact storage and fast indexed lookups
|
||||
|
||||
## Database Changes
|
||||
|
||||
### New Columns Added
|
||||
|
||||
Three tables have new `import_time_us` columns:
|
||||
|
||||
1. **packet.import_time_us** (INTEGER)
|
||||
- Stores when the packet was imported into the database
|
||||
- Indexed for fast queries
|
||||
|
||||
2. **packet_seen.import_time_us** (INTEGER)
|
||||
- Stores when the packet_seen record was imported
|
||||
- Indexed for performance
|
||||
|
||||
3. **traceroute.import_time_us** (INTEGER)
|
||||
- Stores when the traceroute was imported
|
||||
- Indexed for fast lookups
|
||||
|
||||
### New Indexes
|
||||
|
||||
The following indexes were created for optimal query performance:
|
||||
|
||||
```sql
|
||||
CREATE INDEX idx_packet_import_time_us ON packet(import_time_us DESC);
|
||||
CREATE INDEX idx_packet_from_node_time_us ON packet(from_node_id, import_time_us DESC);
|
||||
CREATE INDEX idx_packet_seen_import_time_us ON packet_seen(import_time_us);
|
||||
CREATE INDEX idx_traceroute_import_time_us ON traceroute(import_time_us);
|
||||
```
|
||||
|
||||
## Migration Process
|
||||
|
||||
### For Existing Databases
|
||||
|
||||
Run the migration script to add the new columns and populate them from existing data:
|
||||
|
||||
```bash
|
||||
python migrate_add_timestamp_us.py [database_path]
|
||||
```
|
||||
|
||||
If no path is provided, it defaults to `packets.db` in the current directory.
|
||||
|
||||
The migration script:
|
||||
1. Checks if migration is needed (idempotent)
|
||||
2. Adds `import_time_us` columns to the three tables
|
||||
3. Populates the new columns from existing `import_time` values
|
||||
4. Creates indexes for optimal performance
|
||||
5. Verifies the migration completed successfully
|
||||
|
||||
### For New Databases
|
||||
|
||||
New databases created with the updated schema will automatically include the `import_time_us` columns. The MQTT store module populates both columns when inserting new records.
|
||||
|
||||
## Code Changes
|
||||
|
||||
### Models (meshview/models.py)
|
||||
|
||||
The ORM models now include the new `import_time_us` fields:
|
||||
|
||||
```python
|
||||
class Packet(Base):
|
||||
import_time: Mapped[datetime] = mapped_column(nullable=True)
|
||||
import_time_us: Mapped[int] = mapped_column(BigInteger, nullable=True)
|
||||
```
|
||||
|
||||
### MQTT Store (meshview/mqtt_store.py)
|
||||
|
||||
The data ingestion logic now populates both timestamp columns using UTC time:
|
||||
|
||||
```python
|
||||
now = datetime.datetime.now(datetime.timezone.utc)
|
||||
now_us = int(now.timestamp() * 1_000_000)
|
||||
|
||||
# Both columns are populated
|
||||
import_time=now,
|
||||
import_time_us=now_us,
|
||||
```
|
||||
|
||||
**Important**: All new timestamps use UTC (Coordinated Universal Time) for consistency across time zones.
|
||||
|
||||
## Using the New Timestamps
|
||||
|
||||
### Example Queries
|
||||
|
||||
**Query packets from the last 7 days:**
|
||||
|
||||
```sql
|
||||
-- Old way (slower)
|
||||
SELECT * FROM packet
|
||||
WHERE import_time >= datetime('now', '-7 days');
|
||||
|
||||
-- New way (faster)
|
||||
SELECT * FROM packet
|
||||
WHERE import_time_us >= (strftime('%s', 'now', '-7 days') * 1000000);
|
||||
```
|
||||
|
||||
**Query packets in a specific time range:**
|
||||
|
||||
```sql
|
||||
SELECT * FROM packet
|
||||
WHERE import_time_us BETWEEN 1759254380000000 AND 1759254390000000;
|
||||
```
|
||||
|
||||
**Calculate time differences (in microseconds):**
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
id,
|
||||
(import_time_us - LAG(import_time_us) OVER (ORDER BY import_time_us)) / 1000000.0 as seconds_since_last
|
||||
FROM packet
|
||||
LIMIT 10;
|
||||
```
|
||||
|
||||
### Converting Timestamps
|
||||
|
||||
**From datetime to microseconds (UTC):**
|
||||
```python
|
||||
import datetime
|
||||
now = datetime.datetime.now(datetime.timezone.utc)
|
||||
now_us = int(now.timestamp() * 1_000_000)
|
||||
```
|
||||
|
||||
**From microseconds to datetime:**
|
||||
```python
|
||||
import datetime
|
||||
timestamp_us = 1759254380813451
|
||||
dt = datetime.datetime.fromtimestamp(timestamp_us / 1_000_000)
|
||||
```
|
||||
|
||||
**In SQL queries:**
|
||||
```sql
|
||||
-- Datetime to microseconds
|
||||
SELECT CAST((strftime('%s', import_time) || substr(import_time, 21, 6)) AS INTEGER);
|
||||
|
||||
-- Microseconds to datetime (approximate)
|
||||
SELECT datetime(import_time_us / 1000000, 'unixepoch');
|
||||
```
|
||||
|
||||
## Performance Benefits
|
||||
|
||||
The integer timestamp columns provide significant performance improvements:
|
||||
|
||||
1. **Faster comparisons**: Integer comparisons are much faster than string/datetime comparisons
|
||||
2. **Smaller index size**: Integer indexes are more compact than datetime indexes
|
||||
3. **Range queries**: BETWEEN operations on integers are highly optimized
|
||||
4. **Math operations**: Easy to calculate time differences, averages, etc.
|
||||
5. **Sorting**: Integer sorting is faster than datetime sorting
|
||||
|
||||
## Backward Compatibility
|
||||
|
||||
The original `import_time` TEXT columns remain unchanged:
|
||||
- Existing code continues to work
|
||||
- Human-readable timestamps still available
|
||||
- Gradual migration to new columns possible
|
||||
- No breaking changes for existing queries
|
||||
|
||||
## Future Work
|
||||
|
||||
Future improvements could include:
|
||||
- Migrating queries to use `import_time_us` columns
|
||||
- Deprecating the TEXT `import_time` columns (after transition period)
|
||||
- Adding helper functions for timestamp conversion
|
||||
- Creating views that expose both formats
|
||||
|
||||
## Testing
|
||||
|
||||
The migration was tested on a production database with:
|
||||
- 132,466 packet records
|
||||
- 1,385,659 packet_seen records
|
||||
- 28,414 traceroute records
|
||||
|
||||
All records were successfully migrated with microsecond precision preserved.
|
||||
|
||||
## References
|
||||
|
||||
- GitHub Issue: #55 - Storing High-Resolution Timestamps in SQLite
|
||||
- SQLite datetime functions: https://www.sqlite.org/lang_datefunc.html
|
||||
- Python datetime module: https://docs.python.org/3/library/datetime.html
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
protoc \
|
||||
-Iproto_def \
|
||||
--python_out=. \
|
||||
proto_def/meshtastic/admin.proto \
|
||||
proto_def/meshtastic/apponly.proto \
|
||||
proto_def/meshtastic/atak.proto \
|
||||
proto_def/meshtastic/cannedmessages.proto \
|
||||
proto_def/meshtastic/channel.proto \
|
||||
proto_def/meshtastic/clientonly.proto \
|
||||
proto_def/meshtastic/config.proto \
|
||||
proto_def/meshtastic/connection_status.proto \
|
||||
proto_def/meshtastic/localonly.proto \
|
||||
proto_def/meshtastic/mesh.proto \
|
||||
proto_def/meshtastic/module_config.proto \
|
||||
proto_def/meshtastic/mqtt.proto \
|
||||
proto_def/meshtastic/paxcount.proto \
|
||||
proto_def/meshtastic/portnums.proto \
|
||||
proto_def/meshtastic/remote_hardware.proto \
|
||||
proto_def/meshtastic/rtttl.proto \
|
||||
proto_def/meshtastic/storeforward.proto \
|
||||
proto_def/meshtastic/telemetry.proto \
|
||||
proto_def/meshtastic/xmodem.proto
|
||||
@@ -1,12 +1,40 @@
|
||||
import asyncio
|
||||
import argparse
|
||||
|
||||
from meshview import mqtt_reader
|
||||
from meshview import database
|
||||
from meshview import store
|
||||
from meshview import web
|
||||
from meshview import http
|
||||
|
||||
|
||||
async def main():
|
||||
async def load_database_from_mqtt(topic):
|
||||
async for topic, env in mqtt_reader.get_topic_envelopes(topic):
|
||||
await store.process_envelope(topic, env)
|
||||
|
||||
|
||||
async def main(args):
|
||||
database.init_database(args.database)
|
||||
|
||||
await database.create_tables()
|
||||
async with asyncio.TaskGroup() as tg:
|
||||
tg.create_task(web.run_server())
|
||||
tg.create_task(load_database_from_mqtt(args.topic))
|
||||
tg.create_task(web.run_server(args.bind, args.port, args.tls_cert))
|
||||
if args.acme_challenge:
|
||||
tg.create_task(http.run_server(args.bind, args.acme_challenge))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
||||
parser = argparse.ArgumentParser('meshview')
|
||||
parser.add_argument('--bind', nargs='*', default=['::1'])
|
||||
parser.add_argument('--acme-challenge')
|
||||
parser.add_argument('--port', default=8080, type=int)
|
||||
parser.add_argument('--tls-cert')
|
||||
|
||||
parser.add_argument('--topic', nargs='*', default=['msh/US/bayarea/#'])
|
||||
|
||||
parser.add_argument('--database', default='sqlite+aiosqlite:///packets.db')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
asyncio.run(main(args))
|
||||
@@ -0,0 +1,39 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/admin.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic import channel_pb2 as meshtastic_dot_channel__pb2
|
||||
from meshtastic import config_pb2 as meshtastic_dot_config__pb2
|
||||
from meshtastic import connection_status_pb2 as meshtastic_dot_connection__status__pb2
|
||||
from meshtastic import mesh_pb2 as meshtastic_dot_mesh__pb2
|
||||
from meshtastic import module_config_pb2 as meshtastic_dot_module__config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16meshtastic/admin.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\"meshtastic/connection_status.proto\x1a\x15meshtastic/mesh.proto\x1a\x1emeshtastic/module_config.proto\"\xce\x11\n\x0c\x41\x64minMessage\x12\x1d\n\x13get_channel_request\x18\x01 \x01(\rH\x00\x12\x33\n\x14get_channel_response\x18\x02 \x01(\x0b\x32\x13.meshtastic.ChannelH\x00\x12\x1b\n\x11get_owner_request\x18\x03 \x01(\x08H\x00\x12.\n\x12get_owner_response\x18\x04 \x01(\x0b\x32\x10.meshtastic.UserH\x00\x12\x41\n\x12get_config_request\x18\x05 \x01(\x0e\x32#.meshtastic.AdminMessage.ConfigTypeH\x00\x12\x31\n\x13get_config_response\x18\x06 \x01(\x0b\x32\x12.meshtastic.ConfigH\x00\x12N\n\x19get_module_config_request\x18\x07 \x01(\x0e\x32).meshtastic.AdminMessage.ModuleConfigTypeH\x00\x12>\n\x1aget_module_config_response\x18\x08 \x01(\x0b\x32\x18.meshtastic.ModuleConfigH\x00\x12\x34\n*get_canned_message_module_messages_request\x18\n \x01(\x08H\x00\x12\x35\n+get_canned_message_module_messages_response\x18\x0b \x01(\tH\x00\x12%\n\x1bget_device_metadata_request\x18\x0c \x01(\x08H\x00\x12\x42\n\x1cget_device_metadata_response\x18\r \x01(\x0b\x32\x1a.meshtastic.DeviceMetadataH\x00\x12\x1e\n\x14get_ringtone_request\x18\x0e \x01(\x08H\x00\x12\x1f\n\x15get_ringtone_response\x18\x0f \x01(\tH\x00\x12.\n$get_device_connection_status_request\x18\x10 \x01(\x08H\x00\x12S\n%get_device_connection_status_response\x18\x11 \x01(\x0b\x32\".meshtastic.DeviceConnectionStatusH\x00\x12\x31\n\x0cset_ham_mode\x18\x12 \x01(\x0b\x32\x19.meshtastic.HamParametersH\x00\x12/\n%get_node_remote_hardware_pins_request\x18\x13 \x01(\x08H\x00\x12\\\n&get_node_remote_hardware_pins_response\x18\x14 \x01(\x0b\x32*.meshtastic.NodeRemoteHardwarePinsResponseH\x00\x12 \n\x16\x65nter_dfu_mode_request\x18\x15 \x01(\x08H\x00\x12\x1d\n\x13\x64\x65lete_file_request\x18\x16 \x01(\tH\x00\x12%\n\tset_owner\x18 \x01(\x0b\x32\x10.meshtastic.UserH\x00\x12*\n\x0bset_channel\x18! \x01(\x0b\x32\x13.meshtastic.ChannelH\x00\x12(\n\nset_config\x18\" \x01(\x0b\x32\x12.meshtastic.ConfigH\x00\x12\x35\n\x11set_module_config\x18# \x01(\x0b\x32\x18.meshtastic.ModuleConfigH\x00\x12,\n\"set_canned_message_module_messages\x18$ \x01(\tH\x00\x12\x1e\n\x14set_ringtone_message\x18% \x01(\tH\x00\x12\x1b\n\x11remove_by_nodenum\x18& \x01(\rH\x00\x12\x1b\n\x11set_favorite_node\x18\' \x01(\rH\x00\x12\x1e\n\x14remove_favorite_node\x18( \x01(\rH\x00\x12\x32\n\x12set_fixed_position\x18) \x01(\x0b\x32\x14.meshtastic.PositionH\x00\x12\x1f\n\x15remove_fixed_position\x18* \x01(\x08H\x00\x12\x1d\n\x13\x62\x65gin_edit_settings\x18@ \x01(\x08H\x00\x12\x1e\n\x14\x63ommit_edit_settings\x18\x41 \x01(\x08H\x00\x12\x1c\n\x12reboot_ota_seconds\x18_ \x01(\x05H\x00\x12\x18\n\x0e\x65xit_simulator\x18` \x01(\x08H\x00\x12\x18\n\x0ereboot_seconds\x18\x61 \x01(\x05H\x00\x12\x1a\n\x10shutdown_seconds\x18\x62 \x01(\x05H\x00\x12\x17\n\rfactory_reset\x18\x63 \x01(\x05H\x00\x12\x16\n\x0cnodedb_reset\x18\x64 \x01(\x05H\x00\"\x95\x01\n\nConfigType\x12\x11\n\rDEVICE_CONFIG\x10\x00\x12\x13\n\x0fPOSITION_CONFIG\x10\x01\x12\x10\n\x0cPOWER_CONFIG\x10\x02\x12\x12\n\x0eNETWORK_CONFIG\x10\x03\x12\x12\n\x0e\x44ISPLAY_CONFIG\x10\x04\x12\x0f\n\x0bLORA_CONFIG\x10\x05\x12\x14\n\x10\x42LUETOOTH_CONFIG\x10\x06\"\xbb\x02\n\x10ModuleConfigType\x12\x0f\n\x0bMQTT_CONFIG\x10\x00\x12\x11\n\rSERIAL_CONFIG\x10\x01\x12\x13\n\x0f\x45XTNOTIF_CONFIG\x10\x02\x12\x17\n\x13STOREFORWARD_CONFIG\x10\x03\x12\x14\n\x10RANGETEST_CONFIG\x10\x04\x12\x14\n\x10TELEMETRY_CONFIG\x10\x05\x12\x14\n\x10\x43\x41NNEDMSG_CONFIG\x10\x06\x12\x10\n\x0c\x41UDIO_CONFIG\x10\x07\x12\x19\n\x15REMOTEHARDWARE_CONFIG\x10\x08\x12\x17\n\x13NEIGHBORINFO_CONFIG\x10\t\x12\x1a\n\x16\x41MBIENTLIGHTING_CONFIG\x10\n\x12\x1a\n\x16\x44\x45TECTIONSENSOR_CONFIG\x10\x0b\x12\x15\n\x11PAXCOUNTER_CONFIG\x10\x0c\x42\x11\n\x0fpayload_variant\"[\n\rHamParameters\x12\x11\n\tcall_sign\x18\x01 \x01(\t\x12\x10\n\x08tx_power\x18\x02 \x01(\x05\x12\x11\n\tfrequency\x18\x03 \x01(\x02\x12\x12\n\nshort_name\x18\x04 \x01(\t\"f\n\x1eNodeRemoteHardwarePinsResponse\x12\x44\n\x19node_remote_hardware_pins\x18\x01 \x03(\x0b\x32!.meshtastic.NodeRemoteHardwarePinB`\n\x13\x63om.geeksville.meshB\x0b\x41\x64minProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.admin_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\013AdminProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_ADMINMESSAGE._serialized_start=181
|
||||
_ADMINMESSAGE._serialized_end=2435
|
||||
_ADMINMESSAGE_CONFIGTYPE._serialized_start=1949
|
||||
_ADMINMESSAGE_CONFIGTYPE._serialized_end=2098
|
||||
_ADMINMESSAGE_MODULECONFIGTYPE._serialized_start=2101
|
||||
_ADMINMESSAGE_MODULECONFIGTYPE._serialized_end=2416
|
||||
_HAMPARAMETERS._serialized_start=2437
|
||||
_HAMPARAMETERS._serialized_end=2528
|
||||
_NODEREMOTEHARDWAREPINSRESPONSE._serialized_start=2530
|
||||
_NODEREMOTEHARDWAREPINSRESPONSE._serialized_end=2632
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,28 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/apponly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic import channel_pb2 as meshtastic_dot_channel__pb2
|
||||
from meshtastic import config_pb2 as meshtastic_dot_config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18meshtastic/apponly.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\"o\n\nChannelSet\x12-\n\x08settings\x18\x01 \x03(\x0b\x32\x1b.meshtastic.ChannelSettings\x12\x32\n\x0blora_config\x18\x02 \x01(\x0b\x32\x1d.meshtastic.Config.LoRaConfigBb\n\x13\x63om.geeksville.meshB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.apponly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CHANNELSET._serialized_start=91
|
||||
_CHANNELSET._serialized_end=202
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,40 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/atak.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15meshtastic/atak.proto\x12\nmeshtastic\"\xe6\x01\n\tTAKPacket\x12\x15\n\ris_compressed\x18\x01 \x01(\x08\x12$\n\x07\x63ontact\x18\x02 \x01(\x0b\x32\x13.meshtastic.Contact\x12 \n\x05group\x18\x03 \x01(\x0b\x32\x11.meshtastic.Group\x12\"\n\x06status\x18\x04 \x01(\x0b\x32\x12.meshtastic.Status\x12\x1e\n\x03pli\x18\x05 \x01(\x0b\x32\x0f.meshtastic.PLIH\x00\x12#\n\x04\x63hat\x18\x06 \x01(\x0b\x32\x13.meshtastic.GeoChatH\x00\x42\x11\n\x0fpayload_variant\"2\n\x07GeoChat\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x02to\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x05\n\x03_to\"M\n\x05Group\x12$\n\x04role\x18\x01 \x01(\x0e\x32\x16.meshtastic.MemberRole\x12\x1e\n\x04team\x18\x02 \x01(\x0e\x32\x10.meshtastic.Team\"\x19\n\x06Status\x12\x0f\n\x07\x62\x61ttery\x18\x01 \x01(\r\"4\n\x07\x43ontact\x12\x10\n\x08\x63\x61llsign\x18\x01 \x01(\t\x12\x17\n\x0f\x64\x65vice_callsign\x18\x02 \x01(\t\"_\n\x03PLI\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\r\n\x05speed\x18\x04 \x01(\r\x12\x0e\n\x06\x63ourse\x18\x05 \x01(\r*\xc0\x01\n\x04Team\x12\x14\n\x10Unspecifed_Color\x10\x00\x12\t\n\x05White\x10\x01\x12\n\n\x06Yellow\x10\x02\x12\n\n\x06Orange\x10\x03\x12\x0b\n\x07Magenta\x10\x04\x12\x07\n\x03Red\x10\x05\x12\n\n\x06Maroon\x10\x06\x12\n\n\x06Purple\x10\x07\x12\r\n\tDark_Blue\x10\x08\x12\x08\n\x04\x42lue\x10\t\x12\x08\n\x04\x43yan\x10\n\x12\x08\n\x04Teal\x10\x0b\x12\t\n\x05Green\x10\x0c\x12\x0e\n\nDark_Green\x10\r\x12\t\n\x05\x42rown\x10\x0e*\x7f\n\nMemberRole\x12\x0e\n\nUnspecifed\x10\x00\x12\x0e\n\nTeamMember\x10\x01\x12\x0c\n\x08TeamLead\x10\x02\x12\x06\n\x02HQ\x10\x03\x12\n\n\x06Sniper\x10\x04\x12\t\n\x05Medic\x10\x05\x12\x13\n\x0f\x46orwardObserver\x10\x06\x12\x07\n\x03RTO\x10\x07\x12\x06\n\x02K9\x10\x08\x42_\n\x13\x63om.geeksville.meshB\nATAKProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.atak_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\nATAKProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_TEAM._serialized_start=580
|
||||
_TEAM._serialized_end=772
|
||||
_MEMBERROLE._serialized_start=774
|
||||
_MEMBERROLE._serialized_end=901
|
||||
_TAKPACKET._serialized_start=38
|
||||
_TAKPACKET._serialized_end=268
|
||||
_GEOCHAT._serialized_start=270
|
||||
_GEOCHAT._serialized_end=320
|
||||
_GROUP._serialized_start=322
|
||||
_GROUP._serialized_end=399
|
||||
_STATUS._serialized_start=401
|
||||
_STATUS._serialized_end=426
|
||||
_CONTACT._serialized_start=428
|
||||
_CONTACT._serialized_end=480
|
||||
_PLI._serialized_start=482
|
||||
_PLI._serialized_end=577
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,26 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/cannedmessages.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmeshtastic/cannedmessages.proto\x12\nmeshtastic\"-\n\x19\x43\x61nnedMessageModuleConfig\x12\x10\n\x08messages\x18\x01 \x01(\tBn\n\x13\x63om.geeksville.meshB\x19\x43\x61nnedMessageConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.cannedmessages_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\031CannedMessageConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CANNEDMESSAGEMODULECONFIG._serialized_start=47
|
||||
_CANNEDMESSAGEMODULECONFIG._serialized_end=92
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,34 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/channel.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18meshtastic/channel.proto\x12\nmeshtastic\"\xb8\x01\n\x0f\x43hannelSettings\x12\x17\n\x0b\x63hannel_num\x18\x01 \x01(\rB\x02\x18\x01\x12\x0b\n\x03psk\x18\x02 \x01(\x0c\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\n\n\x02id\x18\x04 \x01(\x07\x12\x16\n\x0euplink_enabled\x18\x05 \x01(\x08\x12\x18\n\x10\x64ownlink_enabled\x18\x06 \x01(\x08\x12\x33\n\x0fmodule_settings\x18\x07 \x01(\x0b\x32\x1a.meshtastic.ModuleSettings\"E\n\x0eModuleSettings\x12\x1a\n\x12position_precision\x18\x01 \x01(\r\x12\x17\n\x0fis_client_muted\x18\x02 \x01(\x08\"\xa1\x01\n\x07\x43hannel\x12\r\n\x05index\x18\x01 \x01(\x05\x12-\n\x08settings\x18\x02 \x01(\x0b\x32\x1b.meshtastic.ChannelSettings\x12&\n\x04role\x18\x03 \x01(\x0e\x32\x18.meshtastic.Channel.Role\"0\n\x04Role\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07PRIMARY\x10\x01\x12\r\n\tSECONDARY\x10\x02\x42\x62\n\x13\x63om.geeksville.meshB\rChannelProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.channel_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\rChannelProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CHANNELSETTINGS.fields_by_name['channel_num']._options = None
|
||||
_CHANNELSETTINGS.fields_by_name['channel_num']._serialized_options = b'\030\001'
|
||||
_CHANNELSETTINGS._serialized_start=41
|
||||
_CHANNELSETTINGS._serialized_end=225
|
||||
_MODULESETTINGS._serialized_start=227
|
||||
_MODULESETTINGS._serialized_end=296
|
||||
_CHANNEL._serialized_start=299
|
||||
_CHANNEL._serialized_end=460
|
||||
_CHANNEL_ROLE._serialized_start=412
|
||||
_CHANNEL_ROLE._serialized_end=460
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,27 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/clientonly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic import localonly_pb2 as meshtastic_dot_localonly__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bmeshtastic/clientonly.proto\x12\nmeshtastic\x1a\x1ameshtastic/localonly.proto\"\x8d\x02\n\rDeviceProfile\x12\x16\n\tlong_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nshort_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63hannel_url\x18\x03 \x01(\tH\x02\x88\x01\x01\x12,\n\x06\x63onfig\x18\x04 \x01(\x0b\x32\x17.meshtastic.LocalConfigH\x03\x88\x01\x01\x12\x39\n\rmodule_config\x18\x05 \x01(\x0b\x32\x1d.meshtastic.LocalModuleConfigH\x04\x88\x01\x01\x42\x0c\n\n_long_nameB\r\n\x0b_short_nameB\x0e\n\x0c_channel_urlB\t\n\x07_configB\x10\n\x0e_module_configBe\n\x13\x63om.geeksville.meshB\x10\x43lientOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.clientonly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\020ClientOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_DEVICEPROFILE._serialized_start=72
|
||||
_DEVICEPROFILE._serialized_end=341
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,70 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/config.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17meshtastic/config.proto\x12\nmeshtastic\"\xc2\x1f\n\x06\x43onfig\x12\x31\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x1f.meshtastic.Config.DeviceConfigH\x00\x12\x35\n\x08position\x18\x02 \x01(\x0b\x32!.meshtastic.Config.PositionConfigH\x00\x12/\n\x05power\x18\x03 \x01(\x0b\x32\x1e.meshtastic.Config.PowerConfigH\x00\x12\x33\n\x07network\x18\x04 \x01(\x0b\x32 .meshtastic.Config.NetworkConfigH\x00\x12\x33\n\x07\x64isplay\x18\x05 \x01(\x0b\x32 .meshtastic.Config.DisplayConfigH\x00\x12-\n\x04lora\x18\x06 \x01(\x0b\x32\x1d.meshtastic.Config.LoRaConfigH\x00\x12\x37\n\tbluetooth\x18\x07 \x01(\x0b\x32\".meshtastic.Config.BluetoothConfigH\x00\x1a\x91\x05\n\x0c\x44\x65viceConfig\x12\x32\n\x04role\x18\x01 \x01(\x0e\x32$.meshtastic.Config.DeviceConfig.Role\x12\x16\n\x0eserial_enabled\x18\x02 \x01(\x08\x12\x19\n\x11\x64\x65\x62ug_log_enabled\x18\x03 \x01(\x08\x12\x13\n\x0b\x62utton_gpio\x18\x04 \x01(\r\x12\x13\n\x0b\x62uzzer_gpio\x18\x05 \x01(\r\x12I\n\x10rebroadcast_mode\x18\x06 \x01(\x0e\x32/.meshtastic.Config.DeviceConfig.RebroadcastMode\x12 \n\x18node_info_broadcast_secs\x18\x07 \x01(\r\x12\"\n\x1a\x64ouble_tap_as_button_press\x18\x08 \x01(\x08\x12\x12\n\nis_managed\x18\t \x01(\x08\x12\x1c\n\x14\x64isable_triple_click\x18\n \x01(\x08\x12\r\n\x05tzdef\x18\x0b \x01(\t\x12\x1e\n\x16led_heartbeat_disabled\x18\x0c \x01(\x08\"\xaa\x01\n\x04Role\x12\n\n\x06\x43LIENT\x10\x00\x12\x0f\n\x0b\x43LIENT_MUTE\x10\x01\x12\n\n\x06ROUTER\x10\x02\x12\x11\n\rROUTER_CLIENT\x10\x03\x12\x0c\n\x08REPEATER\x10\x04\x12\x0b\n\x07TRACKER\x10\x05\x12\n\n\x06SENSOR\x10\x06\x12\x07\n\x03TAK\x10\x07\x12\x11\n\rCLIENT_HIDDEN\x10\x08\x12\x12\n\x0eLOST_AND_FOUND\x10\t\x12\x0f\n\x0bTAK_TRACKER\x10\n\"Q\n\x0fRebroadcastMode\x12\x07\n\x03\x41LL\x10\x00\x12\x15\n\x11\x41LL_SKIP_DECODING\x10\x01\x12\x0e\n\nLOCAL_ONLY\x10\x02\x12\x0e\n\nKNOWN_ONLY\x10\x03\x1a\x91\x05\n\x0ePositionConfig\x12\x1f\n\x17position_broadcast_secs\x18\x01 \x01(\r\x12(\n position_broadcast_smart_enabled\x18\x02 \x01(\x08\x12\x16\n\x0e\x66ixed_position\x18\x03 \x01(\x08\x12\x17\n\x0bgps_enabled\x18\x04 \x01(\x08\x42\x02\x18\x01\x12\x1b\n\x13gps_update_interval\x18\x05 \x01(\r\x12\x1c\n\x10gps_attempt_time\x18\x06 \x01(\rB\x02\x18\x01\x12\x16\n\x0eposition_flags\x18\x07 \x01(\r\x12\x0f\n\x07rx_gpio\x18\x08 \x01(\r\x12\x0f\n\x07tx_gpio\x18\t \x01(\r\x12(\n broadcast_smart_minimum_distance\x18\n \x01(\r\x12-\n%broadcast_smart_minimum_interval_secs\x18\x0b \x01(\r\x12\x13\n\x0bgps_en_gpio\x18\x0c \x01(\r\x12;\n\x08gps_mode\x18\r \x01(\x0e\x32).meshtastic.Config.PositionConfig.GpsMode\"\xab\x01\n\rPositionFlags\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x41LTITUDE\x10\x01\x12\x10\n\x0c\x41LTITUDE_MSL\x10\x02\x12\x16\n\x12GEOIDAL_SEPARATION\x10\x04\x12\x07\n\x03\x44OP\x10\x08\x12\t\n\x05HVDOP\x10\x10\x12\r\n\tSATINVIEW\x10 \x12\n\n\x06SEQ_NO\x10@\x12\x0e\n\tTIMESTAMP\x10\x80\x01\x12\x0c\n\x07HEADING\x10\x80\x02\x12\n\n\x05SPEED\x10\x80\x04\"5\n\x07GpsMode\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07\x45NABLED\x10\x01\x12\x0f\n\x0bNOT_PRESENT\x10\x02\x1a\xea\x01\n\x0bPowerConfig\x12\x17\n\x0fis_power_saving\x18\x01 \x01(\x08\x12&\n\x1eon_battery_shutdown_after_secs\x18\x02 \x01(\r\x12\x1f\n\x17\x61\x64\x63_multiplier_override\x18\x03 \x01(\x02\x12\x1b\n\x13wait_bluetooth_secs\x18\x04 \x01(\r\x12\x10\n\x08sds_secs\x18\x06 \x01(\r\x12\x0f\n\x07ls_secs\x18\x07 \x01(\r\x12\x15\n\rmin_wake_secs\x18\x08 \x01(\r\x12\"\n\x1a\x64\x65vice_battery_ina_address\x18\t \x01(\r\x1a\xfe\x02\n\rNetworkConfig\x12\x14\n\x0cwifi_enabled\x18\x01 \x01(\x08\x12\x11\n\twifi_ssid\x18\x03 \x01(\t\x12\x10\n\x08wifi_psk\x18\x04 \x01(\t\x12\x12\n\nntp_server\x18\x05 \x01(\t\x12\x13\n\x0b\x65th_enabled\x18\x06 \x01(\x08\x12\x42\n\x0c\x61\x64\x64ress_mode\x18\x07 \x01(\x0e\x32,.meshtastic.Config.NetworkConfig.AddressMode\x12@\n\x0bipv4_config\x18\x08 \x01(\x0b\x32+.meshtastic.Config.NetworkConfig.IpV4Config\x12\x16\n\x0ersyslog_server\x18\t \x01(\t\x1a\x46\n\nIpV4Config\x12\n\n\x02ip\x18\x01 \x01(\x07\x12\x0f\n\x07gateway\x18\x02 \x01(\x07\x12\x0e\n\x06subnet\x18\x03 \x01(\x07\x12\x0b\n\x03\x64ns\x18\x04 \x01(\x07\"#\n\x0b\x41\x64\x64ressMode\x12\x08\n\x04\x44HCP\x10\x00\x12\n\n\x06STATIC\x10\x01\x1a\xbe\x05\n\rDisplayConfig\x12\x16\n\x0escreen_on_secs\x18\x01 \x01(\r\x12H\n\ngps_format\x18\x02 \x01(\x0e\x32\x34.meshtastic.Config.DisplayConfig.GpsCoordinateFormat\x12!\n\x19\x61uto_screen_carousel_secs\x18\x03 \x01(\r\x12\x19\n\x11\x63ompass_north_top\x18\x04 \x01(\x08\x12\x13\n\x0b\x66lip_screen\x18\x05 \x01(\x08\x12<\n\x05units\x18\x06 \x01(\x0e\x32-.meshtastic.Config.DisplayConfig.DisplayUnits\x12\x37\n\x04oled\x18\x07 \x01(\x0e\x32).meshtastic.Config.DisplayConfig.OledType\x12\x41\n\x0b\x64isplaymode\x18\x08 \x01(\x0e\x32,.meshtastic.Config.DisplayConfig.DisplayMode\x12\x14\n\x0cheading_bold\x18\t \x01(\x08\x12\x1d\n\x15wake_on_tap_or_motion\x18\n \x01(\x08\"M\n\x13GpsCoordinateFormat\x12\x07\n\x03\x44\x45\x43\x10\x00\x12\x07\n\x03\x44MS\x10\x01\x12\x07\n\x03Line truncated
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.config_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\014ConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_enabled']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_enabled']._serialized_options = b'\030\001'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_attempt_time']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_attempt_time']._serialized_options = b'\030\001'
|
||||
_CONFIG._serialized_start=40
|
||||
_CONFIG._serialized_end=4074
|
||||
_CONFIG_DEVICECONFIG._serialized_start=416
|
||||
_CONFIG_DEVICECONFIG._serialized_end=1073
|
||||
_CONFIG_DEVICECONFIG_ROLE._serialized_start=820
|
||||
_CONFIG_DEVICECONFIG_ROLE._serialized_end=990
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE._serialized_start=992
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE._serialized_end=1073
|
||||
_CONFIG_POSITIONCONFIG._serialized_start=1076
|
||||
_CONFIG_POSITIONCONFIG._serialized_end=1733
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS._serialized_start=1507
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS._serialized_end=1678
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE._serialized_start=1680
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE._serialized_end=1733
|
||||
_CONFIG_POWERCONFIG._serialized_start=1736
|
||||
_CONFIG_POWERCONFIG._serialized_end=1970
|
||||
_CONFIG_NETWORKCONFIG._serialized_start=1973
|
||||
_CONFIG_NETWORKCONFIG._serialized_end=2355
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG._serialized_start=2248
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG._serialized_end=2318
|
||||
_CONFIG_NETWORKCONFIG_ADDRESSMODE._serialized_start=2320
|
||||
_CONFIG_NETWORKCONFIG_ADDRESSMODE._serialized_end=2355
|
||||
_CONFIG_DISPLAYCONFIG._serialized_start=2358
|
||||
_CONFIG_DISPLAYCONFIG._serialized_end=3060
|
||||
_CONFIG_DISPLAYCONFIG_GPSCOORDINATEFORMAT._serialized_start=2795
|
||||
_CONFIG_DISPLAYCONFIG_GPSCOORDINATEFORMAT._serialized_end=2872
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYUNITS._serialized_start=2874
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYUNITS._serialized_end=2914
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE._serialized_start=2916
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE._serialized_end=2993
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE._serialized_start=2995
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE._serialized_end=3060
|
||||
_CONFIG_LORACONFIG._serialized_start=3063
|
||||
_CONFIG_LORACONFIG._serialized_end=3879
|
||||
_CONFIG_LORACONFIG_REGIONCODE._serialized_start=3523
|
||||
_CONFIG_LORACONFIG_REGIONCODE._serialized_end=3728
|
||||
_CONFIG_LORACONFIG_MODEMPRESET._serialized_start=3731
|
||||
_CONFIG_LORACONFIG_MODEMPRESET._serialized_end=3879
|
||||
_CONFIG_BLUETOOTHCONFIG._serialized_start=3882
|
||||
_CONFIG_BLUETOOTHCONFIG._serialized_end=4055
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE._serialized_start=3999
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE._serialized_end=4055
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,36 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/connection_status.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"meshtastic/connection_status.proto\x12\nmeshtastic\"\xb1\x02\n\x16\x44\x65viceConnectionStatus\x12\x33\n\x04wifi\x18\x01 \x01(\x0b\x32 .meshtastic.WifiConnectionStatusH\x00\x88\x01\x01\x12;\n\x08\x65thernet\x18\x02 \x01(\x0b\x32$.meshtastic.EthernetConnectionStatusH\x01\x88\x01\x01\x12=\n\tbluetooth\x18\x03 \x01(\x0b\x32%.meshtastic.BluetoothConnectionStatusH\x02\x88\x01\x01\x12\x37\n\x06serial\x18\x04 \x01(\x0b\x32\".meshtastic.SerialConnectionStatusH\x03\x88\x01\x01\x42\x07\n\x05_wifiB\x0b\n\t_ethernetB\x0c\n\n_bluetoothB\t\n\x07_serial\"g\n\x14WifiConnectionStatus\x12\x33\n\x06status\x18\x01 \x01(\x0b\x32#.meshtastic.NetworkConnectionStatus\x12\x0c\n\x04ssid\x18\x02 \x01(\t\x12\x0c\n\x04rssi\x18\x03 \x01(\x05\"O\n\x18\x45thernetConnectionStatus\x12\x33\n\x06status\x18\x01 \x01(\x0b\x32#.meshtastic.NetworkConnectionStatus\"{\n\x17NetworkConnectionStatus\x12\x12\n\nip_address\x18\x01 \x01(\x07\x12\x14\n\x0cis_connected\x18\x02 \x01(\x08\x12\x19\n\x11is_mqtt_connected\x18\x03 \x01(\x08\x12\x1b\n\x13is_syslog_connected\x18\x04 \x01(\x08\"L\n\x19\x42luetoothConnectionStatus\x12\x0b\n\x03pin\x18\x01 \x01(\r\x12\x0c\n\x04rssi\x18\x02 \x01(\x05\x12\x14\n\x0cis_connected\x18\x03 \x01(\x08\"<\n\x16SerialConnectionStatus\x12\x0c\n\x04\x62\x61ud\x18\x01 \x01(\r\x12\x14\n\x0cis_connected\x18\x02 \x01(\x08\x42\x65\n\x13\x63om.geeksville.meshB\x10\x43onnStatusProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.connection_status_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\020ConnStatusProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_DEVICECONNECTIONSTATUS._serialized_start=51
|
||||
_DEVICECONNECTIONSTATUS._serialized_end=356
|
||||
_WIFICONNECTIONSTATUS._serialized_start=358
|
||||
_WIFICONNECTIONSTATUS._serialized_end=461
|
||||
_ETHERNETCONNECTIONSTATUS._serialized_start=463
|
||||
_ETHERNETCONNECTIONSTATUS._serialized_end=542
|
||||
_NETWORKCONNECTIONSTATUS._serialized_start=544
|
||||
_NETWORKCONNECTIONSTATUS._serialized_end=667
|
||||
_BLUETOOTHCONNECTIONSTATUS._serialized_start=669
|
||||
_BLUETOOTHCONNECTIONSTATUS._serialized_end=745
|
||||
_SERIALCONNECTIONSTATUS._serialized_start=747
|
||||
_SERIALCONNECTIONSTATUS._serialized_end=807
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,30 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/localonly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic import config_pb2 as meshtastic_dot_config__pb2
|
||||
from meshtastic import module_config_pb2 as meshtastic_dot_module__config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ameshtastic/localonly.proto\x12\nmeshtastic\x1a\x17meshtastic/config.proto\x1a\x1emeshtastic/module_config.proto\"\xfd\x02\n\x0bLocalConfig\x12/\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x1f.meshtastic.Config.DeviceConfig\x12\x33\n\x08position\x18\x02 \x01(\x0b\x32!.meshtastic.Config.PositionConfig\x12-\n\x05power\x18\x03 \x01(\x0b\x32\x1e.meshtastic.Config.PowerConfig\x12\x31\n\x07network\x18\x04 \x01(\x0b\x32 .meshtastic.Config.NetworkConfig\x12\x31\n\x07\x64isplay\x18\x05 \x01(\x0b\x32 .meshtastic.Config.DisplayConfig\x12+\n\x04lora\x18\x06 \x01(\x0b\x32\x1d.meshtastic.Config.LoRaConfig\x12\x35\n\tbluetooth\x18\x07 \x01(\x0b\x32\".meshtastic.Config.BluetoothConfig\x12\x0f\n\x07version\x18\x08 \x01(\r\"\xfb\x06\n\x11LocalModuleConfig\x12\x31\n\x04mqtt\x18\x01 \x01(\x0b\x32#.meshtastic.ModuleConfig.MQTTConfig\x12\x35\n\x06serial\x18\x02 \x01(\x0b\x32%.meshtastic.ModuleConfig.SerialConfig\x12R\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32\x33.meshtastic.ModuleConfig.ExternalNotificationConfig\x12\x42\n\rstore_forward\x18\x04 \x01(\x0b\x32+.meshtastic.ModuleConfig.StoreForwardConfig\x12<\n\nrange_test\x18\x05 \x01(\x0b\x32(.meshtastic.ModuleConfig.RangeTestConfig\x12;\n\ttelemetry\x18\x06 \x01(\x0b\x32(.meshtastic.ModuleConfig.TelemetryConfig\x12\x44\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32,.meshtastic.ModuleConfig.CannedMessageConfig\x12\x33\n\x05\x61udio\x18\t \x01(\x0b\x32$.meshtastic.ModuleConfig.AudioConfig\x12\x46\n\x0fremote_hardware\x18\n \x01(\x0b\x32-.meshtastic.ModuleConfig.RemoteHardwareConfig\x12\x42\n\rneighbor_info\x18\x0b \x01(\x0b\x32+.meshtastic.ModuleConfig.NeighborInfoConfig\x12H\n\x10\x61mbient_lighting\x18\x0c \x01(\x0b\x32..meshtastic.ModuleConfig.AmbientLightingConfig\x12H\n\x10\x64\x65tection_sensor\x18\r \x01(\x0b\x32..meshtastic.ModuleConfig.DetectionSensorConfig\x12=\n\npaxcounter\x18\x0e \x01(\x0b\x32).meshtastic.ModuleConfig.PaxcounterConfig\x12\x0f\n\x07version\x18\x08 \x01(\rBd\n\x13\x63om.geeksville.meshB\x0fLocalOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.localonly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\017LocalOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_LOCALCONFIG._serialized_start=100
|
||||
_LOCALCONFIG._serialized_end=481
|
||||
_LOCALMODULECONFIG._serialized_start=484
|
||||
_LOCALMODULECONFIG._serialized_end=1375
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,92 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/mesh.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic import channel_pb2 as meshtastic_dot_channel__pb2
|
||||
from meshtastic import config_pb2 as meshtastic_dot_config__pb2
|
||||
from meshtastic import module_config_pb2 as meshtastic_dot_module__config__pb2
|
||||
from meshtastic import portnums_pb2 as meshtastic_dot_portnums__pb2
|
||||
from meshtastic import telemetry_pb2 as meshtastic_dot_telemetry__pb2
|
||||
from meshtastic import xmodem_pb2 as meshtastic_dot_xmodem__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15meshtastic/mesh.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\x1emeshtastic/module_config.proto\x1a\x19meshtastic/portnums.proto\x1a\x1ameshtastic/telemetry.proto\x1a\x17meshtastic/xmodem.proto\"\xe5\x05\n\x08Position\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x0c\n\x04time\x18\x04 \x01(\x07\x12\x37\n\x0flocation_source\x18\x05 \x01(\x0e\x32\x1e.meshtastic.Position.LocSource\x12\x37\n\x0f\x61ltitude_source\x18\x06 \x01(\x0e\x32\x1e.meshtastic.Position.AltSource\x12\x11\n\ttimestamp\x18\x07 \x01(\x07\x12\x1f\n\x17timestamp_millis_adjust\x18\x08 \x01(\x05\x12\x14\n\x0c\x61ltitude_hae\x18\t \x01(\x11\x12#\n\x1b\x61ltitude_geoidal_separation\x18\n \x01(\x11\x12\x0c\n\x04PDOP\x18\x0b \x01(\r\x12\x0c\n\x04HDOP\x18\x0c \x01(\r\x12\x0c\n\x04VDOP\x18\r \x01(\r\x12\x14\n\x0cgps_accuracy\x18\x0e \x01(\r\x12\x14\n\x0cground_speed\x18\x0f \x01(\r\x12\x14\n\x0cground_track\x18\x10 \x01(\r\x12\x13\n\x0b\x66ix_quality\x18\x11 \x01(\r\x12\x10\n\x08\x66ix_type\x18\x12 \x01(\r\x12\x14\n\x0csats_in_view\x18\x13 \x01(\r\x12\x11\n\tsensor_id\x18\x14 \x01(\r\x12\x13\n\x0bnext_update\x18\x15 \x01(\r\x12\x12\n\nseq_number\x18\x16 \x01(\r\x12\x16\n\x0eprecision_bits\x18\x17 \x01(\r\"N\n\tLocSource\x12\r\n\tLOC_UNSET\x10\x00\x12\x0e\n\nLOC_MANUAL\x10\x01\x12\x10\n\x0cLOC_INTERNAL\x10\x02\x12\x10\n\x0cLOC_EXTERNAL\x10\x03\"b\n\tAltSource\x12\r\n\tALT_UNSET\x10\x00\x12\x0e\n\nALT_MANUAL\x10\x01\x12\x10\n\x0c\x41LT_INTERNAL\x10\x02\x12\x10\n\x0c\x41LT_EXTERNAL\x10\x03\x12\x12\n\x0e\x41LT_BAROMETRIC\x10\x04\"\xc4\x01\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x13\n\x07macaddr\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12+\n\x08hw_model\x18\x05 \x01(\x0e\x32\x19.meshtastic.HardwareModel\x12\x13\n\x0bis_licensed\x18\x06 \x01(\x08\x12\x32\n\x04role\x18\x07 \x01(\x0e\x32$.meshtastic.Config.DeviceConfig.Role\"\x1f\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x01 \x03(\x07\"\xfc\x02\n\x07Routing\x12\x33\n\rroute_request\x18\x01 \x01(\x0b\x32\x1a.meshtastic.RouteDiscoveryH\x00\x12\x31\n\x0broute_reply\x18\x02 \x01(\x0b\x32\x1a.meshtastic.RouteDiscoveryH\x00\x12\x31\n\x0c\x65rror_reason\x18\x03 \x01(\x0e\x32\x19.meshtastic.Routing.ErrorH\x00\"\xca\x01\n\x05\x45rror\x12\x08\n\x04NONE\x10\x00\x12\x0c\n\x08NO_ROUTE\x10\x01\x12\x0b\n\x07GOT_NAK\x10\x02\x12\x0b\n\x07TIMEOUT\x10\x03\x12\x10\n\x0cNO_INTERFACE\x10\x04\x12\x12\n\x0eMAX_RETRANSMIT\x10\x05\x12\x0e\n\nNO_CHANNEL\x10\x06\x12\r\n\tTOO_LARGE\x10\x07\x12\x0f\n\x0bNO_RESPONSE\x10\x08\x12\x14\n\x10\x44UTY_CYCLE_LIMIT\x10\t\x12\x0f\n\x0b\x42\x41\x44_REQUEST\x10 \x12\x12\n\x0eNOT_AUTHORIZED\x10!B\t\n\x07variant\"\xa7\x01\n\x04\x44\x61ta\x12$\n\x07portnum\x18\x01 \x01(\x0e\x32\x13.meshtastic.PortNum\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x15\n\rwant_response\x18\x03 \x01(\x08\x12\x0c\n\x04\x64\x65st\x18\x04 \x01(\x07\x12\x0e\n\x06source\x18\x05 \x01(\x07\x12\x12\n\nrequest_id\x18\x06 \x01(\x07\x12\x10\n\x08reply_id\x18\x07 \x01(\x07\x12\r\n\x05\x65moji\x18\x08 \x01(\x07\"\x93\x01\n\x08Waypoint\x12\n\n\x02id\x18\x01 \x01(\r\x12\x12\n\nlatitude_i\x18\x02 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x03 \x01(\x0f\x12\x0e\n\x06\x65xpire\x18\x04 \x01(\r\x12\x11\n\tlocked_to\x18\x05 \x01(\r\x12\x0c\n\x04name\x18\x06 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x0c\n\x04icon\x18\x08 \x01(\x07\"l\n\x16MqttClientProxyMessage\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x0e\n\x04\x64\x61ta\x18\x02 \x01(\x0cH\x00\x12\x0e\n\x04text\x18\x03 \x01(\tH\x00\x12\x10\n\x08retained\x18\x04 \x01(\x08\x42\x11\n\x0fpayload_variant\"\x95\x04\n\nMeshPacket\x12\x0c\n\x04\x66rom\x18\x01 \x01(\x07\x12\n\n\x02to\x18\x02 \x01(\x07\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\r\x12#\n\x07\x64\x65\x63oded\x18\x04 \x01(\x0b\x32\x10.meshtastic.DataH\x00\x12\x13\n\tencrypted\x18\x05 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\x07\x12\x0f\n\x07rx_time\x18\x07 \x01(\x07\x12\x0e\n\x06rx_snr\x18\x08 \x01(\x02\x12\x11\n\thop_limit\x18\t \x01(\r\x12\x10\n\x08want_ack\x18\n \x01(\x08\x12\x31\n\x08priority\x18\x0b \x01(\x0e\x32\x1f.meshtastic.MeshPacket.Priority\x12\x0f\n\x07rx_rssi\x18\x0c \x01(\x05\x12\x33\n\x07\x64\x65layed\x18\r \x01(\x0e\x32\x1e.meshtastic.MeshPacket.DelayedB\x02\x18\x01\x12\x10\n\x08via_mqtt\x18\x0e \x01(\x08\x12\x11\n\thop_start\x18\x0f \x01(\r\"[\n\x08Priority\x12\t\n\x05UNSET\x10\x00\x12\x07\n\x03MIN\x10\x01\x12\x0e\n\nBACKGROUND\x10\n\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10@\x12\x0c\n\x08RELIABLE\x10\x46\x12\x07\n\x03\x41\x43K\x10x\x12\x07\n\x03MAX\x10\x7f\"B\n\x07\x44\x65layed\x12\x0c\n\x08NO_DELAY\x10\x00\x12\x15\n\x11\x44\x45LAYED_BROADCAST\x10\x01\x12\x12\n\x0e\x44\x45LAYED_DIRECT\x10\x02\x42\x11\n\x0fpayload_variant\"\xfe\x01\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1e\n\x04user\x18\x02 \x01(\x0b\x32\x10.meshtastic.User\x12&\n\x08position\x18\x03 \x0Line truncated
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.mesh_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\nMeshProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_USER.fields_by_name['macaddr']._options = None
|
||||
_USER.fields_by_name['macaddr']._serialized_options = b'\030\001'
|
||||
_MESHPACKET.fields_by_name['delayed']._options = None
|
||||
_MESHPACKET.fields_by_name['delayed']._serialized_options = b'\030\001'
|
||||
_HARDWAREMODEL._serialized_start=4737
|
||||
_HARDWAREMODEL._serialized_end=5819
|
||||
_CONSTANTS._serialized_start=5821
|
||||
_CONSTANTS._serialized_end=5865
|
||||
_CRITICALERRORCODE._serialized_start=5868
|
||||
_CRITICALERRORCODE._serialized_end=6106
|
||||
_POSITION._serialized_start=201
|
||||
_POSITION._serialized_end=942
|
||||
_POSITION_LOCSOURCE._serialized_start=764
|
||||
_POSITION_LOCSOURCE._serialized_end=842
|
||||
_POSITION_ALTSOURCE._serialized_start=844
|
||||
_POSITION_ALTSOURCE._serialized_end=942
|
||||
_USER._serialized_start=945
|
||||
_USER._serialized_end=1141
|
||||
_ROUTEDISCOVERY._serialized_start=1143
|
||||
_ROUTEDISCOVERY._serialized_end=1174
|
||||
_ROUTING._serialized_start=1177
|
||||
_ROUTING._serialized_end=1557
|
||||
_ROUTING_ERROR._serialized_start=1344
|
||||
_ROUTING_ERROR._serialized_end=1546
|
||||
_DATA._serialized_start=1560
|
||||
_DATA._serialized_end=1727
|
||||
_WAYPOINT._serialized_start=1730
|
||||
_WAYPOINT._serialized_end=1877
|
||||
_MQTTCLIENTPROXYMESSAGE._serialized_start=1879
|
||||
_MQTTCLIENTPROXYMESSAGE._serialized_end=1987
|
||||
_MESHPACKET._serialized_start=1990
|
||||
_MESHPACKET._serialized_end=2523
|
||||
_MESHPACKET_PRIORITY._serialized_start=2345
|
||||
_MESHPACKET_PRIORITY._serialized_end=2436
|
||||
_MESHPACKET_DELAYED._serialized_start=2438
|
||||
_MESHPACKET_DELAYED._serialized_end=2504
|
||||
_NODEINFO._serialized_start=2526
|
||||
_NODEINFO._serialized_end=2780
|
||||
_MYNODEINFO._serialized_start=2782
|
||||
_MYNODEINFO._serialized_end=2862
|
||||
_LOGRECORD._serialized_start=2865
|
||||
_LOGRECORD._serialized_end=3057
|
||||
_LOGRECORD_LEVEL._serialized_start=2969
|
||||
_LOGRECORD_LEVEL._serialized_end=3057
|
||||
_QUEUESTATUS._serialized_start=3059
|
||||
_QUEUESTATUS._serialized_end=3139
|
||||
_FROMRADIO._serialized_start=3142
|
||||
_FROMRADIO._serialized_end=3745
|
||||
_TORADIO._serialized_start=3748
|
||||
_TORADIO._serialized_end=4024
|
||||
_COMPRESSED._serialized_start=4026
|
||||
_COMPRESSED._serialized_end=4090
|
||||
_NEIGHBORINFO._serialized_start=4093
|
||||
_NEIGHBORINFO._serialized_end=4228
|
||||
_NEIGHBOR._serialized_start=4230
|
||||
_NEIGHBOR._serialized_end=4330
|
||||
_DEVICEMETADATA._serialized_start=4333
|
||||
_DEVICEMETADATA._serialized_end=4634
|
||||
_HEARTBEAT._serialized_start=4636
|
||||
_HEARTBEAT._serialized_end=4647
|
||||
_NODEREMOTEHARDWAREPIN._serialized_start=4649
|
||||
_NODEREMOTEHARDWAREPIN._serialized_end=4734
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,66 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/module_config.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emeshtastic/module_config.proto\x12\nmeshtastic\"\xd3\"\n\x0cModuleConfig\x12\x33\n\x04mqtt\x18\x01 \x01(\x0b\x32#.meshtastic.ModuleConfig.MQTTConfigH\x00\x12\x37\n\x06serial\x18\x02 \x01(\x0b\x32%.meshtastic.ModuleConfig.SerialConfigH\x00\x12T\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32\x33.meshtastic.ModuleConfig.ExternalNotificationConfigH\x00\x12\x44\n\rstore_forward\x18\x04 \x01(\x0b\x32+.meshtastic.ModuleConfig.StoreForwardConfigH\x00\x12>\n\nrange_test\x18\x05 \x01(\x0b\x32(.meshtastic.ModuleConfig.RangeTestConfigH\x00\x12=\n\ttelemetry\x18\x06 \x01(\x0b\x32(.meshtastic.ModuleConfig.TelemetryConfigH\x00\x12\x46\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32,.meshtastic.ModuleConfig.CannedMessageConfigH\x00\x12\x35\n\x05\x61udio\x18\x08 \x01(\x0b\x32$.meshtastic.ModuleConfig.AudioConfigH\x00\x12H\n\x0fremote_hardware\x18\t \x01(\x0b\x32-.meshtastic.ModuleConfig.RemoteHardwareConfigH\x00\x12\x44\n\rneighbor_info\x18\n \x01(\x0b\x32+.meshtastic.ModuleConfig.NeighborInfoConfigH\x00\x12J\n\x10\x61mbient_lighting\x18\x0b \x01(\x0b\x32..meshtastic.ModuleConfig.AmbientLightingConfigH\x00\x12J\n\x10\x64\x65tection_sensor\x18\x0c \x01(\x0b\x32..meshtastic.ModuleConfig.DetectionSensorConfigH\x00\x12?\n\npaxcounter\x18\r \x01(\x0b\x32).meshtastic.ModuleConfig.PaxcounterConfigH\x00\x1a\xb0\x02\n\nMQTTConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x10\n\x08password\x18\x04 \x01(\t\x12\x1a\n\x12\x65ncryption_enabled\x18\x05 \x01(\x08\x12\x14\n\x0cjson_enabled\x18\x06 \x01(\x08\x12\x13\n\x0btls_enabled\x18\x07 \x01(\x08\x12\x0c\n\x04root\x18\x08 \x01(\t\x12\x1f\n\x17proxy_to_client_enabled\x18\t \x01(\x08\x12\x1d\n\x15map_reporting_enabled\x18\n \x01(\x08\x12G\n\x13map_report_settings\x18\x0b \x01(\x0b\x32*.meshtastic.ModuleConfig.MapReportSettings\x1aN\n\x11MapReportSettings\x12\x1d\n\x15publish_interval_secs\x18\x01 \x01(\r\x12\x1a\n\x12position_precision\x18\x02 \x01(\r\x1a\x82\x01\n\x14RemoteHardwareConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\"\n\x1a\x61llow_undefined_pin_access\x18\x02 \x01(\x08\x12\x35\n\x0e\x61vailable_pins\x18\x03 \x03(\x0b\x32\x1d.meshtastic.RemoteHardwarePin\x1a>\n\x12NeighborInfoConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x17\n\x0fupdate_interval\x18\x02 \x01(\r\x1a\xd2\x01\n\x15\x44\x65tectionSensorConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1e\n\x16minimum_broadcast_secs\x18\x02 \x01(\r\x12\x1c\n\x14state_broadcast_secs\x18\x03 \x01(\r\x12\x11\n\tsend_bell\x18\x04 \x01(\x08\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x13\n\x0bmonitor_pin\x18\x06 \x01(\r\x12 \n\x18\x64\x65tection_triggered_high\x18\x07 \x01(\x08\x12\x12\n\nuse_pullup\x18\x08 \x01(\x08\x1a\xe4\x02\n\x0b\x41udioConfig\x12\x16\n\x0e\x63odec2_enabled\x18\x01 \x01(\x08\x12\x0f\n\x07ptt_pin\x18\x02 \x01(\r\x12@\n\x07\x62itrate\x18\x03 \x01(\x0e\x32/.meshtastic.ModuleConfig.AudioConfig.Audio_Baud\x12\x0e\n\x06i2s_ws\x18\x04 \x01(\r\x12\x0e\n\x06i2s_sd\x18\x05 \x01(\r\x12\x0f\n\x07i2s_din\x18\x06 \x01(\r\x12\x0f\n\x07i2s_sck\x18\x07 \x01(\r\"\xa7\x01\n\nAudio_Baud\x12\x12\n\x0e\x43ODEC2_DEFAULT\x10\x00\x12\x0f\n\x0b\x43ODEC2_3200\x10\x01\x12\x0f\n\x0b\x43ODEC2_2400\x10\x02\x12\x0f\n\x0b\x43ODEC2_1600\x10\x03\x12\x0f\n\x0b\x43ODEC2_1400\x10\x04\x12\x0f\n\x0b\x43ODEC2_1300\x10\x05\x12\x0f\n\x0b\x43ODEC2_1200\x10\x06\x12\x0e\n\nCODEC2_700\x10\x07\x12\x0f\n\x0b\x43ODEC2_700B\x10\x08\x1av\n\x10PaxcounterConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\"\n\x1apaxcounter_update_interval\x18\x02 \x01(\r\x12\x16\n\x0ewifi_threshold\x18\x03 \x01(\x05\x12\x15\n\rble_threshold\x18\x04 \x01(\x05\x1a\xe4\x04\n\x0cSerialConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0c\n\x04\x65\x63ho\x18\x02 \x01(\x08\x12\x0b\n\x03rxd\x18\x03 \x01(\r\x12\x0b\n\x03txd\x18\x04 \x01(\r\x12?\n\x04\x62\x61ud\x18\x05 \x01(\x0e\x32\x31.meshtastic.ModuleConfig.SerialConfig.Serial_Baud\x12\x0f\n\x07timeout\x18\x06 \x01(\r\x12?\n\x04mode\x18\x07 \x01(\x0e\x32\x31.meshtastic.ModuleConfig.SerialConfig.Serial_Mode\x12$\n\x1coverride_console_serial_port\x18\x08 \x01(\x08\"\x8a\x02\n\x0bSerial_Baud\x12\x10\n\x0c\x42\x41UD_DEFAULT\x10\x00\x12\x0c\n\x08\x42\x41UD_110\x10\x01\x12\x0c\n\x08\x42\x41UD_300\x10\x02\x12\x0c\n\x08\x42\x41UD_600\x10\x03\x12\r\n\tBAUD_1200\x10\x04\x12\r\n\tBAUD_2400\x10\x05\x12\r\n\tBAUD_4800\x10\x06\x12\r\n\tBAUD_9600\x10\x07\x12\x0e\n\nBAUD_19200\x10\x08\x12\x0e\n\nBAUD_38400\x10\t\x12\x0e\n\nBAUD_57600\x10\n\x12\x0f\n\x0b\x42\x41UD_115200\x10\x0b\x12\x0f\n\x0b\x42\x41UD_230400\x10\x0c\x12\x0f\n\x0b\x42\x41UD_460800\x10\r\x12\x0f\n\x0b\x42\x41UD_576000\x10\x0e\x12\x0f\n\x0b\x42\x41UD_921600\x10\x0f\"U\n\x0bSerial_Mode\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\n\n\x06SIMPLE\x10\x01\x12\t\n\x05PROTO\x10\x02\x12\x0b\n\x07TEXTMSG\x10\x03\x12\x08\n\x04NMEA\x10\x04\x12\x0b\n\x07\x43\x41LTOPO\x10\x05\x1a\xe9\x02\n\x1a\x45xternalNotificationConfig\x12\x0f\n\x0Line truncated
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.module_config_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\022ModuleConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_REMOTEHARDWAREPINTYPE._serialized_start=4586
|
||||
_REMOTEHARDWAREPINTYPE._serialized_end=4659
|
||||
_MODULECONFIG._serialized_start=47
|
||||
_MODULECONFIG._serialized_end=4482
|
||||
_MODULECONFIG_MQTTCONFIG._serialized_start=945
|
||||
_MODULECONFIG_MQTTCONFIG._serialized_end=1249
|
||||
_MODULECONFIG_MAPREPORTSETTINGS._serialized_start=1251
|
||||
_MODULECONFIG_MAPREPORTSETTINGS._serialized_end=1329
|
||||
_MODULECONFIG_REMOTEHARDWARECONFIG._serialized_start=1332
|
||||
_MODULECONFIG_REMOTEHARDWARECONFIG._serialized_end=1462
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG._serialized_start=1464
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG._serialized_end=1526
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG._serialized_start=1529
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG._serialized_end=1739
|
||||
_MODULECONFIG_AUDIOCONFIG._serialized_start=1742
|
||||
_MODULECONFIG_AUDIOCONFIG._serialized_end=2098
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD._serialized_start=1931
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD._serialized_end=2098
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG._serialized_start=2100
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG._serialized_end=2218
|
||||
_MODULECONFIG_SERIALCONFIG._serialized_start=2221
|
||||
_MODULECONFIG_SERIALCONFIG._serialized_end=2833
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD._serialized_start=2480
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD._serialized_end=2746
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE._serialized_start=2748
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE._serialized_end=2833
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG._serialized_start=2836
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG._serialized_end=3197
|
||||
_MODULECONFIG_STOREFORWARDCONFIG._serialized_start=3200
|
||||
_MODULECONFIG_STOREFORWARDCONFIG._serialized_end=3332
|
||||
_MODULECONFIG_RANGETESTCONFIG._serialized_start=3334
|
||||
_MODULECONFIG_RANGETESTCONFIG._serialized_end=3398
|
||||
_MODULECONFIG_TELEMETRYCONFIG._serialized_start=3401
|
||||
_MODULECONFIG_TELEMETRYCONFIG._serialized_end=3759
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG._serialized_start=3762
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG._serialized_end=4360
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR._serialized_start=4261
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR._serialized_end=4360
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG._serialized_start=4362
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG._serialized_end=4463
|
||||
_REMOTEHARDWAREPIN._serialized_start=4484
|
||||
_REMOTEHARDWAREPIN._serialized_end=4584
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,30 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/mqtt.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic import config_pb2 as meshtastic_dot_config__pb2
|
||||
from meshtastic import mesh_pb2 as meshtastic_dot_mesh__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15meshtastic/mqtt.proto\x12\nmeshtastic\x1a\x17meshtastic/config.proto\x1a\x15meshtastic/mesh.proto\"a\n\x0fServiceEnvelope\x12&\n\x06packet\x18\x01 \x01(\x0b\x32\x16.meshtastic.MeshPacket\x12\x12\n\nchannel_id\x18\x02 \x01(\t\x12\x12\n\ngateway_id\x18\x03 \x01(\t\"\xbc\x03\n\tMapReport\x12\x11\n\tlong_name\x18\x01 \x01(\t\x12\x12\n\nshort_name\x18\x02 \x01(\t\x12\x32\n\x04role\x18\x03 \x01(\x0e\x32$.meshtastic.Config.DeviceConfig.Role\x12+\n\x08hw_model\x18\x04 \x01(\x0e\x32\x19.meshtastic.HardwareModel\x12\x18\n\x10\x66irmware_version\x18\x05 \x01(\t\x12\x38\n\x06region\x18\x06 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12?\n\x0cmodem_preset\x18\x07 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPreset\x12\x1b\n\x13has_default_channel\x18\x08 \x01(\x08\x12\x12\n\nlatitude_i\x18\t \x01(\x0f\x12\x13\n\x0blongitude_i\x18\n \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x0b \x01(\x05\x12\x1a\n\x12position_precision\x18\x0c \x01(\r\x12\x1e\n\x16num_online_local_nodes\x18\r \x01(\rB_\n\x13\x63om.geeksville.meshB\nMQTTProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.mqtt_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\nMQTTProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_SERVICEENVELOPE._serialized_start=85
|
||||
_SERVICEENVELOPE._serialized_end=182
|
||||
_MAPREPORT._serialized_start=185
|
||||
_MAPREPORT._serialized_end=629
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,26 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/paxcount.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19meshtastic/paxcount.proto\x12\nmeshtastic\"5\n\x08Paxcount\x12\x0c\n\x04wifi\x18\x01 \x01(\r\x12\x0b\n\x03\x62le\x18\x02 \x01(\r\x12\x0e\n\x06uptime\x18\x03 \x01(\rBc\n\x13\x63om.geeksville.meshB\x0ePaxcountProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.paxcount_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\016PaxcountProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_PAXCOUNT._serialized_start=41
|
||||
_PAXCOUNT._serialized_end=94
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -0,0 +1,26 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/portnums.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x19meshtastic/portnums.proto\x12\nmeshtastic*\x8d\x04\n\x07PortNum\x12\x0f\n\x0bUNKNOWN_APP\x10\x00\x12\x14\n\x10TEXT_MESSAGE_APP\x10\x01\x12\x17\n\x13REMOTE_HARDWARE_APP\x10\x02\x12\x10\n\x0cPOSITION_APP\x10\x03\x12\x10\n\x0cNODEINFO_APP\x10\x04\x12\x0f\n\x0bROUTING_APP\x10\x05\x12\r\n\tADMIN_APP\x10\x06\x12\x1f\n\x1bTEXT_MESSAGE_COMPRESSED_APP\x10\x07\x12\x10\n\x0cWAYPOINT_APP\x10\x08\x12\r\n\tAUDIO_APP\x10\t\x12\x18\n\x14\x44\x45TECTION_SENSOR_APP\x10\n\x12\r\n\tREPLY_APP\x10 \x12\x11\n\rIP_TUNNEL_APP\x10!\x12\x12\n\x0ePAXCOUNTER_APP\x10\"\x12\x0e\n\nSERIAL_APP\x10@\x12\x15\n\x11STORE_FORWARD_APP\x10\x41\x12\x12\n\x0eRANGE_TEST_APP\x10\x42\x12\x11\n\rTELEMETRY_APP\x10\x43\x12\x0b\n\x07ZPS_APP\x10\x44\x12\x11\n\rSIMULATOR_APP\x10\x45\x12\x12\n\x0eTRACEROUTE_APP\x10\x46\x12\x14\n\x10NEIGHBORINFO_APP\x10G\x12\x0f\n\x0b\x41TAK_PLUGIN\x10H\x12\x12\n\x0eMAP_REPORT_APP\x10I\x12\x10\n\x0bPRIVATE_APP\x10\x80\x02\x12\x13\n\x0e\x41TAK_FORWARDER\x10\x81\x02\x12\x08\n\x03MAX\x10\xff\x03\x42]\n\x13\x63om.geeksville.meshB\x08PortnumsZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.portnums_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\010PortnumsZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_PORTNUM._serialized_start=42
|
||||
_PORTNUM._serialized_end=567
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1 +0,0 @@
|
||||
569a2b3ae7b6bda1a7ab177463a55d8ede3bef53
|
||||
Whitespace-only changes.
@@ -1,74 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/admin.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import channel_pb2 as meshtastic_dot_protobuf_dot_channel__pb2
|
||||
from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config__pb2
|
||||
from meshtastic.protobuf import connection_status_pb2 as meshtastic_dot_protobuf_dot_connection__status__pb2
|
||||
from meshtastic.protobuf import device_ui_pb2 as meshtastic_dot_protobuf_dot_device__ui__pb2
|
||||
from meshtastic.protobuf import mesh_pb2 as meshtastic_dot_protobuf_dot_mesh__pb2
|
||||
from meshtastic.protobuf import module_config_pb2 as meshtastic_dot_protobuf_dot_module__config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmeshtastic/protobuf/admin.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\x1a+meshtastic/protobuf/connection_status.proto\x1a#meshtastic/protobuf/device_ui.proto\x1a\x1emeshtastic/protobuf/mesh.proto\x1a\'meshtastic/protobuf/module_config.proto\"\xb5\x1d\n\x0c\x41\x64minMessage\x12\x17\n\x0fsession_passkey\x18\x65 \x01(\x0c\x12\x1d\n\x13get_channel_request\x18\x01 \x01(\rH\x00\x12<\n\x14get_channel_response\x18\x02 \x01(\x0b\x32\x1c.meshtastic.protobuf.ChannelH\x00\x12\x1b\n\x11get_owner_request\x18\x03 \x01(\x08H\x00\x12\x37\n\x12get_owner_response\x18\x04 \x01(\x0b\x32\x19.meshtastic.protobuf.UserH\x00\x12J\n\x12get_config_request\x18\x05 \x01(\x0e\x32,.meshtastic.protobuf.AdminMessage.ConfigTypeH\x00\x12:\n\x13get_config_response\x18\x06 \x01(\x0b\x32\x1b.meshtastic.protobuf.ConfigH\x00\x12W\n\x19get_module_config_request\x18\x07 \x01(\x0e\x32\x32.meshtastic.protobuf.AdminMessage.ModuleConfigTypeH\x00\x12G\n\x1aget_module_config_response\x18\x08 \x01(\x0b\x32!.meshtastic.protobuf.ModuleConfigH\x00\x12\x34\n*get_canned_message_module_messages_request\x18\n \x01(\x08H\x00\x12\x35\n+get_canned_message_module_messages_response\x18\x0b \x01(\tH\x00\x12%\n\x1bget_device_metadata_request\x18\x0c \x01(\x08H\x00\x12K\n\x1cget_device_metadata_response\x18\r \x01(\x0b\x32#.meshtastic.protobuf.DeviceMetadataH\x00\x12\x1e\n\x14get_ringtone_request\x18\x0e \x01(\x08H\x00\x12\x1f\n\x15get_ringtone_response\x18\x0f \x01(\tH\x00\x12.\n$get_device_connection_status_request\x18\x10 \x01(\x08H\x00\x12\\\n%get_device_connection_status_response\x18\x11 \x01(\x0b\x32+.meshtastic.protobuf.DeviceConnectionStatusH\x00\x12:\n\x0cset_ham_mode\x18\x12 \x01(\x0b\x32\".meshtastic.protobuf.HamParametersH\x00\x12/\n%get_node_remote_hardware_pins_request\x18\x13 \x01(\x08H\x00\x12\x65\n&get_node_remote_hardware_pins_response\x18\x14 \x01(\x0b\x32\x33.meshtastic.protobuf.NodeRemoteHardwarePinsResponseH\x00\x12 \n\x16\x65nter_dfu_mode_request\x18\x15 \x01(\x08H\x00\x12\x1d\n\x13\x64\x65lete_file_request\x18\x16 \x01(\tH\x00\x12\x13\n\tset_scale\x18\x17 \x01(\rH\x00\x12N\n\x12\x62\x61\x63kup_preferences\x18\x18 \x01(\x0e\x32\x30.meshtastic.protobuf.AdminMessage.BackupLocationH\x00\x12O\n\x13restore_preferences\x18\x19 \x01(\x0e\x32\x30.meshtastic.protobuf.AdminMessage.BackupLocationH\x00\x12U\n\x19remove_backup_preferences\x18\x1a \x01(\x0e\x32\x30.meshtastic.protobuf.AdminMessage.BackupLocationH\x00\x12H\n\x10send_input_event\x18\x1b \x01(\x0b\x32,.meshtastic.protobuf.AdminMessage.InputEventH\x00\x12.\n\tset_owner\x18 \x01(\x0b\x32\x19.meshtastic.protobuf.UserH\x00\x12\x33\n\x0bset_channel\x18! \x01(\x0b\x32\x1c.meshtastic.protobuf.ChannelH\x00\x12\x31\n\nset_config\x18\" \x01(\x0b\x32\x1b.meshtastic.protobuf.ConfigH\x00\x12>\n\x11set_module_config\x18# \x01(\x0b\x32!.meshtastic.protobuf.ModuleConfigH\x00\x12,\n\"set_canned_message_module_messages\x18$ \x01(\tH\x00\x12\x1e\n\x14set_ringtone_message\x18% \x01(\tH\x00\x12\x1b\n\x11remove_by_nodenum\x18& \x01(\rH\x00\x12\x1b\n\x11set_favorite_node\x18\' \x01(\rH\x00\x12\x1e\n\x14remove_favorite_node\x18( \x01(\rH\x00\x12;\n\x12set_fixed_position\x18) \x01(\x0b\x32\x1d.meshtastic.protobuf.PositionH\x00\x12\x1f\n\x15remove_fixed_position\x18* \x01(\x08H\x00\x12\x17\n\rset_time_only\x18+ \x01(\x07H\x00\x12\x1f\n\x15get_ui_config_request\x18, \x01(\x08H\x00\x12\x45\n\x16get_ui_config_response\x18- \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x12>\n\x0fstore_ui_config\x18. \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x12\x1a\n\x10set_ignored_node\x18/ \x01(\rH\x00\x12\x1d\n\x13remove_ignored_node\x18\x30 \x01(\rH\x00\x12\x1b\n\x11toggle_muted_node\x18\x31 \x01(\rH\x00\x12\x1d\n\x13\x62\x65gin_edit_settings\x18@ \x01(\x08H\x00\x12\x1e\n\x14\x63ommit_edit_settings\x18\x41 \x01(\x08H\x00\x12\x39\n\x0b\x61\x64\x64_contact\x18\x42 \x01(\x0b\x32\".meshtastic.protobuf.SharedContactH\x00\x12\x45\n\x10key_verification\x18\x43 \x01(\x0b\x32).meshtastic.protobuf.KeyVerificationAdminH\x00\x12\x1e\n\x14\x66\x61\x63tory_reset_device\x18^ \x01(\x05H\x00\x12 \n\x12reboot_ota_seconds\x18_ \x01(\x05\x42\x02\x18\x01H\x00\x12\x18\n\x0e\x65xit_simulator\x18` \x01(\x08H\x00\x12\x18\n\x0ereboot_seconds\x18\x61 \x01(\x05H\x00\x12\x1a\n\x10shutdown_seconds\x18\x62 \x01(\x05H\x00\x12\x1e\n\x14\x66\x61\x63tory_reset_config\x18\x63 \x01(\x05H\x00\x12\x16\n\x0cnodedb_reset\x18\x64 \x01(\x08H\x00\x12\x41\n\x0bota_request\x18\x66 \x01(\x0b\x32*.meshtastic.protobuf.AdminMessage.OTAEventH\x00\x12:\n\rsensor_config\x18g \x01(\x0b\x32!.meshtastic.protobuf.SensorConfigH\x00\x12:\n\rlockdown_auth\x18h \x01(\x0b\x32!.meshtastic.protobuf.LockdownAuthH\x00\x1aS\n\nInputEvent\x12\x12\n\nevent_code\x18\x01 \x01(\r\x12\x0f\n\x07kb_char\x18\x02 \x01(\r\x12\x0f\n\x07touch_x\x18\x03 \x01(\r\x12\x0f\n\x07touch_y\x18\x04 \x01(\r\x1aS\n\x08OTAEvent\x12\x35\n\x0freboot_ota_mode\x18\x01 \x01(\x0e\x32\xLine truncated
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.admin_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\013AdminProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_ADMINMESSAGE.fields_by_name['reboot_ota_seconds']._options = None
|
||||
_ADMINMESSAGE.fields_by_name['reboot_ota_seconds']._serialized_options = b'\030\001'
|
||||
_OTAMODE._serialized_start=6748
|
||||
_OTAMODE._serialized_end=6803
|
||||
_ADMINMESSAGE._serialized_start=281
|
||||
_ADMINMESSAGE._serialized_end=4046
|
||||
_ADMINMESSAGE_INPUTEVENT._serialized_start=3192
|
||||
_ADMINMESSAGE_INPUTEVENT._serialized_end=3275
|
||||
_ADMINMESSAGE_OTAEVENT._serialized_start=3277
|
||||
_ADMINMESSAGE_OTAEVENT._serialized_end=3360
|
||||
_ADMINMESSAGE_CONFIGTYPE._serialized_start=3363
|
||||
_ADMINMESSAGE_CONFIGTYPE._serialized_end=3577
|
||||
_ADMINMESSAGE_MODULECONFIGTYPE._serialized_start=3580
|
||||
_ADMINMESSAGE_MODULECONFIGTYPE._serialized_end=3990
|
||||
_ADMINMESSAGE_BACKUPLOCATION._serialized_start=3992
|
||||
_ADMINMESSAGE_BACKUPLOCATION._serialized_end=4027
|
||||
_LOCKDOWNAUTH._serialized_start=4049
|
||||
_LOCKDOWNAUTH._serialized_end=4199
|
||||
_HAMPARAMETERS._serialized_start=4201
|
||||
_HAMPARAMETERS._serialized_end=4311
|
||||
_NODEREMOTEHARDWAREPINSRESPONSE._serialized_start=4313
|
||||
_NODEREMOTEHARDWAREPINSRESPONSE._serialized_end=4424
|
||||
_SHAREDCONTACT._serialized_start=4426
|
||||
_SHAREDCONTACT._serialized_end=4550
|
||||
_KEYVERIFICATIONADMIN._serialized_start=4553
|
||||
_KEYVERIFICATIONADMIN._serialized_end=4846
|
||||
_KEYVERIFICATIONADMIN_MESSAGETYPE._serialized_start=4723
|
||||
_KEYVERIFICATIONADMIN_MESSAGETYPE._serialized_end=4826
|
||||
_SENSORCONFIG._serialized_start=4849
|
||||
_SENSORCONFIG._serialized_end=5266
|
||||
_SCD4X_CONFIG._serialized_start=5269
|
||||
_SCD4X_CONFIG._serialized_end=5623
|
||||
_SEN5X_CONFIG._serialized_start=5626
|
||||
_SEN5X_CONFIG._serialized_end=5800
|
||||
_SEN6X_CONFIG._serialized_start=5803
|
||||
_SEN6X_CONFIG._serialized_end=6219
|
||||
_SCD30_CONFIG._serialized_start=6222
|
||||
_SCD30_CONFIG._serialized_end=6530
|
||||
_SHTXX_CONFIG._serialized_start=6532
|
||||
_SHTXX_CONFIG._serialized_end=6590
|
||||
_DS248X_CONFIG._serialized_start=6592
|
||||
_DS248X_CONFIG._serialized_end=6675
|
||||
_AS3935_CONFIG._serialized_start=6677
|
||||
_AS3935_CONFIG._serialized_end=6746
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,360 +0,0 @@
|
||||
from meshtastic.protobuf import channel_pb2 as _channel_pb2
|
||||
from meshtastic.protobuf import config_pb2 as _config_pb2
|
||||
from meshtastic.protobuf import connection_status_pb2 as _connection_status_pb2
|
||||
from meshtastic.protobuf import device_ui_pb2 as _device_ui_pb2
|
||||
from meshtastic.protobuf import mesh_pb2 as _mesh_pb2
|
||||
from meshtastic.protobuf import module_config_pb2 as _module_config_pb2
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
NO_REBOOT_OTA: OTAMode
|
||||
OTA_BLE: OTAMode
|
||||
OTA_WIFI: OTAMode
|
||||
|
||||
class AS3935_config(_message.Message):
|
||||
__slots__ = ["set_tuning_cap_pf"]
|
||||
SET_TUNING_CAP_PF_FIELD_NUMBER: _ClassVar[int]
|
||||
set_tuning_cap_pf: int
|
||||
def __init__(self, set_tuning_cap_pf: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class AdminMessage(_message.Message):
|
||||
__slots__ = ["add_contact", "backup_preferences", "begin_edit_settings", "commit_edit_settings", "delete_file_request", "enter_dfu_mode_request", "exit_simulator", "factory_reset_config", "factory_reset_device", "get_canned_message_module_messages_request", "get_canned_message_module_messages_response", "get_channel_request", "get_channel_response", "get_config_request", "get_config_response", "get_device_connection_status_request", "get_device_connection_status_response", "get_device_metadata_request", "get_device_metadata_response", "get_module_config_request", "get_module_config_response", "get_node_remote_hardware_pins_request", "get_node_remote_hardware_pins_response", "get_owner_request", "get_owner_response", "get_ringtone_request", "get_ringtone_response", "get_ui_config_request", "get_ui_config_response", "key_verification", "lockdown_auth", "nodedb_reset", "ota_request", "reboot_ota_seconds", "reboot_seconds", "remove_backup_preferences", "remove_by_nodenum", "remove_favorite_node", "remove_fixed_position", "remove_ignored_node", "restore_preferences", "send_input_event", "sensor_config", "session_passkey", "set_canned_message_module_messages", "set_channel", "set_config", "set_favorite_node", "set_fixed_position", "set_ham_mode", "set_ignored_node", "set_module_config", "set_owner", "set_ringtone_message", "set_scale", "set_time_only", "shutdown_seconds", "store_ui_config", "toggle_muted_node"]
|
||||
class BackupLocation(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class ConfigType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class ModuleConfigType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class InputEvent(_message.Message):
|
||||
__slots__ = ["event_code", "kb_char", "touch_x", "touch_y"]
|
||||
EVENT_CODE_FIELD_NUMBER: _ClassVar[int]
|
||||
KB_CHAR_FIELD_NUMBER: _ClassVar[int]
|
||||
TOUCH_X_FIELD_NUMBER: _ClassVar[int]
|
||||
TOUCH_Y_FIELD_NUMBER: _ClassVar[int]
|
||||
event_code: int
|
||||
kb_char: int
|
||||
touch_x: int
|
||||
touch_y: int
|
||||
def __init__(self, event_code: _Optional[int] = ..., kb_char: _Optional[int] = ..., touch_x: _Optional[int] = ..., touch_y: _Optional[int] = ...) -> None: ...
|
||||
class OTAEvent(_message.Message):
|
||||
__slots__ = ["ota_hash", "reboot_ota_mode"]
|
||||
OTA_HASH_FIELD_NUMBER: _ClassVar[int]
|
||||
REBOOT_OTA_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
ota_hash: bytes
|
||||
reboot_ota_mode: OTAMode
|
||||
def __init__(self, reboot_ota_mode: _Optional[_Union[OTAMode, str]] = ..., ota_hash: _Optional[bytes] = ...) -> None: ...
|
||||
ADD_CONTACT_FIELD_NUMBER: _ClassVar[int]
|
||||
AMBIENTLIGHTING_CONFIG: AdminMessage.ModuleConfigType
|
||||
AUDIO_CONFIG: AdminMessage.ModuleConfigType
|
||||
BACKUP_PREFERENCES_FIELD_NUMBER: _ClassVar[int]
|
||||
BEGIN_EDIT_SETTINGS_FIELD_NUMBER: _ClassVar[int]
|
||||
BLUETOOTH_CONFIG: AdminMessage.ConfigType
|
||||
CANNEDMSG_CONFIG: AdminMessage.ModuleConfigType
|
||||
COMMIT_EDIT_SETTINGS_FIELD_NUMBER: _ClassVar[int]
|
||||
DELETE_FILE_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
DETECTIONSENSOR_CONFIG: AdminMessage.ModuleConfigType
|
||||
DEVICEUI_CONFIG: AdminMessage.ConfigType
|
||||
DEVICE_CONFIG: AdminMessage.ConfigType
|
||||
DISPLAY_CONFIG: AdminMessage.ConfigType
|
||||
ENTER_DFU_MODE_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
EXIT_SIMULATOR_FIELD_NUMBER: _ClassVar[int]
|
||||
EXTNOTIF_CONFIG: AdminMessage.ModuleConfigType
|
||||
FACTORY_RESET_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
FACTORY_RESET_DEVICE_FIELD_NUMBER: _ClassVar[int]
|
||||
FLASH: AdminMessage.BackupLocation
|
||||
GET_CANNED_MESSAGE_MODULE_MESSAGES_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_CANNED_MESSAGE_MODULE_MESSAGES_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_CHANNEL_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_CHANNEL_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_CONFIG_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_CONFIG_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_DEVICE_CONNECTION_STATUS_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_DEVICE_CONNECTION_STATUS_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_DEVICE_METADATA_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_DEVICE_METADATA_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_MODULE_CONFIG_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_MODULE_CONFIG_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_NODE_REMOTE_HARDWARE_PINS_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_NODE_REMOTE_HARDWARE_PINS_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_OWNER_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_OWNER_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_RINGTONE_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_RINGTONE_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_UI_CONFIG_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_UI_CONFIG_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
KEY_VERIFICATION_FIELD_NUMBER: _ClassVar[int]
|
||||
LOCKDOWN_AUTH_FIELD_NUMBER: _ClassVar[int]
|
||||
LORA_CONFIG: AdminMessage.ConfigType
|
||||
MESHBEACON_CONFIG: AdminMessage.ModuleConfigType
|
||||
MQTT_CONFIG: AdminMessage.ModuleConfigType
|
||||
NEIGHBORINFO_CONFIG: AdminMessage.ModuleConfigType
|
||||
NETWORK_CONFIG: AdminMessage.ConfigType
|
||||
NODEDB_RESET_FIELD_NUMBER: _ClassVar[int]
|
||||
OTA_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
PAXCOUNTER_CONFIG: AdminMessage.ModuleConfigType
|
||||
POSITION_CONFIG: AdminMessage.ConfigType
|
||||
POWER_CONFIG: AdminMessage.ConfigType
|
||||
RANGETEST_CONFIG: AdminMessage.ModuleConfigType
|
||||
REBOOT_OTA_SECONDS_FIELD_NUMBER: _ClassVar[int]
|
||||
REBOOT_SECONDS_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOTEHARDWARE_CONFIG: AdminMessage.ModuleConfigType
|
||||
REMOVE_BACKUP_PREFERENCES_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOVE_BY_NODENUM_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOVE_FAVORITE_NODE_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOVE_FIXED_POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOVE_IGNORED_NODE_FIELD_NUMBER: _ClassVar[int]
|
||||
RESTORE_PREFERENCES_FIELD_NUMBER: _ClassVar[int]
|
||||
SD: AdminMessage.BackupLocation
|
||||
SECURITY_CONFIG: AdminMessage.ConfigType
|
||||
SEND_INPUT_EVENT_FIELD_NUMBER: _ClassVar[int]
|
||||
SENSOR_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
SERIAL_CONFIG: AdminMessage.ModuleConfigType
|
||||
SESSIONKEY_CONFIG: AdminMessage.ConfigType
|
||||
SESSION_PASSKEY_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_CANNED_MESSAGE_MODULE_MESSAGES_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_FAVORITE_NODE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_FIXED_POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_HAM_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_IGNORED_NODE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_MODULE_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_OWNER_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_RINGTONE_MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_SCALE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_TIME_ONLY_FIELD_NUMBER: _ClassVar[int]
|
||||
SHUTDOWN_SECONDS_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUSMESSAGE_CONFIG: AdminMessage.ModuleConfigType
|
||||
STOREFORWARD_CONFIG: AdminMessage.ModuleConfigType
|
||||
STORE_UI_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
TAK_CONFIG: AdminMessage.ModuleConfigType
|
||||
TELEMETRY_CONFIG: AdminMessage.ModuleConfigType
|
||||
TOGGLE_MUTED_NODE_FIELD_NUMBER: _ClassVar[int]
|
||||
TRAFFICMANAGEMENT_CONFIG: AdminMessage.ModuleConfigType
|
||||
add_contact: SharedContact
|
||||
backup_preferences: AdminMessage.BackupLocation
|
||||
begin_edit_settings: bool
|
||||
commit_edit_settings: bool
|
||||
delete_file_request: str
|
||||
enter_dfu_mode_request: bool
|
||||
exit_simulator: bool
|
||||
factory_reset_config: int
|
||||
factory_reset_device: int
|
||||
get_canned_message_module_messages_request: bool
|
||||
get_canned_message_module_messages_response: str
|
||||
get_channel_request: int
|
||||
get_channel_response: _channel_pb2.Channel
|
||||
get_config_request: AdminMessage.ConfigType
|
||||
get_config_response: _config_pb2.Config
|
||||
get_device_connection_status_request: bool
|
||||
get_device_connection_status_response: _connection_status_pb2.DeviceConnectionStatus
|
||||
get_device_metadata_request: bool
|
||||
get_device_metadata_response: _mesh_pb2.DeviceMetadata
|
||||
get_module_config_request: AdminMessage.ModuleConfigType
|
||||
get_module_config_response: _module_config_pb2.ModuleConfig
|
||||
get_node_remote_hardware_pins_request: bool
|
||||
get_node_remote_hardware_pins_response: NodeRemoteHardwarePinsResponse
|
||||
get_owner_request: bool
|
||||
get_owner_response: _mesh_pb2.User
|
||||
get_ringtone_request: bool
|
||||
get_ringtone_response: str
|
||||
get_ui_config_request: bool
|
||||
get_ui_config_response: _device_ui_pb2.DeviceUIConfig
|
||||
key_verification: KeyVerificationAdmin
|
||||
lockdown_auth: LockdownAuth
|
||||
nodedb_reset: bool
|
||||
ota_request: AdminMessage.OTAEvent
|
||||
reboot_ota_seconds: int
|
||||
reboot_seconds: int
|
||||
remove_backup_preferences: AdminMessage.BackupLocation
|
||||
remove_by_nodenum: int
|
||||
remove_favorite_node: int
|
||||
remove_fixed_position: bool
|
||||
remove_ignored_node: int
|
||||
restore_preferences: AdminMessage.BackupLocation
|
||||
send_input_event: AdminMessage.InputEvent
|
||||
sensor_config: SensorConfig
|
||||
session_passkey: bytes
|
||||
set_canned_message_module_messages: str
|
||||
set_channel: _channel_pb2.Channel
|
||||
set_config: _config_pb2.Config
|
||||
set_favorite_node: int
|
||||
set_fixed_position: _mesh_pb2.Position
|
||||
set_ham_mode: HamParameters
|
||||
set_ignored_node: int
|
||||
set_module_config: _module_config_pb2.ModuleConfig
|
||||
set_owner: _mesh_pb2.User
|
||||
set_ringtone_message: str
|
||||
set_scale: int
|
||||
set_time_only: int
|
||||
shutdown_seconds: int
|
||||
store_ui_config: _device_ui_pb2.DeviceUIConfig
|
||||
toggle_muted_node: int
|
||||
def __init__(self, session_passkey: _Optional[bytes] = ..., get_channel_request: _Optional[int] = ..., get_channel_response: _Optional[_Union[_channel_pb2.Channel, _Mapping]] = ..., get_owner_request: bool = ..., get_owner_response: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ..., get_config_request: _Optional[_Union[AdminMessage.ConfigType, str]] = ..., get_config_response: _Optional[_Union[_config_pb2.Config, _Mapping]] = ..., get_module_config_request: _Optional[_Union[AdminMessage.ModuleConfigType, str]] = ..., get_module_config_response: _Optional[_Union[_module_config_pb2.ModuleConfig, _Mapping]] = ..., get_canned_message_module_messages_request: bool = ..., get_canned_message_module_messages_response: _Optional[str] = ..., get_device_metadata_request: bool = ..., get_device_metadata_response: _Optional[_Union[_mesh_pb2.DeviceMetadata, _Mapping]] = ..., get_ringtone_request: bool = ..., get_ringtone_response: _Optional[str] = ..., get_device_connection_status_request: bool = ..., get_device_connection_status_response: _Optional[_Union[_connection_status_pb2.DeviceConnectionStatus, _Mapping]] = ..., set_ham_mode: _Optional[_Union[HamParameters, _Mapping]] = ..., get_node_remote_hardware_pins_request: bool = ..., get_node_remote_hardware_pins_response: _Optional[_Union[NodeRemoteHardwarePinsResponse, _Mapping]] = ..., enter_dfu_mode_request: bool = ..., delete_file_request: _Optional[str] = ..., set_scale: _Optional[int] = ..., backup_preferences: _Optional[_Union[AdminMessage.BackupLocation, str]] = ..., restore_preferences: _Optional[_Union[AdminMessage.BackupLocation, str]] = ..., remove_backup_preferences: _Optional[_Union[AdminMessage.BackupLocation, str]] = ..., send_input_event: _Optional[_Union[AdminMessage.InputEvent, _Mapping]] = ..., set_owner: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ..., set_channel: _Optional[_Union[_channel_pb2.Channel, _Mapping]] = ..., set_config: _Optional[_Union[_config_pb2.Config, _Mapping]] = ..., set_module_config: _Optional[_Union[_module_config_pb2.ModuleConfig, _Mapping]] = ..., set_canned_message_module_messages: _Optional[str] = ..., set_ringtone_message: _Optional[str] = ..., remove_by_nodenum: _Optional[int] = ..., set_favorite_node: _Optional[int] = ..., remove_favorite_node: _Optional[int] = ..., set_fixed_position: _Optional[_Union[_mesh_pb2.Position, _Mapping]] = ..., remove_fixed_position: bool = ..., set_time_only: _Optional[int] = ..., get_ui_config_request: bool = ..., get_ui_config_response: _Optional[_Union[_device_ui_pb2.DeviceUIConfig, _Mapping]] = ..., store_ui_config: _Optional[_Union[_device_ui_pb2.DeviceUIConfig, _Mapping]] = ..., set_ignored_node: _Optional[int] = ..., remove_ignored_node: _Optional[int] = ..., toggle_muted_node: _Optional[int] = ..., begin_edit_settings: bool = ..., commit_edit_settings: bool = ..., add_contact: _Optional[_Union[SharedContact, _Mapping]] = ..., key_verification: _Optional[_Union[KeyVerificationAdmin, _Mapping]] = ..., factory_reset_device: _Optional[int] = ..., reboot_ota_seconds: _Optional[int] = ..., exit_simulator: bool = ..., reboot_seconds: _Optional[int] = ..., shutdown_seconds: _Optional[int] = ..., factory_reset_config: _Optional[int] = ..., nodedb_reset: bool = ..., ota_request: _Optional[_Union[AdminMessage.OTAEvent, _Mapping]] = ..., sensor_config: _Optional[_Union[SensorConfig, _Mapping]] = ..., lockdown_auth: _Optional[_Union[LockdownAuth, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class DS248X_config(_message.Message):
|
||||
__slots__ = ["main_temperature_channel"]
|
||||
MAIN_TEMPERATURE_CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
main_temperature_channel: int
|
||||
def __init__(self, main_temperature_channel: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class HamParameters(_message.Message):
|
||||
__slots__ = ["call_sign", "frequency", "long_name", "short_name", "tx_power"]
|
||||
CALL_SIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
|
||||
LONG_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
TX_POWER_FIELD_NUMBER: _ClassVar[int]
|
||||
call_sign: str
|
||||
frequency: float
|
||||
long_name: str
|
||||
short_name: str
|
||||
tx_power: int
|
||||
def __init__(self, call_sign: _Optional[str] = ..., tx_power: _Optional[int] = ..., frequency: _Optional[float] = ..., short_name: _Optional[str] = ..., long_name: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class KeyVerificationAdmin(_message.Message):
|
||||
__slots__ = ["message_type", "nonce", "remote_nodenum", "security_number"]
|
||||
class MessageType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
DO_NOT_VERIFY: KeyVerificationAdmin.MessageType
|
||||
DO_VERIFY: KeyVerificationAdmin.MessageType
|
||||
INITIATE_VERIFICATION: KeyVerificationAdmin.MessageType
|
||||
MESSAGE_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
NONCE_FIELD_NUMBER: _ClassVar[int]
|
||||
PROVIDE_SECURITY_NUMBER: KeyVerificationAdmin.MessageType
|
||||
REMOTE_NODENUM_FIELD_NUMBER: _ClassVar[int]
|
||||
SECURITY_NUMBER_FIELD_NUMBER: _ClassVar[int]
|
||||
message_type: KeyVerificationAdmin.MessageType
|
||||
nonce: int
|
||||
remote_nodenum: int
|
||||
security_number: int
|
||||
def __init__(self, message_type: _Optional[_Union[KeyVerificationAdmin.MessageType, str]] = ..., remote_nodenum: _Optional[int] = ..., nonce: _Optional[int] = ..., security_number: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class LockdownAuth(_message.Message):
|
||||
__slots__ = ["boots_remaining", "disable", "lock_now", "max_session_seconds", "passphrase", "valid_until_epoch"]
|
||||
BOOTS_REMAINING_FIELD_NUMBER: _ClassVar[int]
|
||||
DISABLE_FIELD_NUMBER: _ClassVar[int]
|
||||
LOCK_NOW_FIELD_NUMBER: _ClassVar[int]
|
||||
MAX_SESSION_SECONDS_FIELD_NUMBER: _ClassVar[int]
|
||||
PASSPHRASE_FIELD_NUMBER: _ClassVar[int]
|
||||
VALID_UNTIL_EPOCH_FIELD_NUMBER: _ClassVar[int]
|
||||
boots_remaining: int
|
||||
disable: bool
|
||||
lock_now: bool
|
||||
max_session_seconds: int
|
||||
passphrase: bytes
|
||||
valid_until_epoch: int
|
||||
def __init__(self, passphrase: _Optional[bytes] = ..., boots_remaining: _Optional[int] = ..., valid_until_epoch: _Optional[int] = ..., lock_now: bool = ..., max_session_seconds: _Optional[int] = ..., disable: bool = ...) -> None: ...
|
||||
|
||||
class NodeRemoteHardwarePinsResponse(_message.Message):
|
||||
__slots__ = ["node_remote_hardware_pins"]
|
||||
NODE_REMOTE_HARDWARE_PINS_FIELD_NUMBER: _ClassVar[int]
|
||||
node_remote_hardware_pins: _containers.RepeatedCompositeFieldContainer[_mesh_pb2.NodeRemoteHardwarePin]
|
||||
def __init__(self, node_remote_hardware_pins: _Optional[_Iterable[_Union[_mesh_pb2.NodeRemoteHardwarePin, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class SCD30_config(_message.Message):
|
||||
__slots__ = ["set_altitude", "set_asc", "set_measurement_interval", "set_target_co2_conc", "set_temperature", "soft_reset"]
|
||||
SET_ALTITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_ASC_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_MEASUREMENT_INTERVAL_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_TARGET_CO2_CONC_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
|
||||
SOFT_RESET_FIELD_NUMBER: _ClassVar[int]
|
||||
set_altitude: int
|
||||
set_asc: bool
|
||||
set_measurement_interval: int
|
||||
set_target_co2_conc: int
|
||||
set_temperature: float
|
||||
soft_reset: bool
|
||||
def __init__(self, set_asc: bool = ..., set_target_co2_conc: _Optional[int] = ..., set_temperature: _Optional[float] = ..., set_altitude: _Optional[int] = ..., set_measurement_interval: _Optional[int] = ..., soft_reset: bool = ...) -> None: ...
|
||||
|
||||
class SCD4X_config(_message.Message):
|
||||
__slots__ = ["factory_reset", "set_altitude", "set_ambient_pressure", "set_asc", "set_power_mode", "set_target_co2_conc", "set_temperature"]
|
||||
FACTORY_RESET_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_ALTITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_AMBIENT_PRESSURE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_ASC_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_POWER_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_TARGET_CO2_CONC_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
|
||||
factory_reset: bool
|
||||
set_altitude: int
|
||||
set_ambient_pressure: int
|
||||
set_asc: bool
|
||||
set_power_mode: bool
|
||||
set_target_co2_conc: int
|
||||
set_temperature: float
|
||||
def __init__(self, set_asc: bool = ..., set_target_co2_conc: _Optional[int] = ..., set_temperature: _Optional[float] = ..., set_altitude: _Optional[int] = ..., set_ambient_pressure: _Optional[int] = ..., factory_reset: bool = ..., set_power_mode: bool = ...) -> None: ...
|
||||
|
||||
class SEN5X_config(_message.Message):
|
||||
__slots__ = ["set_one_shot_mode", "set_temperature", "start_fan_cleaning"]
|
||||
SET_ONE_SHOT_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
|
||||
START_FAN_CLEANING_FIELD_NUMBER: _ClassVar[int]
|
||||
set_one_shot_mode: bool
|
||||
set_temperature: float
|
||||
start_fan_cleaning: bool
|
||||
def __init__(self, set_temperature: _Optional[float] = ..., set_one_shot_mode: bool = ..., start_fan_cleaning: bool = ...) -> None: ...
|
||||
|
||||
class SEN6X_config(_message.Message):
|
||||
__slots__ = ["factory_reset", "set_altitude", "set_ambient_pressure", "set_asc", "set_one_shot_mode", "set_target_co2_conc", "set_temperature", "start_fan_cleaning"]
|
||||
FACTORY_RESET_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_ALTITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_AMBIENT_PRESSURE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_ASC_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_ONE_SHOT_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_TARGET_CO2_CONC_FIELD_NUMBER: _ClassVar[int]
|
||||
SET_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
|
||||
START_FAN_CLEANING_FIELD_NUMBER: _ClassVar[int]
|
||||
factory_reset: bool
|
||||
set_altitude: int
|
||||
set_ambient_pressure: int
|
||||
set_asc: bool
|
||||
set_one_shot_mode: bool
|
||||
set_target_co2_conc: int
|
||||
set_temperature: float
|
||||
start_fan_cleaning: bool
|
||||
def __init__(self, set_temperature: _Optional[float] = ..., set_one_shot_mode: bool = ..., start_fan_cleaning: bool = ..., set_asc: bool = ..., set_target_co2_conc: _Optional[int] = ..., set_altitude: _Optional[int] = ..., set_ambient_pressure: _Optional[int] = ..., factory_reset: bool = ...) -> None: ...
|
||||
|
||||
class SHTXX_config(_message.Message):
|
||||
__slots__ = ["set_accuracy"]
|
||||
SET_ACCURACY_FIELD_NUMBER: _ClassVar[int]
|
||||
set_accuracy: int
|
||||
def __init__(self, set_accuracy: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class SensorConfig(_message.Message):
|
||||
__slots__ = ["as3935_config", "ds248x_config", "scd30_config", "scd4x_config", "sen5x_config", "sen6x_config", "shtxx_config"]
|
||||
AS3935_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
DS248X_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
SCD30_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
SCD4X_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
SEN5X_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
SEN6X_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
SHTXX_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
as3935_config: AS3935_config
|
||||
ds248x_config: DS248X_config
|
||||
scd30_config: SCD30_config
|
||||
scd4x_config: SCD4X_config
|
||||
sen5x_config: SEN5X_config
|
||||
sen6x_config: SEN6X_config
|
||||
shtxx_config: SHTXX_config
|
||||
def __init__(self, scd4x_config: _Optional[_Union[SCD4X_config, _Mapping]] = ..., sen5x_config: _Optional[_Union[SEN5X_config, _Mapping]] = ..., scd30_config: _Optional[_Union[SCD30_config, _Mapping]] = ..., shtxx_config: _Optional[_Union[SHTXX_config, _Mapping]] = ..., ds248x_config: _Optional[_Union[DS248X_config, _Mapping]] = ..., sen6x_config: _Optional[_Union[SEN6X_config, _Mapping]] = ..., as3935_config: _Optional[_Union[AS3935_config, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class SharedContact(_message.Message):
|
||||
__slots__ = ["manually_verified", "node_num", "should_ignore", "user"]
|
||||
MANUALLY_VERIFIED_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
SHOULD_IGNORE_FIELD_NUMBER: _ClassVar[int]
|
||||
USER_FIELD_NUMBER: _ClassVar[int]
|
||||
manually_verified: bool
|
||||
node_num: int
|
||||
should_ignore: bool
|
||||
user: _mesh_pb2.User
|
||||
def __init__(self, node_num: _Optional[int] = ..., user: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ..., should_ignore: bool = ..., manually_verified: bool = ...) -> None: ...
|
||||
|
||||
class OTAMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
@@ -1,28 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/apponly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import channel_pb2 as meshtastic_dot_protobuf_dot_channel__pb2
|
||||
from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!meshtastic/protobuf/apponly.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\"\x81\x01\n\nChannelSet\x12\x36\n\x08settings\x18\x01 \x03(\x0b\x32$.meshtastic.protobuf.ChannelSettings\x12;\n\x0blora_config\x18\x02 \x01(\x0b\x32&.meshtastic.protobuf.Config.LoRaConfigBc\n\x14org.meshtastic.protoB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.apponly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CHANNELSET._serialized_start=128
|
||||
_CHANNELSET._serialized_end=257
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,16 +0,0 @@
|
||||
from meshtastic.protobuf import channel_pb2 as _channel_pb2
|
||||
from meshtastic.protobuf import config_pb2 as _config_pb2
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class ChannelSet(_message.Message):
|
||||
__slots__ = ["lora_config", "settings"]
|
||||
LORA_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
SETTINGS_FIELD_NUMBER: _ClassVar[int]
|
||||
lora_config: _config_pb2.Config.LoRaConfig
|
||||
settings: _containers.RepeatedCompositeFieldContainer[_channel_pb2.ChannelSettings]
|
||||
def __init__(self, settings: _Optional[_Iterable[_Union[_channel_pb2.ChannelSettings, _Mapping]]] = ..., lora_config: _Optional[_Union[_config_pb2.Config.LoRaConfig, _Mapping]] = ...) -> None: ...
|
||||
@@ -1,157 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/atak.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import field_metadata_pb2 as meshtastic_dot_protobuf_dot_field__metadata__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emeshtastic/protobuf/atak.proto\x12\x13meshtastic.protobuf\x1a(meshtastic/protobuf/field_metadata.proto\"\xa5\x02\n\tTAKPacket\x12\x15\n\ris_compressed\x18\x01 \x01(\x08\x12-\n\x07\x63ontact\x18\x02 \x01(\x0b\x32\x1c.meshtastic.protobuf.Contact\x12)\n\x05group\x18\x03 \x01(\x0b\x32\x1a.meshtastic.protobuf.Group\x12+\n\x06status\x18\x04 \x01(\x0b\x32\x1b.meshtastic.protobuf.Status\x12\'\n\x03pli\x18\x05 \x01(\x0b\x32\x18.meshtastic.protobuf.PLIH\x00\x12,\n\x04\x63hat\x18\x06 \x01(\x0b\x32\x1c.meshtastic.protobuf.GeoChatH\x00\x12\x10\n\x06\x64\x65tail\x18\x07 \x01(\x0cH\x00\x42\x11\n\x0fpayload_variant\"\xfd\x02\n\x07GeoChat\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x02to\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0bto_callsign\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\x0freceipt_for_uid\x18\x04 \x01(\t\x12>\n\x0creceipt_type\x18\x05 \x01(\x0e\x32(.meshtastic.protobuf.GeoChat.ReceiptType\x12\x11\n\x04lang\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07room_id\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x1d\n\x10voice_profile_id\x18\x08 \x01(\tH\x04\x88\x01\x01\"T\n\x0bReceiptType\x12\x14\n\x10ReceiptType_None\x10\x00\x12\x19\n\x15ReceiptType_Delivered\x10\x01\x12\x14\n\x10ReceiptType_Read\x10\x02\x42\x05\n\x03_toB\x0e\n\x0c_to_callsignB\x07\n\x05_langB\n\n\x08_room_idB\x13\n\x11_voice_profile_id\"_\n\x05Group\x12-\n\x04role\x18\x01 \x01(\x0e\x32\x1f.meshtastic.protobuf.MemberRole\x12\'\n\x04team\x18\x02 \x01(\x0e\x32\x19.meshtastic.protobuf.Team\"\x19\n\x06Status\x12\x0f\n\x07\x62\x61ttery\x18\x01 \x01(\r\"4\n\x07\x43ontact\x12\x10\n\x08\x63\x61llsign\x18\x01 \x01(\t\x12\x17\n\x0f\x64\x65vice_callsign\x18\x02 \x01(\t\"_\n\x03PLI\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\r\n\x05speed\x18\x04 \x01(\r\x12\x0e\n\x06\x63ourse\x18\x05 \x01(\r\"\xb0\x01\n\rAircraftTrack\x12\x0c\n\x04icao\x18\x01 \x01(\t\x12\x14\n\x0cregistration\x18\x02 \x01(\t\x12\x0e\n\x06\x66light\x18\x03 \x01(\t\x12\x15\n\raircraft_type\x18\x04 \x01(\t\x12\x0e\n\x06squawk\x18\x05 \x01(\r\x12\x10\n\x08\x63\x61tegory\x18\x06 \x01(\t\x12\x10\n\x08rssi_x10\x18\x07 \x01(\x11\x12\x0b\n\x03gps\x18\x08 \x01(\x08\x12\x13\n\x0b\x63ot_host_id\x18\t \x01(\t\"7\n\x0b\x43otGeoPoint\x12\x13\n\x0blat_delta_i\x18\x01 \x01(\x11\x12\x13\n\x0blon_delta_i\x18\x02 \x01(\x11\"\x80\x07\n\nDrawnShape\x12\x32\n\x04kind\x18\x01 \x01(\x0e\x32$.meshtastic.protobuf.DrawnShape.Kind\x12\x38\n\x05style\x18\x02 \x01(\x0e\x32).meshtastic.protobuf.DrawnShape.StyleMode\x12\x10\n\x08major_cm\x18\x03 \x01(\r\x12\x10\n\x08minor_cm\x18\x04 \x01(\r\x12\x11\n\tangle_deg\x18\x05 \x01(\r\x12/\n\x0cstroke_color\x18\x06 \x01(\x0e\x32\x19.meshtastic.protobuf.Team\x12\x13\n\x0bstroke_argb\x18\x07 \x01(\x07\x12\x19\n\x11stroke_weight_x10\x18\x08 \x01(\r\x12-\n\nfill_color\x18\t \x01(\x0e\x32\x19.meshtastic.protobuf.Team\x12\x11\n\tfill_argb\x18\n \x01(\x07\x12\x11\n\tlabels_on\x18\x0b \x01(\x08\x12\x19\n\x11vertex_lat_deltas\x18\x12 \x03(\x11\x12\x19\n\x11vertex_lon_deltas\x18\x13 \x03(\x11\x12\x11\n\ttruncated\x18\r \x01(\x08\x12\x1c\n\x14\x62ullseye_distance_dm\x18\x0e \x01(\r\x12\x1c\n\x14\x62ullseye_bearing_ref\x18\x0f \x01(\r\x12\x16\n\x0e\x62ullseye_flags\x18\x10 \x01(\r\x12\x18\n\x10\x62ullseye_uid_ref\x18\x11 \x01(\t\"\xe2\x01\n\x04Kind\x12\x14\n\x10Kind_Unspecified\x10\x00\x12\x0f\n\x0bKind_Circle\x10\x01\x12\x12\n\x0eKind_Rectangle\x10\x02\x12\x11\n\rKind_Freeform\x10\x03\x12\x15\n\x11Kind_Telestration\x10\x04\x12\x10\n\x0cKind_Polygon\x10\x05\x12\x16\n\x12Kind_RangingCircle\x10\x06\x12\x11\n\rKind_Bullseye\x10\x07\x12\x10\n\x0cKind_Ellipse\x10\x08\x12\x12\n\x0eKind_Vehicle2D\x10\t\x12\x12\n\x0eKind_Vehicle3D\x10\n\"u\n\tStyleMode\x12\x19\n\x15StyleMode_Unspecified\x10\x00\x12\x18\n\x14StyleMode_StrokeOnly\x10\x01\x12\x16\n\x12StyleMode_FillOnly\x10\x02\x12\x1b\n\x17StyleMode_StrokeAndFill\x10\x03J\x04\x08\x0c\x10\r\"\xf7\x03\n\x06Marker\x12.\n\x04kind\x18\x01 \x01(\x0e\x32 .meshtastic.protobuf.Marker.Kind\x12(\n\x05\x63olor\x18\x02 \x01(\x0e\x32\x19.meshtastic.protobuf.Team\x12\x12\n\ncolor_argb\x18\x03 \x01(\x07\x12\x11\n\treadiness\x18\x04 \x01(\x08\x12\x12\n\nparent_uid\x18\x05 \x01(\t\x12\x13\n\x0bparent_type\x18\x06 \x01(\t\x12\x17\n\x0fparent_callsign\x18\x07 \x01(\t\x12\x0f\n\x07iconset\x18\x08 \x01(\t\"\x98\x02\n\x04Kind\x12\x14\n\x10Kind_Unspecified\x10\x00\x12\r\n\tKind_Spot\x10\x01\x12\x11\n\rKind_Waypoint\x10\x02\x12\x13\n\x0fKind_Checkpoint\x10\x03\x12\x15\n\x11Kind_SelfPosition\x10\x04\x12\x13\n\x0fKind_Symbol2525\x10\x05\x12\x10\n\x0cKind_SpotMap\x10\x06\x12\x13\n\x0fKind_CustomIcon\x10\x07\x12\x12\n\x0eKind_GoToPoint\x10\x08\x12\x15\n\x11Kind_InitialPoint\x10\t\x12\x15\n\x11Kind_ContactPoint\x10\n\x12\x18\n\x14Kind_ObservationPost\x10\x0b\x12\x14\n\x10Kind_ImageMarker\x10\x0c\"\xe0\x01\n\x0fRangeAndBearing\x12\x30\n\x06\x61nchor\x18\x01 \x01(\x0b\x32 .meshtastic.protobuf.CotGeoPoint\x12\x12\n\nanchor_uid\x18\x02 \x01(Line truncated
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.atak_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\nATAKProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_TEAM.values_by_name["Unspecifed_Color"]._options = None
|
||||
_TEAM.values_by_name["Unspecifed_Color"]._serialized_options = b'\312\363\030\020:\016Default (Cyan)'
|
||||
_TEAM.values_by_name["White"]._options = None
|
||||
_TEAM.values_by_name["White"]._serialized_options = b'\312\363\030\007:\005White'
|
||||
_TEAM.values_by_name["Yellow"]._options = None
|
||||
_TEAM.values_by_name["Yellow"]._serialized_options = b'\312\363\030\010:\006Yellow'
|
||||
_TEAM.values_by_name["Orange"]._options = None
|
||||
_TEAM.values_by_name["Orange"]._serialized_options = b'\312\363\030\010:\006Orange'
|
||||
_TEAM.values_by_name["Magenta"]._options = None
|
||||
_TEAM.values_by_name["Magenta"]._serialized_options = b'\312\363\030\t:\007Magenta'
|
||||
_TEAM.values_by_name["Red"]._options = None
|
||||
_TEAM.values_by_name["Red"]._serialized_options = b'\312\363\030\005:\003Red'
|
||||
_TEAM.values_by_name["Maroon"]._options = None
|
||||
_TEAM.values_by_name["Maroon"]._serialized_options = b'\312\363\030\010:\006Maroon'
|
||||
_TEAM.values_by_name["Purple"]._options = None
|
||||
_TEAM.values_by_name["Purple"]._serialized_options = b'\312\363\030\010:\006Purple'
|
||||
_TEAM.values_by_name["Dark_Blue"]._options = None
|
||||
_TEAM.values_by_name["Dark_Blue"]._serialized_options = b'\312\363\030\013:\tDark Blue'
|
||||
_TEAM.values_by_name["Blue"]._options = None
|
||||
_TEAM.values_by_name["Blue"]._serialized_options = b'\312\363\030\006:\004Blue'
|
||||
_TEAM.values_by_name["Cyan"]._options = None
|
||||
_TEAM.values_by_name["Cyan"]._serialized_options = b'\312\363\030\006:\004Cyan'
|
||||
_TEAM.values_by_name["Teal"]._options = None
|
||||
_TEAM.values_by_name["Teal"]._serialized_options = b'\312\363\030\006:\004Teal'
|
||||
_TEAM.values_by_name["Green"]._options = None
|
||||
_TEAM.values_by_name["Green"]._serialized_options = b'\312\363\030\007:\005Green'
|
||||
_TEAM.values_by_name["Dark_Green"]._options = None
|
||||
_TEAM.values_by_name["Dark_Green"]._serialized_options = b'\312\363\030\014:\nDark Green'
|
||||
_TEAM.values_by_name["Brown"]._options = None
|
||||
_TEAM.values_by_name["Brown"]._serialized_options = b'\312\363\030\007:\005Brown'
|
||||
_MEMBERROLE.values_by_name["Unspecifed"]._options = None
|
||||
_MEMBERROLE.values_by_name["Unspecifed"]._serialized_options = b'\312\363\030\027:\025Default (Team Member)'
|
||||
_MEMBERROLE.values_by_name["TeamMember"]._options = None
|
||||
_MEMBERROLE.values_by_name["TeamMember"]._serialized_options = b'\312\363\030\r:\013Team Member'
|
||||
_MEMBERROLE.values_by_name["TeamLead"]._options = None
|
||||
_MEMBERROLE.values_by_name["TeamLead"]._serialized_options = b'\312\363\030\013:\tTeam Lead'
|
||||
_MEMBERROLE.values_by_name["HQ"]._options = None
|
||||
_MEMBERROLE.values_by_name["HQ"]._serialized_options = b'\312\363\030\004:\002HQ'
|
||||
_MEMBERROLE.values_by_name["Sniper"]._options = None
|
||||
_MEMBERROLE.values_by_name["Sniper"]._serialized_options = b'\312\363\030\010:\006Sniper'
|
||||
_MEMBERROLE.values_by_name["Medic"]._options = None
|
||||
_MEMBERROLE.values_by_name["Medic"]._serialized_options = b'\312\363\030\007:\005Medic'
|
||||
_MEMBERROLE.values_by_name["ForwardObserver"]._options = None
|
||||
_MEMBERROLE.values_by_name["ForwardObserver"]._serialized_options = b'\312\363\030\022:\020Forward Observer'
|
||||
_MEMBERROLE.values_by_name["RTO"]._options = None
|
||||
_MEMBERROLE.values_by_name["RTO"]._serialized_options = b'\312\363\030\005:\003RTO'
|
||||
_MEMBERROLE.values_by_name["K9"]._options = None
|
||||
_MEMBERROLE.values_by_name["K9"]._serialized_options = b'\312\363\030\004:\002K9'
|
||||
_TAKTALKROOMDATA.fields_by_name['sender_callsign']._options = None
|
||||
_TAKTALKROOMDATA.fields_by_name['sender_callsign']._serialized_options = b'\030\001'
|
||||
_TEAM._serialized_start=7941
|
||||
_TEAM._serialized_end=8347
|
||||
_MEMBERROLE._serialized_start=8350
|
||||
_MEMBERROLE._serialized_end=8624
|
||||
_COTHOW._serialized_start=8627
|
||||
_COTHOW._serialized_end=8777
|
||||
_COTTYPE._serialized_start=8780
|
||||
_COTTYPE._serialized_end=11727
|
||||
_GEOPOINTSOURCE._serialized_start=11729
|
||||
_GEOPOINTSOURCE._serialized_end=11854
|
||||
_TAKPACKET._serialized_start=98
|
||||
_TAKPACKET._serialized_end=391
|
||||
_GEOCHAT._serialized_start=394
|
||||
_GEOCHAT._serialized_end=775
|
||||
_GEOCHAT_RECEIPTTYPE._serialized_start=626
|
||||
_GEOCHAT_RECEIPTTYPE._serialized_end=710
|
||||
_GROUP._serialized_start=777
|
||||
_GROUP._serialized_end=872
|
||||
_STATUS._serialized_start=874
|
||||
_STATUS._serialized_end=899
|
||||
_CONTACT._serialized_start=901
|
||||
_CONTACT._serialized_end=953
|
||||
_PLI._serialized_start=955
|
||||
_PLI._serialized_end=1050
|
||||
_AIRCRAFTTRACK._serialized_start=1053
|
||||
_AIRCRAFTTRACK._serialized_end=1229
|
||||
_COTGEOPOINT._serialized_start=1231
|
||||
_COTGEOPOINT._serialized_end=1286
|
||||
_DRAWNSHAPE._serialized_start=1289
|
||||
_DRAWNSHAPE._serialized_end=2185
|
||||
_DRAWNSHAPE_KIND._serialized_start=1834
|
||||
_DRAWNSHAPE_KIND._serialized_end=2060
|
||||
_DRAWNSHAPE_STYLEMODE._serialized_start=2062
|
||||
_DRAWNSHAPE_STYLEMODE._serialized_end=2179
|
||||
_MARKER._serialized_start=2188
|
||||
_MARKER._serialized_end=2691
|
||||
_MARKER_KIND._serialized_start=2411
|
||||
_MARKER_KIND._serialized_end=2691
|
||||
_RANGEANDBEARING._serialized_start=2694
|
||||
_RANGEANDBEARING._serialized_end=2918
|
||||
_ROUTE._serialized_start=2921
|
||||
_ROUTE._serialized_end=3473
|
||||
_ROUTE_LINK._serialized_start=3148
|
||||
_ROUTE_LINK._serialized_end=3253
|
||||
_ROUTE_METHOD._serialized_start=3256
|
||||
_ROUTE_METHOD._serialized_end=3391
|
||||
_ROUTE_DIRECTION._serialized_start=3393
|
||||
_ROUTE_DIRECTION._serialized_end=3473
|
||||
_CASEVACREPORT._serialized_start=3476
|
||||
_CASEVACREPORT._serialized_end=4878
|
||||
_CASEVACREPORT_PRECEDENCE._serialized_start=4400
|
||||
_CASEVACREPORT_PRECEDENCE._serialized_end=4571
|
||||
_CASEVACREPORT_HLZMARKING._serialized_start=4574
|
||||
_CASEVACREPORT_HLZMARKING._serialized_end=4729
|
||||
_CASEVACREPORT_SECURITY._serialized_start=4732
|
||||
_CASEVACREPORT_SECURITY._serialized_end=4878
|
||||
_ZMISTENTRY._serialized_start=4880
|
||||
_ZMISTENTRY._serialized_end=4962
|
||||
_EMERGENCYALERT._serialized_start=4965
|
||||
_EMERGENCYALERT._serialized_end=5243
|
||||
_EMERGENCYALERT_TYPE._serialized_start=5093
|
||||
_EMERGENCYALERT_TYPE._serialized_end=5243
|
||||
_TASKREQUEST._serialized_start=5246
|
||||
_TASKREQUEST._serialized_end=5718
|
||||
_TASKREQUEST_PRIORITY._serialized_start=5454
|
||||
_TASKREQUEST_PRIORITY._serialized_end=5571
|
||||
_TASKREQUEST_STATUS._serialized_start=5574
|
||||
_TASKREQUEST_STATUS._serialized_end=5718
|
||||
_TAKENVIRONMENT._serialized_start=5720
|
||||
_TAKENVIRONMENT._serialized_end=5816
|
||||
_SENSORFOV._serialized_start=5819
|
||||
_SENSORFOV._serialized_end=6225
|
||||
_SENSORFOV_SENSORTYPE._serialized_start=6043
|
||||
_SENSORFOV_SENSORTYPE._serialized_end=6213
|
||||
_TAKTALKMESSAGE._serialized_start=6227
|
||||
_TAKTALKMESSAGE._serialized_end=6312
|
||||
_TAKTALKROOMDATA._serialized_start=6314
|
||||
_TAKTALKROOMDATA._serialized_end=6418
|
||||
_MARTI._serialized_start=6420
|
||||
_MARTI._serialized_end=6450
|
||||
_TAKPACKETV2._serialized_start=6453
|
||||
_TAKPACKETV2._serialized_end=7938
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,757 +0,0 @@
|
||||
from meshtastic.protobuf import field_metadata_pb2 as _field_metadata_pb2
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
Blue: Team
|
||||
Brown: Team
|
||||
CotHow_Unspecified: CotHow
|
||||
CotHow_h_e: CotHow
|
||||
CotHow_h_g_i_g_o: CotHow
|
||||
CotHow_m_f: CotHow
|
||||
CotHow_m_g: CotHow
|
||||
CotHow_m_p: CotHow
|
||||
CotHow_m_r: CotHow
|
||||
CotHow_m_s: CotHow
|
||||
CotType_Other: CotType
|
||||
CotType_a_f_A: CotType
|
||||
CotType_a_f_A_C: CotType
|
||||
CotType_a_f_A_C_F: CotType
|
||||
CotType_a_f_A_C_H: CotType
|
||||
CotType_a_f_A_C_L: CotType
|
||||
CotType_a_f_A_M: CotType
|
||||
CotType_a_f_A_M_F: CotType
|
||||
CotType_a_f_A_M_F_C_H: CotType
|
||||
CotType_a_f_A_M_F_F: CotType
|
||||
CotType_a_f_A_M_F_L: CotType
|
||||
CotType_a_f_A_M_F_P: CotType
|
||||
CotType_a_f_A_M_F_U_L: CotType
|
||||
CotType_a_f_A_M_H: CotType
|
||||
CotType_a_f_A_M_H_A: CotType
|
||||
CotType_a_f_A_M_H_C: CotType
|
||||
CotType_a_f_A_M_H_Q: CotType
|
||||
CotType_a_f_A_M_H_U_M: CotType
|
||||
CotType_a_f_F_B: CotType
|
||||
CotType_a_f_G: CotType
|
||||
CotType_a_f_G_E: CotType
|
||||
CotType_a_f_G_E_S: CotType
|
||||
CotType_a_f_G_E_S_E: CotType
|
||||
CotType_a_f_G_E_V: CotType
|
||||
CotType_a_f_G_E_V_A: CotType
|
||||
CotType_a_f_G_E_V_A_T: CotType
|
||||
CotType_a_f_G_E_V_C: CotType
|
||||
CotType_a_f_G_E_V_C_U: CotType
|
||||
CotType_a_f_G_E_V_C_ps: CotType
|
||||
CotType_a_f_G_E_X_M: CotType
|
||||
CotType_a_f_G_I: CotType
|
||||
CotType_a_f_G_U: CotType
|
||||
CotType_a_f_G_U_C: CotType
|
||||
CotType_a_f_G_U_C_E_C_W: CotType
|
||||
CotType_a_f_G_U_C_F: CotType
|
||||
CotType_a_f_G_U_C_F_T_A: CotType
|
||||
CotType_a_f_G_U_C_I: CotType
|
||||
CotType_a_f_G_U_C_I_L: CotType
|
||||
CotType_a_f_G_U_C_I_Z: CotType
|
||||
CotType_a_f_G_U_C_I_d: CotType
|
||||
CotType_a_f_G_U_C_R_O: CotType
|
||||
CotType_a_f_G_U_C_R_V: CotType
|
||||
CotType_a_f_G_U_C_R_X: CotType
|
||||
CotType_a_f_G_U_C_V_S: CotType
|
||||
CotType_a_f_G_U_H: CotType
|
||||
CotType_a_f_G_U_S_M_C: CotType
|
||||
CotType_a_f_G_U_U_M_S_E: CotType
|
||||
CotType_a_f_S: CotType
|
||||
CotType_a_f_S_N_N_R: CotType
|
||||
CotType_a_h_A: CotType
|
||||
CotType_a_h_A_M_F_F: CotType
|
||||
CotType_a_h_A_M_H_A: CotType
|
||||
CotType_a_h_G: CotType
|
||||
CotType_a_h_G_E_V: CotType
|
||||
CotType_a_h_G_E_V_A_T: CotType
|
||||
CotType_a_h_G_E_X_M: CotType
|
||||
CotType_a_h_G_I: CotType
|
||||
CotType_a_h_G_U_C_F: CotType
|
||||
CotType_a_h_G_U_C_I: CotType
|
||||
CotType_a_h_G_U_C_I_d: CotType
|
||||
CotType_a_h_S: CotType
|
||||
CotType_a_n_A: CotType
|
||||
CotType_a_n_A_C: CotType
|
||||
CotType_a_n_A_C_F: CotType
|
||||
CotType_a_n_A_C_H: CotType
|
||||
CotType_a_n_A_M_F_F: CotType
|
||||
CotType_a_n_A_M_F_Q: CotType
|
||||
CotType_a_n_G: CotType
|
||||
CotType_a_n_G_E_V: CotType
|
||||
CotType_a_n_G_E_V_A_T: CotType
|
||||
CotType_a_n_G_E_X_M: CotType
|
||||
CotType_a_n_G_I: CotType
|
||||
CotType_a_n_G_U_C_F: CotType
|
||||
CotType_a_n_G_U_C_I: CotType
|
||||
CotType_a_n_G_U_C_I_d: CotType
|
||||
CotType_a_n_S: CotType
|
||||
CotType_a_u_A: CotType
|
||||
CotType_a_u_A_C: CotType
|
||||
CotType_a_u_A_C_F: CotType
|
||||
CotType_a_u_G: CotType
|
||||
CotType_a_u_G_E_V: CotType
|
||||
CotType_a_u_G_E_V_A_T: CotType
|
||||
CotType_a_u_G_E_X_M: CotType
|
||||
CotType_a_u_G_I: CotType
|
||||
CotType_a_u_G_U_C_F: CotType
|
||||
CotType_a_u_G_U_C_I: CotType
|
||||
CotType_a_u_G_U_C_I_d: CotType
|
||||
CotType_a_u_S: CotType
|
||||
CotType_b_a_g: CotType
|
||||
CotType_b_a_o_c: CotType
|
||||
CotType_b_a_o_can: CotType
|
||||
CotType_b_a_o_opn: CotType
|
||||
CotType_b_a_o_pan: CotType
|
||||
CotType_b_a_o_tbl: CotType
|
||||
CotType_b_f_t_a: CotType
|
||||
CotType_b_f_t_r: CotType
|
||||
CotType_b_i_v: CotType
|
||||
CotType_b_i_x_i: CotType
|
||||
CotType_b_m_p_c: CotType
|
||||
CotType_b_m_p_c_cp: CotType
|
||||
CotType_b_m_p_c_ip: CotType
|
||||
CotType_b_m_p_s_m: CotType
|
||||
CotType_b_m_p_s_p_i: CotType
|
||||
CotType_b_m_p_s_p_loc: CotType
|
||||
CotType_b_m_p_s_p_op: CotType
|
||||
CotType_b_m_p_w: CotType
|
||||
CotType_b_m_p_w_GOTO: CotType
|
||||
CotType_b_m_r: CotType
|
||||
CotType_b_r_f_h_c: CotType
|
||||
CotType_b_t_f: CotType
|
||||
CotType_b_t_f_d: CotType
|
||||
CotType_b_t_f_r: CotType
|
||||
CotType_m_t_t: CotType
|
||||
CotType_t_s: CotType
|
||||
CotType_t_x_d_d: CotType
|
||||
CotType_u_d_c_c: CotType
|
||||
CotType_u_d_c_e: CotType
|
||||
CotType_u_d_f: CotType
|
||||
CotType_u_d_f_m: CotType
|
||||
CotType_u_d_p: CotType
|
||||
CotType_u_d_r: CotType
|
||||
CotType_u_d_v: CotType
|
||||
CotType_u_d_v_m: CotType
|
||||
CotType_u_r_b_bullseye: CotType
|
||||
CotType_u_r_b_c_c: CotType
|
||||
CotType_u_rb_a: CotType
|
||||
CotType_y: CotType
|
||||
Cyan: Team
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
Dark_Blue: Team
|
||||
Dark_Green: Team
|
||||
ForwardObserver: MemberRole
|
||||
GeoPointSource_GPS: GeoPointSource
|
||||
GeoPointSource_NETWORK: GeoPointSource
|
||||
GeoPointSource_USER: GeoPointSource
|
||||
GeoPointSource_Unspecified: GeoPointSource
|
||||
Green: Team
|
||||
HQ: MemberRole
|
||||
K9: MemberRole
|
||||
Magenta: Team
|
||||
Maroon: Team
|
||||
Medic: MemberRole
|
||||
Orange: Team
|
||||
Purple: Team
|
||||
RTO: MemberRole
|
||||
Red: Team
|
||||
Sniper: MemberRole
|
||||
Teal: Team
|
||||
TeamLead: MemberRole
|
||||
TeamMember: MemberRole
|
||||
Unspecifed: MemberRole
|
||||
Unspecifed_Color: Team
|
||||
White: Team
|
||||
Yellow: Team
|
||||
|
||||
class AircraftTrack(_message.Message):
|
||||
__slots__ = ["aircraft_type", "category", "cot_host_id", "flight", "gps", "icao", "registration", "rssi_x10", "squawk"]
|
||||
AIRCRAFT_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
CATEGORY_FIELD_NUMBER: _ClassVar[int]
|
||||
COT_HOST_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
FLIGHT_FIELD_NUMBER: _ClassVar[int]
|
||||
GPS_FIELD_NUMBER: _ClassVar[int]
|
||||
ICAO_FIELD_NUMBER: _ClassVar[int]
|
||||
REGISTRATION_FIELD_NUMBER: _ClassVar[int]
|
||||
RSSI_X10_FIELD_NUMBER: _ClassVar[int]
|
||||
SQUAWK_FIELD_NUMBER: _ClassVar[int]
|
||||
aircraft_type: str
|
||||
category: str
|
||||
cot_host_id: str
|
||||
flight: str
|
||||
gps: bool
|
||||
icao: str
|
||||
registration: str
|
||||
rssi_x10: int
|
||||
squawk: int
|
||||
def __init__(self, icao: _Optional[str] = ..., registration: _Optional[str] = ..., flight: _Optional[str] = ..., aircraft_type: _Optional[str] = ..., squawk: _Optional[int] = ..., category: _Optional[str] = ..., rssi_x10: _Optional[int] = ..., gps: bool = ..., cot_host_id: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class CasevacReport(_message.Message):
|
||||
__slots__ = ["ambulatory_patients", "child", "convenience_count", "enemy", "epw", "equipment_detail", "equipment_flags", "frequency", "friendlies", "hlz_marking", "hlz_remarks", "litter_patients", "marked_by", "medline_remarks", "non_us_civilian", "non_us_military", "obstacles", "precedence", "priority_count", "routine_count", "security", "terrain_flags", "terrain_other_detail", "terrain_slope_dir", "title", "urgent_count", "urgent_surgical_count", "us_civilian", "us_military", "winds_are_from", "zmist", "zone_marker", "zone_protected_coord"]
|
||||
class HlzMarking(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class Precedence(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class Security(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
AMBULATORY_PATIENTS_FIELD_NUMBER: _ClassVar[int]
|
||||
CHILD_FIELD_NUMBER: _ClassVar[int]
|
||||
CONVENIENCE_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
ENEMY_FIELD_NUMBER: _ClassVar[int]
|
||||
EPW_FIELD_NUMBER: _ClassVar[int]
|
||||
EQUIPMENT_DETAIL_FIELD_NUMBER: _ClassVar[int]
|
||||
EQUIPMENT_FLAGS_FIELD_NUMBER: _ClassVar[int]
|
||||
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
|
||||
FRIENDLIES_FIELD_NUMBER: _ClassVar[int]
|
||||
HLZ_MARKING_FIELD_NUMBER: _ClassVar[int]
|
||||
HLZ_REMARKS_FIELD_NUMBER: _ClassVar[int]
|
||||
HlzMarking_None: CasevacReport.HlzMarking
|
||||
HlzMarking_Other: CasevacReport.HlzMarking
|
||||
HlzMarking_Panels: CasevacReport.HlzMarking
|
||||
HlzMarking_PyroSignal: CasevacReport.HlzMarking
|
||||
HlzMarking_Smoke: CasevacReport.HlzMarking
|
||||
HlzMarking_Unspecified: CasevacReport.HlzMarking
|
||||
LITTER_PATIENTS_FIELD_NUMBER: _ClassVar[int]
|
||||
MARKED_BY_FIELD_NUMBER: _ClassVar[int]
|
||||
MEDLINE_REMARKS_FIELD_NUMBER: _ClassVar[int]
|
||||
NON_US_CIVILIAN_FIELD_NUMBER: _ClassVar[int]
|
||||
NON_US_MILITARY_FIELD_NUMBER: _ClassVar[int]
|
||||
OBSTACLES_FIELD_NUMBER: _ClassVar[int]
|
||||
PRECEDENCE_FIELD_NUMBER: _ClassVar[int]
|
||||
PRIORITY_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
Precedence_Convenience: CasevacReport.Precedence
|
||||
Precedence_Priority: CasevacReport.Precedence
|
||||
Precedence_Routine: CasevacReport.Precedence
|
||||
Precedence_Unspecified: CasevacReport.Precedence
|
||||
Precedence_Urgent: CasevacReport.Precedence
|
||||
Precedence_UrgentSurgical: CasevacReport.Precedence
|
||||
ROUTINE_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
SECURITY_FIELD_NUMBER: _ClassVar[int]
|
||||
Security_EnemyInArea: CasevacReport.Security
|
||||
Security_EnemyInArmedContact: CasevacReport.Security
|
||||
Security_NoEnemy: CasevacReport.Security
|
||||
Security_PossibleEnemy: CasevacReport.Security
|
||||
Security_Unspecified: CasevacReport.Security
|
||||
TERRAIN_FLAGS_FIELD_NUMBER: _ClassVar[int]
|
||||
TERRAIN_OTHER_DETAIL_FIELD_NUMBER: _ClassVar[int]
|
||||
TERRAIN_SLOPE_DIR_FIELD_NUMBER: _ClassVar[int]
|
||||
TITLE_FIELD_NUMBER: _ClassVar[int]
|
||||
URGENT_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
URGENT_SURGICAL_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
US_CIVILIAN_FIELD_NUMBER: _ClassVar[int]
|
||||
US_MILITARY_FIELD_NUMBER: _ClassVar[int]
|
||||
WINDS_ARE_FROM_FIELD_NUMBER: _ClassVar[int]
|
||||
ZMIST_FIELD_NUMBER: _ClassVar[int]
|
||||
ZONE_MARKER_FIELD_NUMBER: _ClassVar[int]
|
||||
ZONE_PROTECTED_COORD_FIELD_NUMBER: _ClassVar[int]
|
||||
ambulatory_patients: int
|
||||
child: int
|
||||
convenience_count: int
|
||||
enemy: str
|
||||
epw: int
|
||||
equipment_detail: str
|
||||
equipment_flags: int
|
||||
frequency: str
|
||||
friendlies: str
|
||||
hlz_marking: CasevacReport.HlzMarking
|
||||
hlz_remarks: str
|
||||
litter_patients: int
|
||||
marked_by: str
|
||||
medline_remarks: str
|
||||
non_us_civilian: int
|
||||
non_us_military: int
|
||||
obstacles: str
|
||||
precedence: CasevacReport.Precedence
|
||||
priority_count: int
|
||||
routine_count: int
|
||||
security: CasevacReport.Security
|
||||
terrain_flags: int
|
||||
terrain_other_detail: str
|
||||
terrain_slope_dir: str
|
||||
title: str
|
||||
urgent_count: int
|
||||
urgent_surgical_count: int
|
||||
us_civilian: int
|
||||
us_military: int
|
||||
winds_are_from: str
|
||||
zmist: _containers.RepeatedCompositeFieldContainer[ZMistEntry]
|
||||
zone_marker: str
|
||||
zone_protected_coord: str
|
||||
def __init__(self, precedence: _Optional[_Union[CasevacReport.Precedence, str]] = ..., equipment_flags: _Optional[int] = ..., litter_patients: _Optional[int] = ..., ambulatory_patients: _Optional[int] = ..., security: _Optional[_Union[CasevacReport.Security, str]] = ..., hlz_marking: _Optional[_Union[CasevacReport.HlzMarking, str]] = ..., zone_marker: _Optional[str] = ..., us_military: _Optional[int] = ..., us_civilian: _Optional[int] = ..., non_us_military: _Optional[int] = ..., non_us_civilian: _Optional[int] = ..., epw: _Optional[int] = ..., child: _Optional[int] = ..., terrain_flags: _Optional[int] = ..., frequency: _Optional[str] = ..., title: _Optional[str] = ..., medline_remarks: _Optional[str] = ..., urgent_count: _Optional[int] = ..., urgent_surgical_count: _Optional[int] = ..., priority_count: _Optional[int] = ..., routine_count: _Optional[int] = ..., convenience_count: _Optional[int] = ..., equipment_detail: _Optional[str] = ..., zone_protected_coord: _Optional[str] = ..., terrain_slope_dir: _Optional[str] = ..., terrain_other_detail: _Optional[str] = ..., marked_by: _Optional[str] = ..., obstacles: _Optional[str] = ..., winds_are_from: _Optional[str] = ..., friendlies: _Optional[str] = ..., enemy: _Optional[str] = ..., hlz_remarks: _Optional[str] = ..., zmist: _Optional[_Iterable[_Union[ZMistEntry, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class Contact(_message.Message):
|
||||
__slots__ = ["callsign", "device_callsign"]
|
||||
CALLSIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
callsign: str
|
||||
device_callsign: str
|
||||
def __init__(self, callsign: _Optional[str] = ..., device_callsign: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class CotGeoPoint(_message.Message):
|
||||
__slots__ = ["lat_delta_i", "lon_delta_i"]
|
||||
LAT_DELTA_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LON_DELTA_I_FIELD_NUMBER: _ClassVar[int]
|
||||
lat_delta_i: int
|
||||
lon_delta_i: int
|
||||
def __init__(self, lat_delta_i: _Optional[int] = ..., lon_delta_i: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class DrawnShape(_message.Message):
|
||||
__slots__ = ["angle_deg", "bullseye_bearing_ref", "bullseye_distance_dm", "bullseye_flags", "bullseye_uid_ref", "fill_argb", "fill_color", "kind", "labels_on", "major_cm", "minor_cm", "stroke_argb", "stroke_color", "stroke_weight_x10", "style", "truncated", "vertex_lat_deltas", "vertex_lon_deltas"]
|
||||
class Kind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class StyleMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ANGLE_DEG_FIELD_NUMBER: _ClassVar[int]
|
||||
BULLSEYE_BEARING_REF_FIELD_NUMBER: _ClassVar[int]
|
||||
BULLSEYE_DISTANCE_DM_FIELD_NUMBER: _ClassVar[int]
|
||||
BULLSEYE_FLAGS_FIELD_NUMBER: _ClassVar[int]
|
||||
BULLSEYE_UID_REF_FIELD_NUMBER: _ClassVar[int]
|
||||
FILL_ARGB_FIELD_NUMBER: _ClassVar[int]
|
||||
FILL_COLOR_FIELD_NUMBER: _ClassVar[int]
|
||||
KIND_FIELD_NUMBER: _ClassVar[int]
|
||||
Kind_Bullseye: DrawnShape.Kind
|
||||
Kind_Circle: DrawnShape.Kind
|
||||
Kind_Ellipse: DrawnShape.Kind
|
||||
Kind_Freeform: DrawnShape.Kind
|
||||
Kind_Polygon: DrawnShape.Kind
|
||||
Kind_RangingCircle: DrawnShape.Kind
|
||||
Kind_Rectangle: DrawnShape.Kind
|
||||
Kind_Telestration: DrawnShape.Kind
|
||||
Kind_Unspecified: DrawnShape.Kind
|
||||
Kind_Vehicle2D: DrawnShape.Kind
|
||||
Kind_Vehicle3D: DrawnShape.Kind
|
||||
LABELS_ON_FIELD_NUMBER: _ClassVar[int]
|
||||
MAJOR_CM_FIELD_NUMBER: _ClassVar[int]
|
||||
MINOR_CM_FIELD_NUMBER: _ClassVar[int]
|
||||
STROKE_ARGB_FIELD_NUMBER: _ClassVar[int]
|
||||
STROKE_COLOR_FIELD_NUMBER: _ClassVar[int]
|
||||
STROKE_WEIGHT_X10_FIELD_NUMBER: _ClassVar[int]
|
||||
STYLE_FIELD_NUMBER: _ClassVar[int]
|
||||
StyleMode_FillOnly: DrawnShape.StyleMode
|
||||
StyleMode_StrokeAndFill: DrawnShape.StyleMode
|
||||
StyleMode_StrokeOnly: DrawnShape.StyleMode
|
||||
StyleMode_Unspecified: DrawnShape.StyleMode
|
||||
TRUNCATED_FIELD_NUMBER: _ClassVar[int]
|
||||
VERTEX_LAT_DELTAS_FIELD_NUMBER: _ClassVar[int]
|
||||
VERTEX_LON_DELTAS_FIELD_NUMBER: _ClassVar[int]
|
||||
angle_deg: int
|
||||
bullseye_bearing_ref: int
|
||||
bullseye_distance_dm: int
|
||||
bullseye_flags: int
|
||||
bullseye_uid_ref: str
|
||||
fill_argb: int
|
||||
fill_color: Team
|
||||
kind: DrawnShape.Kind
|
||||
labels_on: bool
|
||||
major_cm: int
|
||||
minor_cm: int
|
||||
stroke_argb: int
|
||||
stroke_color: Team
|
||||
stroke_weight_x10: int
|
||||
style: DrawnShape.StyleMode
|
||||
truncated: bool
|
||||
vertex_lat_deltas: _containers.RepeatedScalarFieldContainer[int]
|
||||
vertex_lon_deltas: _containers.RepeatedScalarFieldContainer[int]
|
||||
def __init__(self, kind: _Optional[_Union[DrawnShape.Kind, str]] = ..., style: _Optional[_Union[DrawnShape.StyleMode, str]] = ..., major_cm: _Optional[int] = ..., minor_cm: _Optional[int] = ..., angle_deg: _Optional[int] = ..., stroke_color: _Optional[_Union[Team, str]] = ..., stroke_argb: _Optional[int] = ..., stroke_weight_x10: _Optional[int] = ..., fill_color: _Optional[_Union[Team, str]] = ..., fill_argb: _Optional[int] = ..., labels_on: bool = ..., vertex_lat_deltas: _Optional[_Iterable[int]] = ..., vertex_lon_deltas: _Optional[_Iterable[int]] = ..., truncated: bool = ..., bullseye_distance_dm: _Optional[int] = ..., bullseye_bearing_ref: _Optional[int] = ..., bullseye_flags: _Optional[int] = ..., bullseye_uid_ref: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class EmergencyAlert(_message.Message):
|
||||
__slots__ = ["authoring_uid", "cancel_reference_uid", "type"]
|
||||
class Type(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
AUTHORING_UID_FIELD_NUMBER: _ClassVar[int]
|
||||
CANCEL_REFERENCE_UID_FIELD_NUMBER: _ClassVar[int]
|
||||
TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
Type_Alert911: EmergencyAlert.Type
|
||||
Type_Cancel: EmergencyAlert.Type
|
||||
Type_Custom: EmergencyAlert.Type
|
||||
Type_GeoFenceBreached: EmergencyAlert.Type
|
||||
Type_InContact: EmergencyAlert.Type
|
||||
Type_RingTheBell: EmergencyAlert.Type
|
||||
Type_Unspecified: EmergencyAlert.Type
|
||||
authoring_uid: str
|
||||
cancel_reference_uid: str
|
||||
type: EmergencyAlert.Type
|
||||
def __init__(self, type: _Optional[_Union[EmergencyAlert.Type, str]] = ..., authoring_uid: _Optional[str] = ..., cancel_reference_uid: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class GeoChat(_message.Message):
|
||||
__slots__ = ["lang", "message", "receipt_for_uid", "receipt_type", "room_id", "to", "to_callsign", "voice_profile_id"]
|
||||
class ReceiptType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
LANG_FIELD_NUMBER: _ClassVar[int]
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
RECEIPT_FOR_UID_FIELD_NUMBER: _ClassVar[int]
|
||||
RECEIPT_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
ROOM_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
ReceiptType_Delivered: GeoChat.ReceiptType
|
||||
ReceiptType_None: GeoChat.ReceiptType
|
||||
ReceiptType_Read: GeoChat.ReceiptType
|
||||
TO_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
TO_FIELD_NUMBER: _ClassVar[int]
|
||||
VOICE_PROFILE_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
lang: str
|
||||
message: str
|
||||
receipt_for_uid: str
|
||||
receipt_type: GeoChat.ReceiptType
|
||||
room_id: str
|
||||
to: str
|
||||
to_callsign: str
|
||||
voice_profile_id: str
|
||||
def __init__(self, message: _Optional[str] = ..., to: _Optional[str] = ..., to_callsign: _Optional[str] = ..., receipt_for_uid: _Optional[str] = ..., receipt_type: _Optional[_Union[GeoChat.ReceiptType, str]] = ..., lang: _Optional[str] = ..., room_id: _Optional[str] = ..., voice_profile_id: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class Group(_message.Message):
|
||||
__slots__ = ["role", "team"]
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
TEAM_FIELD_NUMBER: _ClassVar[int]
|
||||
role: MemberRole
|
||||
team: Team
|
||||
def __init__(self, role: _Optional[_Union[MemberRole, str]] = ..., team: _Optional[_Union[Team, str]] = ...) -> None: ...
|
||||
|
||||
class Marker(_message.Message):
|
||||
__slots__ = ["color", "color_argb", "iconset", "kind", "parent_callsign", "parent_type", "parent_uid", "readiness"]
|
||||
class Kind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
COLOR_ARGB_FIELD_NUMBER: _ClassVar[int]
|
||||
COLOR_FIELD_NUMBER: _ClassVar[int]
|
||||
ICONSET_FIELD_NUMBER: _ClassVar[int]
|
||||
KIND_FIELD_NUMBER: _ClassVar[int]
|
||||
Kind_Checkpoint: Marker.Kind
|
||||
Kind_ContactPoint: Marker.Kind
|
||||
Kind_CustomIcon: Marker.Kind
|
||||
Kind_GoToPoint: Marker.Kind
|
||||
Kind_ImageMarker: Marker.Kind
|
||||
Kind_InitialPoint: Marker.Kind
|
||||
Kind_ObservationPost: Marker.Kind
|
||||
Kind_SelfPosition: Marker.Kind
|
||||
Kind_Spot: Marker.Kind
|
||||
Kind_SpotMap: Marker.Kind
|
||||
Kind_Symbol2525: Marker.Kind
|
||||
Kind_Unspecified: Marker.Kind
|
||||
Kind_Waypoint: Marker.Kind
|
||||
PARENT_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
PARENT_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
PARENT_UID_FIELD_NUMBER: _ClassVar[int]
|
||||
READINESS_FIELD_NUMBER: _ClassVar[int]
|
||||
color: Team
|
||||
color_argb: int
|
||||
iconset: str
|
||||
kind: Marker.Kind
|
||||
parent_callsign: str
|
||||
parent_type: str
|
||||
parent_uid: str
|
||||
readiness: bool
|
||||
def __init__(self, kind: _Optional[_Union[Marker.Kind, str]] = ..., color: _Optional[_Union[Team, str]] = ..., color_argb: _Optional[int] = ..., readiness: bool = ..., parent_uid: _Optional[str] = ..., parent_type: _Optional[str] = ..., parent_callsign: _Optional[str] = ..., iconset: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class Marti(_message.Message):
|
||||
__slots__ = ["dest_callsign"]
|
||||
DEST_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
dest_callsign: _containers.RepeatedScalarFieldContainer[str]
|
||||
def __init__(self, dest_callsign: _Optional[_Iterable[str]] = ...) -> None: ...
|
||||
|
||||
class PLI(_message.Message):
|
||||
__slots__ = ["altitude", "course", "latitude_i", "longitude_i", "speed"]
|
||||
ALTITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
COURSE_FIELD_NUMBER: _ClassVar[int]
|
||||
LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
SPEED_FIELD_NUMBER: _ClassVar[int]
|
||||
altitude: int
|
||||
course: int
|
||||
latitude_i: int
|
||||
longitude_i: int
|
||||
speed: int
|
||||
def __init__(self, latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., speed: _Optional[int] = ..., course: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class RangeAndBearing(_message.Message):
|
||||
__slots__ = ["anchor", "anchor_uid", "bearing_cdeg", "range_cm", "stroke_argb", "stroke_color", "stroke_weight_x10"]
|
||||
ANCHOR_FIELD_NUMBER: _ClassVar[int]
|
||||
ANCHOR_UID_FIELD_NUMBER: _ClassVar[int]
|
||||
BEARING_CDEG_FIELD_NUMBER: _ClassVar[int]
|
||||
RANGE_CM_FIELD_NUMBER: _ClassVar[int]
|
||||
STROKE_ARGB_FIELD_NUMBER: _ClassVar[int]
|
||||
STROKE_COLOR_FIELD_NUMBER: _ClassVar[int]
|
||||
STROKE_WEIGHT_X10_FIELD_NUMBER: _ClassVar[int]
|
||||
anchor: CotGeoPoint
|
||||
anchor_uid: str
|
||||
bearing_cdeg: int
|
||||
range_cm: int
|
||||
stroke_argb: int
|
||||
stroke_color: Team
|
||||
stroke_weight_x10: int
|
||||
def __init__(self, anchor: _Optional[_Union[CotGeoPoint, _Mapping]] = ..., anchor_uid: _Optional[str] = ..., range_cm: _Optional[int] = ..., bearing_cdeg: _Optional[int] = ..., stroke_color: _Optional[_Union[Team, str]] = ..., stroke_argb: _Optional[int] = ..., stroke_weight_x10: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class Route(_message.Message):
|
||||
__slots__ = ["direction", "links", "method", "prefix", "stroke_weight_x10", "truncated"]
|
||||
class Direction(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class Method(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class Link(_message.Message):
|
||||
__slots__ = ["callsign", "link_type", "point", "uid"]
|
||||
CALLSIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
LINK_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
POINT_FIELD_NUMBER: _ClassVar[int]
|
||||
UID_FIELD_NUMBER: _ClassVar[int]
|
||||
callsign: str
|
||||
link_type: int
|
||||
point: CotGeoPoint
|
||||
uid: str
|
||||
def __init__(self, point: _Optional[_Union[CotGeoPoint, _Mapping]] = ..., uid: _Optional[str] = ..., callsign: _Optional[str] = ..., link_type: _Optional[int] = ...) -> None: ...
|
||||
DIRECTION_FIELD_NUMBER: _ClassVar[int]
|
||||
Direction_Exfil: Route.Direction
|
||||
Direction_Infil: Route.Direction
|
||||
Direction_Unspecified: Route.Direction
|
||||
LINKS_FIELD_NUMBER: _ClassVar[int]
|
||||
METHOD_FIELD_NUMBER: _ClassVar[int]
|
||||
Method_Driving: Route.Method
|
||||
Method_Flying: Route.Method
|
||||
Method_Swimming: Route.Method
|
||||
Method_Unspecified: Route.Method
|
||||
Method_Walking: Route.Method
|
||||
Method_Watercraft: Route.Method
|
||||
PREFIX_FIELD_NUMBER: _ClassVar[int]
|
||||
STROKE_WEIGHT_X10_FIELD_NUMBER: _ClassVar[int]
|
||||
TRUNCATED_FIELD_NUMBER: _ClassVar[int]
|
||||
direction: Route.Direction
|
||||
links: _containers.RepeatedCompositeFieldContainer[Route.Link]
|
||||
method: Route.Method
|
||||
prefix: str
|
||||
stroke_weight_x10: int
|
||||
truncated: bool
|
||||
def __init__(self, method: _Optional[_Union[Route.Method, str]] = ..., direction: _Optional[_Union[Route.Direction, str]] = ..., prefix: _Optional[str] = ..., stroke_weight_x10: _Optional[int] = ..., links: _Optional[_Iterable[_Union[Route.Link, _Mapping]]] = ..., truncated: bool = ...) -> None: ...
|
||||
|
||||
class SensorFov(_message.Message):
|
||||
__slots__ = ["azimuth_deg", "elevation_deg", "fov_horizontal_deg", "fov_vertical_deg", "model", "range_m", "roll_deg", "type"]
|
||||
class SensorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
AZIMUTH_DEG_FIELD_NUMBER: _ClassVar[int]
|
||||
ELEVATION_DEG_FIELD_NUMBER: _ClassVar[int]
|
||||
FOV_HORIZONTAL_DEG_FIELD_NUMBER: _ClassVar[int]
|
||||
FOV_VERTICAL_DEG_FIELD_NUMBER: _ClassVar[int]
|
||||
MODEL_FIELD_NUMBER: _ClassVar[int]
|
||||
RANGE_M_FIELD_NUMBER: _ClassVar[int]
|
||||
ROLL_DEG_FIELD_NUMBER: _ClassVar[int]
|
||||
SensorType_Camera: SensorFov.SensorType
|
||||
SensorType_Laser: SensorFov.SensorType
|
||||
SensorType_Nvg: SensorFov.SensorType
|
||||
SensorType_Other: SensorFov.SensorType
|
||||
SensorType_Rf: SensorFov.SensorType
|
||||
SensorType_Thermal: SensorFov.SensorType
|
||||
SensorType_Unspecified: SensorFov.SensorType
|
||||
TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
azimuth_deg: int
|
||||
elevation_deg: int
|
||||
fov_horizontal_deg: int
|
||||
fov_vertical_deg: int
|
||||
model: str
|
||||
range_m: int
|
||||
roll_deg: int
|
||||
type: SensorFov.SensorType
|
||||
def __init__(self, type: _Optional[_Union[SensorFov.SensorType, str]] = ..., azimuth_deg: _Optional[int] = ..., range_m: _Optional[int] = ..., fov_horizontal_deg: _Optional[int] = ..., fov_vertical_deg: _Optional[int] = ..., elevation_deg: _Optional[int] = ..., roll_deg: _Optional[int] = ..., model: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class Status(_message.Message):
|
||||
__slots__ = ["battery"]
|
||||
BATTERY_FIELD_NUMBER: _ClassVar[int]
|
||||
battery: int
|
||||
def __init__(self, battery: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class TAKEnvironment(_message.Message):
|
||||
__slots__ = ["temperature_c_x10", "wind_direction_deg", "wind_speed_cm_s"]
|
||||
TEMPERATURE_C_X10_FIELD_NUMBER: _ClassVar[int]
|
||||
WIND_DIRECTION_DEG_FIELD_NUMBER: _ClassVar[int]
|
||||
WIND_SPEED_CM_S_FIELD_NUMBER: _ClassVar[int]
|
||||
temperature_c_x10: int
|
||||
wind_direction_deg: int
|
||||
wind_speed_cm_s: int
|
||||
def __init__(self, temperature_c_x10: _Optional[int] = ..., wind_direction_deg: _Optional[int] = ..., wind_speed_cm_s: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class TAKPacket(_message.Message):
|
||||
__slots__ = ["chat", "contact", "detail", "group", "is_compressed", "pli", "status"]
|
||||
CHAT_FIELD_NUMBER: _ClassVar[int]
|
||||
CONTACT_FIELD_NUMBER: _ClassVar[int]
|
||||
DETAIL_FIELD_NUMBER: _ClassVar[int]
|
||||
GROUP_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_COMPRESSED_FIELD_NUMBER: _ClassVar[int]
|
||||
PLI_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
chat: GeoChat
|
||||
contact: Contact
|
||||
detail: bytes
|
||||
group: Group
|
||||
is_compressed: bool
|
||||
pli: PLI
|
||||
status: Status
|
||||
def __init__(self, is_compressed: bool = ..., contact: _Optional[_Union[Contact, _Mapping]] = ..., group: _Optional[_Union[Group, _Mapping]] = ..., status: _Optional[_Union[Status, _Mapping]] = ..., pli: _Optional[_Union[PLI, _Mapping]] = ..., chat: _Optional[_Union[GeoChat, _Mapping]] = ..., detail: _Optional[bytes] = ...) -> None: ...
|
||||
|
||||
class TAKPacketV2(_message.Message):
|
||||
__slots__ = ["aircraft", "alt_src", "altitude", "battery", "callsign", "casevac", "chat", "cot_type_id", "cot_type_str", "course", "device_callsign", "emergency", "endpoint", "environment", "geo_src", "how", "latitude_i", "longitude_i", "marker", "marti", "phone", "rab", "raw_detail", "remarks", "role", "route", "sensor_fov", "shape", "speed", "stale_seconds", "tak_device", "tak_os", "tak_platform", "tak_version", "taktalk", "taktalk_room", "task", "team", "uid"]
|
||||
AIRCRAFT_FIELD_NUMBER: _ClassVar[int]
|
||||
ALTITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
ALT_SRC_FIELD_NUMBER: _ClassVar[int]
|
||||
BATTERY_FIELD_NUMBER: _ClassVar[int]
|
||||
CALLSIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
CASEVAC_FIELD_NUMBER: _ClassVar[int]
|
||||
CHAT_FIELD_NUMBER: _ClassVar[int]
|
||||
COT_TYPE_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
COT_TYPE_STR_FIELD_NUMBER: _ClassVar[int]
|
||||
COURSE_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
EMERGENCY_FIELD_NUMBER: _ClassVar[int]
|
||||
ENDPOINT_FIELD_NUMBER: _ClassVar[int]
|
||||
ENVIRONMENT_FIELD_NUMBER: _ClassVar[int]
|
||||
GEO_SRC_FIELD_NUMBER: _ClassVar[int]
|
||||
HOW_FIELD_NUMBER: _ClassVar[int]
|
||||
LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
MARKER_FIELD_NUMBER: _ClassVar[int]
|
||||
MARTI_FIELD_NUMBER: _ClassVar[int]
|
||||
PHONE_FIELD_NUMBER: _ClassVar[int]
|
||||
RAB_FIELD_NUMBER: _ClassVar[int]
|
||||
RAW_DETAIL_FIELD_NUMBER: _ClassVar[int]
|
||||
REMARKS_FIELD_NUMBER: _ClassVar[int]
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
ROUTE_FIELD_NUMBER: _ClassVar[int]
|
||||
SENSOR_FOV_FIELD_NUMBER: _ClassVar[int]
|
||||
SHAPE_FIELD_NUMBER: _ClassVar[int]
|
||||
SPEED_FIELD_NUMBER: _ClassVar[int]
|
||||
STALE_SECONDS_FIELD_NUMBER: _ClassVar[int]
|
||||
TAKTALK_FIELD_NUMBER: _ClassVar[int]
|
||||
TAKTALK_ROOM_FIELD_NUMBER: _ClassVar[int]
|
||||
TAK_DEVICE_FIELD_NUMBER: _ClassVar[int]
|
||||
TAK_OS_FIELD_NUMBER: _ClassVar[int]
|
||||
TAK_PLATFORM_FIELD_NUMBER: _ClassVar[int]
|
||||
TAK_VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
TASK_FIELD_NUMBER: _ClassVar[int]
|
||||
TEAM_FIELD_NUMBER: _ClassVar[int]
|
||||
UID_FIELD_NUMBER: _ClassVar[int]
|
||||
aircraft: AircraftTrack
|
||||
alt_src: GeoPointSource
|
||||
altitude: int
|
||||
battery: int
|
||||
callsign: str
|
||||
casevac: CasevacReport
|
||||
chat: GeoChat
|
||||
cot_type_id: CotType
|
||||
cot_type_str: str
|
||||
course: int
|
||||
device_callsign: str
|
||||
emergency: EmergencyAlert
|
||||
endpoint: str
|
||||
environment: TAKEnvironment
|
||||
geo_src: GeoPointSource
|
||||
how: CotHow
|
||||
latitude_i: int
|
||||
longitude_i: int
|
||||
marker: Marker
|
||||
marti: Marti
|
||||
phone: str
|
||||
rab: RangeAndBearing
|
||||
raw_detail: bytes
|
||||
remarks: str
|
||||
role: MemberRole
|
||||
route: Route
|
||||
sensor_fov: SensorFov
|
||||
shape: DrawnShape
|
||||
speed: int
|
||||
stale_seconds: int
|
||||
tak_device: str
|
||||
tak_os: str
|
||||
tak_platform: str
|
||||
tak_version: str
|
||||
taktalk: TakTalkMessage
|
||||
taktalk_room: TakTalkRoomData
|
||||
task: TaskRequest
|
||||
team: Team
|
||||
uid: str
|
||||
def __init__(self, cot_type_id: _Optional[_Union[CotType, str]] = ..., how: _Optional[_Union[CotHow, str]] = ..., callsign: _Optional[str] = ..., team: _Optional[_Union[Team, str]] = ..., role: _Optional[_Union[MemberRole, str]] = ..., latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., speed: _Optional[int] = ..., course: _Optional[int] = ..., battery: _Optional[int] = ..., geo_src: _Optional[_Union[GeoPointSource, str]] = ..., alt_src: _Optional[_Union[GeoPointSource, str]] = ..., uid: _Optional[str] = ..., device_callsign: _Optional[str] = ..., stale_seconds: _Optional[int] = ..., tak_version: _Optional[str] = ..., tak_device: _Optional[str] = ..., tak_platform: _Optional[str] = ..., tak_os: _Optional[str] = ..., endpoint: _Optional[str] = ..., phone: _Optional[str] = ..., cot_type_str: _Optional[str] = ..., remarks: _Optional[str] = ..., environment: _Optional[_Union[TAKEnvironment, _Mapping]] = ..., sensor_fov: _Optional[_Union[SensorFov, _Mapping]] = ..., marti: _Optional[_Union[Marti, _Mapping]] = ..., chat: _Optional[_Union[GeoChat, _Mapping]] = ..., aircraft: _Optional[_Union[AircraftTrack, _Mapping]] = ..., raw_detail: _Optional[bytes] = ..., shape: _Optional[_Union[DrawnShape, _Mapping]] = ..., marker: _Optional[_Union[Marker, _Mapping]] = ..., rab: _Optional[_Union[RangeAndBearing, _Mapping]] = ..., route: _Optional[_Union[Route, _Mapping]] = ..., casevac: _Optional[_Union[CasevacReport, _Mapping]] = ..., emergency: _Optional[_Union[EmergencyAlert, _Mapping]] = ..., task: _Optional[_Union[TaskRequest, _Mapping]] = ..., taktalk: _Optional[_Union[TakTalkMessage, _Mapping]] = ..., taktalk_room: _Optional[_Union[TakTalkRoomData, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class TakTalkMessage(_message.Message):
|
||||
__slots__ = ["chatroom_id", "from_voice", "lang", "text"]
|
||||
CHATROOM_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
FROM_VOICE_FIELD_NUMBER: _ClassVar[int]
|
||||
LANG_FIELD_NUMBER: _ClassVar[int]
|
||||
TEXT_FIELD_NUMBER: _ClassVar[int]
|
||||
chatroom_id: str
|
||||
from_voice: bool
|
||||
lang: str
|
||||
text: str
|
||||
def __init__(self, text: _Optional[str] = ..., chatroom_id: _Optional[str] = ..., lang: _Optional[str] = ..., from_voice: bool = ...) -> None: ...
|
||||
|
||||
class TakTalkRoomData(_message.Message):
|
||||
__slots__ = ["participants", "room_id", "room_name", "sender_callsign"]
|
||||
PARTICIPANTS_FIELD_NUMBER: _ClassVar[int]
|
||||
ROOM_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
ROOM_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
SENDER_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
|
||||
participants: _containers.RepeatedScalarFieldContainer[str]
|
||||
room_id: str
|
||||
room_name: str
|
||||
sender_callsign: str
|
||||
def __init__(self, sender_callsign: _Optional[str] = ..., room_id: _Optional[str] = ..., room_name: _Optional[str] = ..., participants: _Optional[_Iterable[str]] = ...) -> None: ...
|
||||
|
||||
class TaskRequest(_message.Message):
|
||||
__slots__ = ["assignee_uid", "note", "priority", "status", "target_uid", "task_type"]
|
||||
class Priority(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class Status(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ASSIGNEE_UID_FIELD_NUMBER: _ClassVar[int]
|
||||
NOTE_FIELD_NUMBER: _ClassVar[int]
|
||||
PRIORITY_FIELD_NUMBER: _ClassVar[int]
|
||||
Priority_Critical: TaskRequest.Priority
|
||||
Priority_High: TaskRequest.Priority
|
||||
Priority_Low: TaskRequest.Priority
|
||||
Priority_Normal: TaskRequest.Priority
|
||||
Priority_Unspecified: TaskRequest.Priority
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
Status_Acknowledged: TaskRequest.Status
|
||||
Status_Cancelled: TaskRequest.Status
|
||||
Status_Completed: TaskRequest.Status
|
||||
Status_InProgress: TaskRequest.Status
|
||||
Status_Pending: TaskRequest.Status
|
||||
Status_Unspecified: TaskRequest.Status
|
||||
TARGET_UID_FIELD_NUMBER: _ClassVar[int]
|
||||
TASK_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
assignee_uid: str
|
||||
note: str
|
||||
priority: TaskRequest.Priority
|
||||
status: TaskRequest.Status
|
||||
target_uid: str
|
||||
task_type: str
|
||||
def __init__(self, task_type: _Optional[str] = ..., target_uid: _Optional[str] = ..., assignee_uid: _Optional[str] = ..., priority: _Optional[_Union[TaskRequest.Priority, str]] = ..., status: _Optional[_Union[TaskRequest.Status, str]] = ..., note: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class ZMistEntry(_message.Message):
|
||||
__slots__ = ["i", "m", "s", "t", "title", "z"]
|
||||
I_FIELD_NUMBER: _ClassVar[int]
|
||||
M_FIELD_NUMBER: _ClassVar[int]
|
||||
S_FIELD_NUMBER: _ClassVar[int]
|
||||
TITLE_FIELD_NUMBER: _ClassVar[int]
|
||||
T_FIELD_NUMBER: _ClassVar[int]
|
||||
Z_FIELD_NUMBER: _ClassVar[int]
|
||||
i: str
|
||||
m: str
|
||||
s: str
|
||||
t: str
|
||||
title: str
|
||||
z: str
|
||||
def __init__(self, title: _Optional[str] = ..., z: _Optional[str] = ..., m: _Optional[str] = ..., i: _Optional[str] = ..., s: _Optional[str] = ..., t: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class Team(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class MemberRole(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class CotHow(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class CotType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class GeoPointSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
@@ -1,26 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/cannedmessages.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(meshtastic/protobuf/cannedmessages.proto\x12\x13meshtastic.protobuf\"-\n\x19\x43\x61nnedMessageModuleConfig\x12\x10\n\x08messages\x18\x01 \x01(\tBo\n\x14org.meshtastic.protoB\x19\x43\x61nnedMessageConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.cannedmessages_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\031CannedMessageConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CANNEDMESSAGEMODULECONFIG._serialized_start=65
|
||||
_CANNEDMESSAGEMODULECONFIG._serialized_end=110
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,11 +0,0 @@
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Optional as _Optional
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class CannedMessageModuleConfig(_message.Message):
|
||||
__slots__ = ["messages"]
|
||||
MESSAGES_FIELD_NUMBER: _ClassVar[int]
|
||||
messages: str
|
||||
def __init__(self, messages: _Optional[str] = ...) -> None: ...
|
||||
@@ -1,34 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/channel.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!meshtastic/protobuf/channel.proto\x12\x13meshtastic.protobuf\"\xd3\x01\n\x0f\x43hannelSettings\x12\x17\n\x0b\x63hannel_num\x18\x01 \x01(\rB\x02\x18\x01\x12\x0b\n\x03psk\x18\x02 \x01(\x0c\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\n\n\x02id\x18\x04 \x01(\x07\x12\x16\n\x0euplink_enabled\x18\x05 \x01(\x08\x12\x18\n\x10\x64ownlink_enabled\x18\x06 \x01(\x08\x12<\n\x0fmodule_settings\x18\x07 \x01(\x0b\x32#.meshtastic.protobuf.ModuleSettings\x12\x10\n\x08use_aead\x18\x08 \x01(\x08\">\n\x0eModuleSettings\x12\x1a\n\x12position_precision\x18\x01 \x01(\r\x12\x10\n\x08is_muted\x18\x02 \x01(\x08\"\xb3\x01\n\x07\x43hannel\x12\r\n\x05index\x18\x01 \x01(\x05\x12\x36\n\x08settings\x18\x02 \x01(\x0b\x32$.meshtastic.protobuf.ChannelSettings\x12/\n\x04role\x18\x03 \x01(\x0e\x32!.meshtastic.protobuf.Channel.Role\"0\n\x04Role\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07PRIMARY\x10\x01\x12\r\n\tSECONDARY\x10\x02\x42\x63\n\x14org.meshtastic.protoB\rChannelProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.channel_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\rChannelProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CHANNELSETTINGS.fields_by_name['channel_num']._options = None
|
||||
_CHANNELSETTINGS.fields_by_name['channel_num']._serialized_options = b'\030\001'
|
||||
_CHANNELSETTINGS._serialized_start=59
|
||||
_CHANNELSETTINGS._serialized_end=270
|
||||
_MODULESETTINGS._serialized_start=272
|
||||
_MODULESETTINGS._serialized_end=334
|
||||
_CHANNEL._serialized_start=337
|
||||
_CHANNEL._serialized_end=516
|
||||
_CHANNEL_ROLE._serialized_start=468
|
||||
_CHANNEL_ROLE._serialized_end=516
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,49 +0,0 @@
|
||||
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class Channel(_message.Message):
|
||||
__slots__ = ["index", "role", "settings"]
|
||||
class Role(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
DISABLED: Channel.Role
|
||||
INDEX_FIELD_NUMBER: _ClassVar[int]
|
||||
PRIMARY: Channel.Role
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
SECONDARY: Channel.Role
|
||||
SETTINGS_FIELD_NUMBER: _ClassVar[int]
|
||||
index: int
|
||||
role: Channel.Role
|
||||
settings: ChannelSettings
|
||||
def __init__(self, index: _Optional[int] = ..., settings: _Optional[_Union[ChannelSettings, _Mapping]] = ..., role: _Optional[_Union[Channel.Role, str]] = ...) -> None: ...
|
||||
|
||||
class ChannelSettings(_message.Message):
|
||||
__slots__ = ["channel_num", "downlink_enabled", "id", "module_settings", "name", "psk", "uplink_enabled", "use_aead"]
|
||||
CHANNEL_NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
DOWNLINK_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
ID_FIELD_NUMBER: _ClassVar[int]
|
||||
MODULE_SETTINGS_FIELD_NUMBER: _ClassVar[int]
|
||||
NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
PSK_FIELD_NUMBER: _ClassVar[int]
|
||||
UPLINK_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
USE_AEAD_FIELD_NUMBER: _ClassVar[int]
|
||||
channel_num: int
|
||||
downlink_enabled: bool
|
||||
id: int
|
||||
module_settings: ModuleSettings
|
||||
name: str
|
||||
psk: bytes
|
||||
uplink_enabled: bool
|
||||
use_aead: bool
|
||||
def __init__(self, channel_num: _Optional[int] = ..., psk: _Optional[bytes] = ..., name: _Optional[str] = ..., id: _Optional[int] = ..., uplink_enabled: bool = ..., downlink_enabled: bool = ..., module_settings: _Optional[_Union[ModuleSettings, _Mapping]] = ..., use_aead: bool = ...) -> None: ...
|
||||
|
||||
class ModuleSettings(_message.Message):
|
||||
__slots__ = ["is_muted", "position_precision"]
|
||||
IS_MUTED_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_PRECISION_FIELD_NUMBER: _ClassVar[int]
|
||||
is_muted: bool
|
||||
position_precision: int
|
||||
def __init__(self, position_precision: _Optional[int] = ..., is_muted: bool = ...) -> None: ...
|
||||
@@ -1,28 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/clientonly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import localonly_pb2 as meshtastic_dot_protobuf_dot_localonly__pb2
|
||||
from meshtastic.protobuf import mesh_pb2 as meshtastic_dot_protobuf_dot_mesh__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$meshtastic/protobuf/clientonly.proto\x12\x13meshtastic.protobuf\x1a#meshtastic/protobuf/localonly.proto\x1a\x1emeshtastic/protobuf/mesh.proto\"\xa0\x04\n\rDeviceProfile\x12\x16\n\tlong_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nshort_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63hannel_url\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x35\n\x06\x63onfig\x18\x04 \x01(\x0b\x32 .meshtastic.protobuf.LocalConfigH\x03\x88\x01\x01\x12\x42\n\rmodule_config\x18\x05 \x01(\x0b\x32&.meshtastic.protobuf.LocalModuleConfigH\x04\x88\x01\x01\x12:\n\x0e\x66ixed_position\x18\x06 \x01(\x0b\x32\x1d.meshtastic.protobuf.PositionH\x05\x88\x01\x01\x12\x15\n\x08ringtone\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0f\x63\x61nned_messages\x18\x08 \x01(\tH\x07\x88\x01\x01\x12\x1c\n\x0fis_unmessagable\x18\t \x01(\x08H\x08\x88\x01\x01\x12\x18\n\x0bis_licensed\x18\n \x01(\x08H\t\x88\x01\x01\x42\x0c\n\n_long_nameB\r\n\x0b_short_nameB\x0e\n\x0c_channel_urlB\t\n\x07_configB\x10\n\x0e_module_configB\x11\n\x0f_fixed_positionB\x0b\n\t_ringtoneB\x12\n\x10_canned_messagesB\x12\n\x10_is_unmessagableB\x0e\n\x0c_is_licensedBf\n\x14org.meshtastic.protoB\x10\x43lientOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.clientonly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\020ClientOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_DEVICEPROFILE._serialized_start=131
|
||||
_DEVICEPROFILE._serialized_end=675
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,31 +0,0 @@
|
||||
from meshtastic.protobuf import localonly_pb2 as _localonly_pb2
|
||||
from meshtastic.protobuf import mesh_pb2 as _mesh_pb2
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class DeviceProfile(_message.Message):
|
||||
__slots__ = ["canned_messages", "channel_url", "config", "fixed_position", "is_licensed", "is_unmessagable", "long_name", "module_config", "ringtone", "short_name"]
|
||||
CANNED_MESSAGES_FIELD_NUMBER: _ClassVar[int]
|
||||
CHANNEL_URL_FIELD_NUMBER: _ClassVar[int]
|
||||
CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
FIXED_POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_LICENSED_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_UNMESSAGABLE_FIELD_NUMBER: _ClassVar[int]
|
||||
LONG_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
MODULE_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
RINGTONE_FIELD_NUMBER: _ClassVar[int]
|
||||
SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
canned_messages: str
|
||||
channel_url: str
|
||||
config: _localonly_pb2.LocalConfig
|
||||
fixed_position: _mesh_pb2.Position
|
||||
is_licensed: bool
|
||||
is_unmessagable: bool
|
||||
long_name: str
|
||||
module_config: _localonly_pb2.LocalModuleConfig
|
||||
ringtone: str
|
||||
short_name: str
|
||||
def __init__(self, long_name: _Optional[str] = ..., short_name: _Optional[str] = ..., channel_url: _Optional[str] = ..., config: _Optional[_Union[_localonly_pb2.LocalConfig, _Mapping]] = ..., module_config: _Optional[_Union[_localonly_pb2.LocalModuleConfig, _Mapping]] = ..., fixed_position: _Optional[_Union[_mesh_pb2.Position, _Mapping]] = ..., ringtone: _Optional[str] = ..., canned_messages: _Optional[str] = ..., is_unmessagable: bool = ..., is_licensed: bool = ...) -> None: ...
|
||||
@@ -1,484 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/config.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import device_ui_pb2 as meshtastic_dot_protobuf_dot_device__ui__pb2
|
||||
from meshtastic.protobuf import field_metadata_pb2 as meshtastic_dot_protobuf_dot_field__metadata__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n meshtastic/protobuf/config.proto\x12\x13meshtastic.protobuf\x1a#meshtastic/protobuf/device_ui.proto\x1a(meshtastic/protobuf/field_metadata.proto\"\x93\x86\x01\n\x06\x43onfig\x12:\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32(.meshtastic.protobuf.Config.DeviceConfigH\x00\x12>\n\x08position\x18\x02 \x01(\x0b\x32*.meshtastic.protobuf.Config.PositionConfigH\x00\x12\x38\n\x05power\x18\x03 \x01(\x0b\x32\'.meshtastic.protobuf.Config.PowerConfigH\x00\x12<\n\x07network\x18\x04 \x01(\x0b\x32).meshtastic.protobuf.Config.NetworkConfigH\x00\x12<\n\x07\x64isplay\x18\x05 \x01(\x0b\x32).meshtastic.protobuf.Config.DisplayConfigH\x00\x12\x36\n\x04lora\x18\x06 \x01(\x0b\x32&.meshtastic.protobuf.Config.LoRaConfigH\x00\x12@\n\tbluetooth\x18\x07 \x01(\x0b\x32+.meshtastic.protobuf.Config.BluetoothConfigH\x00\x12>\n\x08security\x18\x08 \x01(\x0b\x32*.meshtastic.protobuf.Config.SecurityConfigH\x00\x12\x42\n\nsessionkey\x18\t \x01(\x0b\x32,.meshtastic.protobuf.Config.SessionkeyConfigH\x00\x12\x38\n\tdevice_ui\x18\n \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x1a\x80\x1f\n\x0c\x44\x65viceConfig\x12N\n\x04role\x18\x01 \x01(\x0e\x32-.meshtastic.protobuf.Config.DeviceConfig.RoleB\x11\xca\xf3\x18\r:\x0b\x44\x65vice Role\x12\x1a\n\x0eserial_enabled\x18\x02 \x01(\x08\x42\x02\x18\x01\x12u\n\x0b\x62utton_gpio\x18\x04 \x01(\rB`\xca\xf3\x18\\:\x0b\x42utton GPIOBMGPIO pin for the user button, can be remapped on boards with multiple buttons\x12\x43\n\x0b\x62uzzer_gpio\x18\x05 \x01(\rB.\xca\xf3\x18*:\x0b\x42uzzer GPIOB\x1bGPIO pin for the PWM buzzer\x12j\n\x10rebroadcast_mode\x18\x06 \x01(\x0e\x32\x38.meshtastic.protobuf.Config.DeviceConfig.RebroadcastModeB\x16\xca\xf3\x18\x12:\x10Rebroadcast Mode\x12\x9a\x01\n\x18node_info_broadcast_secs\x18\x07 \x01(\rBx\xca\xf3\x18t\x19\x00\x00\x00\x00\x00 \xac@*\x01s:\x1cNode Info Broadcast IntervalBHHow often node information is sent. Defaults to 3 hours, minimum 1 hour.\x12\x84\x01\n\x1a\x64ouble_tap_as_button_press\x18\x08 \x01(\x08\x42`\xca\xf3\x18\\:\x14\x44ouble Tap as ButtonBDTreat double tap on supported accelerometers as a user button press.\x12\x16\n\nis_managed\x18\t \x01(\x08\x42\x02\x18\x01\x12i\n\x14\x64isable_triple_click\x18\n \x01(\x08\x42K\xca\xf3\x18G:\x14\x44isable Triple ClickB/Disables the user button triple-press shortcut.\x12@\n\x05tzdef\x18\x0b \x01(\tB1\xca\xf3\x18-:\tTime ZoneB POSIX timezone definition string\x12\xc5\x01\n\x16led_heartbeat_disabled\x18\x0c \x01(\x08\x42\xa4\x01\xca\xf3\x18\x9f\x01:\x15\x44isable LED HeartbeatB\x85\x01Turns off the blinking LED on the device. On most devices this is one of up to 4 LEDs; the charger and GPS LEDs are not controllable.\x12U\n\x0b\x62uzzer_mode\x18\r \x01(\x0e\x32\x33.meshtastic.protobuf.Config.DeviceConfig.BuzzerModeB\x0b\xca\xf3\x18\x07R\x05\x32.7.0\"\xef\x0b\n\x04Role\x12G\n\x06\x43LIENT\x10\x00\x1a;\xca\xf3\x18\x37:\x06\x43lientB-App connected or standalone messaging device.\x12\\\n\x0b\x43LIENT_MUTE\x10\x01\x1aK\xca\xf3\x18G:\x0b\x43lient MuteB8Device that does not forward packets from other devices.\x12\xae\x01\n\x06ROUTER\x10\x02\x1a\xa1\x01\xca\xf3\x18\x9c\x01:\x06RouterB\x91\x01Infrastructure node on a tower or mountain top only. Not to be used for roofs or mobile nodes. Needs exceptional coverage. Visible in Nodes list.\x12(\n\rROUTER_CLIENT\x10\x03\x1a\x15\x08\x01\xca\xf3\x18\x0f:\rRouter Client\x12\xb3\x01\n\x08REPEATER\x10\x04\x1a\xa4\x01\x08\x01\xca\xf3\x18\x9d\x01:\x08RepeaterB\x90\x01\x44\x65precated infrastructure role that creates gaps in the mesh rebroadcast chain. Switch this node to a Router-based role (Router or Router Late).\x12H\n\x07TRACKER\x10\x05\x1a;\xca\xf3\x18\x37:\x07TrackerB,Broadcasts GPS position packets as priority.\x12\x43\n\x06SENSOR\x10\x06\x1a\x37\xca\xf3\x18\x33:\x06SensorB)Broadcasts telemetry packets as priority.\x12X\n\x03TAK\x10\x07\x1aO\xca\xf3\x18K:\x03TAKBDOptimized for ATAK system communication, reduces routine broadcasts.\x12k\n\rCLIENT_HIDDEN\x10\x08\x1aX\xca\xf3\x18T:\rClient HiddenBCDevice that only broadcasts as needed for stealth or power savings.\x12\x85\x01\n\x0eLOST_AND_FOUND\x10\t\x1aq\xca\xf3\x18m:\x0eLost and FoundB[Broadcasts location as message to default channel regularly to assist with device recovery.\x12h\n\x0bTAK_TRACKER\x10\n\x1aW\xca\xf3\x18S:\x0bTAK TrackerBDEnables automatic TAK PLI broadcasts and reduces routine broadcasts.\x12\xbc\x01\n\x0bROUTER_LATE\x10\x0b\x1a\xaa\x01\xca\xf3\x18\xa5\x01:\x0bRouter LateB\x95\x01Infrastructure node that always rebroadcasts packets once but only after all other modes. Visible in Nodes list. Not a good choice for rooftop nodes.\x12\xa7\x01\n\x0b\x43LIENT_BASE\x10\x0c\x1a\x95\x01\xca\xf3\x18\x90\x01:\x0b\x43lient BaseB\x80\x01Rooftop or attic node that rebroadcasts like Router Late for packets from or to favorited nodes, and like Client for all others.\"\xf6\x08\n\x0fRebroadcastMode\x12\x8c\x01\n\x03\x41LL\x10\x00\x1a\x82\x01\xca\xf3\x18~:\x03\x41llBwRebroadcast anLine truncated
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.config_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\014ConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["CLIENT"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["CLIENT"]._serialized_options = b'\312\363\0307:\006ClientB-App connected or standalone messaging device.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["CLIENT_MUTE"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["CLIENT_MUTE"]._serialized_options = b'\312\363\030G:\013Client MuteB8Device that does not forward packets from other devices.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["ROUTER"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["ROUTER"]._serialized_options = b'\312\363\030\234\001:\006RouterB\221\001Infrastructure node on a tower or mountain top only. Not to be used for roofs or mobile nodes. Needs exceptional coverage. Visible in Nodes list.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["ROUTER_CLIENT"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["ROUTER_CLIENT"]._serialized_options = b'\010\001\312\363\030\017:\rRouter Client'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["REPEATER"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["REPEATER"]._serialized_options = b'\010\001\312\363\030\235\001:\010RepeaterB\220\001Deprecated infrastructure role that creates gaps in the mesh rebroadcast chain. Switch this node to a Router-based role (Router or Router Late).'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["TRACKER"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["TRACKER"]._serialized_options = b'\312\363\0307:\007TrackerB,Broadcasts GPS position packets as priority.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["SENSOR"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["SENSOR"]._serialized_options = b'\312\363\0303:\006SensorB)Broadcasts telemetry packets as priority.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["TAK"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["TAK"]._serialized_options = b'\312\363\030K:\003TAKBDOptimized for ATAK system communication, reduces routine broadcasts.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["CLIENT_HIDDEN"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["CLIENT_HIDDEN"]._serialized_options = b'\312\363\030T:\rClient HiddenBCDevice that only broadcasts as needed for stealth or power savings.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["LOST_AND_FOUND"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["LOST_AND_FOUND"]._serialized_options = b'\312\363\030m:\016Lost and FoundB[Broadcasts location as message to default channel regularly to assist with device recovery.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["TAK_TRACKER"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["TAK_TRACKER"]._serialized_options = b'\312\363\030S:\013TAK TrackerBDEnables automatic TAK PLI broadcasts and reduces routine broadcasts.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["ROUTER_LATE"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["ROUTER_LATE"]._serialized_options = b'\312\363\030\245\001:\013Router LateB\225\001Infrastructure node that always rebroadcasts packets once but only after all other modes. Visible in Nodes list. Not a good choice for rooftop nodes.'
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["CLIENT_BASE"]._options = None
|
||||
_CONFIG_DEVICECONFIG_ROLE.values_by_name["CLIENT_BASE"]._serialized_options = b'\312\363\030\220\001:\013Client BaseB\200\001Rooftop or attic node that rebroadcasts like Router Late for packets from or to favorited nodes, and like Client for all others.'
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["ALL"]._options = None
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["ALL"]._serialized_options = b'\312\363\030~:\003AllBwRebroadcast any observed message, if it was on our private channel or from another channel with the same LoRa settings.'
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["ALL_SKIP_DECODING"]._options = None
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["ALL_SKIP_DECODING"]._serialized_options = b'\312\363\030~:\021All Skip DecodingBiBehaves as All. Skipping packet decoding applied only to the Repeater role, which is no longer supported.'
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["LOCAL_ONLY"]._options = None
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["LOCAL_ONLY"]._serialized_options = b'\312\363\030\271\001:\nLocal OnlyB\252\001Ignores observed messages from foreign meshes that are open or those which it cannot decrypt. Only rebroadcasts messages on the node\'s local primary / secondary channels.'
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["KNOWN_ONLY"]._options = None
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["KNOWN_ONLY"]._serialized_options = b'\312\363\030\264\001:\nKnown OnlyB\245\001Ignores observed messages from foreign meshes like Local Only, but takes it a step further by also ignoring messages from nodes not already in the node\'s known list.'
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["NONE"]._options = None
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["NONE"]._serialized_options = b'\312\363\030n:\004NoneBfInhibits all rebroadcasts, like the Client Mute role. Not allowed on the Router and Router Late roles.'
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["CORE_PORTNUMS_ONLY"]._options = None
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE.values_by_name["CORE_PORTNUMS_ONLY"]._serialized_options = b'\312\363\030\373\001:\022Core Portnums OnlyB\344\001Ignores packets on non-core portnums such as Range Test, PAX Counter and ATAK, and does not rebroadcast them. Core portnums include Text, Position, NodeInfo, Telemetry, Routing, Admin, Waypoint, Traceroute and Store and Forward.'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['role']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['role']._serialized_options = b'\312\363\030\r:\013Device Role'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['serial_enabled']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['serial_enabled']._serialized_options = b'\030\001'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['button_gpio']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['button_gpio']._serialized_options = b'\312\363\030\\:\013Button GPIOBMGPIO pin for the user button, can be remapped on boards with multiple buttons'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['buzzer_gpio']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['buzzer_gpio']._serialized_options = b'\312\363\030*:\013Buzzer GPIOB\033GPIO pin for the PWM buzzer'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['rebroadcast_mode']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['rebroadcast_mode']._serialized_options = b'\312\363\030\022:\020Rebroadcast Mode'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['node_info_broadcast_secs']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['node_info_broadcast_secs']._serialized_options = b'\312\363\030t\031\000\000\000\000\000 \254@*\001s:\034Node Info Broadcast IntervalBHHow often node information is sent. Defaults to 3 hours, minimum 1 hour.'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['double_tap_as_button_press']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['double_tap_as_button_press']._serialized_options = b'\312\363\030\\:\024Double Tap as ButtonBDTreat double tap on supported accelerometers as a user button press.'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['is_managed']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['is_managed']._serialized_options = b'\030\001'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['disable_triple_click']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['disable_triple_click']._serialized_options = b'\312\363\030G:\024Disable Triple ClickB/Disables the user button triple-press shortcut.'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['tzdef']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['tzdef']._serialized_options = b'\312\363\030-:\tTime ZoneB POSIX timezone definition string'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['led_heartbeat_disabled']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['led_heartbeat_disabled']._serialized_options = b'\312\363\030\237\001:\025Disable LED HeartbeatB\205\001Turns off the blinking LED on the device. On most devices this is one of up to 4 LEDs; the charger and GPS LEDs are not controllable.'
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['buzzer_mode']._options = None
|
||||
_CONFIG_DEVICECONFIG.fields_by_name['buzzer_mode']._serialized_options = b'\312\363\030\007R\0052.7.0'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["ALTITUDE"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["ALTITUDE"]._serialized_options = b'\312\363\030Q:\010AltitudeBEInclude an altitude value in position reports, when one is available.'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["ALTITUDE_MSL"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["ALTITUDE_MSL"]._serialized_options = b'\312\363\030\034:\032Altitude is Mean Sea Level'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["GEOIDAL_SEPARATION"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["GEOIDAL_SEPARATION"]._serialized_options = b'\312\363\030\035:\033Altitude Geoidal Separation'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["DOP"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["DOP"]._serialized_options = b'\312\363\030H:\003DOPBAInclude the dilution of precision value. PDOP is used by default.'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["HVDOP"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["HVDOP"]._serialized_options = b'\312\363\030Q:\013HDOP / VDOPBBIf DOP is set, send separate HDOP and VDOP values instead of PDOP.'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["SATINVIEW"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["SATINVIEW"]._serialized_options = b'\312\363\030\026:\024Number of satellites'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["SEQ_NO"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["SEQ_NO"]._serialized_options = b'\312\363\030\021:\017Sequence number'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["TIMESTAMP"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["TIMESTAMP"]._serialized_options = b'\312\363\030\013:\tTimestamp'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["HEADING"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["HEADING"]._serialized_options = b'\312\363\030\021:\017Vehicle heading'
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["SPEED"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS.values_by_name["SPEED"]._serialized_options = b'\312\363\030\017:\rVehicle speed'
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE.values_by_name["DISABLED"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE.values_by_name["DISABLED"]._serialized_options = b'\312\363\030\n:\010Disabled'
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE.values_by_name["ENABLED"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE.values_by_name["ENABLED"]._serialized_options = b'\312\363\030\t:\007Enabled'
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE.values_by_name["NOT_PRESENT"]._options = None
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE.values_by_name["NOT_PRESENT"]._serialized_options = b'\312\363\030\r:\013Not Present'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['position_broadcast_secs']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['position_broadcast_secs']._serialized_options = b'\312\363\030T*\001s:\022Broadcast IntervalB;The longest a node will go without broadcasting a position.'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['position_broadcast_smart_enabled']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['position_broadcast_smart_enabled']._serialized_options = b'\312\363\030\020:\016Smart Position'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['fixed_position']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['fixed_position']._serialized_options = b'\312\363\030\224\001:\016Fixed PositionB\201\001The last known latitude, longitude and altitude are broadcast over the mesh on the position interval, rather than a live GPS fix.'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_enabled']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_enabled']._serialized_options = b'\030\001'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_update_interval']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_update_interval']._serialized_options = b'\312\363\030=*\001s:\017Update IntervalB\'How often to try to get a GPS position.'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_attempt_time']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_attempt_time']._serialized_options = b'\030\001'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['position_flags']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['position_flags']._serialized_options = b'\312\363\030N:\016Position FlagsB<Optional fields to include when assembling position messages'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['rx_gpio']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['rx_gpio']._serialized_options = b'\312\363\030)\010\001:\020GPS Receive GPIOB\023GPIO pin for GPS RX'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['tx_gpio']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['tx_gpio']._serialized_options = b'\312\363\030*\010\001:\021GPS Transmit GPIOB\023GPIO pin for GPS TX'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['broadcast_smart_minimum_distance']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['broadcast_smart_minimum_distance']._serialized_options = b'\312\363\030f*\001m:\020Minimum DistanceBOThe minimum change in distance before a smart position broadcast is considered.'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['broadcast_smart_minimum_interval_secs']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['broadcast_smart_minimum_interval_secs']._serialized_options = b'\312\363\030m*\001s:\020Minimum IntervalBVThe shortest interval between position updates once the minimum distance has been met.'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_en_gpio']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_en_gpio']._serialized_options = b'\312\363\030,\010\001:\017GPS Enable GPIOB\027GPIO pin for GPS enable'
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_mode']._options = None
|
||||
_CONFIG_POSITIONCONFIG.fields_by_name['gps_mode']._serialized_options = b'\312\363\030\n:\010GPS Mode'
|
||||
_CONFIG_POWERCONFIG.fields_by_name['is_power_saving']._options = None
|
||||
_CONFIG_POWERCONFIG.fields_by_name['is_power_saving']._serialized_options = b'\312\363\030\366\001:\014Power SavingB\345\001Will sleep everything as much as possible, for the Tracker and Sensor roles this also includes the LoRa radio. Don\'t use this setting if you want to use your device with the phone apps or are using a device without a user button.'
|
||||
_CONFIG_POWERCONFIG.fields_by_name['on_battery_shutdown_after_secs']._options = None
|
||||
_CONFIG_POWERCONFIG.fields_by_name['on_battery_shutdown_after_secs']._serialized_options = b'\312\363\030\237\001*\001s:\026Shutdown on Power LossB\201\001How long after external power is removed before the device powers off. Zero to disable; values under 30 seconds are raised to 30.'
|
||||
_CONFIG_POWERCONFIG.fields_by_name['adc_multiplier_override']._options = None
|
||||
_CONFIG_POWERCONFIG.fields_by_name['adc_multiplier_override']._serialized_options = b'\312\363\030\016:\014ADC Override'
|
||||
_CONFIG_POWERCONFIG.fields_by_name['wait_bluetooth_secs']._options = None
|
||||
_CONFIG_POWERCONFIG.fields_by_name['wait_bluetooth_secs']._serialized_options = b'\312\363\030 *\001s:\033Wait for Bluetooth Duration'
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG.fields_by_name['ip']._options = None
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG.fields_by_name['ip']._serialized_options = b'\312\363\030\004:\002IP'
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG.fields_by_name['gateway']._options = None
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG.fields_by_name['gateway']._serialized_options = b'\312\363\030\t:\007Gateway'
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG.fields_by_name['subnet']._options = None
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG.fields_by_name['subnet']._serialized_options = b'\312\363\030\010:\006Subnet'
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG.fields_by_name['dns']._options = None
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG.fields_by_name['dns']._serialized_options = b'\312\363\030\005:\003DNS'
|
||||
_CONFIG_NETWORKCONFIG_ADDRESSMODE.values_by_name["DHCP"]._options = None
|
||||
_CONFIG_NETWORKCONFIG_ADDRESSMODE.values_by_name["DHCP"]._serialized_options = b'\312\363\030\006:\004DHCP'
|
||||
_CONFIG_NETWORKCONFIG_ADDRESSMODE.values_by_name["STATIC"]._options = None
|
||||
_CONFIG_NETWORKCONFIG_ADDRESSMODE.values_by_name["STATIC"]._serialized_options = b'\312\363\030\010:\006Static'
|
||||
_CONFIG_NETWORKCONFIG_PROTOCOLFLAGS.values_by_name["NO_BROADCAST"]._options = None
|
||||
_CONFIG_NETWORKCONFIG_PROTOCOLFLAGS.values_by_name["NO_BROADCAST"]._serialized_options = b'\312\363\030\006:\004None'
|
||||
_CONFIG_NETWORKCONFIG_PROTOCOLFLAGS.values_by_name["UDP_BROADCAST"]._options = None
|
||||
_CONFIG_NETWORKCONFIG_PROTOCOLFLAGS.values_by_name["UDP_BROADCAST"]._serialized_options = b'\312\363\030\017:\rUDP Broadcast'
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['wifi_enabled']._options = None
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['wifi_enabled']._serialized_options = b'\312\363\030O:\014WiFi EnabledB?Enabling WiFi will disable the Bluetooth connection to the app.'
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['wifi_ssid']._options = None
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['wifi_ssid']._serialized_options = b'\312\363\030\':\004SSIDB\037WiFi network name to connect to'
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['wifi_psk']._options = None
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['wifi_psk']._serialized_options = b'\312\363\030,:\010PasswordB WiFi password for authentication'
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['ntp_server']._options = None
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['ntp_server']._serialized_options = b'\312\363\030E:\nNTP ServerB7NTP server address. Defaults to meshtastic.pool.ntp.org'
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['eth_enabled']._options = None
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['eth_enabled']._serialized_options = b'\312\363\030h:\020Ethernet EnabledBTOn ESP32 boards, enabling Ethernet will disable the Bluetooth connection to the app.'
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['address_mode']._options = None
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['address_mode']._serialized_options = b'\312\363\030\016:\014Address Mode'
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['rsyslog_server']._options = None
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['rsyslog_server']._serialized_options = b'\312\363\030\020:\016Rsyslog Server'
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['enabled_protocols']._options = None
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['enabled_protocols']._serialized_options = b'\312\363\030W:\021Enabled ProtocolsB;Enable broadcasting packets via UDP over the local network.R\0052.6.0'
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['ipv6_enabled']._options = None
|
||||
_CONFIG_NETWORKCONFIG.fields_by_name['ipv6_enabled']._serialized_options = b'\312\363\030\010R\0062.7.16'
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYUNITS.values_by_name["METRIC"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYUNITS.values_by_name["METRIC"]._serialized_options = b'\312\363\030\010:\006Metric'
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYUNITS.values_by_name["IMPERIAL"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYUNITS.values_by_name["IMPERIAL"]._serialized_options = b'\312\363\030\n:\010Imperial'
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_AUTO"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_AUTO"]._serialized_options = b'\312\363\030\026:\024Detect Automatically'
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SSD1306"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SSD1306"]._serialized_options = b'\312\363\030\t:\007SSD1306'
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SH1106"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SH1106"]._serialized_options = b'\312\363\030\010:\006SH1106'
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SH1107"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SH1107"]._serialized_options = b'\312\363\030\010:\006SH1107'
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SH1107_128_128"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SH1107_128_128"]._serialized_options = b'\312\363\030\020:\016SH1107 128x128'
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SH1107_ROTATED"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE.values_by_name["OLED_SH1107_ROTATED"]._serialized_options = b'\312\363\030\020:\016SH1107 Rotated'
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE.values_by_name["DEFAULT"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE.values_by_name["DEFAULT"]._serialized_options = b'\312\363\030\036:\034Default 128x64 screen layout'
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE.values_by_name["TWOCOLOR"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE.values_by_name["TWOCOLOR"]._serialized_options = b'\312\363\030 :\036Optimized for 2 color displays'
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE.values_by_name["INVERTED"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE.values_by_name["INVERTED"]._serialized_options = b'\312\363\030\':%Inverted top bar for 2 color displays'
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE.values_by_name["COLOR"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE.values_by_name["COLOR"]._serialized_options = b'\312\363\030\031:\027TFT Full Color Displays'
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_0"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_0"]._serialized_options = b'\312\363\030\005:\0030\302\260'
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_90"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_90"]._serialized_options = b'\312\363\030\006:\00490\302\260'
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_180"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_180"]._serialized_options = b'\312\363\030\007:\005180\302\260'
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_270"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_270"]._serialized_options = b'\312\363\030\007:\005270\302\260'
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_0_INVERTED"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_0_INVERTED"]._serialized_options = b'\312\363\030\016:\0140\302\260 Inverted'
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_90_INVERTED"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_90_INVERTED"]._serialized_options = b'\312\363\030\017:\r90\302\260 Inverted'
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_180_INVERTED"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_180_INVERTED"]._serialized_options = b'\312\363\030\020:\016180\302\260 Inverted'
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_270_INVERTED"]._options = None
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION.values_by_name["DEGREES_270_INVERTED"]._serialized_options = b'\312\363\030\020:\016270\302\260 Inverted'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['screen_on_secs']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['screen_on_secs']._serialized_options = b'\312\363\030m*\001s:\rScreen on forBYHow long the screen remains on after the user button is pressed or messages are received.'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['gps_format']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['gps_format']._serialized_options = b'\030\001\312\363\030\010Z\0062.7.10'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['auto_screen_carousel_secs']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['auto_screen_carousel_secs']._serialized_options = b'\312\363\030g*\001s:\021Carousel IntervalBOAutomatically moves to the next screen page, like a carousel, on this interval.'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['compass_north_top']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['compass_north_top']._serialized_options = b'\030\001\312\363\030m:\022Always point northBPThe compass heading on the screen outside of the circle will always point north.Z\0052.7.1'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['flip_screen']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['flip_screen']._serialized_options = b'\312\363\030%:\013Flip ScreenB\026Flip screen vertically'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['units']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['units']._serialized_options = b'\312\363\0302:\rDisplay UnitsB!Units shown on the device screen.'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['oled']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['oled']._serialized_options = b'\312\363\0306:\tOLED TypeB)Override automatic OLED screen detection.'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['displaymode']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['displaymode']._serialized_options = b'\312\363\030/:\014Display ModeB\037Override default screen layout.'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['heading_bold']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['heading_bold']._serialized_options = b'\312\363\0304:\014Bold HeadingB$Bold the heading text on the screen.'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['wake_on_tap_or_motion']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['wake_on_tap_or_motion']._serialized_options = b'\312\363\030W:\034Wake Screen on tap or motionB7Requires that there be an accelerometer on your device.'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['compass_orientation']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['compass_orientation']._serialized_options = b'\312\363\030a:\023Compass OrientationBJIndicates how to rotate or invert the compass output for accurate display.'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['use_12h_clock']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['use_12h_clock']._serialized_options = b'\312\363\030A:\r12 Hour ClockB(Sets the screen clock format to 12-hour.R\0062.5.22'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['use_long_node_name']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['use_long_node_name']._serialized_options = b'\312\363\030\010R\0062.7.13'
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['enable_message_bubbles']._options = None
|
||||
_CONFIG_DISPLAYCONFIG.fields_by_name['enable_message_bubbles']._serialized_options = b'\312\363\030\010R\0062.7.19'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["UNSET"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["UNSET"]._serialized_options = b'\312\363\030\025:\023Please set a region'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["US"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["US"]._serialized_options = b'\312\363\030\017:\rUnited States'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_433"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_433"]._serialized_options = b'\312\363\030\027:\025European Union 433MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_868"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_868"]._serialized_options = b'\312\363\030\027:\025European Union 868MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["CN"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["CN"]._serialized_options = b'\312\363\030\007:\005China'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["JP"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["JP"]._serialized_options = b'\312\363\030\007:\005Japan'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ANZ"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ANZ"]._serialized_options = b'\312\363\030\031:\027Australia / New Zealand'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["KR"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["KR"]._serialized_options = b'\312\363\030\007:\005Korea'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["TW"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["TW"]._serialized_options = b'\312\363\030\010:\006Taiwan'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["RU"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["RU"]._serialized_options = b'\312\363\030\010:\006Russia'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["IN"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["IN"]._serialized_options = b'\312\363\030\007:\005India'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["NZ_865"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["NZ_865"]._serialized_options = b'\312\363\030\024:\022New Zealand 865MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["TH"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["TH"]._serialized_options = b'\312\363\030\n:\010Thailand'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["LORA_24"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["LORA_24"]._serialized_options = b'\312\363\030\t:\0072.4 GHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["UA_433"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["UA_433"]._serialized_options = b'\312\363\030\020:\016Ukraine 433MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["UA_868"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["UA_868"]._serialized_options = b'\010\001\312\363\030\020:\016Ukraine 868MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["MY_433"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["MY_433"]._serialized_options = b'\312\363\030\021:\017Malaysia 433MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["MY_919"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["MY_919"]._serialized_options = b'\312\363\030\021:\017Malaysia 919MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["SG_923"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["SG_923"]._serialized_options = b'\312\363\030\022:\020Singapore 923MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["PH_433"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["PH_433"]._serialized_options = b'\312\363\030\024:\022Philippines 433MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["PH_868"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["PH_868"]._serialized_options = b'\312\363\030\024:\022Philippines 868MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["PH_915"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["PH_915"]._serialized_options = b'\312\363\030\024:\022Philippines 915MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ANZ_433"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ANZ_433"]._serialized_options = b'\312\363\030 :\036Australia / New Zealand 433MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["KZ_433"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["KZ_433"]._serialized_options = b'\312\363\030\023:\021Kazakhstan 433MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["KZ_863"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["KZ_863"]._serialized_options = b'\312\363\030\023:\021Kazakhstan 863MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["NP_865"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["NP_865"]._serialized_options = b'\312\363\030\016:\014Nepal 865MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["BR_902"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["BR_902"]._serialized_options = b'\312\363\030\017:\rBrazil 902MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU1_2M"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU1_2M"]._serialized_options = b'\312\363\030\033:\031ITU Region 1 / Amateur 2m'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU2_2M"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU2_2M"]._serialized_options = b'\312\363\030\033:\031ITU Region 2 / Amateur 2m'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_866"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_866"]._serialized_options = b'\312\363\030\027:\025European Union 866MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_874"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_874"]._serialized_options = b'\312\363\030\027:\025European Union 874MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_917"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_917"]._serialized_options = b'\312\363\030\027:\025European Union 917MHz'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_N_868"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["EU_N_868"]._serialized_options = b'\312\363\030 :\036European Union 868MHz (Narrow)'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU3_2M"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU3_2M"]._serialized_options = b'\312\363\030\033:\031ITU Region 3 / Amateur 2m'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU1_70CM"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU1_70CM"]._serialized_options = b'\312\363\030\035:\033ITU Region 1 / Amateur 70cm'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU2_70CM"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU2_70CM"]._serialized_options = b'\312\363\030\035:\033ITU Region 2 / Amateur 70cm'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU3_70CM"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU3_70CM"]._serialized_options = b'\312\363\030\035:\033ITU Region 3 / Amateur 70cm'
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU2_125CM"]._options = None
|
||||
_CONFIG_LORACONFIG_REGIONCODE.values_by_name["ITU2_125CM"]._serialized_options = b'\312\363\030\036:\034ITU Region 2 / Amateur 1.25m'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_FAST"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_FAST"]._serialized_options = b'\312\363\030%:\021Long Range - FastJ\020longfast|default'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_SLOW"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_SLOW"]._serialized_options = b'\010\001\312\363\030\023:\021Long Range - Slow'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["VERY_LONG_SLOW"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["VERY_LONG_SLOW"]._serialized_options = b'\010\001\312\363\030\030:\026Very Long Range - Slow'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["MEDIUM_SLOW"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["MEDIUM_SLOW"]._serialized_options = b'\312\363\030\025:\023Medium Range - Slow'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["MEDIUM_FAST"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["MEDIUM_FAST"]._serialized_options = b'\312\363\030\025:\023Medium Range - Fast'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["SHORT_SLOW"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["SHORT_SLOW"]._serialized_options = b'\312\363\030\024:\022Short Range - Slow'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["SHORT_FAST"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["SHORT_FAST"]._serialized_options = b'\312\363\030\024:\022Short Range - Fast'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_MODERATE"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_MODERATE"]._serialized_options = b'\312\363\030\027:\025Long Range - Moderate'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["SHORT_TURBO"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["SHORT_TURBO"]._serialized_options = b'\312\363\030\025:\023Short Range - Turbo'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_TURBO"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_TURBO"]._serialized_options = b'\312\363\030\024:\022Long Range - Turbo'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LITE_FAST"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LITE_FAST"]._serialized_options = b'\312\363\030\r:\013Lite - Fast'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LITE_SLOW"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LITE_SLOW"]._serialized_options = b'\312\363\030\r:\013Lite - Slow'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["NARROW_FAST"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["NARROW_FAST"]._serialized_options = b'\312\363\030\017:\rNarrow - Fast'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["NARROW_SLOW"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["NARROW_SLOW"]._serialized_options = b'\312\363\030\017:\rNarrow - Slow'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["TINY_FAST"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["TINY_FAST"]._serialized_options = b'\312\363\030\r:\013Tiny - Fast'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["TINY_SLOW"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["TINY_SLOW"]._serialized_options = b'\312\363\030\r:\013Tiny - Slow'
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["MEDIUM_TURBO"]._options = None
|
||||
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["MEDIUM_TURBO"]._serialized_options = b'\312\363\030\026:\024Medium Range - Turbo'
|
||||
_CONFIG_LORACONFIG.fields_by_name['use_preset']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['use_preset']._serialized_options = b'\312\363\030h:\nUse PresetBZUse the modem preset settings instead of a manual bandwidth, spread factor and coding rate'
|
||||
_CONFIG_LORACONFIG.fields_by_name['modem_preset']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['modem_preset']._serialized_options = b'\312\363\030\t:\007Presets'
|
||||
_CONFIG_LORACONFIG.fields_by_name['bandwidth']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['bandwidth']._serialized_options = b'\312\363\030\020*\003kHz:\tBandwidth'
|
||||
_CONFIG_LORACONFIG.fields_by_name['spread_factor']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['spread_factor']._serialized_options = b'\312\363\030Z\031\000\000\000\000\000\000\024@!\000\000\000\000\000\000(@:\rSpread FactorB7Number of chirps per symbol, as 2 raised to this value.'
|
||||
_CONFIG_LORACONFIG.fields_by_name['coding_rate']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['coding_rate']._serialized_options = b'\312\363\030\210\001:\013Coding RateByError-correction redundancy, as the denominator of 4/n. Higher values survive noisier links but make every packet longer.'
|
||||
_CONFIG_LORACONFIG.fields_by_name['region']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['region']._serialized_options = b'\312\363\0309:\006RegionB/The region where you will be using your radios.'
|
||||
_CONFIG_LORACONFIG.fields_by_name['hop_limit']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['hop_limit']._serialized_options = b'\312\363\030\204\001\031\000\000\000\000\000\000\000\000!\000\000\000\000\000\000\034@:\tHop LimitBIHow many times a message may be repeated before it stops being forwarded.J\032hops|ttl|range|rebroadcast'
|
||||
_CONFIG_LORACONFIG.fields_by_name['tx_enabled']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['tx_enabled']._serialized_options = b'\312\363\030l:\020Transmit EnabledBXAllow the LoRa radio to transmit. Turn off while hot-swapping antennas or bench testing.'
|
||||
_CONFIG_LORACONFIG.fields_by_name['tx_power']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['tx_power']._serialized_options = b'\312\363\030\266\001\031\000\000\000\000\000\000\000\000!\000\000\000\000\000\000B@*\003dBm:\016Transmit PowerBxRadio transmit power. Leave at zero to use the highest level legal for the region, which is what most radios should use.J\023tx|power|dbm|output'
|
||||
_CONFIG_LORACONFIG.fields_by_name['channel_num']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['channel_num']._serialized_options = b'\312\363\030\275\001:\016Frequency SlotB\252\001Your node\'s operating frequency is calculated based on the region, modem preset, and this field. When 0, the region picks the slot, usually from the primary channel name.'
|
||||
_CONFIG_LORACONFIG.fields_by_name['override_duty_cycle']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['override_duty_cycle']._serialized_options = b'\312\363\030\025:\023Override Duty Cycle'
|
||||
_CONFIG_LORACONFIG.fields_by_name['sx126x_rx_boosted_gain']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['sx126x_rx_boosted_gain']._serialized_options = b'\312\363\030F:\017RX Boosted GainB3Enable RX boosted gain mode on SX126x-based radios.'
|
||||
_CONFIG_LORACONFIG.fields_by_name['override_frequency']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['override_frequency']._serialized_options = b'\312\363\030\031*\003MHz:\022Frequency Override'
|
||||
_CONFIG_LORACONFIG.fields_by_name['pa_fan_disabled']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['pa_fan_disabled']._serialized_options = b'\312\363\030\021:\017PA Fan Disabled'
|
||||
_CONFIG_LORACONFIG.fields_by_name['ignore_incoming']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['ignore_incoming']._serialized_options = b'\312\363\030\021:\017Ignore Incoming'
|
||||
_CONFIG_LORACONFIG.fields_by_name['ignore_mqtt']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['ignore_mqtt']._serialized_options = b'\312\363\030`:\013Ignore MQTTBQIgnore packets received over LoRa that travelled via MQTT anywhere on their path.'
|
||||
_CONFIG_LORACONFIG.fields_by_name['config_ok_to_mqtt']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['config_ok_to_mqtt']._serialized_options = b'\312\363\030\014:\nOK to MQTT'
|
||||
_CONFIG_LORACONFIG.fields_by_name['fem_lna_mode']._options = None
|
||||
_CONFIG_LORACONFIG.fields_by_name['fem_lna_mode']._serialized_options = b'\312\363\030\010R\0062.7.20'
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE.values_by_name["RANDOM_PIN"]._options = None
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE.values_by_name["RANDOM_PIN"]._serialized_options = b'\312\363\030\014:\nRandom PIN'
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE.values_by_name["FIXED_PIN"]._options = None
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE.values_by_name["FIXED_PIN"]._serialized_options = b'\312\363\030\013:\tFixed PIN'
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE.values_by_name["NO_PIN"]._options = None
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE.values_by_name["NO_PIN"]._serialized_options = b'\312\363\030\025:\023No PIN (Just Works)'
|
||||
_CONFIG_BLUETOOTHCONFIG.fields_by_name['enabled']._options = None
|
||||
_CONFIG_BLUETOOTHCONFIG.fields_by_name['enabled']._serialized_options = b'\312\363\0303:\021Bluetooth EnabledB\036Enable Bluetooth on the device'
|
||||
_CONFIG_BLUETOOTHCONFIG.fields_by_name['mode']._options = None
|
||||
_CONFIG_BLUETOOTHCONFIG.fields_by_name['mode']._serialized_options = b'\312\363\030*:\014Pairing ModeB\032Bluetooth pairing strategy'
|
||||
_CONFIG_BLUETOOTHCONFIG.fields_by_name['fixed_pin']._options = None
|
||||
_CONFIG_BLUETOOTHCONFIG.fields_by_name['fixed_pin']._serialized_options = b'\312\363\030X:\tFixed PinBKFixed PIN for Bluetooth pairing. Used when pairing mode is set to fixed PIN'
|
||||
_CONFIG_SECURITYCONFIG_PACKETSIGNATUREPOLICY.values_by_name["PACKET_SIGNATURE_POLICY_COMPATIBLE"]._options = None
|
||||
_CONFIG_SECURITYCONFIG_PACKETSIGNATUREPOLICY.values_by_name["PACKET_SIGNATURE_POLICY_COMPATIBLE"]._serialized_options = b'\312\363\030\227\001:\034Compatible - Accept UnsignedBwAccept unsigned traffic for maximum compatibility. A signature that can be checked and is wrong still drops the packet.'
|
||||
_CONFIG_SECURITYCONFIG_PACKETSIGNATUREPOLICY.values_by_name["PACKET_SIGNATURE_POLICY_BALANCED"]._options = None
|
||||
_CONFIG_SECURITYCONFIG_PACKETSIGNATUREPOLICY.values_by_name["PACKET_SIGNATURE_POLICY_BALANCED"]._serialized_options = b'\312\363\030\200\001:\037Balanced - Prefer AuthenticatedB]Prefer authenticated packets, but still accept unsigned traffic from nodes not known to sign.'
|
||||
_CONFIG_SECURITYCONFIG_PACKETSIGNATUREPOLICY.values_by_name["PACKET_SIGNATURE_POLICY_STRICT"]._options = None
|
||||
_CONFIG_SECURITYCONFIG_PACKETSIGNATUREPOLICY.values_by_name["PACKET_SIGNATURE_POLICY_STRICT"]._serialized_options = b'\312\363\030\227\001:\037Strict - Require AuthenticationBtAccept only packets with a verified signature or successful PKI decryption. Packets from older nodes may be ignored.'
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['public_key']._options = None
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['public_key']._serialized_options = b'\312\363\030\202\001:\nPublic KeyBtGenerated from your private key and sent out to other nodes on the mesh to allow them to compute a shared secret key'
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['private_key']._options = None
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['private_key']._serialized_options = b'\312\363\030?:\013Private KeyB0Used to create a shared key with a remote device'
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['admin_key']._options = None
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['admin_key']._serialized_options = b'\312\363\030V:\tAdmin KeyBIPublic keys (up to three) authorized to send admin messages to this node.'
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['is_managed']._options = None
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['is_managed']._serialized_options = b'\312\363\030\210\001:\016Managed DeviceBvSettings are changed by a mesh administrator using an admin key, not from the local app. Needs at least one admin key.'
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['serial_enabled']._options = None
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['serial_enabled']._serialized_options = b'\312\363\0305:\016Serial ConsoleB#Serial Console over the Stream API.'
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['debug_log_api_enabled']._options = None
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['debug_log_api_enabled']._serialized_options = b'\312\363\030r:\nDebug LogsBdOutput live debug logging over serial, view and export position-redacted device logs over Bluetooth.'
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['packet_signature_policy']._options = None
|
||||
_CONFIG_SECURITYCONFIG.fields_by_name['packet_signature_policy']._serialized_options = b'\312\363\030\007R\0052.8.0'
|
||||
_CONFIG._serialized_start=138
|
||||
_CONFIG._serialized_end=17309
|
||||
_CONFIG_DEVICECONFIG._serialized_start=767
|
||||
_CONFIG_DEVICECONFIG._serialized_end=4735
|
||||
_CONFIG_DEVICECONFIG_ROLE._serialized_start=1964
|
||||
_CONFIG_DEVICECONFIG_ROLE._serialized_end=3483
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE._serialized_start=3486
|
||||
_CONFIG_DEVICECONFIG_REBROADCASTMODE._serialized_end=4628
|
||||
_CONFIG_DEVICECONFIG_BUZZERMODE._serialized_start=4630
|
||||
_CONFIG_DEVICECONFIG_BUZZERMODE._serialized_end=4735
|
||||
_CONFIG_POSITIONCONFIG._serialized_start=4738
|
||||
_CONFIG_POSITIONCONFIG._serialized_end=6693
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS._serialized_start=5984
|
||||
_CONFIG_POSITIONCONFIG_POSITIONFLAGS._serialized_end=6588
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE._serialized_start=6590
|
||||
_CONFIG_POSITIONCONFIG_GPSMODE._serialized_end=6693
|
||||
_CONFIG_POWERCONFIG._serialized_start=6696
|
||||
_CONFIG_POWERCONFIG._serialized_end=7437
|
||||
_CONFIG_NETWORKCONFIG._serialized_start=7440
|
||||
_CONFIG_NETWORKCONFIG._serialized_end=8567
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG._serialized_start=8297
|
||||
_CONFIG_NETWORKCONFIG_IPV4CONFIG._serialized_end=8417
|
||||
_CONFIG_NETWORKCONFIG_ADDRESSMODE._serialized_start=8419
|
||||
_CONFIG_NETWORKCONFIG_ADDRESSMODE._serialized_end=8480
|
||||
_CONFIG_NETWORKCONFIG_PROTOCOLFLAGS._serialized_start=8482
|
||||
_CONFIG_NETWORKCONFIG_PROTOCOLFLAGS._serialized_end=8567
|
||||
_CONFIG_DISPLAYCONFIG._serialized_start=8570
|
||||
_CONFIG_DISPLAYCONFIG._serialized_end=11054
|
||||
_CONFIG_DISPLAYCONFIG_DEPRECATEDGPSCOORDINATEFORMAT._serialized_start=10153
|
||||
_CONFIG_DISPLAYCONFIG_DEPRECATEDGPSCOORDINATEFORMAT._serialized_end=10196
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYUNITS._serialized_start=10198
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYUNITS._serialized_end=10268
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE._serialized_start=10271
|
||||
_CONFIG_DISPLAYCONFIG_OLEDTYPE._serialized_end=10513
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE._serialized_start=10516
|
||||
_CONFIG_DISPLAYCONFIG_DISPLAYMODE._serialized_end=10731
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION._serialized_start=10734
|
||||
_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION._serialized_end=11054
|
||||
_CONFIG_LORACONFIG._serialized_start=11057
|
||||
_CONFIG_LORACONFIG._serialized_end=15305
|
||||
_CONFIG_LORACONFIG_REGIONCODE._serialized_start=13099
|
||||
_CONFIG_LORACONFIG_REGIONCODE._serialized_end=14513
|
||||
_CONFIG_LORACONFIG_MODEMPRESET._serialized_start=14516
|
||||
_CONFIG_LORACONFIG_MODEMPRESET._serialized_end=15245
|
||||
_CONFIG_LORACONFIG_FEM_LNA_MODE._serialized_start=15247
|
||||
_CONFIG_LORACONFIG_FEM_LNA_MODE._serialized_end=15305
|
||||
_CONFIG_BLUETOOTHCONFIG._serialized_start=15308
|
||||
_CONFIG_BLUETOOTHCONFIG._serialized_end=15751
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE._serialized_start=15633
|
||||
_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE._serialized_end=15751
|
||||
_CONFIG_SECURITYCONFIG._serialized_start=15754
|
||||
_CONFIG_SECURITYCONFIG._serialized_end=17270
|
||||
_CONFIG_SECURITYCONFIG_PACKETSIGNATUREPOLICY._serialized_start=16676
|
||||
_CONFIG_SECURITYCONFIG_PACKETSIGNATUREPOLICY._serialized_end=17270
|
||||
_CONFIG_SESSIONKEYCONFIG._serialized_start=17272
|
||||
_CONFIG_SESSIONKEYCONFIG._serialized_end=17290
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,410 +0,0 @@
|
||||
from meshtastic.protobuf import device_ui_pb2 as _device_ui_pb2
|
||||
from meshtastic.protobuf import field_metadata_pb2 as _field_metadata_pb2
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class Config(_message.Message):
|
||||
__slots__ = ["bluetooth", "device", "device_ui", "display", "lora", "network", "position", "power", "security", "sessionkey"]
|
||||
class BluetoothConfig(_message.Message):
|
||||
__slots__ = ["enabled", "fixed_pin", "mode"]
|
||||
class PairingMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
FIXED_PIN: Config.BluetoothConfig.PairingMode
|
||||
FIXED_PIN_FIELD_NUMBER: _ClassVar[int]
|
||||
MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
NO_PIN: Config.BluetoothConfig.PairingMode
|
||||
RANDOM_PIN: Config.BluetoothConfig.PairingMode
|
||||
enabled: bool
|
||||
fixed_pin: int
|
||||
mode: Config.BluetoothConfig.PairingMode
|
||||
def __init__(self, enabled: bool = ..., mode: _Optional[_Union[Config.BluetoothConfig.PairingMode, str]] = ..., fixed_pin: _Optional[int] = ...) -> None: ...
|
||||
class DeviceConfig(_message.Message):
|
||||
__slots__ = ["button_gpio", "buzzer_gpio", "buzzer_mode", "disable_triple_click", "double_tap_as_button_press", "is_managed", "led_heartbeat_disabled", "node_info_broadcast_secs", "rebroadcast_mode", "role", "serial_enabled", "tzdef"]
|
||||
class BuzzerMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class RebroadcastMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class Role(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ALL: Config.DeviceConfig.RebroadcastMode
|
||||
ALL_ENABLED: Config.DeviceConfig.BuzzerMode
|
||||
ALL_SKIP_DECODING: Config.DeviceConfig.RebroadcastMode
|
||||
BUTTON_GPIO_FIELD_NUMBER: _ClassVar[int]
|
||||
BUZZER_GPIO_FIELD_NUMBER: _ClassVar[int]
|
||||
BUZZER_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
CLIENT: Config.DeviceConfig.Role
|
||||
CLIENT_BASE: Config.DeviceConfig.Role
|
||||
CLIENT_HIDDEN: Config.DeviceConfig.Role
|
||||
CLIENT_MUTE: Config.DeviceConfig.Role
|
||||
CORE_PORTNUMS_ONLY: Config.DeviceConfig.RebroadcastMode
|
||||
DIRECT_MSG_ONLY: Config.DeviceConfig.BuzzerMode
|
||||
DISABLED: Config.DeviceConfig.BuzzerMode
|
||||
DISABLE_TRIPLE_CLICK_FIELD_NUMBER: _ClassVar[int]
|
||||
DOUBLE_TAP_AS_BUTTON_PRESS_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_MANAGED_FIELD_NUMBER: _ClassVar[int]
|
||||
KNOWN_ONLY: Config.DeviceConfig.RebroadcastMode
|
||||
LED_HEARTBEAT_DISABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
LOCAL_ONLY: Config.DeviceConfig.RebroadcastMode
|
||||
LOST_AND_FOUND: Config.DeviceConfig.Role
|
||||
NODE_INFO_BROADCAST_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
NONE: Config.DeviceConfig.RebroadcastMode
|
||||
NOTIFICATIONS_ONLY: Config.DeviceConfig.BuzzerMode
|
||||
REBROADCAST_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
REPEATER: Config.DeviceConfig.Role
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
ROUTER: Config.DeviceConfig.Role
|
||||
ROUTER_CLIENT: Config.DeviceConfig.Role
|
||||
ROUTER_LATE: Config.DeviceConfig.Role
|
||||
SENSOR: Config.DeviceConfig.Role
|
||||
SERIAL_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
SYSTEM_ONLY: Config.DeviceConfig.BuzzerMode
|
||||
TAK: Config.DeviceConfig.Role
|
||||
TAK_TRACKER: Config.DeviceConfig.Role
|
||||
TRACKER: Config.DeviceConfig.Role
|
||||
TZDEF_FIELD_NUMBER: _ClassVar[int]
|
||||
button_gpio: int
|
||||
buzzer_gpio: int
|
||||
buzzer_mode: Config.DeviceConfig.BuzzerMode
|
||||
disable_triple_click: bool
|
||||
double_tap_as_button_press: bool
|
||||
is_managed: bool
|
||||
led_heartbeat_disabled: bool
|
||||
node_info_broadcast_secs: int
|
||||
rebroadcast_mode: Config.DeviceConfig.RebroadcastMode
|
||||
role: Config.DeviceConfig.Role
|
||||
serial_enabled: bool
|
||||
tzdef: str
|
||||
def __init__(self, role: _Optional[_Union[Config.DeviceConfig.Role, str]] = ..., serial_enabled: bool = ..., button_gpio: _Optional[int] = ..., buzzer_gpio: _Optional[int] = ..., rebroadcast_mode: _Optional[_Union[Config.DeviceConfig.RebroadcastMode, str]] = ..., node_info_broadcast_secs: _Optional[int] = ..., double_tap_as_button_press: bool = ..., is_managed: bool = ..., disable_triple_click: bool = ..., tzdef: _Optional[str] = ..., led_heartbeat_disabled: bool = ..., buzzer_mode: _Optional[_Union[Config.DeviceConfig.BuzzerMode, str]] = ...) -> None: ...
|
||||
class DisplayConfig(_message.Message):
|
||||
__slots__ = ["auto_screen_carousel_secs", "compass_north_top", "compass_orientation", "displaymode", "enable_message_bubbles", "flip_screen", "gps_format", "heading_bold", "oled", "screen_on_secs", "units", "use_12h_clock", "use_long_node_name", "wake_on_tap_or_motion"]
|
||||
class CompassOrientation(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class DeprecatedGpsCoordinateFormat(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class DisplayMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class DisplayUnits(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class OledType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
AUTO_SCREEN_CAROUSEL_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
COLOR: Config.DisplayConfig.DisplayMode
|
||||
COMPASS_NORTH_TOP_FIELD_NUMBER: _ClassVar[int]
|
||||
COMPASS_ORIENTATION_FIELD_NUMBER: _ClassVar[int]
|
||||
DEFAULT: Config.DisplayConfig.DisplayMode
|
||||
DEGREES_0: Config.DisplayConfig.CompassOrientation
|
||||
DEGREES_0_INVERTED: Config.DisplayConfig.CompassOrientation
|
||||
DEGREES_180: Config.DisplayConfig.CompassOrientation
|
||||
DEGREES_180_INVERTED: Config.DisplayConfig.CompassOrientation
|
||||
DEGREES_270: Config.DisplayConfig.CompassOrientation
|
||||
DEGREES_270_INVERTED: Config.DisplayConfig.CompassOrientation
|
||||
DEGREES_90: Config.DisplayConfig.CompassOrientation
|
||||
DEGREES_90_INVERTED: Config.DisplayConfig.CompassOrientation
|
||||
DISPLAYMODE_FIELD_NUMBER: _ClassVar[int]
|
||||
ENABLE_MESSAGE_BUBBLES_FIELD_NUMBER: _ClassVar[int]
|
||||
FLIP_SCREEN_FIELD_NUMBER: _ClassVar[int]
|
||||
GPS_FORMAT_FIELD_NUMBER: _ClassVar[int]
|
||||
HEADING_BOLD_FIELD_NUMBER: _ClassVar[int]
|
||||
IMPERIAL: Config.DisplayConfig.DisplayUnits
|
||||
INVERTED: Config.DisplayConfig.DisplayMode
|
||||
METRIC: Config.DisplayConfig.DisplayUnits
|
||||
OLED_AUTO: Config.DisplayConfig.OledType
|
||||
OLED_FIELD_NUMBER: _ClassVar[int]
|
||||
OLED_SH1106: Config.DisplayConfig.OledType
|
||||
OLED_SH1107: Config.DisplayConfig.OledType
|
||||
OLED_SH1107_128_128: Config.DisplayConfig.OledType
|
||||
OLED_SH1107_ROTATED: Config.DisplayConfig.OledType
|
||||
OLED_SSD1306: Config.DisplayConfig.OledType
|
||||
SCREEN_ON_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
TWOCOLOR: Config.DisplayConfig.DisplayMode
|
||||
UNITS_FIELD_NUMBER: _ClassVar[int]
|
||||
UNUSED: Config.DisplayConfig.DeprecatedGpsCoordinateFormat
|
||||
USE_12H_CLOCK_FIELD_NUMBER: _ClassVar[int]
|
||||
USE_LONG_NODE_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
WAKE_ON_TAP_OR_MOTION_FIELD_NUMBER: _ClassVar[int]
|
||||
auto_screen_carousel_secs: int
|
||||
compass_north_top: bool
|
||||
compass_orientation: Config.DisplayConfig.CompassOrientation
|
||||
displaymode: Config.DisplayConfig.DisplayMode
|
||||
enable_message_bubbles: bool
|
||||
flip_screen: bool
|
||||
gps_format: Config.DisplayConfig.DeprecatedGpsCoordinateFormat
|
||||
heading_bold: bool
|
||||
oled: Config.DisplayConfig.OledType
|
||||
screen_on_secs: int
|
||||
units: Config.DisplayConfig.DisplayUnits
|
||||
use_12h_clock: bool
|
||||
use_long_node_name: bool
|
||||
wake_on_tap_or_motion: bool
|
||||
def __init__(self, screen_on_secs: _Optional[int] = ..., gps_format: _Optional[_Union[Config.DisplayConfig.DeprecatedGpsCoordinateFormat, str]] = ..., auto_screen_carousel_secs: _Optional[int] = ..., compass_north_top: bool = ..., flip_screen: bool = ..., units: _Optional[_Union[Config.DisplayConfig.DisplayUnits, str]] = ..., oled: _Optional[_Union[Config.DisplayConfig.OledType, str]] = ..., displaymode: _Optional[_Union[Config.DisplayConfig.DisplayMode, str]] = ..., heading_bold: bool = ..., wake_on_tap_or_motion: bool = ..., compass_orientation: _Optional[_Union[Config.DisplayConfig.CompassOrientation, str]] = ..., use_12h_clock: bool = ..., use_long_node_name: bool = ..., enable_message_bubbles: bool = ...) -> None: ...
|
||||
class LoRaConfig(_message.Message):
|
||||
__slots__ = ["bandwidth", "channel_num", "coding_rate", "config_ok_to_mqtt", "fem_lna_mode", "frequency_offset", "hop_limit", "ignore_incoming", "ignore_mqtt", "modem_preset", "override_duty_cycle", "override_frequency", "pa_fan_disabled", "region", "serial_hal_only", "spread_factor", "sx126x_rx_boosted_gain", "tx_enabled", "tx_power", "use_preset"]
|
||||
class FEM_LNA_Mode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class ModemPreset(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class RegionCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ANZ: Config.LoRaConfig.RegionCode
|
||||
ANZ_433: Config.LoRaConfig.RegionCode
|
||||
BANDWIDTH_FIELD_NUMBER: _ClassVar[int]
|
||||
BR_902: Config.LoRaConfig.RegionCode
|
||||
CHANNEL_NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
CN: Config.LoRaConfig.RegionCode
|
||||
CODING_RATE_FIELD_NUMBER: _ClassVar[int]
|
||||
CONFIG_OK_TO_MQTT_FIELD_NUMBER: _ClassVar[int]
|
||||
DISABLED: Config.LoRaConfig.FEM_LNA_Mode
|
||||
ENABLED: Config.LoRaConfig.FEM_LNA_Mode
|
||||
EU_433: Config.LoRaConfig.RegionCode
|
||||
EU_866: Config.LoRaConfig.RegionCode
|
||||
EU_868: Config.LoRaConfig.RegionCode
|
||||
EU_874: Config.LoRaConfig.RegionCode
|
||||
EU_917: Config.LoRaConfig.RegionCode
|
||||
EU_N_868: Config.LoRaConfig.RegionCode
|
||||
FEM_LNA_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
FREQUENCY_OFFSET_FIELD_NUMBER: _ClassVar[int]
|
||||
HOP_LIMIT_FIELD_NUMBER: _ClassVar[int]
|
||||
IGNORE_INCOMING_FIELD_NUMBER: _ClassVar[int]
|
||||
IGNORE_MQTT_FIELD_NUMBER: _ClassVar[int]
|
||||
IN: Config.LoRaConfig.RegionCode
|
||||
ITU1_2M: Config.LoRaConfig.RegionCode
|
||||
ITU1_70CM: Config.LoRaConfig.RegionCode
|
||||
ITU2_125CM: Config.LoRaConfig.RegionCode
|
||||
ITU2_2M: Config.LoRaConfig.RegionCode
|
||||
ITU2_70CM: Config.LoRaConfig.RegionCode
|
||||
ITU3_2M: Config.LoRaConfig.RegionCode
|
||||
ITU3_70CM: Config.LoRaConfig.RegionCode
|
||||
JP: Config.LoRaConfig.RegionCode
|
||||
KR: Config.LoRaConfig.RegionCode
|
||||
KZ_433: Config.LoRaConfig.RegionCode
|
||||
KZ_863: Config.LoRaConfig.RegionCode
|
||||
LITE_FAST: Config.LoRaConfig.ModemPreset
|
||||
LITE_SLOW: Config.LoRaConfig.ModemPreset
|
||||
LONG_FAST: Config.LoRaConfig.ModemPreset
|
||||
LONG_MODERATE: Config.LoRaConfig.ModemPreset
|
||||
LONG_SLOW: Config.LoRaConfig.ModemPreset
|
||||
LONG_TURBO: Config.LoRaConfig.ModemPreset
|
||||
LORA_24: Config.LoRaConfig.RegionCode
|
||||
MEDIUM_FAST: Config.LoRaConfig.ModemPreset
|
||||
MEDIUM_SLOW: Config.LoRaConfig.ModemPreset
|
||||
MEDIUM_TURBO: Config.LoRaConfig.ModemPreset
|
||||
MODEM_PRESET_FIELD_NUMBER: _ClassVar[int]
|
||||
MY_433: Config.LoRaConfig.RegionCode
|
||||
MY_919: Config.LoRaConfig.RegionCode
|
||||
NARROW_FAST: Config.LoRaConfig.ModemPreset
|
||||
NARROW_SLOW: Config.LoRaConfig.ModemPreset
|
||||
NOT_PRESENT: Config.LoRaConfig.FEM_LNA_Mode
|
||||
NP_865: Config.LoRaConfig.RegionCode
|
||||
NZ_865: Config.LoRaConfig.RegionCode
|
||||
OVERRIDE_DUTY_CYCLE_FIELD_NUMBER: _ClassVar[int]
|
||||
OVERRIDE_FREQUENCY_FIELD_NUMBER: _ClassVar[int]
|
||||
PA_FAN_DISABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
PH_433: Config.LoRaConfig.RegionCode
|
||||
PH_868: Config.LoRaConfig.RegionCode
|
||||
PH_915: Config.LoRaConfig.RegionCode
|
||||
REGION_FIELD_NUMBER: _ClassVar[int]
|
||||
RU: Config.LoRaConfig.RegionCode
|
||||
SERIAL_HAL_ONLY_FIELD_NUMBER: _ClassVar[int]
|
||||
SG_923: Config.LoRaConfig.RegionCode
|
||||
SHORT_FAST: Config.LoRaConfig.ModemPreset
|
||||
SHORT_SLOW: Config.LoRaConfig.ModemPreset
|
||||
SHORT_TURBO: Config.LoRaConfig.ModemPreset
|
||||
SPREAD_FACTOR_FIELD_NUMBER: _ClassVar[int]
|
||||
SX126X_RX_BOOSTED_GAIN_FIELD_NUMBER: _ClassVar[int]
|
||||
TH: Config.LoRaConfig.RegionCode
|
||||
TINY_FAST: Config.LoRaConfig.ModemPreset
|
||||
TINY_SLOW: Config.LoRaConfig.ModemPreset
|
||||
TW: Config.LoRaConfig.RegionCode
|
||||
TX_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
TX_POWER_FIELD_NUMBER: _ClassVar[int]
|
||||
UA_433: Config.LoRaConfig.RegionCode
|
||||
UA_868: Config.LoRaConfig.RegionCode
|
||||
UNSET: Config.LoRaConfig.RegionCode
|
||||
US: Config.LoRaConfig.RegionCode
|
||||
USE_PRESET_FIELD_NUMBER: _ClassVar[int]
|
||||
VERY_LONG_SLOW: Config.LoRaConfig.ModemPreset
|
||||
bandwidth: int
|
||||
channel_num: int
|
||||
coding_rate: int
|
||||
config_ok_to_mqtt: bool
|
||||
fem_lna_mode: Config.LoRaConfig.FEM_LNA_Mode
|
||||
frequency_offset: float
|
||||
hop_limit: int
|
||||
ignore_incoming: _containers.RepeatedScalarFieldContainer[int]
|
||||
ignore_mqtt: bool
|
||||
modem_preset: Config.LoRaConfig.ModemPreset
|
||||
override_duty_cycle: bool
|
||||
override_frequency: float
|
||||
pa_fan_disabled: bool
|
||||
region: Config.LoRaConfig.RegionCode
|
||||
serial_hal_only: bool
|
||||
spread_factor: int
|
||||
sx126x_rx_boosted_gain: bool
|
||||
tx_enabled: bool
|
||||
tx_power: int
|
||||
use_preset: bool
|
||||
def __init__(self, use_preset: bool = ..., modem_preset: _Optional[_Union[Config.LoRaConfig.ModemPreset, str]] = ..., bandwidth: _Optional[int] = ..., spread_factor: _Optional[int] = ..., coding_rate: _Optional[int] = ..., frequency_offset: _Optional[float] = ..., region: _Optional[_Union[Config.LoRaConfig.RegionCode, str]] = ..., hop_limit: _Optional[int] = ..., tx_enabled: bool = ..., tx_power: _Optional[int] = ..., channel_num: _Optional[int] = ..., override_duty_cycle: bool = ..., sx126x_rx_boosted_gain: bool = ..., override_frequency: _Optional[float] = ..., pa_fan_disabled: bool = ..., ignore_incoming: _Optional[_Iterable[int]] = ..., ignore_mqtt: bool = ..., config_ok_to_mqtt: bool = ..., fem_lna_mode: _Optional[_Union[Config.LoRaConfig.FEM_LNA_Mode, str]] = ..., serial_hal_only: bool = ...) -> None: ...
|
||||
class NetworkConfig(_message.Message):
|
||||
__slots__ = ["address_mode", "enabled_protocols", "eth_enabled", "ipv4_config", "ipv6_enabled", "ntp_server", "rsyslog_server", "wifi_enabled", "wifi_psk", "wifi_ssid"]
|
||||
class AddressMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class ProtocolFlags(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class IpV4Config(_message.Message):
|
||||
__slots__ = ["dns", "gateway", "ip", "subnet"]
|
||||
DNS_FIELD_NUMBER: _ClassVar[int]
|
||||
GATEWAY_FIELD_NUMBER: _ClassVar[int]
|
||||
IP_FIELD_NUMBER: _ClassVar[int]
|
||||
SUBNET_FIELD_NUMBER: _ClassVar[int]
|
||||
dns: int
|
||||
gateway: int
|
||||
ip: int
|
||||
subnet: int
|
||||
def __init__(self, ip: _Optional[int] = ..., gateway: _Optional[int] = ..., subnet: _Optional[int] = ..., dns: _Optional[int] = ...) -> None: ...
|
||||
ADDRESS_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
DHCP: Config.NetworkConfig.AddressMode
|
||||
ENABLED_PROTOCOLS_FIELD_NUMBER: _ClassVar[int]
|
||||
ETH_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
IPV4_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
IPV6_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
NO_BROADCAST: Config.NetworkConfig.ProtocolFlags
|
||||
NTP_SERVER_FIELD_NUMBER: _ClassVar[int]
|
||||
RSYSLOG_SERVER_FIELD_NUMBER: _ClassVar[int]
|
||||
STATIC: Config.NetworkConfig.AddressMode
|
||||
UDP_BROADCAST: Config.NetworkConfig.ProtocolFlags
|
||||
WIFI_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
WIFI_PSK_FIELD_NUMBER: _ClassVar[int]
|
||||
WIFI_SSID_FIELD_NUMBER: _ClassVar[int]
|
||||
address_mode: Config.NetworkConfig.AddressMode
|
||||
enabled_protocols: int
|
||||
eth_enabled: bool
|
||||
ipv4_config: Config.NetworkConfig.IpV4Config
|
||||
ipv6_enabled: bool
|
||||
ntp_server: str
|
||||
rsyslog_server: str
|
||||
wifi_enabled: bool
|
||||
wifi_psk: str
|
||||
wifi_ssid: str
|
||||
def __init__(self, wifi_enabled: bool = ..., wifi_ssid: _Optional[str] = ..., wifi_psk: _Optional[str] = ..., ntp_server: _Optional[str] = ..., eth_enabled: bool = ..., address_mode: _Optional[_Union[Config.NetworkConfig.AddressMode, str]] = ..., ipv4_config: _Optional[_Union[Config.NetworkConfig.IpV4Config, _Mapping]] = ..., rsyslog_server: _Optional[str] = ..., enabled_protocols: _Optional[int] = ..., ipv6_enabled: bool = ...) -> None: ...
|
||||
class PositionConfig(_message.Message):
|
||||
__slots__ = ["broadcast_smart_minimum_distance", "broadcast_smart_minimum_interval_secs", "fixed_position", "gps_attempt_time", "gps_en_gpio", "gps_enabled", "gps_mode", "gps_update_interval", "position_broadcast_secs", "position_broadcast_smart_enabled", "position_flags", "rx_gpio", "tx_gpio"]
|
||||
class GpsMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class PositionFlags(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ALTITUDE: Config.PositionConfig.PositionFlags
|
||||
ALTITUDE_MSL: Config.PositionConfig.PositionFlags
|
||||
BROADCAST_SMART_MINIMUM_DISTANCE_FIELD_NUMBER: _ClassVar[int]
|
||||
BROADCAST_SMART_MINIMUM_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
DISABLED: Config.PositionConfig.GpsMode
|
||||
DOP: Config.PositionConfig.PositionFlags
|
||||
ENABLED: Config.PositionConfig.GpsMode
|
||||
FIXED_POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
GEOIDAL_SEPARATION: Config.PositionConfig.PositionFlags
|
||||
GPS_ATTEMPT_TIME_FIELD_NUMBER: _ClassVar[int]
|
||||
GPS_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
GPS_EN_GPIO_FIELD_NUMBER: _ClassVar[int]
|
||||
GPS_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
GPS_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
|
||||
HEADING: Config.PositionConfig.PositionFlags
|
||||
HVDOP: Config.PositionConfig.PositionFlags
|
||||
NOT_PRESENT: Config.PositionConfig.GpsMode
|
||||
POSITION_BROADCAST_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_BROADCAST_SMART_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_FLAGS_FIELD_NUMBER: _ClassVar[int]
|
||||
RX_GPIO_FIELD_NUMBER: _ClassVar[int]
|
||||
SATINVIEW: Config.PositionConfig.PositionFlags
|
||||
SEQ_NO: Config.PositionConfig.PositionFlags
|
||||
SPEED: Config.PositionConfig.PositionFlags
|
||||
TIMESTAMP: Config.PositionConfig.PositionFlags
|
||||
TX_GPIO_FIELD_NUMBER: _ClassVar[int]
|
||||
UNSET: Config.PositionConfig.PositionFlags
|
||||
broadcast_smart_minimum_distance: int
|
||||
broadcast_smart_minimum_interval_secs: int
|
||||
fixed_position: bool
|
||||
gps_attempt_time: int
|
||||
gps_en_gpio: int
|
||||
gps_enabled: bool
|
||||
gps_mode: Config.PositionConfig.GpsMode
|
||||
gps_update_interval: int
|
||||
position_broadcast_secs: int
|
||||
position_broadcast_smart_enabled: bool
|
||||
position_flags: int
|
||||
rx_gpio: int
|
||||
tx_gpio: int
|
||||
def __init__(self, position_broadcast_secs: _Optional[int] = ..., position_broadcast_smart_enabled: bool = ..., fixed_position: bool = ..., gps_enabled: bool = ..., gps_update_interval: _Optional[int] = ..., gps_attempt_time: _Optional[int] = ..., position_flags: _Optional[int] = ..., rx_gpio: _Optional[int] = ..., tx_gpio: _Optional[int] = ..., broadcast_smart_minimum_distance: _Optional[int] = ..., broadcast_smart_minimum_interval_secs: _Optional[int] = ..., gps_en_gpio: _Optional[int] = ..., gps_mode: _Optional[_Union[Config.PositionConfig.GpsMode, str]] = ...) -> None: ...
|
||||
class PowerConfig(_message.Message):
|
||||
__slots__ = ["adc_multiplier_override", "device_battery_ina_address", "is_power_saving", "ls_secs", "min_wake_secs", "on_battery_shutdown_after_secs", "powermon_enables", "sds_secs", "wait_bluetooth_secs"]
|
||||
ADC_MULTIPLIER_OVERRIDE_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_BATTERY_INA_ADDRESS_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_POWER_SAVING_FIELD_NUMBER: _ClassVar[int]
|
||||
LS_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
MIN_WAKE_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
ON_BATTERY_SHUTDOWN_AFTER_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
POWERMON_ENABLES_FIELD_NUMBER: _ClassVar[int]
|
||||
SDS_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
WAIT_BLUETOOTH_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
adc_multiplier_override: float
|
||||
device_battery_ina_address: int
|
||||
is_power_saving: bool
|
||||
ls_secs: int
|
||||
min_wake_secs: int
|
||||
on_battery_shutdown_after_secs: int
|
||||
powermon_enables: int
|
||||
sds_secs: int
|
||||
wait_bluetooth_secs: int
|
||||
def __init__(self, is_power_saving: bool = ..., on_battery_shutdown_after_secs: _Optional[int] = ..., adc_multiplier_override: _Optional[float] = ..., wait_bluetooth_secs: _Optional[int] = ..., sds_secs: _Optional[int] = ..., ls_secs: _Optional[int] = ..., min_wake_secs: _Optional[int] = ..., device_battery_ina_address: _Optional[int] = ..., powermon_enables: _Optional[int] = ...) -> None: ...
|
||||
class SecurityConfig(_message.Message):
|
||||
__slots__ = ["admin_channel_enabled", "admin_key", "debug_log_api_enabled", "is_managed", "packet_signature_policy", "private_key", "public_key", "serial_enabled"]
|
||||
class PacketSignaturePolicy(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ADMIN_CHANNEL_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
ADMIN_KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
DEBUG_LOG_API_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_MANAGED_FIELD_NUMBER: _ClassVar[int]
|
||||
PACKET_SIGNATURE_POLICY_BALANCED: Config.SecurityConfig.PacketSignaturePolicy
|
||||
PACKET_SIGNATURE_POLICY_COMPATIBLE: Config.SecurityConfig.PacketSignaturePolicy
|
||||
PACKET_SIGNATURE_POLICY_FIELD_NUMBER: _ClassVar[int]
|
||||
PACKET_SIGNATURE_POLICY_STRICT: Config.SecurityConfig.PacketSignaturePolicy
|
||||
PRIVATE_KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
SERIAL_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
admin_channel_enabled: bool
|
||||
admin_key: _containers.RepeatedScalarFieldContainer[bytes]
|
||||
debug_log_api_enabled: bool
|
||||
is_managed: bool
|
||||
packet_signature_policy: Config.SecurityConfig.PacketSignaturePolicy
|
||||
private_key: bytes
|
||||
public_key: bytes
|
||||
serial_enabled: bool
|
||||
def __init__(self, public_key: _Optional[bytes] = ..., private_key: _Optional[bytes] = ..., admin_key: _Optional[_Iterable[bytes]] = ..., is_managed: bool = ..., serial_enabled: bool = ..., debug_log_api_enabled: bool = ..., admin_channel_enabled: bool = ..., packet_signature_policy: _Optional[_Union[Config.SecurityConfig.PacketSignaturePolicy, str]] = ...) -> None: ...
|
||||
class SessionkeyConfig(_message.Message):
|
||||
__slots__ = []
|
||||
def __init__(self) -> None: ...
|
||||
BLUETOOTH_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_UI_FIELD_NUMBER: _ClassVar[int]
|
||||
DISPLAY_FIELD_NUMBER: _ClassVar[int]
|
||||
LORA_FIELD_NUMBER: _ClassVar[int]
|
||||
NETWORK_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
POWER_FIELD_NUMBER: _ClassVar[int]
|
||||
SECURITY_FIELD_NUMBER: _ClassVar[int]
|
||||
SESSIONKEY_FIELD_NUMBER: _ClassVar[int]
|
||||
bluetooth: Config.BluetoothConfig
|
||||
device: Config.DeviceConfig
|
||||
device_ui: _device_ui_pb2.DeviceUIConfig
|
||||
display: Config.DisplayConfig
|
||||
lora: Config.LoRaConfig
|
||||
network: Config.NetworkConfig
|
||||
position: Config.PositionConfig
|
||||
power: Config.PowerConfig
|
||||
security: Config.SecurityConfig
|
||||
sessionkey: Config.SessionkeyConfig
|
||||
def __init__(self, device: _Optional[_Union[Config.DeviceConfig, _Mapping]] = ..., position: _Optional[_Union[Config.PositionConfig, _Mapping]] = ..., power: _Optional[_Union[Config.PowerConfig, _Mapping]] = ..., network: _Optional[_Union[Config.NetworkConfig, _Mapping]] = ..., display: _Optional[_Union[Config.DisplayConfig, _Mapping]] = ..., lora: _Optional[_Union[Config.LoRaConfig, _Mapping]] = ..., bluetooth: _Optional[_Union[Config.BluetoothConfig, _Mapping]] = ..., security: _Optional[_Union[Config.SecurityConfig, _Mapping]] = ..., sessionkey: _Optional[_Union[Config.SessionkeyConfig, _Mapping]] = ..., device_ui: _Optional[_Union[_device_ui_pb2.DeviceUIConfig, _Mapping]] = ...) -> None: ...
|
||||
@@ -1,36 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/connection_status.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+meshtastic/protobuf/connection_status.proto\x12\x13meshtastic.protobuf\"\xd5\x02\n\x16\x44\x65viceConnectionStatus\x12<\n\x04wifi\x18\x01 \x01(\x0b\x32).meshtastic.protobuf.WifiConnectionStatusH\x00\x88\x01\x01\x12\x44\n\x08\x65thernet\x18\x02 \x01(\x0b\x32-.meshtastic.protobuf.EthernetConnectionStatusH\x01\x88\x01\x01\x12\x46\n\tbluetooth\x18\x03 \x01(\x0b\x32..meshtastic.protobuf.BluetoothConnectionStatusH\x02\x88\x01\x01\x12@\n\x06serial\x18\x04 \x01(\x0b\x32+.meshtastic.protobuf.SerialConnectionStatusH\x03\x88\x01\x01\x42\x07\n\x05_wifiB\x0b\n\t_ethernetB\x0c\n\n_bluetoothB\t\n\x07_serial\"p\n\x14WifiConnectionStatus\x12<\n\x06status\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.NetworkConnectionStatus\x12\x0c\n\x04ssid\x18\x02 \x01(\t\x12\x0c\n\x04rssi\x18\x03 \x01(\x05\"X\n\x18\x45thernetConnectionStatus\x12<\n\x06status\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.NetworkConnectionStatus\"{\n\x17NetworkConnectionStatus\x12\x12\n\nip_address\x18\x01 \x01(\x07\x12\x14\n\x0cis_connected\x18\x02 \x01(\x08\x12\x19\n\x11is_mqtt_connected\x18\x03 \x01(\x08\x12\x1b\n\x13is_syslog_connected\x18\x04 \x01(\x08\"L\n\x19\x42luetoothConnectionStatus\x12\x0b\n\x03pin\x18\x01 \x01(\r\x12\x0c\n\x04rssi\x18\x02 \x01(\x05\x12\x14\n\x0cis_connected\x18\x03 \x01(\x08\"<\n\x16SerialConnectionStatus\x12\x0c\n\x04\x62\x61ud\x18\x01 \x01(\r\x12\x14\n\x0cis_connected\x18\x02 \x01(\x08\x42\x66\n\x14org.meshtastic.protoB\x10\x43onnStatusProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.connection_status_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\020ConnStatusProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_DEVICECONNECTIONSTATUS._serialized_start=69
|
||||
_DEVICECONNECTIONSTATUS._serialized_end=410
|
||||
_WIFICONNECTIONSTATUS._serialized_start=412
|
||||
_WIFICONNECTIONSTATUS._serialized_end=524
|
||||
_ETHERNETCONNECTIONSTATUS._serialized_start=526
|
||||
_ETHERNETCONNECTIONSTATUS._serialized_end=614
|
||||
_NETWORKCONNECTIONSTATUS._serialized_start=616
|
||||
_NETWORKCONNECTIONSTATUS._serialized_end=739
|
||||
_BLUETOOTHCONNECTIONSTATUS._serialized_start=741
|
||||
_BLUETOOTHCONNECTIONSTATUS._serialized_end=817
|
||||
_SERIALCONNECTIONSTATUS._serialized_start=819
|
||||
_SERIALCONNECTIONSTATUS._serialized_end=879
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,63 +0,0 @@
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class BluetoothConnectionStatus(_message.Message):
|
||||
__slots__ = ["is_connected", "pin", "rssi"]
|
||||
IS_CONNECTED_FIELD_NUMBER: _ClassVar[int]
|
||||
PIN_FIELD_NUMBER: _ClassVar[int]
|
||||
RSSI_FIELD_NUMBER: _ClassVar[int]
|
||||
is_connected: bool
|
||||
pin: int
|
||||
rssi: int
|
||||
def __init__(self, pin: _Optional[int] = ..., rssi: _Optional[int] = ..., is_connected: bool = ...) -> None: ...
|
||||
|
||||
class DeviceConnectionStatus(_message.Message):
|
||||
__slots__ = ["bluetooth", "ethernet", "serial", "wifi"]
|
||||
BLUETOOTH_FIELD_NUMBER: _ClassVar[int]
|
||||
ETHERNET_FIELD_NUMBER: _ClassVar[int]
|
||||
SERIAL_FIELD_NUMBER: _ClassVar[int]
|
||||
WIFI_FIELD_NUMBER: _ClassVar[int]
|
||||
bluetooth: BluetoothConnectionStatus
|
||||
ethernet: EthernetConnectionStatus
|
||||
serial: SerialConnectionStatus
|
||||
wifi: WifiConnectionStatus
|
||||
def __init__(self, wifi: _Optional[_Union[WifiConnectionStatus, _Mapping]] = ..., ethernet: _Optional[_Union[EthernetConnectionStatus, _Mapping]] = ..., bluetooth: _Optional[_Union[BluetoothConnectionStatus, _Mapping]] = ..., serial: _Optional[_Union[SerialConnectionStatus, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class EthernetConnectionStatus(_message.Message):
|
||||
__slots__ = ["status"]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
status: NetworkConnectionStatus
|
||||
def __init__(self, status: _Optional[_Union[NetworkConnectionStatus, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class NetworkConnectionStatus(_message.Message):
|
||||
__slots__ = ["ip_address", "is_connected", "is_mqtt_connected", "is_syslog_connected"]
|
||||
IP_ADDRESS_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_CONNECTED_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_MQTT_CONNECTED_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_SYSLOG_CONNECTED_FIELD_NUMBER: _ClassVar[int]
|
||||
ip_address: int
|
||||
is_connected: bool
|
||||
is_mqtt_connected: bool
|
||||
is_syslog_connected: bool
|
||||
def __init__(self, ip_address: _Optional[int] = ..., is_connected: bool = ..., is_mqtt_connected: bool = ..., is_syslog_connected: bool = ...) -> None: ...
|
||||
|
||||
class SerialConnectionStatus(_message.Message):
|
||||
__slots__ = ["baud", "is_connected"]
|
||||
BAUD_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_CONNECTED_FIELD_NUMBER: _ClassVar[int]
|
||||
baud: int
|
||||
is_connected: bool
|
||||
def __init__(self, baud: _Optional[int] = ..., is_connected: bool = ...) -> None: ...
|
||||
|
||||
class WifiConnectionStatus(_message.Message):
|
||||
__slots__ = ["rssi", "ssid", "status"]
|
||||
RSSI_FIELD_NUMBER: _ClassVar[int]
|
||||
SSID_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
rssi: int
|
||||
ssid: str
|
||||
status: NetworkConnectionStatus
|
||||
def __init__(self, status: _Optional[_Union[NetworkConnectionStatus, _Mapping]] = ..., ssid: _Optional[str] = ..., rssi: _Optional[int] = ...) -> None: ...
|
||||
@@ -1,42 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/device_ui.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtastic/protobuf/device_ui.proto\x12\x13meshtastic.protobuf\"\xff\x05\n\x0e\x44\x65viceUIConfig\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x19\n\x11screen_brightness\x18\x02 \x01(\r\x12\x16\n\x0escreen_timeout\x18\x03 \x01(\r\x12\x13\n\x0bscreen_lock\x18\x04 \x01(\x08\x12\x15\n\rsettings_lock\x18\x05 \x01(\x08\x12\x10\n\x08pin_code\x18\x06 \x01(\r\x12)\n\x05theme\x18\x07 \x01(\x0e\x32\x1a.meshtastic.protobuf.Theme\x12\x15\n\ralert_enabled\x18\x08 \x01(\x08\x12\x16\n\x0e\x62\x61nner_enabled\x18\t \x01(\x08\x12\x14\n\x0cring_tone_id\x18\n \x01(\r\x12/\n\x08language\x18\x0b \x01(\x0e\x32\x1d.meshtastic.protobuf.Language\x12\x34\n\x0bnode_filter\x18\x0c \x01(\x0b\x32\x1f.meshtastic.protobuf.NodeFilter\x12:\n\x0enode_highlight\x18\r \x01(\x0b\x32\".meshtastic.protobuf.NodeHighlight\x12\x18\n\x10\x63\x61libration_data\x18\x0e \x01(\x0c\x12*\n\x08map_data\x18\x0f \x01(\x0b\x32\x18.meshtastic.protobuf.Map\x12\x36\n\x0c\x63ompass_mode\x18\x10 \x01(\x0e\x32 .meshtastic.protobuf.CompassMode\x12\x18\n\x10screen_rgb_color\x18\x11 \x01(\r\x12\x1b\n\x13is_clockface_analog\x18\x12 \x01(\x08\x12K\n\ngps_format\x18\x13 \x01(\x0e\x32\x37.meshtastic.protobuf.DeviceUIConfig.GpsCoordinateFormat\"V\n\x13GpsCoordinateFormat\x12\x07\n\x03\x44\x45\x43\x10\x00\x12\x07\n\x03\x44MS\x10\x01\x12\x07\n\x03UTM\x10\x02\x12\x08\n\x04MGRS\x10\x03\x12\x07\n\x03OLC\x10\x04\x12\x08\n\x04OSGR\x10\x05\x12\x07\n\x03MLS\x10\x06\"\xa7\x01\n\nNodeFilter\x12\x16\n\x0eunknown_switch\x18\x01 \x01(\x08\x12\x16\n\x0eoffline_switch\x18\x02 \x01(\x08\x12\x19\n\x11public_key_switch\x18\x03 \x01(\x08\x12\x11\n\thops_away\x18\x04 \x01(\x05\x12\x17\n\x0fposition_switch\x18\x05 \x01(\x08\x12\x11\n\tnode_name\x18\x06 \x01(\t\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\x05\"~\n\rNodeHighlight\x12\x13\n\x0b\x63hat_switch\x18\x01 \x01(\x08\x12\x17\n\x0fposition_switch\x18\x02 \x01(\x08\x12\x18\n\x10telemetry_switch\x18\x03 \x01(\x08\x12\x12\n\niaq_switch\x18\x04 \x01(\x08\x12\x11\n\tnode_name\x18\x05 \x01(\t\"=\n\x08GeoPoint\x12\x0c\n\x04zoom\x18\x01 \x01(\x05\x12\x10\n\x08latitude\x18\x02 \x01(\x05\x12\x11\n\tlongitude\x18\x03 \x01(\x05\"U\n\x03Map\x12+\n\x04home\x18\x01 \x01(\x0b\x32\x1d.meshtastic.protobuf.GeoPoint\x12\r\n\x05style\x18\x02 \x01(\t\x12\x12\n\nfollow_gps\x18\x03 \x01(\x08*>\n\x0b\x43ompassMode\x12\x0b\n\x07\x44YNAMIC\x10\x00\x12\x0e\n\nFIXED_RING\x10\x01\x12\x12\n\x0e\x46REEZE_HEADING\x10\x02*%\n\x05Theme\x12\x08\n\x04\x44\x41RK\x10\x00\x12\t\n\x05LIGHT\x10\x01\x12\x07\n\x03RED\x10\x02*\xe0\x02\n\x08Language\x12\x0b\n\x07\x45NGLISH\x10\x00\x12\n\n\x06\x46RENCH\x10\x01\x12\n\n\x06GERMAN\x10\x02\x12\x0b\n\x07ITALIAN\x10\x03\x12\x0e\n\nPORTUGUESE\x10\x04\x12\x0b\n\x07SPANISH\x10\x05\x12\x0b\n\x07SWEDISH\x10\x06\x12\x0b\n\x07\x46INNISH\x10\x07\x12\n\n\x06POLISH\x10\x08\x12\x0b\n\x07TURKISH\x10\t\x12\x0b\n\x07SERBIAN\x10\n\x12\x0b\n\x07RUSSIAN\x10\x0b\x12\t\n\x05\x44UTCH\x10\x0c\x12\t\n\x05GREEK\x10\r\x12\r\n\tNORWEGIAN\x10\x0e\x12\r\n\tSLOVENIAN\x10\x0f\x12\r\n\tUKRAINIAN\x10\x10\x12\r\n\tBULGARIAN\x10\x11\x12\t\n\x05\x43ZECH\x10\x12\x12\n\n\x06\x44\x41NISH\x10\x13\x12\r\n\tHUNGARIAN\x10\x14\x12\x0f\n\x0b\x41ZERBAIJANI\x10\x15\x12\x16\n\x12SIMPLIFIED_CHINESE\x10\x1e\x12\x17\n\x13TRADITIONAL_CHINESE\x10\x1f\x42\x64\n\x14org.meshtastic.protoB\x0e\x44\x65viceUIProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.device_ui_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\016DeviceUIProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_COMPASSMODE._serialized_start=1278
|
||||
_COMPASSMODE._serialized_end=1340
|
||||
_THEME._serialized_start=1342
|
||||
_THEME._serialized_end=1379
|
||||
_LANGUAGE._serialized_start=1382
|
||||
_LANGUAGE._serialized_end=1734
|
||||
_DEVICEUICONFIG._serialized_start=61
|
||||
_DEVICEUICONFIG._serialized_end=828
|
||||
_DEVICEUICONFIG_GPSCOORDINATEFORMAT._serialized_start=742
|
||||
_DEVICEUICONFIG_GPSCOORDINATEFORMAT._serialized_end=828
|
||||
_NODEFILTER._serialized_start=831
|
||||
_NODEFILTER._serialized_end=998
|
||||
_NODEHIGHLIGHT._serialized_start=1000
|
||||
_NODEHIGHLIGHT._serialized_end=1126
|
||||
_GEOPOINT._serialized_start=1128
|
||||
_GEOPOINT._serialized_end=1189
|
||||
_MAP._serialized_start=1191
|
||||
_MAP._serialized_end=1276
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,148 +0,0 @@
|
||||
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
AZERBAIJANI: Language
|
||||
BULGARIAN: Language
|
||||
CZECH: Language
|
||||
DANISH: Language
|
||||
DARK: Theme
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
DUTCH: Language
|
||||
DYNAMIC: CompassMode
|
||||
ENGLISH: Language
|
||||
FINNISH: Language
|
||||
FIXED_RING: CompassMode
|
||||
FREEZE_HEADING: CompassMode
|
||||
FRENCH: Language
|
||||
GERMAN: Language
|
||||
GREEK: Language
|
||||
HUNGARIAN: Language
|
||||
ITALIAN: Language
|
||||
LIGHT: Theme
|
||||
NORWEGIAN: Language
|
||||
POLISH: Language
|
||||
PORTUGUESE: Language
|
||||
RED: Theme
|
||||
RUSSIAN: Language
|
||||
SERBIAN: Language
|
||||
SIMPLIFIED_CHINESE: Language
|
||||
SLOVENIAN: Language
|
||||
SPANISH: Language
|
||||
SWEDISH: Language
|
||||
TRADITIONAL_CHINESE: Language
|
||||
TURKISH: Language
|
||||
UKRAINIAN: Language
|
||||
|
||||
class DeviceUIConfig(_message.Message):
|
||||
__slots__ = ["alert_enabled", "banner_enabled", "calibration_data", "compass_mode", "gps_format", "is_clockface_analog", "language", "map_data", "node_filter", "node_highlight", "pin_code", "ring_tone_id", "screen_brightness", "screen_lock", "screen_rgb_color", "screen_timeout", "settings_lock", "theme", "version"]
|
||||
class GpsCoordinateFormat(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ALERT_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
BANNER_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
CALIBRATION_DATA_FIELD_NUMBER: _ClassVar[int]
|
||||
COMPASS_MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
DEC: DeviceUIConfig.GpsCoordinateFormat
|
||||
DMS: DeviceUIConfig.GpsCoordinateFormat
|
||||
GPS_FORMAT_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_CLOCKFACE_ANALOG_FIELD_NUMBER: _ClassVar[int]
|
||||
LANGUAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
MAP_DATA_FIELD_NUMBER: _ClassVar[int]
|
||||
MGRS: DeviceUIConfig.GpsCoordinateFormat
|
||||
MLS: DeviceUIConfig.GpsCoordinateFormat
|
||||
NODE_FILTER_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_HIGHLIGHT_FIELD_NUMBER: _ClassVar[int]
|
||||
OLC: DeviceUIConfig.GpsCoordinateFormat
|
||||
OSGR: DeviceUIConfig.GpsCoordinateFormat
|
||||
PIN_CODE_FIELD_NUMBER: _ClassVar[int]
|
||||
RING_TONE_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
SCREEN_BRIGHTNESS_FIELD_NUMBER: _ClassVar[int]
|
||||
SCREEN_LOCK_FIELD_NUMBER: _ClassVar[int]
|
||||
SCREEN_RGB_COLOR_FIELD_NUMBER: _ClassVar[int]
|
||||
SCREEN_TIMEOUT_FIELD_NUMBER: _ClassVar[int]
|
||||
SETTINGS_LOCK_FIELD_NUMBER: _ClassVar[int]
|
||||
THEME_FIELD_NUMBER: _ClassVar[int]
|
||||
UTM: DeviceUIConfig.GpsCoordinateFormat
|
||||
VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
alert_enabled: bool
|
||||
banner_enabled: bool
|
||||
calibration_data: bytes
|
||||
compass_mode: CompassMode
|
||||
gps_format: DeviceUIConfig.GpsCoordinateFormat
|
||||
is_clockface_analog: bool
|
||||
language: Language
|
||||
map_data: Map
|
||||
node_filter: NodeFilter
|
||||
node_highlight: NodeHighlight
|
||||
pin_code: int
|
||||
ring_tone_id: int
|
||||
screen_brightness: int
|
||||
screen_lock: bool
|
||||
screen_rgb_color: int
|
||||
screen_timeout: int
|
||||
settings_lock: bool
|
||||
theme: Theme
|
||||
version: int
|
||||
def __init__(self, version: _Optional[int] = ..., screen_brightness: _Optional[int] = ..., screen_timeout: _Optional[int] = ..., screen_lock: bool = ..., settings_lock: bool = ..., pin_code: _Optional[int] = ..., theme: _Optional[_Union[Theme, str]] = ..., alert_enabled: bool = ..., banner_enabled: bool = ..., ring_tone_id: _Optional[int] = ..., language: _Optional[_Union[Language, str]] = ..., node_filter: _Optional[_Union[NodeFilter, _Mapping]] = ..., node_highlight: _Optional[_Union[NodeHighlight, _Mapping]] = ..., calibration_data: _Optional[bytes] = ..., map_data: _Optional[_Union[Map, _Mapping]] = ..., compass_mode: _Optional[_Union[CompassMode, str]] = ..., screen_rgb_color: _Optional[int] = ..., is_clockface_analog: bool = ..., gps_format: _Optional[_Union[DeviceUIConfig.GpsCoordinateFormat, str]] = ...) -> None: ...
|
||||
|
||||
class GeoPoint(_message.Message):
|
||||
__slots__ = ["latitude", "longitude", "zoom"]
|
||||
LATITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
LONGITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
ZOOM_FIELD_NUMBER: _ClassVar[int]
|
||||
latitude: int
|
||||
longitude: int
|
||||
zoom: int
|
||||
def __init__(self, zoom: _Optional[int] = ..., latitude: _Optional[int] = ..., longitude: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class Map(_message.Message):
|
||||
__slots__ = ["follow_gps", "home", "style"]
|
||||
FOLLOW_GPS_FIELD_NUMBER: _ClassVar[int]
|
||||
HOME_FIELD_NUMBER: _ClassVar[int]
|
||||
STYLE_FIELD_NUMBER: _ClassVar[int]
|
||||
follow_gps: bool
|
||||
home: GeoPoint
|
||||
style: str
|
||||
def __init__(self, home: _Optional[_Union[GeoPoint, _Mapping]] = ..., style: _Optional[str] = ..., follow_gps: bool = ...) -> None: ...
|
||||
|
||||
class NodeFilter(_message.Message):
|
||||
__slots__ = ["channel", "hops_away", "node_name", "offline_switch", "position_switch", "public_key_switch", "unknown_switch"]
|
||||
CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
HOPS_AWAY_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
OFFLINE_SWITCH_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_SWITCH_FIELD_NUMBER: _ClassVar[int]
|
||||
PUBLIC_KEY_SWITCH_FIELD_NUMBER: _ClassVar[int]
|
||||
UNKNOWN_SWITCH_FIELD_NUMBER: _ClassVar[int]
|
||||
channel: int
|
||||
hops_away: int
|
||||
node_name: str
|
||||
offline_switch: bool
|
||||
position_switch: bool
|
||||
public_key_switch: bool
|
||||
unknown_switch: bool
|
||||
def __init__(self, unknown_switch: bool = ..., offline_switch: bool = ..., public_key_switch: bool = ..., hops_away: _Optional[int] = ..., position_switch: bool = ..., node_name: _Optional[str] = ..., channel: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class NodeHighlight(_message.Message):
|
||||
__slots__ = ["chat_switch", "iaq_switch", "node_name", "position_switch", "telemetry_switch"]
|
||||
CHAT_SWITCH_FIELD_NUMBER: _ClassVar[int]
|
||||
IAQ_SWITCH_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_SWITCH_FIELD_NUMBER: _ClassVar[int]
|
||||
TELEMETRY_SWITCH_FIELD_NUMBER: _ClassVar[int]
|
||||
chat_switch: bool
|
||||
iaq_switch: bool
|
||||
node_name: str
|
||||
position_switch: bool
|
||||
telemetry_switch: bool
|
||||
def __init__(self, chat_switch: bool = ..., position_switch: bool = ..., telemetry_switch: bool = ..., iaq_switch: bool = ..., node_name: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class CompassMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class Theme(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class Language(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
@@ -1,33 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/deviceonly_legacy.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import deviceonly_pb2 as meshtastic_dot_protobuf_dot_deviceonly__pb2
|
||||
from meshtastic.protobuf import telemetry_pb2 as meshtastic_dot_protobuf_dot_telemetry__pb2
|
||||
from meshtastic.protobuf import nanopb_pb2 as meshtastic_dot_protobuf_dot_nanopb__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+meshtastic/protobuf/deviceonly_legacy.proto\x12\x13meshtastic.protobuf\x1a$meshtastic/protobuf/deviceonly.proto\x1a#meshtastic/protobuf/telemetry.proto\x1a meshtastic/protobuf/nanopb.proto\"\xf7\x02\n\x13NodeInfoLite_Legacy\x12\x0b\n\x03num\x18\x01 \x01(\r\x12+\n\x04user\x18\x02 \x01(\x0b\x32\x1d.meshtastic.protobuf.UserLite\x12\x33\n\x08position\x18\x03 \x01(\x0b\x32!.meshtastic.protobuf.PositionLite\x12\x0b\n\x03snr\x18\x04 \x01(\x02\x12\x12\n\nlast_heard\x18\x05 \x01(\x07\x12:\n\x0e\x64\x65vice_metrics\x18\x06 \x01(\x0b\x32\".meshtastic.protobuf.DeviceMetrics\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\r\x12\x10\n\x08via_mqtt\x18\x08 \x01(\x08\x12\x16\n\thops_away\x18\t \x01(\rH\x00\x88\x01\x01\x12\x13\n\x0bis_favorite\x18\n \x01(\x08\x12\x12\n\nis_ignored\x18\x0b \x01(\x08\x12\x10\n\x08next_hop\x18\x0c \x01(\r\x12\x10\n\x08\x62itfield\x18\r \x01(\rB\x0c\n\n_hops_away\"\x92\x01\n\x13NodeDatabase_Legacy\x12\x0f\n\x07version\x18\x01 \x01(\r\x12j\n\x05nodes\x18\x02 \x03(\x0b\x32(.meshtastic.protobuf.NodeInfoLite_LegacyB1\x92?.\x92\x01+std::vector<meshtastic_NodeInfoLite_Legacy>Bt\n\x14org.meshtastic.protoB\x10\x44\x65viceOnlyLegacyZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x92?\x0b\xc2\x01\x08<vector>b\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.deviceonly_legacy_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\020DeviceOnlyLegacyZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000\222?\013\302\001\010<vector>'
|
||||
_NODEDATABASE_LEGACY.fields_by_name['nodes']._options = None
|
||||
_NODEDATABASE_LEGACY.fields_by_name['nodes']._serialized_options = b'\222?.\222\001+std::vector<meshtastic_NodeInfoLite_Legacy>'
|
||||
_NODEINFOLITE_LEGACY._serialized_start=178
|
||||
_NODEINFOLITE_LEGACY._serialized_end=553
|
||||
_NODEDATABASE_LEGACY._serialized_start=556
|
||||
_NODEDATABASE_LEGACY._serialized_end=702
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,47 +0,0 @@
|
||||
from meshtastic.protobuf import deviceonly_pb2 as _deviceonly_pb2
|
||||
from meshtastic.protobuf import telemetry_pb2 as _telemetry_pb2
|
||||
from meshtastic.protobuf import nanopb_pb2 as _nanopb_pb2
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class NodeDatabase_Legacy(_message.Message):
|
||||
__slots__ = ["nodes", "version"]
|
||||
NODES_FIELD_NUMBER: _ClassVar[int]
|
||||
VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
nodes: _containers.RepeatedCompositeFieldContainer[NodeInfoLite_Legacy]
|
||||
version: int
|
||||
def __init__(self, version: _Optional[int] = ..., nodes: _Optional[_Iterable[_Union[NodeInfoLite_Legacy, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class NodeInfoLite_Legacy(_message.Message):
|
||||
__slots__ = ["bitfield", "channel", "device_metrics", "hops_away", "is_favorite", "is_ignored", "last_heard", "next_hop", "num", "position", "snr", "user", "via_mqtt"]
|
||||
BITFIELD_FIELD_NUMBER: _ClassVar[int]
|
||||
CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_METRICS_FIELD_NUMBER: _ClassVar[int]
|
||||
HOPS_AWAY_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_FAVORITE_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_IGNORED_FIELD_NUMBER: _ClassVar[int]
|
||||
LAST_HEARD_FIELD_NUMBER: _ClassVar[int]
|
||||
NEXT_HOP_FIELD_NUMBER: _ClassVar[int]
|
||||
NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
SNR_FIELD_NUMBER: _ClassVar[int]
|
||||
USER_FIELD_NUMBER: _ClassVar[int]
|
||||
VIA_MQTT_FIELD_NUMBER: _ClassVar[int]
|
||||
bitfield: int
|
||||
channel: int
|
||||
device_metrics: _telemetry_pb2.DeviceMetrics
|
||||
hops_away: int
|
||||
is_favorite: bool
|
||||
is_ignored: bool
|
||||
last_heard: int
|
||||
next_hop: int
|
||||
num: int
|
||||
position: _deviceonly_pb2.PositionLite
|
||||
snr: float
|
||||
user: _deviceonly_pb2.UserLite
|
||||
via_mqtt: bool
|
||||
def __init__(self, num: _Optional[int] = ..., user: _Optional[_Union[_deviceonly_pb2.UserLite, _Mapping]] = ..., position: _Optional[_Union[_deviceonly_pb2.PositionLite, _Mapping]] = ..., snr: _Optional[float] = ..., last_heard: _Optional[int] = ..., device_metrics: _Optional[_Union[_telemetry_pb2.DeviceMetrics, _Mapping]] = ..., channel: _Optional[int] = ..., via_mqtt: bool = ..., hops_away: _Optional[int] = ..., is_favorite: bool = ..., is_ignored: bool = ..., next_hop: _Optional[int] = ..., bitfield: _Optional[int] = ...) -> None: ...
|
||||
@@ -1,68 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/deviceonly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import channel_pb2 as meshtastic_dot_protobuf_dot_channel__pb2
|
||||
from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config__pb2
|
||||
from meshtastic.protobuf import localonly_pb2 as meshtastic_dot_protobuf_dot_localonly__pb2
|
||||
from meshtastic.protobuf import mesh_pb2 as meshtastic_dot_protobuf_dot_mesh__pb2
|
||||
from meshtastic.protobuf import telemetry_pb2 as meshtastic_dot_protobuf_dot_telemetry__pb2
|
||||
from meshtastic.protobuf import nanopb_pb2 as meshtastic_dot_protobuf_dot_nanopb__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$meshtastic/protobuf/deviceonly.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\x1a#meshtastic/protobuf/localonly.proto\x1a\x1emeshtastic/protobuf/mesh.proto\x1a#meshtastic/protobuf/telemetry.proto\x1a meshtastic/protobuf/nanopb.proto\"\xb1\x01\n\x0cPositionLite\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x0c\n\x04time\x18\x04 \x01(\x07\x12@\n\x0flocation_source\x18\x05 \x01(\x0e\x32\'.meshtastic.protobuf.Position.LocSource\x12\x16\n\x0eprecision_bits\x18\x06 \x01(\r\"\x94\x02\n\x08UserLite\x12\x13\n\x07macaddr\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x34\n\x08hw_model\x18\x04 \x01(\x0e\x32\".meshtastic.protobuf.HardwareModel\x12\x13\n\x0bis_licensed\x18\x05 \x01(\x08\x12;\n\x04role\x18\x06 \x01(\x0e\x32-.meshtastic.protobuf.Config.DeviceConfig.Role\x12\x12\n\npublic_key\x18\x07 \x01(\x0c\x12\x1c\n\x0fis_unmessagable\x18\t \x01(\x08H\x00\x88\x01\x01\x42\x12\n\x10_is_unmessagable\"\xbc\x03\n\x0cNodeInfoLite\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x0b\n\x03snr\x18\x04 \x01(\x02\x12\x12\n\nlast_heard\x18\x05 \x01(\x07\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\r\x12\x16\n\thops_away\x18\t \x01(\rH\x00\x88\x01\x01\x12\x10\n\x08next_hop\x18\x0c \x01(\r\x12\x10\n\x08\x62itfield\x18\r \x01(\r\x12\x11\n\tlong_name\x18\x0e \x01(\t\x12\x12\n\nshort_name\x18\x0f \x01(\t\x12\x34\n\x08hw_model\x18\x10 \x01(\x0e\x32\".meshtastic.protobuf.HardwareModel\x12;\n\x04role\x18\x11 \x01(\x0e\x32-.meshtastic.protobuf.Config.DeviceConfig.Role\x12\x12\n\npublic_key\x18\x12 \x01(\x0c\x12\x0e\n\x06snr_q4\x18\x13 \x01(\x11\x42\x0c\n\n_hops_awayJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x06\x10\x07J\x04\x08\x08\x10\tJ\x04\x08\n\x10\x0bJ\x04\x08\x0b\x10\x0cR\x04userR\x08positionR\x0e\x64\x65vice_metricsR\x08via_mqttR\x0bis_favoriteR\nis_ignored\"\xa1\x03\n\x0b\x44\x65viceState\x12\x30\n\x07my_node\x18\x02 \x01(\x0b\x32\x1f.meshtastic.protobuf.MyNodeInfo\x12(\n\x05owner\x18\x03 \x01(\x0b\x32\x19.meshtastic.protobuf.User\x12\x36\n\rreceive_queue\x18\x05 \x03(\x0b\x32\x1f.meshtastic.protobuf.MeshPacket\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x38\n\x0frx_text_message\x18\x07 \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacket\x12\x13\n\x07no_save\x18\t \x01(\x08\x42\x02\x18\x01\x12\x19\n\rdid_gps_reset\x18\x0b \x01(\x08\x42\x02\x18\x01\x12\x34\n\x0brx_waypoint\x18\x0c \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacket\x12M\n\x19node_remote_hardware_pins\x18\r \x03(\x0b\x32*.meshtastic.protobuf.NodeRemoteHardwarePin\"U\n\x11NodePositionEntry\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x33\n\x08position\x18\x02 \x01(\x0b\x32!.meshtastic.protobuf.PositionLite\"]\n\x12NodeTelemetryEntry\x12\x0b\n\x03num\x18\x01 \x01(\r\x12:\n\x0e\x64\x65vice_metrics\x18\x02 \x01(\x0b\x32\".meshtastic.protobuf.DeviceMetrics\"i\n\x14NodeEnvironmentEntry\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x44\n\x13\x65nvironment_metrics\x18\x02 \x01(\x0b\x32\'.meshtastic.protobuf.EnvironmentMetrics\"R\n\x0fNodeStatusEntry\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x32\n\x06status\x18\x02 \x01(\x0b\x32\".meshtastic.protobuf.StatusMessage\"\xb0\x04\n\x0cNodeDatabase\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\\\n\x05nodes\x18\x02 \x03(\x0b\x32!.meshtastic.protobuf.NodeInfoLiteB*\x92?\'\x92\x01$std::vector<meshtastic_NodeInfoLite>\x12j\n\tpositions\x18\x03 \x03(\x0b\x32&.meshtastic.protobuf.NodePositionEntryB/\x92?,\x92\x01)std::vector<meshtastic_NodePositionEntry>\x12l\n\ttelemetry\x18\x04 \x03(\x0b\x32\'.meshtastic.protobuf.NodeTelemetryEntryB0\x92?-\x92\x01*std::vector<meshtastic_NodeTelemetryEntry>\x12\x63\n\x06status\x18\x05 \x03(\x0b\x32$.meshtastic.protobuf.NodeStatusEntryB-\x92?*\x92\x01\'std::vector<meshtastic_NodeStatusEntry>\x12r\n\x0b\x65nvironment\x18\x06 \x03(\x0b\x32).meshtastic.protobuf.NodeEnvironmentEntryB2\x92?/\x92\x01,std::vector<meshtastic_NodeEnvironmentEntry>\"N\n\x0b\x43hannelFile\x12.\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1c.meshtastic.protobuf.Channel\x12\x0f\n\x07version\x18\x02 \x01(\r\"\x86\x02\n\x11\x42\x61\x63kupPreferences\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x11\n\ttimestamp\x18\x02 \x01(\x07\x12\x30\n\x06\x63onfig\x18\x03 \x01(\x0b\x32 .meshtastic.protobuf.LocalConfig\x12=\n\rmodule_config\x18\x04 \x01(\x0b\x32&.meshtastic.protobuf.LocalModuleConfig\x12\x32\n\x08\x63hannels\x18\x05 \x01(\x0b\x32 .meshtastic.protobuf.ChannelFile\x12(\n\x05owner\x18\x06 \x01(\x0b\x32\x19.meshtastic.protobuf.UserBn\n\x14org.meshtastic.protoB\nDeviceOnlyZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x92?\x0b\xc2\x01\x08<vector>b\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.deviceonly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\nDeviceOnlyZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000\222?\013\302\001\010<vector>'
|
||||
_USERLITE.fields_by_name['macaddr']._options = None
|
||||
_USERLITE.fields_by_name['macaddr']._serialized_options = b'\030\001'
|
||||
_DEVICESTATE.fields_by_name['no_save']._options = None
|
||||
_DEVICESTATE.fields_by_name['no_save']._serialized_options = b'\030\001'
|
||||
_DEVICESTATE.fields_by_name['did_gps_reset']._options = None
|
||||
_DEVICESTATE.fields_by_name['did_gps_reset']._serialized_options = b'\030\001'
|
||||
_NODEDATABASE.fields_by_name['nodes']._options = None
|
||||
_NODEDATABASE.fields_by_name['nodes']._serialized_options = b'\222?\'\222\001$std::vector<meshtastic_NodeInfoLite>'
|
||||
_NODEDATABASE.fields_by_name['positions']._options = None
|
||||
_NODEDATABASE.fields_by_name['positions']._serialized_options = b'\222?,\222\001)std::vector<meshtastic_NodePositionEntry>'
|
||||
_NODEDATABASE.fields_by_name['telemetry']._options = None
|
||||
_NODEDATABASE.fields_by_name['telemetry']._serialized_options = b'\222?-\222\001*std::vector<meshtastic_NodeTelemetryEntry>'
|
||||
_NODEDATABASE.fields_by_name['status']._options = None
|
||||
_NODEDATABASE.fields_by_name['status']._serialized_options = b'\222?*\222\001\'std::vector<meshtastic_NodeStatusEntry>'
|
||||
_NODEDATABASE.fields_by_name['environment']._options = None
|
||||
_NODEDATABASE.fields_by_name['environment']._serialized_options = b'\222?/\222\001,std::vector<meshtastic_NodeEnvironmentEntry>'
|
||||
_POSITIONLITE._serialized_start=271
|
||||
_POSITIONLITE._serialized_end=448
|
||||
_USERLITE._serialized_start=451
|
||||
_USERLITE._serialized_end=727
|
||||
_NODEINFOLITE._serialized_start=730
|
||||
_NODEINFOLITE._serialized_end=1174
|
||||
_DEVICESTATE._serialized_start=1177
|
||||
_DEVICESTATE._serialized_end=1594
|
||||
_NODEPOSITIONENTRY._serialized_start=1596
|
||||
_NODEPOSITIONENTRY._serialized_end=1681
|
||||
_NODETELEMETRYENTRY._serialized_start=1683
|
||||
_NODETELEMETRYENTRY._serialized_end=1776
|
||||
_NODEENVIRONMENTENTRY._serialized_start=1778
|
||||
_NODEENVIRONMENTENTRY._serialized_end=1883
|
||||
_NODESTATUSENTRY._serialized_start=1885
|
||||
_NODESTATUSENTRY._serialized_end=1967
|
||||
_NODEDATABASE._serialized_start=1970
|
||||
_NODEDATABASE._serialized_end=2530
|
||||
_CHANNELFILE._serialized_start=2532
|
||||
_CHANNELFILE._serialized_end=2610
|
||||
_BACKUPPREFERENCES._serialized_start=2613
|
||||
_BACKUPPREFERENCES._serialized_end=2875
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,172 +0,0 @@
|
||||
from meshtastic.protobuf import channel_pb2 as _channel_pb2
|
||||
from meshtastic.protobuf import config_pb2 as _config_pb2
|
||||
from meshtastic.protobuf import localonly_pb2 as _localonly_pb2
|
||||
from meshtastic.protobuf import mesh_pb2 as _mesh_pb2
|
||||
from meshtastic.protobuf import telemetry_pb2 as _telemetry_pb2
|
||||
from meshtastic.protobuf import nanopb_pb2 as _nanopb_pb2
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class BackupPreferences(_message.Message):
|
||||
__slots__ = ["channels", "config", "module_config", "owner", "timestamp", "version"]
|
||||
CHANNELS_FIELD_NUMBER: _ClassVar[int]
|
||||
CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
MODULE_CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
OWNER_FIELD_NUMBER: _ClassVar[int]
|
||||
TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
|
||||
VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
channels: ChannelFile
|
||||
config: _localonly_pb2.LocalConfig
|
||||
module_config: _localonly_pb2.LocalModuleConfig
|
||||
owner: _mesh_pb2.User
|
||||
timestamp: int
|
||||
version: int
|
||||
def __init__(self, version: _Optional[int] = ..., timestamp: _Optional[int] = ..., config: _Optional[_Union[_localonly_pb2.LocalConfig, _Mapping]] = ..., module_config: _Optional[_Union[_localonly_pb2.LocalModuleConfig, _Mapping]] = ..., channels: _Optional[_Union[ChannelFile, _Mapping]] = ..., owner: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class ChannelFile(_message.Message):
|
||||
__slots__ = ["channels", "version"]
|
||||
CHANNELS_FIELD_NUMBER: _ClassVar[int]
|
||||
VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
channels: _containers.RepeatedCompositeFieldContainer[_channel_pb2.Channel]
|
||||
version: int
|
||||
def __init__(self, channels: _Optional[_Iterable[_Union[_channel_pb2.Channel, _Mapping]]] = ..., version: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class DeviceState(_message.Message):
|
||||
__slots__ = ["did_gps_reset", "my_node", "no_save", "node_remote_hardware_pins", "owner", "receive_queue", "rx_text_message", "rx_waypoint", "version"]
|
||||
DID_GPS_RESET_FIELD_NUMBER: _ClassVar[int]
|
||||
MY_NODE_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_REMOTE_HARDWARE_PINS_FIELD_NUMBER: _ClassVar[int]
|
||||
NO_SAVE_FIELD_NUMBER: _ClassVar[int]
|
||||
OWNER_FIELD_NUMBER: _ClassVar[int]
|
||||
RECEIVE_QUEUE_FIELD_NUMBER: _ClassVar[int]
|
||||
RX_TEXT_MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
RX_WAYPOINT_FIELD_NUMBER: _ClassVar[int]
|
||||
VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
did_gps_reset: bool
|
||||
my_node: _mesh_pb2.MyNodeInfo
|
||||
no_save: bool
|
||||
node_remote_hardware_pins: _containers.RepeatedCompositeFieldContainer[_mesh_pb2.NodeRemoteHardwarePin]
|
||||
owner: _mesh_pb2.User
|
||||
receive_queue: _containers.RepeatedCompositeFieldContainer[_mesh_pb2.MeshPacket]
|
||||
rx_text_message: _mesh_pb2.MeshPacket
|
||||
rx_waypoint: _mesh_pb2.MeshPacket
|
||||
version: int
|
||||
def __init__(self, my_node: _Optional[_Union[_mesh_pb2.MyNodeInfo, _Mapping]] = ..., owner: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ..., receive_queue: _Optional[_Iterable[_Union[_mesh_pb2.MeshPacket, _Mapping]]] = ..., version: _Optional[int] = ..., rx_text_message: _Optional[_Union[_mesh_pb2.MeshPacket, _Mapping]] = ..., no_save: bool = ..., did_gps_reset: bool = ..., rx_waypoint: _Optional[_Union[_mesh_pb2.MeshPacket, _Mapping]] = ..., node_remote_hardware_pins: _Optional[_Iterable[_Union[_mesh_pb2.NodeRemoteHardwarePin, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class NodeDatabase(_message.Message):
|
||||
__slots__ = ["environment", "nodes", "positions", "status", "telemetry", "version"]
|
||||
ENVIRONMENT_FIELD_NUMBER: _ClassVar[int]
|
||||
NODES_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITIONS_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
TELEMETRY_FIELD_NUMBER: _ClassVar[int]
|
||||
VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
environment: _containers.RepeatedCompositeFieldContainer[NodeEnvironmentEntry]
|
||||
nodes: _containers.RepeatedCompositeFieldContainer[NodeInfoLite]
|
||||
positions: _containers.RepeatedCompositeFieldContainer[NodePositionEntry]
|
||||
status: _containers.RepeatedCompositeFieldContainer[NodeStatusEntry]
|
||||
telemetry: _containers.RepeatedCompositeFieldContainer[NodeTelemetryEntry]
|
||||
version: int
|
||||
def __init__(self, version: _Optional[int] = ..., nodes: _Optional[_Iterable[_Union[NodeInfoLite, _Mapping]]] = ..., positions: _Optional[_Iterable[_Union[NodePositionEntry, _Mapping]]] = ..., telemetry: _Optional[_Iterable[_Union[NodeTelemetryEntry, _Mapping]]] = ..., status: _Optional[_Iterable[_Union[NodeStatusEntry, _Mapping]]] = ..., environment: _Optional[_Iterable[_Union[NodeEnvironmentEntry, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class NodeEnvironmentEntry(_message.Message):
|
||||
__slots__ = ["environment_metrics", "num"]
|
||||
ENVIRONMENT_METRICS_FIELD_NUMBER: _ClassVar[int]
|
||||
NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
environment_metrics: _telemetry_pb2.EnvironmentMetrics
|
||||
num: int
|
||||
def __init__(self, num: _Optional[int] = ..., environment_metrics: _Optional[_Union[_telemetry_pb2.EnvironmentMetrics, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class NodeInfoLite(_message.Message):
|
||||
__slots__ = ["bitfield", "channel", "hops_away", "hw_model", "last_heard", "long_name", "next_hop", "num", "public_key", "role", "short_name", "snr", "snr_q4"]
|
||||
BITFIELD_FIELD_NUMBER: _ClassVar[int]
|
||||
CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
HOPS_AWAY_FIELD_NUMBER: _ClassVar[int]
|
||||
HW_MODEL_FIELD_NUMBER: _ClassVar[int]
|
||||
LAST_HEARD_FIELD_NUMBER: _ClassVar[int]
|
||||
LONG_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
NEXT_HOP_FIELD_NUMBER: _ClassVar[int]
|
||||
NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
SNR_FIELD_NUMBER: _ClassVar[int]
|
||||
SNR_Q4_FIELD_NUMBER: _ClassVar[int]
|
||||
bitfield: int
|
||||
channel: int
|
||||
hops_away: int
|
||||
hw_model: _mesh_pb2.HardwareModel
|
||||
last_heard: int
|
||||
long_name: str
|
||||
next_hop: int
|
||||
num: int
|
||||
public_key: bytes
|
||||
role: _config_pb2.Config.DeviceConfig.Role
|
||||
short_name: str
|
||||
snr: float
|
||||
snr_q4: int
|
||||
def __init__(self, num: _Optional[int] = ..., snr: _Optional[float] = ..., last_heard: _Optional[int] = ..., channel: _Optional[int] = ..., hops_away: _Optional[int] = ..., next_hop: _Optional[int] = ..., bitfield: _Optional[int] = ..., long_name: _Optional[str] = ..., short_name: _Optional[str] = ..., hw_model: _Optional[_Union[_mesh_pb2.HardwareModel, str]] = ..., role: _Optional[_Union[_config_pb2.Config.DeviceConfig.Role, str]] = ..., public_key: _Optional[bytes] = ..., snr_q4: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class NodePositionEntry(_message.Message):
|
||||
__slots__ = ["num", "position"]
|
||||
NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
num: int
|
||||
position: PositionLite
|
||||
def __init__(self, num: _Optional[int] = ..., position: _Optional[_Union[PositionLite, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class NodeStatusEntry(_message.Message):
|
||||
__slots__ = ["num", "status"]
|
||||
NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
num: int
|
||||
status: _mesh_pb2.StatusMessage
|
||||
def __init__(self, num: _Optional[int] = ..., status: _Optional[_Union[_mesh_pb2.StatusMessage, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class NodeTelemetryEntry(_message.Message):
|
||||
__slots__ = ["device_metrics", "num"]
|
||||
DEVICE_METRICS_FIELD_NUMBER: _ClassVar[int]
|
||||
NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
device_metrics: _telemetry_pb2.DeviceMetrics
|
||||
num: int
|
||||
def __init__(self, num: _Optional[int] = ..., device_metrics: _Optional[_Union[_telemetry_pb2.DeviceMetrics, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class PositionLite(_message.Message):
|
||||
__slots__ = ["altitude", "latitude_i", "location_source", "longitude_i", "precision_bits", "time"]
|
||||
ALTITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LOCATION_SOURCE_FIELD_NUMBER: _ClassVar[int]
|
||||
LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
PRECISION_BITS_FIELD_NUMBER: _ClassVar[int]
|
||||
TIME_FIELD_NUMBER: _ClassVar[int]
|
||||
altitude: int
|
||||
latitude_i: int
|
||||
location_source: _mesh_pb2.Position.LocSource
|
||||
longitude_i: int
|
||||
precision_bits: int
|
||||
time: int
|
||||
def __init__(self, latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., time: _Optional[int] = ..., location_source: _Optional[_Union[_mesh_pb2.Position.LocSource, str]] = ..., precision_bits: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class UserLite(_message.Message):
|
||||
__slots__ = ["hw_model", "is_licensed", "is_unmessagable", "long_name", "macaddr", "public_key", "role", "short_name"]
|
||||
HW_MODEL_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_LICENSED_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_UNMESSAGABLE_FIELD_NUMBER: _ClassVar[int]
|
||||
LONG_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
MACADDR_FIELD_NUMBER: _ClassVar[int]
|
||||
PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
hw_model: _mesh_pb2.HardwareModel
|
||||
is_licensed: bool
|
||||
is_unmessagable: bool
|
||||
long_name: str
|
||||
macaddr: bytes
|
||||
public_key: bytes
|
||||
role: _config_pb2.Config.DeviceConfig.Role
|
||||
short_name: str
|
||||
def __init__(self, macaddr: _Optional[bytes] = ..., long_name: _Optional[str] = ..., short_name: _Optional[str] = ..., hw_model: _Optional[_Union[_mesh_pb2.HardwareModel, str]] = ..., is_licensed: bool = ..., role: _Optional[_Union[_config_pb2.Config.DeviceConfig.Role, str]] = ..., public_key: _Optional[bytes] = ..., is_unmessagable: bool = ...) -> None: ...
|
||||
@@ -1,29 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/field_metadata.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(meshtastic/protobuf/field_metadata.proto\x12\x13meshtastic.protobuf\x1a google/protobuf/descriptor.proto\"\xfc\x01\n\rFieldMetadata\x12\x10\n\x08\x64iy_only\x18\x01 \x01(\x08\x12\x12\n\nadmin_only\x18\x02 \x01(\x08\x12\x11\n\tmin_value\x18\x03 \x01(\x01\x12\x11\n\tmax_value\x18\x04 \x01(\x01\x12\x0c\n\x04unit\x18\x05 \x01(\t\x12\x12\n\ndeprecated\x18\x06 \x01(\x08\x12\r\n\x05label\x18\x07 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x10\n\x08keywords\x18\t \x01(\t\x12\x16\n\x0esince_firmware\x18\n \x01(\t\x12\x18\n\x10\x64\x65precated_since\x18\x0b \x01(\t\x12\x15\n\roem_fixed_gps\x18\x0c \x01(\x08:[\n\x0e\x66ield_metadata\x12\x1d.google.protobuf.FieldOptions\x18\xb9\x8e\x03 \x01(\x0b\x32\".meshtastic.protobuf.FieldMetadata:d\n\x13\x65num_value_metadata\x12!.google.protobuf.EnumValueOptions\x18\xb9\x8e\x03 \x01(\x0b\x32\".meshtastic.protobuf.FieldMetadataBi\n\x14org.meshtastic.protoB\x13\x46ieldMetadataProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.field_metadata_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(field_metadata)
|
||||
google_dot_protobuf_dot_descriptor__pb2.EnumValueOptions.RegisterExtension(enum_value_metadata)
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\023FieldMetadataProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_FIELDMETADATA._serialized_start=100
|
||||
_FIELDMETADATA._serialized_end=352
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,38 +0,0 @@
|
||||
from google.protobuf import descriptor_pb2 as _descriptor_pb2
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Optional as _Optional
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
ENUM_VALUE_METADATA_FIELD_NUMBER: _ClassVar[int]
|
||||
FIELD_METADATA_FIELD_NUMBER: _ClassVar[int]
|
||||
enum_value_metadata: _descriptor.FieldDescriptor
|
||||
field_metadata: _descriptor.FieldDescriptor
|
||||
|
||||
class FieldMetadata(_message.Message):
|
||||
__slots__ = ["admin_only", "deprecated", "deprecated_since", "description", "diy_only", "keywords", "label", "max_value", "min_value", "oem_fixed_gps", "since_firmware", "unit"]
|
||||
ADMIN_ONLY_FIELD_NUMBER: _ClassVar[int]
|
||||
DEPRECATED_FIELD_NUMBER: _ClassVar[int]
|
||||
DEPRECATED_SINCE_FIELD_NUMBER: _ClassVar[int]
|
||||
DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
|
||||
DIY_ONLY_FIELD_NUMBER: _ClassVar[int]
|
||||
KEYWORDS_FIELD_NUMBER: _ClassVar[int]
|
||||
LABEL_FIELD_NUMBER: _ClassVar[int]
|
||||
MAX_VALUE_FIELD_NUMBER: _ClassVar[int]
|
||||
MIN_VALUE_FIELD_NUMBER: _ClassVar[int]
|
||||
OEM_FIXED_GPS_FIELD_NUMBER: _ClassVar[int]
|
||||
SINCE_FIRMWARE_FIELD_NUMBER: _ClassVar[int]
|
||||
UNIT_FIELD_NUMBER: _ClassVar[int]
|
||||
admin_only: bool
|
||||
deprecated: bool
|
||||
deprecated_since: str
|
||||
description: str
|
||||
diy_only: bool
|
||||
keywords: str
|
||||
label: str
|
||||
max_value: float
|
||||
min_value: float
|
||||
oem_fixed_gps: bool
|
||||
since_firmware: str
|
||||
unit: str
|
||||
def __init__(self, diy_only: bool = ..., admin_only: bool = ..., min_value: _Optional[float] = ..., max_value: _Optional[float] = ..., unit: _Optional[str] = ..., deprecated: bool = ..., label: _Optional[str] = ..., description: _Optional[str] = ..., keywords: _Optional[str] = ..., since_firmware: _Optional[str] = ..., deprecated_since: _Optional[str] = ..., oem_fixed_gps: bool = ...) -> None: ...
|
||||
@@ -1,50 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/interdevice.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%meshtastic/protobuf/interdevice.proto\x12\x13meshtastic.protobuf\"\xde\x01\n\x0c\x46ileTransfer\x12\x35\n\toperation\x18\x01 \x01(\x0e\x32\".meshtastic.protobuf.FileOperation\x12\x10\n\x08\x66ilepath\x18\x02 \x01(\t\x12\x10\n\x08\x66iledata\x18\x03 \x01(\x0c\x12/\n\x06status\x18\x04 \x01(\x0e\x32\x1f.meshtastic.protobuf.FileStatus\x12\x0f\n\x07message\x18\x05 \x01(\t\x12\x0e\n\x06offset\x18\x06 \x01(\x04\x12\x0e\n\x06length\x18\x07 \x01(\r\x12\x11\n\tfile_size\x18\x08 \x01(\x04\"\x9f\x01\n\x10\x44irectoryListing\x12\x11\n\tdirectory\x18\x01 \x01(\t\x12\x11\n\tfilenames\x18\x02 \x03(\t\x12/\n\x06status\x18\x03 \x01(\x0e\x32\x1f.meshtastic.protobuf.FileStatus\x12\x0f\n\x07message\x18\x04 \x01(\t\x12\x0e\n\x06offset\x18\x05 \x01(\r\x12\x13\n\x0btotal_count\x18\x06 \x01(\r\"G\n\x0eI2CTransaction\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\r\x12\x12\n\nwrite_data\x18\x02 \x01(\x0c\x12\x10\n\x08read_len\x18\x03 \x01(\r\"\x92\x03\n\nSdCardInfo\x12\x0f\n\x07present\x18\x01 \x01(\x08\x12;\n\tcard_type\x18\x02 \x01(\x0e\x32(.meshtastic.protobuf.SdCardInfo.CardType\x12\x39\n\x08\x66\x61t_type\x18\x03 \x01(\x0e\x32\'.meshtastic.protobuf.SdCardInfo.FatType\x12\x11\n\tcard_size\x18\x04 \x01(\x04\x12\x12\n\nused_bytes\x18\x05 \x01(\x04\x12\x12\n\nfree_bytes\x18\x06 \x01(\x04\x12\x13\n\x0bstats_valid\x18\x07 \x01(\x08\x12\x0c\n\x04\x62usy\x18\x08 \x01(\x08\x12\x13\n\x0bunformatted\x18\t \x01(\x08\"K\n\x08\x43\x61rdType\x12\x08\n\x04NONE\x10\x00\x12\x07\n\x03MMC\x10\x01\x12\x06\n\x02SD\x10\x02\x12\x08\n\x04SDHC\x10\x03\x12\x08\n\x04SDXC\x10\x04\x12\x10\n\x0cUNKNOWN_CARD\x10\x05\";\n\x07\x46\x61tType\x12\x0f\n\x0bUNKNOWN_FAT\x10\x00\x12\t\n\x05\x46\x41T16\x10\x01\x12\t\n\x05\x46\x41T32\x10\x02\x12\t\n\x05\x45XFAT\x10\x03\"\xa4\x01\n\tI2CResult\x12\x35\n\x06status\x18\x01 \x01(\x0e\x32%.meshtastic.protobuf.I2CResult.Status\x12\x11\n\tread_data\x18\x02 \x01(\x0c\"M\n\x06Status\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\x10\n\x0cNACK_ADDRESS\x10\x02\x12\r\n\tNACK_DATA\x10\x03\x12\t\n\x05\x45RROR\x10\x04\"\xf0\x04\n\x12InterdeviceMessage\x12\n\n\x02id\x18\x0f \x01(\r\x12\x0e\n\x04nmea\x18\x01 \x01(\tH\x00\x12\x0e\n\x04\x62\x65\x65p\x18\x02 \x01(\rH\x00\x12>\n\x0fi2c_transaction\x18\x03 \x01(\x0b\x32#.meshtastic.protobuf.I2CTransactionH\x00\x12\x34\n\ni2c_result\x18\x04 \x01(\x0b\x32\x1e.meshtastic.protobuf.I2CResultH\x00\x12\x12\n\x08i2c_scan\x18\x05 \x01(\x08H\x00\x12\x19\n\x0fi2c_scan_result\x18\x06 \x01(\x0cH\x00\x12:\n\rfile_transfer\x18\x07 \x01(\x0b\x32!.meshtastic.protobuf.FileTransferH\x00\x12\x42\n\x11\x64irectory_listing\x18\x08 \x01(\x0b\x32%.meshtastic.protobuf.DirectoryListingH\x00\x12\x15\n\x0bget_sd_info\x18\t \x01(\x08H\x00\x12\x32\n\x07sd_info\x18\n \x01(\x0b\x32\x1f.meshtastic.protobuf.SdCardInfoH\x00\x12\x37\n\x04ping\x18\x0b \x01(\x0e\x32\'.meshtastic.protobuf.InterdeviceVersionH\x00\x12\x37\n\x04pong\x18\x0c \x01(\x0e\x32\'.meshtastic.protobuf.InterdeviceVersionH\x00\x12\x0e\n\x04nack\x18\r \x01(\x08H\x00\x12\x34\n\nsd_command\x18\x0e \x01(\x0e\x32\x1e.meshtastic.protobuf.SdCommandH\x00\x42\x06\n\x04\x64\x61ta*Z\n\x12InterdeviceVersion\x12#\n\x1fINTERDEVICE_VERSION_UNSPECIFIED\x10\x00\x12\x1f\n\x1bINTERDEVICE_VERSION_CURRENT\x10\x02*7\n\rFileOperation\x12\x07\n\x03GET\x10\x00\x12\x08\n\x04POST\x10\x01\x12\x07\n\x03PUT\x10\x02\x12\n\n\x06\x44\x45LETE\x10\x03*\xa6\x01\n\nFileStatus\x12\x14\n\x10\x46ILE_UNSPECIFIED\x10\x00\x12\x0b\n\x07\x46ILE_OK\x10\x01\x12\r\n\tFILE_BUSY\x10\x02\x12\x10\n\x0c\x46ILE_NO_CARD\x10\x03\x12\x12\n\x0e\x46ILE_NOT_FOUND\x10\x04\x12\x18\n\x14\x46ILE_OFFSET_CONFLICT\x10\x05\x12\x11\n\rFILE_IO_ERROR\x10\x06\x12\x13\n\x0f\x46ILE_NOT_A_FILE\x10\x07*R\n\tSdCommand\x12\x1a\n\x16SD_COMMAND_UNSPECIFIED\x10\x00\x12\x0c\n\x08SD_MOUNT\x10\x01\x12\x0c\n\x08SD_EJECT\x10\x02\x12\r\n\tSD_FORMAT\x10\x03\x42g\n\x14org.meshtastic.protoB\x11InterdeviceProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.interdevice_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\021InterdeviceProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_INTERDEVICEVERSION._serialized_start=1721
|
||||
_INTERDEVICEVERSION._serialized_end=1811
|
||||
_FILEOPERATION._serialized_start=1813
|
||||
_FILEOPERATION._serialized_end=1868
|
||||
_FILESTATUS._serialized_start=1871
|
||||
_FILESTATUS._serialized_end=2037
|
||||
_SDCOMMAND._serialized_start=2039
|
||||
_SDCOMMAND._serialized_end=2121
|
||||
_FILETRANSFER._serialized_start=63
|
||||
_FILETRANSFER._serialized_end=285
|
||||
_DIRECTORYLISTING._serialized_start=288
|
||||
_DIRECTORYLISTING._serialized_end=447
|
||||
_I2CTRANSACTION._serialized_start=449
|
||||
_I2CTRANSACTION._serialized_end=520
|
||||
_SDCARDINFO._serialized_start=523
|
||||
_SDCARDINFO._serialized_end=925
|
||||
_SDCARDINFO_CARDTYPE._serialized_start=789
|
||||
_SDCARDINFO_CARDTYPE._serialized_end=864
|
||||
_SDCARDINFO_FATTYPE._serialized_start=866
|
||||
_SDCARDINFO_FATTYPE._serialized_end=925
|
||||
_I2CRESULT._serialized_start=928
|
||||
_I2CRESULT._serialized_end=1092
|
||||
_I2CRESULT_STATUS._serialized_start=1015
|
||||
_I2CRESULT_STATUS._serialized_end=1092
|
||||
_INTERDEVICEMESSAGE._serialized_start=1095
|
||||
_INTERDEVICEMESSAGE._serialized_end=1719
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,168 +0,0 @@
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DELETE: FileOperation
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
FILE_BUSY: FileStatus
|
||||
FILE_IO_ERROR: FileStatus
|
||||
FILE_NOT_A_FILE: FileStatus
|
||||
FILE_NOT_FOUND: FileStatus
|
||||
FILE_NO_CARD: FileStatus
|
||||
FILE_OFFSET_CONFLICT: FileStatus
|
||||
FILE_OK: FileStatus
|
||||
FILE_UNSPECIFIED: FileStatus
|
||||
GET: FileOperation
|
||||
INTERDEVICE_VERSION_CURRENT: InterdeviceVersion
|
||||
INTERDEVICE_VERSION_UNSPECIFIED: InterdeviceVersion
|
||||
POST: FileOperation
|
||||
PUT: FileOperation
|
||||
SD_COMMAND_UNSPECIFIED: SdCommand
|
||||
SD_EJECT: SdCommand
|
||||
SD_FORMAT: SdCommand
|
||||
SD_MOUNT: SdCommand
|
||||
|
||||
class DirectoryListing(_message.Message):
|
||||
__slots__ = ["directory", "filenames", "message", "offset", "status", "total_count"]
|
||||
DIRECTORY_FIELD_NUMBER: _ClassVar[int]
|
||||
FILENAMES_FIELD_NUMBER: _ClassVar[int]
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
OFFSET_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
TOTAL_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
directory: str
|
||||
filenames: _containers.RepeatedScalarFieldContainer[str]
|
||||
message: str
|
||||
offset: int
|
||||
status: FileStatus
|
||||
total_count: int
|
||||
def __init__(self, directory: _Optional[str] = ..., filenames: _Optional[_Iterable[str]] = ..., status: _Optional[_Union[FileStatus, str]] = ..., message: _Optional[str] = ..., offset: _Optional[int] = ..., total_count: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class FileTransfer(_message.Message):
|
||||
__slots__ = ["file_size", "filedata", "filepath", "length", "message", "offset", "operation", "status"]
|
||||
FILEDATA_FIELD_NUMBER: _ClassVar[int]
|
||||
FILEPATH_FIELD_NUMBER: _ClassVar[int]
|
||||
FILE_SIZE_FIELD_NUMBER: _ClassVar[int]
|
||||
LENGTH_FIELD_NUMBER: _ClassVar[int]
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
OFFSET_FIELD_NUMBER: _ClassVar[int]
|
||||
OPERATION_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
file_size: int
|
||||
filedata: bytes
|
||||
filepath: str
|
||||
length: int
|
||||
message: str
|
||||
offset: int
|
||||
operation: FileOperation
|
||||
status: FileStatus
|
||||
def __init__(self, operation: _Optional[_Union[FileOperation, str]] = ..., filepath: _Optional[str] = ..., filedata: _Optional[bytes] = ..., status: _Optional[_Union[FileStatus, str]] = ..., message: _Optional[str] = ..., offset: _Optional[int] = ..., length: _Optional[int] = ..., file_size: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class I2CResult(_message.Message):
|
||||
__slots__ = ["read_data", "status"]
|
||||
class Status(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ERROR: I2CResult.Status
|
||||
NACK_ADDRESS: I2CResult.Status
|
||||
NACK_DATA: I2CResult.Status
|
||||
OK: I2CResult.Status
|
||||
READ_DATA_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
UNSPECIFIED: I2CResult.Status
|
||||
read_data: bytes
|
||||
status: I2CResult.Status
|
||||
def __init__(self, status: _Optional[_Union[I2CResult.Status, str]] = ..., read_data: _Optional[bytes] = ...) -> None: ...
|
||||
|
||||
class I2CTransaction(_message.Message):
|
||||
__slots__ = ["address", "read_len", "write_data"]
|
||||
ADDRESS_FIELD_NUMBER: _ClassVar[int]
|
||||
READ_LEN_FIELD_NUMBER: _ClassVar[int]
|
||||
WRITE_DATA_FIELD_NUMBER: _ClassVar[int]
|
||||
address: int
|
||||
read_len: int
|
||||
write_data: bytes
|
||||
def __init__(self, address: _Optional[int] = ..., write_data: _Optional[bytes] = ..., read_len: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class InterdeviceMessage(_message.Message):
|
||||
__slots__ = ["beep", "directory_listing", "file_transfer", "get_sd_info", "i2c_result", "i2c_scan", "i2c_scan_result", "i2c_transaction", "id", "nack", "nmea", "ping", "pong", "sd_command", "sd_info"]
|
||||
BEEP_FIELD_NUMBER: _ClassVar[int]
|
||||
DIRECTORY_LISTING_FIELD_NUMBER: _ClassVar[int]
|
||||
FILE_TRANSFER_FIELD_NUMBER: _ClassVar[int]
|
||||
GET_SD_INFO_FIELD_NUMBER: _ClassVar[int]
|
||||
I2C_RESULT_FIELD_NUMBER: _ClassVar[int]
|
||||
I2C_SCAN_FIELD_NUMBER: _ClassVar[int]
|
||||
I2C_SCAN_RESULT_FIELD_NUMBER: _ClassVar[int]
|
||||
I2C_TRANSACTION_FIELD_NUMBER: _ClassVar[int]
|
||||
ID_FIELD_NUMBER: _ClassVar[int]
|
||||
NACK_FIELD_NUMBER: _ClassVar[int]
|
||||
NMEA_FIELD_NUMBER: _ClassVar[int]
|
||||
PING_FIELD_NUMBER: _ClassVar[int]
|
||||
PONG_FIELD_NUMBER: _ClassVar[int]
|
||||
SD_COMMAND_FIELD_NUMBER: _ClassVar[int]
|
||||
SD_INFO_FIELD_NUMBER: _ClassVar[int]
|
||||
beep: int
|
||||
directory_listing: DirectoryListing
|
||||
file_transfer: FileTransfer
|
||||
get_sd_info: bool
|
||||
i2c_result: I2CResult
|
||||
i2c_scan: bool
|
||||
i2c_scan_result: bytes
|
||||
i2c_transaction: I2CTransaction
|
||||
id: int
|
||||
nack: bool
|
||||
nmea: str
|
||||
ping: InterdeviceVersion
|
||||
pong: InterdeviceVersion
|
||||
sd_command: SdCommand
|
||||
sd_info: SdCardInfo
|
||||
def __init__(self, id: _Optional[int] = ..., nmea: _Optional[str] = ..., beep: _Optional[int] = ..., i2c_transaction: _Optional[_Union[I2CTransaction, _Mapping]] = ..., i2c_result: _Optional[_Union[I2CResult, _Mapping]] = ..., i2c_scan: bool = ..., i2c_scan_result: _Optional[bytes] = ..., file_transfer: _Optional[_Union[FileTransfer, _Mapping]] = ..., directory_listing: _Optional[_Union[DirectoryListing, _Mapping]] = ..., get_sd_info: bool = ..., sd_info: _Optional[_Union[SdCardInfo, _Mapping]] = ..., ping: _Optional[_Union[InterdeviceVersion, str]] = ..., pong: _Optional[_Union[InterdeviceVersion, str]] = ..., nack: bool = ..., sd_command: _Optional[_Union[SdCommand, str]] = ...) -> None: ...
|
||||
|
||||
class SdCardInfo(_message.Message):
|
||||
__slots__ = ["busy", "card_size", "card_type", "fat_type", "free_bytes", "present", "stats_valid", "unformatted", "used_bytes"]
|
||||
class CardType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class FatType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
BUSY_FIELD_NUMBER: _ClassVar[int]
|
||||
CARD_SIZE_FIELD_NUMBER: _ClassVar[int]
|
||||
CARD_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
EXFAT: SdCardInfo.FatType
|
||||
FAT16: SdCardInfo.FatType
|
||||
FAT32: SdCardInfo.FatType
|
||||
FAT_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
FREE_BYTES_FIELD_NUMBER: _ClassVar[int]
|
||||
MMC: SdCardInfo.CardType
|
||||
NONE: SdCardInfo.CardType
|
||||
PRESENT_FIELD_NUMBER: _ClassVar[int]
|
||||
SD: SdCardInfo.CardType
|
||||
SDHC: SdCardInfo.CardType
|
||||
SDXC: SdCardInfo.CardType
|
||||
STATS_VALID_FIELD_NUMBER: _ClassVar[int]
|
||||
UNFORMATTED_FIELD_NUMBER: _ClassVar[int]
|
||||
UNKNOWN_CARD: SdCardInfo.CardType
|
||||
UNKNOWN_FAT: SdCardInfo.FatType
|
||||
USED_BYTES_FIELD_NUMBER: _ClassVar[int]
|
||||
busy: bool
|
||||
card_size: int
|
||||
card_type: SdCardInfo.CardType
|
||||
fat_type: SdCardInfo.FatType
|
||||
free_bytes: int
|
||||
present: bool
|
||||
stats_valid: bool
|
||||
unformatted: bool
|
||||
used_bytes: int
|
||||
def __init__(self, present: bool = ..., card_type: _Optional[_Union[SdCardInfo.CardType, str]] = ..., fat_type: _Optional[_Union[SdCardInfo.FatType, str]] = ..., card_size: _Optional[int] = ..., used_bytes: _Optional[int] = ..., free_bytes: _Optional[int] = ..., stats_valid: bool = ..., busy: bool = ..., unformatted: bool = ...) -> None: ...
|
||||
|
||||
class InterdeviceVersion(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class FileOperation(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class FileStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class SdCommand(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
@@ -1,30 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/localonly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config__pb2
|
||||
from meshtastic.protobuf import module_config_pb2 as meshtastic_dot_protobuf_dot_module__config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtastic/protobuf/localonly.proto\x12\x13meshtastic.protobuf\x1a meshtastic/protobuf/config.proto\x1a\'meshtastic/protobuf/module_config.proto\"\xfa\x03\n\x0bLocalConfig\x12\x38\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32(.meshtastic.protobuf.Config.DeviceConfig\x12<\n\x08position\x18\x02 \x01(\x0b\x32*.meshtastic.protobuf.Config.PositionConfig\x12\x36\n\x05power\x18\x03 \x01(\x0b\x32\'.meshtastic.protobuf.Config.PowerConfig\x12:\n\x07network\x18\x04 \x01(\x0b\x32).meshtastic.protobuf.Config.NetworkConfig\x12:\n\x07\x64isplay\x18\x05 \x01(\x0b\x32).meshtastic.protobuf.Config.DisplayConfig\x12\x34\n\x04lora\x18\x06 \x01(\x0b\x32&.meshtastic.protobuf.Config.LoRaConfig\x12>\n\tbluetooth\x18\x07 \x01(\x0b\x32+.meshtastic.protobuf.Config.BluetoothConfig\x12\x0f\n\x07version\x18\x08 \x01(\r\x12<\n\x08security\x18\t \x01(\x0b\x32*.meshtastic.protobuf.Config.SecurityConfig\"\x98\n\n\x11LocalModuleConfig\x12:\n\x04mqtt\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.ModuleConfig.MQTTConfig\x12>\n\x06serial\x18\x02 \x01(\x0b\x32..meshtastic.protobuf.ModuleConfig.SerialConfig\x12[\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32<.meshtastic.protobuf.ModuleConfig.ExternalNotificationConfig\x12K\n\rstore_forward\x18\x04 \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.StoreForwardConfig\x12\x45\n\nrange_test\x18\x05 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.RangeTestConfig\x12\x44\n\ttelemetry\x18\x06 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.TelemetryConfig\x12M\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.CannedMessageConfig\x12<\n\x05\x61udio\x18\t \x01(\x0b\x32-.meshtastic.protobuf.ModuleConfig.AudioConfig\x12O\n\x0fremote_hardware\x18\n \x01(\x0b\x32\x36.meshtastic.protobuf.ModuleConfig.RemoteHardwareConfig\x12K\n\rneighbor_info\x18\x0b \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.NeighborInfoConfig\x12Q\n\x10\x61mbient_lighting\x18\x0c \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.AmbientLightingConfig\x12Q\n\x10\x64\x65tection_sensor\x18\r \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.DetectionSensorConfig\x12\x46\n\npaxcounter\x18\x0e \x01(\x0b\x32\x32.meshtastic.protobuf.ModuleConfig.PaxcounterConfig\x12L\n\rstatusmessage\x18\x0f \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.StatusMessageConfig\x12U\n\x12traffic_management\x18\x10 \x01(\x0b\x32\x39.meshtastic.protobuf.ModuleConfig.TrafficManagementConfig\x12\x38\n\x03tak\x18\x11 \x01(\x0b\x32+.meshtastic.protobuf.ModuleConfig.TAKConfig\x12G\n\x0bmesh_beacon\x18\x12 \x01(\x0b\x32\x32.meshtastic.protobuf.ModuleConfig.MeshBeaconConfig\x12\x0f\n\x07version\x18\x08 \x01(\rBe\n\x14org.meshtastic.protoB\x0fLocalOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.localonly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\017LocalOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_LOCALCONFIG._serialized_start=136
|
||||
_LOCALCONFIG._serialized_end=642
|
||||
_LOCALMODULECONFIG._serialized_start=645
|
||||
_LOCALMODULECONFIG._serialized_end=1949
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,69 +0,0 @@
|
||||
from meshtastic.protobuf import config_pb2 as _config_pb2
|
||||
from meshtastic.protobuf import module_config_pb2 as _module_config_pb2
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class LocalConfig(_message.Message):
|
||||
__slots__ = ["bluetooth", "device", "display", "lora", "network", "position", "power", "security", "version"]
|
||||
BLUETOOTH_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_FIELD_NUMBER: _ClassVar[int]
|
||||
DISPLAY_FIELD_NUMBER: _ClassVar[int]
|
||||
LORA_FIELD_NUMBER: _ClassVar[int]
|
||||
NETWORK_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
POWER_FIELD_NUMBER: _ClassVar[int]
|
||||
SECURITY_FIELD_NUMBER: _ClassVar[int]
|
||||
VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
bluetooth: _config_pb2.Config.BluetoothConfig
|
||||
device: _config_pb2.Config.DeviceConfig
|
||||
display: _config_pb2.Config.DisplayConfig
|
||||
lora: _config_pb2.Config.LoRaConfig
|
||||
network: _config_pb2.Config.NetworkConfig
|
||||
position: _config_pb2.Config.PositionConfig
|
||||
power: _config_pb2.Config.PowerConfig
|
||||
security: _config_pb2.Config.SecurityConfig
|
||||
version: int
|
||||
def __init__(self, device: _Optional[_Union[_config_pb2.Config.DeviceConfig, _Mapping]] = ..., position: _Optional[_Union[_config_pb2.Config.PositionConfig, _Mapping]] = ..., power: _Optional[_Union[_config_pb2.Config.PowerConfig, _Mapping]] = ..., network: _Optional[_Union[_config_pb2.Config.NetworkConfig, _Mapping]] = ..., display: _Optional[_Union[_config_pb2.Config.DisplayConfig, _Mapping]] = ..., lora: _Optional[_Union[_config_pb2.Config.LoRaConfig, _Mapping]] = ..., bluetooth: _Optional[_Union[_config_pb2.Config.BluetoothConfig, _Mapping]] = ..., version: _Optional[int] = ..., security: _Optional[_Union[_config_pb2.Config.SecurityConfig, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class LocalModuleConfig(_message.Message):
|
||||
__slots__ = ["ambient_lighting", "audio", "canned_message", "detection_sensor", "external_notification", "mesh_beacon", "mqtt", "neighbor_info", "paxcounter", "range_test", "remote_hardware", "serial", "statusmessage", "store_forward", "tak", "telemetry", "traffic_management", "version"]
|
||||
AMBIENT_LIGHTING_FIELD_NUMBER: _ClassVar[int]
|
||||
AUDIO_FIELD_NUMBER: _ClassVar[int]
|
||||
CANNED_MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
DETECTION_SENSOR_FIELD_NUMBER: _ClassVar[int]
|
||||
EXTERNAL_NOTIFICATION_FIELD_NUMBER: _ClassVar[int]
|
||||
MESH_BEACON_FIELD_NUMBER: _ClassVar[int]
|
||||
MQTT_FIELD_NUMBER: _ClassVar[int]
|
||||
NEIGHBOR_INFO_FIELD_NUMBER: _ClassVar[int]
|
||||
PAXCOUNTER_FIELD_NUMBER: _ClassVar[int]
|
||||
RANGE_TEST_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOTE_HARDWARE_FIELD_NUMBER: _ClassVar[int]
|
||||
SERIAL_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUSMESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
STORE_FORWARD_FIELD_NUMBER: _ClassVar[int]
|
||||
TAK_FIELD_NUMBER: _ClassVar[int]
|
||||
TELEMETRY_FIELD_NUMBER: _ClassVar[int]
|
||||
TRAFFIC_MANAGEMENT_FIELD_NUMBER: _ClassVar[int]
|
||||
VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
ambient_lighting: _module_config_pb2.ModuleConfig.AmbientLightingConfig
|
||||
audio: _module_config_pb2.ModuleConfig.AudioConfig
|
||||
canned_message: _module_config_pb2.ModuleConfig.CannedMessageConfig
|
||||
detection_sensor: _module_config_pb2.ModuleConfig.DetectionSensorConfig
|
||||
external_notification: _module_config_pb2.ModuleConfig.ExternalNotificationConfig
|
||||
mesh_beacon: _module_config_pb2.ModuleConfig.MeshBeaconConfig
|
||||
mqtt: _module_config_pb2.ModuleConfig.MQTTConfig
|
||||
neighbor_info: _module_config_pb2.ModuleConfig.NeighborInfoConfig
|
||||
paxcounter: _module_config_pb2.ModuleConfig.PaxcounterConfig
|
||||
range_test: _module_config_pb2.ModuleConfig.RangeTestConfig
|
||||
remote_hardware: _module_config_pb2.ModuleConfig.RemoteHardwareConfig
|
||||
serial: _module_config_pb2.ModuleConfig.SerialConfig
|
||||
statusmessage: _module_config_pb2.ModuleConfig.StatusMessageConfig
|
||||
store_forward: _module_config_pb2.ModuleConfig.StoreForwardConfig
|
||||
tak: _module_config_pb2.ModuleConfig.TAKConfig
|
||||
telemetry: _module_config_pb2.ModuleConfig.TelemetryConfig
|
||||
traffic_management: _module_config_pb2.ModuleConfig.TrafficManagementConfig
|
||||
version: int
|
||||
def __init__(self, mqtt: _Optional[_Union[_module_config_pb2.ModuleConfig.MQTTConfig, _Mapping]] = ..., serial: _Optional[_Union[_module_config_pb2.ModuleConfig.SerialConfig, _Mapping]] = ..., external_notification: _Optional[_Union[_module_config_pb2.ModuleConfig.ExternalNotificationConfig, _Mapping]] = ..., store_forward: _Optional[_Union[_module_config_pb2.ModuleConfig.StoreForwardConfig, _Mapping]] = ..., range_test: _Optional[_Union[_module_config_pb2.ModuleConfig.RangeTestConfig, _Mapping]] = ..., telemetry: _Optional[_Union[_module_config_pb2.ModuleConfig.TelemetryConfig, _Mapping]] = ..., canned_message: _Optional[_Union[_module_config_pb2.ModuleConfig.CannedMessageConfig, _Mapping]] = ..., audio: _Optional[_Union[_module_config_pb2.ModuleConfig.AudioConfig, _Mapping]] = ..., remote_hardware: _Optional[_Union[_module_config_pb2.ModuleConfig.RemoteHardwareConfig, _Mapping]] = ..., neighbor_info: _Optional[_Union[_module_config_pb2.ModuleConfig.NeighborInfoConfig, _Mapping]] = ..., ambient_lighting: _Optional[_Union[_module_config_pb2.ModuleConfig.AmbientLightingConfig, _Mapping]] = ..., detection_sensor: _Optional[_Union[_module_config_pb2.ModuleConfig.DetectionSensorConfig, _Mapping]] = ..., paxcounter: _Optional[_Union[_module_config_pb2.ModuleConfig.PaxcounterConfig, _Mapping]] = ..., statusmessage: _Optional[_Union[_module_config_pb2.ModuleConfig.StatusMessageConfig, _Mapping]] = ..., traffic_management: _Optional[_Union[_module_config_pb2.ModuleConfig.TrafficManagementConfig, _Mapping]] = ..., tak: _Optional[_Union[_module_config_pb2.ModuleConfig.TAKConfig, _Mapping]] = ..., mesh_beacon: _Optional[_Union[_module_config_pb2.ModuleConfig.MeshBeaconConfig, _Mapping]] = ..., version: _Optional[int] = ...) -> None: ...
|
||||
@@ -1,36 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/lorawan_bridge.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(meshtastic/protobuf/lorawan_bridge.proto\x12\x13meshtastic.protobuf\"\xa9\x08\n\rLoRaWANBridge\x12;\n\x06uplink\x18\x01 \x01(\x0b\x32).meshtastic.protobuf.LoRaWANBridge.UplinkH\x00\x12?\n\x08\x64ownlink\x18\x02 \x01(\x0b\x32+.meshtastic.protobuf.LoRaWANBridge.DownlinkH\x00\x12@\n\ttx_result\x18\x03 \x01(\x0b\x32+.meshtastic.protobuf.LoRaWANBridge.TxResultH\x00\x12@\n\x05\x63hunk\x18\x04 \x01(\x0b\x32/.meshtastic.protobuf.LoRaWANBridge.PayloadChunkH\x00\x1a\xaf\x01\n\x06Uplink\x12\x0f\n\x07\x66req_hz\x18\x01 \x01(\x07\x12\x0c\n\x04tmst\x18\x02 \x01(\x07\x12\x10\n\x08rssi_x10\x18\x03 \x01(\x11\x12\x0f\n\x07snr_x10\x18\x04 \x01(\x11\x12\x14\n\x0cradio_params\x18\x05 \x01(\r\x12\x13\n\x0b\x66sk_bitrate\x18\t \x01(\r\x12\x0f\n\x07payload\x18\x06 \x01(\x0c\x12\x12\n\npayload_id\x18\x07 \x01(\r\x12\x13\n\x0b\x63hunk_count\x18\x08 \x01(\r\x1a\xef\x01\n\x08\x44ownlink\x12\x0f\n\x07\x66req_hz\x18\x01 \x01(\x07\x12\x0c\n\x04tmst\x18\x02 \x01(\x07\x12\x14\n\x0cradio_params\x18\x03 \x01(\r\x12\x11\n\tpower_dbm\x18\x04 \x01(\r\x12\x11\n\timmediate\x18\x05 \x01(\x08\x12\x17\n\x0finvert_polarity\x18\x06 \x01(\x08\x12\x0e\n\x06no_crc\x18\x07 \x01(\x08\x12\x11\n\tmay_defer\x18\x08 \x01(\x08\x12\x12\n\nrequest_id\x18\x0c \x01(\r\x12\x0f\n\x07payload\x18\t \x01(\x0c\x12\x12\n\npayload_id\x18\n \x01(\r\x12\x13\n\x0b\x63hunk_count\x18\x0b \x01(\r\x1aN\n\x0cPayloadChunk\x12\x12\n\npayload_id\x18\x01 \x01(\r\x12\x13\n\x0b\x63hunk_index\x18\x02 \x01(\r\x12\x15\n\rpayload_chunk\x18\x03 \x01(\x0c\x1a\x96\x02\n\x08TxResult\x12\x0c\n\x04tmst\x18\x01 \x01(\x07\x12\x42\n\x06status\x18\x02 \x01(\x0e\x32\x32.meshtastic.protobuf.LoRaWANBridge.TxResult.Status\x12\x12\n\nrequest_id\x18\x03 \x01(\r\"\xa3\x01\n\x06Status\x12\x08\n\x04NONE\x10\x00\x12\x0c\n\x08TOO_LATE\x10\x01\x12\r\n\tTOO_EARLY\x10\x02\x12\x14\n\x10\x43OLLISION_PACKET\x10\x03\x12\x14\n\x10\x43OLLISION_BEACON\x10\x04\x12\x0b\n\x07TX_FREQ\x10\x05\x12\x0c\n\x08TX_POWER\x10\x06\x12\x10\n\x0cGPS_UNLOCKED\x10\x07\x12\x0c\n\x08\x44\x45\x46\x45RRED\x10\x08\x12\x0b\n\x07\x44ROPPED\x10\tB\t\n\x07variantBi\n\x14org.meshtastic.protoB\x13LoRaWANBridgeProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.lorawan_bridge_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\023LoRaWANBridgeProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_LORAWANBRIDGE._serialized_start=66
|
||||
_LORAWANBRIDGE._serialized_end=1131
|
||||
_LORAWANBRIDGE_UPLINK._serialized_start=342
|
||||
_LORAWANBRIDGE_UPLINK._serialized_end=517
|
||||
_LORAWANBRIDGE_DOWNLINK._serialized_start=520
|
||||
_LORAWANBRIDGE_DOWNLINK._serialized_end=759
|
||||
_LORAWANBRIDGE_PAYLOADCHUNK._serialized_start=761
|
||||
_LORAWANBRIDGE_PAYLOADCHUNK._serialized_end=839
|
||||
_LORAWANBRIDGE_TXRESULT._serialized_start=842
|
||||
_LORAWANBRIDGE_TXRESULT._serialized_end=1120
|
||||
_LORAWANBRIDGE_TXRESULT_STATUS._serialized_start=957
|
||||
_LORAWANBRIDGE_TXRESULT_STATUS._serialized_end=1120
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,96 +0,0 @@
|
||||
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class LoRaWANBridge(_message.Message):
|
||||
__slots__ = ["chunk", "downlink", "tx_result", "uplink"]
|
||||
class Downlink(_message.Message):
|
||||
__slots__ = ["chunk_count", "freq_hz", "immediate", "invert_polarity", "may_defer", "no_crc", "payload", "payload_id", "power_dbm", "radio_params", "request_id", "tmst"]
|
||||
CHUNK_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
FREQ_HZ_FIELD_NUMBER: _ClassVar[int]
|
||||
IMMEDIATE_FIELD_NUMBER: _ClassVar[int]
|
||||
INVERT_POLARITY_FIELD_NUMBER: _ClassVar[int]
|
||||
MAY_DEFER_FIELD_NUMBER: _ClassVar[int]
|
||||
NO_CRC_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
POWER_DBM_FIELD_NUMBER: _ClassVar[int]
|
||||
RADIO_PARAMS_FIELD_NUMBER: _ClassVar[int]
|
||||
REQUEST_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
TMST_FIELD_NUMBER: _ClassVar[int]
|
||||
chunk_count: int
|
||||
freq_hz: int
|
||||
immediate: bool
|
||||
invert_polarity: bool
|
||||
may_defer: bool
|
||||
no_crc: bool
|
||||
payload: bytes
|
||||
payload_id: int
|
||||
power_dbm: int
|
||||
radio_params: int
|
||||
request_id: int
|
||||
tmst: int
|
||||
def __init__(self, freq_hz: _Optional[int] = ..., tmst: _Optional[int] = ..., radio_params: _Optional[int] = ..., power_dbm: _Optional[int] = ..., immediate: bool = ..., invert_polarity: bool = ..., no_crc: bool = ..., may_defer: bool = ..., request_id: _Optional[int] = ..., payload: _Optional[bytes] = ..., payload_id: _Optional[int] = ..., chunk_count: _Optional[int] = ...) -> None: ...
|
||||
class PayloadChunk(_message.Message):
|
||||
__slots__ = ["chunk_index", "payload_chunk", "payload_id"]
|
||||
CHUNK_INDEX_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_CHUNK_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
chunk_index: int
|
||||
payload_chunk: bytes
|
||||
payload_id: int
|
||||
def __init__(self, payload_id: _Optional[int] = ..., chunk_index: _Optional[int] = ..., payload_chunk: _Optional[bytes] = ...) -> None: ...
|
||||
class TxResult(_message.Message):
|
||||
__slots__ = ["request_id", "status", "tmst"]
|
||||
class Status(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
COLLISION_BEACON: LoRaWANBridge.TxResult.Status
|
||||
COLLISION_PACKET: LoRaWANBridge.TxResult.Status
|
||||
DEFERRED: LoRaWANBridge.TxResult.Status
|
||||
DROPPED: LoRaWANBridge.TxResult.Status
|
||||
GPS_UNLOCKED: LoRaWANBridge.TxResult.Status
|
||||
NONE: LoRaWANBridge.TxResult.Status
|
||||
REQUEST_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
TMST_FIELD_NUMBER: _ClassVar[int]
|
||||
TOO_EARLY: LoRaWANBridge.TxResult.Status
|
||||
TOO_LATE: LoRaWANBridge.TxResult.Status
|
||||
TX_FREQ: LoRaWANBridge.TxResult.Status
|
||||
TX_POWER: LoRaWANBridge.TxResult.Status
|
||||
request_id: int
|
||||
status: LoRaWANBridge.TxResult.Status
|
||||
tmst: int
|
||||
def __init__(self, tmst: _Optional[int] = ..., status: _Optional[_Union[LoRaWANBridge.TxResult.Status, str]] = ..., request_id: _Optional[int] = ...) -> None: ...
|
||||
class Uplink(_message.Message):
|
||||
__slots__ = ["chunk_count", "freq_hz", "fsk_bitrate", "payload", "payload_id", "radio_params", "rssi_x10", "snr_x10", "tmst"]
|
||||
CHUNK_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
FREQ_HZ_FIELD_NUMBER: _ClassVar[int]
|
||||
FSK_BITRATE_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
RADIO_PARAMS_FIELD_NUMBER: _ClassVar[int]
|
||||
RSSI_X10_FIELD_NUMBER: _ClassVar[int]
|
||||
SNR_X10_FIELD_NUMBER: _ClassVar[int]
|
||||
TMST_FIELD_NUMBER: _ClassVar[int]
|
||||
chunk_count: int
|
||||
freq_hz: int
|
||||
fsk_bitrate: int
|
||||
payload: bytes
|
||||
payload_id: int
|
||||
radio_params: int
|
||||
rssi_x10: int
|
||||
snr_x10: int
|
||||
tmst: int
|
||||
def __init__(self, freq_hz: _Optional[int] = ..., tmst: _Optional[int] = ..., rssi_x10: _Optional[int] = ..., snr_x10: _Optional[int] = ..., radio_params: _Optional[int] = ..., fsk_bitrate: _Optional[int] = ..., payload: _Optional[bytes] = ..., payload_id: _Optional[int] = ..., chunk_count: _Optional[int] = ...) -> None: ...
|
||||
CHUNK_FIELD_NUMBER: _ClassVar[int]
|
||||
DOWNLINK_FIELD_NUMBER: _ClassVar[int]
|
||||
TX_RESULT_FIELD_NUMBER: _ClassVar[int]
|
||||
UPLINK_FIELD_NUMBER: _ClassVar[int]
|
||||
chunk: LoRaWANBridge.PayloadChunk
|
||||
downlink: LoRaWANBridge.Downlink
|
||||
tx_result: LoRaWANBridge.TxResult
|
||||
uplink: LoRaWANBridge.Uplink
|
||||
def __init__(self, uplink: _Optional[_Union[LoRaWANBridge.Uplink, _Mapping]] = ..., downlink: _Optional[_Union[LoRaWANBridge.Downlink, _Mapping]] = ..., tx_result: _Optional[_Union[LoRaWANBridge.TxResult, _Mapping]] = ..., chunk: _Optional[_Union[LoRaWANBridge.PayloadChunk, _Mapping]] = ...) -> None: ...
|
||||
@@ -1,28 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/mesh_beacon.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import channel_pb2 as meshtastic_dot_protobuf_dot_channel__pb2
|
||||
from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%meshtastic/protobuf/mesh_beacon.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\"\xbf\x02\n\nMeshBeacon\x12\x0f\n\x07message\x18\x01 \x01(\t\x12;\n\roffer_channel\x18\x02 \x01(\x0b\x32$.meshtastic.protobuf.ChannelSettings\x12G\n\x0coffer_region\x18\x03 \x01(\x0e\x32\x31.meshtastic.protobuf.Config.LoRaConfig.RegionCode\x12M\n\x0coffer_preset\x18\x04 \x01(\x0e\x32\x32.meshtastic.protobuf.Config.LoRaConfig.ModemPresetH\x00\x88\x01\x01\x12!\n\x14offer_frequency_slot\x18\x05 \x01(\rH\x01\x88\x01\x01\x42\x0f\n\r_offer_presetB\x17\n\x15_offer_frequency_slotBf\n\x14org.meshtastic.protoB\x10MeshBeaconProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.mesh_beacon_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\020MeshBeaconProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_MESHBEACON._serialized_start=132
|
||||
_MESHBEACON._serialized_end=451
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,21 +0,0 @@
|
||||
from meshtastic.protobuf import channel_pb2 as _channel_pb2
|
||||
from meshtastic.protobuf import config_pb2 as _config_pb2
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class MeshBeacon(_message.Message):
|
||||
__slots__ = ["message", "offer_channel", "offer_frequency_slot", "offer_preset", "offer_region"]
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
OFFER_CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
OFFER_FREQUENCY_SLOT_FIELD_NUMBER: _ClassVar[int]
|
||||
OFFER_PRESET_FIELD_NUMBER: _ClassVar[int]
|
||||
OFFER_REGION_FIELD_NUMBER: _ClassVar[int]
|
||||
message: str
|
||||
offer_channel: _channel_pb2.ChannelSettings
|
||||
offer_frequency_slot: int
|
||||
offer_preset: _config_pb2.Config.LoRaConfig.ModemPreset
|
||||
offer_region: _config_pb2.Config.LoRaConfig.RegionCode
|
||||
def __init__(self, message: _Optional[str] = ..., offer_channel: _Optional[_Union[_channel_pb2.ChannelSettings, _Mapping]] = ..., offer_region: _Optional[_Union[_config_pb2.Config.LoRaConfig.RegionCode, str]] = ..., offer_preset: _Optional[_Union[_config_pb2.Config.LoRaConfig.ModemPreset, str]] = ..., offer_frequency_slot: _Optional[int] = ...) -> None: ...
|
||||
@@ -1,184 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/mesh.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import channel_pb2 as meshtastic_dot_protobuf_dot_channel__pb2
|
||||
from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config__pb2
|
||||
from meshtastic.protobuf import device_ui_pb2 as meshtastic_dot_protobuf_dot_device__ui__pb2
|
||||
from meshtastic.protobuf import field_metadata_pb2 as meshtastic_dot_protobuf_dot_field__metadata__pb2
|
||||
from meshtastic.protobuf import module_config_pb2 as meshtastic_dot_protobuf_dot_module__config__pb2
|
||||
from meshtastic.protobuf import portnums_pb2 as meshtastic_dot_protobuf_dot_portnums__pb2
|
||||
from meshtastic.protobuf import telemetry_pb2 as meshtastic_dot_protobuf_dot_telemetry__pb2
|
||||
from meshtastic.protobuf import xmodem_pb2 as meshtastic_dot_protobuf_dot_xmodem__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emeshtastic/protobuf/mesh.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\x1a#meshtastic/protobuf/device_ui.proto\x1a(meshtastic/protobuf/field_metadata.proto\x1a\'meshtastic/protobuf/module_config.proto\x1a\"meshtastic/protobuf/portnums.proto\x1a#meshtastic/protobuf/telemetry.proto\x1a meshtastic/protobuf/xmodem.proto\"\x99\x07\n\x08Position\x12\x17\n\nlatitude_i\x18\x01 \x01(\x0fH\x00\x88\x01\x01\x12\x18\n\x0blongitude_i\x18\x02 \x01(\x0fH\x01\x88\x01\x01\x12\x15\n\x08\x61ltitude\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x0c\n\x04time\x18\x04 \x01(\x07\x12@\n\x0flocation_source\x18\x05 \x01(\x0e\x32\'.meshtastic.protobuf.Position.LocSource\x12@\n\x0f\x61ltitude_source\x18\x06 \x01(\x0e\x32\'.meshtastic.protobuf.Position.AltSource\x12\x11\n\ttimestamp\x18\x07 \x01(\x07\x12\x1f\n\x17timestamp_millis_adjust\x18\x08 \x01(\x05\x12\x19\n\x0c\x61ltitude_hae\x18\t \x01(\x11H\x03\x88\x01\x01\x12(\n\x1b\x61ltitude_geoidal_separation\x18\n \x01(\x11H\x04\x88\x01\x01\x12\x0c\n\x04PDOP\x18\x0b \x01(\r\x12\x0c\n\x04HDOP\x18\x0c \x01(\r\x12\x0c\n\x04VDOP\x18\r \x01(\r\x12\x14\n\x0cgps_accuracy\x18\x0e \x01(\r\x12\x19\n\x0cground_speed\x18\x0f \x01(\rH\x05\x88\x01\x01\x12\x19\n\x0cground_track\x18\x10 \x01(\rH\x06\x88\x01\x01\x12\x13\n\x0b\x66ix_quality\x18\x11 \x01(\r\x12\x10\n\x08\x66ix_type\x18\x12 \x01(\r\x12\x14\n\x0csats_in_view\x18\x13 \x01(\r\x12\x11\n\tsensor_id\x18\x14 \x01(\r\x12\x13\n\x0bnext_update\x18\x15 \x01(\r\x12\x12\n\nseq_number\x18\x16 \x01(\r\x12\x16\n\x0eprecision_bits\x18\x17 \x01(\r\"N\n\tLocSource\x12\r\n\tLOC_UNSET\x10\x00\x12\x0e\n\nLOC_MANUAL\x10\x01\x12\x10\n\x0cLOC_INTERNAL\x10\x02\x12\x10\n\x0cLOC_EXTERNAL\x10\x03\"b\n\tAltSource\x12\r\n\tALT_UNSET\x10\x00\x12\x0e\n\nALT_MANUAL\x10\x01\x12\x10\n\x0c\x41LT_INTERNAL\x10\x02\x12\x10\n\x0c\x41LT_EXTERNAL\x10\x03\x12\x12\n\x0e\x41LT_BAROMETRIC\x10\x04\x42\r\n\x0b_latitude_iB\x0e\n\x0c_longitude_iB\x0b\n\t_altitudeB\x0f\n\r_altitude_haeB\x1e\n\x1c_altitude_geoidal_separationB\x0f\n\r_ground_speedB\x0f\n\r_ground_track\"\x9c\x02\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x13\n\x07macaddr\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12\x34\n\x08hw_model\x18\x05 \x01(\x0e\x32\".meshtastic.protobuf.HardwareModel\x12\x13\n\x0bis_licensed\x18\x06 \x01(\x08\x12;\n\x04role\x18\x07 \x01(\x0e\x32-.meshtastic.protobuf.Config.DeviceConfig.Role\x12\x12\n\npublic_key\x18\x08 \x01(\x0c\x12\x1c\n\x0fis_unmessagable\x18\t \x01(\x08H\x00\x88\x01\x01\x42\x12\n\x10_is_unmessagable\"Z\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x01 \x03(\x07\x12\x13\n\x0bsnr_towards\x18\x02 \x03(\x05\x12\x12\n\nroute_back\x18\x03 \x03(\x07\x12\x10\n\x08snr_back\x18\x04 \x03(\x05\"\xc7\x04\n\x07Routing\x12<\n\rroute_request\x18\x01 \x01(\x0b\x32#.meshtastic.protobuf.RouteDiscoveryH\x00\x12:\n\x0broute_reply\x18\x02 \x01(\x0b\x32#.meshtastic.protobuf.RouteDiscoveryH\x00\x12:\n\x0c\x65rror_reason\x18\x03 \x01(\x0e\x32\".meshtastic.protobuf.Routing.ErrorH\x00\x12\x11\n\tack_proof\x18\x04 \x01(\x0c\"\xe7\x02\n\x05\x45rror\x12\x08\n\x04NONE\x10\x00\x12\x0c\n\x08NO_ROUTE\x10\x01\x12\x0b\n\x07GOT_NAK\x10\x02\x12\x0b\n\x07TIMEOUT\x10\x03\x12\x10\n\x0cNO_INTERFACE\x10\x04\x12\x12\n\x0eMAX_RETRANSMIT\x10\x05\x12\x0e\n\nNO_CHANNEL\x10\x06\x12\r\n\tTOO_LARGE\x10\x07\x12\x0f\n\x0bNO_RESPONSE\x10\x08\x12\x14\n\x10\x44UTY_CYCLE_LIMIT\x10\t\x12\x0f\n\x0b\x42\x41\x44_REQUEST\x10 \x12\x12\n\x0eNOT_AUTHORIZED\x10!\x12\x0e\n\nPKI_FAILED\x10\"\x12\x16\n\x12PKI_UNKNOWN_PUBKEY\x10#\x12\x19\n\x15\x41\x44MIN_BAD_SESSION_KEY\x10$\x12!\n\x1d\x41\x44MIN_PUBLIC_KEY_UNAUTHORIZED\x10%\x12\x17\n\x13RATE_LIMIT_EXCEEDED\x10&\x12\x1c\n\x18PKI_SEND_FAIL_PUBLIC_KEY\x10\'B\t\n\x07variant\"\xee\x01\n\x04\x44\x61ta\x12-\n\x07portnum\x18\x01 \x01(\x0e\x32\x1c.meshtastic.protobuf.PortNum\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x15\n\rwant_response\x18\x03 \x01(\x08\x12\x0c\n\x04\x64\x65st\x18\x04 \x01(\x07\x12\x0e\n\x06source\x18\x05 \x01(\x07\x12\x12\n\nrequest_id\x18\x06 \x01(\x07\x12\x10\n\x08reply_id\x18\x07 \x01(\x07\x12\r\n\x05\x65moji\x18\x08 \x01(\x07\x12\x15\n\x08\x62itfield\x18\t \x01(\rH\x00\x88\x01\x01\x12\x18\n\x10xeddsa_signature\x18\n \x01(\x0c\x42\x0b\n\t_bitfield\">\n\x0fKeyVerification\x12\r\n\x05nonce\x18\x01 \x01(\x04\x12\r\n\x05hash1\x18\x02 \x01(\x0c\x12\r\n\x05hash2\x18\x03 \x01(\x0c\"\xd4\x03\n\x14StoreForwardPlusPlus\x12V\n\x11sfpp_message_type\x18\x01 \x01(\x0e\x32;.meshtastic.protobuf.StoreForwardPlusPlus.SFPP_message_type\x12\x14\n\x0cmessage_hash\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63ommit_hash\x18\x03 \x01(\x0c\x12\x11\n\troot_hash\x18\x04 \x01(\x0c\x12\x0f\n\x07message\x18\x05 \x01(\x0c\x12\x17\n\x0f\x65ncapsulated_id\x18\x06 \x01(\r\x12\x17\n\x0f\x65ncapsulated_to\x18\x07 \x01(\r\x12\x19\n\x11\x65ncapsulated_from\x18\x08 \x01(\r\x12\x1b\n\x13\x65ncapsulated_rxtime\x18\t \x01(\r\x12\x13\n\x0b\x63hain_count\x18\nLine truncated
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.mesh_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\nMeshProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_HARDWAREMODEL.values_by_name["TBEAM"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["TBEAM"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["T_ECHO"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["T_ECHO"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["LILYGO_TBEAM_S3_CORE"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["LILYGO_TBEAM_S3_CORE"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["WIO_WM1110"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["WIO_WM1110"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["CANARYONE"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["CANARYONE"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["T_ECHO_PLUS"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["T_ECHO_PLUS"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["HELTEC_WIRELESS_TRACKER"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["HELTEC_WIRELESS_TRACKER"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["TRACKER_T1000_E"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["TRACKER_T1000_E"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["THINKNODE_M1"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["THINKNODE_M1"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["SEEED_WIO_TRACKER_L1"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["SEEED_WIO_TRACKER_L1"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["SEEED_WIO_TRACKER_L1_EINK"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["SEEED_WIO_TRACKER_L1_EINK"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["T_DECK_PRO"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["T_DECK_PRO"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["T_LORA_PAGER"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["T_LORA_PAGER"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["WISMESH_TAG"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["WISMESH_TAG"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["HELTEC_WIRELESS_TRACKER_V2"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["HELTEC_WIRELESS_TRACKER_V2"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["TBEAM_1_WATT"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["TBEAM_1_WATT"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["TBEAM_BPF"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["TBEAM_BPF"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_HARDWAREMODEL.values_by_name["MESH_TRACKER_X1"]._options = None
|
||||
_HARDWAREMODEL.values_by_name["MESH_TRACKER_X1"]._serialized_options = b'\312\363\030\002`\001'
|
||||
_USER.fields_by_name['macaddr']._options = None
|
||||
_USER.fields_by_name['macaddr']._serialized_options = b'\030\001'
|
||||
_MESHPACKET.fields_by_name['delayed']._options = None
|
||||
_MESHPACKET.fields_by_name['delayed']._serialized_options = b'\030\001'
|
||||
_HARDWAREMODEL._serialized_start=10490
|
||||
_HARDWAREMODEL._serialized_end=13636
|
||||
_CONSTANTS._serialized_start=13638
|
||||
_CONSTANTS._serialized_end=13682
|
||||
_CRITICALERRORCODE._serialized_start=13685
|
||||
_CRITICALERRORCODE._serialized_end=13993
|
||||
_FIRMWAREEDITION._serialized_start=13996
|
||||
_FIRMWAREEDITION._serialized_end=14157
|
||||
_EXCLUDEDMODULES._serialized_start=14160
|
||||
_EXCLUDEDMODULES._serialized_end=14647
|
||||
_POSITION._serialized_start=352
|
||||
_POSITION._serialized_end=1273
|
||||
_POSITION_LOCSOURCE._serialized_start=968
|
||||
_POSITION_LOCSOURCE._serialized_end=1046
|
||||
_POSITION_ALTSOURCE._serialized_start=1048
|
||||
_POSITION_ALTSOURCE._serialized_end=1146
|
||||
_USER._serialized_start=1276
|
||||
_USER._serialized_end=1560
|
||||
_ROUTEDISCOVERY._serialized_start=1562
|
||||
_ROUTEDISCOVERY._serialized_end=1652
|
||||
_ROUTING._serialized_start=1655
|
||||
_ROUTING._serialized_end=2238
|
||||
_ROUTING_ERROR._serialized_start=1868
|
||||
_ROUTING_ERROR._serialized_end=2227
|
||||
_DATA._serialized_start=2241
|
||||
_DATA._serialized_end=2479
|
||||
_KEYVERIFICATION._serialized_start=2481
|
||||
_KEYVERIFICATION._serialized_end=2543
|
||||
_STOREFORWARDPLUSPLUS._serialized_start=2546
|
||||
_STOREFORWARDPLUSPLUS._serialized_end=3014
|
||||
_STOREFORWARDPLUSPLUS_SFPP_MESSAGE_TYPE._serialized_start=2865
|
||||
_STOREFORWARDPLUSPLUS_SFPP_MESSAGE_TYPE._serialized_end=3014
|
||||
_REMOTESHELL._serialized_start=3017
|
||||
_REMOTESHELL._serialized_end=3381
|
||||
_REMOTESHELL_OPCODE._serialized_start=3238
|
||||
_REMOTESHELL_OPCODE._serialized_end=3381
|
||||
_BOUNDINGBOX._serialized_start=3383
|
||||
_BOUNDINGBOX._serialized_end=3500
|
||||
_WAYPOINT._serialized_start=3503
|
||||
_WAYPOINT._serialized_end=3874
|
||||
_STATUSMESSAGE._serialized_start=3876
|
||||
_STATUSMESSAGE._serialized_end=3907
|
||||
_MQTTCLIENTPROXYMESSAGE._serialized_start=3909
|
||||
_MQTTCLIENTPROXYMESSAGE._serialized_end=4017
|
||||
_MESHPACKET._serialized_start=4020
|
||||
_MESHPACKET._serialized_end=5414
|
||||
_MESHPACKET_PRIORITY._serialized_start=4754
|
||||
_MESHPACKET_PRIORITY._serialized_end=4880
|
||||
_MESHPACKET_DELAYED._serialized_start=4882
|
||||
_MESHPACKET_DELAYED._serialized_end=4948
|
||||
_MESHPACKET_TRANSPORTMECHANISM._serialized_start=4951
|
||||
_MESHPACKET_TRANSPORTMECHANISM._serialized_end=5185
|
||||
_MESHPACKET_ACKPROOFSTATUS._serialized_start=5187
|
||||
_MESHPACKET_ACKPROOFSTATUS._serialized_end=5291
|
||||
_MESHPACKET_SLOTPARITY._serialized_start=5293
|
||||
_MESHPACKET_SLOTPARITY._serialized_end=5371
|
||||
_NODEINFO._serialized_start=5417
|
||||
_NODEINFO._serialized_end=5847
|
||||
_MYNODEINFO._serialized_start=5850
|
||||
_MYNODEINFO._serialized_end=6052
|
||||
_LOGRECORD._serialized_start=6055
|
||||
_LOGRECORD._serialized_end=6256
|
||||
_LOGRECORD_LEVEL._serialized_start=6168
|
||||
_LOGRECORD_LEVEL._serialized_end=6256
|
||||
_QUEUESTATUS._serialized_start=6258
|
||||
_QUEUESTATUS._serialized_end=6338
|
||||
_FROMRADIO._serialized_start=6341
|
||||
_FROMRADIO._serialized_end=7360
|
||||
_LOCKDOWNSTATUS._serialized_start=7363
|
||||
_LOCKDOWNSTATUS._serialized_end=7647
|
||||
_LOCKDOWNSTATUS_STATE._serialized_start=7537
|
||||
_LOCKDOWNSTATUS_STATE._serialized_end=7647
|
||||
_CLIENTNOTIFICATION._serialized_start=7650
|
||||
_CLIENTNOTIFICATION._serialized_end=8210
|
||||
_KEYVERIFICATIONNUMBERINFORM._serialized_start=8212
|
||||
_KEYVERIFICATIONNUMBERINFORM._serialized_end=8306
|
||||
_KEYVERIFICATIONNUMBERREQUEST._serialized_start=8308
|
||||
_KEYVERIFICATIONNUMBERREQUEST._serialized_end=8378
|
||||
_KEYVERIFICATIONFINAL._serialized_start=8380
|
||||
_KEYVERIFICATIONFINAL._serialized_end=8493
|
||||
_DUPLICATEDPUBLICKEY._serialized_start=8495
|
||||
_DUPLICATEDPUBLICKEY._serialized_end=8516
|
||||
_LOWENTROPYKEY._serialized_start=8518
|
||||
_LOWENTROPYKEY._serialized_end=8533
|
||||
_FILEINFO._serialized_start=8535
|
||||
_FILEINFO._serialized_end=8584
|
||||
_TORADIO._serialized_start=8587
|
||||
_TORADIO._serialized_end=8899
|
||||
_COMPRESSED._serialized_start=8901
|
||||
_COMPRESSED._serialized_end=8974
|
||||
_NEIGHBORINFO._serialized_start=8977
|
||||
_NEIGHBORINFO._serialized_end=9121
|
||||
_NEIGHBOR._serialized_start=9123
|
||||
_NEIGHBOR._serialized_end=9223
|
||||
_DEVICEMETADATA._serialized_start=9226
|
||||
_DEVICEMETADATA._serialized_end=9607
|
||||
_LORAPRESETGROUP._serialized_start=9610
|
||||
_LORAPRESETGROUP._serialized_end=9795
|
||||
_LORAREGIONPRESETS._serialized_start=9797
|
||||
_LORAREGIONPRESETS._serialized_end=9904
|
||||
_LORAREGIONPRESETMAP._serialized_start=9907
|
||||
_LORAREGIONPRESETMAP._serialized_end=10045
|
||||
_HEARTBEAT._serialized_start=10047
|
||||
_HEARTBEAT._serialized_end=10073
|
||||
_NODEREMOTEHARDWAREPIN._serialized_start=10075
|
||||
_NODEREMOTEHARDWAREPIN._serialized_end=10169
|
||||
_CHUNKEDPAYLOAD._serialized_start=10171
|
||||
_CHUNKEDPAYLOAD._serialized_end=10272
|
||||
_RESEND_CHUNKS._serialized_start=10274
|
||||
_RESEND_CHUNKS._serialized_end=10305
|
||||
_CHUNKEDPAYLOADRESPONSE._serialized_start=10308
|
||||
_CHUNKEDPAYLOADRESPONSE._serialized_end=10487
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,978 +0,0 @@
|
||||
from meshtastic.protobuf import channel_pb2 as _channel_pb2
|
||||
from meshtastic.protobuf import config_pb2 as _config_pb2
|
||||
from meshtastic.protobuf import device_ui_pb2 as _device_ui_pb2
|
||||
from meshtastic.protobuf import field_metadata_pb2 as _field_metadata_pb2
|
||||
from meshtastic.protobuf import module_config_pb2 as _module_config_pb2
|
||||
from meshtastic.protobuf import portnums_pb2 as _portnums_pb2
|
||||
from meshtastic.protobuf import telemetry_pb2 as _telemetry_pb2
|
||||
from meshtastic.protobuf import xmodem_pb2 as _xmodem_pb2
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
AMBIENTLIGHTING_CONFIG: ExcludedModules
|
||||
ANDROID_SIM: HardwareModel
|
||||
AUDIO_CONFIG: ExcludedModules
|
||||
AXIOMETA_GENESIS_MINI: HardwareModel
|
||||
BETAFPV_2400_TX: HardwareModel
|
||||
BETAFPV_900_NANO_TX: HardwareModel
|
||||
BLUETOOTH_CONFIG: ExcludedModules
|
||||
BROWNOUT: CriticalErrorCode
|
||||
BURNING_MAN: FirmwareEdition
|
||||
CANARYONE: HardwareModel
|
||||
CANNEDMSG_CONFIG: ExcludedModules
|
||||
CCC: FirmwareEdition
|
||||
CDEBYTE_EORA_S3: HardwareModel
|
||||
CHATTER_2: HardwareModel
|
||||
CROWPANEL: HardwareModel
|
||||
CROWPANEL_P4: HardwareModel
|
||||
DATA_PAYLOAD_LEN: Constants
|
||||
DEFCON: FirmwareEdition
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
DETECTIONSENSOR_CONFIG: ExcludedModules
|
||||
DIY_EDITION: FirmwareEdition
|
||||
DIY_V1: HardwareModel
|
||||
DRAGON_CON: FirmwareEdition
|
||||
DR_DEV: HardwareModel
|
||||
EBYTE_ESP32_S3: HardwareModel
|
||||
ESP32_S3_PICO: HardwareModel
|
||||
EXCLUDED_NONE: ExcludedModules
|
||||
EXTNOTIF_CONFIG: ExcludedModules
|
||||
FAB: FirmwareEdition
|
||||
FLASH_CORRUPTION_RECOVERABLE: CriticalErrorCode
|
||||
FLASH_CORRUPTION_UNRECOVERABLE: CriticalErrorCode
|
||||
GENIEBLOCKS: HardwareModel
|
||||
HAMVENTION: FirmwareEdition
|
||||
HELTEC_CAPSULE_SENSOR_V3: HardwareModel
|
||||
HELTEC_HRU_3601: HardwareModel
|
||||
HELTEC_HT62: HardwareModel
|
||||
HELTEC_MESH_NODE_T096: HardwareModel
|
||||
HELTEC_MESH_NODE_T1: HardwareModel
|
||||
HELTEC_MESH_NODE_T114: HardwareModel
|
||||
HELTEC_MESH_POCKET: HardwareModel
|
||||
HELTEC_MESH_POCKET_V2: HardwareModel
|
||||
HELTEC_MESH_SOLAR: HardwareModel
|
||||
HELTEC_MESH_TOWER_V2: HardwareModel
|
||||
HELTEC_RC32: HardwareModel
|
||||
HELTEC_RC52: HardwareModel
|
||||
HELTEC_RCC6: HardwareModel
|
||||
HELTEC_SENSOR_HUB: HardwareModel
|
||||
HELTEC_V1: HardwareModel
|
||||
HELTEC_V2_0: HardwareModel
|
||||
HELTEC_V2_1: HardwareModel
|
||||
HELTEC_V3: HardwareModel
|
||||
HELTEC_V4: HardwareModel
|
||||
HELTEC_V4_R8: HardwareModel
|
||||
HELTEC_VISION_MASTER_E213: HardwareModel
|
||||
HELTEC_VISION_MASTER_E290: HardwareModel
|
||||
HELTEC_VISION_MASTER_T190: HardwareModel
|
||||
HELTEC_WIRELESS_BRIDGE: HardwareModel
|
||||
HELTEC_WIRELESS_PAPER: HardwareModel
|
||||
HELTEC_WIRELESS_PAPER_V1_0: HardwareModel
|
||||
HELTEC_WIRELESS_TRACKER: HardwareModel
|
||||
HELTEC_WIRELESS_TRACKER_V1_0: HardwareModel
|
||||
HELTEC_WIRELESS_TRACKER_V2: HardwareModel
|
||||
HELTEC_WSL_V3: HardwareModel
|
||||
INVALID_RADIO_SETTING: CriticalErrorCode
|
||||
LILYGO_TBEAM_S3_CORE: HardwareModel
|
||||
LINK_32: HardwareModel
|
||||
LORA_RELAY_V1: HardwareModel
|
||||
LORA_TYPE: HardwareModel
|
||||
M5STACK: HardwareModel
|
||||
M5STACK_C6L: HardwareModel
|
||||
M5STACK_CARDPUTER_ADV: HardwareModel
|
||||
M5STACK_CORE2: HardwareModel
|
||||
M5STACK_COREBASIC: HardwareModel
|
||||
M5STACK_CORES3: HardwareModel
|
||||
M5STACK_RESERVED: HardwareModel
|
||||
MAKERFABS_NOMAD_TERMINAL: HardwareModel
|
||||
MAKERFABS_RESERVED: HardwareModel
|
||||
MAKERFABS_TRACKER: HardwareModel
|
||||
ME25LS01_4Y10TD: HardwareModel
|
||||
MESHBEACON_CONFIG: ExcludedModules
|
||||
MESHLINK: HardwareModel
|
||||
MESHNOLOGY_W10: HardwareModel
|
||||
MESHNOLOGY_W12: HardwareModel
|
||||
MESHPAGER_X2: HardwareModel
|
||||
MESHSTICK_1262: HardwareModel
|
||||
MESH_TAB: HardwareModel
|
||||
MESH_TRACKER_X1: HardwareModel
|
||||
MINI_EPAPER_S3: HardwareModel
|
||||
MQTT_CONFIG: ExcludedModules
|
||||
MS24SF1: HardwareModel
|
||||
MUZI_BASE: HardwareModel
|
||||
MUZI_R1_NEO: HardwareModel
|
||||
NANO_G1: HardwareModel
|
||||
NANO_G1_EXPLORER: HardwareModel
|
||||
NANO_G2_ULTRA: HardwareModel
|
||||
NEIGHBORINFO_CONFIG: ExcludedModules
|
||||
NETWORK_CONFIG: ExcludedModules
|
||||
NODARA: HardwareModel
|
||||
NOMADSTAR_METEOR_PRO: HardwareModel
|
||||
NONE: CriticalErrorCode
|
||||
NO_AXP192: CriticalErrorCode
|
||||
NO_RADIO: CriticalErrorCode
|
||||
NRF52840_PCA10059: HardwareModel
|
||||
NRF52_PROMICRO_DIY: HardwareModel
|
||||
NRF52_UNKNOWN: HardwareModel
|
||||
OPEN_SAUCE: FirmwareEdition
|
||||
PAXCOUNTER_CONFIG: ExcludedModules
|
||||
PICOMPUTER_S3: HardwareModel
|
||||
PORTDUINO: HardwareModel
|
||||
PPR: HardwareModel
|
||||
PRIVATE_HW: HardwareModel
|
||||
RADIOMASTER_900_BANDIT: HardwareModel
|
||||
RADIOMASTER_900_BANDIT_NANO: HardwareModel
|
||||
RADIO_SPI_BUG: CriticalErrorCode
|
||||
RAK11200: HardwareModel
|
||||
RAK11310: HardwareModel
|
||||
RAK2560: HardwareModel
|
||||
RAK3172: HardwareModel
|
||||
RAK3312: HardwareModel
|
||||
RAK3401: HardwareModel
|
||||
RAK4631: HardwareModel
|
||||
RAK6421: HardwareModel
|
||||
RANGETEST_CONFIG: ExcludedModules
|
||||
REMOTEHARDWARE_CONFIG: ExcludedModules
|
||||
ROUTASTIC: HardwareModel
|
||||
RP2040_FEATHER_RFM95: HardwareModel
|
||||
RP2040_LORA: HardwareModel
|
||||
RPI_PICO: HardwareModel
|
||||
RPI_PICO2: HardwareModel
|
||||
SEEED_SOLAR_NODE: HardwareModel
|
||||
SEEED_WIO_TRACKER_L1: HardwareModel
|
||||
SEEED_WIO_TRACKER_L1_EINK: HardwareModel
|
||||
SEEED_WIO_TRACKER_L1_PRO_1W: HardwareModel
|
||||
SEEED_WIO_TRACKER_L2: HardwareModel
|
||||
SEEED_XIAO_S3: HardwareModel
|
||||
SENSECAP_INDICATOR: HardwareModel
|
||||
SERIAL_CONFIG: ExcludedModules
|
||||
SLEEP_ENTER_WAIT: CriticalErrorCode
|
||||
SMART_CITIZEN: FirmwareEdition
|
||||
STATION_G1: HardwareModel
|
||||
STATION_G2: HardwareModel
|
||||
STATION_G3: HardwareModel
|
||||
STATUSMESSAGE_CONFIG: ExcludedModules
|
||||
STOREFORWARD_CONFIG: ExcludedModules
|
||||
SX1262_FAILURE: CriticalErrorCode
|
||||
T5_S3_EPAPER_PRO: HardwareModel
|
||||
TAK_CONFIG: ExcludedModules
|
||||
TBEAM: HardwareModel
|
||||
TBEAM_1_WATT: HardwareModel
|
||||
TBEAM_BPF: HardwareModel
|
||||
TBEAM_V0P7: HardwareModel
|
||||
TDISPLAY_S3_PRO: HardwareModel
|
||||
TD_LORAC: HardwareModel
|
||||
TELEMETRY_CONFIG: ExcludedModules
|
||||
THINKNODE_M1: HardwareModel
|
||||
THINKNODE_M2: HardwareModel
|
||||
THINKNODE_M3: HardwareModel
|
||||
THINKNODE_M4: HardwareModel
|
||||
THINKNODE_M5: HardwareModel
|
||||
THINKNODE_M6: HardwareModel
|
||||
THINKNODE_M7: HardwareModel
|
||||
THINKNODE_M8: HardwareModel
|
||||
THINKNODE_M9: HardwareModel
|
||||
THINKNODE_MX: HardwareModel
|
||||
TLORA_C6: HardwareModel
|
||||
TLORA_T3_S3: HardwareModel
|
||||
TLORA_V1: HardwareModel
|
||||
TLORA_V1_1P3: HardwareModel
|
||||
TLORA_V2: HardwareModel
|
||||
TLORA_V2_1_1P6: HardwareModel
|
||||
TLORA_V2_1_1P8: HardwareModel
|
||||
TRACKER_T1000_E: HardwareModel
|
||||
TRAFFICMANAGEMENT_CONFIG: ExcludedModules
|
||||
TRANSMIT_FAILED: CriticalErrorCode
|
||||
TWC_MESH_V4: HardwareModel
|
||||
TX_WATCHDOG: CriticalErrorCode
|
||||
T_CONNECT_PRO: HardwareModel
|
||||
T_DECK: HardwareModel
|
||||
T_DECK_PRO: HardwareModel
|
||||
T_ECHO: HardwareModel
|
||||
T_ECHO_CARD: HardwareModel
|
||||
T_ECHO_LITE: HardwareModel
|
||||
T_ECHO_PLUS: HardwareModel
|
||||
T_ETH_ELITE: HardwareModel
|
||||
T_IMPULSE_PLUS: HardwareModel
|
||||
T_LORA_PAGER: HardwareModel
|
||||
T_WATCH_S3: HardwareModel
|
||||
T_WATCH_ULTRA: HardwareModel
|
||||
UBLOX_UNIT_FAILED: CriticalErrorCode
|
||||
UNPHONE: HardwareModel
|
||||
UNSET: HardwareModel
|
||||
UNSPECIFIED: CriticalErrorCode
|
||||
VANILLA: FirmwareEdition
|
||||
WIO_E5: HardwareModel
|
||||
WIO_WM1110: HardwareModel
|
||||
WIPHONE: HardwareModel
|
||||
WISMESH_TAG: HardwareModel
|
||||
WISMESH_TAP: HardwareModel
|
||||
WISMESH_TAP_V2: HardwareModel
|
||||
XIAO_NRF52_KIT: HardwareModel
|
||||
ZERO: Constants
|
||||
|
||||
class BoundingBox(_message.Message):
|
||||
__slots__ = ["latitude_north_i", "latitude_south_i", "longitude_east_i", "longitude_west_i"]
|
||||
LATITUDE_NORTH_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LATITUDE_SOUTH_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LONGITUDE_EAST_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LONGITUDE_WEST_I_FIELD_NUMBER: _ClassVar[int]
|
||||
latitude_north_i: int
|
||||
latitude_south_i: int
|
||||
longitude_east_i: int
|
||||
longitude_west_i: int
|
||||
def __init__(self, longitude_west_i: _Optional[int] = ..., latitude_south_i: _Optional[int] = ..., longitude_east_i: _Optional[int] = ..., latitude_north_i: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class ChunkedPayload(_message.Message):
|
||||
__slots__ = ["chunk_count", "chunk_index", "payload_chunk", "payload_id"]
|
||||
CHUNK_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
CHUNK_INDEX_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_CHUNK_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
chunk_count: int
|
||||
chunk_index: int
|
||||
payload_chunk: bytes
|
||||
payload_id: int
|
||||
def __init__(self, payload_id: _Optional[int] = ..., chunk_count: _Optional[int] = ..., chunk_index: _Optional[int] = ..., payload_chunk: _Optional[bytes] = ...) -> None: ...
|
||||
|
||||
class ChunkedPayloadResponse(_message.Message):
|
||||
__slots__ = ["accept_transfer", "payload_id", "request_transfer", "resend_chunks"]
|
||||
ACCEPT_TRANSFER_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
REQUEST_TRANSFER_FIELD_NUMBER: _ClassVar[int]
|
||||
RESEND_CHUNKS_FIELD_NUMBER: _ClassVar[int]
|
||||
accept_transfer: bool
|
||||
payload_id: int
|
||||
request_transfer: bool
|
||||
resend_chunks: resend_chunks
|
||||
def __init__(self, payload_id: _Optional[int] = ..., request_transfer: bool = ..., accept_transfer: bool = ..., resend_chunks: _Optional[_Union[resend_chunks, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class ClientNotification(_message.Message):
|
||||
__slots__ = ["duplicated_public_key", "key_verification_final", "key_verification_number_inform", "key_verification_number_request", "level", "low_entropy_key", "message", "reply_id", "time"]
|
||||
DUPLICATED_PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
KEY_VERIFICATION_FINAL_FIELD_NUMBER: _ClassVar[int]
|
||||
KEY_VERIFICATION_NUMBER_INFORM_FIELD_NUMBER: _ClassVar[int]
|
||||
KEY_VERIFICATION_NUMBER_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
LEVEL_FIELD_NUMBER: _ClassVar[int]
|
||||
LOW_ENTROPY_KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
REPLY_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
TIME_FIELD_NUMBER: _ClassVar[int]
|
||||
duplicated_public_key: DuplicatedPublicKey
|
||||
key_verification_final: KeyVerificationFinal
|
||||
key_verification_number_inform: KeyVerificationNumberInform
|
||||
key_verification_number_request: KeyVerificationNumberRequest
|
||||
level: LogRecord.Level
|
||||
low_entropy_key: LowEntropyKey
|
||||
message: str
|
||||
reply_id: int
|
||||
time: int
|
||||
def __init__(self, reply_id: _Optional[int] = ..., time: _Optional[int] = ..., level: _Optional[_Union[LogRecord.Level, str]] = ..., message: _Optional[str] = ..., key_verification_number_inform: _Optional[_Union[KeyVerificationNumberInform, _Mapping]] = ..., key_verification_number_request: _Optional[_Union[KeyVerificationNumberRequest, _Mapping]] = ..., key_verification_final: _Optional[_Union[KeyVerificationFinal, _Mapping]] = ..., duplicated_public_key: _Optional[_Union[DuplicatedPublicKey, _Mapping]] = ..., low_entropy_key: _Optional[_Union[LowEntropyKey, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class Compressed(_message.Message):
|
||||
__slots__ = ["data", "portnum"]
|
||||
DATA_FIELD_NUMBER: _ClassVar[int]
|
||||
PORTNUM_FIELD_NUMBER: _ClassVar[int]
|
||||
data: bytes
|
||||
portnum: _portnums_pb2.PortNum
|
||||
def __init__(self, portnum: _Optional[_Union[_portnums_pb2.PortNum, str]] = ..., data: _Optional[bytes] = ...) -> None: ...
|
||||
|
||||
class Data(_message.Message):
|
||||
__slots__ = ["bitfield", "dest", "emoji", "payload", "portnum", "reply_id", "request_id", "source", "want_response", "xeddsa_signature"]
|
||||
BITFIELD_FIELD_NUMBER: _ClassVar[int]
|
||||
DEST_FIELD_NUMBER: _ClassVar[int]
|
||||
EMOJI_FIELD_NUMBER: _ClassVar[int]
|
||||
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
|
||||
PORTNUM_FIELD_NUMBER: _ClassVar[int]
|
||||
REPLY_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
REQUEST_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
SOURCE_FIELD_NUMBER: _ClassVar[int]
|
||||
WANT_RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
||||
XEDDSA_SIGNATURE_FIELD_NUMBER: _ClassVar[int]
|
||||
bitfield: int
|
||||
dest: int
|
||||
emoji: int
|
||||
payload: bytes
|
||||
portnum: _portnums_pb2.PortNum
|
||||
reply_id: int
|
||||
request_id: int
|
||||
source: int
|
||||
want_response: bool
|
||||
xeddsa_signature: bytes
|
||||
def __init__(self, portnum: _Optional[_Union[_portnums_pb2.PortNum, str]] = ..., payload: _Optional[bytes] = ..., want_response: bool = ..., dest: _Optional[int] = ..., source: _Optional[int] = ..., request_id: _Optional[int] = ..., reply_id: _Optional[int] = ..., emoji: _Optional[int] = ..., bitfield: _Optional[int] = ..., xeddsa_signature: _Optional[bytes] = ...) -> None: ...
|
||||
|
||||
class DeviceMetadata(_message.Message):
|
||||
__slots__ = ["canShutdown", "device_state_version", "excluded_modules", "firmware_version", "hasBluetooth", "hasEthernet", "hasPKC", "hasRemoteHardware", "hasWifi", "has_xeddsa", "hw_model", "position_flags", "role"]
|
||||
CANSHUTDOWN_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_STATE_VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
EXCLUDED_MODULES_FIELD_NUMBER: _ClassVar[int]
|
||||
FIRMWARE_VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
HASBLUETOOTH_FIELD_NUMBER: _ClassVar[int]
|
||||
HASETHERNET_FIELD_NUMBER: _ClassVar[int]
|
||||
HASPKC_FIELD_NUMBER: _ClassVar[int]
|
||||
HASREMOTEHARDWARE_FIELD_NUMBER: _ClassVar[int]
|
||||
HASWIFI_FIELD_NUMBER: _ClassVar[int]
|
||||
HAS_XEDDSA_FIELD_NUMBER: _ClassVar[int]
|
||||
HW_MODEL_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_FLAGS_FIELD_NUMBER: _ClassVar[int]
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
canShutdown: bool
|
||||
device_state_version: int
|
||||
excluded_modules: int
|
||||
firmware_version: str
|
||||
hasBluetooth: bool
|
||||
hasEthernet: bool
|
||||
hasPKC: bool
|
||||
hasRemoteHardware: bool
|
||||
hasWifi: bool
|
||||
has_xeddsa: bool
|
||||
hw_model: HardwareModel
|
||||
position_flags: int
|
||||
role: _config_pb2.Config.DeviceConfig.Role
|
||||
def __init__(self, firmware_version: _Optional[str] = ..., device_state_version: _Optional[int] = ..., canShutdown: bool = ..., hasWifi: bool = ..., hasBluetooth: bool = ..., hasEthernet: bool = ..., role: _Optional[_Union[_config_pb2.Config.DeviceConfig.Role, str]] = ..., position_flags: _Optional[int] = ..., hw_model: _Optional[_Union[HardwareModel, str]] = ..., hasRemoteHardware: bool = ..., hasPKC: bool = ..., excluded_modules: _Optional[int] = ..., has_xeddsa: bool = ...) -> None: ...
|
||||
|
||||
class DuplicatedPublicKey(_message.Message):
|
||||
__slots__ = []
|
||||
def __init__(self) -> None: ...
|
||||
|
||||
class FileInfo(_message.Message):
|
||||
__slots__ = ["file_name", "size_bytes"]
|
||||
FILE_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
SIZE_BYTES_FIELD_NUMBER: _ClassVar[int]
|
||||
file_name: str
|
||||
size_bytes: int
|
||||
def __init__(self, file_name: _Optional[str] = ..., size_bytes: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class FromRadio(_message.Message):
|
||||
__slots__ = ["channel", "clientNotification", "config", "config_complete_id", "deviceuiConfig", "fileInfo", "id", "lockdown_status", "log_record", "metadata", "moduleConfig", "mqttClientProxyMessage", "my_info", "node_info", "packet", "queueStatus", "rebooted", "region_presets", "xmodemPacket"]
|
||||
CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
CLIENTNOTIFICATION_FIELD_NUMBER: _ClassVar[int]
|
||||
CONFIG_COMPLETE_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
CONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICEUICONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
FILEINFO_FIELD_NUMBER: _ClassVar[int]
|
||||
ID_FIELD_NUMBER: _ClassVar[int]
|
||||
LOCKDOWN_STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
LOG_RECORD_FIELD_NUMBER: _ClassVar[int]
|
||||
METADATA_FIELD_NUMBER: _ClassVar[int]
|
||||
MODULECONFIG_FIELD_NUMBER: _ClassVar[int]
|
||||
MQTTCLIENTPROXYMESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
MY_INFO_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_INFO_FIELD_NUMBER: _ClassVar[int]
|
||||
PACKET_FIELD_NUMBER: _ClassVar[int]
|
||||
QUEUESTATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
REBOOTED_FIELD_NUMBER: _ClassVar[int]
|
||||
REGION_PRESETS_FIELD_NUMBER: _ClassVar[int]
|
||||
XMODEMPACKET_FIELD_NUMBER: _ClassVar[int]
|
||||
channel: _channel_pb2.Channel
|
||||
clientNotification: ClientNotification
|
||||
config: _config_pb2.Config
|
||||
config_complete_id: int
|
||||
deviceuiConfig: _device_ui_pb2.DeviceUIConfig
|
||||
fileInfo: FileInfo
|
||||
id: int
|
||||
lockdown_status: LockdownStatus
|
||||
log_record: LogRecord
|
||||
metadata: DeviceMetadata
|
||||
moduleConfig: _module_config_pb2.ModuleConfig
|
||||
mqttClientProxyMessage: MqttClientProxyMessage
|
||||
my_info: MyNodeInfo
|
||||
node_info: NodeInfo
|
||||
packet: MeshPacket
|
||||
queueStatus: QueueStatus
|
||||
rebooted: bool
|
||||
region_presets: LoRaRegionPresetMap
|
||||
xmodemPacket: _xmodem_pb2.XModem
|
||||
def __init__(self, id: _Optional[int] = ..., packet: _Optional[_Union[MeshPacket, _Mapping]] = ..., my_info: _Optional[_Union[MyNodeInfo, _Mapping]] = ..., node_info: _Optional[_Union[NodeInfo, _Mapping]] = ..., config: _Optional[_Union[_config_pb2.Config, _Mapping]] = ..., log_record: _Optional[_Union[LogRecord, _Mapping]] = ..., config_complete_id: _Optional[int] = ..., rebooted: bool = ..., moduleConfig: _Optional[_Union[_module_config_pb2.ModuleConfig, _Mapping]] = ..., channel: _Optional[_Union[_channel_pb2.Channel, _Mapping]] = ..., queueStatus: _Optional[_Union[QueueStatus, _Mapping]] = ..., xmodemPacket: _Optional[_Union[_xmodem_pb2.XModem, _Mapping]] = ..., metadata: _Optional[_Union[DeviceMetadata, _Mapping]] = ..., mqttClientProxyMessage: _Optional[_Union[MqttClientProxyMessage, _Mapping]] = ..., fileInfo: _Optional[_Union[FileInfo, _Mapping]] = ..., clientNotification: _Optional[_Union[ClientNotification, _Mapping]] = ..., deviceuiConfig: _Optional[_Union[_device_ui_pb2.DeviceUIConfig, _Mapping]] = ..., lockdown_status: _Optional[_Union[LockdownStatus, _Mapping]] = ..., region_presets: _Optional[_Union[LoRaRegionPresetMap, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class Heartbeat(_message.Message):
|
||||
__slots__ = ["nonce"]
|
||||
NONCE_FIELD_NUMBER: _ClassVar[int]
|
||||
nonce: int
|
||||
def __init__(self, nonce: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class KeyVerification(_message.Message):
|
||||
__slots__ = ["hash1", "hash2", "nonce"]
|
||||
HASH1_FIELD_NUMBER: _ClassVar[int]
|
||||
HASH2_FIELD_NUMBER: _ClassVar[int]
|
||||
NONCE_FIELD_NUMBER: _ClassVar[int]
|
||||
hash1: bytes
|
||||
hash2: bytes
|
||||
nonce: int
|
||||
def __init__(self, nonce: _Optional[int] = ..., hash1: _Optional[bytes] = ..., hash2: _Optional[bytes] = ...) -> None: ...
|
||||
|
||||
class KeyVerificationFinal(_message.Message):
|
||||
__slots__ = ["isSender", "nonce", "remote_longname", "verification_characters"]
|
||||
ISSENDER_FIELD_NUMBER: _ClassVar[int]
|
||||
NONCE_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOTE_LONGNAME_FIELD_NUMBER: _ClassVar[int]
|
||||
VERIFICATION_CHARACTERS_FIELD_NUMBER: _ClassVar[int]
|
||||
isSender: bool
|
||||
nonce: int
|
||||
remote_longname: str
|
||||
verification_characters: str
|
||||
def __init__(self, nonce: _Optional[int] = ..., remote_longname: _Optional[str] = ..., isSender: bool = ..., verification_characters: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class KeyVerificationNumberInform(_message.Message):
|
||||
__slots__ = ["nonce", "remote_longname", "security_number"]
|
||||
NONCE_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOTE_LONGNAME_FIELD_NUMBER: _ClassVar[int]
|
||||
SECURITY_NUMBER_FIELD_NUMBER: _ClassVar[int]
|
||||
nonce: int
|
||||
remote_longname: str
|
||||
security_number: int
|
||||
def __init__(self, nonce: _Optional[int] = ..., remote_longname: _Optional[str] = ..., security_number: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class KeyVerificationNumberRequest(_message.Message):
|
||||
__slots__ = ["nonce", "remote_longname"]
|
||||
NONCE_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOTE_LONGNAME_FIELD_NUMBER: _ClassVar[int]
|
||||
nonce: int
|
||||
remote_longname: str
|
||||
def __init__(self, nonce: _Optional[int] = ..., remote_longname: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class LoRaPresetGroup(_message.Message):
|
||||
__slots__ = ["default_preset", "licensed_only", "presets"]
|
||||
DEFAULT_PRESET_FIELD_NUMBER: _ClassVar[int]
|
||||
LICENSED_ONLY_FIELD_NUMBER: _ClassVar[int]
|
||||
PRESETS_FIELD_NUMBER: _ClassVar[int]
|
||||
default_preset: _config_pb2.Config.LoRaConfig.ModemPreset
|
||||
licensed_only: bool
|
||||
presets: _containers.RepeatedScalarFieldContainer[_config_pb2.Config.LoRaConfig.ModemPreset]
|
||||
def __init__(self, presets: _Optional[_Iterable[_Union[_config_pb2.Config.LoRaConfig.ModemPreset, str]]] = ..., default_preset: _Optional[_Union[_config_pb2.Config.LoRaConfig.ModemPreset, str]] = ..., licensed_only: bool = ...) -> None: ...
|
||||
|
||||
class LoRaRegionPresetMap(_message.Message):
|
||||
__slots__ = ["groups", "region_groups"]
|
||||
GROUPS_FIELD_NUMBER: _ClassVar[int]
|
||||
REGION_GROUPS_FIELD_NUMBER: _ClassVar[int]
|
||||
groups: _containers.RepeatedCompositeFieldContainer[LoRaPresetGroup]
|
||||
region_groups: _containers.RepeatedCompositeFieldContainer[LoRaRegionPresets]
|
||||
def __init__(self, groups: _Optional[_Iterable[_Union[LoRaPresetGroup, _Mapping]]] = ..., region_groups: _Optional[_Iterable[_Union[LoRaRegionPresets, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class LoRaRegionPresets(_message.Message):
|
||||
__slots__ = ["group_index", "region"]
|
||||
GROUP_INDEX_FIELD_NUMBER: _ClassVar[int]
|
||||
REGION_FIELD_NUMBER: _ClassVar[int]
|
||||
group_index: int
|
||||
region: _config_pb2.Config.LoRaConfig.RegionCode
|
||||
def __init__(self, region: _Optional[_Union[_config_pb2.Config.LoRaConfig.RegionCode, str]] = ..., group_index: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class LockdownStatus(_message.Message):
|
||||
__slots__ = ["backoff_seconds", "boots_remaining", "lock_reason", "state", "valid_until_epoch"]
|
||||
class State(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
BACKOFF_SECONDS_FIELD_NUMBER: _ClassVar[int]
|
||||
BOOTS_REMAINING_FIELD_NUMBER: _ClassVar[int]
|
||||
DISABLED: LockdownStatus.State
|
||||
LOCKED: LockdownStatus.State
|
||||
LOCK_REASON_FIELD_NUMBER: _ClassVar[int]
|
||||
NEEDS_PROVISION: LockdownStatus.State
|
||||
STATE_FIELD_NUMBER: _ClassVar[int]
|
||||
STATE_UNSPECIFIED: LockdownStatus.State
|
||||
UNLOCKED: LockdownStatus.State
|
||||
UNLOCK_FAILED: LockdownStatus.State
|
||||
VALID_UNTIL_EPOCH_FIELD_NUMBER: _ClassVar[int]
|
||||
backoff_seconds: int
|
||||
boots_remaining: int
|
||||
lock_reason: str
|
||||
state: LockdownStatus.State
|
||||
valid_until_epoch: int
|
||||
def __init__(self, state: _Optional[_Union[LockdownStatus.State, str]] = ..., lock_reason: _Optional[str] = ..., boots_remaining: _Optional[int] = ..., valid_until_epoch: _Optional[int] = ..., backoff_seconds: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class LogRecord(_message.Message):
|
||||
__slots__ = ["level", "message", "source", "time"]
|
||||
class Level(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
CRITICAL: LogRecord.Level
|
||||
DEBUG: LogRecord.Level
|
||||
ERROR: LogRecord.Level
|
||||
INFO: LogRecord.Level
|
||||
LEVEL_FIELD_NUMBER: _ClassVar[int]
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
SOURCE_FIELD_NUMBER: _ClassVar[int]
|
||||
TIME_FIELD_NUMBER: _ClassVar[int]
|
||||
TRACE: LogRecord.Level
|
||||
UNSET: LogRecord.Level
|
||||
WARNING: LogRecord.Level
|
||||
level: LogRecord.Level
|
||||
message: str
|
||||
source: str
|
||||
time: int
|
||||
def __init__(self, message: _Optional[str] = ..., time: _Optional[int] = ..., source: _Optional[str] = ..., level: _Optional[_Union[LogRecord.Level, str]] = ...) -> None: ...
|
||||
|
||||
class LowEntropyKey(_message.Message):
|
||||
__slots__ = []
|
||||
def __init__(self) -> None: ...
|
||||
|
||||
class MeshPacket(_message.Message):
|
||||
__slots__ = ["ack_proof_status", "channel", "decoded", "delayed", "encrypted", "hop_limit", "hop_start", "id", "next_hop", "pki_encrypted", "priority", "public_key", "relay_node", "rx_rssi", "rx_snr", "rx_time", "slot_parity", "to", "transport_mechanism", "tx_after", "via_mqtt", "want_ack", "xeddsa_signed"]
|
||||
class AckProofStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class Delayed(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class Priority(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class SlotParity(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class TransportMechanism(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ACK: MeshPacket.Priority
|
||||
ACK_PROOF_ABSENT: MeshPacket.AckProofStatus
|
||||
ACK_PROOF_INVALID: MeshPacket.AckProofStatus
|
||||
ACK_PROOF_NO_KEY: MeshPacket.AckProofStatus
|
||||
ACK_PROOF_STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
ACK_PROOF_VALID: MeshPacket.AckProofStatus
|
||||
ALERT: MeshPacket.Priority
|
||||
BACKGROUND: MeshPacket.Priority
|
||||
CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
DECODED_FIELD_NUMBER: _ClassVar[int]
|
||||
DEFAULT: MeshPacket.Priority
|
||||
DELAYED_BROADCAST: MeshPacket.Delayed
|
||||
DELAYED_DIRECT: MeshPacket.Delayed
|
||||
DELAYED_FIELD_NUMBER: _ClassVar[int]
|
||||
ENCRYPTED_FIELD_NUMBER: _ClassVar[int]
|
||||
FROM_FIELD_NUMBER: _ClassVar[int]
|
||||
HIGH: MeshPacket.Priority
|
||||
HOP_LIMIT_FIELD_NUMBER: _ClassVar[int]
|
||||
HOP_START_FIELD_NUMBER: _ClassVar[int]
|
||||
ID_FIELD_NUMBER: _ClassVar[int]
|
||||
MAX: MeshPacket.Priority
|
||||
MIN: MeshPacket.Priority
|
||||
NEXT_HOP_FIELD_NUMBER: _ClassVar[int]
|
||||
NO_DELAY: MeshPacket.Delayed
|
||||
PKI_ENCRYPTED_FIELD_NUMBER: _ClassVar[int]
|
||||
PRIORITY_FIELD_NUMBER: _ClassVar[int]
|
||||
PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
RELAY_NODE_FIELD_NUMBER: _ClassVar[int]
|
||||
RELIABLE: MeshPacket.Priority
|
||||
RESPONSE: MeshPacket.Priority
|
||||
RX_RSSI_FIELD_NUMBER: _ClassVar[int]
|
||||
RX_SNR_FIELD_NUMBER: _ClassVar[int]
|
||||
RX_TIME_FIELD_NUMBER: _ClassVar[int]
|
||||
SLOT_PARITY_EVEN: MeshPacket.SlotParity
|
||||
SLOT_PARITY_FIELD_NUMBER: _ClassVar[int]
|
||||
SLOT_PARITY_ODD: MeshPacket.SlotParity
|
||||
SLOT_PARITY_UNSET: MeshPacket.SlotParity
|
||||
TO_FIELD_NUMBER: _ClassVar[int]
|
||||
TRANSPORT_API: MeshPacket.TransportMechanism
|
||||
TRANSPORT_INTERNAL: MeshPacket.TransportMechanism
|
||||
TRANSPORT_LORA: MeshPacket.TransportMechanism
|
||||
TRANSPORT_LORA_ALT1: MeshPacket.TransportMechanism
|
||||
TRANSPORT_LORA_ALT2: MeshPacket.TransportMechanism
|
||||
TRANSPORT_LORA_ALT3: MeshPacket.TransportMechanism
|
||||
TRANSPORT_MECHANISM_FIELD_NUMBER: _ClassVar[int]
|
||||
TRANSPORT_MQTT: MeshPacket.TransportMechanism
|
||||
TRANSPORT_MULTICAST_UDP: MeshPacket.TransportMechanism
|
||||
TRANSPORT_UNICAST_UDP: MeshPacket.TransportMechanism
|
||||
TX_AFTER_FIELD_NUMBER: _ClassVar[int]
|
||||
UNSET: MeshPacket.Priority
|
||||
VIA_MQTT_FIELD_NUMBER: _ClassVar[int]
|
||||
WANT_ACK_FIELD_NUMBER: _ClassVar[int]
|
||||
XEDDSA_SIGNED_FIELD_NUMBER: _ClassVar[int]
|
||||
ack_proof_status: MeshPacket.AckProofStatus
|
||||
channel: int
|
||||
decoded: Data
|
||||
delayed: MeshPacket.Delayed
|
||||
encrypted: bytes
|
||||
hop_limit: int
|
||||
hop_start: int
|
||||
id: int
|
||||
next_hop: int
|
||||
pki_encrypted: bool
|
||||
priority: MeshPacket.Priority
|
||||
public_key: bytes
|
||||
relay_node: int
|
||||
rx_rssi: int
|
||||
rx_snr: float
|
||||
rx_time: int
|
||||
slot_parity: MeshPacket.SlotParity
|
||||
to: int
|
||||
transport_mechanism: MeshPacket.TransportMechanism
|
||||
tx_after: int
|
||||
via_mqtt: bool
|
||||
want_ack: bool
|
||||
xeddsa_signed: bool
|
||||
def __init__(self, to: _Optional[int] = ..., channel: _Optional[int] = ..., decoded: _Optional[_Union[Data, _Mapping]] = ..., encrypted: _Optional[bytes] = ..., id: _Optional[int] = ..., rx_time: _Optional[int] = ..., rx_snr: _Optional[float] = ..., hop_limit: _Optional[int] = ..., want_ack: bool = ..., priority: _Optional[_Union[MeshPacket.Priority, str]] = ..., rx_rssi: _Optional[int] = ..., delayed: _Optional[_Union[MeshPacket.Delayed, str]] = ..., via_mqtt: bool = ..., hop_start: _Optional[int] = ..., public_key: _Optional[bytes] = ..., pki_encrypted: bool = ..., next_hop: _Optional[int] = ..., relay_node: _Optional[int] = ..., tx_after: _Optional[int] = ..., transport_mechanism: _Optional[_Union[MeshPacket.TransportMechanism, str]] = ..., xeddsa_signed: bool = ..., ack_proof_status: _Optional[_Union[MeshPacket.AckProofStatus, str]] = ..., slot_parity: _Optional[_Union[MeshPacket.SlotParity, str]] = ..., **kwargs) -> None: ...
|
||||
|
||||
class MqttClientProxyMessage(_message.Message):
|
||||
__slots__ = ["data", "retained", "text", "topic"]
|
||||
DATA_FIELD_NUMBER: _ClassVar[int]
|
||||
RETAINED_FIELD_NUMBER: _ClassVar[int]
|
||||
TEXT_FIELD_NUMBER: _ClassVar[int]
|
||||
TOPIC_FIELD_NUMBER: _ClassVar[int]
|
||||
data: bytes
|
||||
retained: bool
|
||||
text: str
|
||||
topic: str
|
||||
def __init__(self, topic: _Optional[str] = ..., data: _Optional[bytes] = ..., text: _Optional[str] = ..., retained: bool = ...) -> None: ...
|
||||
|
||||
class MyNodeInfo(_message.Message):
|
||||
__slots__ = ["device_id", "firmware_edition", "min_app_version", "my_node_num", "nodedb_count", "pio_env", "reboot_count"]
|
||||
DEVICE_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
FIRMWARE_EDITION_FIELD_NUMBER: _ClassVar[int]
|
||||
MIN_APP_VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
MY_NODE_NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
NODEDB_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
PIO_ENV_FIELD_NUMBER: _ClassVar[int]
|
||||
REBOOT_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
device_id: bytes
|
||||
firmware_edition: FirmwareEdition
|
||||
min_app_version: int
|
||||
my_node_num: int
|
||||
nodedb_count: int
|
||||
pio_env: str
|
||||
reboot_count: int
|
||||
def __init__(self, my_node_num: _Optional[int] = ..., reboot_count: _Optional[int] = ..., min_app_version: _Optional[int] = ..., device_id: _Optional[bytes] = ..., pio_env: _Optional[str] = ..., firmware_edition: _Optional[_Union[FirmwareEdition, str]] = ..., nodedb_count: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class Neighbor(_message.Message):
|
||||
__slots__ = ["last_rx_time", "node_broadcast_interval_secs", "node_id", "snr"]
|
||||
LAST_RX_TIME_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_BROADCAST_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
SNR_FIELD_NUMBER: _ClassVar[int]
|
||||
last_rx_time: int
|
||||
node_broadcast_interval_secs: int
|
||||
node_id: int
|
||||
snr: float
|
||||
def __init__(self, node_id: _Optional[int] = ..., snr: _Optional[float] = ..., last_rx_time: _Optional[int] = ..., node_broadcast_interval_secs: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class NeighborInfo(_message.Message):
|
||||
__slots__ = ["last_sent_by_id", "neighbors", "node_broadcast_interval_secs", "node_id"]
|
||||
LAST_SENT_BY_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
NEIGHBORS_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_BROADCAST_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
NODE_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
last_sent_by_id: int
|
||||
neighbors: _containers.RepeatedCompositeFieldContainer[Neighbor]
|
||||
node_broadcast_interval_secs: int
|
||||
node_id: int
|
||||
def __init__(self, node_id: _Optional[int] = ..., last_sent_by_id: _Optional[int] = ..., node_broadcast_interval_secs: _Optional[int] = ..., neighbors: _Optional[_Iterable[_Union[Neighbor, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class NodeInfo(_message.Message):
|
||||
__slots__ = ["channel", "device_metrics", "has_xeddsa_signed", "heard_on_current_lora", "hops_away", "is_favorite", "is_ignored", "is_key_manually_verified", "is_muted", "last_heard", "num", "position", "snr", "user", "via_mqtt"]
|
||||
CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_METRICS_FIELD_NUMBER: _ClassVar[int]
|
||||
HAS_XEDDSA_SIGNED_FIELD_NUMBER: _ClassVar[int]
|
||||
HEARD_ON_CURRENT_LORA_FIELD_NUMBER: _ClassVar[int]
|
||||
HOPS_AWAY_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_FAVORITE_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_IGNORED_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_KEY_MANUALLY_VERIFIED_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_MUTED_FIELD_NUMBER: _ClassVar[int]
|
||||
LAST_HEARD_FIELD_NUMBER: _ClassVar[int]
|
||||
NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_FIELD_NUMBER: _ClassVar[int]
|
||||
SNR_FIELD_NUMBER: _ClassVar[int]
|
||||
USER_FIELD_NUMBER: _ClassVar[int]
|
||||
VIA_MQTT_FIELD_NUMBER: _ClassVar[int]
|
||||
channel: int
|
||||
device_metrics: _telemetry_pb2.DeviceMetrics
|
||||
has_xeddsa_signed: bool
|
||||
heard_on_current_lora: bool
|
||||
hops_away: int
|
||||
is_favorite: bool
|
||||
is_ignored: bool
|
||||
is_key_manually_verified: bool
|
||||
is_muted: bool
|
||||
last_heard: int
|
||||
num: int
|
||||
position: Position
|
||||
snr: float
|
||||
user: User
|
||||
via_mqtt: bool
|
||||
def __init__(self, num: _Optional[int] = ..., user: _Optional[_Union[User, _Mapping]] = ..., position: _Optional[_Union[Position, _Mapping]] = ..., snr: _Optional[float] = ..., last_heard: _Optional[int] = ..., device_metrics: _Optional[_Union[_telemetry_pb2.DeviceMetrics, _Mapping]] = ..., channel: _Optional[int] = ..., via_mqtt: bool = ..., hops_away: _Optional[int] = ..., is_favorite: bool = ..., is_ignored: bool = ..., is_key_manually_verified: bool = ..., is_muted: bool = ..., has_xeddsa_signed: bool = ..., heard_on_current_lora: bool = ...) -> None: ...
|
||||
|
||||
class NodeRemoteHardwarePin(_message.Message):
|
||||
__slots__ = ["node_num", "pin"]
|
||||
NODE_NUM_FIELD_NUMBER: _ClassVar[int]
|
||||
PIN_FIELD_NUMBER: _ClassVar[int]
|
||||
node_num: int
|
||||
pin: _module_config_pb2.RemoteHardwarePin
|
||||
def __init__(self, node_num: _Optional[int] = ..., pin: _Optional[_Union[_module_config_pb2.RemoteHardwarePin, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class Position(_message.Message):
|
||||
__slots__ = ["HDOP", "PDOP", "VDOP", "altitude", "altitude_geoidal_separation", "altitude_hae", "altitude_source", "fix_quality", "fix_type", "gps_accuracy", "ground_speed", "ground_track", "latitude_i", "location_source", "longitude_i", "next_update", "precision_bits", "sats_in_view", "sensor_id", "seq_number", "time", "timestamp", "timestamp_millis_adjust"]
|
||||
class AltSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class LocSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ALTITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
ALTITUDE_GEOIDAL_SEPARATION_FIELD_NUMBER: _ClassVar[int]
|
||||
ALTITUDE_HAE_FIELD_NUMBER: _ClassVar[int]
|
||||
ALTITUDE_SOURCE_FIELD_NUMBER: _ClassVar[int]
|
||||
ALT_BAROMETRIC: Position.AltSource
|
||||
ALT_EXTERNAL: Position.AltSource
|
||||
ALT_INTERNAL: Position.AltSource
|
||||
ALT_MANUAL: Position.AltSource
|
||||
ALT_UNSET: Position.AltSource
|
||||
FIX_QUALITY_FIELD_NUMBER: _ClassVar[int]
|
||||
FIX_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
GPS_ACCURACY_FIELD_NUMBER: _ClassVar[int]
|
||||
GROUND_SPEED_FIELD_NUMBER: _ClassVar[int]
|
||||
GROUND_TRACK_FIELD_NUMBER: _ClassVar[int]
|
||||
HDOP: int
|
||||
HDOP_FIELD_NUMBER: _ClassVar[int]
|
||||
LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LOCATION_SOURCE_FIELD_NUMBER: _ClassVar[int]
|
||||
LOC_EXTERNAL: Position.LocSource
|
||||
LOC_INTERNAL: Position.LocSource
|
||||
LOC_MANUAL: Position.LocSource
|
||||
LOC_UNSET: Position.LocSource
|
||||
LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
NEXT_UPDATE_FIELD_NUMBER: _ClassVar[int]
|
||||
PDOP: int
|
||||
PDOP_FIELD_NUMBER: _ClassVar[int]
|
||||
PRECISION_BITS_FIELD_NUMBER: _ClassVar[int]
|
||||
SATS_IN_VIEW_FIELD_NUMBER: _ClassVar[int]
|
||||
SENSOR_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
SEQ_NUMBER_FIELD_NUMBER: _ClassVar[int]
|
||||
TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
|
||||
TIMESTAMP_MILLIS_ADJUST_FIELD_NUMBER: _ClassVar[int]
|
||||
TIME_FIELD_NUMBER: _ClassVar[int]
|
||||
VDOP: int
|
||||
VDOP_FIELD_NUMBER: _ClassVar[int]
|
||||
altitude: int
|
||||
altitude_geoidal_separation: int
|
||||
altitude_hae: int
|
||||
altitude_source: Position.AltSource
|
||||
fix_quality: int
|
||||
fix_type: int
|
||||
gps_accuracy: int
|
||||
ground_speed: int
|
||||
ground_track: int
|
||||
latitude_i: int
|
||||
location_source: Position.LocSource
|
||||
longitude_i: int
|
||||
next_update: int
|
||||
precision_bits: int
|
||||
sats_in_view: int
|
||||
sensor_id: int
|
||||
seq_number: int
|
||||
time: int
|
||||
timestamp: int
|
||||
timestamp_millis_adjust: int
|
||||
def __init__(self, latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., time: _Optional[int] = ..., location_source: _Optional[_Union[Position.LocSource, str]] = ..., altitude_source: _Optional[_Union[Position.AltSource, str]] = ..., timestamp: _Optional[int] = ..., timestamp_millis_adjust: _Optional[int] = ..., altitude_hae: _Optional[int] = ..., altitude_geoidal_separation: _Optional[int] = ..., PDOP: _Optional[int] = ..., HDOP: _Optional[int] = ..., VDOP: _Optional[int] = ..., gps_accuracy: _Optional[int] = ..., ground_speed: _Optional[int] = ..., ground_track: _Optional[int] = ..., fix_quality: _Optional[int] = ..., fix_type: _Optional[int] = ..., sats_in_view: _Optional[int] = ..., sensor_id: _Optional[int] = ..., next_update: _Optional[int] = ..., seq_number: _Optional[int] = ..., precision_bits: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class QueueStatus(_message.Message):
|
||||
__slots__ = ["free", "maxlen", "mesh_packet_id", "res"]
|
||||
FREE_FIELD_NUMBER: _ClassVar[int]
|
||||
MAXLEN_FIELD_NUMBER: _ClassVar[int]
|
||||
MESH_PACKET_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
RES_FIELD_NUMBER: _ClassVar[int]
|
||||
free: int
|
||||
maxlen: int
|
||||
mesh_packet_id: int
|
||||
res: int
|
||||
def __init__(self, res: _Optional[int] = ..., free: _Optional[int] = ..., maxlen: _Optional[int] = ..., mesh_packet_id: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class RemoteShell(_message.Message):
|
||||
__slots__ = ["ack_seq", "cols", "flags", "last_rx_seq", "last_tx_seq", "op", "payload", "rows", "seq", "session_id"]
|
||||
class OpCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ACK: RemoteShell.OpCode
|
||||
ACK_SEQ_FIELD_NUMBER: _ClassVar[int]
|
||||
CLOSE: RemoteShell.OpCode
|
||||
CLOSED: RemoteShell.OpCode
|
||||
COLS_FIELD_NUMBER: _ClassVar[int]
|
||||
ERROR: RemoteShell.OpCode
|
||||
FLAGS_FIELD_NUMBER: _ClassVar[int]
|
||||
INPUT: RemoteShell.OpCode
|
||||
LAST_RX_SEQ_FIELD_NUMBER: _ClassVar[int]
|
||||
LAST_TX_SEQ_FIELD_NUMBER: _ClassVar[int]
|
||||
OPEN: RemoteShell.OpCode
|
||||
OPEN_OK: RemoteShell.OpCode
|
||||
OP_FIELD_NUMBER: _ClassVar[int]
|
||||
OP_UNSET: RemoteShell.OpCode
|
||||
OUTPUT: RemoteShell.OpCode
|
||||
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
|
||||
PING: RemoteShell.OpCode
|
||||
PONG: RemoteShell.OpCode
|
||||
RESIZE: RemoteShell.OpCode
|
||||
ROWS_FIELD_NUMBER: _ClassVar[int]
|
||||
SEQ_FIELD_NUMBER: _ClassVar[int]
|
||||
SESSION_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
ack_seq: int
|
||||
cols: int
|
||||
flags: int
|
||||
last_rx_seq: int
|
||||
last_tx_seq: int
|
||||
op: RemoteShell.OpCode
|
||||
payload: bytes
|
||||
rows: int
|
||||
seq: int
|
||||
session_id: int
|
||||
def __init__(self, op: _Optional[_Union[RemoteShell.OpCode, str]] = ..., session_id: _Optional[int] = ..., seq: _Optional[int] = ..., ack_seq: _Optional[int] = ..., payload: _Optional[bytes] = ..., cols: _Optional[int] = ..., rows: _Optional[int] = ..., flags: _Optional[int] = ..., last_tx_seq: _Optional[int] = ..., last_rx_seq: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class RouteDiscovery(_message.Message):
|
||||
__slots__ = ["route", "route_back", "snr_back", "snr_towards"]
|
||||
ROUTE_BACK_FIELD_NUMBER: _ClassVar[int]
|
||||
ROUTE_FIELD_NUMBER: _ClassVar[int]
|
||||
SNR_BACK_FIELD_NUMBER: _ClassVar[int]
|
||||
SNR_TOWARDS_FIELD_NUMBER: _ClassVar[int]
|
||||
route: _containers.RepeatedScalarFieldContainer[int]
|
||||
route_back: _containers.RepeatedScalarFieldContainer[int]
|
||||
snr_back: _containers.RepeatedScalarFieldContainer[int]
|
||||
snr_towards: _containers.RepeatedScalarFieldContainer[int]
|
||||
def __init__(self, route: _Optional[_Iterable[int]] = ..., snr_towards: _Optional[_Iterable[int]] = ..., route_back: _Optional[_Iterable[int]] = ..., snr_back: _Optional[_Iterable[int]] = ...) -> None: ...
|
||||
|
||||
class Routing(_message.Message):
|
||||
__slots__ = ["ack_proof", "error_reason", "route_reply", "route_request"]
|
||||
class Error(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ACK_PROOF_FIELD_NUMBER: _ClassVar[int]
|
||||
ADMIN_BAD_SESSION_KEY: Routing.Error
|
||||
ADMIN_PUBLIC_KEY_UNAUTHORIZED: Routing.Error
|
||||
BAD_REQUEST: Routing.Error
|
||||
DUTY_CYCLE_LIMIT: Routing.Error
|
||||
ERROR_REASON_FIELD_NUMBER: _ClassVar[int]
|
||||
GOT_NAK: Routing.Error
|
||||
MAX_RETRANSMIT: Routing.Error
|
||||
NONE: Routing.Error
|
||||
NOT_AUTHORIZED: Routing.Error
|
||||
NO_CHANNEL: Routing.Error
|
||||
NO_INTERFACE: Routing.Error
|
||||
NO_RESPONSE: Routing.Error
|
||||
NO_ROUTE: Routing.Error
|
||||
PKI_FAILED: Routing.Error
|
||||
PKI_SEND_FAIL_PUBLIC_KEY: Routing.Error
|
||||
PKI_UNKNOWN_PUBKEY: Routing.Error
|
||||
RATE_LIMIT_EXCEEDED: Routing.Error
|
||||
ROUTE_REPLY_FIELD_NUMBER: _ClassVar[int]
|
||||
ROUTE_REQUEST_FIELD_NUMBER: _ClassVar[int]
|
||||
TIMEOUT: Routing.Error
|
||||
TOO_LARGE: Routing.Error
|
||||
ack_proof: bytes
|
||||
error_reason: Routing.Error
|
||||
route_reply: RouteDiscovery
|
||||
route_request: RouteDiscovery
|
||||
def __init__(self, route_request: _Optional[_Union[RouteDiscovery, _Mapping]] = ..., route_reply: _Optional[_Union[RouteDiscovery, _Mapping]] = ..., error_reason: _Optional[_Union[Routing.Error, str]] = ..., ack_proof: _Optional[bytes] = ...) -> None: ...
|
||||
|
||||
class StatusMessage(_message.Message):
|
||||
__slots__ = ["status"]
|
||||
STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
status: str
|
||||
def __init__(self, status: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class StoreForwardPlusPlus(_message.Message):
|
||||
__slots__ = ["chain_count", "commit_hash", "encapsulated_from", "encapsulated_id", "encapsulated_rxtime", "encapsulated_to", "message", "message_hash", "root_hash", "sfpp_message_type"]
|
||||
class SFPP_message_type(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
CANON_ANNOUNCE: StoreForwardPlusPlus.SFPP_message_type
|
||||
CHAIN_COUNT_FIELD_NUMBER: _ClassVar[int]
|
||||
CHAIN_QUERY: StoreForwardPlusPlus.SFPP_message_type
|
||||
COMMIT_HASH_FIELD_NUMBER: _ClassVar[int]
|
||||
ENCAPSULATED_FROM_FIELD_NUMBER: _ClassVar[int]
|
||||
ENCAPSULATED_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
ENCAPSULATED_RXTIME_FIELD_NUMBER: _ClassVar[int]
|
||||
ENCAPSULATED_TO_FIELD_NUMBER: _ClassVar[int]
|
||||
LINK_PROVIDE: StoreForwardPlusPlus.SFPP_message_type
|
||||
LINK_PROVIDE_FIRSTHALF: StoreForwardPlusPlus.SFPP_message_type
|
||||
LINK_PROVIDE_SECONDHALF: StoreForwardPlusPlus.SFPP_message_type
|
||||
LINK_REQUEST: StoreForwardPlusPlus.SFPP_message_type
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
MESSAGE_HASH_FIELD_NUMBER: _ClassVar[int]
|
||||
ROOT_HASH_FIELD_NUMBER: _ClassVar[int]
|
||||
SFPP_MESSAGE_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
chain_count: int
|
||||
commit_hash: bytes
|
||||
encapsulated_from: int
|
||||
encapsulated_id: int
|
||||
encapsulated_rxtime: int
|
||||
encapsulated_to: int
|
||||
message: bytes
|
||||
message_hash: bytes
|
||||
root_hash: bytes
|
||||
sfpp_message_type: StoreForwardPlusPlus.SFPP_message_type
|
||||
def __init__(self, sfpp_message_type: _Optional[_Union[StoreForwardPlusPlus.SFPP_message_type, str]] = ..., message_hash: _Optional[bytes] = ..., commit_hash: _Optional[bytes] = ..., root_hash: _Optional[bytes] = ..., message: _Optional[bytes] = ..., encapsulated_id: _Optional[int] = ..., encapsulated_to: _Optional[int] = ..., encapsulated_from: _Optional[int] = ..., encapsulated_rxtime: _Optional[int] = ..., chain_count: _Optional[int] = ...) -> None: ...
|
||||
|
||||
class ToRadio(_message.Message):
|
||||
__slots__ = ["disconnect", "heartbeat", "mqttClientProxyMessage", "packet", "want_config_id", "xmodemPacket"]
|
||||
DISCONNECT_FIELD_NUMBER: _ClassVar[int]
|
||||
HEARTBEAT_FIELD_NUMBER: _ClassVar[int]
|
||||
MQTTCLIENTPROXYMESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
PACKET_FIELD_NUMBER: _ClassVar[int]
|
||||
WANT_CONFIG_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
XMODEMPACKET_FIELD_NUMBER: _ClassVar[int]
|
||||
disconnect: bool
|
||||
heartbeat: Heartbeat
|
||||
mqttClientProxyMessage: MqttClientProxyMessage
|
||||
packet: MeshPacket
|
||||
want_config_id: int
|
||||
xmodemPacket: _xmodem_pb2.XModem
|
||||
def __init__(self, packet: _Optional[_Union[MeshPacket, _Mapping]] = ..., want_config_id: _Optional[int] = ..., disconnect: bool = ..., xmodemPacket: _Optional[_Union[_xmodem_pb2.XModem, _Mapping]] = ..., mqttClientProxyMessage: _Optional[_Union[MqttClientProxyMessage, _Mapping]] = ..., heartbeat: _Optional[_Union[Heartbeat, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class User(_message.Message):
|
||||
__slots__ = ["hw_model", "id", "is_licensed", "is_unmessagable", "long_name", "macaddr", "public_key", "role", "short_name"]
|
||||
HW_MODEL_FIELD_NUMBER: _ClassVar[int]
|
||||
ID_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_LICENSED_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_UNMESSAGABLE_FIELD_NUMBER: _ClassVar[int]
|
||||
LONG_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
MACADDR_FIELD_NUMBER: _ClassVar[int]
|
||||
PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
hw_model: HardwareModel
|
||||
id: str
|
||||
is_licensed: bool
|
||||
is_unmessagable: bool
|
||||
long_name: str
|
||||
macaddr: bytes
|
||||
public_key: bytes
|
||||
role: _config_pb2.Config.DeviceConfig.Role
|
||||
short_name: str
|
||||
def __init__(self, id: _Optional[str] = ..., long_name: _Optional[str] = ..., short_name: _Optional[str] = ..., macaddr: _Optional[bytes] = ..., hw_model: _Optional[_Union[HardwareModel, str]] = ..., is_licensed: bool = ..., role: _Optional[_Union[_config_pb2.Config.DeviceConfig.Role, str]] = ..., public_key: _Optional[bytes] = ..., is_unmessagable: bool = ...) -> None: ...
|
||||
|
||||
class Waypoint(_message.Message):
|
||||
__slots__ = ["bounding_box", "description", "expire", "geofence_radius", "icon", "id", "latitude_i", "locked_to", "longitude_i", "name", "notify_favorites_only", "notify_on_enter", "notify_on_exit"]
|
||||
BOUNDING_BOX_FIELD_NUMBER: _ClassVar[int]
|
||||
DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
|
||||
EXPIRE_FIELD_NUMBER: _ClassVar[int]
|
||||
GEOFENCE_RADIUS_FIELD_NUMBER: _ClassVar[int]
|
||||
ICON_FIELD_NUMBER: _ClassVar[int]
|
||||
ID_FIELD_NUMBER: _ClassVar[int]
|
||||
LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LOCKED_TO_FIELD_NUMBER: _ClassVar[int]
|
||||
LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
NOTIFY_FAVORITES_ONLY_FIELD_NUMBER: _ClassVar[int]
|
||||
NOTIFY_ON_ENTER_FIELD_NUMBER: _ClassVar[int]
|
||||
NOTIFY_ON_EXIT_FIELD_NUMBER: _ClassVar[int]
|
||||
bounding_box: BoundingBox
|
||||
description: str
|
||||
expire: int
|
||||
geofence_radius: int
|
||||
icon: int
|
||||
id: int
|
||||
latitude_i: int
|
||||
locked_to: int
|
||||
longitude_i: int
|
||||
name: str
|
||||
notify_favorites_only: bool
|
||||
notify_on_enter: bool
|
||||
notify_on_exit: bool
|
||||
def __init__(self, id: _Optional[int] = ..., latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., expire: _Optional[int] = ..., locked_to: _Optional[int] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., icon: _Optional[int] = ..., geofence_radius: _Optional[int] = ..., bounding_box: _Optional[_Union[BoundingBox, _Mapping]] = ..., notify_on_enter: bool = ..., notify_on_exit: bool = ..., notify_favorites_only: bool = ...) -> None: ...
|
||||
|
||||
class resend_chunks(_message.Message):
|
||||
__slots__ = ["chunks"]
|
||||
CHUNKS_FIELD_NUMBER: _ClassVar[int]
|
||||
chunks: _containers.RepeatedScalarFieldContainer[int]
|
||||
def __init__(self, chunks: _Optional[_Iterable[int]] = ...) -> None: ...
|
||||
|
||||
class HardwareModel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class Constants(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class CriticalErrorCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class FirmwareEdition(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class ExcludedModules(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
@@ -1,392 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/module_config.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import atak_pb2 as meshtastic_dot_protobuf_dot_atak__pb2
|
||||
from meshtastic.protobuf import channel_pb2 as meshtastic_dot_protobuf_dot_channel__pb2
|
||||
from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config__pb2
|
||||
from meshtastic.protobuf import field_metadata_pb2 as meshtastic_dot_protobuf_dot_field__metadata__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'meshtastic/protobuf/module_config.proto\x12\x13meshtastic.protobuf\x1a\x1emeshtastic/protobuf/atak.proto\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\x1a(meshtastic/protobuf/field_metadata.proto\"\xfd~\n\x0cModuleConfig\x12<\n\x04mqtt\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.ModuleConfig.MQTTConfigH\x00\x12@\n\x06serial\x18\x02 \x01(\x0b\x32..meshtastic.protobuf.ModuleConfig.SerialConfigH\x00\x12]\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32<.meshtastic.protobuf.ModuleConfig.ExternalNotificationConfigH\x00\x12M\n\rstore_forward\x18\x04 \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.StoreForwardConfigH\x00\x12G\n\nrange_test\x18\x05 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.RangeTestConfigH\x00\x12\x46\n\ttelemetry\x18\x06 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.TelemetryConfigH\x00\x12O\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.CannedMessageConfigH\x00\x12>\n\x05\x61udio\x18\x08 \x01(\x0b\x32-.meshtastic.protobuf.ModuleConfig.AudioConfigH\x00\x12Q\n\x0fremote_hardware\x18\t \x01(\x0b\x32\x36.meshtastic.protobuf.ModuleConfig.RemoteHardwareConfigH\x00\x12M\n\rneighbor_info\x18\n \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.NeighborInfoConfigH\x00\x12S\n\x10\x61mbient_lighting\x18\x0b \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.AmbientLightingConfigH\x00\x12S\n\x10\x64\x65tection_sensor\x18\x0c \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.DetectionSensorConfigH\x00\x12H\n\npaxcounter\x18\r \x01(\x0b\x32\x32.meshtastic.protobuf.ModuleConfig.PaxcounterConfigH\x00\x12\\\n\rstatusmessage\x18\x0e \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.StatusMessageConfigB\x0c\xca\xf3\x18\x08R\x06\x32.7.20H\x00\x12\x64\n\x12traffic_management\x18\x0f \x01(\x0b\x32\x39.meshtastic.protobuf.ModuleConfig.TrafficManagementConfigB\x0b\xca\xf3\x18\x07R\x05\x32.8.0H\x00\x12G\n\x03tak\x18\x10 \x01(\x0b\x32+.meshtastic.protobuf.ModuleConfig.TAKConfigB\x0b\xca\xf3\x18\x07R\x05\x32.8.0H\x00\x12V\n\x0bmesh_beacon\x18\x11 \x01(\x0b\x32\x32.meshtastic.protobuf.ModuleConfig.MeshBeaconConfigB\x0b\xca\xf3\x18\x07R\x05\x32.8.0H\x00\x1a\xd9\x07\n\nMQTTConfig\x12\x38\n\x07\x65nabled\x18\x01 \x01(\x08\x42\'\xca\xf3\x18#:\x0cMQTT EnabledB\x13\x45nable MQTT gateway\x12\x33\n\x07\x61\x64\x64ress\x18\x02 \x01(\tB\"\xca\xf3\x18\x1e:\x07\x41\x64\x64ressB\x13MQTT server address\x12/\n\x08username\x18\x03 \x01(\tB\x1d\xca\xf3\x18\x19:\x08UsernameB\rMQTT username\x12/\n\x08password\x18\x04 \x01(\tB\x1d\xca\xf3\x18\x19:\x08PasswordB\rMQTT password\x12T\n\x12\x65ncryption_enabled\x18\x05 \x01(\x08\x42\x38\xca\xf3\x18\x34:\x12\x45ncryption EnabledB\x1eSend encrypted packets to MQTT\x12#\n\x0cjson_enabled\x18\x06 \x01(\x08\x42\r\x18\x01\xca\xf3\x18\x07Z\x05\x32.8.0\x12L\n\x0btls_enabled\x18\x07 \x01(\x08\x42\x37\xca\xf3\x18\x33:\x0bTLS EnabledB$Connect to the MQTT server over TLS.\x12/\n\x04root\x18\x08 \x01(\tB!\xca\xf3\x18\x1d:\nRoot TopicB\x0fMQTT root topic\x12{\n\x17proxy_to_client_enabled\x18\t \x01(\x08\x42Z\xca\xf3\x18V:\x11MQTT Client ProxyBAUtilizes the network connection on your phone to connect to MQTT.\x12\xb0\x02\n\x15map_reporting_enabled\x18\n \x01(\x08\x42\x90\x02\xca\xf3\x18\x8b\x02:\rMap ReportingB\xf9\x01Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name.\x12P\n\x13map_report_settings\x18\x0b \x01(\x0b\x32\x33.meshtastic.protobuf.ModuleConfig.MapReportSettings\x1a\xea\x02\n\x11MapReportSettings\x12{\n\x15publish_interval_secs\x18\x01 \x01(\rB\\\xca\xf3\x18X\x19\x00\x00\x00\x00\x00 \xac@*\x01s:\x14Map Publish IntervalB4How often a map report is published. Minimum 1 hour.\x12\x1a\n\x12position_precision\x18\x02 \x01(\r\x12\xbb\x01\n\x16should_report_location\x18\x03 \x01(\x08\x42\x9a\x01\xca\xf3\x18\x95\x01:\x0cShare on MapB~Consent to publish this node\'s details and approximate location unencrypted to the MQTT map. No map report is sent without it.R\x05\x32.6.8\x1a\x8b\x01\n\x14RemoteHardwareConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\"\n\x1a\x61llow_undefined_pin_access\x18\x02 \x01(\x08\x12>\n\x0e\x61vailable_pins\x18\x03 \x03(\x0b\x32&.meshtastic.protobuf.RemoteHardwarePin\x1a\x84\x04\n\x12NeighborInfoConfig\x12\xb2\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xa0\x01\xca\xf3\x18\x9b\x01:\x15Neighbor Info EnabledB\x81\x01\x45nable neighbor info broadcasting. Periodically sends information about directly-heard neighbors to help visualize mesh topology.\x12r\n\x0fupdate_interval\x18\x02 \x01(\rBY\xca\xf3\x18U\x19\x00\x00\x00\x00\x00 \xcc@*\x01s:\x0fUpdate IntervalB6How often to broadcast neighbor info. Minimum 4 hours.\x12\xc4\x01\n\x12transmit_over_lora\x18\x03 \x01(\x08\x42\xa7\x01\xca\xf3\x18\xa2\x01:\x12Transmit over LoRaB\x8b\x01Whether to traLine truncated
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.module_config_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\022ModuleConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['enabled']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['enabled']._serialized_options = b'\312\363\030#:\014MQTT EnabledB\023Enable MQTT gateway'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['address']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['address']._serialized_options = b'\312\363\030\036:\007AddressB\023MQTT server address'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['username']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['username']._serialized_options = b'\312\363\030\031:\010UsernameB\rMQTT username'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['password']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['password']._serialized_options = b'\312\363\030\031:\010PasswordB\rMQTT password'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['encryption_enabled']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['encryption_enabled']._serialized_options = b'\312\363\0304:\022Encryption EnabledB\036Send encrypted packets to MQTT'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['json_enabled']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['json_enabled']._serialized_options = b'\030\001\312\363\030\007Z\0052.8.0'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['tls_enabled']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['tls_enabled']._serialized_options = b'\312\363\0303:\013TLS EnabledB$Connect to the MQTT server over TLS.'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['root']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['root']._serialized_options = b'\312\363\030\035:\nRoot TopicB\017MQTT root topic'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['proxy_to_client_enabled']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['proxy_to_client_enabled']._serialized_options = b'\312\363\030V:\021MQTT Client ProxyBAUtilizes the network connection on your phone to connect to MQTT.'
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['map_reporting_enabled']._options = None
|
||||
_MODULECONFIG_MQTTCONFIG.fields_by_name['map_reporting_enabled']._serialized_options = b'\312\363\030\213\002:\rMap ReportingB\371\001Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name.'
|
||||
_MODULECONFIG_MAPREPORTSETTINGS.fields_by_name['publish_interval_secs']._options = None
|
||||
_MODULECONFIG_MAPREPORTSETTINGS.fields_by_name['publish_interval_secs']._serialized_options = b'\312\363\030X\031\000\000\000\000\000 \254@*\001s:\024Map Publish IntervalB4How often a map report is published. Minimum 1 hour.'
|
||||
_MODULECONFIG_MAPREPORTSETTINGS.fields_by_name['should_report_location']._options = None
|
||||
_MODULECONFIG_MAPREPORTSETTINGS.fields_by_name['should_report_location']._serialized_options = b'\312\363\030\225\001:\014Share on MapB~Consent to publish this node\'s details and approximate location unencrypted to the MQTT map. No map report is sent without it.R\0052.6.8'
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG.fields_by_name['enabled']._options = None
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG.fields_by_name['enabled']._serialized_options = b'\312\363\030\233\001:\025Neighbor Info EnabledB\201\001Enable neighbor info broadcasting. Periodically sends information about directly-heard neighbors to help visualize mesh topology.'
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG.fields_by_name['update_interval']._options = None
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG.fields_by_name['update_interval']._serialized_options = b'\312\363\030U\031\000\000\000\000\000 \314@*\001s:\017Update IntervalB6How often to broadcast neighbor info. Minimum 4 hours.'
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG.fields_by_name['transmit_over_lora']._options = None
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG.fields_by_name['transmit_over_lora']._serialized_options = b'\312\363\030\242\001:\022Transmit over LoRaB\213\001Whether to transmit neighbor info over LoRa in addition to MQTT and the connected app. Not available on channels with default key and name.'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["LOGIC_LOW"]._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["LOGIC_LOW"]._serialized_options = b'\312\363\030\005:\003Low'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["LOGIC_HIGH"]._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["LOGIC_HIGH"]._serialized_options = b'\312\363\030\006:\004High'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["FALLING_EDGE"]._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["FALLING_EDGE"]._serialized_options = b'\312\363\030\016:\014Falling Edge'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["RISING_EDGE"]._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["RISING_EDGE"]._serialized_options = b'\312\363\030\r:\013Rising Edge'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["EITHER_EDGE_ACTIVE_LOW"]._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["EITHER_EDGE_ACTIVE_LOW"]._serialized_options = b'\312\363\030\021:\017Either Edge Low'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["EITHER_EDGE_ACTIVE_HIGH"]._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE.values_by_name["EITHER_EDGE_ACTIVE_HIGH"]._serialized_options = b'\312\363\030\022:\020Either Edge High'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['enabled']._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['enabled']._serialized_options = b'\312\363\030\354\001:\030Detection Sensor EnabledB\317\001Enables the detection sensor module, it needs to be enabled on both the node with the sensor, and any nodes that you want to receive detection sensor text messages or view the detection sensor log and chart.'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['minimum_broadcast_secs']._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['minimum_broadcast_secs']._serialized_options = b'\312\363\030Z*\001s:)Minimum time between detection broadcastsB*Minimum time between detection broadcasts.'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['state_broadcast_secs']._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['state_broadcast_secs']._serialized_options = b'\312\363\030\231\001*\001s:\030State Broadcast IntervalBzHow often to send the detection sensor state to the mesh, whether or not anything was detected. 0 sends only on detection.'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['send_bell']._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['send_bell']._serialized_options = b'\312\363\030e:\tSend BellBXSend ASCII bell with alert message. Useful for triggering external notification on bell.'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['name']._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['name']._serialized_options = b'\312\363\030%:\004NameB\035Sensor name for mesh messages'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['monitor_pin']._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['monitor_pin']._serialized_options = b'\312\363\030Q:\023GPIO Pin to monitorB:GPIO pin watched for state changes. 0 disables the module.'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['detection_trigger_type']._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['detection_trigger_type']._serialized_options = b'\312\363\030%:\014Trigger TypeB\025Type of trigger event'
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['use_pullup']._options = None
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG.fields_by_name['use_pullup']._serialized_options = b'\312\363\030P:\024Use Internal Pull-upB8Enable the internal pull-up resistor on the monitor pin.'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_DEFAULT"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_DEFAULT"]._serialized_options = b'\312\363\030\t:\007Default'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_3200"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_3200"]._serialized_options = b'\312\363\030\n:\0103200 bps'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_2400"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_2400"]._serialized_options = b'\312\363\030\n:\0102400 bps'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_1600"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_1600"]._serialized_options = b'\312\363\030\n:\0101600 bps'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_1400"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_1400"]._serialized_options = b'\312\363\030\n:\0101400 bps'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_1300"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_1300"]._serialized_options = b'\312\363\030\n:\0101300 bps'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_1200"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_1200"]._serialized_options = b'\312\363\030\n:\0101200 bps'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_700"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_700"]._serialized_options = b'\010\001'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_700B"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_700B"]._serialized_options = b'\010\001'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_700C"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_700C"]._serialized_options = b'\312\363\030\020:\016700 bps (700C)'
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_450"]._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD.values_by_name["CODEC2_450"]._serialized_options = b'\312\363\030\t:\007450 bps'
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['codec2_enabled']._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['codec2_enabled']._serialized_options = b'\312\363\030^:\016Codec2 EnabledBLEnable Codec2 audio encoding/decoding for voice communication over the mesh.'
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['ptt_pin']._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['ptt_pin']._serialized_options = b'\312\363\0308:\007PTT PinB-Push-to-talk GPIO pin number. 0 uses GPIO 39.'
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['bitrate']._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['bitrate']._serialized_options = b'\312\363\030\202\001:\007BitrateBwThe Codec2 bitrate to use. The sample rate is always 8 kHz. Lower bitrates use less bandwidth but reduce audio quality.'
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['i2s_ws']._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['i2s_ws']._serialized_options = b'\312\363\030\025:\023I2S Word Select Pin'
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['i2s_sd']._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['i2s_sd']._serialized_options = b'\312\363\030\021:\017I2S Data In Pin'
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['i2s_din']._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['i2s_din']._serialized_options = b'\312\363\030\022:\020I2S Data Out Pin'
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['i2s_sck']._options = None
|
||||
_MODULECONFIG_AUDIOCONFIG.fields_by_name['i2s_sck']._serialized_options = b'\312\363\030\017:\rI2S Clock Pin'
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG.fields_by_name['enabled']._options = None
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG.fields_by_name['enabled']._serialized_options = b'\312\363\030\250\001:\023PAX Counter EnabledB\220\001When enabled, the PAX Counter module counts nearby WiFi and Bluetooth devices. Both WiFi and Bluetooth must be disabled for PAX counter to work.'
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG.fields_by_name['paxcounter_update_interval']._options = None
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG.fields_by_name['paxcounter_update_interval']._serialized_options = b'\312\363\030F*\001s:\017Update IntervalB0How often to send the device counts to the mesh.'
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG.fields_by_name['wifi_threshold']._options = None
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG.fields_by_name['wifi_threshold']._serialized_options = b'\312\363\030@*\003dBm:\016WiFi ThresholdB)RSSI threshold for counting WiFi devices.'
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG.fields_by_name['ble_threshold']._options = None
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG.fields_by_name['ble_threshold']._serialized_options = b'\312\363\030>*\003dBm:\rBLE ThresholdB(RSSI threshold for counting BLE devices.'
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['position_min_interval_secs']._options = None
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['position_min_interval_secs']._serialized_options = b'\312\363\030c*\001s:\031Minimum Position IntervalBCPositions from the same node arriving sooner than this are dropped.'
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['nodeinfo_direct_response_max_hops']._options = None
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['nodeinfo_direct_response_max_hops']._serialized_options = b'\312\363\030\261\001!\000\000\000\000\000\000\010@:\030Direct NodeInfo Max HopsB\213\001Answer NodeInfo requests from cache for requestors within this many hops. Capped at 3 on routers; other roles answer direct neighbors only.'
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['rate_limit_window_secs']._options = None
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['rate_limit_window_secs']._serialized_options = b'\312\363\030A*\001s:\021Rate Limit WindowB)The time window packets are counted over.'
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['rate_limit_max_packets']._options = None
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['rate_limit_max_packets']._serialized_options = b'\312\363\030Q!\000\000\000\000\000\000N@:\026Rate Limit Max PacketsB.The most packets one node may send per window.'
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['unknown_packet_threshold']._options = None
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG.fields_by_name['unknown_packet_threshold']._serialized_options = b'\312\363\030o!\000\000\000\000\000\000N@:\030Unknown Packet ThresholdBJUndecryptable packets one node may send in 5 minutes before it is dropped.'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_DEFAULT"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_DEFAULT"]._serialized_options = b'\312\363\030\t:\007Default'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_110"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_110"]._serialized_options = b'\312\363\030\n:\010110 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_300"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_300"]._serialized_options = b'\312\363\030\n:\010300 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_600"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_600"]._serialized_options = b'\312\363\030\n:\010600 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_1200"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_1200"]._serialized_options = b'\312\363\030\013:\t1200 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_2400"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_2400"]._serialized_options = b'\312\363\030\013:\t2400 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_4800"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_4800"]._serialized_options = b'\312\363\030\013:\t4800 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_9600"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_9600"]._serialized_options = b'\312\363\030\013:\t9600 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_19200"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_19200"]._serialized_options = b'\312\363\030\014:\n19200 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_38400"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_38400"]._serialized_options = b'\312\363\030\014:\n38400 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_57600"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_57600"]._serialized_options = b'\312\363\030\014:\n57600 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_115200"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_115200"]._serialized_options = b'\312\363\030\r:\013115200 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_230400"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_230400"]._serialized_options = b'\312\363\030\r:\013230400 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_460800"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_460800"]._serialized_options = b'\312\363\030\r:\013460800 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_576000"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_576000"]._serialized_options = b'\312\363\030\r:\013576000 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_921600"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD.values_by_name["BAUD_921600"]._serialized_options = b'\312\363\030\r:\013921600 Baud'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["DEFAULT"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["DEFAULT"]._serialized_options = b'\312\363\030\t:\007Default'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["SIMPLE"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["SIMPLE"]._serialized_options = b'\312\363\030\010:\006Simple'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["PROTO"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["PROTO"]._serialized_options = b'\312\363\030\013:\tProtobufs'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["TEXTMSG"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["TEXTMSG"]._serialized_options = b'\312\363\030\016:\014Text Message'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["NMEA"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["NMEA"]._serialized_options = b'\312\363\030\020:\016NMEA Positions'
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["CALTOPO"]._options = None
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE.values_by_name["CALTOPO"]._serialized_options = b'\312\363\030\t:\007CalTopo'
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['enabled']._options = None
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['enabled']._serialized_options = b'\312\363\030&:\016Serial EnabledB\024Enable serial module'
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['echo']._options = None
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['echo']._serialized_options = b'\312\363\030N:\004EchoBFIf set, any packets you send will be echoed back over the serial port.'
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['rxd']._options = None
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['rxd']._serialized_options = b'\312\363\030,:\033Receive data (rxd) GPIO pinB\rRX pin number'
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['txd']._options = None
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['txd']._serialized_options = b'\312\363\030-:\034Transmit data (txd) GPIO pinB\rTX pin number'
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['baud']._options = None
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['baud']._serialized_options = b'\312\363\030\030:\004BaudB\020Serial baud rate'
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['timeout']._options = None
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['timeout']._serialized_options = b'\312\363\030i*\002ms:\007TimeoutBZHow long to wait before treating received serial data as a complete packet. 0 uses 250 ms.'
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['mode']._options = None
|
||||
_MODULECONFIG_SERIALCONFIG.fields_by_name['mode']._serialized_options = b'\312\363\030$:\004ModeB\034Serial module operation mode'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['enabled']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['enabled']._serialized_options = b'\312\363\030>:\035External Notification EnabledB\035Enable external notifications'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['output_ms']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['output_ms']._serialized_options = b'\312\363\030I*\002ms:\024GPIO Output DurationB-In GPIO mode, how long to keep the output on.'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['output']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['output']._serialized_options = b'\312\363\030_:\017Output pin GPIOBLGPIO pin driven on notification. Defaults to the board\'s EXT_NOTIFY_OUT pin.'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['output_vibra']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['output_vibra']._serialized_options = b'\312\363\0303:\025Output pin vibra GPIOB\032Vibration motor output pin'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['output_buzzer']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['output_buzzer']._serialized_options = b'\312\363\030+:\026Output pin buzzer GPIOB\021Buzzer output pin'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['active']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['active']._serialized_options = b'\312\363\030]:\006ActiveBSIf enabled, the \'output\' Pin will be pulled active high, disabled means active low.'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_message']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_message']._serialized_options = b'\312\363\030;:\036Alert when receiving a messageB\031Alert on incoming message'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_message_vibra']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_message_vibra']._serialized_options = b'\312\363\030D:\021Vibra Motor AlertB/Alert GPIO vibra motor when receiving a message'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_message_buzzer']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_message_buzzer']._serialized_options = b'\312\363\030F:*Alert GPIO buzzer when receiving a messageB\030Buzz on incoming message'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_bell']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_bell']._serialized_options = b'\312\363\0306:\033Alert when receiving a bellB\027Alert on bell character'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_bell_vibra']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_bell_vibra']._serialized_options = b'\312\363\030I:,Alert GPIO vibra motor when receiving a bellB\031Vibrate on bell character'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_bell_buzzer']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['alert_bell_buzzer']._serialized_options = b'\312\363\030A:\'Alert GPIO buzzer when receiving a bellB\026Buzz on bell character'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['use_pwm']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['use_pwm']._serialized_options = b'\312\363\030\327\001:\016Use PWM BuzzerB\304\001Use a PWM output (like the RAK Buzzer) for tunes instead of an on/off output. This will ignore the output, output duration and active settings and use the device config buzzer GPIO option instead.'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['nag_timeout']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['nag_timeout']._serialized_options = b'\312\363\0302*\001s:\013Nag TimeoutB How long the notification lasts.'
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['use_i2s_as_buzzer']._options = None
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG.fields_by_name['use_i2s_as_buzzer']._serialized_options = b'\312\363\030\247\001:\021Use I2S As BuzzerB\221\001Enables devices with native I2S audio output to use the RTTTL over speaker like a buzzer. T-Watch S3 and T-Deck for example have this capability.'
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['enabled']._options = None
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['enabled']._serialized_options = b'\312\363\030B:\031Store and Forward EnabledB%Enables the store and forward module.'
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['heartbeat']._options = None
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['heartbeat']._serialized_options = b'\312\363\030F:\016Send HeartbeatB4Send a heartbeat to advertise the server\'s presence.'
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['records']._options = None
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['records']._serialized_options = b'\312\363\030^:\021Number of recordsBIMaximum number of messages to store. 0 uses three quarters of free PSRAM.'
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['history_return_max']._options = None
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['history_return_max']._serialized_options = b'\312\363\030X:\022History Return MaxBBMaximum number of stored messages returned per request. 0 uses 25.'
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['history_return_window']._options = None
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['history_return_window']._serialized_options = b'\312\363\030\\:\025History Return WindowBCHow far back, in minutes, stored messages are returned. 0 uses 240.'
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['is_server']._options = None
|
||||
_MODULECONFIG_STOREFORWARDCONFIG.fields_by_name['is_server']._serialized_options = b'\312\363\030`:\006ServerBVEnable this device as a Store and Forward server. Requires an ESP32 device with PSRAM.'
|
||||
_MODULECONFIG_RANGETESTCONFIG.fields_by_name['enabled']._options = None
|
||||
_MODULECONFIG_RANGETESTCONFIG.fields_by_name['enabled']._serialized_options = b'\312\363\030.:\022Range Test EnabledB\030Enable range test module'
|
||||
_MODULECONFIG_RANGETESTCONFIG.fields_by_name['sender']._options = None
|
||||
_MODULECONFIG_RANGETESTCONFIG.fields_by_name['sender']._serialized_options = b'\312\363\030q*\001s:\017Sender IntervalB[This device will send out range test messages on the selected interval. 0 disables sending.'
|
||||
_MODULECONFIG_RANGETESTCONFIG.fields_by_name['save']._options = None
|
||||
_MODULECONFIG_RANGETESTCONFIG.fields_by_name['save']._serialized_options = b'\312\363\030u:\004SaveBmSaves a CSV with the range test message details, currently only available on ESP32 devices with a web server.'
|
||||
_MODULECONFIG_RANGETESTCONFIG.fields_by_name['clear_on_reboot']._options = None
|
||||
_MODULECONFIG_RANGETESTCONFIG.fields_by_name['clear_on_reboot']._serialized_options = b'\312\363\030\010R\0062.7.11'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['device_update_interval']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['device_update_interval']._serialized_options = b'\312\363\030N*\001s:\027Device Metrics IntervalB0How often device metrics are sent over the mesh.'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['environment_update_interval']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['environment_update_interval']._serialized_options = b'\312\363\030X*\001s:\034Environment Metrics IntervalB5How often environment metrics are sent over the mesh.'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['environment_measurement_enabled']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['environment_measurement_enabled']._serialized_options = b'\312\363\030?:\033Environment Metrics EnabledB Collect environment measurements'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['environment_screen_enabled']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['environment_screen_enabled']._serialized_options = b'\312\363\030C:\025Show on device screenB*Display environment measurements on device'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['environment_display_fahrenheit']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['environment_display_fahrenheit']._serialized_options = b'\312\363\0307:\022Display FahrenheitB!Display environment in Fahrenheit'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['air_quality_enabled']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['air_quality_enabled']._serialized_options = b'\312\363\030::\033Air Quality Metrics EnabledB\033Collect air quality metrics'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['air_quality_interval']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['air_quality_interval']._serialized_options = b'\312\363\030X*\001s:\034Air Quality Metrics IntervalB5How often air quality metrics are sent over the mesh.'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['power_measurement_enabled']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['power_measurement_enabled']._serialized_options = b'\312\363\0302:\031Power Measurement EnabledB\025Collect power metrics'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['power_update_interval']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['power_update_interval']._serialized_options = b'\312\363\030L*\001s:\026Power Metrics IntervalB/How often power metrics are sent over the mesh.'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['power_screen_enabled']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['power_screen_enabled']._serialized_options = b'\312\363\030/:\014Power ScreenB\037Display power metrics on device'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['device_telemetry_enabled']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['device_telemetry_enabled']._serialized_options = b'\312\363\030\226\001:\030Broadcast Device MetricsBrEnable broadcasting device metrics to the mesh network. When disabled, metrics are only sent to connected clients.R\0062.7.13'
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['air_quality_screen_enabled']._options = None
|
||||
_MODULECONFIG_TELEMETRYCONFIG.fields_by_name['air_quality_screen_enabled']._serialized_options = b'\312\363\030\010R\0062.7.18'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["NONE"]._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["NONE"]._serialized_options = b'\312\363\030\006:\004None'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["UP"]._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["UP"]._serialized_options = b'\312\363\030\004:\002Up'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["DOWN"]._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["DOWN"]._serialized_options = b'\312\363\030\006:\004Down'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["LEFT"]._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["LEFT"]._serialized_options = b'\312\363\030\006:\004Left'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["RIGHT"]._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["RIGHT"]._serialized_options = b'\312\363\030\007:\005Right'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["SELECT"]._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["SELECT"]._serialized_options = b'\312\363\030\010:\006Select'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["BACK"]._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["BACK"]._serialized_options = b'\312\363\030\006:\004Back'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["CANCEL"]._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR.values_by_name["CANCEL"]._serialized_options = b'\312\363\030\010:\006Cancel'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['rotary1_enabled']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['rotary1_enabled']._serialized_options = b'\312\363\030\':\016Rotary EncoderB\025Enable rotary encoder'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_pin_a']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_pin_a']._serialized_options = b'\312\363\030,:\005Pin AB#GPIO pin for rotary encoder A port.'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_pin_b']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_pin_b']._serialized_options = b'\312\363\030,:\005Pin BB#GPIO pin for rotary encoder B port.'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_pin_press']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_pin_press']._serialized_options = b'\312\363\0303:\tPress PinB&GPIO pin for the encoder press button.'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_event_cw']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_event_cw']._serialized_options = b'\312\363\030<:\026Clockwise Rotary EventB\"Input event for clockwise rotation'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_event_ccw']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_event_ccw']._serialized_options = b'\312\363\030K:\035Counterclockwise Rotary EventB*Input event for counter-clockwise rotation'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_event_press']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['inputbroker_event_press']._serialized_options = b'\312\363\0304:\023Encoder Press EventB\035Input event for encoder press'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['updown1_enabled']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['updown1_enabled']._serialized_options = b'\312\363\0303:\024Up/Down/Select InputB\033Enable up/down/select input'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['enabled']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['enabled']._serialized_options = b'\030\001\312\363\030\007Z\0052.7.0'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['allow_input_source']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['allow_input_source']._serialized_options = b'\030\001\312\363\030\007Z\0052.7.0'
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['send_bell']._options = None
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['send_bell']._serialized_options = b'\312\363\030.:\tSend BellB!Send bell character with messages'
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['led_state']._options = None
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['led_state']._serialized_options = b'\312\363\030*:\tLED StateB\035The state of the LED (on/off)'
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['current']._options = None
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['current']._serialized_options = b'\312\363\030_\031\000\000\000\000\000\000\000\000!\000\000\000\000\000\000?@:\007CurrentB!Drive current for the LED output.J\037led|brightness|ambient|lighting'
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['red']._options = None
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['red']._serialized_options = b'\312\363\030j\031\000\000\000\000\000\000\000\000!\000\000\000\000\000\340o@:\003RedB*The red level of the ambient lighting LED.J%color|colour|rgb|led|ambient|lighting'
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['green']._options = None
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['green']._serialized_options = b'\312\363\030n\031\000\000\000\000\000\000\000\000!\000\000\000\000\000\340o@:\005GreenB,The green level of the ambient lighting LED.J%color|colour|rgb|led|ambient|lighting'
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['blue']._options = None
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG.fields_by_name['blue']._serialized_options = b'\312\363\030l\031\000\000\000\000\000\000\000\000!\000\000\000\000\000\340o@:\004BlueB+The blue level of the ambient lighting LED.J%color|colour|rgb|led|ambient|lighting'
|
||||
_MODULECONFIG_MESHBEACONCONFIG.fields_by_name['broadcast_message']._options = None
|
||||
_MODULECONFIG_MESHBEACONCONFIG.fields_by_name['broadcast_message']._serialized_options = b'\312\363\0309:\007MessageB.Message for beacon broadcasts, up to 60 bytes.'
|
||||
_MODULECONFIG_MESHBEACONCONFIG.fields_by_name['broadcast_interval_secs']._options = None
|
||||
_MODULECONFIG_MESHBEACONCONFIG.fields_by_name['broadcast_interval_secs']._serialized_options = b'\312\363\030H\031\000\000\000\000\000 \254@*\001s:\010IntervalB0How often a beacon is broadcast. Minimum 1 hour.'
|
||||
_MODULECONFIG_TAKCONFIG.fields_by_name['team']._options = None
|
||||
_MODULECONFIG_TAKCONFIG.fields_by_name['team']._serialized_options = b'\312\363\030\026:\004TeamB\016TAK team color'
|
||||
_MODULECONFIG_TAKCONFIG.fields_by_name['role']._options = None
|
||||
_MODULECONFIG_TAKCONFIG.fields_by_name['role']._serialized_options = b'\312\363\030\027:\004RoleB\017TAK member role'
|
||||
_MODULECONFIG.fields_by_name['statusmessage']._options = None
|
||||
_MODULECONFIG.fields_by_name['statusmessage']._serialized_options = b'\312\363\030\010R\0062.7.20'
|
||||
_MODULECONFIG.fields_by_name['traffic_management']._options = None
|
||||
_MODULECONFIG.fields_by_name['traffic_management']._serialized_options = b'\312\363\030\007R\0052.8.0'
|
||||
_MODULECONFIG.fields_by_name['tak']._options = None
|
||||
_MODULECONFIG.fields_by_name['tak']._serialized_options = b'\312\363\030\007R\0052.8.0'
|
||||
_MODULECONFIG.fields_by_name['mesh_beacon']._options = None
|
||||
_MODULECONFIG.fields_by_name['mesh_beacon']._serialized_options = b'\312\363\030\007R\0052.8.0'
|
||||
_REMOTEHARDWAREPINTYPE._serialized_start=16574
|
||||
_REMOTEHARDWAREPINTYPE._serialized_end=16647
|
||||
_MODULECONFIG._serialized_start=208
|
||||
_MODULECONFIG._serialized_end=16461
|
||||
_MODULECONFIG_MQTTCONFIG._serialized_start=1580
|
||||
_MODULECONFIG_MQTTCONFIG._serialized_end=2565
|
||||
_MODULECONFIG_MAPREPORTSETTINGS._serialized_start=2568
|
||||
_MODULECONFIG_MAPREPORTSETTINGS._serialized_end=2930
|
||||
_MODULECONFIG_REMOTEHARDWARECONFIG._serialized_start=2933
|
||||
_MODULECONFIG_REMOTEHARDWARECONFIG._serialized_end=3072
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG._serialized_start=3075
|
||||
_MODULECONFIG_NEIGHBORINFOCONFIG._serialized_end=3591
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG._serialized_start=3594
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG._serialized_end=4989
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE._serialized_start=4744
|
||||
_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE._serialized_end=4989
|
||||
_MODULECONFIG_AUDIOCONFIG._serialized_start=4992
|
||||
_MODULECONFIG_AUDIOCONFIG._serialized_end=5942
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD._serialized_start=5586
|
||||
_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD._serialized_end=5942
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG._serialized_start=5945
|
||||
_MODULECONFIG_PAXCOUNTERCONFIG._serialized_end=6454
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG._serialized_start=6457
|
||||
_MODULECONFIG_TRAFFICMANAGEMENTCONFIG._serialized_end=7474
|
||||
_MODULECONFIG_SERIALCONFIG._serialized_start=7477
|
||||
_MODULECONFIG_SERIALCONFIG._serialized_end=8977
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD._serialized_start=8166
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD._serialized_end=8712
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE._serialized_start=8715
|
||||
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE._serialized_end=8977
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG._serialized_start=8980
|
||||
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG._serialized_end=10675
|
||||
_MODULECONFIG_STOREFORWARDCONFIG._serialized_start=10678
|
||||
_MODULECONFIG_STOREFORWARDCONFIG._serialized_end=11371
|
||||
_MODULECONFIG_RANGETESTCONFIG._serialized_start=11374
|
||||
_MODULECONFIG_RANGETESTCONFIG._serialized_end=11773
|
||||
_MODULECONFIG_TELEMETRYCONFIG._serialized_start=11776
|
||||
_MODULECONFIG_TELEMETRYCONFIG._serialized_end=13207
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG._serialized_start=13210
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG._serialized_end=14484
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR._serialized_start=14286
|
||||
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR._serialized_end=14484
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG._serialized_start=14487
|
||||
_MODULECONFIG_AMBIENTLIGHTINGCONFIG._serialized_end=15080
|
||||
_MODULECONFIG_STATUSMESSAGECONFIG._serialized_start=15082
|
||||
_MODULECONFIG_STATUSMESSAGECONFIG._serialized_end=15124
|
||||
_MODULECONFIG_MESHBEACONCONFIG._serialized_start=15127
|
||||
_MODULECONFIG_MESHBEACONCONFIG._serialized_end=16283
|
||||
_MODULECONFIG_MESHBEACONCONFIG_BROADCASTTARGET._serialized_start=15747
|
||||
_MODULECONFIG_MESHBEACONCONFIG_BROADCASTTARGET._serialized_end=16009
|
||||
_MODULECONFIG_MESHBEACONCONFIG_FLAGS._serialized_start=16011
|
||||
_MODULECONFIG_MESHBEACONCONFIG_FLAGS._serialized_end=16109
|
||||
_MODULECONFIG_TAKCONFIG._serialized_start=16286
|
||||
_MODULECONFIG_TAKCONFIG._serialized_end=16442
|
||||
_REMOTEHARDWAREPIN._serialized_start=16463
|
||||
_REMOTEHARDWAREPIN._serialized_end=16572
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,437 +0,0 @@
|
||||
from meshtastic.protobuf import atak_pb2 as _atak_pb2
|
||||
from meshtastic.protobuf import channel_pb2 as _channel_pb2
|
||||
from meshtastic.protobuf import config_pb2 as _config_pb2
|
||||
from meshtastic.protobuf import field_metadata_pb2 as _field_metadata_pb2
|
||||
from google.protobuf.internal import containers as _containers
|
||||
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
DIGITAL_READ: RemoteHardwarePinType
|
||||
DIGITAL_WRITE: RemoteHardwarePinType
|
||||
UNKNOWN: RemoteHardwarePinType
|
||||
|
||||
class ModuleConfig(_message.Message):
|
||||
__slots__ = ["ambient_lighting", "audio", "canned_message", "detection_sensor", "external_notification", "mesh_beacon", "mqtt", "neighbor_info", "paxcounter", "range_test", "remote_hardware", "serial", "statusmessage", "store_forward", "tak", "telemetry", "traffic_management"]
|
||||
class AmbientLightingConfig(_message.Message):
|
||||
__slots__ = ["blue", "current", "green", "led_state", "red"]
|
||||
BLUE_FIELD_NUMBER: _ClassVar[int]
|
||||
CURRENT_FIELD_NUMBER: _ClassVar[int]
|
||||
GREEN_FIELD_NUMBER: _ClassVar[int]
|
||||
LED_STATE_FIELD_NUMBER: _ClassVar[int]
|
||||
RED_FIELD_NUMBER: _ClassVar[int]
|
||||
blue: int
|
||||
current: int
|
||||
green: int
|
||||
led_state: bool
|
||||
red: int
|
||||
def __init__(self, led_state: bool = ..., current: _Optional[int] = ..., red: _Optional[int] = ..., green: _Optional[int] = ..., blue: _Optional[int] = ...) -> None: ...
|
||||
class AudioConfig(_message.Message):
|
||||
__slots__ = ["bitrate", "codec2_enabled", "i2s_din", "i2s_sck", "i2s_sd", "i2s_ws", "ptt_pin"]
|
||||
class Audio_Baud(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
BITRATE_FIELD_NUMBER: _ClassVar[int]
|
||||
CODEC2_1200: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_1300: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_1400: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_1600: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_2400: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_3200: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_450: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_700: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_700B: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_700C: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_DEFAULT: ModuleConfig.AudioConfig.Audio_Baud
|
||||
CODEC2_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
I2S_DIN_FIELD_NUMBER: _ClassVar[int]
|
||||
I2S_SCK_FIELD_NUMBER: _ClassVar[int]
|
||||
I2S_SD_FIELD_NUMBER: _ClassVar[int]
|
||||
I2S_WS_FIELD_NUMBER: _ClassVar[int]
|
||||
PTT_PIN_FIELD_NUMBER: _ClassVar[int]
|
||||
bitrate: ModuleConfig.AudioConfig.Audio_Baud
|
||||
codec2_enabled: bool
|
||||
i2s_din: int
|
||||
i2s_sck: int
|
||||
i2s_sd: int
|
||||
i2s_ws: int
|
||||
ptt_pin: int
|
||||
def __init__(self, codec2_enabled: bool = ..., ptt_pin: _Optional[int] = ..., bitrate: _Optional[_Union[ModuleConfig.AudioConfig.Audio_Baud, str]] = ..., i2s_ws: _Optional[int] = ..., i2s_sd: _Optional[int] = ..., i2s_din: _Optional[int] = ..., i2s_sck: _Optional[int] = ...) -> None: ...
|
||||
class CannedMessageConfig(_message.Message):
|
||||
__slots__ = ["allow_input_source", "enabled", "inputbroker_event_ccw", "inputbroker_event_cw", "inputbroker_event_press", "inputbroker_pin_a", "inputbroker_pin_b", "inputbroker_pin_press", "rotary1_enabled", "send_bell", "updown1_enabled"]
|
||||
class InputEventChar(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
ALLOW_INPUT_SOURCE_FIELD_NUMBER: _ClassVar[int]
|
||||
BACK: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
CANCEL: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
DOWN: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
INPUTBROKER_EVENT_CCW_FIELD_NUMBER: _ClassVar[int]
|
||||
INPUTBROKER_EVENT_CW_FIELD_NUMBER: _ClassVar[int]
|
||||
INPUTBROKER_EVENT_PRESS_FIELD_NUMBER: _ClassVar[int]
|
||||
INPUTBROKER_PIN_A_FIELD_NUMBER: _ClassVar[int]
|
||||
INPUTBROKER_PIN_B_FIELD_NUMBER: _ClassVar[int]
|
||||
INPUTBROKER_PIN_PRESS_FIELD_NUMBER: _ClassVar[int]
|
||||
LEFT: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
NONE: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
RIGHT: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
ROTARY1_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
SELECT: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
SEND_BELL_FIELD_NUMBER: _ClassVar[int]
|
||||
UP: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
UPDOWN1_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
allow_input_source: str
|
||||
enabled: bool
|
||||
inputbroker_event_ccw: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
inputbroker_event_cw: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
inputbroker_event_press: ModuleConfig.CannedMessageConfig.InputEventChar
|
||||
inputbroker_pin_a: int
|
||||
inputbroker_pin_b: int
|
||||
inputbroker_pin_press: int
|
||||
rotary1_enabled: bool
|
||||
send_bell: bool
|
||||
updown1_enabled: bool
|
||||
def __init__(self, rotary1_enabled: bool = ..., inputbroker_pin_a: _Optional[int] = ..., inputbroker_pin_b: _Optional[int] = ..., inputbroker_pin_press: _Optional[int] = ..., inputbroker_event_cw: _Optional[_Union[ModuleConfig.CannedMessageConfig.InputEventChar, str]] = ..., inputbroker_event_ccw: _Optional[_Union[ModuleConfig.CannedMessageConfig.InputEventChar, str]] = ..., inputbroker_event_press: _Optional[_Union[ModuleConfig.CannedMessageConfig.InputEventChar, str]] = ..., updown1_enabled: bool = ..., enabled: bool = ..., allow_input_source: _Optional[str] = ..., send_bell: bool = ...) -> None: ...
|
||||
class DetectionSensorConfig(_message.Message):
|
||||
__slots__ = ["detection_trigger_type", "enabled", "minimum_broadcast_secs", "monitor_pin", "name", "send_bell", "state_broadcast_secs", "use_pullup"]
|
||||
class TriggerType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
DETECTION_TRIGGER_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
EITHER_EDGE_ACTIVE_HIGH: ModuleConfig.DetectionSensorConfig.TriggerType
|
||||
EITHER_EDGE_ACTIVE_LOW: ModuleConfig.DetectionSensorConfig.TriggerType
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
FALLING_EDGE: ModuleConfig.DetectionSensorConfig.TriggerType
|
||||
LOGIC_HIGH: ModuleConfig.DetectionSensorConfig.TriggerType
|
||||
LOGIC_LOW: ModuleConfig.DetectionSensorConfig.TriggerType
|
||||
MINIMUM_BROADCAST_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
MONITOR_PIN_FIELD_NUMBER: _ClassVar[int]
|
||||
NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
RISING_EDGE: ModuleConfig.DetectionSensorConfig.TriggerType
|
||||
SEND_BELL_FIELD_NUMBER: _ClassVar[int]
|
||||
STATE_BROADCAST_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
USE_PULLUP_FIELD_NUMBER: _ClassVar[int]
|
||||
detection_trigger_type: ModuleConfig.DetectionSensorConfig.TriggerType
|
||||
enabled: bool
|
||||
minimum_broadcast_secs: int
|
||||
monitor_pin: int
|
||||
name: str
|
||||
send_bell: bool
|
||||
state_broadcast_secs: int
|
||||
use_pullup: bool
|
||||
def __init__(self, enabled: bool = ..., minimum_broadcast_secs: _Optional[int] = ..., state_broadcast_secs: _Optional[int] = ..., send_bell: bool = ..., name: _Optional[str] = ..., monitor_pin: _Optional[int] = ..., detection_trigger_type: _Optional[_Union[ModuleConfig.DetectionSensorConfig.TriggerType, str]] = ..., use_pullup: bool = ...) -> None: ...
|
||||
class ExternalNotificationConfig(_message.Message):
|
||||
__slots__ = ["active", "alert_bell", "alert_bell_buzzer", "alert_bell_vibra", "alert_message", "alert_message_buzzer", "alert_message_vibra", "enabled", "nag_timeout", "output", "output_buzzer", "output_ms", "output_vibra", "use_i2s_as_buzzer", "use_pwm"]
|
||||
ACTIVE_FIELD_NUMBER: _ClassVar[int]
|
||||
ALERT_BELL_BUZZER_FIELD_NUMBER: _ClassVar[int]
|
||||
ALERT_BELL_FIELD_NUMBER: _ClassVar[int]
|
||||
ALERT_BELL_VIBRA_FIELD_NUMBER: _ClassVar[int]
|
||||
ALERT_MESSAGE_BUZZER_FIELD_NUMBER: _ClassVar[int]
|
||||
ALERT_MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
ALERT_MESSAGE_VIBRA_FIELD_NUMBER: _ClassVar[int]
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
NAG_TIMEOUT_FIELD_NUMBER: _ClassVar[int]
|
||||
OUTPUT_BUZZER_FIELD_NUMBER: _ClassVar[int]
|
||||
OUTPUT_FIELD_NUMBER: _ClassVar[int]
|
||||
OUTPUT_MS_FIELD_NUMBER: _ClassVar[int]
|
||||
OUTPUT_VIBRA_FIELD_NUMBER: _ClassVar[int]
|
||||
USE_I2S_AS_BUZZER_FIELD_NUMBER: _ClassVar[int]
|
||||
USE_PWM_FIELD_NUMBER: _ClassVar[int]
|
||||
active: bool
|
||||
alert_bell: bool
|
||||
alert_bell_buzzer: bool
|
||||
alert_bell_vibra: bool
|
||||
alert_message: bool
|
||||
alert_message_buzzer: bool
|
||||
alert_message_vibra: bool
|
||||
enabled: bool
|
||||
nag_timeout: int
|
||||
output: int
|
||||
output_buzzer: int
|
||||
output_ms: int
|
||||
output_vibra: int
|
||||
use_i2s_as_buzzer: bool
|
||||
use_pwm: bool
|
||||
def __init__(self, enabled: bool = ..., output_ms: _Optional[int] = ..., output: _Optional[int] = ..., output_vibra: _Optional[int] = ..., output_buzzer: _Optional[int] = ..., active: bool = ..., alert_message: bool = ..., alert_message_vibra: bool = ..., alert_message_buzzer: bool = ..., alert_bell: bool = ..., alert_bell_vibra: bool = ..., alert_bell_buzzer: bool = ..., use_pwm: bool = ..., nag_timeout: _Optional[int] = ..., use_i2s_as_buzzer: bool = ...) -> None: ...
|
||||
class MQTTConfig(_message.Message):
|
||||
__slots__ = ["address", "enabled", "encryption_enabled", "json_enabled", "map_report_settings", "map_reporting_enabled", "password", "proxy_to_client_enabled", "root", "tls_enabled", "username"]
|
||||
ADDRESS_FIELD_NUMBER: _ClassVar[int]
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
ENCRYPTION_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
JSON_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
MAP_REPORTING_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
MAP_REPORT_SETTINGS_FIELD_NUMBER: _ClassVar[int]
|
||||
PASSWORD_FIELD_NUMBER: _ClassVar[int]
|
||||
PROXY_TO_CLIENT_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
ROOT_FIELD_NUMBER: _ClassVar[int]
|
||||
TLS_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
USERNAME_FIELD_NUMBER: _ClassVar[int]
|
||||
address: str
|
||||
enabled: bool
|
||||
encryption_enabled: bool
|
||||
json_enabled: bool
|
||||
map_report_settings: ModuleConfig.MapReportSettings
|
||||
map_reporting_enabled: bool
|
||||
password: str
|
||||
proxy_to_client_enabled: bool
|
||||
root: str
|
||||
tls_enabled: bool
|
||||
username: str
|
||||
def __init__(self, enabled: bool = ..., address: _Optional[str] = ..., username: _Optional[str] = ..., password: _Optional[str] = ..., encryption_enabled: bool = ..., json_enabled: bool = ..., tls_enabled: bool = ..., root: _Optional[str] = ..., proxy_to_client_enabled: bool = ..., map_reporting_enabled: bool = ..., map_report_settings: _Optional[_Union[ModuleConfig.MapReportSettings, _Mapping]] = ...) -> None: ...
|
||||
class MapReportSettings(_message.Message):
|
||||
__slots__ = ["position_precision", "publish_interval_secs", "should_report_location"]
|
||||
POSITION_PRECISION_FIELD_NUMBER: _ClassVar[int]
|
||||
PUBLISH_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
SHOULD_REPORT_LOCATION_FIELD_NUMBER: _ClassVar[int]
|
||||
position_precision: int
|
||||
publish_interval_secs: int
|
||||
should_report_location: bool
|
||||
def __init__(self, publish_interval_secs: _Optional[int] = ..., position_precision: _Optional[int] = ..., should_report_location: bool = ...) -> None: ...
|
||||
class MeshBeaconConfig(_message.Message):
|
||||
__slots__ = ["broadcast_interval_secs", "broadcast_message", "broadcast_offer_channel", "broadcast_offer_frequency_slot", "broadcast_offer_preset", "broadcast_offer_region", "broadcast_targets", "flags"]
|
||||
class Flags(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class BroadcastTarget(_message.Message):
|
||||
__slots__ = ["channel_index", "frequency_slot", "preset", "region"]
|
||||
CHANNEL_INDEX_FIELD_NUMBER: _ClassVar[int]
|
||||
FREQUENCY_SLOT_FIELD_NUMBER: _ClassVar[int]
|
||||
PRESET_FIELD_NUMBER: _ClassVar[int]
|
||||
REGION_FIELD_NUMBER: _ClassVar[int]
|
||||
channel_index: int
|
||||
frequency_slot: int
|
||||
preset: _config_pb2.Config.LoRaConfig.ModemPreset
|
||||
region: _config_pb2.Config.LoRaConfig.RegionCode
|
||||
def __init__(self, preset: _Optional[_Union[_config_pb2.Config.LoRaConfig.ModemPreset, str]] = ..., region: _Optional[_Union[_config_pb2.Config.LoRaConfig.RegionCode, str]] = ..., channel_index: _Optional[int] = ..., frequency_slot: _Optional[int] = ...) -> None: ...
|
||||
BROADCAST_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
BROADCAST_MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
BROADCAST_OFFER_CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
BROADCAST_OFFER_FREQUENCY_SLOT_FIELD_NUMBER: _ClassVar[int]
|
||||
BROADCAST_OFFER_PRESET_FIELD_NUMBER: _ClassVar[int]
|
||||
BROADCAST_OFFER_REGION_FIELD_NUMBER: _ClassVar[int]
|
||||
BROADCAST_TARGETS_FIELD_NUMBER: _ClassVar[int]
|
||||
FLAGS_FIELD_NUMBER: _ClassVar[int]
|
||||
FLAG_BROADCAST_ENABLED: ModuleConfig.MeshBeaconConfig.Flags
|
||||
FLAG_LEGACY_SPLIT: ModuleConfig.MeshBeaconConfig.Flags
|
||||
FLAG_LISTEN_ENABLED: ModuleConfig.MeshBeaconConfig.Flags
|
||||
FLAG_NONE: ModuleConfig.MeshBeaconConfig.Flags
|
||||
broadcast_interval_secs: int
|
||||
broadcast_message: str
|
||||
broadcast_offer_channel: _channel_pb2.ChannelSettings
|
||||
broadcast_offer_frequency_slot: int
|
||||
broadcast_offer_preset: _config_pb2.Config.LoRaConfig.ModemPreset
|
||||
broadcast_offer_region: _config_pb2.Config.LoRaConfig.RegionCode
|
||||
broadcast_targets: _containers.RepeatedCompositeFieldContainer[ModuleConfig.MeshBeaconConfig.BroadcastTarget]
|
||||
flags: int
|
||||
def __init__(self, flags: _Optional[int] = ..., broadcast_offer_frequency_slot: _Optional[int] = ..., broadcast_message: _Optional[str] = ..., broadcast_offer_channel: _Optional[_Union[_channel_pb2.ChannelSettings, _Mapping]] = ..., broadcast_offer_region: _Optional[_Union[_config_pb2.Config.LoRaConfig.RegionCode, str]] = ..., broadcast_offer_preset: _Optional[_Union[_config_pb2.Config.LoRaConfig.ModemPreset, str]] = ..., broadcast_interval_secs: _Optional[int] = ..., broadcast_targets: _Optional[_Iterable[_Union[ModuleConfig.MeshBeaconConfig.BroadcastTarget, _Mapping]]] = ...) -> None: ...
|
||||
class NeighborInfoConfig(_message.Message):
|
||||
__slots__ = ["enabled", "transmit_over_lora", "update_interval"]
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
TRANSMIT_OVER_LORA_FIELD_NUMBER: _ClassVar[int]
|
||||
UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
|
||||
enabled: bool
|
||||
transmit_over_lora: bool
|
||||
update_interval: int
|
||||
def __init__(self, enabled: bool = ..., update_interval: _Optional[int] = ..., transmit_over_lora: bool = ...) -> None: ...
|
||||
class PaxcounterConfig(_message.Message):
|
||||
__slots__ = ["ble_threshold", "enabled", "paxcounter_update_interval", "wifi_threshold"]
|
||||
BLE_THRESHOLD_FIELD_NUMBER: _ClassVar[int]
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
PAXCOUNTER_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
|
||||
WIFI_THRESHOLD_FIELD_NUMBER: _ClassVar[int]
|
||||
ble_threshold: int
|
||||
enabled: bool
|
||||
paxcounter_update_interval: int
|
||||
wifi_threshold: int
|
||||
def __init__(self, enabled: bool = ..., paxcounter_update_interval: _Optional[int] = ..., wifi_threshold: _Optional[int] = ..., ble_threshold: _Optional[int] = ...) -> None: ...
|
||||
class RangeTestConfig(_message.Message):
|
||||
__slots__ = ["clear_on_reboot", "enabled", "save", "sender"]
|
||||
CLEAR_ON_REBOOT_FIELD_NUMBER: _ClassVar[int]
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
SAVE_FIELD_NUMBER: _ClassVar[int]
|
||||
SENDER_FIELD_NUMBER: _ClassVar[int]
|
||||
clear_on_reboot: bool
|
||||
enabled: bool
|
||||
save: bool
|
||||
sender: int
|
||||
def __init__(self, enabled: bool = ..., sender: _Optional[int] = ..., save: bool = ..., clear_on_reboot: bool = ...) -> None: ...
|
||||
class RemoteHardwareConfig(_message.Message):
|
||||
__slots__ = ["allow_undefined_pin_access", "available_pins", "enabled"]
|
||||
ALLOW_UNDEFINED_PIN_ACCESS_FIELD_NUMBER: _ClassVar[int]
|
||||
AVAILABLE_PINS_FIELD_NUMBER: _ClassVar[int]
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
allow_undefined_pin_access: bool
|
||||
available_pins: _containers.RepeatedCompositeFieldContainer[RemoteHardwarePin]
|
||||
enabled: bool
|
||||
def __init__(self, enabled: bool = ..., allow_undefined_pin_access: bool = ..., available_pins: _Optional[_Iterable[_Union[RemoteHardwarePin, _Mapping]]] = ...) -> None: ...
|
||||
class SerialConfig(_message.Message):
|
||||
__slots__ = ["baud", "echo", "enabled", "mode", "override_console_serial_port", "rxd", "timeout", "txd"]
|
||||
class Serial_Baud(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
class Serial_Mode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
BAUD_110: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_115200: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_1200: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_19200: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_230400: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_2400: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_300: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_38400: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_460800: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_4800: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_57600: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_576000: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_600: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_921600: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_9600: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_DEFAULT: ModuleConfig.SerialConfig.Serial_Baud
|
||||
BAUD_FIELD_NUMBER: _ClassVar[int]
|
||||
CALTOPO: ModuleConfig.SerialConfig.Serial_Mode
|
||||
DEFAULT: ModuleConfig.SerialConfig.Serial_Mode
|
||||
ECHO_FIELD_NUMBER: _ClassVar[int]
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
LOG: ModuleConfig.SerialConfig.Serial_Mode
|
||||
LOGTEXT: ModuleConfig.SerialConfig.Serial_Mode
|
||||
MODBUS: ModuleConfig.SerialConfig.Serial_Mode
|
||||
MODE_FIELD_NUMBER: _ClassVar[int]
|
||||
MS_CONFIG: ModuleConfig.SerialConfig.Serial_Mode
|
||||
NMEA: ModuleConfig.SerialConfig.Serial_Mode
|
||||
OVERRIDE_CONSOLE_SERIAL_PORT_FIELD_NUMBER: _ClassVar[int]
|
||||
PROTO: ModuleConfig.SerialConfig.Serial_Mode
|
||||
RXD_FIELD_NUMBER: _ClassVar[int]
|
||||
SIMPLE: ModuleConfig.SerialConfig.Serial_Mode
|
||||
TEXTMSG: ModuleConfig.SerialConfig.Serial_Mode
|
||||
TIMEOUT_FIELD_NUMBER: _ClassVar[int]
|
||||
TXD_FIELD_NUMBER: _ClassVar[int]
|
||||
VE_DIRECT: ModuleConfig.SerialConfig.Serial_Mode
|
||||
WS85: ModuleConfig.SerialConfig.Serial_Mode
|
||||
baud: ModuleConfig.SerialConfig.Serial_Baud
|
||||
echo: bool
|
||||
enabled: bool
|
||||
mode: ModuleConfig.SerialConfig.Serial_Mode
|
||||
override_console_serial_port: bool
|
||||
rxd: int
|
||||
timeout: int
|
||||
txd: int
|
||||
def __init__(self, enabled: bool = ..., echo: bool = ..., rxd: _Optional[int] = ..., txd: _Optional[int] = ..., baud: _Optional[_Union[ModuleConfig.SerialConfig.Serial_Baud, str]] = ..., timeout: _Optional[int] = ..., mode: _Optional[_Union[ModuleConfig.SerialConfig.Serial_Mode, str]] = ..., override_console_serial_port: bool = ...) -> None: ...
|
||||
class StatusMessageConfig(_message.Message):
|
||||
__slots__ = ["node_status"]
|
||||
NODE_STATUS_FIELD_NUMBER: _ClassVar[int]
|
||||
node_status: str
|
||||
def __init__(self, node_status: _Optional[str] = ...) -> None: ...
|
||||
class StoreForwardConfig(_message.Message):
|
||||
__slots__ = ["enabled", "heartbeat", "history_return_max", "history_return_window", "is_server", "records"]
|
||||
ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
HEARTBEAT_FIELD_NUMBER: _ClassVar[int]
|
||||
HISTORY_RETURN_MAX_FIELD_NUMBER: _ClassVar[int]
|
||||
HISTORY_RETURN_WINDOW_FIELD_NUMBER: _ClassVar[int]
|
||||
IS_SERVER_FIELD_NUMBER: _ClassVar[int]
|
||||
RECORDS_FIELD_NUMBER: _ClassVar[int]
|
||||
enabled: bool
|
||||
heartbeat: bool
|
||||
history_return_max: int
|
||||
history_return_window: int
|
||||
is_server: bool
|
||||
records: int
|
||||
def __init__(self, enabled: bool = ..., heartbeat: bool = ..., records: _Optional[int] = ..., history_return_max: _Optional[int] = ..., history_return_window: _Optional[int] = ..., is_server: bool = ...) -> None: ...
|
||||
class TAKConfig(_message.Message):
|
||||
__slots__ = ["role", "team"]
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
TEAM_FIELD_NUMBER: _ClassVar[int]
|
||||
role: _atak_pb2.MemberRole
|
||||
team: _atak_pb2.Team
|
||||
def __init__(self, team: _Optional[_Union[_atak_pb2.Team, str]] = ..., role: _Optional[_Union[_atak_pb2.MemberRole, str]] = ...) -> None: ...
|
||||
class TelemetryConfig(_message.Message):
|
||||
__slots__ = ["air_quality_enabled", "air_quality_interval", "air_quality_screen_enabled", "device_telemetry_enabled", "device_update_interval", "environment_display_fahrenheit", "environment_measurement_enabled", "environment_screen_enabled", "environment_update_interval", "health_measurement_enabled", "health_screen_enabled", "health_update_interval", "power_measurement_enabled", "power_screen_enabled", "power_update_interval"]
|
||||
AIR_QUALITY_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
AIR_QUALITY_INTERVAL_FIELD_NUMBER: _ClassVar[int]
|
||||
AIR_QUALITY_SCREEN_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_TELEMETRY_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
DEVICE_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
|
||||
ENVIRONMENT_DISPLAY_FAHRENHEIT_FIELD_NUMBER: _ClassVar[int]
|
||||
ENVIRONMENT_MEASUREMENT_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
ENVIRONMENT_SCREEN_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
ENVIRONMENT_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
|
||||
HEALTH_MEASUREMENT_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
HEALTH_SCREEN_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
HEALTH_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
|
||||
POWER_MEASUREMENT_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
POWER_SCREEN_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
||||
POWER_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
|
||||
air_quality_enabled: bool
|
||||
air_quality_interval: int
|
||||
air_quality_screen_enabled: bool
|
||||
device_telemetry_enabled: bool
|
||||
device_update_interval: int
|
||||
environment_display_fahrenheit: bool
|
||||
environment_measurement_enabled: bool
|
||||
environment_screen_enabled: bool
|
||||
environment_update_interval: int
|
||||
health_measurement_enabled: bool
|
||||
health_screen_enabled: bool
|
||||
health_update_interval: int
|
||||
power_measurement_enabled: bool
|
||||
power_screen_enabled: bool
|
||||
power_update_interval: int
|
||||
def __init__(self, device_update_interval: _Optional[int] = ..., environment_update_interval: _Optional[int] = ..., environment_measurement_enabled: bool = ..., environment_screen_enabled: bool = ..., environment_display_fahrenheit: bool = ..., air_quality_enabled: bool = ..., air_quality_interval: _Optional[int] = ..., power_measurement_enabled: bool = ..., power_update_interval: _Optional[int] = ..., power_screen_enabled: bool = ..., health_measurement_enabled: bool = ..., health_update_interval: _Optional[int] = ..., health_screen_enabled: bool = ..., device_telemetry_enabled: bool = ..., air_quality_screen_enabled: bool = ...) -> None: ...
|
||||
class TrafficManagementConfig(_message.Message):
|
||||
__slots__ = ["nodeinfo_direct_response_max_hops", "position_min_interval_secs", "rate_limit_max_packets", "rate_limit_window_secs", "unknown_packet_threshold"]
|
||||
NODEINFO_DIRECT_RESPONSE_MAX_HOPS_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_MIN_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
RATE_LIMIT_MAX_PACKETS_FIELD_NUMBER: _ClassVar[int]
|
||||
RATE_LIMIT_WINDOW_SECS_FIELD_NUMBER: _ClassVar[int]
|
||||
UNKNOWN_PACKET_THRESHOLD_FIELD_NUMBER: _ClassVar[int]
|
||||
nodeinfo_direct_response_max_hops: int
|
||||
position_min_interval_secs: int
|
||||
rate_limit_max_packets: int
|
||||
rate_limit_window_secs: int
|
||||
unknown_packet_threshold: int
|
||||
def __init__(self, position_min_interval_secs: _Optional[int] = ..., nodeinfo_direct_response_max_hops: _Optional[int] = ..., rate_limit_window_secs: _Optional[int] = ..., rate_limit_max_packets: _Optional[int] = ..., unknown_packet_threshold: _Optional[int] = ...) -> None: ...
|
||||
AMBIENT_LIGHTING_FIELD_NUMBER: _ClassVar[int]
|
||||
AUDIO_FIELD_NUMBER: _ClassVar[int]
|
||||
CANNED_MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
DETECTION_SENSOR_FIELD_NUMBER: _ClassVar[int]
|
||||
EXTERNAL_NOTIFICATION_FIELD_NUMBER: _ClassVar[int]
|
||||
MESH_BEACON_FIELD_NUMBER: _ClassVar[int]
|
||||
MQTT_FIELD_NUMBER: _ClassVar[int]
|
||||
NEIGHBOR_INFO_FIELD_NUMBER: _ClassVar[int]
|
||||
PAXCOUNTER_FIELD_NUMBER: _ClassVar[int]
|
||||
RANGE_TEST_FIELD_NUMBER: _ClassVar[int]
|
||||
REMOTE_HARDWARE_FIELD_NUMBER: _ClassVar[int]
|
||||
SERIAL_FIELD_NUMBER: _ClassVar[int]
|
||||
STATUSMESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
STORE_FORWARD_FIELD_NUMBER: _ClassVar[int]
|
||||
TAK_FIELD_NUMBER: _ClassVar[int]
|
||||
TELEMETRY_FIELD_NUMBER: _ClassVar[int]
|
||||
TRAFFIC_MANAGEMENT_FIELD_NUMBER: _ClassVar[int]
|
||||
ambient_lighting: ModuleConfig.AmbientLightingConfig
|
||||
audio: ModuleConfig.AudioConfig
|
||||
canned_message: ModuleConfig.CannedMessageConfig
|
||||
detection_sensor: ModuleConfig.DetectionSensorConfig
|
||||
external_notification: ModuleConfig.ExternalNotificationConfig
|
||||
mesh_beacon: ModuleConfig.MeshBeaconConfig
|
||||
mqtt: ModuleConfig.MQTTConfig
|
||||
neighbor_info: ModuleConfig.NeighborInfoConfig
|
||||
paxcounter: ModuleConfig.PaxcounterConfig
|
||||
range_test: ModuleConfig.RangeTestConfig
|
||||
remote_hardware: ModuleConfig.RemoteHardwareConfig
|
||||
serial: ModuleConfig.SerialConfig
|
||||
statusmessage: ModuleConfig.StatusMessageConfig
|
||||
store_forward: ModuleConfig.StoreForwardConfig
|
||||
tak: ModuleConfig.TAKConfig
|
||||
telemetry: ModuleConfig.TelemetryConfig
|
||||
traffic_management: ModuleConfig.TrafficManagementConfig
|
||||
def __init__(self, mqtt: _Optional[_Union[ModuleConfig.MQTTConfig, _Mapping]] = ..., serial: _Optional[_Union[ModuleConfig.SerialConfig, _Mapping]] = ..., external_notification: _Optional[_Union[ModuleConfig.ExternalNotificationConfig, _Mapping]] = ..., store_forward: _Optional[_Union[ModuleConfig.StoreForwardConfig, _Mapping]] = ..., range_test: _Optional[_Union[ModuleConfig.RangeTestConfig, _Mapping]] = ..., telemetry: _Optional[_Union[ModuleConfig.TelemetryConfig, _Mapping]] = ..., canned_message: _Optional[_Union[ModuleConfig.CannedMessageConfig, _Mapping]] = ..., audio: _Optional[_Union[ModuleConfig.AudioConfig, _Mapping]] = ..., remote_hardware: _Optional[_Union[ModuleConfig.RemoteHardwareConfig, _Mapping]] = ..., neighbor_info: _Optional[_Union[ModuleConfig.NeighborInfoConfig, _Mapping]] = ..., ambient_lighting: _Optional[_Union[ModuleConfig.AmbientLightingConfig, _Mapping]] = ..., detection_sensor: _Optional[_Union[ModuleConfig.DetectionSensorConfig, _Mapping]] = ..., paxcounter: _Optional[_Union[ModuleConfig.PaxcounterConfig, _Mapping]] = ..., statusmessage: _Optional[_Union[ModuleConfig.StatusMessageConfig, _Mapping]] = ..., traffic_management: _Optional[_Union[ModuleConfig.TrafficManagementConfig, _Mapping]] = ..., tak: _Optional[_Union[ModuleConfig.TAKConfig, _Mapping]] = ..., mesh_beacon: _Optional[_Union[ModuleConfig.MeshBeaconConfig, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class RemoteHardwarePin(_message.Message):
|
||||
__slots__ = ["gpio_pin", "name", "type"]
|
||||
GPIO_PIN_FIELD_NUMBER: _ClassVar[int]
|
||||
NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
gpio_pin: int
|
||||
name: str
|
||||
type: RemoteHardwarePinType
|
||||
def __init__(self, gpio_pin: _Optional[int] = ..., name: _Optional[str] = ..., type: _Optional[_Union[RemoteHardwarePinType, str]] = ...) -> None: ...
|
||||
|
||||
class RemoteHardwarePinType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
@@ -1,30 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/protobuf/mqtt.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config__pb2
|
||||
from meshtastic.protobuf import mesh_pb2 as meshtastic_dot_protobuf_dot_mesh__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emeshtastic/protobuf/mqtt.proto\x12\x13meshtastic.protobuf\x1a meshtastic/protobuf/config.proto\x1a\x1emeshtastic/protobuf/mesh.proto\"j\n\x0fServiceEnvelope\x12/\n\x06packet\x18\x01 \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacket\x12\x12\n\nchannel_id\x18\x02 \x01(\t\x12\x12\n\ngateway_id\x18\x03 \x01(\t\"\x83\x04\n\tMapReport\x12\x11\n\tlong_name\x18\x01 \x01(\t\x12\x12\n\nshort_name\x18\x02 \x01(\t\x12;\n\x04role\x18\x03 \x01(\x0e\x32-.meshtastic.protobuf.Config.DeviceConfig.Role\x12\x34\n\x08hw_model\x18\x04 \x01(\x0e\x32\".meshtastic.protobuf.HardwareModel\x12\x18\n\x10\x66irmware_version\x18\x05 \x01(\t\x12\x41\n\x06region\x18\x06 \x01(\x0e\x32\x31.meshtastic.protobuf.Config.LoRaConfig.RegionCode\x12H\n\x0cmodem_preset\x18\x07 \x01(\x0e\x32\x32.meshtastic.protobuf.Config.LoRaConfig.ModemPreset\x12\x1b\n\x13has_default_channel\x18\x08 \x01(\x08\x12\x12\n\nlatitude_i\x18\t \x01(\x0f\x12\x13\n\x0blongitude_i\x18\n \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x0b \x01(\x05\x12\x1a\n\x12position_precision\x18\x0c \x01(\r\x12\x1e\n\x16num_online_local_nodes\x18\r \x01(\r\x12!\n\x19has_opted_report_location\x18\x0e \x01(\x08\x42`\n\x14org.meshtastic.protoB\nMQTTProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.mqtt_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\nMQTTProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_SERVICEENVELOPE._serialized_start=121
|
||||
_SERVICEENVELOPE._serialized_end=227
|
||||
_MAPREPORT._serialized_start=230
|
||||
_MAPREPORT._serialized_end=745
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,49 +0,0 @@
|
||||
from meshtastic.protobuf import config_pb2 as _config_pb2
|
||||
from meshtastic.protobuf import mesh_pb2 as _mesh_pb2
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class MapReport(_message.Message):
|
||||
__slots__ = ["altitude", "firmware_version", "has_default_channel", "has_opted_report_location", "hw_model", "latitude_i", "long_name", "longitude_i", "modem_preset", "num_online_local_nodes", "position_precision", "region", "role", "short_name"]
|
||||
ALTITUDE_FIELD_NUMBER: _ClassVar[int]
|
||||
FIRMWARE_VERSION_FIELD_NUMBER: _ClassVar[int]
|
||||
HAS_DEFAULT_CHANNEL_FIELD_NUMBER: _ClassVar[int]
|
||||
HAS_OPTED_REPORT_LOCATION_FIELD_NUMBER: _ClassVar[int]
|
||||
HW_MODEL_FIELD_NUMBER: _ClassVar[int]
|
||||
LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
|
||||
LONG_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
MODEM_PRESET_FIELD_NUMBER: _ClassVar[int]
|
||||
NUM_ONLINE_LOCAL_NODES_FIELD_NUMBER: _ClassVar[int]
|
||||
POSITION_PRECISION_FIELD_NUMBER: _ClassVar[int]
|
||||
REGION_FIELD_NUMBER: _ClassVar[int]
|
||||
ROLE_FIELD_NUMBER: _ClassVar[int]
|
||||
SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
altitude: int
|
||||
firmware_version: str
|
||||
has_default_channel: bool
|
||||
has_opted_report_location: bool
|
||||
hw_model: _mesh_pb2.HardwareModel
|
||||
latitude_i: int
|
||||
long_name: str
|
||||
longitude_i: int
|
||||
modem_preset: _config_pb2.Config.LoRaConfig.ModemPreset
|
||||
num_online_local_nodes: int
|
||||
position_precision: int
|
||||
region: _config_pb2.Config.LoRaConfig.RegionCode
|
||||
role: _config_pb2.Config.DeviceConfig.Role
|
||||
short_name: str
|
||||
def __init__(self, long_name: _Optional[str] = ..., short_name: _Optional[str] = ..., role: _Optional[_Union[_config_pb2.Config.DeviceConfig.Role, str]] = ..., hw_model: _Optional[_Union[_mesh_pb2.HardwareModel, str]] = ..., firmware_version: _Optional[str] = ..., region: _Optional[_Union[_config_pb2.Config.LoRaConfig.RegionCode, str]] = ..., modem_preset: _Optional[_Union[_config_pb2.Config.LoRaConfig.ModemPreset, str]] = ..., has_default_channel: bool = ..., latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., position_precision: _Optional[int] = ..., num_online_local_nodes: _Optional[int] = ..., has_opted_report_location: bool = ...) -> None: ...
|
||||
|
||||
class ServiceEnvelope(_message.Message):
|
||||
__slots__ = ["channel_id", "gateway_id", "packet"]
|
||||
CHANNEL_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
PACKET_FIELD_NUMBER: _ClassVar[int]
|
||||
channel_id: str
|
||||
gateway_id: str
|
||||
packet: _mesh_pb2.MeshPacket
|
||||
def __init__(self, packet: _Optional[_Union[_mesh_pb2.MeshPacket, _Mapping]] = ..., channel_id: _Optional[str] = ..., gateway_id: _Optional[str] = ...) -> None: ...
|
||||
Loaded 100 of 281 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user