Tutorial HiveMQ Cloud Python: Kirim Data Sensor via MQTT (Step by Step)

HiveMQ Cloud Python adalah kombinasi paling praktis untuk belajar MQTT tanpa repot menginstal broker sendiri. Pada tutorial ini Anda akan membuat broker MQTT pribadi secara gratis di HiveMQ Cloud, mengamankannya dengan username/password dan TLS, lalu mengirim data sensor dari program Python dan menerimanya secara real-time. Semua langkah dibuat berurutan dan kodenya siap pakai, sehingga cocok untuk pemula maupun praktisi IoT yang ingin langsung praktik.

hivemq+python

Daftar isi:

Sekilas MQTT dan Mengapa Memilih HiveMQ Cloud

MQTT (Message Queuing Telemetry Transport) adalah protokol komunikasi ringan untuk perangkat IoT yang bekerja dengan model Publish/Subscribe. Jika Anda benar-benar baru, baca dulu tutorial protokol MQTT untuk pemula dan perbandingan MQTT, HTTP, dan CoAP. Singkatnya, ada empat komponen utama:

  • Publisher – pengirim data (pada tutorial ini: program Python yang mensimulasikan sensor).
  • Subscriber – penerima data (program Python monitoring atau dashboard).
  • Broker – perantara yang menerima pesan lalu meneruskannya ke subscriber (pada tutorial ini: HiveMQ Cloud).
  • Topic – “alamat” pesan, misalnya bisaioti/ruang1/sensor.

Mengapa HiveMQ Cloud, bukan broker publik? Broker publik (misalnya broker.hivemq.com) terbuka untuk siapa saja — tanpa login dan tanpa enkripsi — sehingga data Anda bisa dibaca orang lain. HiveMQ Cloud Serverless memberi Anda broker pribadi secara gratis, dengan:

  • Koneksi terenkripsi TLS (port 8883) dan autentikasi username/password.
  • Kuota gratis hingga 100 koneksi perangkat dan 10 GB trafik data per bulan.
  • Mendukung MQTT 3.1, 3.1.1, 5.0, serta MQTT over WebSocket.
  • Web Client bawaan di dashboard untuk menguji publish/subscribe langsung dari browser.

Arsitektur HiveMQ Cloud Python yang Akan Kita Buat

Program Python berperan sebagai publisher yang mengirim data sensor ke broker HiveMQ Cloud melalui port 8883 (TLS). Broker kemudian meneruskan data tersebut ke semua client yang berlangganan topik yang sama — dalam tutorial ini program Python subscriber dan Web Client di browser.

arsitektur hivemq+python

Arsitektur HiveMQ Cloud Python: publisher Python mengirim data sensor via MQTT TLS ke broker HiveMQ Cloud lalu diteruskan ke subscriber dan Web Client
Alur data: Python (publisher) → HiveMQ Cloud (broker) → subscriber & Web Client

Data yang dikirim berformat JSON, contohnya: {"device_id": "sensor-ruang1", "suhu": 29.4, "kelembapan": 67.2, "waktu": "2026-09-29 14:00:05"}. Format JSON memudahkan data diolah lebih lanjut, misalnya disimpan ke database atau ditampilkan di dashboard.

Yang Perlu Disiapkan

  • Komputer (Windows / Linux / macOS) dengan koneksi internet.
  • Python 3.8 atau lebih baru (cek dengan python --version).
  • Akun email, Google, GitHub, atau LinkedIn untuk mendaftar HiveMQ Cloud.
  • Text editor atau IDE (VS Code, Thonny, PyCharm, dll).

Langkah 1 – Daftar Akun HiveMQ Cloud

  1. Buka www.hivemq.com, lalu klik tombol Start Free.
  2. Pilih metode login: Google, GitHub, LinkedIn, atau daftar dengan email.
  3. Jika mendaftar dengan email, buka email verifikasi dan klik tautan konfirmasinya.
  4. Lengkapi data profil yang diminta, lalu klik Continue.

Catatan: Paket Serverless tidak memerlukan kartu kredit. Tampilan dashboard HiveMQ bisa sedikit berubah dari waktu ke waktu, tetapi nama menu utamanya (Overview, Access Management, Web Client) umumnya tetap sama.

Langkah 2 – Buat Cluster Serverless (Gratis)

  1. Di halaman sambutan, pilih opsi Cloud.
  2. Pilih paket Serverless (FREE), lalu klik Create Serverless Cluster.
  3. Tunggu beberapa saat hingga status cluster menjadi Running.
  4. Klik Manage Cluster pada kartu cluster untuk membuka detailnya.

