LPP payload formaat#

Voor het micro:bit IoT-netwerk gebruiken we het binaire Cayenne Low Power Payload formaat. Dit formaat wordt ook in LoRaWan netwerken gebruikt; zie bijvoorbeeld: https://docs.mydevices.com/docs/lorawan/cayenne-lpp.

Daarnaast gebruiken we een vertaling van dit formaat naar het JSON-strings, om deze berichten via MQTT te verzenden.

Standaard voor onze IoT-toepassingen

Voor de verschillende soorten IoT-knopen (WiFi, RF69, LoRaWan, micro:bit) gebruiken we niet alleen hetzelfde LPP-formaat, maar ook zoveel mogelijk dezelfde indeling van de kanalen voor de verschillende sensoren. De bijdehorende NodeRed flows zijn dan niet afhankelijk van de gebruikte IoT-knoop.

Een pakket in het micro:bit IoT-netwerk begint met een 5-byte header, gevolgd door de payload in LPP formaat.

Header:

  • 1 byte: protocol-ID (0x0A voor uplink-pakketten, van IoT-knoop naar gateway; 0x0B voor downlink-pakketten)

  • 2 byte: node-ID (adres van afzender bij uplink cq. bestemming bij downlink)

  • 2 byte: counter

De 2-byte getallen worden gegeven in de volgorde: hi byte, low byte.

Een pakket bevat maar 1 adres, omdat het andere adres impliciet de gateway is, aangegeven door uplink of downlink. De IoT-nodes kunnen niet onderling communiceren.

Payload:

channel

tag

type

data size

data resolution per bit

opmerking (microbit)

0

1

dOut

1

1

display, led0 (pin0)

1

1

dOut

1

1

led1 (pin1)

2

0

dIn

1

1

button A

3

0

dIn

1

1

button B

4

103

temperature

2

0.1°C Signed MSB

microbit temperature

5

115

barometer

2

0.1 hPa Unsigned MSB

(gereserveerd)

6

104

humidity

1

0.5 % Unsigned

(gereserveerd)

7

102

presence

1

1

shake, PIR sensor

8

2

aIn

2

0.01

light level (display)

De kanalen 5 en 6 zijn gereserveerd voor barometer en humidity. In het geval van de micro:bit heb je daarvoor extra sensoren nodig.

Bij andere IoT-knopen zijn barometer en humidity soms standaard aanwezig.

Als je andere sensoren of actuatoren toevoegt aan de microbit, dan moet je daarvoor kanalen 9 en hoger gebruiken, met een passende keuze voor het type.

Voorbeeld van een pakket met header en payload in binair LPP formaat

We geven dit als een rij bytes in Python-notatie.

[10, 59, 82, 1, 44, 0, 1, 0, 1, 1, 0, 2, 0, 0, 3, 0, 0, 4, 103, 1, 4, 8, 2, 0, 15]

Voorbeeld van een pakket in JSON-LPP string-formaat

Het bovenstaande binaire bericht met header en LPP-payload wordt in JSON:

{"nodeid": "3b52", 
 "counter": 300,
 "payload": {
     "4": {"temperature": 260}, 
     "8": {"aIn": 15}, 
     "1": {"dOut": 0}, 
     "0": {"dOut": 0}, 
     "3": {"dIn": 0}, 
     "2": {"dIn": 0}}}

(Merk op dat de volgorde van de kanalen niet beslist gehandhaafd blijft in dit JSON-formaat.)