{
  "spec_version": 1,
  "slug": "atmos-41-gen-2",
  "manufacturer": "METER Group",
  "model": "ATMOS 41 Gen 2 (Modbus RTU enabled)",
  "category": "Weather station",
  "supplier_url": "https://metergroup.com/products/atmos-41/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "one_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "Even",
      "baud_rate": 9600,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 3001,
      "count": 2,
      "name": "Solar radiation",
      "data_type": "Float32",
      "units": "W/m2",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average solar radiation since the last measurement. Register number 3001 in the vendor table; the PDU address is 3000 (see notes on addressing)."
    },
    {
      "address": 3003,
      "count": 2,
      "name": "Total precipitation",
      "data_type": "Float32",
      "units": "mm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total combined rainfall from the dual rain gauges since the last measurement."
    },
    {
      "address": 3005,
      "count": 2,
      "name": "Precipitation drop counter",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total rain drops detected by the drop counter since the last measurement (count, 0-65535)."
    },
    {
      "address": 3007,
      "count": 2,
      "name": "Precipitation tip counter",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total precipitation tipping-spoon tips since the last measurement (count, 0-65535)."
    },
    {
      "address": 3009,
      "count": 2,
      "name": "Precipitation electrical conductivity",
      "data_type": "Float32",
      "units": "µS/cm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average precipitation basin bulk EC since the last measurement. Reads 0 if no tipping-spoon tips were detected since the last measurement."
    },
    {
      "address": 3011,
      "count": 2,
      "name": "Lightning strike count",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total lightning strikes since the last measurement (count, 0-65535)."
    },
    {
      "address": 3013,
      "count": 2,
      "name": "Average lightning strike distance",
      "data_type": "Float32",
      "units": "km",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average strike distance from the sensor since the last measurement; 0 when no strikes were detected."
    },
    {
      "address": 3015,
      "count": 2,
      "name": "Wind speed",
      "data_type": "Float32",
      "units": "m/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average wind speed magnitude since the last measurement (0.00-60.00 m/s)."
    },
    {
      "address": 3017,
      "count": 2,
      "name": "Wind direction",
      "data_type": "Float32",
      "units": "°",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average wind heading clockwise from north (0.0-359.9 deg) since the last measurement."
    },
    {
      "address": 3019,
      "count": 2,
      "name": "Gust wind speed",
      "data_type": "Float32",
      "units": "m/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maximum wind speed magnitude seen since the last measurement (0.00-60.00 m/s)."
    },
    {
      "address": 3021,
      "count": 2,
      "name": "Air temperature",
      "data_type": "Float32",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average air temperature since the last measurement (-65.0 to 60.0 °C)."
    },
    {
      "address": 3023,
      "count": 2,
      "name": "Vapor pressure",
      "data_type": "Float32",
      "units": "kPa",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average vapor pressure since the last measurement (1.00-47.00 kPa)."
    },
    {
      "address": 3025,
      "count": 2,
      "name": "Atmospheric pressure",
      "data_type": "Float32",
      "units": "kPa",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average atmospheric pressure since the last measurement (1.00-120.00 kPa)."
    },
    {
      "address": 3027,
      "count": 2,
      "name": "Relative humidity",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average relative humidity since the last measurement as a fraction: 0.000-1.000, i.e. multiply by 100 for %. The vendor table gives the unit as '% / 100'."
    },
    {
      "address": 3029,
      "count": 2,
      "name": "Humidity sensor temperature",
      "data_type": "Float32",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average temperature of the relative-humidity sensor since the last measurement (-40.0 to 85.0 °C)."
    },
    {
      "address": 3031,
      "count": 2,
      "name": "Single-value orientation",
      "data_type": "Float32",
      "units": "°",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average sensor polar orientation since the last measurement (0.0-180.0 deg)."
    },
    {
      "address": 3033,
      "count": 2,
      "name": "Minimum air temperature",
      "data_type": "Float32",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lowest air temperature seen since the last measurement (-65.0 to 60.0 °C)."
    },
    {
      "address": 3035,
      "count": 2,
      "name": "Maximum air temperature",
      "data_type": "Float32",
      "units": "°C",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Highest air temperature seen since the last measurement (-65.0 to 60.0 °C)."
    },
    {
      "address": 3037,
      "count": 2,
      "name": "North wind speed",
      "data_type": "Float32",
      "units": "m/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average wind speed from a northerly direction since the last measurement (-60.00 to 60.00 m/s)."
    },
    {
      "address": 3039,
      "count": 2,
      "name": "East wind speed",
      "data_type": "Float32",
      "units": "m/s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average wind speed from an easterly direction since the last measurement (-60.00 to 60.00 m/s)."
    },
    {
      "address": 3041,
      "count": 2,
      "name": "X-direction orientation",
      "data_type": "Float32",
      "units": "°",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average sensor orientation in the X direction since the last measurement (-90.0 to 90.0 deg)."
    },
    {
      "address": 3043,
      "count": 2,
      "name": "Y-direction orientation",
      "data_type": "Float32",
      "units": "°",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Average sensor orientation in the Y direction since the last measurement (-90.0 to 90.0 deg)."
    },
    {
      "address": 3401,
      "count": 1,
      "name": "Sensor type",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Sensor type number; 88 for the ATMOS 41 Gen 2."
    },
    {
      "address": 3402,
      "count": 2,
      "name": "Sensor numeric serial number",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Numeric part of the serial number, i.e. the XXXXXXX in A41G2MXXXXXXX."
    },
    {
      "address": 3404,
      "count": 1,
      "name": "Sensor firmware version",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "METER digital-sensor firmware version; divide by 100 for the version number (e.g. 608 = 6.08)."
    },
    {
      "address": 3405,
      "count": 1,
      "name": "Sensor build version",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Firmware build/patch version. Appended to the firmware version it forms the full version (e.g. 16 appended to 6.08 is 6.08.16)."
    },
    {
      "address": 3406,
      "count": 1,
      "name": "Sensor hardware revision",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Hardware revision number, indicating hardware version and capabilities."
    },
    {
      "address": 3419,
      "count": 7,
      "name": "Sensor ASCII serial number",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Full serial number as a 13-character ASCII string plus one null terminator (A41G2MXXXXXXX), packed into 7 registers."
    }
  ],
  "holding_registers": [
    {
      "address": 4401,
      "count": 1,
      "name": "Modbus server address",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Current Modbus RTU server address (1-247). Factory setting 1. A write takes effect immediately after the response to the write is sent."
    },
    {
      "address": 4402,
      "count": 1,
      "name": "Modbus serial baud rate",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Baud-rate code: 0 = 9600 baud. 19200 baud is not supported. Factory setting 9600."
    },
    {
      "address": 4403,
      "count": 1,
      "name": "Modbus parity bit",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Parity code: 0 = no parity, 1 = odd parity, 2 = even parity. Factory setting 2 (even)."
    },
    {
      "address": 4404,
      "count": 1,
      "name": "Modbus stop bit count",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Number of stop bits, 1-2. Factory setting 1."
    }
  ],
  "combined_registers": [],
  "notes": "Source: METER Group 'ATMOS 41 Gen 2 Integrator Guide', document 18036-03, edition 01.2025 — sensor description, Table 20 (Modbus communication configuration), section 'Data representation and registers', Table 23 (holding registers), Table 24 (input register measurement map, register numbers 3001-3044) and Table 25 (identity registers 3401-3425). The guide is the integration document for the Modbus RTU enabled variant of the ATMOS 41 Gen 2 all-in-one weather station (serial numbers A41G2M...); SDI-12-only units (serial A41G2...) do not serve this map. Addressed as printed: the guide states that registers are listed with their 1-based register number and that the address in a Modbus PDU is the register number minus 1, so the printed numbers are stored with addressing = one_based. 32-bit values are big-endian with the most significant word first (Table 22), hence byte_order BigEndian and word_order HighFirst. Factory frame from Table 20 and the text below it: 9600 baud, 8 data bits, even parity, 1 stop bit, server address 1. Note the reader semantics: a read of the measurement input registers resets the sensor's averaging counters/accumulators for all measurements, even the ones not read, which is why the guide recommends a single burst read of the whole 3001-3044 block. Deliberately omitted: the 3407-3418 model string (UTF-16 array, no Ascii encoding of UTF-16 in the app) and registers below 3001/above 3425 (none documented). Not seeded: the SDI-12 register view and the CR6 datalogger example, which are not part of the Modbus map. MIRROR-SOURCED: metergroup.com answers automated requests with HTTP 403, so the 18036-03 copy read here is the distributor mirror https://candh.co.kr/upload/1784693309_6.pdf (vendor document title/edition unchanged; sha256 94d5929806fc30fd4216eb67e2babda0352a873b7083aef7137cd016fb7c641d)."
}
