Wireless sensors and Yggio, the open operational layer for cities, property owners and transport operators. Your data, your operations, your sovereignty.

LoRaWAN User and installation manual

Prism for LoRaWAN

Seat occupancy without cameras: one or two 60 GHz radar units in a railway-certified housing, fitted under the luggage rack. This manual takes you from the opened box to a sensor in service, describes the seat method and the VSM application inside it, and keeps the technical reference at the end.

Revision A · November 2026 · Sensative AB

1Introduction

Prism tells whether a seat is occupied, without a camera. It looks down at the seat with a 60 GHz coherent radar and a narrow beam of about ±10°, and reports occupied or free over LoRaWAN. There is no image and no identity, only the state of the seat. Prism is the sensor inside SeatSense, Sensative’s seat-occupancy service for trains, and is supplied as part of that service.

It is built for rolling stock: certified to EN 50155 (electronics on rolling stock), EN 50121-3-2 (electromagnetic compatibility) and EN 61373 (shock and vibration), in UL94-V0 material. It is fitted with adhesive under the luggage rack, with no change to the seat and no cables.

One or two radar units

Like a prism, the front of the housing has faces that point in different directions. Behind them sit one or two complete radar units, each aimed at its own seat:

  • Single: one radar unit, for a single seat.
  • Double: two radar units, for a double seat, each pointing at one of the two seats.

Each radar unit is complete in itself: a radar board, a LoRaWAN board and its own 2,500 mAh lithium manganese dioxide (LiMnO₂) battery in an aluminium cradle. It is a LoRaWAN device of its own, with its own keys and its own NFC area. A double Prism is therefore two devices in one housing.

  • The radar board runs the radar firmware and does the measuring, with the Adv_Seating radar method (see How a seat is judged). It has no VSM application.
  • The LoRaWAN board runs the firmware and a VSM application. It handles the network, decides what to send and when, and measures the temperature.

Prism has the same radar board, LoRaWAN board and firmware as Puck Radar, with a VSM application of its own.

Mounting variants

The back of Prism is either flat, or a wedge at one of several angles. The wedge matches the angle of the luggage rack and the position of the sensor, so that each radar beam points at its seat. With single and double sensors, standard and first class, and left and right, there are 13 mounting variants. Which variant goes where is decided for each seat layout when SeatSense is planned.

Each radar unit works with any LoRaWAN network server (LoRaWAN 1.0.4, class A, OTAA). What its LoRaWAN board sends, and when, is decided by an application running on Sensative’s Virtual Sensing Machine (VSM). This manual describes the application Seat-occupancy R30–R33, which can be configured, and replaced by a newer version, over the air or with NFC. Sensative can also offer alternative VSM applications for Prism; see Which application is in the sensor.

What’s in the box

  • Prism in the chosen mounting variant, with the adhesive already on the back

The keys (DevEUI and AppKey) for each radar unit come with the delivery information. The installation jig is used by the SeatSense installers and is not part of the delivery.

Parts of the sensor

Prism seen from the front, and from two sides
Prism from the front and from two sides. The dots on the edge mark the radar units: one dot for unit 1, two dots for unit 2. The label with the model, region and serial numbers is on the back.

2Before you start

A LoRaWAN sensor needs a little more preparation than a sensor that pairs with a hub. Have this ready first:

Each radar unit in Prism sends by radio to a gateway, the gateway to the network server, the network server to your application; settings and radar commands go back as downlinks

You need

  • LoRaWAN coverage where the train runs: gateways on board or along the track, online
  • An account on a LoRaWAN network server, with the gateways added to it
  • The keys for each radar unit: its DevEUI and AppKey, from the delivery information. The JoinEUI is the same for all Prism, Puck and Square sensors: 70B3D52C0001D4C3.
  • An Android phone with NFC is recommended. It starts the radar units, and runs the two apps you use on site: Hugin (NFC, for the LoRaWAN board; needs an Yggio user account, with the units registered to your organisation) and SweIoT Toolbox (Bluetooth, for the radar board; free on Google Play). Both are for Android only, and with Prism they are a great help in setting the radar up correctly, especially for a new seat layout. An iPhone can start the units with an NFC reading app (see Finding the NFC antennas), but cannot run the apps.
  • A payload decoder for Sensative VSM sensors (see Decoding the messages). In SeatSense, Yggio decodes the messages and builds the seat map.
  • The installation jig and the seat layout, which tell which mounting variant goes where

