Skip to content

Commit 4455cbd

Browse files
committed
Fix MQTT client import error
1 parent da39522 commit 4455cbd

1 file changed

Lines changed: 12 additions & 28 deletions

File tree

app/api/v1/devices.py

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@
33
from pydantic import BaseModel
44
from typing import Optional
55

6-
# --- UPDATE IMPORT (Sesuai Struktur Baru) ---
7-
from app.core.database import get_db # <-- Folder db
8-
from app.models.device import SensorLog # <-- Sesuaikan nama class device kamu (Device/SensorLog?)
9-
# Cek model kamu: Kalau nama classnya Device, ganti SensorLog jadi Device di baris atas
10-
from app.mqtt.client import publish_message # <-- Kita pakai helper publish kalau ada, atau client langsung
6+
# --- IMPORT DATABASE ---
7+
from app.core.database import get_db
8+
from app.models.device import Device
119

12-
# --- IMPORT RATE LIMITER REDIS ---
10+
# --- IMPORT RATE LIMITER ---
1311
from fastapi_limiter.depends import RateLimiter
1412

13+
# --- PERBAIKAN IMPORT MQTT ---
14+
# Kita import object 'client' langsung, lalu kita alias-kan jadi 'mqtt_client'
15+
from app.mqtt.client import client as mqtt_client
16+
1517
router = APIRouter()
1618

1719
# --- SCHEMA ---
@@ -24,25 +26,18 @@ class AutoRegisterSchema(BaseModel):
2426
pin_code: str
2527
factory_secret: str
2628

27-
# Kita butuh model Device (Definisikan ulang kalau belum import)
28-
# Asumsi kamu punya model Device di app/models/device.py
29-
from app.models.device import Device # Pastikan ini ada
30-
3129
# --- 1. ENDPOINT CLAIM (User) ---
32-
# Rate Limit: 5x per 60 detik
3330
@router.post("/claim", dependencies=[Depends(RateLimiter(times=5, seconds=60))])
3431
def claim_device(
3532
claim_data: UserClaimSchema,
3633
db: Session = Depends(get_db)
37-
# user_uid: str = Depends(get_current_user) # <-- Aktifkan ini nanti kalau AUTH firebase sudah dipasang
3834
):
39-
# Sementara kita hardcode user_uid dulu biar bisa tes tanpa login frontend
35+
# Hardcode user sementara
4036
user_uid = "TEST_USER_UID_001"
4137

4238
clean_id = claim_data.device_id.strip().upper()
4339
clean_pin = claim_data.pin_code.strip()
4440

45-
# Cari Alat
4641
device = db.query(Device).filter(Device.device_id == clean_id).first()
4742

4843
if not device:
@@ -53,11 +48,9 @@ def claim_device(
5348
return {"message": "Alat ini memang sudah punya kamu kok."}
5449
raise HTTPException(status_code=400, detail="Alat ini sudah dimiliki orang lain!")
5550

56-
# Cek PIN
5751
if device.pin_code != clean_pin:
5852
raise HTTPException(status_code=400, detail="PIN Salah!")
5953

60-
# Simpan Pemilik
6154
device.owner_uid = user_uid
6255
device.device_name = "Alat Baru Saya"
6356
db.commit()
@@ -66,16 +59,12 @@ def claim_device(
6659

6760

6861
# --- 2. ENDPOINT CONTROL RELAY ---
69-
# Rate Limit: 10x per 60 detik
7062
@router.post("/control-relay", dependencies=[Depends(RateLimiter(times=10, seconds=60))])
7163
def control_relay(
7264
device_id: str,
7365
state: str,
7466
db: Session = Depends(get_db)
7567
):
76-
# Hardcode user dulu
77-
user_uid = "TEST_USER_UID_001"
78-
7968
clean_id = device_id.strip().upper()
8069

8170
if state not in ["ON", "OFF"]:
@@ -86,16 +75,11 @@ def control_relay(
8675
if not device:
8776
raise HTTPException(status_code=404, detail="Alat tidak ditemukan.")
8877

89-
# Proteksi Kepemilikan (Nyalakan nanti kalau Auth siap)
90-
# if device.owner_uid != user_uid:
91-
# raise HTTPException(status_code=403, detail="Bukan alat kamu!")
92-
9378
topic = f"alat/{clean_id}/command"
9479
payload = f'{{"relay": "{state}"}}'
9580

96-
# Publish ke MQTT
97-
# Pastikan kamu import client mqtt yg benar, atau pakai cara ini:
98-
from app.mqtt.client import client as mqtt_client
81+
# --- PERBAIKAN CARA PUBLISH ---
82+
# Gunakan method .publish() milik object client
9983
mqtt_client.publish(topic, payload)
10084

10185
return {"message": "Perintah dikirim", "topic": topic, "state": state}
@@ -123,7 +107,7 @@ def auto_register_device(
123107
device_id=clean_id,
124108
pin_code=clean_pin,
125109
device_name="New Device",
126-
# is_active=True # Sesuaikan dengan model kamu
110+
# is_active=True
127111
)
128112
db.add(new_device)
129113
db.commit()

0 commit comments

Comments
 (0)