This repository has been archived and is now read-only. It will continue to be available for viewing purposes, however caution should be used as security fixes are no longer being applied.
The quality of sensor data is fundamental for driving IoT adoption. Since IoT sensors are often made of low-cost components, deployed in-the-wild and in harsh environments, they are prone to failures leading to faulty or dirty data. The effect of this faulty data will lead to the well-known garbage-in / garbage-out process, leading to cascading ill-effects upstream and at times catastrophic decisions.
Verified Telemetry (VT) is a state-of-the-art solution to determine the health of the sensor, i.e., working or faulty, which is consequently used to determine the quality of the sensed data. This is achieved by devising an intelligent “sensor fingerprint”, a set of unique electrical characteristics that differs between working and faulty sensors. The fingerprints can detect faults for a wide variety of off-the-shelf sensors and can be easily implemented with lightweight software code running on the IoT device. This novel approach empowers customers with a reliable and automated way to remotely measure and observe the health of the sensor in real-time alongside the data collected. The data associated with a validated fingerprint results in Verified Telemetry.
Verified Telemetry uses two technologies - FallCurve for analog sensors, CurrentSense for Digital Sensors.
It reads the
Refer to the Verified Telemetry API for details on the VT Azure RTOS and FreeRTOS SDKs and how they are used.
Verified Telemetry is designed to run on resource contrained MCUs, flash and RAM is limited. Below is our resource requirements for Verified Telemetry for a size optimized (-Os) binary:
Type | Size |
---|---|
Flash | 13.0 kB |
RAM | 4.6 kB |
Verified Telemetry Library provides capabilities for interaction using a Plug and Play Model. Details about this model can be found here.
We provide multiple device and solution samples to showcase the usage of Verified Telemetry. Please follow the samples below to see Verified Telemetry in action.
To get you started with the device, refer to the following device samples for Azure RTOS and FreeRTOS:
To get you started with the solution, refer to the following Grafana sample:
- Grafana solution sample showcases how Verified Telemetry can be utilized in real world scenarios.
Verified Telemetry utilizes CMake for building the project. To integrate Verified Telemetry into your projects build system follow these steps:
-
Using Git, submodule VT into your project:
git submodule add https://github.com/Azure/Verified-Telemetry.git
-
In your CMake, set
VT_MIDDLEWARE_RTOS
to eitherAZURE_RTOS
orFREERTOS
depending on which middleware is appropriate for your project:set(VT_MIDDLEWARE_RTOS "AZURE_RTOS")
-
In your CMake, add the VT directory:
add_subdirectory(verified-telemetry)
-
In your CMake, add VT into your targets link library:
target_link_libraries(${PROJECT_NAME} az::iot::vt )
Verified Telemetry requires platform specific functions to be defined at the application layer and then passed to VT during initialization.
NOTE
- Refer to vt_device_driver.h for function declarations
- Refer to vt_device_driver_template.c for a template for implementation of the platform functions.
- Samples for implementation of platform functions can also be found in the Device samples.
The application developer will implement the following functions:
Function | Implementation Requirements | FallCurve Required? |
---|---|---|
adc_single_init | Initialize ADC when the controller and channel are passed as arguments | REQUIRED |
adc_single_read | Return ADC data when the controller and channel are passed as arguments | REQUIRED |
adc_buffer_read | Return buffer filled with ADC data using DMA/non-blocking read when the controller, channel, sampling frequency and sample length are passed as arguments | REQUIRED |
gpio_on | Set a GPIO pin HIGH when the GPIO port and pin are passed as arguments | REQUIRED |
gpio_off | Set a GPIO pin LOW when the GPIO port and pin are passed as arguments | REQUIRED |
tick_init | Initialize a tick counter with a time resolution that is passed as an argument | REQUIRED |
tick_deinit | De-initialize a running tick counter | REQUIRED |
tick | Return the present tick value | REQUIRED |
interrupt_enable | Enable global interrupts on the MCU | OPTIONAL |
interrupt_disable | Disable global interrupts on the MCU | OPTIONAL |
If you need support, please see our SUPPORT.md file.
For details on contributing to this repository, see the contributing guide.
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets Microsoft's definition of a security vulnerability, please report it to the Microsoft Security Response Center.
Verified Telemetry are licensed under the MIT license.