Choosing the place

  • Under the luggage rack, above the seat, in the position the seat layout calls for. Each radar beam must point at its own seat.
  • A clear view: nothing should stand between the radar and the seat, such as a bag strap, a sign or a cable tray.
  • A clean, dry, smooth surface for the adhesive.
  • Radio: mounting on metal is fine, but do not enclose Prism in metal: metal stops both the radio and the radar. The gateway must be within reach, on board or along the track. Check the signal at the final spot (step 4).
A Prism under the luggage rail, looking down at the seat
Prism under the luggage rail, looking down at the seat.

Finding the NFC antennas

Each radar unit has its own NFC area, on the front face in front of it. NFC only reaches a couple of centimetres, so lay the phone flat against the face, antenna over antenna:

The two NFC areas of a double Prism, marked with red circles on the front faces, with arrows from the dots on the edge
The NFC areas (red circles) are on the front faces, opposite the dots on the edge: in front of one dot for unit 1, in front of two dots for unit 2.
  • On Prism: on the front face opposite the dots on the edge. One dot is radar unit 1, two dots radar unit 2. A single Prism has one unit.
  • On an Android phone (recommended): switch NFC on, and turn on vibration or a sound for NFC in the phone’s settings, so that the phone tells you as soon as it has found the sensor. The antenna is usually on the back, near the top, often close to the camera, but it varies between models: the phone’s manual or the maker’s website shows where it is. If you cannot find it, move the back of the phone slowly over the face until the phone vibrates.
  • Take off the phone case: a protective case, especially a thick one or one with metal or a magnet, can make it hard to get NFC contact.
  • Then hold it still: to start a join, keep the phone still for about 5 seconds. With the Hugin app, keep it there until the app has finished.
  • On an iPhone: use an NFC reading app, such as NFC Reader & Scanner from the App Store. Open it and tap its NFC button, so that it shows Ready to Scan, then hold the top edge of the back of the iPhone still against the NFC area. The iPhone NFC join guide (PDF) shows each step with pictures.

3Step by step: from box to ready

7 steps. Register the radar units in the network server before you hold the phone to them. Then join them, fit Prism, and tune and test each seat.

1

Unpack

Check that each Prism is the right mounting variant for its seat, and find the keys for each radar unit. The units sleep until they meet an NFC field.

2

Register the radar units in the network server

  1. Add a new end device in your network server for each radar unit, with activation OTAA. A double Prism is two devices.
  2. Use these LoRaWAN settings: MAC version 1.0.4, regional parameters RP002-1.0.3, max EIRP 14 dBm, and the frequency plan for your region.
  3. Enter the DevEUI and the AppKey from the delivery information, and the JoinEUI 70B3D52C0001D4C3. Check them carefully: one wrong character and the join fails.
  4. Set up decoding of the messages (see Decoding the messages).
Done when: the device is listed in the network server, waiting for its first join.
3

Join the network with NFC

Lay the phone flat on the NFC area of each unit in turn, and keep it still for about 5 seconds: that starts the join (see Finding the NFC antennas, also for iPhone).

Done when: the network server shows the join of each unit, usually within two minutes.
If the network is not yet reachable, a unit tries again every 5 hours (the Time between join retries setting). A new NFC touch starts an attempt at once.
4

Check the signal where it will sit

Put the sensor at the place where it will be mounted, and look at its messages in the network server: the join, and the first reports.

Good: the link must carry at least SF9. As a rule of thumb, look for an SNR above −5 dB and an RSSI above −115 dBm. That leaves a margin to the SF9 limit (about −12.5 dB SNR).
A weaker link forces the network server’s adaptive data rate (ADR) onto SF10–SF12. Each message then takes much longer to send, which costs battery and capacity. If the sensor is still on SF10–SF12 a day after installation, improve the link: move the gateway or the sensor, or add a gateway.
5

Install

  1. Clean the mounting surface under the luggage rack with a mixture of isopropyl alcohol and water, and let it dry.
  2. Place Prism in the installation jig, which sets the position and direction over the seat.
  3. Peel the film off the adhesive and press Prism firmly in place.

With the jig, fitting takes less than 30 seconds per seat.

An installer fitting Prism sensors under the luggage rack of a train, with a laser-guided installation jig
Fitting Prism under the luggage rack with the laser-guided jig.
6

Tune and test