Langkah 3 – Catat Cluster URL dan Port

Buka tab Overview pada cluster Anda. Di sana tercantum informasi koneksi yang akan dipakai di kode Python:

ParameterContoh NilaiKeterangan
Cluster URL (host)a1b2c3d4e5f6.s1.eu.hivemq.cloudUnik untuk setiap cluster — salin milik Anda
Port MQTT (TLS)8883Dipakai oleh program Python / ESP32
Port WebSocket (TLS)8884Dipakai oleh aplikasi web / browser

Penting: HiveMQ Cloud hanya menerima koneksi terenkripsi TLS. Port 1883 (tanpa enkripsi) yang biasa dipakai di broker lokal tidak tersedia di sini.

Langkah 4 – Buat Username dan Password (Credentials)

  1. Masih di halaman cluster, buka tab Access Management.
  2. Pada bagian Credentials, klik Edit → Add Credentials.
  3. Isi Username, misalnya bisaioti_python, dan buat Password yang kuat.
  4. Pada pilihan Permissions, pilih Publish and Subscribe agar credential ini bisa mengirim sekaligus menerima pesan.
  5. Klik Save. Catat username dan password Anda — password tidak ditampilkan lagi setelah disimpan.

Paket Serverless menyediakan tiga pilihan permission untuk setiap credential:

PermissionFungsiContoh Penggunaan
Publish and SubscribeBisa mengirim dan menerima pesanBelajar / testing (dipakai di tutorial ini)
Publish OnlyHanya bisa mengirim pesanPerangkat sensor di lapangan
Subscribe OnlyHanya bisa menerima pesanDashboard atau aplikasi monitoring

Tips: Untuk proyek nyata, buat credential terpisah untuk setiap peran (misalnya satu untuk sensor dengan Publish Only dan satu untuk dashboard dengan Subscribe Only). Jika satu kredensial bocor, dampaknya lebih terbatas.

Langkah 5 – Uji Koneksi dengan Web Client

Sebelum menulis kode, pastikan broker dan credential sudah berfungsi menggunakan Web Client bawaan HiveMQ:

  1. Buka tab Web Client pada cluster Anda.
  2. Di bagian Connection Settings, masukkan username dan password dari Langkah 4, lalu klik Connect Client.
  3. Di bagian Topic Subscriptions, isi topik bisaioti/# lalu klik Subscribe. Tanda # berarti “semua sub-topik di bawah bisaioti”.
  4. Di bagian Send Message, isi topik bisaioti/test dan pesan Halo dari HiveMQ, lalu klik Send.
  5. Pesan tersebut akan muncul di daftar pesan masuk. Artinya broker siap digunakan.

Biarkan tab Web Client tetap terbuka — nanti kita akan melihat data dari Python muncul di sini juga.

Langkah 6 – Siapkan Python untuk Terhubung ke HiveMQ Cloud

Buat folder proyek, misalnya mqtt-hivemq, lalu buka terminal/Command Prompt di folder tersebut. Disarankan memakai virtual environment agar library proyek tidak bercampur:

# Windows
python -m venv venv
venv\Scripts\activate

# Linux / macOS
python3 -m venv venv
source venv/bin/activate

Kemudian instal library paho-mqtt (client MQTT resmi dari Eclipse):

pip install "paho-mqtt>=2.0"

Cek versi yang terpasang:

python -c "import paho.mqtt; print(paho.mqtt.__version__)"

Perhatian untuk pengguna paho-mqtt 2.x: Sejak versi 2.0, pembuatan client wajib menyertakan versi callback, yaitu mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="..."). Kode lama seperti mqtt.Client("Subscriber1") akan menghasilkan error. Semua kode di tutorial ini sudah memakai format 2.x.

Langkah 7 – Program Python Subscriber (Penerima Data)

Buat file subscriber_hivemq.py. Ganti nilai BROKER, USERNAME, dan PASSWORD dengan milik Anda.

import json
import ssl

import paho.mqtt.client as mqtt

# ====== KONFIGURASI HIVEMQ CLOUD (samakan dengan publisher) ======
BROKER   = "xxxxxxxxxxxxxxxx.s1.eu.hivemq.cloud"
PORT     = 8883
USERNAME = "bisaioti_python"
PASSWORD = "PasswordAnda123"
TOPIC    = "bisaioti/ruang1/sensor"
CA_CERTS = None
# =================================================================


def on_connect(client, userdata, flags, reason_code, properties):
    if reason_code == 0:
        print("✅ Terhubung ke HiveMQ Cloud")
        client.subscribe(TOPIC, qos=1)
        print(f"📡 Subscribe ke topik: {TOPIC}")
    else:
        print(f"❌ Gagal terhubung: {reason_code}")


