> 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 Perimeter yang sudah Anda miliki di Navixy dalam alur IoT Logic, untuk bertindak saat perangkat memasuki atau meninggalkan suatu area, atau untuk mencatat area tempat perangkat berada.

Fungsi Perimeter memungkinkan aliran bereaksi terhadap lokasi perangkat, menggunakan perimeter yang sudah Anda miliki di Navixy. Anda merujuk ke perimeter alih-alih menjelaskan area dengan koordinat, sehingga batasnya tetap sama seperti yang sudah Anda gunakan untuk Aturan peringatan dan Laporan.

## Fungsi yang Anda perlukan

| Jika Anda ingin                                                                                             | Gunakan                                                                                                                   |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Bertindak pada satu perimeter tertentu saat perangkat berada di dalamnya, memasukinya, atau meninggalkannya | `inGeofence()`, `enterGeofence()`, `leaveGeofence()`. Lihat [Bereaksi terhadap satu perimeter](#reacting-to-one-geofence) |
| Cari tahu perimeter mana yang sedang ditempati perangkat, tanpa menentukannya terlebih dahulu               | `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()` adalah opsi berbayar, dijual terpisah.** Secara default, opsi 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 untuk mengaktifkannya. Lihat [Sebelum memulai](#before-you-start).
{% endhint %}

## Bereaksi terhadap satu perimeter

Gunakan ketiga fungsi ini ketika 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. Pada beberapa paket, fungsi tidak dapat menjawab, dan sebagai gantinya 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    |

Anda menambahkannya ke kondisi sebuah simpul **Logika** .  `id` adalah ID numerik perimeter di akun Navixy Anda, dan pemilih akan mengisinya untuk Anda, jadi 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 ketika fungsi tidak dapat menjawab. Fungsi tidak dapat menjawab dalam kasus berikut:

* Paket data tidak membawa koordinat. Posisi dengan kualitas buruk tetap diuji, jadi perolehan GPS yang lemah memberikan jawaban ya atau tidak yang sebenarnya.
* 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.

Nilai kosong menghentikan kondisi yang menjadi bagiannya. Ketika fungsi tersebut menjadi seluruh kondisi, data dialihkan ke jalur ELSE. Pengaturan ini biasanya sesuai keinginan Anda. Ketika fungsi digabungkan dengan apa pun, nilai kosong dapat menghentikan seluruh kondisi, termasuk istilah yang memiliki nilai. Agar sisa kondisi tetap berjalan, bandingkan fungsi dengan `== true`:

```jexl
leaveGeofence(51577 /* Gudang Austin */) == true || leaveGeofence(85269 /* Lokasi konstruksi 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 otomatis disisipkan pemilih perimeter. Nama perimeter muncul sebagai komentar agar mudah dibaca, tetapi tidak memengaruhi evaluasi.

```jexl
inGeofence(35229 /* Zona pengiriman #4 */)
enterGeofence(51577 /* Gudang Austin */)
leaveGeofence(85269 /* Lokasi konstruksi 1 */)
```

{% endtab %}

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

```jexl
inGeofence(35229 /* Zona pengiriman #4 */, 1)
inGeofence(35229 /* Zona pengiriman #4 */, 1, 'valid')
inGeofence(35229 /* Zona pengiriman #4 */, 'valid')
```

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

`enterGeofence()` dan `leaveGeofence()` mengambil ID perimeter dan tidak ada yang lain. Keduanya membandingkan posisi saat ini dengan posisi sebelumnya, sehingga tidak ada indeks yang perlu dipilih. Aliran yang meneruskan parameter kedua ke salah satu fungsi tidak dapat disimpan, dan pesan kesalahan menyebut 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, sehingga panggilan seperti `value("inGeofence(35229)", 1, 'valid')` mencari atribut dengan nama literal itu dan selalu mengembalikan nilai kosong.

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

### Cara menambahkan kondisi perimeter

Kolom ekspresi di **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 standar](/docs/user/id/guide/account/iot-logic/nodes/initiate-attribute-node/managing-attributes.md#autofill-attribute-names). Pemilih ini menampilkan semua perimeter yang didefinisikan 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 **Ekspresi kondisi (JEXL)** kolom, 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 pemanggilan fungsi lengkap pada posisi kursor di kolom ekspresi.
{% endstep %}

{% step %}

#### Gabungkan dengan kondisi lain jika diperlukan

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 menampilkan 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 ke dalam bidang.

### Contoh kondisi

<details>

<summary>Kondisi perimeter tunggal</summary>

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

```jexl
inGeofence(35229 /* Zona pengiriman #4 */)
```

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

</details>

<details>

<summary>Deteksi masuk</summary>

Picu aksi saat kendaraan memasuki lokasi terbatas:

```jexl
enterGeofence(85269 /* lokasi konstruksi 1 */)
```

* **Jalur THEN**: Sambungkan 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 kerja:

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

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

</details>

<details>

<summary>Menggabungkan beberapa perimeter</summary>

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

```jexl
inGeofence(35229 /* zona pengiriman #4 */) == true || inGeofence(85269 /* lokasi konstruksi 1 */) == true
```

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

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

</details>

<details>

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

Deteksi pelanggaran kecepatan di dalam zona perkotaan tertentu:

```jexl
inGeofence(84762 /* tujuan1 */) == 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 perpindahan dari luar ke dalam dengan membandingkan posisi saat ini dengan posisi sebelumnya:

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

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

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

</details>

## Mencatat perimeter saat ini

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

Satu rumus mencakup setiap perimeter yang Anda miliki. Anda tidak membuat rangkaian pemeriksaan per perimeter, dan Anda tidak mengedit aliran setiap kali menambahkan perimeter. Berikut isi atribut untuk kendaraan pengiriman yang melaporkan data sepanjang hari:

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

Anda membuatnya sebagai atribut terhitung di 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)platform, dapat ditampilkan sebagai sensor kustom, dan dapat diteruskan ke sistem eksternal.

### Sebelum memulai

**Opsi tersebut 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. Hal ini membantu jika Anda menyebutkan nama fitur internal, `iot_logic_perimeter_search`.

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

```
Fungsi geofenceName() pada node "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 geofence untuk melakukan pencarian.**

* Setidaknya ada satu Perimeter di akun Anda. Lihat [Perimeter](/docs/user/id/guide/tracking/map-tools/geofences.md).
* Untuk mencari hanya sebagian geofence Anda, beri Tag pada geofence 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 atribut

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), dan masukkan salah satu rumus di bawah ini ke dalam **Rumus** .

Ketik sendiri nama fungsinya. Pelengkapan otomatis atribut tidak menawarkan `PerimeterName`, 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 dimasuki perangkat                 |
| `geofenceName('depots')`       | Nama perimeter yang diberi tag `depots` yang saat ini sedang dimasuki perangkat |
| `geofenceName('', 1, 'valid')` | Nama perimeter mana pun yang dimasuki perangkat satu paket data sebelumnya      |

Semua tiga parameter bersifat opsional:

* **Tag**, pertama, membatasi pencarian pada geofence yang Anda beri tag dengan nama tersebut. Huruf besar atau huruf kecil tidak berpengaruh, dan tag kosong berarti semua geofence. Pemberian tag penting saat Anda memiliki banyak geofence dan hanya sebagian di antaranya yang bermakna untuk atribut ini, misalnya depot tetapi bukan lokasi pelanggan.
* **Nomor paket**, kedua, menunjukkan seberapa jauh ke belakang yang perlu dilihat: `0` sedang diproses, `1` yang sebelumnya, dan seterusnya. Tinggalkan bagian ini untuk posisi saat ini.
* **Filter posisi**, ketiga, adalah `'valid'` untuk melewati paket yang tidak membawa posisi, atau `'all'` untuk menghitungnya. Abaikan parameter ini 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 Anda peroleh

Atribut ini menyimpan nama perimeter sebagai teks, atau nilai kosong jika 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 tampak sama dalam ketiga kasus. Dalam formula, nilai kosong ini ditulis sebagai `null`, yang merupakan cara contoh perutean di bawah mengujinya.

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

```jexl
geofenceName() ?: 'Outside all geofences'
```

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

### Contoh formula

<details>

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

Di 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 pada perimeter depo Anda dengan `depots`, lalu buat atribut dengan formula ini:

```jexl
geofenceName('depots') ?: 'In transit'
```

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

</details>

<details>

<summary>Perutean berdasarkan area di node Logika IF/THEN</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 **Webhook** node untuk memberi peringatan kepada dispatcher.
* **Jalur ELSE**: Semua data lainnya.

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

</details>

<details>

<summary>Mendeteksi perubahan area</summary>

Untuk memicu hanya 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 menemukan ID perimeter?

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

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

Ya. Keempat fungsi bekerja dalam formula atribut maupun dalam kondisi perutean. `geofenceName()` Ini adalah pilihan yang alami, karena menghasilkan teks yang mudah dibaca. Tiga fungsi lainnya menghasilkan nilai ya atau tidak, atau nilai kosong saat 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 sendiri fungsi dan ID perimeter.

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

`geofenceName()` Ini adalah opsi berbayar dan nonaktif secara bawaan. Hubungi penyedia layanan Anda untuk mengaktifkannya bagi akun Anda. Lihat [Sebelum memulai](#before-you-start).

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

Jika perimeter yang dirujuk dalam ekspresi dihapus dari akun Navixy Anda, fungsi tidak dapat lagi 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 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 lagi menyimpannya sampai Anda memperbaiki ekspresi. Menyimpannya lagi gagal dengan `Node "<node title>" (#<node id>) berisi perimeter yang tidak ada atau tidak dapat diakses`. Perbarui atau hapus ekspresi untuk memulihkan perutean sekaligus 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 alih-alih `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 memasuki 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 memulai](#before-you-start).
2. Tag yang Anda berikan tidak ditetapkan ke perimeter mana pun. Nama Tag harus sesuai 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 memberikan 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 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/geofence-functions.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.
