{
    "key": "neo-6m",
    "kind": "sensor",
    "model": {
        "aliases": [
            "neo-6m"
        ]
    },
    "driver": {
        "runtime": {
            "init": {
                "args": {
                    "port": "{serial_port}",
                    "baudrate": 9600
                },
                "class": "drivers.neo6m.NEO6M"
            },
            "apt_packages": [],
            "pip_packages": [
                "pyserial",
                "pynmea2"
            ],
            "python_module": "drivers.neo6m"
        },
        "targets": [
            "raspberrypi"
        ],
        "verified": {
            "by": null,
            "os": null,
            "date": null,
            "board": null,
            "reviewed_by": null,
            "evidence_url": null
        },
        "interface": "uart",
        "connection": {
            "pins": [
                {
                    "role": "tx",
                    "notes": null,
                    "required": true
                },
                {
                    "role": "rx",
                    "notes": null,
                    "required": true
                },
                {
                    "role": "pps",
                    "notes": "Pulse per second output. Optional, used for time discipline.",
                    "required": false
                }
            ],
            "supply_voltage": "3.3V or 5V",
            "level_shift_required": null
        },
        "constraints": {
            "warmup_seconds": null,
            "read_timeout_seconds": 5,
            "min_read_interval_seconds": 1
        },
        "failure_modes": [
            "Emits NMEA sentences continuously. Sentences must be parsed and validity flagged, because the module reports a position before it has a fix.",
            "A cold start needs several minutes of clear sky view. Indoors it will never fix and will emit valid-looking sentences with the void status flag set.",
            "Latitude and longitude in NMEA are degrees and decimal minutes, not decimal degrees. Publishing the raw field without conversion produces a position that is wrong by a predictable but large amount.",
            "On a Raspberry Pi the primary UART is shared with the serial console, which must be disabled before the port is usable."
        ]
    },
    "source": "platform-seed",
    "status": "draft",
    "platform": {
        "name": "u-blox NEO-6M GPS Module",
        "protocol": "uart",
        "readings": [
            {
                "slug": "latitude",
                "unit": "decimal degrees",
                "label": "Latitude",
                "data_type": "float",
                "range_max": 90,
                "range_min": -90,
                "unit_symbol": "°",
                "device_class": null,
                "decimal_places": 6,
                "threshold_crit_low": null,
                "threshold_warn_low": null,
                "threshold_crit_high": null,
                "threshold_warn_high": null
            },
            {
                "slug": "longitude",
                "unit": "decimal degrees",
                "label": "Longitude",
                "data_type": "float",
                "range_max": 180,
                "range_min": -180,
                "unit_symbol": "°",
                "device_class": null,
                "decimal_places": 6,
                "threshold_crit_low": null,
                "threshold_warn_low": null,
                "threshold_crit_high": null,
                "threshold_warn_high": null
            },
            {
                "slug": "speed",
                "unit": "kilometres per hour",
                "label": "Speed",
                "data_type": "float",
                "range_max": 999,
                "range_min": 0,
                "unit_symbol": "km/h",
                "device_class": "speed",
                "decimal_places": 1,
                "threshold_crit_low": null,
                "threshold_warn_low": null,
                "threshold_crit_high": null,
                "threshold_warn_high": null
            }
        ],
        "description": "UART GPS/GNSS receiver. Outputs NMEA sentences with latitude, longitude, altitude, speed and heading.",
        "sensor_type": "position",
        "manufacturer": "u-blox",
        "model_number": "NEO-6M",
        "datasheet_url": "https://www.u-blox.com/sites/default/files/products/documents/NEO-6_DataSheet_(GPS.G6-HW-09005).pdf",
        "read_interval_seconds": 1
    },
    "revision": 1
}