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.

Daftar isi:
- Sekilas MQTT dan mengapa HiveMQ Cloud
- Arsitektur HiveMQ Cloud Python
- Langkah 1–5: Menyiapkan HiveMQ Cloud
- Langkah 6–9: Program Python publisher & subscriber
- Langkah 10: Mengamankan password
- Troubleshooting HiveMQ Cloud Python
- Tips lanjutan
- FAQ
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.


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
- Buka www.hivemq.com, lalu klik tombol Start Free.
- Pilih metode login: Google, GitHub, LinkedIn, atau daftar dengan email.
- Jika mendaftar dengan email, buka email verifikasi dan klik tautan konfirmasinya.
- 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)
- Di halaman sambutan, pilih opsi Cloud.
- Pilih paket Serverless (FREE), lalu klik Create Serverless Cluster.
- Tunggu beberapa saat hingga status cluster menjadi Running.
- 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:
| Parameter | Contoh Nilai | Keterangan |
|---|---|---|
| Cluster URL (host) | a1b2c3d4e5f6.s1.eu.hivemq.cloud | Unik untuk setiap cluster — salin milik Anda |
| Port MQTT (TLS) | 8883 | Dipakai oleh program Python / ESP32 |
| Port WebSocket (TLS) | 8884 | Dipakai 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)
- Masih di halaman cluster, buka tab Access Management.
- Pada bagian Credentials, klik Edit → Add Credentials.
- Isi Username, misalnya
bisaioti_python, dan buat Password yang kuat. - Pada pilihan Permissions, pilih Publish and Subscribe agar credential ini bisa mengirim sekaligus menerima pesan.
- Klik Save. Catat username dan password Anda — password tidak ditampilkan lagi setelah disimpan.
Paket Serverless menyediakan tiga pilihan permission untuk setiap credential:
| Permission | Fungsi | Contoh Penggunaan |
|---|---|---|
| Publish and Subscribe | Bisa mengirim dan menerima pesan | Belajar / testing (dipakai di tutorial ini) |
| Publish Only | Hanya bisa mengirim pesan | Perangkat sensor di lapangan |
| Subscribe Only | Hanya bisa menerima pesan | Dashboard 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:
- Buka tab Web Client pada cluster Anda.
- Di bagian Connection Settings, masukkan username dan password dari Langkah 4, lalu klik Connect Client.
- Di bagian Topic Subscriptions, isi topik
bisaioti/#lalu klik Subscribe. Tanda#berarti “semua sub-topik di bawah bisaioti”. - Di bagian Send Message, isi topik
bisaioti/testdan pesanHalo dari HiveMQ, lalu klik Send. - 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/activateKemudian 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_connectdipanggil saat koneksi berhasil. Subscribe diletakkan di sini agar otomatis dilakukan ulang ketika client tersambung kembali setelah koneksi putus.on_messagedipanggil 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 perulanganwhile Truebisa fokus membaca dan mengirim data.wait_for_publish()menunggu sampai broker mengonfirmasi pesan, lalu callbackon_publishmencetak nomor pesan yang diterima broker.- Tekan Ctrl+C untuk menghentikan program; blok
finallymemastikan 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
- Buka terminal pertama, jalankan subscriber terlebih dahulu:
python subscriber_hivemq.py - Buka terminal kedua, jalankan publisher:
python publisher_hivemq.py - 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 brokerContoh 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=PasswordAnda123Troubleshooting HiveMQ Cloud Python
| Gejala / Pesan Error | Penyebab Umum | Solusi |
|---|---|---|
Not authorized atau Bad user name or password | Username/password salah, atau credential belum disimpan | Cek kembali di tab Access Management. Jika lupa password, hapus lalu buat credential baru. |
Connection refused / timed out | Memakai 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_FAILED | Sertifikat 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.x | Gunakan mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="...") seperti di tutorial ini. |
| Subscriber tidak menerima pesan | Nama topik berbeda (MQTT case-sensitive), atau subscriber dijalankan setelah pesan dikirim | Samakan topik persis huruf per huruf. Jalankan subscriber terlebih dahulu. |
| Client sering terputus sendiri | Dua program memakai Client ID yang sama | Pastikan setiap program memiliki client_id unik (misalnya -publisher-01 dan -subscriber-01). |
| Publish gagal padahal koneksi berhasil | Credential diberi permission Subscribe Only | Ubah 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, contohbisaioti/+/sensoruntuk 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)sebelumconnect()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:
- Tutorial MQTT Sederhana untuk Pemula (Python & IoT)
- Kirim Data Sensor dari ESP32 ke MQTT Broker (HiveMQ / Mosquitto)
- Mengirim Data Suhu dan Kelembaban DHT11 ke Node-RED Menggunakan MQTT
- Training IoT Profesional: Pelatihan Praktis & Bersertifikat
- Training ESP32 Berbasis IoT: Pelatihan Praktis Pemula hingga Mahir




