Skip to content

Commit 7521b3c

Browse files
committed
Add MQTT client setup and sensor log model; implement connection and subscription logic
1 parent bf1dc82 commit 7521b3c

3 files changed

Lines changed: 47 additions & 1 deletion

File tree

app/main.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from sqlalchemy.orm import Session
44
from slowapi import _rate_limit_exceeded_handler
55
from slowapi.errors import RateLimitExceeded
6+
from app.mqtt.client import start_mqtt
67

78
# Import Module Kita
89
from app.core.database import engine, get_db, Base

app/models/device.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,14 @@ class Device(Base):
1818
# Status
1919
is_active = Column(Boolean, default=True)
2020
created_at = Column(DateTime(timezone=True), server_default=func.now())
21-
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
21+
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
22+
23+
24+
class SensorLog(Base):
25+
__tablename__ = "sensor_logs"
26+
27+
id = Column(Integer, primary_key=True, index=True)
28+
device_id = Column(String, index=True) # ID Alat (Misal: 441D...)
29+
topic_type = Column(String) # Misal: "suhu", "kelembaban", "lampu"
30+
value = Column(String) # Misal: "30.5", "ON", "AUTO"
31+
created_at = Column(DateTime(timezone=True), server_default=func.now())

app/mqtt/callbacks.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import paho.mqtt.client as mqtt
2+
from app.core.config import settings # Asumsi config ada di sini
3+
from app.mqtt.callbacks import on_message # Import logika langkah 2
4+
5+
# Global variable buat client
6+
mqtt_client = mqtt.Client(client_id="Backend_Listener_Worker", protocol=mqtt.MQTTv311)
7+
8+
def start_mqtt():
9+
# 1. Setup Auth (Sesuaikan dengan kredensial EMQX kamu)
10+
# Lebih baik ambil dari .env/config, tapi hardcode dulu buat test gapapa
11+
MQTT_BROKER = "k2519aa6.ala.asia-southeast1.emqxsl.com"
12+
MQTT_PORT = 8883
13+
MQTT_USER = "PCB01"
14+
MQTT_PASS = "5ywnMzsVX4Ss9vH"
15+
16+
mqtt_client.username_pw_set(MQTT_USER, MQTT_PASS)
17+
mqtt_client.tls_set() # Wajib SSL untuk port 8883
18+
19+
# 2. Hubungkan logic Callback
20+
mqtt_client.on_message = on_message
21+
22+
# 3. Konek
23+
try:
24+
mqtt_client.connect(MQTT_BROKER, MQTT_PORT, 60)
25+
26+
# 4. Subscribe Dynamic Topic
27+
# Tanda '+' adalah wildcard.
28+
# Artinya kita dengar semua alat di topik status
29+
mqtt_client.subscribe("alat/+/status/#")
30+
31+
mqtt_client.loop_start() # Jalankan di background thread
32+
print("✅ MQTT Listener Berjalan! Mendengarkan: alat/+/status/#")
33+
34+
except Exception as e:
35+
print(f"❌ Gagal Konek MQTT: {e}")

0 commit comments

Comments
 (0)