> 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/geofence-functions.md).

# Fungsi Perimeter

Gunakan geofence yang sudah Anda miliki di Navixy di dalam alur IoT Logic, untuk memicu tindakan saat perangkat memasuki atau meninggalkan suatu area, atau untuk mencatat area tempat perangkat berada.

Fungsi perimeter memungkinkan aliran merespons lokasi perangkat, menggunakan perimeter yang sudah Anda miliki di Navixy. Anda mereferensikan sebuah perimeter alih-alih mendeskripsikan area dengan koordinat, sehingga batasnya tetap sama seperti yang sudah Anda gunakan untuk aturan peringatan dan laporan.

## Fungsi yang diperlukan

| Jika Anda ingin                                                                                        | Gunakan                                                                                                           |
| ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- |
| Merespons satu perimeter tertentu saat perangkat berada di dalamnya, memasukinya, atau meninggalkannya | `inGeofence()`, `enterGeofence()`, `leaveGeofence()`. Lihat [Merespons satu perimeter](#reacting-to-one-geofence) |
| Mengetahui perimeter mana yang ditempati perangkat, tanpa menyebut satu perimeter pun sebelumnya       | `geofenceName()`. Lihat [Mencatat perimeter saat ini](#recording-the-current-geofence)                            |

{% hint style="warning" %}
Anda harus membuat perimeter di Navixy sebelum dapat mereferensikannya dalam ekspresi IoT Logic. Untuk membuat atau mengelola perimeter, lihat [Perimeter](/docs/user/id/guide/tracking/map-tools/geofences.md).
{% endhint %}

{% hint style="danger" %}
**`geofenceName()` merupakan opsi berbayar, dijual terpisah.** Secara default, fitur ini dinonaktifkan untuk setiap akun, dan penyedia layanan Anda mengaktifkannya per akun atas permintaan. Tiga fungsi lainnya tidak terpengaruh dan tidak memerlukan opsi tambahan.

Hubungi penyedia layanan Anda agar fitur ini diaktifkan. Lihat [Sebelum Anda mulai](#before-you-start).
{% endhint %}

## Merespons satu perimeter

Gunakan ketiga fungsi ini saat Anda sudah tahu perimeter mana yang relevan. Masing-masing menjawab ya atau tidak untuk sebagian besar paket data yang dikirim perangkat, sehingga aliran dapat mengirim data tersebut ke salah satu cabang atau cabang lainnya. Pada beberapa paket, fungsi tidak dapat menjawab, dan sebagai gantinya fungsi mengembalikan nilai kosong. Lihat [Saat fungsi perimeter tidak memberikan jawaban](#when-a-geofence-function-gives-no-answer).

| Fungsi              | Menjawab ya ketika                           |
| ------------------- | -------------------------------------------- |
| `inGeofence(id)`    | Perangkat saat ini berada di dalam perimeter |
| `enterGeofence(id)` | Perangkat baru saja memasuki perimeter       |
| `leaveGeofence(id)` | Perangkat baru saja keluar dari perimeter    |

Tambahkan ke kondisi sebuah node  **Logika** .  `id` adalah ID numerik perimeter di akun Navixy Anda, dan pemilih akan mengisinya untuk Anda, sehingga Anda jarang mengetiknya secara manual. Lihat [Cara menambahkan kondisi perimeter](#how-to-add-a-geofence-condition).

### Saat fungsi perimeter tidak memberikan jawaban

`inGeofence()`, `enterGeofence()`, dan `leaveGeofence()` mengembalikan nilai kosong alih-alih ya atau tidak saat fungsi tidak dapat menjawab. Fungsi tidak dapat menjawab dalam kasus berikut:

* Paket data tidak membawa koordinat. Posisi dengan kualitas buruk tetap diuji, jadi sinyal GPS yang lemah memberikan jawaban ya atau tidak yang nyata.
* Perimeter dihapus dari akun Navixy Anda, atau menjadi tidak dapat diakses, setelah aliran disimpan. Perimeter yang sudah tidak ada saat Anda menyimpan aliran akan ditolak pada saat penyimpanan, bukan setelahnya.

Nilai kosong menghentikan kondisi yang menjadi bagiannya. Saat fungsi merupakan keseluruhan kondisi, data masuk ke jalur ELSE. Perutean itu biasanya memang yang Anda inginkan. Saat fungsi digabungkan dengan apa pun yang lain, nilai kosong dapat menghentikan seluruh kondisi, termasuk istilah yang sudah memiliki nilai. Untuk menjaga agar bagian lain dari kondisi tetap bekerja, bandingkan fungsi dengan `== true`:

```jexl
leaveGeofence(51577 /* Austin Warehouse */) == true || leaveGeofence(85269 /* Construction site 1 */) == true
```

Untuk aturan lengkapnya, lihat [Nilai yang hilang dalam ekspresi](/docs/user/id/guide/account/iot-logic/nodes/missing-values-in-expressions.md).

### Sintaks

{% tabs %}
{% tab title="Posisi saat ini" %}
Ini adalah format yang disisipkan secara otomatis oleh pemilih perimeter. Nama perimeter muncul sebagai komentar demi keterbacaan tetapi tidak memengaruhi evaluasi.

```jexl
inGeofence(35229 /* Delivery zone #4 */)
enterGeofence(51577 /* Austin Warehouse */)
leaveGeofence(85269 /* Construction site 1 */)
```

{% endtab %}

{% tab title="Posisi historis" %}
`inGeofence()` menerima dua parameter tambahan, sehingga dapat menguji posisi yang lebih awal alih-alih posisi saat ini:

```jexl
inGeofence(35229 /* Delivery zone #4 */, 1)
inGeofence(35229 /* Delivery zone #4 */, 1, 'valid')
inGeofence(35229 /* Delivery zone #4 */, 'valid')
```

Parameter kedua menunjukkan paket data mana yang diambil posisinya, dihitung mundur dari yang saat ini. Parameter ketiga menunjukkan apakah paket yang tidak membawa posisi harus dihitung. Keduanya opsional, dan mengikuti konvensi yang sama seperti `value()` fungsi.

`enterGeofence()` dan `leaveGeofence()` ambil ID perimeter dan tidak ada yang lain. Keduanya membandingkan posisi saat ini dengan posisi sebelumnya, jadi tidak ada indeks yang dapat dipilih. Sebuah aliran yang meneruskan parameter kedua ke salah satu fungsi tidak dapat disimpan, dan kesalahan akan menyebutkan nama fungsi.

Pertahankan indeks dalam rentang 0 hingga 11. `inGeofence()` menerima indeks yang lebih tinggi, menyimpan tanpa kesalahan, lalu mengembalikan nilai kosong untuk setiap paket.

Jangan membungkus fungsi perimeter di dalam `value()`. Parameter pertama dari `value()` adalah nama atribut, bukan ekspresi, jadi panggilan seperti `value("inGeofence(35229)", 1, 'valid')` mencari atribut dengan nama literal tersebut dan selalu mengembalikan nilai kosong.

Untuk `value()` detail fungsi, lihat [Ekspresi dan sintaks Logika](/docs/user/id/guide/account/iot-logic/nodes/logic-node/logic-node-expressions-and-syntax.md).
{% endtab %}
{% endtabs %}

### Cara menambahkan kondisi perimeter

Bidang ekspresi pada **Logika** panel konfigurasi node menyertakan pemilih perimeter khusus <img src="https://3001559198-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-f1ad9487846cd008c17c7a3a86c7f52b4f8d899d%2Fgeofence-picker.png?alt=media" alt="" data-size="line">, terpisah dari [pelengkapan otomatis atribut](/docs/user/id/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#autofill-attribute-names). Daftar ini menampilkan semua perimeter yang ditentukan di akun Navixy Anda, dikelompokkan berdasarkan nama dan ID.

Untuk menambahkan fungsi perimeter ke ekspresi Anda:

{% stepper %}
{% step %}

#### Buka konfigurasi node

Buka **Logika** node dengan mengekliknya di kanvas.
{% endstep %}

{% step %}

#### Buka pemilih perimeter

Di **bidang ekspresi kondisi (JEXL)** , klik ikon pemilih perimeter untuk membuka daftar perimeter.

<figure><img src="https://3001559198-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-4e9a17bca5a836559c33502a97f6c418f3504898%2Fgeofence-picker-list.png?alt=media" alt="Geofence picker list example, with all three options (in, enter, leave geofence)"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

#### Temukan dan pilih perimeter

Ketik sebagian nama perimeter untuk memfilter daftar. Setiap perimeter muncul tiga kali, masing-masing untuk setiap fungsi yang tersedia. Pilih entri yang menggabungkan perimeter yang Anda perlukan dengan fungsi yang sesuai dengan kondisi Anda:

* `inGeofence` - gunakan saat Anda perlu memeriksa apakah perangkat saat ini berada di dalam zona yang dipilih.
* `enterGeofence` - gunakan saat Anda perlu mendeteksi bahwa perangkat berpindah dari luar zona yang dipilih ke dalamnya.
* `leaveGeofence` - gunakan saat Anda perlu mendeteksi bahwa perangkat berpindah dari dalam zona yang dipilih ke luar.

Pemilih menyisipkan seluruh panggilan fungsi di posisi kursor pada bidang ekspresi.
{% endstep %}

{% step %}

#### Gabungkan dengan kondisi lain jika perlu

Gunakan operator logika untuk menggabungkan fungsi perimeter dengan kondisi lain. Lihat [Contoh kondisi](#condition-examples).
{% endstep %}

{% step %}

#### Simpan konfigurasi

Klik **Terapkan perubahan** untuk mengonfirmasi konfigurasi node.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Pemilih perimeter hanya mencantumkan perimeter yang ada di akun Navixy Anda saat Anda membuka node. Jika Anda menambahkan perimeter baru setelah membuka node, tutup lalu buka kembali node untuk menyegarkan daftar.
{% endhint %}

Pemilih hanya menyisipkan tiga fungsi berbasis ID. Untuk menggunakan `geofenceName()`, ketikkan sendiri di bidang.

### Contoh kondisi

<details>

<summary>Kondisi perimeter tunggal</summary>

Rute data berdasarkan apakah sebuah perangkat saat ini berada di dalam zona pengiriman:

```jexl
inGeofence(35229 /* Delivery zone #4 */)
```

* **Jalur THEN**: Data dari perangkat di dalam zona mengalir ke sini. Gunakan cabang ini untuk memicu pemrosesan khusus zona, seperti menyesuaikan ambang batas kecepatan atau memulai atribut penghitung waktu singgah.
* **Jalur ELSE**: Data dari perangkat di luar zona mengalir ke sini untuk pemrosesan standar.

</details>

<details>

<summary>Deteksi masuk</summary>

Picu tindakan saat kendaraan memasuki lokasi terbatas:

```jexl
enterGeofence(85269 /* Construction site 1 */)
```

* **Jalur THEN**: Hubungkan ke sebuah **Webhook** node untuk memberi tahu keamanan lokasi, atau ke sebuah **Aksi** node untuk mencatat peristiwa masuk.
* **Jalur ELSE**: Lanjutkan pemrosesan data normal untuk perangkat yang tidak memasuki lokasi.

</details>

<details>

<summary>Deteksi keluar</summary>

Deteksi saat kendaraan meninggalkan area layanan yang diizinkan selama jam operasional:

```jexl
leaveGeofence(51577 /* Austin Warehouse */) == true && value('business_hours', 0, 'valid') == true
```

* **Jalur THEN**: Kirim peringatan melalui sebuah **Webhook** node ke sistem dispatch.
* **Jalur ELSE**: Lanjutkan pemrosesan normal.

</details>

<details>

<summary>Menggabungkan beberapa perimeter</summary>

Periksa apakah perangkat berada di salah satu dari beberapa zona terbatas:

```jexl
inGeofence(35229 /* Delivery zone #4 */) == true || inGeofence(85269 /* Construction site 1 */) == true
```

Setiap fungsi dibandingkan dengan `== true`, sehingga paket di mana salah satunya tidak dapat menentukan tidak menghentikan seluruh kondisi. Tanpa perbandingan tersebut, fungsi pertama yang mengembalikan nilai kosong akan menghentikan kondisi, dan perimeter lainnya tidak pernah diuji. Lihat [Saat fungsi perimeter tidak memberikan jawaban](#when-a-geofence-function-gives-no-answer).

* **Jalur THEN**: Terapkan aturan atau notifikasi khusus zona.
* **Jalur ELSE**: Proses data dari perangkat di luar semua zona yang tercantum.

</details>

<details>

<summary>Perimeter dikombinasikan dengan parameter perangkat</summary>

Deteksi kecepatan berlebih di dalam zona perkotaan tertentu:

```jexl
inGeofence(84762 /* destination1 */) == true && value('speed', 0, 'valid') > 50
```

* **Jalur THEN**: Catat Pelanggaran kecepatan yang dibatasi pada zona tersebut, atau kirim peringatan yang ditargetkan.
* **Jalur ELSE**: Lanjutkan pemrosesan standar untuk data yang patuh atau berada di luar zona.

</details>

<details>

<summary>Membandingkan dengan posisi sebelumnya</summary>

Deteksi peralihan dari luar ke dalam dengan membandingkan posisi saat ini dengan posisi sebelumnya:

```jexl
inGeofence(35229 /* Delivery zone #4 */) == true && inGeofence(35229 /* Delivery zone #4 */, 1, 'valid') == false
```

Ekspresi ini mengembalikan `true` hanya pada paket pertama setelah perangkat memasuki perimeter. `enterGeofence()` melakukan hal yang sama dalam satu panggilan, jadi gunakan bentuk ini hanya ketika Anda memerlukan indeks yang berbeda dari paket sebelumnya.

Panggilan kedua dibandingkan dengan `== false`, sehingga ekspresi dipicu hanya ketika posisi sebelumnya diketahui dan berada di luar perimeter. Perangkat tanpa posisi valid sebelumnya tidak cocok. Jangan tulis suku kedua sebagai `!inGeofence(...)`, yang sama sekali tidak menghasilkan apa pun ketika tidak ada posisi sebelumnya untuk diuji.

</details>

## Mencatat perimeter saat ini

`geofenceName()` memberi tahu Anda perimeter mana yang ditempati perangkat, alih-alih menguji satu perimeter yang Anda pilih sebelumnya. Fungsi ini mengembalikan nama sebagai teks, dan Anda menyimpan teks tersebut dalam atributnya sendiri.

Satu formula mencakup setiap perimeter yang Anda miliki. Anda tidak perlu menyusun rangkaian pemeriksaan per perimeter, dan Anda tidak perlu mengedit aliran setiap kali Anda menambahkan perimeter. Berikut adalah isi atribut tersebut untuk kendaraan pengiriman yang melaporkan sepanjang hari:

| Paket data | `current_zone`   |
| ---------- | ---------------- |
| 08:14      | `Depo utama`     |
| 09:02      | (kosong)         |
| 09:47      | `Lokasi klien 3` |

Anda membuatnya sebagai atribut terhitung dalam sebuah **Inisiasi Atribut** node. Dari sana, ia berperilaku seperti atribut terhitung lainnya: ia muncul di [Penganalisis Data](/docs/user/id/guide/account/iot-logic/data-stream-analyzer.md), dapat ditampilkan di platform sebagai sensor kustom, dan dapat diteruskan ke sistem eksternal.

### Sebelum Anda mulai

**Opsi ini harus diaktifkan untuk akun Anda.** `geofenceName()` dijual terpisah dan dinonaktifkan secara default untuk semua orang. Hubungi penyedia layanan Anda dan minta mereka mengaktifkan fungsi nama Perimeter untuk akun Anda. Sebaiknya sebutkan nama fitur internal, `iot_logic_Perimeter_search`.

Sampai diaktifkan, aliran yang menggunakan fungsi ini tidak dapat disimpan. Node ditandai dengan kesalahan ini:

```
Fungsi geofenceName() di simpul "Resolve current zone" (#2) tidak tersedia untuk akun Anda
```

Hapus fungsi dari node untuk menyimpan aliran, atau tunggu hingga penyedia layanan Anda mengaktifkan opsi tersebut.

**Anda juga memerlukan Perimeter untuk mencari.**

* Setidaknya satu Perimeter ada di akun Anda. Lihat [Perimeter](/docs/user/id/guide/tracking/map-tools/geofences.md).
* Untuk mencari hanya sebagian Perimeter Anda, beri tag pada Perimeter tersebut. Lihat [Gunakan tagar](/docs/user/id/guide/tracking/map-tools/geofences.md#use-tags) dan [Tagar](/docs/user/id/guide/account/tags.md).

### Tambahkan atributnya

Buat atribut terhitung dengan cara biasa, seperti dijelaskan dalam [Mengelola atribut](/docs/user/id/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#creating-attributes), lalu masukkan salah satu rumus di bawah ini ke dalam **Rumus** bidang.

Ketik nama fungsi sendiri. Atribut autocomplete tidak menyediakan `geofenceName`, dan pemilih Perimeter hanya tersedia di **Logika** node.

### Rumus

Dua bentuk pertama mencakup sebagian besar kasus. Bentuk ketiga membaca posisi sebelumnya, bukan posisi saat ini.

| Rumus                          | Apa yang dikembalikan                                                          |
| ------------------------------ | ------------------------------------------------------------------------------ |
| `geofenceName()`               | Nama Perimeter mana pun yang saat ini sedang ditempati perangkat               |
| `geofenceName('depots')`       | Nama Perimeter yang diberi Tag `depot` yang saat ini sedang berada di dalamnya |
| `geofenceName('', 1, 'valid')` | Nama Perimeter mana pun tempat perangkat berada satu paket data sebelumnya     |

Ketiga parameter bersifat opsional:

* **Tag**, pertama, membatasi pencarian ke Perimeter yang Anda beri Tag dengan nama tersebut. Huruf besar atau kecil tidak berpengaruh, dan Tag kosong berarti semua Perimeter. Pemberian Tag penting ketika Anda memiliki banyak Perimeter dan hanya sebagian di antaranya yang relevan untuk atribut ini, misalnya depot tetapi bukan situs pelanggan.
* **Nomor paket**, kedua, menyatakan seberapa jauh ke belakang yang akan dicari: `0` adalah paket yang sedang diproses, `1` yang sebelumnya, dan seterusnya. Abaikan untuk posisi saat ini.
* **Filter posisi**, yang ketiga, adalah `'valid'` untuk melewati paket yang tidak membawa posisi, atau `'all'` untuk menghitungnya. Abaikan, dan paket tanpa posisi akan dihitung.

Untuk batas pasti setiap parameter, lihat [Fungsi nama Perimeter](/docs/iot-logic-api/technical-details/geofence-name.md) di dokumentasi API IoT Logic.

### Apa yang dikembalikan

Atribut ini menyimpan nama perimeter sebagai teks, atau nilai kosong ketika tidak ada nama yang dapat diberikan. Nilainya kosong ketika:

* Perangkat berada di luar semua perimeter yang dicari.
* Paket data tidak memuat posisi.
* Tidak ada perimeter di akun Anda yang memiliki tag yang Anda berikan.

Nilai kosong terlihat sama dalam ketiga kasus. Dalam formula, nilai kosong ini ditulis sebagai `null`, yang digunakan oleh contoh perutean di bawah untuk mengujinya.

Untuk mendapatkan teks yang dapat dibaca alih-alih kosong, tambahkan fallback dengan `?:` operator:

```jexl
geofenceName() ?: 'Di luar semua perimeter'
```

Ketika suatu posisi berada di dalam dua perimeter yang saling tumpang tindih, fungsi mengembalikan salah satu dari dua nama tersebut. Navixy tidak memberi peringkat pada perimeter yang tumpang tindih, dan nama yang sama dikembalikan selama perangkat tetap berada di area tumpang tindih.

### Contoh formula

<details>

<summary>Nama perimeter saat ini sebagai atribut</summary>

Dalam sebuah **Inisiasi Atribut** node, buat atribut bernama `current_zone` dengan formula ini:

```jexl
geofenceName()
```

Setiap paket data yang direkam di dalam perimeter akan mendapatkan nama perimeter tersebut. Paket yang direkam di luar semua perimeter akan mendapatkan nilai kosong.

</details>

<details>

<summary>Hanya perimeter yang Anda beri tag</summary>

Beri tag perimeter depot Anda dengan `depot`, lalu buat atribut dengan formula ini:

```jexl
geofenceName('depots') ?: 'Dalam perjalanan'
```

Perangkat di dalam depot mendapatkan nama depot tersebut. Perangkat di tempat lain mendapatkan `Dalam perjalanan`, termasuk perangkat di dalam perimeter yang tidak memiliki `depot` tag.

</details>

<details>

<summary>Perutean berdasarkan area di node Logika</summary>

`geofenceName()` juga berfungsi sebagai kondisi, yang berguna ketika banyak perimeter berbagi satu aturan. Untuk mengirim data yang direkam di dalam perimeter apa pun yang diberi tag `restricted` ke jalur THEN, gunakan kondisi ini:

```jexl
geofenceName('restricted') != null
```

* **Jalur THEN**: Data yang direkam di dalam area restricted. Hubungkan ke sebuah **Webhook** node untuk memberi tahu dispatcher.
* **Jalur ELSE**: Semua data lainnya.

Bandingkan hasilnya dengan `==` atau `!=` saja.  `<`, `>`, `<=`, dan `>=` operator tidak memberikan hasil yang dapat digunakan ketika nilainya kosong.

</details>

<details>

<summary>Mendeteksi perubahan area</summary>

Agar hanya terpicu pada paket saat perangkat berpindah perimeter, bandingkan nama saat ini dengan nama pada posisi sebelumnya:

```jexl
geofenceName() != geofenceName('', 1, 'valid')
```

Parameter pertama yang kosong berarti semua perimeter, dan `'valid'` membuat perbandingan melewati paket yang tidak membawa posisi. Tanpa `'valid'`, paket tanpa posisi dibaca sebagai nama perimeter kosong, dan kondisi melaporkan perubahan yang sebenarnya tidak terjadi.

</details>

## Pertanyaan yang sering diajukan

#### Di mana saya dapat menemukan ID perimeter?

Pemilih perimeter menampilkan nama dan ID numerik setiap perimeter di daftar. Anda juga dapat menemukan ID di antarmuka perimeter Navixy. Saat Anda memilih perimeter dari pemilih, ID akan disisipkan ke dalam ekspresi secara otomatis.

#### Dapatkah saya menyimpan pemeriksaan perimeter dalam atribut?

Ya. Keempat fungsi tersebut berfungsi dalam formula atribut maupun dalam kondisi perutean. `geofenceName()` merupakan pilihan yang alami, karena memberikan teks yang dapat dibaca. Tiga yang lain memberi Anda nilai ya atau tidak, atau nilai kosong ketika posisi tidak diketahui. Nilai ya atau tidak biasanya lebih berguna untuk perutean daripada untuk penyimpanan.

Pemilih perimeter hanya muncul di **Logika** node, jadi dalam formula atribut Anda mengetik fungsi dan ID perimeter secara manual.

#### Mengapa saya tidak dapat menyimpan aliran yang menggunakan geofenceName?

`geofenceName()` merupakan opsi berbayar dan dinonaktifkan secara default. Hubungi penyedia layanan Anda agar fitur ini diaktifkan untuk akun Anda. Lihat [Sebelum Anda mulai](#before-you-start).

#### Apa yang terjadi jika perimeter yang dirujuk dihapus?

Jika perimeter yang dirujuk dalam sebuah ekspresi dihapus dari akun Navixy Anda, fungsi tidak lagi dapat memberikan jawaban dan mengembalikan nilai kosong. Dalam sebuah **Logika** node yang menggunakan fungsi tersebut sendiri, data mengalir melalui koneksi ELSE. Node menyimpan atributnya sendiri sebagai nilai kosong, bukan sebagai `false`. Dalam kondisi yang menggabungkan fungsi dengan istilah lain, nilai kosong dapat menghentikan seluruh kondisi. Dalam sebuah **Inisiasi Atribut** node, atribut tersebut tidak memiliki nilai untuk paket itu. Lihat [Nilai yang hilang dalam ekspresi](/docs/user/id/guide/account/iot-logic/nodes/missing-values-in-expressions.md).

Aliran tetap berjalan, tetapi Anda tidak dapat menyimpannya lagi sampai Anda memperbaiki ekspresi tersebut. Menyimpannya kembali gagal dengan `Node "<node title>" (#<node id>) berisi perimeter yang tidak ada atau tidak dapat diakses`. Perbarui atau hapus ekspresi tersebut untuk memulihkan perutean dan kemampuan menyimpan.

#### Apakah inGeofence mengevaluasi posisi GPS terkini perangkat?

Ya. `inGeofence()` memeriksa posisi yang dilaporkan dalam paket data saat ini terhadap batas perimeter. Setiap paket dievaluasi secara independen, sehingga hasilnya mencerminkan posisi perangkat pada saat paket itu diterima. Paket yang tidak membawa posisi akan mendapatkan nilai kosong, bukan `true` atau `false`.

#### Apa perbedaan antara inGeofence dan enterGeofence?

`inGeofence()` mengembalikan `true` untuk setiap paket yang melaporkan posisi di dalam perimeter. `enterGeofence()` mengembalikan `true` hanya untuk paket yang merekam momen perangkat melintasi batas perimeter. Gunakan `inGeofence` ketika Anda perlu menerapkan logika pada semua data dari dalam area. Gunakan `enterGeofence` ketika Anda perlu bereaksi secara spesifik terhadap peristiwa melintasi batas.

#### Mengapa atribut geofenceName saya selalu kosong?

Periksa penyebab berikut secara berurutan:

1. Opsi ini tidak diaktifkan untuk akun Anda. Aliran yang disimpan sebelumnya tetap berjalan, dan fungsi mengembalikan nilai kosong untuk setiap paket. Lihat [Sebelum Anda mulai](#before-you-start).
2. Tag yang Anda berikan tidak ditetapkan ke perimeter mana pun. Nama tag harus cocok dengan tag yang ada di akun Anda.
3. Perangkat memang berada di luar semua perimeter yang Anda cari.
4. Anda memiliki jumlah perimeter yang sangat besar dan formula tidak meneruskan tag apa pun. Berikan tag untuk mencari himpunan yang lebih kecil. Ambang batas pastinya ada di [Fungsi nama Perimeter](/docs/iot-logic-api/technical-details/geofence-name.md).


---

# 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/geofence-functions.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.
