diff --git a/CHANGELOG.md b/CHANGELOG.md index 92c0b4b..0b6d5b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,78 @@ # CHANGELOG +## v0.4.0 + +* Reformat neighbor overlay layout by @l5yth in +* Add legend toggle for neighbor lines by @l5yth in +* Hide Air Util Tx column on mobile by @l5yth in +* Add overlay for clickable neighbor links on map by @l5yth in +* Hide humidity and pressure columns on mobile by @l5yth in +* Remove last position timestamp from map info overlay by @l5yth in +* Improve live node positions and expose precision metadata by @l5yth in +* Show neighbor short names in info overlays by @l5yth in +* Add telemetry environment metrics to node UI by @l5yth in +* Reduce neighbor line opacity by @l5yth in +* Visualize neighbor connections on map canvas by @l5yth in +* Add clear control to filter input by @l5yth in +* Handle Bluetooth shutdown hangs gracefully by @l5yth in +* Adjust mesh priorities and receive topics by @l5yth in +* Add BLE and fallback mesh interface handling by @l5yth in +* Add neighbor info ingestion and API endpoints by @l5yth in +* Add debug logs for unknown node creation and last-heard updates by @l5yth in +* Update node last seen when events are received by @l5yth in +* Improve debug logging for node and telemetry data by @l5yth in +* Normalize stored message debug output by @l5yth in +* Stop repeating ingestor node info snapshot and timestamp debug logs by @l5yth in +* Add telemetry API and ingestion support by @l5yth in +* Add private mode to hide chat and message APIs by @l5yth in +* Handle offline-ready map fallback by @l5yth in +* Add linux/armv7 container builds and configuration options by @l5yth in +* Update Docker documentation by @l5yth in +* Update node last seen when ingesting encrypted messages by @l5yth in +* Fix api in readme by @l5yth in + ## v0.3.0 -* Add comprehensive Docker support with multi-architecture builds and automated CI/CD by @trose in +* Add connection recovery for TCP interface by @l5yth in +* Bump version to 0.3 by @l5yth in +* Pgrade styles and fix interface issues by @l5yth in +* Some updates in the front by @dkorotkih2014-hub in +* Update last heard on node entry change by @l5yth in +* Populate chat metadata for unknown nodes by @l5yth in +* Update role color theme to latest palette by @l5yth in +* Add placeholder nodes for unknown senders by @l5yth in +* Update role colors and ordering for firmware 2.7.10 by @l5yth in +* Handle plain IP addresses in mesh TCP detection by @l5yth in +* Handle encrypted messages by @l5yth in +* Add fallback display names for unnamed nodes by @l5yth in +* Ensure routers render above other node types by @l5yth in +* Move lint checks after tests in CI by @l5yth in +* Handle proto values in nodeinfo payloads by @l5yth in +* Remove raw payload storage from database schema by @l5yth in +* Add POSITION_APP ingestion and API support by @l5yth in +* Add support for NODEINFO_APP packets by @l5yth in +* Derive SEO metadata from existing config values by @l5yth in +* Tests: create helper script to dump all mesh data from serial by @l5yth in +* Limit chat log to recent entries by @l5yth in +* Require time library before formatting ISO timestamps by @l5yth in +* Define docker compose network by @l5yth in +* Fix sqlite3 native extension on Alpine by @l5yth in +* Fix web app startup binding by @l5yth in +* Ensure sqlite3 builds from source on Alpine by @l5yth in +* Support mock serial interface in CI by @l5yth in +* Fix Docker workflow matrix for supported platforms by @l5yth in +* Add clickable role filters to the map legend by @l5yth in +* Rebuild chat log on each refresh by @l5yth in +* Fix: retain alpine runtime libs after removing build deps by @l5yth in +* Fix: support windows ingestor build by @l5yth in +* Fix: use supported ruby image by @l5yth in +* Feat: Add comprehensive Docker support by @trose in +* Chore: bump version to 0.2.1 by @l5yth in +* Fix dark mode tile styling on new map tiles by @l5yth in +* Switch map tiles to OSM HOT and add theme filters by @l5yth in +* Add footer version display by @l5yth in +* Add responsive controls for map legend by @l5yth in +* Update changelog by @l5yth in ## v0.2.0 diff --git a/README.md b/README.md index 9368d07..73ed7ae 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ A simple Meshtastic-powered node dashboard for your local community. _No MQTT clutter, just local LoRa aether._ -* Web app with chat window and map view showing nodes and messages. +* Web app with chat window and map view showing nodes, neighbors, telemetry, and messages. * API to POST (authenticated) and to GET nodes and messages. * Supplemental Python ingestor to feed the POST APIs of the Web app with data remotely. * Shows new node notifications (first seen) in chat. @@ -16,8 +16,7 @@ A simple Meshtastic-powered node dashboard for your local community. _No MQTT cl Live demo for Berlin #MediumFast: [potatomesh.net](https://potatomesh.net) -![screenshot of the third version](./scrot-0.3.png) - +![screenshot of the fourth version](./scrot-0.4.png) ## Web App @@ -74,9 +73,13 @@ The web app contains an API: * GET `/api/nodes?limit=100` - returns the latest 100 nodes reported to the app * GET `/api/positions?limit=100` - returns the latest 100 position data * GET `/api/messages?limit=100` - returns the latest 100 messages (disabled when `PRIVATE=1`) +* GET `/api/telemetry?limit=100` - returns the latest 100 telemetry data +* GET `/api/neighbors?limit=100` - returns the latest 100 neighbor tuples * POST `/api/nodes` - upserts nodes provided as JSON object mapping node ids to node data (requires `Authorization: Bearer `) * POST `/api/positions` - appends positions provided as a JSON object or array (requires `Authorization: Bearer `) * POST `/api/messages` - appends messages provided as a JSON object or array (requires `Authorization: Bearer `; disabled when `PRIVATE=1`) +* POST `/api/telemetry` - appends telemetry provided as a JSON object or array (requires `Authorization: Bearer `) +* POST `/api/neighbors` - appends neighbor tuples provided as a JSON object or array (requires `Authorization: Bearer `) The `API_TOKEN` environment variable must be set to a non-empty value and match the token supplied in the `Authorization` header for `POST` requests. @@ -90,7 +93,7 @@ by ID and there will be no duplication. For convenience, the directory `./data` contains a Python ingestor. It connects to a Meshtastic node via serial port or to a remote device that exposes the Meshtastic TCP -interface to gather nodes and messages seen by the node. +or Bluetooth (BLE) interfaces to gather nodes and messages seen by the node. ```bash pacman -S python @@ -119,6 +122,8 @@ Run the script with `POTATOMESH_INSTANCE` and `API_TOKEN` to keep updating node records and parsing new incoming messages. Enable debug output with `DEBUG=1`, specify the serial port with `MESH_SERIAL` (default `/dev/ttyACM0`) or set it to an IP address (for example `192.168.1.20:4403`) to use the Meshtastic TCP interface. +`MESH_SERIAL` also accepts Bluetooth device addresses (e.g., `ED:4D:9E:95:CF:60`) +and attempts an BLE connection if available. ## Demos @@ -128,7 +133,14 @@ address (for example `192.168.1.20:4403`) to use the Meshtastic TCP interface. ## Docker -Looking for container deployment instructions? See the [Docker guide](DOCKER.md). +Docker images are published on Github for each release: + +```bash +docker pull ghcr.io/l5yth/potato-mesh/web:latest +docker pull ghcr.io/l5yth/potato-mesh/ingestor:latest +``` + +See the [Docker guide](DOCKER.md) for more details and custome deployment instructions. ## License diff --git a/scrot-0.4.png b/scrot-0.4.png new file mode 100644 index 0000000..929923c Binary files /dev/null and b/scrot-0.4.png differ