Main.py
"""Service driver code starts here"""
import time
import logging
import streamlit as st
import plotly.graph_objects as go
from datetime import datetime
from dependencies.databus.client import DatabusClient
logging.basicConfig(level=logging.INFO, format='%(asctime)s | %(levelname)s | %(filename)s | %(funcName)s | %(message)s')
def on_connect(client, userdata, flags, rc):
if rc == 0:
logging.info("Connected to MQTT broker.")
client.subscribe("ie/test")
else:
logging.info("Connection to MQTT broker failed.")
def on_message(client, userdata, message):
# logging.info(f"Message from databus topic {message.topic}: {message.payload.decode()}")
userdata["mqttclient_obj"].on_data_callback.append(message.payload.decode())
if __name__=="__main__":
logging.info("Main Initiated")
data_list = []
databusclient_obj = DatabusClient()
databusclient_obj.set_on_connect_callback(on_connect)
databusclient_obj.set_on_message_callback(on_message)
databusclient_obj.on_data_callback = data_list
databusclient_obj.authenticate()
st.title("Real-Time Data from IEDatabus")
x_values = []
placeholder = st.empty()
while True:
time.sleep(1)
with placeholder.container():
if len(data_list) > 0:
x_values.append(datetime.now().strftime("%H:%M:%S"))
if len(x_values) > 10:
x_values.pop(0)
del data_list[0]
logging.info(f"Data on databus: {data_list}")
realtime_databus_chart, realtime_databus_data = st.columns([3, 1])
realtime_databus_data.metric(
label="Current data",
value=data_list[-1]
)
realtime_databus_chart.subheader("Graph")
fig = go.Figure(data=go.Scatter(x=x_values, y=data_list, mode='lines+markers', name="Triangle Wave"))
fig.update_xaxes(title_text="Timestamp")
fig.update_yaxes(title_text="Process Values")
realtime_databus_chart.plotly_chart(fig)