Skip to content
TobaSmart Farming
← Semua tutorial

Technology / IoT & Edge Computing

Rule-Based Control pada Jetson Nano

Contoh pengendalian AC lokal yang tidak bergantung internet.

Peralatan yang diperlukan

Langkah implementasi

  1. Langkah 1

    Jetson Nano berlangganan topic sensor yang telah divalidasi. Periksa kesegaran data, ketersediaan sensor, serta mode operasi sebelum menghasilkan keputusan.

  2. Langkah 2

    Terapkan hysteresis: di atas 24°C AC ON, di bawah 22°C AC OFF, dan pada 22–24°C pertahankan status terdahulu. Ambang adalah contoh dari eksperimen, bukan rekomendasi universal untuk semua tanaman.

  3. Langkah 3

    Tambahkan minimum on/off time sesuai persyaratan perangkat HVAC, proteksi saat sensor bermasalah, manual override, serta pengendali relay/IR yang aman secara elektrik.

  4. Langkah 4

    Kirim command dengan command_id, minta acknowledgment, simpan commanded_state dan observed_state, dan uji pemulihan setelah listrik atau MQTT putus.

Praktikum 4 — Jetson Nano rule-based

Program berikut sengaja hanya menerbitkan perintah DRY-RUN ke topic demo. Perintah ini tidak boleh disambungkan langsung ke relay AC, kompresor, atau tegangan PLN. Integrasi fisik membutuhkan verifikasi interlock, feedback aktuator, failsafe dan teknisi berkompeten.

Python: controller lokal (dry-run)

# Python 3 on Jetson Nano: pip install paho-mqtt
# DEMONSTRATION / DRY-RUN: does not switch physical AC.
import json, time, uuid
import paho.mqtt.client as mqtt
BROKER="192.168.1.10"
ON_ABOVE, OFF_BELOW=24.0, 22.0
MIN_SWITCH_SECONDS=300  # adjust to actual HVAC specifications
state=False
last_switch=0.0
def on_message(client, userdata, msg):
    global state,last_switch
    try:
        data=json.loads(msg.payload)
        if data["node_id"]!="node01": return
        temp=float(data["temperature_c"])
        stamp=float(data["timestamp"])
        now=time.time()
        if abs(now-stamp)>120 or not (0 <= temp <= 60): return
        desired= True if temp>ON_ABOVE else False if temp<OFF_BELOW else state
        if desired==state or now-last_switch<MIN_SWITCH_SECONDS: return
        cmd={"command_id":str(uuid.uuid4()),"ac_on":desired,
             "issued_at":int(now),"mode":"dry_run"}
        client.publish("farm/command/ac/demo",json.dumps(cmd),qos=1)
        state,last_switch=desired,now
        print("DEMO only:",cmd)
    except (KeyError, ValueError, TypeError) as ex:
        print("Invalid sensor message:",ex)
client=mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set("controller","YOUR_CONTROLLER_PASSWORD")
client.on_message=on_message
client.connect(BROKER,1883,60)
client.subscribe("farm/telemetry/node01",qos=1)
client.loop_forever()

Uji penerimaan

  1. Kirim data 25°C lalu 21°C dengan timestamp baru; amati perintah saat jeda minimum terpenuhi.
  2. Uji pembacaan sensor lebih tua dari 120 detik: harus diabaikan.
  3. Uji suhu 23°C: status terakhir harus dipertahankan; untuk produksi simpan status aktual dari acknowledgement perangkat, bukan menganggap publish berarti aksi berhasil.

Rangkaian praktikum: ESP32 → MQTT → Grafana → Jetson Nano.

Validasi dan keamanan

Uji sensor dan koneksi secara bertahap, catat data mentah dan versi firmware, dan dokumentasikan hasilnya. Untuk AC, listrik PLN, relay, pompa, dan dosing, gunakan komponen bersertifikasi serta bantuan teknisi berkompeten. Contoh di artikel ini bukan bukti bahwa setiap kombinasi perangkat telah diuji di fasilitas penelitian.

Dokumentasi teknis: Sumber resmi. Belum ada tautan pembelian berkomisi pada artikel ini. Lihat disclosure.

Baca arsitektur edge-to-cloud →