Why 45/8 Is Not the Radio-Energy Ratio
Why 45/8 Is Not the Radio-Energy Ratio
Ada rebuilds the complete LoRaWAN frame before comparing transmit cost
ADA · CALCULATION AUDIT
Why 45/8 Is Not the Radio-Energy Ratio
A 45-byte JSON body is 5.625 times the size of an 8-byte binary body. But LoRa transmits a complete, symbol-rounded packet rather than application bytes in isolation. This audit rebuilds one declared LoRaWAN uplink and shows why byte ratio, transmit charge, energy, and battery life are four different claims.
Companion to the chapter Choosing an IoT Data Format — every number here comes from that chapter.
A 45-byte JSON body is 5.625 times the size of an 8-byte binary body. Calculate this case.
But LoRa transmits a complete, symbol-rounded packet rather than application bytes in isolation. Check shows this.
Verdict: Smaller application bodies help, but calculate the complete frame. To turn charge into energy, multiply by supply voltage. To estimate battery life, also include receive windows, retries, sensing, MCU work, sleep current, conversion losses, and battery behaviour. Check confirms it.
See the relationship before changing it
The figure reads from left to right. The blue input is application body. The middle card names the page’s rule. The green output is full lorawan payload. The arrow matters: change the input, apply the rule once, then read the result with its unit.
Derive the baseline in four named moves
- 1
Name the input. The chapter baseline is 8 bytes.
- 2
Name the relationship. full payload = application body + 13 bytes of LoRaWAN fields
- 3
Substitute with units. 8 + 13 = 21 bytes
- 4
Read the result. Keep the unit beside the value, then use the result only inside the technical boundary below.
Predict, then change application body
Try Predict how full lorawan payload responds when application body moves. Calculate application body; compare full lorawan payload with that prediction.
Observe Return to 8 bytes. Recheck full lorawan payload with application body at its chapter value.
Explain Fixed protocol bytes stop body-size ratios becoming packet-size ratios.
Check yourself
What should you do before trusting a moved-slider result?
What does this small model leave out?
Technical boundaries
The fixed inputs for “Why 45/8 Is Not the Radio-Energy Ratio” omit regional payload limits outside EU863-870 DR0, adaptive data rate, receive windows, retries, sensing and MCU work, regulator loss, sleep current, or battery ageing; “Why 45/8 Is Not the Radio-Energy Ratio” therefore reports only its named fixtures.
Ada: Start with a boundary. The application body carries only the layout version and four measurements. Stable device identity, session evidence, frame counter, port, and receive time arrive through the trusted ingestion path; they are not hidden inside these byte counts.
The three reproducible application bodies are 45 bytes of short-key JSON, 25 bytes of scaled-integer CBOR, and the 8-byte VineyardPayloadV1 contract. Now declare one radio profile instead of treating “LoRaWAN” as a single data rate.
Step 1: Count the complete packet
With no FOpts, this example has a minimum 13 bytes around the application body: MHDR 1 + FHDR 7 + FPort 1 + MIC 4. The application bytes are FRMPayload, not the complete radio payload.
| Encoding | Application body | LoRaWAN overhead | Full PHYPayload |
|---|---|---|---|
| Short-key JSON | 45 B | 13 B | 58 B |
| Scaled-integer CBOR | 25 B | 13 B | 38 B |
| VineyardPayloadV1 | 8 B | 13 B | 21 B |
Step 2: Convert symbols to airtime
For this profile, one symbol lasts:
T_symbol = 2^12 / 125000 = 0.032768 s
The LoRa payload-symbol equation then applies headers, CRC, coding, low-data-rate optimisation, and ceiling-based symbol rounding to the full payload length. Here the coding-rate index is 1 for 4/5:
payload_symbols = 8 + ceil((8PL - 4SF + 28 + 16CRC - 20IH) / (4(SF - 2DE))) x (CR + 4)
Adding the programmed preamble plus 4.25 symbols gives these one-transmission times:
| Encoding | Payload symbols | Total airtime |
|---|---|---|
| Short-key JSON | 68 | 2.629632 s |
| Scaled-integer CBOR | 48 | 1.974272 s |
| VineyardPayloadV1 | 33 | 1.482752 s |
Step 3: Name the electrical quantity correctly
Assume this example device was measured at 44 mA while transmitting. Current multiplied by time gives charge, not energy:
TX charge (uAh) = 44 mA x airtime (s) x 1000 / 3600
| Encoding | Charge | Rounded |
|---|---|---|
| Short-key JSON | 32.139947 uAh | 32.1 uAh |
| Scaled-integer CBOR | 24.129991 uAh | 24.1 uAh |
| VineyardPayloadV1 | 18.122524 uAh | 18.1 uAh |
The 8-byte contract therefore uses about 43.6% less transmit charge than the 45-byte JSON body and about 24.9% less than the 25-byte CBOR body. It does not use 5.625 times less charge. Fixed packet bytes and symbol rounding prevent the application-byte ratio from becoming the airtime ratio.
Verdict: Smaller application bodies help, but calculate the complete frame. To turn charge into energy, multiply by supply voltage. To estimate battery life, also include receive windows, retries, sensing, MCU work, sleep current, conversion losses, and battery behaviour.
Try the audit yourself: change one assumption – for example the data rate, FOpts length, or retry count – and recalculate all three rows. The byte counts stay fixed while the packet-cost ratios can change.
This is one bounded EU863-870 DR0 example, not a universal LoRaWAN payload limit or radio-current claim. Verify deployed settings with the selected regional parameters and radio calculator.