{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "NMEA 2000 MQTT Message Schemas",
  "description": "JSON Schema definitions for all MQTT topics published by muxen-nmea2000",

  "definitions": {
    "metadata": {
      "type": "object",
      "description": "Common metadata for all PGN messages",
      "properties": {
        "rxDate": { "type": "string", "format": "date-time", "description": "ISO8601 formatted receive timestamp" },
        "rxTimestamp": { "type": "integer", "description": "Unix timestamp in seconds" },
        "expireAfterSec": { "type": "integer", "description": "Message expiration time in seconds", "default": 60 }
      },
      "required": ["rxDate", "rxTimestamp", "expireAfterSec"]
    },

    "pgn_base": {
      "type": "object",
      "description": "Base schema for all PGN messages. Topic: {prefix}/device/{addr}/pgn/{pgn}",
      "properties": {
        "data": { "type": "object", "properties": { "pgn": { "type": "integer" } }, "required": ["pgn"] },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["data", "metadata"]
    },

    "pgn_65256_vehicle_direction_speed": {
      "title": "PGN 65256 - Vehicle Direction/Speed",
      "description": "Topic: {prefix}/device/{addr}/pgn/65256",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 65256 },
            "compassBearing": { "type": "number", "description": "Compass bearing in degrees (0-360)" },
            "navSpeed": { "type": "number", "description": "Navigation speed in km/h" },
            "pitch": { "type": "number", "description": "Pitch angle in degrees" },
            "altitude": { "type": "number", "description": "Altitude in meters" }
          }
        }
      }
    },

    "pgn_65267_vehicle_position": {
      "title": "PGN 65267 - Vehicle Position",
      "description": "Topic: {prefix}/device/{addr}/pgn/65267",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 65267 },
            "latitude": { "type": "number", "description": "Latitude in degrees (-90 to +90)" },
            "longitude": { "type": "number", "description": "Longitude in degrees (-180 to +180)" }
          }
        }
      }
    },

    "pgn_126983_alert": {
      "title": "PGN 126983 - Alert",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 126983 },
            "sourceAddress": { "type": "integer" },
            "alertType": { "type": "integer" },
            "alertCategory": { "type": "integer" },
            "alertId": { "type": "integer" },
            "state": { "type": "string" },
            "priority": { "type": "string" },
            "silenced": { "type": "boolean" },
            "acknowledged": { "type": "boolean" },
            "escalated": { "type": "boolean" },
            "occurrenceNumber": { "type": "integer" }
          }
        }
      }
    },

    "pgn_126984_alert_response": {
      "title": "PGN 126984 - Alert Response",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 126984 },
            "sourceAddress": { "type": "integer" },
            "alertType": { "type": "integer" },
            "alertCategory": { "type": "integer" },
            "alertId": { "type": "integer" },
            "command": { "type": "string" }
          }
        }
      }
    },

    "pgn_126985_alert_text": {
      "title": "PGN 126985 - Alert Text",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 126985 },
            "sourceAddress": { "type": "integer" },
            "alertType": { "type": "integer" },
            "alertCategory": { "type": "integer" },
            "alertId": { "type": "integer" },
            "languageId": { "type": "integer" },
            "languageCode": { "type": "string" },
            "languageName": { "type": "string" },
            "textLength": { "type": "integer" },
            "text": { "type": "string" }
          }
        }
      }
    },

    "pgn_126992_system_time": {
      "title": "PGN 126992 - System Time",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 126992 },
            "sequenceId": { "type": "integer" },
            "source": { "type": "integer", "description": "Time source" },
            "date": { "type": "integer", "description": "Days since 1970-01-01" },
            "time": { "type": "number", "description": "Seconds since midnight" }
          }
        }
      }
    },

    "pgn_127237_heading_track_control": {
      "title": "PGN 127237 - Heading/Track Control",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127237 },
            "steeringMode": { "type": "string" },
            "turnMode": { "type": "integer" },
            "headingReference": { "type": "string" },
            "commandedRudderDeg": { "type": "number" },
            "commandedHeadingDeg": { "type": "number" },
            "commandedTrackDeg": { "type": "number" },
            "headingToSteerDeg": { "type": "number" },
            "rudderLimitExceeded": { "type": "integer" },
            "offHeadingExceeded": { "type": "integer" },
            "offTrackExceeded": { "type": "integer" },
            "override": { "type": "integer" },
            "rudderDirection": { "type": "integer" }
          }
        }
      }
    },

    "pgn_127245_rudder": {
      "title": "PGN 127245 - Rudder",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127245 },
            "instance": { "type": "integer" },
            "directionOrder": { "type": "string" },
            "angleOrderDeg": { "type": "number" },
            "positionDeg": { "type": "number" }
          }
        }
      }
    },

    "pgn_127250_vessel_heading": {
      "title": "PGN 127250 - Vessel Heading",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127250 },
            "sequenceId": { "type": "integer" },
            "headingDeg": { "type": "number", "description": "Heading in degrees (0-360)" },
            "deviationDeg": { "type": "number", "description": "Magnetic deviation in degrees" },
            "variationDeg": { "type": "number", "description": "Magnetic variation in degrees" },
            "reference": { "type": "string", "enum": ["True", "Magnetic", "Unknown"] }
          }
        }
      }
    },

    "pgn_127251_rate_of_turn": {
      "title": "PGN 127251 - Rate of Turn",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127251 },
            "sequenceId": { "type": "integer" },
            "rateDegPerSec": { "type": "number", "description": "Rate of turn in degrees per second" }
          }
        }
      }
    },

    "pgn_127257_attitude": {
      "title": "PGN 127257 - Attitude",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127257 },
            "sequenceId": { "type": "integer" },
            "yawDeg": { "type": "number" },
            "pitchDeg": { "type": "number" },
            "rollDeg": { "type": "number" }
          }
        }
      }
    },

    "pgn_127258_magnetic_variation": {
      "title": "PGN 127258 - Magnetic Variation",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127258 },
            "sequenceId": { "type": "integer" },
            "source": { "type": "string", "enum": ["Manual", "Chart", "Table", "Calculation", "WMM 2000", "WMM 2005", "WMM 2010", "WMM 2015", "WMM 2020", "Unknown"] },
            "age": { "type": "integer", "description": "Age of variation data in days" },
            "variation": { "type": "number", "description": "Magnetic variation in degrees (positive = East)" }
          }
        }
      }
    },

    "pgn_127488_engine_rapid": {
      "title": "PGN 127488 - Engine Parameters, Rapid Update",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127488 },
            "engineInstance": { "type": "integer" },
            "engineSpeedRpm": { "type": "number" },
            "boostPressureKpa": { "type": "number" },
            "tiltTrimPercent": { "type": "number" }
          }
        }
      }
    },

    "pgn_127489_engine_dynamic": {
      "title": "PGN 127489 - Engine Parameters, Dynamic",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127489 },
            "engineInstance": { "type": "integer" },
            "oilPressureKpa": { "type": "number" },
            "oilTempC": { "type": "number" },
            "coolantTempC": { "type": "number" },
            "alternatorVoltage": { "type": "number" },
            "fuelRateLh": { "type": "number" },
            "engineHours": { "type": "number" },
            "coolantPressureKpa": { "type": "number" },
            "fuelPressureKpa": { "type": "number" },
            "loadPercent": { "type": "integer" },
            "torquePercent": { "type": "integer" },
            "discreteStatus1": { "type": "integer" },
            "discreteStatus2": { "type": "integer" }
          }
        }
      }
    },

    "pgn_127490_engine_static": {
      "title": "PGN 127490 - Engine Parameters, Static",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127490 },
            "engineInstance": { "type": "integer" },
            "ratedSpeedRpm": { "type": "number" },
            "engineType": { "type": "string" },
            "propulsionType": { "type": "string" }
          }
        }
      }
    },

    "pgn_127491_engine_tachometer": {
      "title": "PGN 127491 - Engine Tachometer",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127491 },
            "engineInstance": { "type": "integer" },
            "engineSpeedRpm": { "type": "number" },
            "boostPressureKpa": { "type": "number" },
            "tiltTrimPercent": { "type": "number" }
          }
        }
      }
    },

    "pgn_127493_transmission_dynamic": {
      "title": "PGN 127493 - Transmission Parameters, Dynamic",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127493 },
            "engineInstance": { "type": "integer" },
            "gear": { "type": "string" },
            "gearNumber": { "type": "integer" },
            "oilPressureKpa": { "type": "number" },
            "oilTempC": { "type": "number" },
            "discreteStatus1": { "type": "integer" }
          }
        }
      }
    },

    "pgn_127494_transmission_static": {
      "title": "PGN 127494 - Transmission Parameters, Static",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127494 },
            "engineInstance": { "type": "integer" },
            "transmissionType": { "type": "string" },
            "maxForwardGearRatio": { "type": "number" },
            "maxReverseGearRatio": { "type": "number" },
            "numForwardGears": { "type": "integer" },
            "numReverseGears": { "type": "integer" }
          }
        }
      }
    },

    "pgn_127495_transmission_slip": {
      "title": "PGN 127495 - Transmission Slip",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127495 },
            "engineInstance": { "type": "integer" },
            "slipPercent": { "type": "number" },
            "torqueConverterRpm": { "type": "number" },
            "turbineRpm": { "type": "number" }
          }
        }
      }
    },

    "pgn_127496_trip_vessel": {
      "title": "PGN 127496 - Trip Parameters, Vessel",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127496 },
            "timeToEmptyHours": { "type": "number" },
            "distanceToEmptyNm": { "type": "number" },
            "fuelRemainingL": { "type": "number" },
            "tripRunTimeHours": { "type": "number" }
          }
        }
      }
    },

    "pgn_127497_trip_engine": {
      "title": "PGN 127497 - Trip Parameters, Engine",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127497 },
            "engineInstance": { "type": "integer" },
            "tripFuelUsedL": { "type": "number" },
            "fuelRateAvgLh": { "type": "number" },
            "fuelRateEconomyLh": { "type": "number" },
            "instFuelEconomyLh": { "type": "number" }
          }
        }
      }
    },

    "pgn_127498_engine_static_alt": {
      "title": "PGN 127498 - Engine Parameters, Static (Alternate)",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127498 },
            "engineInstance": { "type": "integer" },
            "ratedSpeedRpm": { "type": "number" },
            "engineType": { "type": "string" },
            "engineMake": { "type": "string" },
            "engineModel": { "type": "string" }
          }
        }
      }
    },

    "pgn_127501_switch_bank_status": {
      "title": "PGN 127501 - Binary Switch Bank Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127501 },
            "instance": { "type": "integer" },
            "switches": { "type": "array", "items": { "type": "object", "properties": { "switch": { "type": "integer" }, "status": { "type": "string" } } } }
          }
        }
      }
    },

    "pgn_127503_ac_input_status": {
      "title": "PGN 127503 - AC Input Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127503 },
            "instance": { "type": "integer" },
            "numLines": { "type": "integer" },
            "line1VoltageV": { "type": "number" },
            "line1CurrentA": { "type": "number" },
            "line1FrequencyHz": { "type": "number" },
            "line1RealPowerW": { "type": "number" },
            "line1PowerFactor": { "type": "number" }
          }
        }
      }
    },

    "pgn_127504_ac_output_status": {
      "title": "PGN 127504 - AC Output Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127504 },
            "instance": { "type": "integer" },
            "numLines": { "type": "integer" },
            "line1VoltageV": { "type": "number" },
            "line1CurrentA": { "type": "number" },
            "line1FrequencyHz": { "type": "number" },
            "line1RealPowerW": { "type": "number" },
            "line1PowerFactor": { "type": "number" }
          }
        }
      }
    },

    "pgn_127505_fluid_level": {
      "title": "PGN 127505 - Fluid Level",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127505 },
            "instance": { "type": "integer" },
            "fluidType": { "type": "string" },
            "levelPercent": { "type": "number" },
            "capacityLiters": { "type": "number" }
          }
        }
      }
    },

    "pgn_127506_dc_detailed_status": {
      "title": "PGN 127506 - DC Detailed Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127506 },
            "sequenceId": { "type": "integer" },
            "instance": { "type": "integer" },
            "dcType": { "type": "string" },
            "stateOfChargePercent": { "type": "number" },
            "stateOfHealthPercent": { "type": "number" },
            "timeRemainingMin": { "type": "number" },
            "rippleVoltageV": { "type": "number" },
            "capacityRemainingAh": { "type": "number" }
          }
        }
      }
    },

    "pgn_127507_charger_status": {
      "title": "PGN 127507 - Charger Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127507 },
            "chargerInstance": { "type": "integer" },
            "batteryInstance": { "type": "integer" },
            "operatingState": { "type": "string" },
            "chargerMode": { "type": "string" },
            "enabled": { "type": "string" },
            "equalizationPending": { "type": "integer" },
            "equalizationTimeRemainingMin": { "type": "number" }
          }
        }
      }
    },

    "pgn_127508_battery_status": {
      "title": "PGN 127508 - Battery Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127508 },
            "instance": { "type": "integer" },
            "sequenceId": { "type": "integer" },
            "voltageV": { "type": "number" },
            "currentA": { "type": "number" },
            "temperatureC": { "type": "number" }
          }
        }
      }
    },

    "pgn_127509_inverter_status": {
      "title": "PGN 127509 - Inverter Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127509 },
            "inverterInstance": { "type": "integer" },
            "acInstance": { "type": "integer" },
            "dcInstance": { "type": "integer" },
            "operatingState": { "type": "string" },
            "inverterEnable": { "type": "string" }
          }
        }
      }
    },

    "pgn_127512_switch_bank_control": {
      "title": "PGN 127512 - Switch Bank Control",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127512 },
            "instance": { "type": "integer" },
            "switches": { "type": "array", "items": { "type": "object", "properties": { "switch": { "type": "integer" }, "control": { "type": "string" } } } }
          }
        }
      }
    },

    "pgn_127513_battery_config": {
      "title": "PGN 127513 - Battery Configuration Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127513 },
            "instance": { "type": "integer" },
            "batteryType": { "type": "string" },
            "supportsEqualization": { "type": "string" },
            "nominalVoltageV": { "type": "number" },
            "capacityAh": { "type": "number" },
            "temperatureCoefficientPct": { "type": "number" }
          }
        }
      }
    },

    "pgn_127514_switch_bank_status_alt": {
      "title": "PGN 127514 - Binary Switch Bank Status (Alternate)",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127514 },
            "switchBankInstance": { "type": "integer" },
            "indicatorBankInstance": { "type": "integer" },
            "switches": { "type": "array", "items": { "type": "object", "properties": { "switch": { "type": "integer" }, "status": { "type": "string" } } } }
          }
        }
      }
    },

    "pgn_127744_ac_breaker_status": {
      "title": "PGN 127744 - AC Breaker Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127744 },
            "acInstance": { "type": "integer" },
            "breakerInstance": { "type": "integer" },
            "breakerState": { "type": "string" },
            "bypassState": { "type": "string" },
            "realPowerW": { "type": "number" }
          }
        }
      }
    },

    "pgn_127745_ac_breaker_control": {
      "title": "PGN 127745 - AC Breaker Control",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127745 },
            "acInstance": { "type": "integer" },
            "breakerInstance": { "type": "integer" },
            "breakerCommand": { "type": "string" },
            "resetCommand": { "type": "string" }
          }
        }
      }
    },

    "pgn_127746_ac_breaker_config": {
      "title": "PGN 127746 - AC Breaker Configuration",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127746 },
            "acInstance": { "type": "integer" },
            "breakerInstance": { "type": "integer" },
            "maxCurrentA": { "type": "number" },
            "tripTimeMs": { "type": "integer" },
            "breakerType": { "type": "string" }
          }
        }
      }
    },

    "pgn_127747_ac_breaker_status_ext": {
      "title": "PGN 127747 - AC Breaker Status, Extended",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127747 },
            "acInstance": { "type": "integer" },
            "breakerInstance": { "type": "integer" },
            "breakerState": { "type": "string" },
            "voltageV": { "type": "number" },
            "currentA": { "type": "number" },
            "frequencyHz": { "type": "number" },
            "realPowerW": { "type": "number" },
            "powerFactor": { "type": "number" },
            "bypassState": { "type": "string" }
          }
        }
      }
    },

    "pgn_127748_dc_breaker_status": {
      "title": "PGN 127748 - DC Breaker Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127748 },
            "dcInstance": { "type": "integer" },
            "breakerInstance": { "type": "integer" },
            "breakerState": { "type": "string" },
            "bypassState": { "type": "string" },
            "currentA": { "type": "number" }
          }
        }
      }
    },

    "pgn_127749_dc_breaker_control": {
      "title": "PGN 127749 - DC Breaker Control",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127749 },
            "dcInstance": { "type": "integer" },
            "breakerInstance": { "type": "integer" },
            "breakerCommand": { "type": "string" },
            "resetCommand": { "type": "string" }
          }
        }
      }
    },

    "pgn_127750_dc_breaker_config": {
      "title": "PGN 127750 - DC Breaker Configuration",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127750 },
            "dcInstance": { "type": "integer" },
            "breakerInstance": { "type": "integer" },
            "maxCurrentA": { "type": "number" },
            "tripTimeMs": { "type": "integer" },
            "breakerType": { "type": "string" }
          }
        }
      }
    },

    "pgn_127751_dc_breaker_status_ext": {
      "title": "PGN 127751 - DC Breaker Status, Extended",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 127751 },
            "dcInstance": { "type": "integer" },
            "breakerInstance": { "type": "integer" },
            "breakerState": { "type": "string" },
            "voltageV": { "type": "number" },
            "currentA": { "type": "number" },
            "powerW": { "type": "number" },
            "temperatureC": { "type": "integer" },
            "bypassState": { "type": "string" }
          }
        }
      }
    },

    "pgn_128259_speed_water": {
      "title": "PGN 128259 - Speed, Water Referenced",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 128259 },
            "sequenceId": { "type": "integer" },
            "speedWaterMs": { "type": "number" },
            "speedWaterKnots": { "type": "number" },
            "speedGroundMs": { "type": "number" },
            "speedGroundKnots": { "type": "number" },
            "speedSensorType": { "type": "string" }
          }
        }
      }
    },

    "pgn_128267_water_depth": {
      "title": "PGN 128267 - Water Depth",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 128267 },
            "sequenceId": { "type": "integer" },
            "depthM": { "type": "number", "description": "Depth in meters" },
            "offsetM": { "type": "number", "description": "Depth offset in meters" },
            "rangeM": { "type": "number", "description": "Depth range in meters" }
          }
        }
      }
    },

    "pgn_128275_distance_log": {
      "title": "PGN 128275 - Distance Log",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 128275 },
            "tripLogM": { "type": "number" },
            "tripLogNm": { "type": "number" },
            "totalLogM": { "type": "number" },
            "totalLogNm": { "type": "number" }
          }
        }
      }
    },

    "pgn_128520_tracked_target_data": {
      "title": "PGN 128520 - Tracked Target Data",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 128520 },
            "sid": { "type": "integer" },
            "targetId": { "type": "integer" },
            "trackStatus": { "type": "string" },
            "reportedTarget": { "type": "boolean" },
            "acquisitionSource": { "type": "string" },
            "bearing": { "type": "number" },
            "distance": { "type": "number" },
            "distanceNm": { "type": "number" },
            "cog": { "type": "number" },
            "sog": { "type": "number" },
            "cpa": { "type": "number" },
            "cpaNm": { "type": "number" },
            "tcpa": { "type": "number" },
            "tcpaMin": { "type": "number" },
            "utcOfFix": { "type": "number" }
          }
        }
      }
    },

    "pgn_128521_tracked_target_info": {
      "title": "PGN 128521 - Tracked Target Information",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 128521 },
            "sid": { "type": "integer" },
            "targetId": { "type": "integer" },
            "targetType": { "type": "string" },
            "mmsi": { "type": "integer" },
            "latitude": { "type": "number" },
            "longitude": { "type": "number" },
            "cog": { "type": "number" },
            "sog": { "type": "number" },
            "heading": { "type": "number" }
          }
        }
      }
    },

    "pgn_128522_radar_guard_zone": {
      "title": "PGN 128522 - Radar Guard Zone",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 128522 },
            "sid": { "type": "integer" },
            "radarId": { "type": "integer" },
            "zoneId": { "type": "integer" },
            "zoneShape": { "type": "string" },
            "zoneStatus": { "type": "string" },
            "innerRange": { "type": "number" },
            "outerRange": { "type": "number" },
            "startBearing": { "type": "number" },
            "endBearing": { "type": "number" }
          }
        }
      }
    },

    "pgn_128523_gnss_control_status": {
      "title": "PGN 128523 - GNSS Control Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 128523 } } } }
    },

    "pgn_128524_gnss_differential_correction": {
      "title": "PGN 128524 - GNSS Differential Correction Receiver Interface",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 128524 } } } }
    },

    "pgn_128777_windlass_control_status": {
      "title": "PGN 128777 - Windlass Control Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 128777 } } } }
    },

    "pgn_128780_windlass_operating_status": {
      "title": "PGN 128780 - Windlass Operating Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 128780 } } } }
    },

    "pgn_129025_position_rapid": {
      "title": "PGN 129025 - Position, Rapid Update",
      "description": "High-frequency position data (10 Hz)",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129025 },
            "latitude": { "type": "number", "description": "Latitude in degrees" },
            "longitude": { "type": "number", "description": "Longitude in degrees" }
          }
        }
      }
    },

    "pgn_129026_cog_sog_rapid": {
      "title": "PGN 129026 - COG & SOG, Rapid Update",
      "description": "High-frequency course and speed data (10 Hz)",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129026 },
            "sequenceId": { "type": "integer" },
            "cogReference": { "type": "string", "enum": ["True", "Magnetic"] },
            "cogDeg": { "type": "number", "description": "Course over ground in degrees" },
            "sogMs": { "type": "number", "description": "Speed over ground in m/s" },
            "sogKnots": { "type": "number", "description": "Speed over ground in knots" }
          }
        }
      }
    },

    "pgn_129029_gnss_position": {
      "title": "PGN 129029 - GNSS Position Data",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129029 },
            "sequenceId": { "type": "integer" },
            "days": { "type": "integer", "description": "Days since 1970-01-01" },
            "time": { "type": "number", "description": "Seconds since midnight" },
            "latitude": { "type": "number" },
            "longitude": { "type": "number" },
            "altitude": { "type": "number" },
            "gnssType": { "type": "integer" },
            "method": { "type": "integer", "description": "Fix method (0=No Fix, 1=GNSS, 2=DGNSS, etc.)" },
            "numberOfSatellites": { "type": "integer" },
            "hdop": { "type": "number" },
            "pdop": { "type": "number" }
          }
        }
      }
    },

    "pgn_129033_local_time_offset": {
      "title": "PGN 129033 - Local Time Offset",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129033 },
            "days": { "type": "integer" },
            "time": { "type": "number" },
            "hours": { "type": "integer" },
            "minutes": { "type": "integer" },
            "seconds": { "type": "number" },
            "localOffset": { "type": "integer", "description": "Local time offset from UTC in minutes" }
          }
        }
      }
    },

    "pgn_129038_ais_class_a_position": {
      "title": "PGN 129038 - AIS Class A Position Report",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129038 } } } }
    },

    "pgn_129039_ais_class_b_position": {
      "title": "PGN 129039 - AIS Class B Position Report",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129039 } } } }
    },

    "pgn_129040_ais_class_b_extended": {
      "title": "PGN 129040 - AIS Class B Extended Position Report",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129040 } } } }
    },

    "pgn_129041_ais_aton": {
      "title": "PGN 129041 - AIS Aids to Navigation (AtoN) Report",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129041 } } } }
    },

    "pgn_129044_datum": {
      "title": "PGN 129044 - Datum",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129044 },
            "localDatum": { "type": "string" },
            "deltaLatitude": { "type": "number" },
            "deltaLongitude": { "type": "number" },
            "deltaAltitude": { "type": "number" },
            "referenceDatum": { "type": "string" }
          }
        }
      }
    },

    "pgn_129283_cross_track_error": {
      "title": "PGN 129283 - Cross Track Error",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129283 },
            "sequenceId": { "type": "integer" },
            "xteMode": { "type": "integer" },
            "xte": { "type": "number", "description": "Cross track error in meters" }
          }
        }
      }
    },

    "pgn_129284_navigation_data": {
      "title": "PGN 129284 - Navigation Data",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129284 },
            "sequenceId": { "type": "integer" },
            "distanceToWaypoint": { "type": "number" },
            "bearingToWaypoint": { "type": "number" },
            "bearingReference": { "type": "string" },
            "waypointClosing": { "type": "boolean" },
            "arrivalStatus": { "type": "string" },
            "destinationLatitude": { "type": "number" },
            "destinationLongitude": { "type": "number" },
            "waypointId": { "type": "integer" }
          }
        }
      }
    },

    "pgn_129285_route_wp_info": {
      "title": "PGN 129285 - Route/Waypoint Information",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129285 } } } }
    },

    "pgn_129291_set_drift_rapid": {
      "title": "PGN 129291 - Set & Drift, Rapid Update",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129291 },
            "sequenceId": { "type": "integer" },
            "setReference": { "type": "string" },
            "setDeg": { "type": "number" },
            "driftMs": { "type": "number" },
            "driftKnots": { "type": "number" }
          }
        }
      }
    },

    "pgn_129539_gnss_dops": {
      "title": "PGN 129539 - GNSS DOPs",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129539 },
            "sequenceId": { "type": "integer" },
            "mode": { "type": "integer" },
            "hdop": { "type": "number" },
            "vdop": { "type": "number" },
            "tdop": { "type": "number" }
          }
        }
      }
    },

    "pgn_129540_gnss_sats_in_view": {
      "title": "PGN 129540 - GNSS Satellites in View",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 129540 },
            "sequenceId": { "type": "integer" },
            "mode": { "type": "integer" },
            "numberOfSatellites": { "type": "integer" }
          }
        }
      }
    },

    "pgn_129542_gnss_pseudorange_noise": {
      "title": "PGN 129542 - GNSS Pseudorange Noise Statistics",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129542 } } } }
    },

    "pgn_129547_gnss_raim": {
      "title": "PGN 129547 - GNSS RAIM Output",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129547 } } } }
    },

    "pgn_129793_ais_utc_date": {
      "title": "PGN 129793 - AIS UTC and Date Report",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129793 } } } }
    },

    "pgn_129794_ais_class_a_static": {
      "title": "PGN 129794 - AIS Class A Static and Voyage Data",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129794 } } } }
    },

    "pgn_129795_ais_addressed_binary": {
      "title": "PGN 129795 - AIS Addressed Binary Message",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129795 } } } }
    },

    "pgn_129796_ais_acknowledge": {
      "title": "PGN 129796 - AIS Acknowledge",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129796 } } } }
    },

    "pgn_129797_ais_binary_broadcast": {
      "title": "PGN 129797 - AIS Binary Broadcast Message",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129797 } } } }
    },

    "pgn_129798_ais_sar_position": {
      "title": "PGN 129798 - AIS SAR Aircraft Position Report",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129798 } } } }
    },

    "pgn_129801_ais_addressed_safety": {
      "title": "PGN 129801 - AIS Addressed Safety Related Message",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129801 } } } }
    },

    "pgn_129802_ais_broadcast_safety": {
      "title": "PGN 129802 - AIS Safety Related Broadcast Message",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129802 } } } }
    },

    "pgn_129808_dsc_call": {
      "title": "PGN 129808 - DSC Call Information",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129808 } } } }
    },

    "pgn_129809_ais_class_b_static_a": {
      "title": "PGN 129809 - AIS Class B CS Static Data, Part A",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129809 } } } }
    },

    "pgn_129810_ais_class_b_static_b": {
      "title": "PGN 129810 - AIS Class B CS Static Data, Part B",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129810 } } } }
    },

    "pgn_129812_ais_single_slot_binary": {
      "title": "PGN 129812 - AIS Single Slot Binary Message",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 129812 } } } }
    },

    "pgn_130064_route_time_to_mark": {
      "title": "PGN 130064 - Route and WP Service - Route/WP-List Attributes",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130064 } } } }
    },

    "pgn_130065_route_list": {
      "title": "PGN 130065 - Route and WP Service - Route List",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130065 } } } }
    },

    "pgn_130066_route_wp_name": {
      "title": "PGN 130066 - Route and WP Service - Route/WP-List Name",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130066 } } } }
    },

    "pgn_130067_route_wp": {
      "title": "PGN 130067 - Route and WP Service - Route/WP-List WP",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130067 } } } }
    },

    "pgn_130068_route_xte_limit": {
      "title": "PGN 130068 - Route and WP Service - XTE Limit & Navigation Method",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130068 } } } }
    },

    "pgn_130069_route_wp_comment": {
      "title": "PGN 130069 - Route and WP Service - WP Comment",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130069 } } } }
    },

    "pgn_130074_route_time_to_mark_wp": {
      "title": "PGN 130074 - Route and WP Service - WP List - WP Name & Position",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130074 } } } }
    },

    "pgn_130306_wind_data": {
      "title": "PGN 130306 - Wind Data",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 130306 },
            "sequenceId": { "type": "integer" },
            "windSpeedMs": { "type": "number", "description": "Wind speed in m/s" },
            "windSpeedKnots": { "type": "number", "description": "Wind speed in knots" },
            "windAngleDeg": { "type": "number", "description": "Wind angle in degrees" },
            "reference": { "type": "string", "description": "Wind reference type" }
          }
        }
      }
    },

    "pgn_130310_environmental_params": {
      "title": "PGN 130310 - Environmental Parameters",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 130310 },
            "sequenceId": { "type": "integer" },
            "waterTempC": { "type": "number" },
            "outsideTempC": { "type": "number" },
            "pressurePa": { "type": "number" }
          }
        }
      }
    },

    "pgn_130311_environmental_params_ext": {
      "title": "PGN 130311 - Environmental Parameters (Deprecated)",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 130311 },
            "sequenceId": { "type": "integer" },
            "tempSource": { "type": "string" },
            "humiditySource": { "type": "string" },
            "temperatureC": { "type": "number" },
            "humidityPercent": { "type": "number" },
            "pressurePa": { "type": "number" }
          }
        }
      }
    },

    "pgn_130312_temperature": {
      "title": "PGN 130312 - Temperature",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 130312 },
            "sequenceId": { "type": "integer" },
            "instance": { "type": "integer" },
            "source": { "type": "string" },
            "actualTempC": { "type": "number" },
            "setTempC": { "type": "number" }
          }
        }
      }
    },

    "pgn_130313_humidity": {
      "title": "PGN 130313 - Humidity",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 130313 },
            "sequenceId": { "type": "integer" },
            "instance": { "type": "integer" },
            "source": { "type": "string" },
            "actualHumidityPercent": { "type": "number" },
            "setHumidityPercent": { "type": "number" }
          }
        }
      }
    },

    "pgn_130314_pressure": {
      "title": "PGN 130314 - Actual Pressure",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 130314 },
            "sequenceId": { "type": "integer" },
            "instance": { "type": "integer" },
            "source": { "type": "string" },
            "pressurePa": { "type": "number" }
          }
        }
      }
    },

    "pgn_130316_temperature_ext": {
      "title": "PGN 130316 - Temperature, Extended Range",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 130316 },
            "sequenceId": { "type": "integer" },
            "instance": { "type": "integer" },
            "source": { "type": "string" },
            "actualTempC": { "type": "number" },
            "setTempC": { "type": "number" }
          }
        }
      }
    },

    "pgn_130567_watermaker_input": {
      "title": "PGN 130567 - Watermaker Input Setting and Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130567 } } } }
    },

    "pgn_130568_watermaker_output": {
      "title": "PGN 130568 - Watermaker Output Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130568 } } } }
    },

    "pgn_130569_watermaker_config": {
      "title": "PGN 130569 - Watermaker Configuration Status",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": { "data": { "properties": { "pgn": { "const": 130569 } } } }
    },

    "pgn_130577_direction_data": {
      "title": "PGN 130577 - Direction Data",
      "allOf": [{ "$ref": "#/definitions/pgn_base" }],
      "properties": {
        "data": {
          "properties": {
            "pgn": { "const": 130577 },
            "sequenceId": { "type": "integer" },
            "cogReference": { "type": "integer", "description": "COG reference (0=True, 1=Magnetic)" },
            "cog": { "type": "number", "description": "Course over ground in degrees" },
            "sog": { "type": "number", "description": "Speed over ground in knots" },
            "heading": { "type": "number" },
            "speedThroughWater": { "type": "number" },
            "set": { "type": "number" },
            "drift": { "type": "number" }
          }
        }
      }
    },

    "interface_status": {
      "title": "CAN Interface Status",
      "description": "Topic: {prefix}/interface",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "interface": { "type": "string", "description": "Interface name (e.g., can0)" },
            "state": { "type": "string", "enum": ["ERROR-ACTIVE", "ERROR-WARNING", "ERROR-PASSIVE", "BUS-OFF", "STOPPED", "SLEEPING", "UNKNOWN"] },
            "up": { "type": "boolean" },
            "stats": {
              "type": "object",
              "properties": {
                "tx_frames": { "type": "integer" },
                "tx_bytes": { "type": "integer" },
                "rx_frames": { "type": "integer" },
                "rx_bytes": { "type": "integer" },
                "tx_errors": { "type": "integer" },
                "rx_errors": { "type": "integer" },
                "bus_errors": { "type": "integer" },
                "restarts": { "type": "integer" }
              }
            },
            "config": {
              "type": "object",
              "properties": {
                "bitrate": { "type": "integer" },
                "sample_point": { "type": "integer" },
                "tq": { "type": "integer" },
                "prop_seg": { "type": "integer" },
                "phase_seg1": { "type": "integer" },
                "phase_seg2": { "type": "integer" },
                "sjw": { "type": "integer" },
                "brp": { "type": "integer" },
                "restart_ms": { "type": "integer" },
                "ctrlmode": { "type": "integer" }
              }
            }
          },
          "required": ["interface"]
        },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["data", "metadata"]
    },

    "devices_list": {
      "title": "Network Devices List",
      "description": "Topic: {prefix}/devices",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "count": { "type": "integer" },
            "peers": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "addr": { "type": "integer" },
                  "name": { "type": "integer" }
                },
                "required": ["addr", "name"]
              }
            }
          },
          "required": ["count", "peers"]
        },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["data", "metadata"]
    },

    "device_info": {
      "title": "Per-Device Information",
      "description": "Topic: {prefix}/device/{addr}/infos",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "addr": { "type": "integer" },
            "name": { "type": "integer" },
            "identityNumber": { "type": "integer" },
            "manufacturerCode": { "type": "integer" },
            "manufacturer": { "type": "string" },
            "ecuInstance": { "type": "integer" },
            "functionInstance": { "type": "integer" },
            "deviceInstance": { "type": "integer" },
            "functionCode": { "type": "integer" },
            "functionName": { "type": "string" },
            "classCode": { "type": "integer" },
            "vehicleSystemInstance": { "type": "integer" },
            "industryGroupCode": { "type": "integer" },
            "industryGroup": { "type": "string" },
            "arbitraryAddressCapable": { "type": "boolean" },
            "productInfo": {
              "type": "object",
              "properties": {
                "nmeaVersion": { "type": "integer" },
                "productCode": { "type": "integer" },
                "modelId": { "type": "string" },
                "softwareVersion": { "type": "string" },
                "productName": { "type": "string" },
                "serialNumber": { "type": "string" },
                "certLevel": { "type": "integer" },
                "loadEquiv": { "type": "integer" }
              }
            },
            "txPgns": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" } } } },
            "rxPgns": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" } } } }
          },
          "required": ["addr", "name", "identityNumber", "manufacturerCode", "manufacturer", "ecuInstance", "functionInstance", "deviceInstance", "functionCode", "functionName", "classCode", "vehicleSystemInstance", "industryGroupCode", "industryGroup", "arbitraryAddressCapable"]
        },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["data", "metadata"]
    },

    "navigation_report": {
      "title": "Navigation Report",
      "description": "Topic: {prefix}/navigation - Aggregated navigation data from best available sources",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "position": {
              "type": "object",
              "properties": {
                "hasFix": { "type": "boolean" },
                "fixType": {
                  "type": "string",
                  "enum": ["no_fix", "gnss", "dgnss", "precise_gnss", "rtk_fixed", "rtk_float", "estimated", "manual", "simulator", "unknown"]
                },
                "method": { "type": "integer" },
                "latitude": { "type": "number" },
                "longitude": { "type": "number" },
                "altitude": { "type": "number" },
                "hdop": { "type": "number" },
                "pdop": { "type": "number" },
                "numSatellites": { "type": "integer" },
                "integrity": { "type": "integer" },
                "geoidalSeparation": { "type": "number" },
                "datum": { "type": "string" },
                "source": { "$ref": "#/definitions/nav_source_info" }
              },
              "required": ["hasFix", "fixType", "method", "numSatellites"]
            },
            "speed_course": {
              "type": "object",
              "properties": {
                "headingReference": { "type": "string", "enum": ["true", "magnetic"] },
                "headingTrue": { "type": "number", "description": "Degrees, 0..360. Present only when resolvable" },
                "headingMagnetic": { "type": "number", "description": "Degrees, 0..360. Present only when resolvable" },
                "cog": { "type": ["number", "null"], "description": "Degrees, true" },
                "sog": { "type": ["number", "null"], "description": "Knots" },
                "speedThroughWater": { "type": "number", "description": "Knots. Present only when sent" },
                "rateOfTurn": { "type": "number" },
                "deviation": { "type": "number" },
                "variation": { "type": "number" },
                "leeway": { "type": "number" },
                "source": { "$ref": "#/definitions/nav_source_info" }
              },
              "required": ["cog", "sog"]
            },
            "wind_apparent": {
              "type": "object",
              "description": "Apparent wind of the selected apparent-wind source (PGN 130306 reference 2), after damping",
              "properties": {
                "speed": { "type": ["number", "null"], "description": "Knots" },
                "angle": { "type": ["number", "null"], "description": "Degrees, -180..180, relative to the bow, starboard positive" },
                "source": { "$ref": "#/definitions/nav_source_info" }
              },
              "required": ["speed", "angle"]
            },
            "wind_true": {
              "type": "object",
              "description": "True wind from the selected true-wind source (PGN 130306 reference 0, 1, 3 or 4), otherwise computed from apparent wind, speed through water and true heading. Present whenever wind_apparent is",
              "properties": {
                "speed": { "type": ["number", "null"], "description": "Knots" },
                "angle": { "type": ["number", "null"], "description": "Degrees, -180..180, relative to the bow, starboard positive" },
                "direction": { "type": ["number", "null"], "description": "Degrees, 0..360, relative to true north, where the wind comes from" },
                "reference": { "type": "string", "enum": ["water", "ground"] },
                "computed": { "type": "boolean", "description": "true when computed from the apparent wind" },
                "source": { "$ref": "#/definitions/nav_source_info" }
              },
              "required": ["speed", "angle", "direction", "reference", "computed"]
            },
            "wind": {
              "type": "object",
              "deprecated": true,
              "description": "Deprecated: use wind_apparent and wind_true. Removed in the next release. Speeds in m/s",
              "properties": {
                "apparentSpeed": { "type": "number", "description": "m/s" },
                "apparentAngle": { "type": "number", "description": "Degrees, -180..180" },
                "trueSpeed": { "type": "number", "description": "m/s" },
                "trueAngle": { "type": "number", "description": "Degrees" },
                "trueDirection": { "type": "number", "description": "Degrees, 0..360" },
                "atmosphericPressure": { "type": "number" },
                "source": { "$ref": "#/definitions/nav_source_info" }
              }
            },
            "depth_water": {
              "type": "object",
              "properties": {
                "depth": { "type": "number" },
                "offset": { "type": "number" },
                "waterTemperature": { "type": "number" },
                "outsideTemperature": { "type": "number" },
                "atmosphericPressure": { "type": "number" },
                "source": { "$ref": "#/definitions/nav_source_info" }
              }
            },
            "date": {
              "type": "object",
              "properties": {
                "date": { "type": "string" },
                "time": { "type": "string" },
                "timeSource": { "type": "string" },
                "source": { "$ref": "#/definitions/nav_source_info" }
              }
            }
          }
        },
        "metadata": {
          "type": "object",
          "properties": {
            "rxDate": { "type": "string", "format": "date-time" },
            "rxTimestamp": { "type": "integer" },
            "expireAfterSec": { "type": "integer", "const": 2 },
            "configLoaded": { "type": "boolean" }
          },
          "required": ["rxDate", "rxTimestamp", "expireAfterSec", "configLoaded"]
        }
      },
      "required": ["data", "metadata"]
    },

    "nav_source_info": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "friendlyName": { "type": "string" },
        "pgn": { "type": "integer" },
        "rxTimestamp": { "type": "integer" },
        "age": { "type": "number" }
      },
      "required": ["name", "pgn", "rxTimestamp", "age"]
    },

    "ais_report": {
      "title": "AIS Report",
      "description": "Topic: {prefix}/ais - Aggregated AIS target information",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "ownShip": {
              "type": "object",
              "description": "Own vessel GPS position from navigation report",
              "properties": {
                "position": {
                  "type": "object",
                  "properties": {
                    "latitude": { "type": "number" },
                    "longitude": { "type": "number" },
                    "cog": { "type": "number" },
                    "sog": { "type": "number" }
                  },
                  "required": ["latitude", "longitude"]
                },
                "source": {
                  "type": "object",
                  "properties": {
                    "name": { "type": "integer" },
                    "friendlyName": { "type": "string" },
                    "pgn": { "type": "integer" },
                    "age": { "type": "number" }
                  },
                  "required": ["name", "pgn", "age"]
                }
              },
              "required": ["position", "source"]
            },
            "aisTargets": { "type": "object", "additionalProperties": { "$ref": "#/definitions/ais_vessel_target" } },
            "atons": { "type": "object", "additionalProperties": { "$ref": "#/definitions/ais_aton" } },
            "sarAircraft": { "type": "object", "additionalProperties": { "$ref": "#/definitions/ais_sar_aircraft" } },
            "safetyMessages": { "type": "array", "items": { "$ref": "#/definitions/ais_safety_message" } }
          },
          "required": ["aisTargets", "atons", "sarAircraft", "safetyMessages"]
        },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["data", "metadata"]
    },

    "ais_vessel_target": {
      "type": "object",
      "properties": {
        "mmsi": { "type": "integer" },
        "aisClass": { "type": "string", "enum": ["A", "B", "B+", "Unknown"] },
        "identity": {
          "type": "object",
          "properties": {
            "vesselName": { "type": "string" },
            "callSign": { "type": "string" },
            "imo": { "type": "integer" },
            "shipType": { "type": "integer" },
            "shipTypeDesc": { "type": "string" }
          }
        },
        "dimensions": { "type": "object", "properties": { "length": { "type": "number" }, "beam": { "type": "number" } } },
        "position": {
          "type": "object",
          "properties": {
            "latitude": { "type": "number" },
            "longitude": { "type": "number" },
            "accuracy": { "type": "boolean" },
            "raim": { "type": "boolean" },
            "timestamp": { "type": "integer" },
            "sourcePgn": { "type": "integer" }
          },
          "required": ["latitude", "longitude"]
        },
        "dynamics": {
          "type": "object",
          "properties": {
            "cog": { "type": "number" },
            "sog": { "type": "number" },
            "heading": { "type": "number" },
            "rateOfTurn": { "type": "number" }
          },
          "required": ["cog", "sog"]
        },
        "voyage": {
          "type": "object",
          "properties": {
            "destination": { "type": "string" },
            "eta": { "type": "string", "format": "date-time" },
            "draught": { "type": "number" },
            "navStatus": { "type": "integer" },
            "navStatusDesc": { "type": "string" }
          }
        },
        "track": { "type": "array", "items": { "type": "object", "properties": { "latitude": { "type": "number" }, "longitude": { "type": "number" }, "cog": { "type": "number" }, "sog": { "type": "number" }, "rxTimestamp": { "type": "integer" } } } },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["mmsi", "aisClass", "identity", "position", "dynamics", "track", "metadata"]
    },

    "ais_aton": {
      "type": "object",
      "properties": {
        "mmsi": { "type": "integer" },
        "name": { "type": "string" },
        "atonType": { "type": "integer" },
        "atonTypeDesc": { "type": "string" },
        "position": { "type": "object", "properties": { "latitude": { "type": "number" }, "longitude": { "type": "number" }, "accuracy": { "type": "boolean" } }, "required": ["latitude", "longitude"] },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["mmsi", "name", "atonType", "position", "metadata"]
    },

    "ais_sar_aircraft": {
      "type": "object",
      "properties": {
        "mmsi": { "type": "integer" },
        "position": { "type": "object", "properties": { "latitude": { "type": "number" }, "longitude": { "type": "number" }, "altitude": { "type": "number" } }, "required": ["latitude", "longitude", "altitude"] },
        "dynamics": { "type": "object", "properties": { "cog": { "type": "number" }, "sog": { "type": "number" } }, "required": ["cog", "sog"] },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["mmsi", "position", "dynamics", "metadata"]
    },

    "ais_safety_message": {
      "type": "object",
      "properties": {
        "sourceMmsi": { "type": "integer" },
        "destinationMmsi": { "type": "integer" },
        "text": { "type": "string" },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["sourceMmsi", "text", "metadata"]
    },

    "config_report": {
      "title": "Application Configuration",
      "description": "Topic: {prefix}/config - Application configuration published once at startup",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "description": "Configuration data",
          "properties": {
            "modules": {
              "type": "object",
              "description": "Enabled modules",
              "properties": {
                "alarms": { "type": "boolean", "description": "NMEA 2000 alarm system enabled" },
                "navigation": {
                  "type": "object",
                  "properties": {
                    "enabled": { "type": "boolean" },
                    "highSpeed": { "type": "boolean", "description": "10 Hz mode" }
                  },
                  "required": ["enabled"]
                },
                "motor": {
                  "type": "object",
                  "properties": {
                    "enabled": { "type": "boolean" },
                    "highSpeed": { "type": "boolean", "description": "10 Hz mode" }
                  },
                  "required": ["enabled"]
                },
                "ais": {
                  "type": "object",
                  "properties": {
                    "enabled": { "type": "boolean" },
                    "trackDepth": { "type": "integer", "description": "Track history depth" }
                  },
                  "required": ["enabled"]
                },
                "gpsd": {
                  "type": "object",
                  "properties": {
                    "enabled": { "type": "boolean" },
                    "transmit": { "type": "string", "enum": ["off", "on", "failover"], "description": "Transmit mode" },
                    "transmitHighSpeed": { "type": "boolean", "description": "Rapid Update PGNs (10Hz)" }
                  },
                  "required": ["enabled"]
                }
              },
              "required": ["alarms", "navigation", "motor", "ais"]
            },
            "mqtt": {
              "type": "object",
              "description": "MQTT configuration",
              "properties": {
                "topicPrefix": { "type": "string" }
              },
              "required": ["topicPrefix"]
            },
            "version": { "type": "string", "description": "Application version" }
          },
          "required": ["modules", "mqtt", "version"]
        },
        "metadata": { "$ref": "#/definitions/metadata" }
      },
      "required": ["data", "metadata"]
    }
  }
}