The radar must be tuned to each seat layout: what counts as a person, and what is the seat or a fixed part of the carriage. In SeatSense, this is done for each seat layout from Yggio, over LoRaWAN.

To see what the radar sees at a seat, where the echoes are and how strong, make a scan with meth_cmd (see Radar commands), or try the settings on site with SweIoT Toolbox. Scans are also what lets an IoT platform such as Yggio calibrate mounted sensors automatically: it reads the scan, finds the seat and any fixed reflectors, works out the settings, and sends them back as radar commands.

Then test each seat: sit down, and get up again.

Done when: the seat changes to occupied soon after someone sits down, and back to free soon after they leave.
The radar command test:10 makes the radar measure every 10 seconds for 10 minutes, so you can see the result at once.
7

Ready

  • Each radar unit registered in the network server, with the JoinEUI and the right region
  • Each unit joined with NFC, and the messages decoded
  • Signal checked at the final spot: SF9 or better
  • Prism fitted with the jig, each beam pointing at its seat
  • Radar tuned for the seat layout
  • Occupied and free tested on each seat

4Using the sensor

The radar board measures; the VSM application on the LoRaWAN board decides what to send. The settings named in bold are listed in the settings table.

How a seat is judged

Prism uses the Adv_Seating radar method, an extended seating method made for demanding occupancy uses:

  • Occupied or free: the radar looks for a person in the seat, and tells an occupied seat from an empty one and from fixed parts around it.
  • No false changes: a seat changes state only when several measurements in a row agree, so someone passing by, or leaning in for a moment, does not change it.
  • Quiet when nothing happens: the radar measures often only while a change is being confirmed, which saves battery, and Prism reports only when the state of the seat changes.
  • Wheelchair spaces: in wheelchair mode, Prism tells a wheelchair from another object, such as luggage, and reports every measurement.

How quickly a seat changes state, and what counts as a person, are set for each installation.

What it reports

  • Occupied: 1 or 0, when it changes. In wheelchair mode, also object: 1 when something other than a wheelchair is there.
  • Distance and echo strength: with the default Debug level (1), the distances and strengths of the echoes the method uses are sent with each change of the occupied state. They help when tuning. With 2, they are also sent on every change of the internal state, which costs more radio time; with 0, not at all.
  • Temperature: off by default. Set the Temperature Interval to send it, for example every 60 minutes.
  • Battery: every 8 hours by default (the periodic reports interval), the unit sends the battery voltage, with a counter that goes up by one each time. A single low value is normal, and so is a lower voltage in the cold.

Night mode

When the train is out of service, Prism can measure and send less. Set Night mode start and Night mode end in minutes after midnight UTC, for example 1,320 (22:00 UTC) and 300 (05:00 UTC). During night mode the radar measures five times less often, and a message that is not acknowledged is sent again at most once an hour (the night resend time). If start and end are the same, night mode is off, which is the default. Night mode follows the unit’s clock, which counts in UTC and is set from the network: allow for your time zone and for summer time.

Network

  • Confirmed messages: the occupied state, the object and the distances are acknowledged by the network server. If no acknowledgement arrives, the unit sends them again, waiting at least 80 seconds and at most 4 hours between tries (Min and Max time between ReSend tries).
  • Joining: if a unit is not joined, it tries to join every 5 hours (Time between join retries), and at least once a day. An NFC touch starts a join attempt at once. The radar is switched off while the unit is not joined.
  • Losing the network: a unit gives the network up and joins again if it has heard nothing from it for the Time from last RX before unjoin (15 days by default), or for the Downlink Timeout (see Device registers).
  • Adaptive data rate: the unit sets its own data rate and transmit power (sensor ADR, not the network server’s ADR), and the application damps and limits those adjustments. That matters on a train: when the power is switched off, the on-board gateway goes off too, and the unit finds its own way back to a working data rate when the gateway returns, without waiting for the network server’s adjustments. In the same way, when the train stands in the depot at night, the unit can turn up its own spreading factor and power to reach the depot’s gateway, further away than the one on board.

Decoding the messages

The messages are compact binary records, and their meaning depends on the application version. Decode them with a VSM-aware decoder:

  • Yggio decodes them with its built-in VSM translator, and keeps track of each sensor’s application version.
  • Other platforms: use Munin, Sensative’s open-source MQTT client. It decodes the messages for any network server, keeps the device state the decoder needs and the device time up to date.
  • Your own integration: the open-source VSM translator is the decoder that Munin uses, available as a Node package. It needs two things from you: it must be able to store at least the rulesCrc32 for each sensor between messages, and it must be kept up to date, since new application versions are released without notice.

