Files
Alberto-Audrix 32a36cceff
CI / lint-and-test (push) Canceled after 0s
first commit
2026-07-28 08:55:05 +07:00

1204 lines
35 KiB
Markdown

# Dokumentasi API CPSP-GO
**Base URL:** `https://dashboard.cpsp.id`
Semua endpoint API mengembalikan respons dalam format JSON. Sebagian besar endpoint mendukung metode HTTP standar (GET, POST, PUT, PATCH, DELETE) kecuali dinyatakan lain.
---
## Daftar Isi
1. [API Scales](#api-scales)
2. [API Cage Sites](#api-cage-sites)
3. [API Frigate Counter](#api-frigate-counter)
4. [API Counting Sacks](#api-counting-sacks)
5. [API IoT](#api-iot)
6. [API Data Support Manual](#api-data-support-manual)
7. [API Data Support](#api-data-support)
8. [API Umum](#api-umum)
---
## API Scales
Base URL: `https://dashboard.cpsp.id/api/scales/`
### Mendapatkan Cage berdasarkan ID
Mengambil informasi cage dan perhitungan KPI berdasarkan ID cage.
**Endpoint:** `GET /api/scales/cage/<uuid:id>`
**Parameter:**
- `id` (UUID, wajib) - UUID dari cage
**Respons:**
```json
{
"data": {
"id": "uuid",
"name": "string",
"kpi": {
// Perhitungan KPI
},
// ... field cage lainnya
},
"success": true
}
```
**Contoh:**
```bash
curl https://dashboard.cpsp.id/api/scales/cage/9f556d2a-af5c-41b0-bcd0-6cea0dfa0fed
```
```json
{
"data": {
"id": "9f556d2a-af5c-41b0-bcd0-6cea0dfa0fed",
"ref_number": "CSFK-04564",
"name": "sukawarna",
"devices": [
{
"id": "9f556df5-06f0-46d7-b6be-3cc77358df8a",
"name": "Lantai Atas_D",
"part_number": "CIAIWS-812995-20250707125058",
"status": true,
"last_online": "2025-11-04T02:00:02+07:00"
},
{
"id": "9f556dea-78a3-46eb-9a5d-dfaa01cf49d9",
"name": "Lantai Atas_C",
"part_number": "CIAIWS-869407-20250707125051",
"status": true,
"last_online": "2025-11-04T02:00:02+07:00"
},
{
"id": "9f556d8a-4adc-4035-907b-a71bbd6d0d6d",
"name": "Lantai Atas_B",
"part_number": "CIAIWS-266141-20250707124948",
"status": true,
"last_online": "2025-11-04T01:55:02+07:00"
},
{
"id": "9f556d3e-536c-4847-b40f-12df3b2727bf",
"name": "Lantai Atas_A",
"part_number": "CIAIWS-540230-20250707124858",
"status": true,
"last_online": "2025-11-04T02:00:02+07:00"
}
],
"kpi": {
"0": {
"mortality": 25,
"mortality_total": 25,
"food": 4,
"food_total": 4,
"harvest": 0,
"harvest_total": 0,
"chicken_life": 19975,
"chicken_life_percentage": 99.875,
"ref_weight": 35,
"manual_weight": 35,
"manual_harvest_weight": 0,
"manual_harvest_weight_total": 0,
"manual_fcr": 0.286071875558734,
"manual_eef": 0,
"iot_weight": 35,
"iot_harvest_weight": 0,
"iot_harvest_weight_total": 0,
"iot_fcr": 0.286071875558734,
"iot_eef": 0
},
"1": {
"mortality": 23,
"mortality_total": 48,
"food": 5,
"food_total": 9,
"harvest": 0,
"harvest_total": 0,
"chicken_life": 19952,
"chicken_life_percentage": 99.76,
"ref_weight": 43,
"manual_weight": 49.5,
"manual_harvest_weight": 0,
"manual_harvest_weight_total": 0,
"manual_fcr": 0.455638988116935,
"manual_eef": 1083.77907264,
"iot_weight": 50,
"iot_harvest_weight": 0,
"iot_harvest_weight_total": 0,
"iot_fcr": 0.451082598235766,
"iot_eef": 1105.78417777778
},
"2": {
"mortality": 24,
"mortality_total": 72,
"food": 5,
"food_total": 14,
"harvest": 0,
"harvest_total": 0,
"chicken_life": 19928,
"chicken_life_percentage": 99.64,
"ref_weight": 62,
"manual_weight": 59.5,
"manual_harvest_weight": 0,
"manual_harvest_weight_total": 0,
"manual_fcr": 0.590360592249746,
"manual_eef": 502.11515452,
"iot_weight": 60.2,
"iot_harvest_weight": 0,
"iot_harvest_weight_total": 0,
"iot_fcr": 0.58349593420033,
"iot_eef": 513.9991256512
}
}
},
"success": true
}
```
---
## API Cage Sites
Base URL: `https://dashboard.cpsp.id/api/cage_sites/`
### Mendapatkan Semua Cage Sites
Mengambil semua cage sites.
**Endpoint:** `GET /api/cage_sites/get_all/`
**Respons:**
```json
{
"data": [
{
"id": "integer",
"name": "string",
// ... field cage site lainnya
}
],
"success": true
}
```
**Contoh:**
```bash
curl https://dashboard.cpsp.id/api/cage_sites/get_all/
```
```json
{
"data": [
{
"name": "Sukawarna",
"location": "SRID=4326;POINT(106.6275018 -6.384292299999999)",
"address": "PT. SUM Farm Sukawarna Jl. Cilangkap Sukamulya Bogor Regency West Java Indonesia",
"iot_scales": [
{
"id": "9f556d2a-af5c-41b0-bcd0-6cea0dfa0fed",
"ref_number": "CSFK-04564",
"name": "sukawarna",
"devices": [
{
"id": "9f556df5-06f0-46d7-b6be-3cc77358df8a",
"name": "Lantai Atas_D",
"part_number": "CIAIWS-812995-20250707125058",
"status": true,
"last_online": "2025-11-04T02:00:02+07:00"
},
{
"id": "9f556dea-78a3-46eb-9a5d-dfaa01cf49d9",
"name": "Lantai Atas_C",
"part_number": "CIAIWS-869407-20250707125051",
"status": true,
"last_online": "2025-11-04T02:00:02+07:00"
},
{
"id": "9f556d8a-4adc-4035-907b-a71bbd6d0d6d",
"name": "Lantai Atas_B",
"part_number": "CIAIWS-266141-20250707124948",
"status": true,
"last_online": "2025-11-04T01:55:02+07:00"
},
{
"id": "9f556d3e-536c-4847-b40f-12df3b2727bf",
"name": "Lantai Atas_A",
"part_number": "CIAIWS-540230-20250707124858",
"status": true,
"last_online": "2025-11-04T02:00:02+07:00"
}
]
}
]
}
],
"success": true
}
```
---
## API Counting Sacks
Base URL: `https://dashboard.cpsp.id/api/counting/`
### Mendapatkan Sacks berdasarkan Camera
Mengambil data counting sacks yang dikelompokkan berdasarkan nama kamera untuk site tertentu.
**Endpoint:** `GET /api/counting/sacks/<int:site_id>/<str:camera_name>/`
**Parameter:**
- `site_id` (integer, wajib) - ID dari site
- `camera_name` (string, opsional) - Filter berdasarkan nama kamera tertentu. Jika diabaikan, mengembalikan data untuk semua kamera.
**Respons:**
```json
{
"success": true,
"data": [
{
"camera_name": "string",
"total_sacks": "integer",
"count_records": "integer",
"latest_update": "datetime",
"records": [
{
"id": "integer",
"camera_name": "string",
"value": "integer",
"date": "date",
"updated_at": "datetime"
}
]
}
],
"total_cameras": "integer"
}
```
**Contoh:**
```bash
# Mendapatkan semua kamera
curl https://dashboard.cpsp.id/api/counting/sacks/1/
```json
{
"success": true,
"data": [
{
"camera_name": "kandang_1_karung_masuk",
"total_sacks": 1361,
"count_records": 25,
"latest_update": "2025-11-03T23:44:56.156030Z",
"records": [
{
"camera_name": "kandang_1_karung_masuk",
"value": 2,
"date": "2025-11-04",
"created_at": "2025-11-04T05:25:56.612274+07:00",
"updated_at": "2025-11-04T06:44:56.156030+07:00"
},
.....
{
"camera_name": "kandang_1_karung_masuk",
"value": 78,
"date": "2025-09-26",
"created_at": "2025-09-26T15:28:01.911577+07:00",
"updated_at": "2025-11-04T05:25:56.126478+07:00"
}
]
},
{
"camera_name": "kandang_1_karung_pakan_depan",
"total_sacks": 1287,
"count_records": 25,
"latest_update": "2025-11-03T22:25:56.609684Z",
"records": [
{
"camera_name": "kandang_1_karung_pakan_depan",
"value": 0,
"date": "2025-11-04",
"created_at": "2025-11-03T17:00:00.869539+07:00",
"updated_at": "2025-11-04T05:25:56.609684+07:00"
},
......
{
"camera_name": "kandang_1_karung_pakan_depan",
"value": 21,
"date": "2025-11-03",
"created_at": "2025-11-02T23:19:22.057390+07:00",
"updated_at": "2025-11-04T05:25:56.600974+07:00"
},
{
"camera_name": "kandang_1_karung_pakan",
"value": 68,
"date": "2025-09-26",
"created_at": "2025-09-26T15:28:01.893886+07:00",
"updated_at": "2025-11-04T05:25:56.112694+07:00"
}
]
}
],
"total_cameras": 3
}
```
# Mendapatkan kamera tertentu
curl https://dashboard.cpsp.id/api/counting/sacks/1/kandang_1_karung_pakan_depan/
```json
{"success":true,"data":[{"camera_name":"kandang_1_karung_pakan_depan","total_sacks":1287,"count_records":25,"latest_update":"2025-11-03T22:25:56.609684Z","records":[{"camera_name":"kandang_1_karung_pakan_depan","value":0,"date":"2025-11-04","created_at":"2025-11-03T17:00:00.869539+07:00","updated_at":"2025-11-04T05:25:56.609684+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":21,"date":"2025-11-03","created_at":"2025-11-02T23:19:22.057390+07:00","updated_at":"2025-11-04T05:25:56.600974+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":1,"date":"2025-11-01","created_at":"2025-10-31T17:00:00.705719+07:00","updated_at":"2025-11-04T05:25:56.595023+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":16,"date":"2025-10-31","created_at":"2025-10-31T09:42:41.185931+07:00","updated_at":"2025-11-04T05:25:56.584855+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":4,"date":"2025-10-30","created_at":"2025-10-29T17:00:00.287677+07:00","updated_at":"2025-11-04T05:25:56.579798+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":11,"date":"2025-10-29","created_at":"2025-10-28T17:00:00.299515+07:00","updated_at":"2025-11-04T05:25:56.571122+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":10,"date":"2025-10-28","created_at":"2025-10-27T17:00:00.400938+07:00","updated_at":"2025-11-04T05:25:56.238567+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":966,"date":"2025-10-27","created_at":"2025-10-26T17:00:00.103423+07:00","updated_at":"2025-11-04T05:25:56.230926+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":8,"date":"2025-10-26","created_at":"2025-10-25T17:04:17.976769+07:00","updated_at":"2025-11-04T05:25:56.226985+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":12,"date":"2025-10-25","created_at":"2025-10-24T17:00:00.374980+07:00","updated_at":"2025-11-04T05:25:56.221105+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":0,"date":"2025-10-24","created_at":"2025-10-23T17:00:00.783614+07:00","updated_at":"2025-11-04T05:25:56.213066+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":8,"date":"2025-10-23","created_at":"2025-10-22T18:31:48.068413+07:00","updated_at":"2025-11-04T05:25:56.207350+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":0,"date":"2025-10-21","created_at":"2025-10-21T16:12:52.423379+07:00","updated_at":"2025-11-04T05:25:56.201264+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":0,"date":"2025-10-07","created_at":"2025-10-06T17:00:00.198834+07:00","updated_at":"2025-11-04T05:25:56.195429+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":0,"date":"2025-10-06","created_at":"2025-10-05T17:00:00.174676+07:00","updated_at":"2025-11-04T05:25:56.189054+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":19,"date":"2025-10-05","created_at":"2025-10-04T17:00:00.143554+07:00","updated_at":"2025-11-04T05:25:56.183067+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":7,"date":"2025-10-04","created_at":"2025-10-03T17:00:00.194431+07:00","updated_at":"2025-11-04T05:25:56.177284+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":25,"date":"2025-10-03","created_at":"2025-10-02T17:00:00.138511+07:00","updated_at":"2025-11-04T05:25:56.171219+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":16,"date":"2025-10-02","created_at":"2025-10-01T17:00:00.227774+07:00","updated_at":"2025-11-04T05:25:56.165029+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":33,"date":"2025-10-01","created_at":"2025-09-30T17:00:00.125184+07:00","updated_at":"2025-11-04T05:25:56.158252+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":31,"date":"2025-09-30","created_at":"2025-09-29T17:00:00.129642+07:00","updated_at":"2025-11-04T05:25:56.152338+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":41,"date":"2025-09-29","created_at":"2025-09-28T17:00:00.169230+07:00","updated_at":"2025-11-04T05:25:56.146353+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":36,"date":"2025-09-28","created_at":"2025-09-27T17:00:00.202966+07:00","updated_at":"2025-11-04T05:25:56.140330+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":21,"date":"2025-09-27","created_at":"2025-09-26T17:00:55.355849+07:00","updated_at":"2025-11-04T05:25:56.133065+07:00"},{"camera_name":"kandang_1_karung_pakan_depan","value":1,"date":"2025-09-26","created_at":"2025-09-26T16:54:41.140906+07:00","updated_at":"2025-11-04T05:25:56.128835+07:00"}]}],"total_cameras":1}
```
---
## API IoT
Base URL: `https://dashboard.cpsp.id/api/iot/`
### Flocks
Operasi GET standar untuk data IoT flock.
**Endpoint:**
- `GET /api/iot/flocks/` - Menampilkan semua flocks
- `GET /api/iot/flocks/<id>/` - Mengambil flock tertentu
**Parameter Query:**
- Parameter pagination dan filtering standar
**Contoh:**
```bash
curl https://dashboard.cpsp.id/api/iot/flocks/
```
```json
{
"success": true,
"data": {
"id": 341,
"flock_id": "686df69f407b21002da8750c",
"name": "Lantai 1",
"payload": {
"code": 200,
"status": "success",
"message": "Ok",
"data": {
"inverter": {
"setEnable": false,
"value": 0
},
"device": {
"B1": {
"status": 1,
"setEnable": 1,
"setOff": 60,
"setOn": 90,
"inverterValue": 0,
"inverterEnable": 0,
"inverterState": 0,
"inverterStatus": 0,
"errorCode": 0
},
"B2": {
"status": 1,
"setEnable": 0,
"setOff": 20,
"setOn": 30,
"inverterValue": 0,
"inverterEnable": 0,
"inverterState": 0,
"inverterStatus": 0,
"errorCode": 0
},
"B3": {
"status": 1,
"setEnable": 0,
"setOff": 20,
"setOn": 30,
"inverterValue": 0,
"inverterEnable": 0,
"inverterState": 0,
"inverterStatus": 0,
"errorCode": 0
},
"B4": {
"status": 1,
"setEnable": 0,
"setOff": 20,
"setOn": 30,
"inverterValue": 0,
"inverterEnable": 0,
"inverterState": 0,
"inverterStatus": 0,
"errorCode": 0
},
"B5": {
"status": 0,
"setEnable": 0,
"setOff": 20,
"setOn": 30,
"inverterValue": 0,
"inverterEnable": 0,
"inverterState": 0,
"inverterStatus": 0,
"errorCode": 0
},
"B6": {
"status": 0,
"setEnable": null,
"setOff": null,
"setOn": null,
"inverterValue": 0,
"inverterEnable": 0,
"inverterState": 0,
"inverterStatus": 0,
"errorCode": 0
},
"B7": {
"status": 0,
"setEnable": null,
"setOff": null,
"setOn": null,
"inverterValue": 0,
"inverterEnable": 0,
"inverterState": 0,
"inverterStatus": 0,
"errorCode": 0
},
"B8": {
"status": 0,
"setEnable": null,
"setOff": null,
"setOn": null,
"inverterValue": 0,
"inverterEnable": 0,
"inverterState": 0,
"inverterStatus": 0,
"errorCode": 0
},
"B9": {
"status": 0,
"setEnable": null,
"setOff": null,
"setOn": null,
"inverterValue": 0,
"inverterEnable": null,
"inverterState": null,
"inverterStatus": null,
"errorCode": 0
},
"B10": {
"status": 0,
"setEnable": null,
"setOff": null,
"setOn": null,
"inverterValue": 0,
"inverterEnable": null,
"inverterState": null,
"inverterStatus": null,
"errorCode": 0
},
"B11": {
"status": 0,
"setEnable": null,
"setOff": null,
"setOn": null,
"inverterValue": 0,
"inverterEnable": null,
"inverterState": null,
"inverterStatus": null,
"errorCode": 0
},
"C": {
"status": 0,
"setEnable": 0,
"setOff": 300,
"setOn": 6
},
"H": {
"status": 0,
"setEnable": 0,
"setOff": 20,
"setOn": 30
},
"H2": {
"status": 0,
"setEnable": null,
"setOff": null,
"setOn": null
}
},
"targetTemperature": {
"B1": {
"setEnable": 1,
"value": 30.6,
"hysteresis": 0.1
},
"B2": {
"setEnable": 1,
"value": 31.6,
"hysteresis": 0.1
},
"B3": {
"setEnable": 1,
"value": 32.6,
"hysteresis": 0.1
},
"B4": {
"setEnable": 1,
"value": 33.6,
"hysteresis": 0.1
},
"B5": {
"setEnable": 1,
"value": 35.1,
"hysteresis": 0.1
},
"H": {
"setEnable": 1,
"value": 28.7,
"hysteresis": 0.5
},
"C": {
"setEnable": 0,
"value": 35,
"hysteresis": 0
}
},
"alarm": {
"min": {
"value": 29,
"status": true
},
"max": {
"value": 38.5,
"status": true
}
},
"distributor": {
"id_odoo": "",
"name": "",
"phone": "",
"icon_url": ""
},
"sensors": {
"temperature1": {
"value": 313,
"calibration": 5
},
"temperature2": {
"value": 319,
"calibration": 6
},
"temperature3": {
"value": 326,
"calibration": 2
},
"ammonia": {
"value": 1,
"calibration": 1
},
"humidity": {
"value": 684,
"calibration": -14
},
"temperatureOutside": {
"value": 0,
"calibration": 0
},
"co2": {
"value": 698,
"calibration": 0
},
"wind": {
"value": 0
},
"water": {
"value": -4.950092032938584e+32
}
},
"alarm_ammonia": {
"max": {
"value": 100,
"status": 0
}
},
"alarm_co2": {
"max": {
"value": 0,
"status": 0
},
"status_alarm_max": 0,
"status_sensor_error": 0
},
"actualTemperature": 0,
"idealTemperature": 0,
"humidity": 0,
"co2": 609,
"water": 190555518396268540,
"amonia": 0,
"calibrationTemperature": null,
"mode": "mcc",
"HSI": 0,
"day": 8,
"connected": false,
"isPairing": true,
"lastUpdate": "2025-10-30T04:20:00.638Z",
"warning": "",
"serialNumber": null,
"periode": null,
"deviceName": "",
"version": "1.2.11.0-i.1",
"versionCode": 12110,
"productId": null,
"enable": true,
"deleted": false,
"_id": "686df69f407b21002da8750c",
"type": "CI-Touch218",
"typeCode": 228,
"name": "Lantai 1",
"odooShedId": 5440,
"kandang": "686bc189407b21002dfce44d",
"user": "686bc0f810af4b0028bbd579",
"partNumber": "7092449043030108015",
"location": {
"lat": 0,
"lon": 0
},
"updateTime": "2025-07-09T04:57:03.109Z",
"createdAt": "2025-07-09T04:57:03.111Z",
"updatedAt": "2025-10-30T04:27:32.458Z",
"coop": {
"idOdoo": 5440,
"deleted": false,
"isMandiri": true,
"fully_paired": false,
"active": false,
"_id": "686bc189407b21002dfce44d",
"isActive": false,
"createdBy": "686bc0f810af4b0028bbd579",
"kode": "Sukawarna",
"alamat": "Cilangkap, Sukamulya, Rumpin, Bogor",
"tipe": 1,
"populasi": 50000,
"flock": [
{
"_id": "686bc189407b21002dfce44e",
"populasi": 25000
},
{
"_id": "686bc189407b21002dfce44f",
"populasi": 25000
}
],
"flocks": [],
"floor_count": 2,
"flock_count": 2,
"isDistributor": true,
"createdAt": "2025-07-07T12:46:01.858Z",
"updatedAt": "2025-07-07T12:46:02.047Z",
"jenisBudidaya": "broiler",
"kota": "KAB. BOGOR",
"province": "JAWA BARAT",
"regency": "KAB. BOGOR"
},
"lastConnected": {
"lastConnect": "117 Hari yang lalu",
"timeAgo": "4 bulan yang lalu",
"time": "2025-07-09T04:57:03.109Z"
}
}
},
"fetched_at": "2025-11-04T09:10:02.811769+07:00",
"updated_at": "2025-11-04T09:10:02.811824+07:00"
}
}
```
### Mendapatkan Data Flock Terbaru
Mendapatkan data IoT flock terbaru dengan field yang sudah diformat.
**Endpoint:** `GET /api/iot/flocks/latest/`
**Respons:**
Mengembalikan record flock paling terbaru dengan data yang sudah diformat.
**Contoh:**
```bash
curl https://dashboard.cpsp.id/api/iot/flocks/latest/
```
```json
{
"success": true,
"data": {
"suhu": 31.7,
"kelembaban": 69.6,
"co2": 44.6,
"amonia": 0,
"HSI": 15.866,
"day": 6,
"_id": "686df69f407b21002da8750c",
"name": "Lantai 1",
"kandang": "686bc189407b21002dfce44d",
"updateTime": "2025-10-20T04:59:11.927631Z"
}
}
```
### Mendapatkan Data Flock dalam Rentang Waktu
Mendapatkan data IoT flock dalam rentang tanggal tertentu.
**Endpoint:** `GET /api/iot/flocks/range/`
**Parameter Query:**
- `start_date` (string, wajib) - Tanggal mulai dalam format `yyyy-mm-dd` atau ISO
- `end_date` (string, wajib) - Tanggal akhir dalam format `yyyy-mm-dd` atau ISO
- `flock_id` (string, opsional) - ID flock (menggunakan default jika tidak disediakan)
**Contoh:**
```bash
curl "https://dashboard.cpsp.id/api/iot/flocks/range/?start_date=2025-10-09&end_date=2025-10-09&flock_id=686df69f407b21002da8750c"
```
```json
{
"success": true,
"data": {
"suhu": 30.5,
"kelembaban": 65.8,
"co2": 34.0,
"amonia": 0,
"HSI": 15.27,
"day": 38,
"_id": "686df69f407b21002da8750c",
"name": "Lantai 1",
"kandang": "686bc189407b21002dfce44d",
"updateTime": "2025-10-09T04:23:09.163514Z"
}
}
```
### Mendapatkan Data Sensor Terbaru
Mendapatkan data sensor IoT flock terbaru.
**Endpoint:** `GET /api/iot/flocks/sensors/latest/`
**Contoh:**
```bash
curl https://dashboard.cpsp.id/api/iot/flocks/sensors/latest/
```
```json
{
"success": true,
"data": {
"suhu": 31.7,
"kelembaban": 69.6,
"co2": 44.6,
"amonia": 0,
"HSI": 15.866,
"day": 6,
"_id": "686df69f407b21002da8750c",
"name": "Lantai 1",
"kandang": "686bc189407b21002dfce44d",
"update_at": "2025-10-20T04:59:11.927631Z",
"sensor-suhu1:sensors.temperature1.value/31.3": null,
"sensor-suhu1:sensors.temperature2.value/31.6": null,
"sensor-suhu1:sensors.temperature3.value/31.3": null,
"sensor-ammonia:sensors.ammonia.value/0.1": null,
"sensor-kelembaban:sensors.humidity.value/70.7": null,
"sensor-suhuluar:sensors.temperatureOutside.value/0.0": null,
"sensor-co2:sensors.co2.value/44.6": null,
"sensor-wind:sensors.wind.value/0.3": null,
"sensor-water:sensors.water.value/1.268472e-27": null
}
}
```
### Mendapatkan Data Sensor dalam Rentang Waktu
Mendapatkan data sensor IoT flock dalam rentang tanggal tertentu.
**Endpoint:** `GET /api/iot/flocks/sensors/range/`
**Parameter Query:**
- `start_date` (string, wajib) - Tanggal mulai dalam format `yyyy-mm-dd` atau ISO
- `end_date` (string, wajib) - Tanggal akhir dalam format `yyyy-mm-dd` atau ISO
- `flock_id` (string, opsional) - ID flock (menggunakan default jika tidak disediakan)
**Contoh:**
```bash
curl "https://dashboard.cpsp.id/api/iot/flocks/sensors/range/?start_date=2025-10-09&end_date=2025-10-09"
```
```json
{
"success": true,
"data": {
"suhu": 30.5,
"kelembaban": 65.8,
"co2": 34.0,
"amonia": 0,
"HSI": 15.27,
"day": 38,
"_id": "686df69f407b21002da8750c",
"name": "Lantai 1",
"kandang": "686bc189407b21002dfce44d",
"update_at": "2025-10-09T04:23:09.163514Z",
"sensor-suhu1:sensors.temperature1.value/28.3": null,
"sensor-suhu1:sensors.temperature2.value/28.7": null,
"sensor-suhu1:sensors.temperature3.value/28.0": null,
"sensor-ammonia:sensors.ammonia.value/0.0": null,
"sensor-kelembaban:sensors.humidity.value/75.9": null,
"sensor-suhuluar:sensors.temperatureOutside.value/0.0": null,
"sensor-co2:sensors.co2.value/36.3": null,
"sensor-wind:sensors.wind.value/0.0": null,
"sensor-water:sensors.water.value/0.0": null
}
}
```
### Log Aktivitas
Operasi list standar untuk log aktivitas IoT.
**Endpoint:** `GET /api/iot/log-act/`
**Parameter Query:**
- `startDate` (string, opsional) - Tanggal mulai dalam format `yyyy-mm-dd` atau ISO
- `endDate` (string, opsional) - Tanggal akhir dalam format `yyyy-mm-dd` atau ISO
- `flock_id` (string, opsional) - ID flock (menggunakan default jika tidak disediakan)
- `cage_id` (string, opsional) - Filter berdasarkan ID cage
- `limit` (integer, opsional) - Ukuran halaman (default: 50)
- `page` (integer, opsional) - Nomor halaman (default: 1)
**Respons:**
```json
{
"success": true,
"data": {
"id": "string",
"flock": "string",
"cage_id": "string",
"description": "string",
"waktu": "datetime",
"flag": "string",
"type_notif": "string",
"logged_status": "string",
"log_dev_type": "string"
}
}
```
**Contoh:**
```bash
curl "https://dashboard.cpsp.id/api/iot/log-act/?startDate=2025-10-09&endDate=2025-10-09&limit=3&page=1"
```
```json
{
"success": true,
"data": {
"id": "68e7bb8bee0955002d11d332",
"waktu": "2025-10-09T20:41:31.344000+07:00",
"cage_id": "686bc189407b21002dfce44d",
"flock": "686df69f407b21002da8750c",
"description": "Koneksi Internet Terhubung",
"flag": "success",
"type_notif": "alat",
"logged_status": "Koneksi internet terhubung kembali",
"log_dev_type": "Chickin Touchscreen"
}
}
```
### Mendapatkan Log Aktivitas Terakhir
Mendapatkan N record log aktivitas IoT terbaru.
**Endpoint:** `GET /api/iot/log-act/last/`
**Parameter Query:**
- `flock_id` (string, opsional) - ID flock (menggunakan default jika tidak disediakan)
- `cage_id` (string, opsional) - Filter berdasarkan ID cage
- `limit` (integer, opsional) - Jumlah record (default: 10)
**Respons:**
```json
{
"success": true,
"data": {
"id": "string",
"flock": "string",
"cage_id": "string",
"description": "string",
"waktu": "datetime",
"flag": "string",
"type_notif": "string",
"logged_status": "string",
"log_dev_type": "string"
}
}
```
**Contoh:**
```bash
curl "https://dashboard.cpsp.id/api/iot/log-act/last/?limit=3"
```
```json
{
"success": true,
"data": {
"id": "68ef49f8ee0955002d86574a",
"waktu": "2025-10-15T14:15:03.941000+07:00",
"cage_id": "686bc189407b21002dfce44d",
"flock": "686df69f407b21002da8750c",
"description": "kipas 5",
"flag": "success",
"type_notif": "alat",
"logged_status": "kipas 5 berhasil dinyalakan oleh Target suhu",
"log_dev_type": "target suhu"
}
}
```
### Mendapatkan Log Aktivitas Terakhir dengan Pencarian
Mendapatkan record log aktivitas IoT terbaru yang difilter berdasarkan deskripsi.
**Endpoint:** `GET /api/iot/log-act/last/<search>/`
**Parameter:**
- `search` (string, wajib) - Kata kunci untuk memfilter berdasarkan deskripsi (tidak case-sensitive)
**Parameter Query:**
- `flock_id` (string, opsional) - ID flock (menggunakan default jika tidak disediakan)
- `cage_id` (string, opsional) - Filter berdasarkan ID cage
- `limit` (integer, opsional) - Jumlah record (default: 10)
**Contoh:**
```bash
curl "https://dashboard.cpsp.id/api/iot/log-act/last/kipas/?limit=3"
```
```json
{
"success": true,
"data": {
"id": "68ef49f8ee0955002d86574a",
"waktu": "2025-10-15T14:15:03.941000+07:00",
"cage_id": "686bc189407b21002dfce44d",
"flock": "686df69f407b21002da8750c",
"description": "kipas 5",
"flag": "success",
"type_notif": "alat",
"logged_status": "kipas 5 berhasil dinyalakan oleh Target suhu",
"log_dev_type": "target suhu"
}
}
```
---
## API Data Support Manual / API Data Support
Base URL: `https://dashboard.cpsp.id/api/data-support/`
### DO (Data Object)
**Endpoint:**
- `GET /api/data-support/do/` - Menampilkan semua record DO
- `GET /api/data-support/do/<id>/` - Mengambil record DO tertentu
**Parameter Query:**
- `name` (string, opsional) - Filter berdasarkan nama (pencocokan sebagian, tidak case-sensitive)
**Aksi Kustom:**
- `GET /api/data-support/do/<id>/daily_data/` - Mendapatkan data berat harian untuk record DO tertentu
- `GET /api/data-support/do/<id>/table_data/` - Mendapatkan data tabel yang sudah diformat untuk record DO tertentu
- `GET /api/data-support/do/<id>/list_daily/` - Mendapatkan data list yang sudah diformat untuk record DO tertentu
- `GET /api/data-support/do/weight_standard_data/` - Mendapatkan data standar berat yang diformat sebagai struktur JSON weightStandardData
- `GET /api/data-support/do/weight_standard_data_by_do/` - Mendapatkan data standar berat untuk record DO tertentu (parameter query: `do_ids` - integer yang dipisahkan koma)
**Contoh:**
```bash
curl "https://dashboard.cpsp.id/api/data-support/do/?name=contoh"
curl "https://dashboard.cpsp.id/api/data-support/do/weight_standard_data_by_do/?do_ids=1,2,3"
```
### DO Daily
**Endpoint:**
- `GET /api/data-support/do-daily/` - Menampilkan semua record DO daily
- `GET /api/data-support/do-daily/<id>/` - Mengambil record DO daily tertentu
**Parameter Query:**
- `do_id` (integer, opsional) - Filter berdasarkan ID record DO induk
- `day` (integer, opsional) - Filter berdasarkan hari
**Contoh:**
```bash
curl "https://dashboard.cpsp.id/api/data-support/do-daily/?do_id=1&day=5"
```
### Parameters (Parameter)
**Endpoint:**
- `GET /api/data-support/parameters/` - Menampilkan semua parameters
- `GET /api/data-support/parameters/<id>/` - Mengambil record parameter tertentu
**Parameter Query:**
- `name` (string, opsional) - Filter berdasarkan nama (pencocokan sebagian, tidak case-sensitive)
**Aksi Kustom:**
- `GET /api/data-support/parameters/by_name/` - Mendapatkan parameter berdasarkan nama tepat (parameter query: `name` - wajib)
**Contoh:**
```bash
curl "https://dashboard.cpsp.id/api/data-support/parameters/?name=contoh"
curl "https://dashboard.cpsp.id/api/data-support/parameters/by_name/?name=NAMA_PARAMETER"
```
### FCR Table
Mendapatkan data tabel FCR dengan perhitungan berdasarkan umur ayam dalam hari dan populasi.
**Endpoint:** `GET /api/data-support/fcrtable/<str:dow>/<str:population>/`
**Parameter:**
- `dow` (integer, wajib) - berat hari 0 ayam ( 35 sd 50 )
- `population` (integer, wajib) - Populasi
**Respons:**
```json
{
"success": true,
"data": {
"day": "integer",
"weight": "float",
"adg": "float",
"daily-gain": "float",
"daily-feed": "float",
"feeds-use": "float",
"fcr": "float",
"total-feed": "float",
"bags-feed": "float"
}
}
```
**Contoh:**
```bash
curl "https://dashboard.cpsp.id/api/data-support/fcrtable/35/20000/"
```
```json
{
"success": true,
"data": {
"day": 1,
"weight": 46.666667,
"adg": 11.666667,
"daily-gain": 0.33333,
"daily-feed": 10.8255,
"feeds-use": 10.826667,
"fcr": 0.232,
"total-feed": 216533.3331,
"bags-feed": 4330.666662
}
}
```
### FCR Table Hari Tunggal
Mendapatkan data FCR dengan perhitungan berdasarkan umur ayam dalam hari dan populasi pada hari yang ditentukan.
**Endpoint:** `GET /api/data-support/fcrtable/<str:dow>/<str:population>/<int:day>/`
**Parameter:**
- `dow` (integer, wajib) - berat day 0 ayam
- `population` (integer, wajib) - Populasi
- `day` (integer, wajib) - umur
**Respons:**
```json
{
"success": true,
"data": {
"day": "integer",
"weight": "float",
"adg": "float",
"daily-gain": "float",
"daily-feed": "float",
"feeds-use": "float",
"fcr": "float",
"total-feed": "float",
"bags-feed": "float"
}
}
```
**Contoh:**
```bash
curl https://dashboard.cpsp.id/api/data-support/fcrtable/35/19972/5/
```
```json
{
"success": true,
"data": {
"day": 5,
"weight": 109.166667,
"adg": 18.333333,
"daily-gain": 0.20183,
"daily-feed": 0.002271,
"feeds-use": 0.084386,
"fcr": 0.773,
"total-feed": 1685.353864,
"bags-feed": 33.707077
}
}
```
---
## Respons Error
Semua endpoint dapat mengembalikan respons error berikut:
### 400 Bad Request
```json
{
"success": false,
"detail": "Pesan error yang menjelaskan apa yang salah"
}
```
### 404 Not Found
```json
{
"success": false,
"detail": "Resource tidak ditemukan"
}
```
### 500 Internal Server Error
```json
{
"success": false,
"detail": "Pesan error yang menjelaskan error server"
}
```
---
## Catatan Penting
1. **Format Tanggal:** Parameter tanggal menerima format `yyyy-mm-dd` dan format ISO 8601 (misalnya, `2024-01-01T00:00:00Z`).
2. **Paginasi:** Endpoint list mungkin mendukung paginasi. Periksa header respons atau parameter query untuk detail paginasi.
3. **Filtering:** Banyak endpoint mendukung filtering parameter query. Lihat dokumentasi endpoint individual untuk filter yang tersedia.
4. **Format UUID:** Parameter UUID harus dalam format UUID standar (misalnya, `123e4567-e89b-12d3-a456-426614174000`).
5. **Base URL:** Semua endpoint menggunakan base URL `https://dashboard.cpsp.id`. Ganti dengan URL development/staging Anda jika diperlukan.
---
## Dukungan
Untuk masalah atau pertanyaan mengenai API, silakan hubungi tim pengembangan.