import network
import time
import ssl
from umqtt.simple import MQTTClient
import ujson
import math
import random
# -------- WIFI --------
SSID = "Wokwi-GUEST"
PASSWORD = ""
# -------- AWS --------
AWS_ENDPOINT = "a2l6kap51y222v-ats.iot.ap-south-1.amazonaws.com"
PORT = 8883
CLIENT_ID = "machine_1"
TOPIC = b"factory/machines"
# -------- CERT FILES --------
CA_CERT = "AmazonRootCA1.pem"
CERT_FILE = "certificate.pem.crt"
KEY_FILE = "private.pem.key"
# -------- CONNECT WIFI --------
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)
while not wifi.isconnected():
pass
print("WiFi Connected")
# -------- MQTT (SECURE) --------
client = MQTTClient(
client_id=CLIENT_ID,
server=AWS_ENDPOINT,
port=PORT,
ssl=True,
ssl_params={
"cert": CERT_FILE,
"key": KEY_FILE,
"ca_certs": CA_CERT
}
)
client.connect()
print("Connected to AWS")
# -------- STATES --------
temp = 30.0
vibration = 0.0
wear = 0.0
balance = 1000
ambient_temp = 28.0
# -------- LOOP --------
while True:
load = random.random() # simulate
current = 2 + (8 * load)
P_in = 100 * math.log(1 + 4 * load)
# temperature
dT = (P_in - 0.5 * (temp - ambient_temp)) / 50.0
temp += dT
# vibration
dV = (2.0 * load + 1.5 * wear - 1.2 * vibration)
vibration += dV
# wear
dW = (0.0005 * load + 0.0002 * max(0, temp - 40) + 0.0003 * abs(vibration))
wear += dW
payload = {
"machine_id": "M1",
"temp": round(temp, 2),
"vibration": round(vibration, 2),
"load": round(load * 100, 2),
"current": round(current, 2),
"balance": round(balance, 2)
}
client.publish(TOPIC, ujson.dumps(payload))
print("Sent:", payload)
time.sleep(2)