> 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

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

## Pertimbangan penting

Saat membuat perhitungan, perhatikan 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**: Pastikan ekspresi Anda menangani nilai null atau pembacaan yang tidak valid dengan baik
* **Dampak pada performa**: Perhitungan kompleks dengan banyak fungsi bertingkat dapat memengaruhi kecepatan pemrosesan untuk data berfrekuensi tinggi
* **Kendala matematis**: Fungsi seperti logaritma dan akar kuadrat memerlukan nilai input positif
* **Referensi historis**: Saat menggunakan nilai terindeks (mis., `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 sebelumnya dihitung. Selalu validasi perhitungan Anda dengan data uji sebelum menerapkannya ke alur produksi.
{% endhint %}

## Perhitungan dasar

### Konversi satuan

Mengonversi pengukuran antara satuan 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 mudah dipahami oleh pengguna yang lebih akrab dengan pengukuran Fahrenheit. Ini sangat bernilai 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 mungkin menunjukkan masalah peralatan atau perubahan lingkungan. Dengan membuat atribut khusus untuk selisih ini, Anda dapat menyiapkan aturan peringatan untuk perubahan mendadak tanpa pemrosesan hilir yang kompleks.

{% hint style="info" %}
**Contoh:** Untuk armada truk berpendingin, perhitungan ini dapat segera mengidentifikasi saat suhu kargo mulai naik terlalu cepat, sehingga petugas dispatch dapat menghubungi supir sebelum barang mudah rusak terpengaruh. Atribut ini dapat memicu aturan peringatan ketika perubahan suhu melebihi 3 derajat dalam waktu singkat, yang mungkin menandakan 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.

### **Menemukan 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 berturut-turut, yang dapat membantu mengidentifikasi masalah komunikasi atau memvalidasi bahwa perangkat melaporkan pada frekuensi yang diharapkan. Contoh ini menampilkan perhitungan antara dua pembacaan valid terakhir, tetapi dapat disesuaikan untuk menangani dua nilai historis apa pun.

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

### **Mengonversi stempel waktu ke format yang dapat dibaca manusia**

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

**Penerapan praktis:** Mengonversi stempel waktu 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 bawaannya.

### Pembulatan nilai

**Bulatkan suhu ke bilangan bulat terdekat**

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

**Penerapan praktis:** Pembulatan berguna ketika presisi yang tepat tidak diperlukan atau ketika Anda ingin mengurangi derau dalam pembacaan sensor. Misalnya, membulatkan data sensor lingkungan mungkin cukup untuk pemantauan iklim umum sekaligus mengurangi kebutuhan penyimpanan. Fungsi ini juga berguna saat membuat kategori atau rentang nilai (misalnya, mengelompokkan pembacaan suhu dalam kenaikan 5 derajat).

{% hint style="info" %}
**Contoh:** Dalam armada, pembacaan suhu mesin sering mencakup angka desimal yang tidak bermakna untuk aturan peringatan supir atau penjadwalan pemeliharaan. Pembulatan nilai-nilai ini menyederhanakan tampilan dasbor dan membuat ambang suhu lebih mudah ditentukan. Misalnya, aturan peringatan pemeliharaan dapat dipicu ketika suhu mesin yang dibulatkan melebihi 90°C, alih-alih menangani 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:

* Memampatkan data yang mencakup beberapa orde besaran ke dalam rentang yang lebih mudah dikelola
* Mengonversi 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 merupakan satuan logaritmik
* Pengukuran pH dalam pemantauan lingkungan

{% hint style="info" %}
**Contoh:** Saat menganalisis perilaku supir dengan akselerometer, fungsi logaritmik dapat membantu menormalkan data akselerasi yang mencakup 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 suatu 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 dalam ruang multidimensi (misalnya, trilaterasi untuk penentuan posisi)
* Menormalkan jenis data sensor tertentu

{% hint style="info" %}
**Contoh:** Saat menghitung jarak sebenarnya 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 ditempuh kendaraan antara dua pembacaan GPS menggunakan rumus jarak Euclidean, fungsi akar kuadrat sangat penting. Aplikasi umum lainnya adalah menghitung magnitudo getaran atau benturan 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 kasar.
{% endhint %}

## Operasi gabungan

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

### **Rata-rata geometrik 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 geometrik dari pembacaan dua sensor suhu dan membulatkan hasilnya untuk memberikan nilai yang lebih rapi. Rata-rata geometrik sering kali lebih tepat daripada rata-rata aritmetika saat menangani laju, rasio, atau pengukuran yang secara alami dikombinasikan dengan perkalian.

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

### **Perhitungan nilai terstandar**

{% 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 terstandar di berbagai sensor dengan rentang yang berbeda. Ini sangat berguna untuk membuat dasbor seragam atau memicu aturan peringatan berdasarkan nilai relatif, bukan pengukuran absolut.

{% hint style="info" %}
**Contoh:** Seorang manajer armada mengawasi kendaraan dari berbagai produsen, 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 terstandar tanpa perlu memperhitungkan karakteristik sensor spesifik 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 dikirimkan.

```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 koma, sambil otomatis melewati slot yang belum dipasangkan. 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 ditempatkan 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 posisi kosong dipertahankan dalam output, gunakan `util:join` sebagai gantinya, yang memperlakukan nilai null sebagai string kosong alih-alih melewatinya.
{% 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
