> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mertani.co.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Struktur Data

Mertani menyimpan setiap data sensor dalam format terstruktur dan konsisten. Setiap entri selalu dilengkapi `timestamp` untuk akurasi waktu dan kemudahan analisis historis.

Struktur ini dirancang agar:

* Konsisten untuk berbagai jenis sensor
* Mudah diproses oleh sistem integrasi
* Fleksibel untuk penambahan sensor baru

***

## Struktur Data Sensor

<Frame>
  <div>
    <img src="https://mintcdn.com/mertani/QKCSIJ_vjKyFoAyf/assets/asset-api/structurdata-light.webp?fit=max&auto=format&n=QKCSIJ_vjKyFoAyf&q=85&s=1b0a30f857cd3c3a3f693b1f830b6092" alt="Diagram struktur data sensor Mertani" className="dark:hidden" noZoom={true} width="1320" height="860" data-path="assets/asset-api/structurdata-light.webp" />

    <img src="https://mintcdn.com/mertani/QKCSIJ_vjKyFoAyf/assets/asset-api/structurdata-dark.webp?fit=max&auto=format&n=QKCSIJ_vjKyFoAyf&q=85&s=b8c65469fa2c7861fcb25f43c73a83ca" alt="Diagram struktur data sensor Mertani" className="hidden dark:block" noZoom={true} width="1320" height="860" data-path="assets/asset-api/structurdata-dark.webp" />
  </div>
</Frame>

Setiap payload data terdiri dari dua level:

* **Root level** — konteks pengiriman data: siapa yang mengirim dan kapan
* **Sensor level** — detail pembacaan dari masing-masing sensor pada perangkat tersebut

***

## Field Reference

### Root Level

| Field       | Tipe                | Deskripsi                              |
| ----------- | ------------------- | -------------------------------------- |
| `device_id` | `string`            | Identitas unik perangkat pengirim data |
| `timestamp` | `string` (ISO 8601) | Waktu saat data dikirim dari perangkat |

### Sensor Level (`sensors[]`)

| Field   | Tipe     | Deskripsi                                   |
| ------- | -------- | ------------------------------------------- |
| `id`    | `string` | Identitas unik sensor dalam perangkat       |
| `value` | `number` | Nilai hasil pembacaan sensor (tanpa satuan) |
| `unit`  | `string` | Satuan pengukuran dari nilai sensor         |

***

## Penjelasan Field

<AccordionGroup>
  <Accordion title="device_id">
    Mengidentifikasi perangkat (data logger) yang mengirimkan data. Satu perangkat dapat memiliki banyak sensor.

    ```text theme={null}
    MTI-Y789XXIEQ
    ```

    `device_id` digunakan sebagai kunci relasi — semua sensor dalam satu payload berasal dari perangkat yang sama.
  </Accordion>

  <Accordion title="timestamp (ISO 8601)">
    Waktu saat data dikirim dari perangkat, dalam format ISO 8601 dengan informasi zona waktu.

    ```text theme={null}
    2025-11-20T00:00:00+07:00
    ```

    | Bagian       | Nilai           | Keterangan                   |
    | ------------ | --------------- | ---------------------------- |
    | `2025-11-20` | Tanggal         | Format YYYY-MM-DD            |
    | `T`          | Pemisah         | Memisahkan tanggal dan waktu |
    | `00:00:00`   | Waktu           | Format HH:mm:ss              |
    | `+07:00`     | Timezone offset | WIB (UTC+7)                  |

    <Warning>
      `timestamp` mencerminkan waktu pengiriman dari perangkat, bukan waktu penerimaan oleh server. Perbedaan keduanya bisa terjadi jika ada delay jaringan.
    </Warning>
  </Accordion>

  <Accordion title="id (sensor)">
    Identitas unik sensor di dalam satu perangkat. Format umumnya menggabungkan kode device dan kode jenis sensor.

    ```text theme={null}
    Y789-flLev
    ```

    | Bagian  | Nilai       | Keterangan                                                    |
    | ------- | ----------- | ------------------------------------------------------------- |
    | `Y789`  | Kode device | Mengacu pada perangkat induk                                  |
    | `flLev` | Kode sensor | Singkatan jenis sensor (`flLev` = *flow level* / water level) |

    `id` digunakan untuk mengidentifikasi dan membedakan antar sensor dalam satu perangkat.
  </Accordion>

  <Accordion title="value">
    Nilai numerik hasil pembacaan sensor — berupa `integer` atau `float`, tergantung jenis sensor.

    ```text theme={null}
    25.5
    ```

    * Tidak mengandung satuan (satuan ditentukan oleh field `unit`)
    * Merepresentasikan nilai mentah (*raw*) atau nilai hasil kalibrasi, tergantung konfigurasi perangkat
  </Accordion>

  <Accordion title="unit">
    Satuan pengukuran yang berkaitan dengan `value`. Bersifat informatif, tidak mengubah nilai secara otomatis.

    | Satuan | Keterangan                                     |
    | ------ | ---------------------------------------------- |
    | `cm`   | Centimeter — umumnya untuk water level         |
    | `%`    | Persen — umumnya untuk kelembaban (*humidity*) |
    | `°C`   | Derajat Celsius — untuk suhu (*temperature*)   |
    | `mm`   | Milimeter — umumnya untuk curah hujan          |
    | `m/s`  | Meter per detik — untuk kecepatan angin        |

    Satuan yang tampil ditentukan oleh konfigurasi sensor di dashboard Mertani.
  </Accordion>
</AccordionGroup>

***

## Contoh Payload

Berikut contoh lengkap payload data yang dikirim dalam satu request, mencakup tiga sensor dari satu perangkat:

```json theme={null}
{
  "device_id": "Y789",
  "timestamp": "2025-11-20T00:00:00+07:00",
  "sensors": [
    {
      "id": "Y789-flLev",
      "value": 25.5,
      "unit": "cm"
    },
    {
      "id": "Y789-arHum",
      "value": 80,
      "unit": "%"
    },
    {
      "id": "Y789-arTemp",
      "value": 32,
      "unit": "°C"
    }
  ]
}
```

<Info>
  Satu payload dapat memuat banyak sensor sekaligus. Semua sensor dalam satu payload dijamin memiliki `timestamp` yang sama karena dikirim dalam satu transmisi dari perangkat yang sama.
</Info>

***

## Relasi Antar Field

Untuk memahami bagaimana field-field di atas saling berhubungan:

```text theme={null}
device_id  ──→  mengidentifikasi perangkat pengirim
timestamp  ──→  waktu transmisi data dari perangkat
sensors[]  ──→  daftar pembacaan sensor dalam transmisi tersebut
  └── id      ──→  sensor mana yang membaca
  └── value   ──→  hasil pembacaan (angka)
  └── unit    ──→  satuan dari hasil pembacaan
```
