---
layout: page
title: "MySensors Device Tracker"
description: "Instructions on how to use MySensors to track devices in Home Assistant."
date: 2017-02-06 15:00 +0100
sidebar: true
comments: false
sharing: true
footer: true
logo: mysensors.png
ha_category: Presence Detection
featured: false
ha_release: "0.38"
ha_iot_class: "Local Push"
---

Integrates MySensors device trackers into Home Assistant. See the [main component] for configuration instructions.

The following sensor types are supported:

##### MySensors version 2.0 and higher

S_TYPE             | V_TYPE
-------------------|---------------------------------------
S_GPS             | V_POSITION

For more information, visit the [serial api] of MySensors.

### {% linkable_title MySensors 2.x example sketch %}

```cpp
/**
 * Documentation: http://www.mysensors.org
 * Support Forum: http://forum.mysensors.org
 *
 * http://www.mysensors.org/build/gps
 */

// Enable debug prints to serial monitor
#define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69

#include <MySensors.h>

#define SN "GPS Sensor"
#define SV "1.0"

// GPS position send interval (in milliseconds)
#define GPS_SEND_INTERVAL 30000
// The child id used for the gps sensor
#define CHILD_ID_GPS 1

MyMessage msg(CHILD_ID_GPS, V_POSITION);

// Last time GPS position was sent to controller
unsigned long lastGPSSent = -31000;

// Some buffers
char latBuf[11];
char lngBuf[11];
char altBuf[6];
char payload[30];

// Dummy values. Implementation of real GPS device is not done.
float gpsLocationLat = 40.741895;
float gpsLocationLng = -73.989308;
float gpsAltitudeMeters = 12.0;

void setup() {

}

void presentation() {
  sendSketchInfo(SN, SV);
  present(CHILD_ID_GPS, S_GPS);
}

void loop()
{
  unsigned long currentTime = millis();

  // Evaluate if it is time to send a new position
  bool timeToSend = currentTime - lastGPSSent > GPS_SEND_INTERVAL;

  if (timeToSend) {
    // Send current gps location
    // Build position and altitude string to send
    dtostrf(gpsLocationLat, 1, 6, latBuf);
    dtostrf(gpsLocationLng, 1, 6, lngBuf);
    dtostrf(gpsAltitudeMeters, 1, 0, altBuf);
    sprintf(payload, "%s,%s,%s", latBuf, lngBuf, altBuf);

    Serial.print(F("Position: "));
    Serial.println(payload);

    send(msg.set(payload));
    lastGPSSent = currentTime;
  }
}
```

[main component]: /components/mysensors/
[serial api]: http://www.mysensors.org/download
