import pandas as pd from dash import Dash, html, dash_table, dcc, callback from dash.dependencies import Input, Output import plotly.express as px from datetime import datetime import plotly.graph_objects as go df = pd.read_csv('Data.csv') df_reversed = df.iloc[::-1] pressure = df['Barometric Pressure'].iloc[-1] humidity = df['Humidity'].iloc[-1] app = Dash(__name__) app.layout = html.Div([ html.H1('Wetter'), html.Div([ dcc.Graph(id='temperature-indicator'), dcc.Graph(id='pressure-indicator'), dcc.Graph(id='humidity-indicator') ], style={'display': 'flex'}), dcc.RadioItems([{'label': 'Temperature', 'value': 'Temperature'}, {'label': 'Barometric Pressure', 'value': 'Barometric Pressure'}, {'label': 'Humidity', 'value': 'Humidity'}], inline=True, id='radioitem', value='Barometric Pressure'), dcc.Graph(id='Pressure'), dash_table.DataTable( id='wetter', data=df_reversed.to_dict('records'), columns=[{'name': i, 'id': i} for i in df.columns], sort_mode='single', sort_action='native', style_cell={'textAlign': 'center'}), dcc.Interval( id='update', interval=10000, n_intervals=0) ]) @callback(Output('temperature-indicator', 'figure'), Input('update', 'n_intervals')) def temp_update(n): df = pd.read_csv('Data.csv') temperature = df['Temperature'].iloc[-1] figure = go.Figure( go.Indicator( mode="gauge+number", value=temperature, title={'text': "Temperature (°C)"}, gauge={'axis': {'range': [-20, 40]}, 'bar': {'color': 'red'}})) return figure @callback(Output('pressure-indicator', 'figure'), Input('update', 'n_intervals')) def pressure_update(n): df = pd.read_csv('Data.csv') pressure = df['Barometric Pressure'].iloc[-1] figure = go.Figure( go.Indicator( mode="gauge+number", value=pressure, number={'valueformat': '.2f'}, title={'text': "Barometric Pressure"}, gauge={'axis': {'range': [500, 1300]}})) return figure @callback(Output('humidity-indicator', 'figure'), Input('update', 'n_intervals')) def temp_update(n): df = pd.read_csv('Data.csv') humidity = df['Humidity'].iloc[-1] figure = go.Figure( go.Indicator( mode="gauge+number", value=humidity, title={'text': "Humidity"}, gauge={'axis': {'range': [0, 100]}, 'bar': {'color': 'blue'}})) return figure @callback(Output('wetter', 'data'), Input('update', 'n_intervals')) def get_update(n): df = pd.read_csv('Data.csv') df_reversed = df.iloc[::-1] return df_reversed.to_dict('records') @callback(Output('Pressure', 'figure'), Input('update', 'n_intervals'), Input('radioitem', 'value')) def update_graph(n, x): df = pd.read_csv('Data.csv') today = datetime.today().date() df_filtered = df.tail(60).copy() df_filtered['Date'] = pd.to_datetime(df_filtered['Date'], dayfirst=True) df_filtered = df_filtered[df_filtered['Date'].dt.date == today] fig = px.line(df_filtered, x='Time', y=x) return fig if __name__ == '__main__': app.run_server(debug=True)