def on_message(client, userdata, msg):
    try:
        data = json.loads(msg.payload.decode())
        print(f"📥 [{data['waktu']}] {data['device_id']} → "
              f"Suhu: {data['suhu']} °C | Kelembapan: {data['kelembapan']} %")
    except (json.JSONDecodeError, KeyError):
        print(f"📥 {msg.topic}: {msg.payload.decode()}")


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,
                     client_id="bisaioti-subscriber-01")
client.on_connect = on_connect
client.on_message = on_message

client.tls_set(ca_certs=CA_CERTS, tls_version=ssl.PROTOCOL_TLS_CLIENT)
client.username_pw_set(USERNAME, PASSWORD)

client.connect(BROKER, PORT, keepalive=60)
print("Menunggu data sensor... (Ctrl+C untuk berhenti)")
try:
    client.loop_forever()
except KeyboardInterrupt:
    print("\nSubscriber dihentikan.")
    client.disconnect()

Penjelasan kode:

  • client.tls_set(...) mengaktifkan enkripsi TLS. Karena sertifikat HiveMQ Cloud diterbitkan oleh CA publik, kita cukup memakai sertifikat CA bawaan sistem (CA_CERTS = None).
  • client.username_pw_set(...) mengirim username dan password yang dibuat di Access Management.
  • on_connect dipanggil saat koneksi berhasil. Subscribe diletakkan di sini agar otomatis dilakukan ulang ketika client tersambung kembali setelah koneksi putus.
  • on_message dipanggil setiap ada pesan masuk. Payload JSON diubah menjadi dictionary Python lalu ditampilkan dengan rapi.
  • loop_forever() membuat program terus berjalan menunggu pesan.

Langkah 8 – Kirim Data Sensor dari Python ke HiveMQ Cloud (Publisher)

Buat file publisher_hivemq.py. Program ini mensimulasikan sensor suhu dan kelembapan, lalu mengirim datanya ke HiveMQ Cloud setiap 5 detik.

import json
import random
import ssl
import time
from datetime import datetime

import paho.mqtt.client as mqtt

# ====== KONFIGURASI HIVEMQ CLOUD (ganti sesuai cluster Anda) ======
BROKER   = "xxxxxxxxxxxxxxxx.s1.eu.hivemq.cloud"   # Cluster URL dari tab Overview
PORT     = 8883                                   # Port MQTT TLS
USERNAME = "bisaioti_python"                      # Dari Access Management
PASSWORD = "PasswordAnda123"
TOPIC    = "bisaioti/ruang1/sensor"
CA_CERTS = None   # None = pakai sertifikat CA bawaan sistem
# ==================================================================


def on_connect(client, userdata, flags, reason_code, properties):
    if reason_code == 0:
        print("✅ Terhubung ke HiveMQ Cloud")
    else:
        print(f"❌ Gagal terhubung: {reason_code}")


def on_publish(client, userdata, mid, reason_code, properties):
    print(f"   ↳ Pesan #{mid} diterima broker")


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,
                     client_id="bisaioti-publisher-01")
client.on_connect = on_connect
client.on_publish = on_publish

client.tls_set(ca_certs=CA_CERTS, tls_version=ssl.PROTOCOL_TLS_CLIENT)
client.username_pw_set(USERNAME, PASSWORD)

client.connect(BROKER, PORT, keepalive=60)
client.loop_start()          # jalankan loop jaringan di background

try:
    while True:
        data = {
            "device_id": "sensor-ruang1",
            "suhu": round(random.uniform(25.0, 32.0), 1),
            "kelembapan": round(random.uniform(55.0, 80.0), 1),
            "waktu": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        }
        payload = json.dumps(data)
        print(f"📤 Kirim ke {TOPIC}: {payload}")
        info = client.publish(TOPIC, payload, qos=1)
        info.wait_for_publish()
        time.sleep(5)
except KeyboardInterrupt:
    print("\nPublisher dihentikan.")
finally:
    client.loop_stop()
    client.disconnect()

Penjelasan kode:

  • Data sensor disusun dalam dictionary, lalu diubah ke teks JSON dengan json.dumps() sebelum dikirim.
  • client.publish(TOPIC, payload, qos=1) mengirim pesan dengan QoS 1 — broker wajib mengirim konfirmasi (PUBACK), sehingga pengiriman lebih terjamin dibanding QoS 0.
  • loop_start() menjalankan proses jaringan MQTT di background thread, sehingga perulangan while True bisa fokus membaca dan mengirim data.
  • wait_for_publish() menunggu sampai broker mengonfirmasi pesan, lalu callback on_publish mencetak nomor pesan yang diterima broker.
  • Tekan Ctrl+C untuk menghentikan program; blok finally memastikan koneksi ditutup dengan rapi.

