Files
docs/wiki/concepts/io-element-bag.md
julian 22b1b069df Bootstrap LLM-maintained wiki with TRM architecture knowledge
Initialize CLAUDE.md schema, index, and log; ingest three architecture
sources (system overview, Teltonika ingestion design, official Teltonika
data-sending protocols) into 7 entity pages, 8 concept pages, and 3
source pages with wikilink cross-references.
2026-04-30 13:20:17 +02:00

1.7 KiB

title, type, created, updated, sources, tags
title type created updated sources tags
IO element bag concept 2026-04-30 2026-04-30
teltonika-ingestion-architecture
data-model
teltonika
principle

IO element bag

The model-specific telemetry inside a Teltonika AVL record. Carried as { id → value } pairs that tcp-ingestion reads byte-correctly without interpreting.

The principle: pass through unchanged

The Ingestion service does not name, interpret, or filter IO elements. It produces a position-record whose attributes field is a verbatim representation of the IO bag, keyed by the numeric IO element ID as a string.

  • No renaming.
  • No unit conversion.
  • No model lookup.

Per-model interpretation lives in the processor, driven by configuration like { "FMB920": { "16": "odometer_km", "240": "movement" } }.

Why this boundary matters

  1. Model-specific interpretation belongs where the model is known. Doing it in the parser would couple Ingestion to a registry of every device model in the fleet — exactly the coupling the protocol-adapter is designed to prevent.
  2. A new model never breaks Ingestion. A packet with IO 1234 from an unknown device produces a parser that stores the raw value under "1234" and moves on. The position is still useful; the attribute is recoverable later once the model's mapping is imported.

Structural implications

  • 8-bit IO IDs in Codec 8.
  • 16-bit IO IDs in Codec 8E (Teltonika ran out of 8-bit slots) plus variable-length values.
  • Codec 16 introduces a per-record generation type but the IO bag itself behaves the same.

The parser handles all three identically with respect to interpretation: read bytes per the codec spec, store under string key, hand off.