Changing the settings

There are two kinds of settings: the VSM application’s settings on the LoRaWAN board (night mode, temperature, debug level, network), and the radar settings on the radar board (the seat tuning). Both can be changed over the air, and on site with an app. Each radar unit is set on its own.

Over LoRaWANOn site
Application settings (LoRaWAN board)Downlinks on port 2 or port 7The Hugin NFC app (Android), for example with a QR code from the VSM Configuration Tool
Radar settings (radar board)Radar commands on port 48The SweIoT Toolbox app (Android), over Bluetooth
Software updatesNew VSM applicationsHugin: the LoRaWAN board’s firmware and VSM application. SweIoT Toolbox: the radar firmware, which can only be updated this way

The VSM Configuration Tool makes the downlinks. Pick the application by name and version, or by the rulesCrc32 from the unit’s port 15 message (see Which application is in the sensor), choose Custom, and set the values. Take the result as downlinks for port 2 and port 48, as a single port 7 payload, or as a QR code for the Hugin app.

Prism is a class A device: each unit picks up one downlink right after each uplink. Since Prism sends only when a seat changes state, a downlink can wait until someone sits down or gets up, and longer on a busy network. An NFC touch makes the unit send at once.

5The apps: Hugin and SweIoT Toolbox

Hugin NFC app (LoRaWAN board)

Hugin is an optional Android app for working with the sensor on site, over NFC. It needs an Android phone with NFC and GPS, and an Yggio user account. The sensor must also be registered in Yggio with your organisation as its owner: Hugin checks this with Yggio before it lets you work with the sensor. Hold the phone to the sensor as in Finding the NFC antennas. The app then shows the serial number, the application and its version, the state (for example joined), battery, link and region information, and the DevEUI. Depending on your rights in Yggio, it can read and apply configuration profiles, including one scanned as a QR code from the VSM Configuration Tool, and update the device time.

Hugin also updates the LoRaWAN board’s firmware and VSM application. In a double Prism, work with each unit on its own NFC area.

Installation, sign-in, flashing and troubleshooting are in the Hugin NFC app manual.

SweIoT Toolbox (radar board)

SweIoT Toolbox is an Android app, on Google Play, that talks to the radar board over Bluetooth. There is no iPhone version. Use it on site to read and change the radar settings, and to update the radar firmware, which can only be updated this way.

  • Start the radar’s Bluetooth with Hugin: Bluetooth on the radar board is off most of the time, for three reasons: it saves battery, it keeps radio traffic in the air down, and it limits who can reach the radar board, in line with the EU Cyber Resilience Act. Only the registered owner of the unit, or users the owner has given the right, can switch Bluetooth on. To start it for SweIoT Toolbox, hold the phone to a unit’s NFC area with the Hugin app open and press Activate Radar Bluetooth: its radar board then advertises for about 20 seconds, so connect from SweIoT Toolbox within that time. You can also switch it on remotely, with a LoRaWAN downlink, for example from Yggio: set Radar BT Advertise trigger to 1 (see Settings). In Yggio, only users with the right to the unit can send it.
  • In the app: SweIoT Toolbox guides you through the radar method and its main settings. Its Commands and Logs menu takes the same radar commands as LoRaWAN.

6Maintenance and removal

Battery

Each radar unit has its own built-in 2,500 mAh LiMnO₂ battery and lasts about ten years with the standard SeatSense settings. Measuring more often, a higher debug level and a weak link shorten it. The battery voltage arrives with the periodic reports (see What it reports).

Cleaning

Wipe Prism with a dry or slightly damp cloth. Do not cover the front faces: the radar looks out through them.

Removing Prism

Slide dental floss between Prism and the surface and saw gently through the adhesive.

Moving to another network server

Delete each unit from the old network server and add it to the new one. The units then lose the old network and join the new one. With the Hugin app you can restart a unit at once instead (Toggle On/Off), but that also resets any custom settings.

Storage and disposal

  • Store unused sensors at +10 to +30 °C.
  • The batteries are lithium manganese dioxide (LiMnO₂), one of the most stable lithium chemistries, and are not replaceable. Do not open Prism, and do not puncture it or heat it above +80 °C.
  • When the batteries are empty, dispose of the whole sensor as a battery, for recycling. Near the end of its life a battery normally swells a little; this is expected.

