MySensors

MySensors is a free and open source DIY (do-it yourself) software framework for wireless IoT (Internet of Things) devices allowing devices to communicate using radio transmitters. The library was originally developed for the Arduino platform.

The MySensors devices create a virtual radio network of nodes that automatically forms a self healing mesh like structure. Each node can relay messages for other nodes to cover greater distances using simple short range transceivers. Each node can have several sensors or actuators attached and can interact with other nodes in the network.

The radio network can consist of up to 254 nodes where one node can act as a gateway to the internet or a home automation controller. The controller adds functionality to the radio network such as id assignment and time awareness.

Supported hardware platforms
The framework can natively be run on the following platforms and micro controllers.
 * Linux / Raspberry Pi
 * ATMega 328P
 * ESP8266
 * ESP32
 * ARM Cortex M0 (mainly Atmel SAMD core as used in Arduino Zero)

Communication options
MySensors supports wireless communication using the following transceivers: Wired communication over:
 * NRF24L01
 * RFM69
 * RFM95 (LoRa)
 * WiFi (ESP8266 & ESP32)
 * MQTT
 * Serial USB
 * RS485

Security
The wireless communication can be signed using truncated HMAC-SHA256 either through hardware with Atmel ATSHA204A or compatible software emulation and optionally encrypted. The implementation is timing neutral with whitened random numbers, attack detection-and-lockout and protects against timing attacks, replay attacks and man in the middle attacks.

Over the air firmware updates
The firmware of a MySensor node can be updated over the air using a few different bootloader options:
 * In place overwriting of flash memory using MySensorsBootloaderRF24.
 * Using external flash with the DualOptiBoot.
 * For ESP8266 nodes using the built in OTA feature.