> For the complete documentation index, see [llms.txt](https://navixy.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navixy.com/docs/user/id/guide/account/iot-logic/nodes/initiate-attribute-node/calculation-examples.md).

# Contoh perhitungan

Contoh praktis untuk menulis perhitungan atribut dalam Bahasa Ekspresi IoT Logic. Mencakup panduan tentang penamaan atribut dan penanganan nilai null secara aman.

Node Inisiasi Atribut di IoT Logic mendukung berbagai macam perhitungan melalui [Bahasa Ekspresi IoT Logic Navixy](/docs/iot-logic-api/technologies/navixy-iot-logic-expression-language.md). Panduan ini menyediakan contoh praktis perhitungan umum untuk membantu Anda memperoleh nilai maksimal dari data IoT Anda.

## Pertimbangan penting

Saat membuat perhitungan, ingat poin-poin berikut:

* **Validitas nama atribut**: Pastikan Anda menggunakan nama atribut yang benar dalam perhitungan. Anda dapat mencari nama atribut yang sudah ada menggunakan [Penganalisis Data](/docs/user/id/guide/account/iot-logic/data-stream-analyzer.md)atau menyisipkannya dengan [Mengelola atribut](/docs/user/id/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#short-syntax) menggunakan [pelengkapan otomatis](/docs/user/id/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#autofill-attribute-names).
* **Validitas data**: Formula yang membaca nilai yang tidak dibawa paket tidak menghasilkan apa pun, dan atribut tersebut kemudian tidak memiliki nilai untuk paket itu. Lindungi perhitungan dengan `!= null`, atau substitusikan nilai cadangan dengan `??`. Lihat [Nilai yang hilang dalam ekspresi](/docs/user/id/guide/account/iot-logic/nodes/missing-values-in-expressions.md).
* **Dampak kinerja**: Perhitungan kompleks dengan banyak fungsi bertingkat dapat memengaruhi kecepatan pemrosesan untuk data berfrekuensi tinggi
* **Batasan matematis**: Fungsi seperti logaritma dan akar kuadrat memerlukan nilai input positif
* **Referensi historis**: Saat menggunakan nilai terindeks (misalnya, `value('param', 1, 'valid')`), pastikan Anda memiliki data historis yang memadai dan gunakan [sintaks ekspresi lengkap](/docs/user/id/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#full-syntax)

{% hint style="info" %}
Fungsi matematika dapat diterapkan pada parameter numerik apa pun atau atribut yang dihitung sebelumnya. Selalu validasi perhitungan Anda dengan data uji sebelum menerapkannya ke alur produksi.
{% endhint %}

{% hint style="info" %}
Untuk mengisi atribut dengan nama Perimeter tempat perangkat berada, alih-alih dengan perhitungan, gunakan `geofenceName()`. Ini adalah opsi berbayar, dinonaktifkan secara default. Lihat [Fungsi Perimeter](/docs/user/id/guide/account/iot-logic/nodes/geofence-functions.md).
{% endhint %}

## Perhitungan dasar

### Konversi satuan

Mengonversi pengukuran antara unit yang berbeda adalah salah satu operasi yang paling umum dalam pemrosesan data IoT.

#### **Konversi kecepatan (km/jam ke mph)**

```jexl
can_speed/1.609
```

**Penerapan praktis:** Konversi ini menstandarkan data kecepatan kendaraan untuk wilayah yang menggunakan satuan imperial. Dengan melakukan perhitungan ini di IoT Logic alih-alih di aplikasi hilir, Anda memastikan konsistensi di seluruh sistem yang mengonsumsi data.

**Konversi suhu (Celsius ke Fahrenheit)**

```jexl
temperature * 1.8 + 32
```

**Penerapan praktis:** Konversi ini membuat pembacaan suhu lebih mudah dipahami bagi pengguna yang lebih akrab dengan satuan Fahrenheit. Ini sangat bermanfaat bagi organisasi multinasional yang beroperasi di berbagai wilayah dengan standar pengukuran yang berbeda.

### Menghitung selisih

Membandingkan pembacaan saat ini dengan nilai sebelumnya membantu mengidentifikasi perubahan dan tren dalam data Anda.

#### **Deteksi perubahan suhu**

```jexl
temperature - value('temperature', 1, 'valid')
```

**Penerapan praktis:** Perhitungan ini membantu mendeteksi fluktuasi suhu cepat yang dapat mengindikasikan masalah peralatan atau perubahan lingkungan. Dengan membuat atribut khusus untuk selisih ini, Anda dapat menyiapkan aturan peringatan untuk perubahan mendadak tanpa pemrosesan hilir yang rumit.

{% hint style="info" %}
**Contoh:** Untuk armada truk berpendingin, perhitungan ini dapat langsung mengidentifikasi saat suhu muatan mulai naik terlalu cepat, sehingga petugas pengiriman dapat menghubungi supir sebelum barang mudah rusak terdampak. Atribut ini dapat memicu aturan peringatan ketika perubahan suhu melebihi 3 derajat dalam waktu singkat, yang mungkin menunjukkan kegagalan sistem pendingin atau pintu dibiarkan terbuka.
{% endhint %}

## Perhitungan berbasis waktu

Perhitungan waktu membantu Anda memahami perilaku perangkat dari waktu ke waktu dan mengukur pola operasional.

### **Mencari waktu yang berlalu antara pembacaan valid terakhir**

```jexl
srvTime('avl_25', 0, 'valid') - srvTime('avl_25', 1, 'valid')
```

**Penerapan praktis:** Perhitungan ini mengukur interval antara transmisi data yang berurutan, yang dapat membantu mengidentifikasi masalah komunikasi atau memvalidasi bahwa perangkat melaporkan pada frekuensi yang diharapkan. Contoh ini menunjukkan perhitungan antara dua pembacaan valid terakhir, tetapi dapat disesuaikan untuk menangani dua nilai historis apa pun.

{% hint style="info" %}
**Contoh:** Untuk armada taksi, perhitungan ini dapat membantu mengidentifikasi masalah konektivitas pada pelacak GPS. Jika waktu antar pembacaan tiba-tiba meningkat dari standar 30 detik menjadi beberapa menit, hal ini mungkin menandakan area dengan cakupan seluler yang buruk atau malfungsi perangkat, sehingga tim Pemeliharaan dapat menangani masalah sebelum memengaruhi kualitas layanan.
{% endhint %}

### **Mengonversi timestamp ke format yang dapat dibaca manusia**

```jexl
dtFormat(genTime('can_fuel_1', 0, 'all'))
```

**Penerapan praktis:** Mengonversi timestamp Unix ke format ISO 8601 membuat data lebih mudah dibaca dalam log dan Laporan. Format ini didukung secara luas oleh alat analisis dan basis data, sehingga menyederhanakan integrasi dengan sistem lain.

## Fungsi matematika lanjutan

IoT Logic mendukung operasi matematika yang canggih melalui fungsi matematika bawaan.

### Pembulatan nilai

**Bulatkan suhu ke bilangan bulat terdekat**

```jexl
math:round(value('temperature_2', 0, 'valid'))
```

**Penerapan praktis:** Pembulatan bernilai guna ketika ketelitian tepat tidak diperlukan atau saat Anda ingin mengurangi derau pada pembacaan sensor. Misalnya, membulatkan data sensor lingkungan mungkin sudah cukup untuk pemantauan iklim umum sambil mengurangi kebutuhan penyimpanan. Fungsi ini juga berguna saat membuat kategori atau pita nilai (misalnya, mengelompokkan pembacaan suhu ke dalam kenaikan 5 derajat).

{% hint style="info" %}
**Contoh:** Dalam pengelolaan Armada, pembacaan suhu mesin sering mencakup angka desimal yang tidak bermakna untuk aturan peringatan bagi Supir atau penjadwalan Pemeliharaan. Membulatkan nilai-nilai ini menyederhanakan tampilan dasbor dan membuat ambang suhu lebih mudah ditetapkan. Misalnya, aturan peringatan Pemeliharaan dapat dipicu ketika suhu mesin yang dibulatkan melebihi 90°C, alih-alih berurusan dengan nilai presisi seperti 89,7°C.
{% endhint %}

### Perhitungan logaritmik

**Logaritma natural dari suatu nilai**

```jexl
math:log(value('temperature_2', 0, 'valid'))
```

**Penerapan praktis:** Transformasi logaritmik sangat berguna untuk:

* Mengompresi data yang mencakup beberapa orde besaran menjadi rentang yang lebih mudah dikelola
* Mengubah hubungan eksponensial menjadi hubungan linear agar lebih mudah dianalisis
* Bekerja dengan jenis sensor tertentu yang memiliki karakteristik respons logaritmik
* Perhitungan tingkat suara, di mana desibel adalah satuan logaritmik
* Pengukuran pH dalam pemantauan lingkungan

{% hint style="info" %}
**Contoh:** Saat menganalisis perilaku Supir dengan akselerometer, fungsi logaritmik dapat membantu menormalkan data percepatan yang berkisar dari gerakan kecil hingga kejadian pengereman mendadak. Ini memudahkan pembuatan skor Keselamatan Supir yang bermakna dan tidak terlalu bias oleh kejadian ekstrem sesekali. Contoh praktis lainnya adalah saat bekerja dengan sensor Bahan bakar yang tidak memberikan pembacaan linear. Beberapa sensor level Bahan bakar memiliki nilai resistansi nonlinier yang sesuai dengan level Bahan bakar sebenarnya. Menggunakan perhitungan logaritmik dapat membantu menerjemahkan pembacaan ini menjadi persentase level Bahan bakar yang lebih akurat.
{% endhint %}

### Operasi akar kuadrat

**Hitung akar kuadrat dari sebuah pembacaan**

```jexl
math:sqrt(value('temperature_2', 0, 'valid'))
```

**Penerapan praktis:** Fungsi akar kuadrat berguna untuk:

* Mengonversi antara daya dan amplitudo dalam pengukuran listrik
* Menghitung simpangan baku dalam analisis statistik data sensor
* Menentukan nilai root mean square (RMS) untuk parameter listrik
* Perhitungan jarak di ruang multidimensi (misalnya, trilaterasi untuk penentuan posisi)
* Menormalkan jenis data sensor tertentu

{% hint style="info" %}
**Contoh:** Saat menghitung jarak sesungguhnya antara dua titik GPS (garis lintang dan garis bujur), Anda perlu menggunakan fungsi akar kuadrat sebagai bagian dari rumus jarak. Misalnya, jika Anda menghitung jarak yang telah ditempuh sebuah kendaraan antara dua pembacaan GPS dengan menggunakan rumus jarak Euclidean, fungsi akar kuadrat sangat penting. Penerapan umum lainnya adalah dalam menghitung magnitudo getaran atau kejutan dari beberapa sumbu akselerometer (X, Y, Z). Akar kuadrat dari jumlah nilai kuadrat dari setiap sumbu menghasilkan magnitudo getaran keseluruhan, yang berguna untuk mendeteksi benturan kendaraan atau kondisi jalan yang buruk.
{% endhint %}

## Operasi gabungan

Anda dapat membuat perhitungan yang lebih kompleks lagi dengan menggabungkan beberapa fungsi dan operasi.

### **Rata-rata geometri dengan pembulatan**

{% code overflow="wrap" %}

```jexl
math:round(math:sqrt(value('temperature_1', 0, 'valid') * value('temperature_2', 0, 'valid')))
```

{% endcode %}

**Penerapan praktis:** Perhitungan ini menghitung rata-rata geometri dari pembacaan dua sensor suhu dan membulatkan hasilnya untuk menghasilkan nilai yang lebih rapi. Rata-rata geometri sering kali lebih sesuai daripada rata-rata aritmetika saat menangani laju, rasio, atau pengukuran yang secara alami dikombinasikan melalui perkalian.

{% hint style="info" %}
**Contoh:** Dalam skenario transportasi berpendingin, Anda mungkin memiliki beberapa sensor suhu yang dipasang di seluruh area kargo. Perhitungan ini memberikan pembacaan suhu yang seimbang dengan mempertimbangkan kedua nilai sekaligus meminimalkan pengaruh pencilan ekstrem. Alih-alih memicu aturan peringatan berdasarkan hanya satu sensor (yang mungkin dipengaruhi oleh pembukaan pintu), perhitungan gabungan ini memberikan kondisi suhu keseluruhan yang lebih representatif bagi muatan sensitif.
{% endhint %}

### **Perhitungan nilai terstandarisasi**

{% code overflow="wrap" %}

```jexl
(value('sensor_reading', 0, 'valid') - value('sensor_min', 0, 'valid')) / (value('sensor_max', 0, 'valid') - value('sensor_min', 0, 'valid')) * 100
```

{% endcode %}

**Penerapan praktis:** Ini menormalkan pembacaan sensor ke skala persentase 0-100%, sehingga memungkinkan perbandingan terstandarisasi di berbagai sensor dengan rentang yang berbeda. Ini sangat berguna untuk membuat dasbor yang seragam atau memicu aturan peringatan berdasarkan nilai relatif, bukan pengukuran absolut.

{% hint style="info" %}
**Contoh:** Seorang manajer Armada mengawasi Kendaraan dari berbagai pabrikan, masing-masing dengan pembacaan sensor Bahan bakar yang berbeda (ohm, volt, nilai digital mentah). Dengan menormalkan pembacaan yang beragam ini ke skala persentase yang konsisten, manajer dapat menerapkan aturan peringatan Bahan bakar rendah yang sama di seluruh Armada dan menghasilkan laporan Konsumsi bahan bakar yang terstandarisasi tanpa perlu memperhitungkan karakteristik sensor spesifik dari setiap model Kendaraan.
{% endhint %}

## Operasi string

Operasi string memungkinkan Anda menggabungkan beberapa nilai atribut menjadi satu output string.

### Menggabungkan nilai atribut

Menggabungkan nilai dari beberapa atribut berguna saat Anda perlu mengonsolidasikan data dari beberapa sumber ke dalam satu bidang untuk ditampilkan atau ditransmisikan.

```jexl
util:joinNonNull(', ', ble_name_1, ble_name_2, ble_name_3, ble_name_4, ble_name_5, ble_name_6, ble_name_7, ble_name_8)
```

**Penerapan praktis:** Perangkat dengan kemampuan pemindaian BLE dapat mendeteksi beberapa sensor periferal secara bersamaan, tetapi tidak semua slot sensor selalu terisi. Perhitungan ini menghasilkan daftar sensor aktif yang rapi, dipisahkan dengan koma, dan secara otomatis melewati slot yang tidak berpasangan. Hasilnya siap ditampilkan atau diteruskan ke sistem eksternal tanpa pembersihan tambahan.

{% hint style="info" %}
**Contoh**: Sebuah truk berpendingin mendukung hingga delapan sensor suhu BLE yang dipasang di seluruh area kargo, tetapi saat ini hanya tiga yang terpasang. Alih-alih menghasilkan "Sensor A, Sensor B, Sensor C, , , , , " dengan entri kosong untuk slot yang tidak digunakan, `util:joinNonNull` menghasilkan "Sensor A, Sensor B, Sensor C", daftar rapi yang diperbarui secara otomatis saat sensor ditambahkan atau dihapus. Jika Anda perlu mempertahankan posisi kosong dalam output, gunakan `util:join` sebagai gantinya, yang memperlakukan nilai null sebagai string kosong, bukan melewatkannya.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://navixy.com/docs/user/id/guide/account/iot-logic/nodes/initiate-attribute-node/calculation-examples.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