7Troubleshooting

ProblemWhat to do
An empty seat is reported occupiedA fixed echo near the seat, such as a frame or an armrest, is taken for a person. Make a scan of the seat (see Radar commands) and adjust the tuning for that seat layout.
An occupied seat is reported freeThe person’s echo is too weak or drops out. Make a scan with someone in the seat, and adjust the tuning for that seat layout.
The seat changes state slowlyThe measuring intervals are set to save battery. Shorter intervals react faster, and cost battery.
The wrong seat is detectedCheck that the mounting variant and the position fit the seat layout, and that each unit is registered for the right seat (see Finding the NFC antennas for which unit is which).
Only one unit of a double Prism reportsEach unit joins on its own. Register both units, and touch each NFC area in turn.
Nothing happens when I hold the phone to itCheck that NFC is on and the phone case is off. Lay the phone flat on the NFC area of the unit and move it slowly until it signals contact, then hold it still.
A radar command is answered with *The command was not accepted. Check its format and values, and read the current values with 7?.
SweIoT Toolbox cannot find the radarStart Bluetooth with the Hugin app on the unit’s NFC area, which needs access rights to the unit in Yggio, then connect within about 20 seconds; or send the Radar BT Advertise trigger. SweIoT Toolbox is Android only.
Join Request in the network server, but no Join AcceptCheck the keys of that unit, the JoinEUI 70B3D52C0001D4C3, the LoRaWAN version (1.0.4), the regional parameters (RP002-1.0.3) and the frequency plan (EU868).
“MIC mismatch”The keys are wrong: check that they belong to this unit. A double Prism has two sets of keys.
Messages arrive, but the decoder shows no readingsThe decoder has usually missed the application identity: send 00 on port 15, and check that the decoder is up to date (see Which application is in the sensor).
A new setting has no effectA downlink arrives only after the unit’s next message, which may wait until the seat changes state. Touch the unit with NFC to make it send, and check that the downlink was made for the rulesCrc32 the unit reports.
Messages missing or irregularCheck RSSI and SNR, and the gateway coverage along the train. Some channels can also be disturbed by interference on the same frequency band.

8Technical reference

For integrators. The values below are for the application Seat-occupancy R30–R33, and apply to each radar unit. Other versions can differ: check the VSM application documentation or the VSM Configuration Tool for yours.

Which application is in the sensor

Right after it has joined, each unit sends its application identity, the rulesCrc32, on port 15. The decoder uses it to pick the right translation, and you need it to make the right downlinks. For this application it is:

ApplicationSeat-occupancy
VersionR30–R33
rulesCrc323297213463 (hex C4877C17)

If you missed the message, send 00 on port 15 and the unit sends its identity again. The Hugin NFC app also shows the application and its version on site.

Settings, ids and defaults belong to one application version. If your unit reports another rulesCrc32, look that number up in the VSM application documentation or the VSM Configuration Tool instead of using the tables here.

Alternative applications: besides Seat-occupancy, Sensative can offer other VSM applications for Prism’s LoRaWAN board. They are available in the Hugin NFC app (Android) and can also be loaded over LoRaWAN.

LoRaWAN and ports

LoRaWANMAC 1.0.4, regional parameters RP002-1.0.3, class A, OTAA, max EIRP 14 dBm
JoinEUI70B3D52C0001D4C3 (all Prism, Puck and Square sensors)
PortDirectionWhat it carries
1UplinkReadings and states (see Messages)
11UplinkThe same outputs in compressed form
15UplinkApplication identity (rulesCrc32), first thing after a join
15Downlink00 asks the unit to send its application identity again
2DownlinkApplication settings and read requests (see Settings on port 2)
2UplinkThe unit’s answer: the values it now has
7DownlinkA whole configuration in one payload, radar commands included (see A whole configuration on port 7)
7UplinkThe status of that configuration: None, Applied, Error or Dirty
48DownlinkA radar command, as text (see Radar commands)
32UplinkThe radar board’s answer, as text

Messages

Each output has an id and a scale. “Confirmed” outputs are acknowledged by the network server.

