The UnaProtect uses a magnetic sensor to detect opening and closing doors, windows, or drawers. Following this guide, you will be able to decode the data from the UnaProtect to capture and count the reed switch on/off change.
The functionality of the UnaProtect depends on its Mode configuration, it can be:
Timer Mode: Count reed switch change over a period of time.
Event Mode: Capture reed switch on/off change.
Requirements
An active Ubidots account
An active Sigfox account.
UnaProtect sensor already transmitting data to Sigfox and Ubidots (See Plugins: Connect Sigfox with Ubidots)
1. Understanding the data
Here’s how the data is being decoded according to the documentation to capture or count the reed switch changes. It is important to keep in mind that the decoding depends on the mode in which the sensor is configured.
1.1. Timer mode data
The following payload structure is an example of the data being sent from Sigfox to Ubidots specifically for an UnaProtect sensor configured for Timer Mode.
{
"device_id": "410902"
"data": "018b000b000a000b000a00b00a",
}
Sample data from Sigfox Sensor: 018b000b000a000b000a00b00a
0x01
- Mode Byte #00x8b
- Interval Byte #10x00
- Activity 1/10 Byte #20x0b
- Activity 2/10 Byte #30x00
- Activity 3/10 Byte #40x0a
- Activity 4/10 Byte #50x00
- Activity 5/10 Byte #60x0b
- Activity 6/10 Byte #70x00
- Activity 7/10 Byte #80x0a
- Activity 8/10 Byte #90x0b
- Activity 9/10 Byte #100x0a
- Activity 10/10 Byte #11
Bytes in Total: 12
1.2. Event mode data
The following payload structure is an example of the data being sent from Sigfox to Ubidots specifically for an UnaProtect sensor configured for Event Mode.
{
"device_id": "410902"
"data": "0201",
}
Sample data from Sigfox Sensor: 0201
0x02
- Mode Byte #00x01
- State Byte #1
Bytes in Total: 2
NOTE: The state byte represents the object current status, It can be:
0x01
: Closed0x02
: Opened
2. Decoding function at Sigfox Plugin
Step 1: Go to the Sigfox plugin and open the Decoder option.
Step 2: Find the Decoding function Section. Here’s where we are going to start decoding the data coming from the UnaProtect.
Step 3: Copy and paste the code below into the code editor replacing the decode_data()
function.
def decode_data(hex_array):
payload = {}
status = hex_array[0]
if status == 0 or status == 4:
voltage = (int(hex_array[1:3].hex(), 16))/1000
payload["voltage"] = voltage
elif status == 1:
payload["activity_count"] = int(hex_array[2:12].hex(), 16)
elif status == 2:
payload["state"] = int(hex_array[1:2].hex, 16)
return payload
Save the code by clicking on the "SAVE & MAKE LIVE" button.