Dash Updates unabhängig von Website-Aufrufen bekommen

Django, Flask, Bottle, WSGI, CGI…
Antworten
FelixAE7
User
Beiträge: 5
Registriert: Samstag 15. Juli 2023, 11:15

Moin liebes Forum,

ich habe Code aus einem Tutorial übernommen, in welchem es um eine Website mit einem Graphen geht, welcher sich alle 10 Sekunden updatet. Noch werden dazu alle 10 Sekunden zufällige Werte generiert und in dem Graphen hinzugefügt. Das funktioniert auch sehr gut, rufe ich die Website jetzt aber doppelt auf(also zwei Tabs mit dieser Seite), werden auch doppelt so viele Werte generiert bzw. es finden doppelt so viele Updates statt. Wie kann man den Code anpassen, damit unabhängig von den Websiteaufrufen alle 10 Sekunden ein Wert eingefügt wird?

Hier einmal der Code:

Code: Alles auswählen

import dash
from dash.dependencies import Output, Input
from dash import dcc
from dash import html
import plotly
import random
import plotly.graph_objs as go
from collections import deque
from datetime import datetime


X = deque(maxlen=20)
X.append(1)
Y = deque(maxlen=20)
Y.append(1)


app = dash.Dash(__name__)
app.layout = html.Div(
    [
        html.H1('Sensordaten'),
        dcc.Graph(id='live-graph', animate=True),
        dcc.Interval(
            id='interval-component',
            interval=10*1000
        ),
    ]
)


@app.callback(Output('live-graph', 'figure'),
              [Input('interval-component', 'n_intervals')])
def update_graph_scatter(input_data):


    X.append(X[-1]+1)
    Y.append(Y[-1]+Y[-1]*random.uniform(-0.1,0.1))

    data = plotly.graph_objs.Scatter(
            x=list(X),
            y=list(Y),
            name='Scatter',
            mode= 'lines+markers'
            )

    return {'data': [data],'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),
                                                yaxis=dict(range=[min(Y),max(Y)]),)}

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8050 ,debug=True)




Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt halt die Werte-Generierung von der Plot-Generierung trennen.
Welche Werte möchtest Du denn letztlich wirklich darstellen?
FelixAE7
User
Beiträge: 5
Registriert: Samstag 15. Juli 2023, 11:15

Sirius3 hat geschrieben: Samstag 15. Juli 2023, 18:57 Du mußt halt die Werte-Generierung von der Plot-Generierung trennen.
Welche Werte möchtest Du denn letztlich wirklich darstellen?
Ich habe ein paar Temperatursensoren im Haus verteilt, welche ich dann in regelmäßigen Intervallen einlesen möchte.
Würde es dann schon reichen wenn ich die Werte-Generierung aus der Update-Methode rausnehme?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Genau, Du mußtest Deine Temperatursensoren in einem separaten Thread abfragen, update_graph_scatter darf nur Werte darstellen.
Antworten