OutputIdSize and scaleUnitConfirmedSent
occupied801 byte1 = occupied, 0 = free (wheelchair mode: 1 = wheelchair)YesWhen it changes
object811 byte1 = another object (wheelchair mode)YesWhen it changes
distance, amplitude91 902 bytes each; distance × 0.01m, echo strengthYesWith Debug level 1 or 2
distance2, amplitude293 922 bytes each; distance × 0.01m, echo strengthYesA second echo; with Debug level 1 or 2
stateB62 bytesinternal state of the method, for tuningNoWith Debug level 2
tempB02 bytes, × 0.01°CNoEvery Temperature Interval (off by default)
radarVoltage_VB52 bytes, × 0.001VNoWith the periodic reports
periodicReportsCounterBA4 bytescountNoWith each periodic report
nfcContactCount984 bytescountYesAfter an NFC touch

Settings

The defaults are the values a unit starts with. The id is what a port 2 downlink uses. Values are sent in the steps shown: a setting in steps of 0.01 is sent as a hundred times its value.

SettingName in the applicationIdWhat it doesUnitRangeDefault
Night mode startnightmodeStartB3When night mode starts, in minutes after midnight UTC. Equal to the end = off.minutes0–1,4400
Night mode endnightmodeEndB4When night mode ends, in minutes after midnight UTC.minutes0–1,4400
Time between ReSend tries in night modeminResendWaitTimeNightBDWait between tries for an unacknowledged message during night mode.seconds3,600
Min time between ReSend triesminResendWaitTimeBBShortest wait between tries for an unacknowledged message.seconds0–65,00080
Max time between ReSend triesmaxResendWaitTimeBCLongest wait between tries.seconds14,400
Debug leveldebugLevelA50 = occupied and object only. 1 = also the distances and echo strengths when they change. 2 = also on every change of the internal state, for a limited time.level0–21
Temperature IntervaltemperatureReportIntervalB1How often the temperature is sent. 0 = off.minutes0–32,7670
Temperature CalibrationtemperatureUserCalibrationB2Offset added to the temperature.°C, steps of 0.01−10 to +100
Interval between periodic reportsperiodicReportsIntervalA4How often the battery voltage is sent.hours0–2508
Radar BT Advertise triggerradarBtAdvertiseTriggerA31 makes the radar board advertise on Bluetooth, for SweIoT Toolbox.on/off0–10
Time between join retriestimeBetweenJoinAttemtsB8How long a unit waits between join attempts when it is not joined.minutes0–32,767300
Time from last RX before unjointimeBeforeUnjoinB9How long a unit goes without hearing the network before it joins again.hours0–32,767360
Max Power IndexmaxPowerIndexA2Highest LoRaWAN power index the unit may use, join included.index0–1612
LoRaWAN power filter factor uppowerIndexFilterFactorUpA0How slowly the unit follows its own adaptive data rate towards a slower setting. 1 = no filter, 10 = very slow.number1–5010
LoRaWAN power filter factor downpowerIndexFilterFactorDownA1The same, towards a faster setting.number1–503

Device registers

These belong to the firmware rather than to the application, but can be changed the same way. Leave them as they are unless you have a reason.

RegisterNameIdWhat it doesUnitRangeDefault
Device Time Max AgeGPS_TIME_MAX_AGECDHow long the unit trusts its clock, which night mode uses. From 80 % of this time, it asks the network for the time with the standard DeviceTime request (DeviceTimeReq); the network server must answer DeviceTime requests.seconds0–4,294,967,2950
Downlink TimeoutLINKCHECK_TIMED0How long the unit goes without hearing anything from the network before it gives the network up. From half of this time, every uplink is confirmed; from 80 %, it also sends link checks of its own.seconds300–2,592,00086,400
TX Power RangeTX_POWER_RANGED8The power index range for fast adaptive data rate. Turning it up costs battery.2 bytes0–65,535

Released profiles

No ready-made profiles are released for this application. A unit starts with the defaults in the settings table; to change them, use Custom in the VSM Configuration Tool.

Settings on port 2

A port 2 downlink is a list of records of 5 bytes each: one byte for the setting’s id, then the value as a signed 32-bit integer, most significant byte first. The unit applies the values and answers on port 2 with the values it now has.

The ids belong to one application version. Another version can use the same id for a different setting, so a downlink made for one version can change the wrong setting in another. Always make the downlink for the rulesCrc32 the unit itself reports.

Reading values

A port 2 downlink of one to four bytes is a read request: the unit sends back the current value of each id in it.

Port 2 downlinkThe unit answers with
04Current temperature, in hundredths of a degree
B3The Night mode start now set (any setting id works the same way)

