44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
import os
|
|
import django
|
|
import time
|
|
from pymodbus.client import ModbusTcpClient
|
|
|
|
# Setup Environment Django
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
|
|
django.setup()
|
|
|
|
from dashboard.models import KwhReadings
|
|
|
|
# Sesuaikan dengan IP ESP32 Anda
|
|
ESP32_IP = '192.168.1.100'
|
|
PORT = 502
|
|
|
|
def fetch_data():
|
|
client = ModbusTcpClient(ESP32_IP, port=PORT)
|
|
if client.connect():
|
|
# Membaca 4 register dari ESP32
|
|
result = client.read_holding_registers(address=0, count=4, slave=1)
|
|
if not result.isError():
|
|
v = result.registers[0] / 10.0
|
|
i = result.registers[1] / 100.0
|
|
p = result.registers[2] / 1000.0
|
|
kwh = result.registers[3] / 10.0
|
|
|
|
KwhReadings.objects.create(
|
|
voltage=v,
|
|
current=i,
|
|
active_power=p,
|
|
total_energy=kwh
|
|
)
|
|
print(f"[BERHASIL SIMPAN] V: {v}V | I: {i}A | P: {p}kW | Energy: {kwh}kWh")
|
|
else:
|
|
print("[ERROR] Gagal membaca register Modbus")
|
|
client.close()
|
|
else:
|
|
print(f"[ERROR] Tidak dapat terhubung ke ESP32 di IP: {ESP32_IP}")
|
|
|
|
if __name__ == '__main__':
|
|
print("Menjalankan Modbus Collector...")
|
|
while True:
|
|
fetch_data()
|
|
time.sleep(5) |