Ingin memakai sensor sungguhan? Cukup ganti bagian random.uniform(...) dengan pembacaan sensor nyata, misalnya dari DHT22 di Raspberry Pi atau data serial dari Arduino/ESP32 yang dibaca dengan library pyserial. Bagian MQTT-nya tidak perlu diubah.

Langkah 9 – Jalankan dan Amati Hasilnya

  1. Buka terminal pertama, jalankan subscriber terlebih dahulu: python subscriber_hivemq.py
  2. Buka terminal kedua, jalankan publisher: python publisher_hivemq.py
  3. Perhatikan tab Web Client di browser — data yang sama juga muncul di topik bisaioti/ruang1/sensor.

Contoh output di terminal publisher:

✅ Terhubung ke HiveMQ Cloud
📤 Kirim ke bisaioti/ruang1/sensor: {"device_id": "sensor-ruang1", "suhu": 31.0, "kelembapan": 69.5, "waktu": "2026-09-29 13:54:34"}
   ↳ Pesan #1 diterima broker
📤 Kirim ke bisaioti/ruang1/sensor: {"device_id": "sensor-ruang1", "suhu": 30.3, "kelembapan": 55.4, "waktu": "2026-09-29 13:54:39"}
   ↳ Pesan #2 diterima broker

Contoh output di terminal subscriber:

Menunggu data sensor... (Ctrl+C untuk berhenti)
✅ Terhubung ke HiveMQ Cloud
📡 Subscribe ke topik: bisaioti/ruang1/sensor
📥 [2026-09-29 13:54:34] sensor-ruang1 → Suhu: 31.0 °C | Kelembapan: 69.5 %
📥 [2026-09-29 13:54:39] sensor-ruang1 → Suhu: 30.3 °C | Kelembapan: 55.4 %

Selamat! Data sensor dari Python sudah berhasil dikirim melalui HiveMQ Cloud dan diterima secara real-time oleh subscriber maupun Web Client. Anda juga bisa menjalankan publisher dan subscriber di komputer yang berbeda — selama keduanya terhubung ke internet, keduanya tetap bisa berkomunikasi.

Langkah 10 (Opsional) – Simpan Password di Luar Kode

Menulis password langsung di kode berisiko jika file dibagikan atau diunggah ke GitHub. Cara sederhana yang lebih aman adalah membaca kredensial dari environment variable:

import os

BROKER   = os.getenv("HIVEMQ_HOST")
USERNAME = os.getenv("HIVEMQ_USER")
PASSWORD = os.getenv("HIVEMQ_PASS")

Lalu set variabelnya sebelum menjalankan program:

# Windows (Command Prompt)
set HIVEMQ_HOST=a1b2c3d4e5f6.s1.eu.hivemq.cloud
set HIVEMQ_USER=bisaioti_python
set HIVEMQ_PASS=PasswordAnda123

# Linux / macOS
export HIVEMQ_HOST=a1b2c3d4e5f6.s1.eu.hivemq.cloud
export HIVEMQ_USER=bisaioti_python
export HIVEMQ_PASS=PasswordAnda123

Troubleshooting HiveMQ Cloud Python

Gejala / Pesan ErrorPenyebab UmumSolusi
Not authorized atau Bad user name or passwordUsername/password salah, atau credential belum disimpanCek kembali di tab Access Management. Jika lupa password, hapus lalu buat credential baru.
Connection refused / timed outMemakai port 1883, host salah ketik, atau port 8883 diblokir jaringan (Wi-Fi kantor/kampus)Pastikan port 8883 dan host sama persis dengan tab Overview. Coba jaringan lain (misalnya hotspot HP).
CERTIFICATE_VERIFY_FAILEDSertifikat CA sistem belum terpasang (sering terjadi pada Python dari python.org di macOS)Jalankan Install Certificates.command di folder Python, atau pip install certifi lalu set CA_CERTS = certifi.where() (tambahkan import certifi).
TypeError / ValueError saat mqtt.Client(...)Memakai contoh kode paho-mqtt versi 1.xGunakan mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="...") seperti di tutorial ini.
Subscriber tidak menerima pesanNama topik berbeda (MQTT case-sensitive), atau subscriber dijalankan setelah pesan dikirimSamakan topik persis huruf per huruf. Jalankan subscriber terlebih dahulu.
Client sering terputus sendiriDua program memakai Client ID yang samaPastikan setiap program memiliki client_id unik (misalnya -publisher-01 dan -subscriber-01).
Publish gagal padahal koneksi berhasilCredential diberi permission Subscribe OnlyUbah permission menjadi Publish and Subscribe atau Publish Only.