A whole configuration on port 7

The VSM Configuration Tool can also pack a configuration into a single port 7 payload. It starts with the application’s CRC and ends with a checksum of the configuration (configCrc32). The sensor reports the result on port 7: None, Applied, Error or Dirty.

Radar commands

The radar board takes short text commands. Send each as a port 48 downlink, in ASCII; the VSM Configuration Tool can make them for you. The radar board answers on port 32, as text: an answer starting with = means the command was accepted, * means an error. About an hour after a change, the radar board also sends the settings it now runs.

CommandWhat it does
7?Read the settings of the Adv_Seating method
7:valuesWrite the settings of the Adv_Seating method, for example the tuning of a seat layout. An empty position keeps that setting
sys?Read the system settings; position 1 is the method (7)
measureMeasure once, now
test:10Test mode: measure every 10 s for 10 minutes, then go back to normal
meth_cmd:2,0.3,1.7,28A scan from 0.3 to 1.7 m in 28 sections of 5 cm: the strongest echo in each, divided by 10, from the latest measurement
versionRead the radar firmware version
restartRestart the radar board
factoryReset all radar settings to the factory defaults. The seat tuning is lost

Leave the system settings as delivered; in particular, never change the transport setting (system position 7), which can cut the radar board off from LoRaWAN.

Worked example 1: Night mode from 22:00 to 05:00 UTC

Measure and send less while the train is out of service. Both examples were made in the VSM Configuration Tool for rulesCrc32 3297213463. Send either the downlinks in order, or the single port 7 payload, not both, to each radar unit.

SettingValueSent asRecord
Night mode start22:00 UTC1,320B3 00 00 05 28
Night mode end05:00 UTC300B4 00 00 01 2C
PortDownlink (hex)Base64
2B4 00 00 01 2C B3 00 00 05 28tAAAASyzAAAFKA==
Or 7C4 87 7C 17 02 0A B4 00 00 01 2C B3 00 00 05 28 00 D6 54 6C 4D

Worked example 2: The temperature every hour, and less radio traffic

Send the temperature every 60 minutes, and send only the occupied state, without the distances and echo strengths (Debug level 0).

SettingValueSent asRecord
Temperature Interval60 min60B1 00 00 00 3C
Debug level00A5 00 00 00 00
PortDownlink (hex)Base64
2A5 00 00 00 00 B1 00 00 00 3CpQAAAACxAAAAPA==
Or 7C4 87 7C 17 02 0A A5 00 00 00 00 B1 00 00 00 3C 00 D5 4C 3B 3A

9Specifications

Radar60 GHz coherent radar (Acconeer A111), about ±10° beam, 0.2–6.8 m
Radar units1 or 2, each with its own radar board, LoRaWAN board and battery
Radar methodAdv_Seating (radar firmware 2.24): occupied or free, wheelchair or other object
Other sensorsTemperature
RadioLoRaWAN 1.0.4, class A, OTAA; JoinEUI 70B3D52C0001D4C3; one device per radar unit
Frequency planEU868
ConfigurationBoth boards over LoRaWAN; on site with Hugin (NFC, Android) and SweIoT Toolbox (Bluetooth, Android)
UpdatesLoRaWAN board: firmware and VSM application with Hugin, VSM applications also over LoRaWAN. Radar board: firmware only over Bluetooth, with SweIoT Toolbox
ApplicationVSM application Seat-occupancy (R30–R33)
BatteryBuilt-in LiMnO₂, 2,500 mAh per radar unit, in an aluminium cradle; about ten years with the standard SeatSense settings
StandardsEN 50155 (rolling-stock electronics), EN 50121-3-2 (EMC), EN 61373 (shock and vibration); UL94-V0 material
IP ratingIP54
Operating temperature−20 to +60 °C
Storage temperature+10 to +30 °C
Dimensions82 × 82 × 27 mm
VariantsSingle or double; flat back or wedge; 13 mounting variants
MountingAdhesive, pre-applied; installation jig
AvailabilityAs part of SeatSense

10Support

Sources: VSM Configuration Tool, application data for Seat-occupancy (read 31 October 2026); VSM application documentation on GitHub (3297213463-Seat-occupancy); PUCK Radar Sensor User Manual, radar firmware 2.24 (Adv_Seating); Prism product sheet, Rev B; VSM translator (open source); specifications from the sensative.com product data.