You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Support older meshtastic-bot releases still posting legacy field names on node upsert, and introduce a strict feeder API v3 URL namespace for new bot installs.
NodeSerializer on POST /api/packets/{meshtastic_node_id}/nodes/ only maps nested position / device_metrics using meshtastic_location_source, meshtastic_channel_utilization, and meshtastic_air_util_tx. Older bots send location_source, channel_utilization, and air_util_tx, which become null and fail validation (This field may not be null).
Wild bots use STORAGE_API_VERSION=2 and the existing /api/packets/... paths — they cannot be forced to upgrade immediately.
Summary
Support older meshtastic-bot releases still posting legacy field names on node upsert, and introduce a strict feeder API v3 URL namespace for new bot installs.
Related: pskillen/meshflow-bot#110 (startup
store_node400s whenmeshtastic_*fields were missing server-side). Bot fix in pskillen/meshflow-bot#111; this ticket covers meshflow-api only.Problem
NodeSerializeronPOST /api/packets/{meshtastic_node_id}/nodes/only maps nestedposition/device_metricsusingmeshtastic_location_source,meshtastic_channel_utilization, andmeshtastic_air_util_tx. Older bots sendlocation_source,channel_utilization, andair_util_tx, which becomenulland fail validation (This field may not be null).Wild bots use
STORAGE_API_VERSION=2and the existing/api/packets/...paths — they cannot be forced to upgrade immediately.Versioning model
STORAGE_API_VERSION/api/packets/{nodenum}/...(unchanged)meshtastic_*/api/v3/packets/{nodenum}/...meshtastic_*only (OpenAPIObservedNodeUpdate)API work
v2 backward compatibility (existing
/api/packets/...routes)Meshflow/packets/serializers.pyNodeSerializer.to_internal_value, alias:location_source→meshtastic_location_sourcechannel_utilization→meshtastic_channel_utilizationair_util_tx→meshtastic_air_util_txUNSET(convert_location_source); utilization →0.0headingrequired=False, allow_null=Trueon feeder position nested serializerv3 routes (strict contract)
path("v3/packets/", include("packets.urls"))inMeshflow/urls.py/api/v3/packets/{id}/...Tests & docs
Meshflow/packets/tests/test_packet_serializers.pyfor v2 legacy wire and v3 strict wire + URL routingopenapi.yaml(v3 paths; document legacy fields on v2 upsert)docs/features/meshcore/phase-2-outstanding.md(feeder upsert gap)Git workflow
origin/main:api-{N}/paddy/feeder-v3-node-upsert(use this issue number once filed)Meshflow/STORAGE_API_VERSION=3(bot work stays on bot-110 branch / PR feat(nodes): add traceroute-links endpoint for node-centric link data #111)Deploy order
meshtastic_*serializer)