Tips Lanjutan untuk Proyek IoT

  • Rancang struktur topik yang rapi, misalnya lokasi/perangkat/parameter → bisaioti/ruang1/sensor. Gunakan wildcard + (satu level) dan # (banyak level) saat subscribe, contoh bisaioti/+/sensor untuk semua ruangan.
  • Pilih QoS sesuai kebutuhan: QoS 0 untuk data periodik yang tidak kritis, QoS 1 untuk data penting (dipakai di tutorial ini), QoS 2 hanya untuk transaksi yang benar-benar tidak boleh ganda.
  • Retained message: kirim dengan client.publish(TOPIC, payload, qos=1, retain=True) agar subscriber baru langsung menerima nilai terakhir.
  • Last Will and Testament (LWT): tambahkan client.will_set("bisaioti/ruang1/status", "OFFLINE", qos=1, retain=True) sebelum connect() agar broker memberi tahu jika perangkat mati mendadak.
  • Pantau kuota gratis: Paket Serverless dibatasi 100 koneksi dan 10 GB trafik per bulan. Hindari interval kirim yang terlalu cepat jika tidak diperlukan.
  • Lanjutkan ke perangkat nyata: ESP32 juga bisa terhubung ke cluster HiveMQ Cloud yang sama melalui port 8883 (TLS), sehingga data dari mikrokontroler dan Python bisa saling bertukar. Panduannya ada di artikel kirim data sensor dari ESP32 ke MQTT broker.

FAQ Seputar HiveMQ Cloud Python

Apakah HiveMQ Cloud benar-benar gratis?

Ya. Paket Serverless gratis tanpa kartu kredit, dengan batas 100 koneksi perangkat dan 10 GB trafik data per bulan. Kuota ini lebih dari cukup untuk belajar, prototipe, maupun proyek IoT skala kecil.

Apa beda HiveMQ Cloud dengan broker publik broker.hivemq.com?

Broker publik broker.hivemq.com terbuka untuk semua orang tanpa login dan tanpa enkripsi, sehingga hanya cocok untuk uji coba singkat. HiveMQ Cloud memberi broker pribadi dengan username/password dan TLS, sehingga data Anda tidak bisa dibaca atau dikirimi pesan oleh pihak lain.

Kenapa Python tidak bisa connect ke HiveMQ Cloud di port 1883?

HiveMQ Cloud hanya menerima koneksi terenkripsi. Gunakan port 8883 dan aktifkan TLS dengan client.tls_set() di kode Python, seperti pada contoh tutorial ini.

Apakah kode ini bisa dipakai di Raspberry Pi?

Bisa. Raspberry Pi menjalankan Python 3, jadi cukup instal paho-mqtt lalu jalankan kode yang sama. Anda tinggal mengganti data simulasi dengan pembacaan sensor sungguhan, misalnya DHT22.

Apakah ESP32 dan Python bisa memakai cluster HiveMQ Cloud yang sama?

Bisa. Semua client yang memakai cluster URL dan credential yang valid dapat saling bertukar pesan, selama topiknya sama. Pastikan setiap perangkat memakai client ID yang berbeda.

Penutup

Dalam tutorial ini Anda telah membuat broker MQTT pribadi di HiveMQ Cloud, mengamankannya dengan username/password dan TLS, lalu mengirim data sensor berformat JSON dari Python dan menerimanya secara real-time. Pola yang sama dapat langsung diterapkan pada proyek IoT nyata — cukup ganti data simulasi dengan pembacaan sensor sungguhan. Ingin belajar lebih terarah dengan pendampingan? Ikuti Training IoT Profesional bisaioti. Selamat mencoba!

Referensi

  • HiveMQ Documentation, “Getting Started with HiveMQ Cloud” – docs.hivemq.com
  • HiveMQ Documentation, “HiveMQ Cloud Authentication and Authorization” – docs.hivemq.com
  • HiveMQ Cloud, “paho-mqtt-client-example” (contoh Paho Python untuk HiveMQ Cloud) – github.com
  • Eclipse Paho, “paho-mqtt Python Client” – pypi.org

Baca Juga:

Related Articles

Chat Langsung dengan Kami
Staff bisaioti 1 — +62 823-3306-4821 E-Course, Offline Course, Hardware & Teknis IoT/OT Staff bisaioti 2 — +62 823-3306-4821 Training Korporat & Toko Hardware