
importar guión
desde dash.dependencies importar salida, entrada
importar dash_core_components como dcc importar dash_html_components como html
importar gráficamente,
importar aleatoriamente plotly.graph_objs como ir
desde colecciones importar deque
desde pandas_datareader.data importar
tiempo de importación de DataReader, aleatorio
aplicación = guión.Dash('datos-vehículo')
max_length = 20
veces = deque(maxlen=max_length)
oil_temps = deque(maxlen=max_length)
ingesta_temps = deque(maxlen=max_length)
coolant_temps = deque(maxlen=max_length)
rpms = deque(maxlen=max_length)
velocidades = deque(maxlen=max_length ) )
throttle_pos = deque(maxlen=max_length)
data_dict = {"Temperatura del aceite":oil_temps,
"Temperatura de admisión": ingesta_temps,
"Temperatura del refrigerante": coolant_temps,
"RPM": rpms,
"Velocidad": velocidades,
"Posición del acelerador":throttle_pos}
def update_obd_values(tiempos, oil_temps, ingesta_temps, coolant_temps, rpms, velocidades, throttle_pos):
times.append(time.time())
if len(times) == 1:
#starting relevant values
oil_temps.append(random.randrange(180,230))
intake_temps.append(random.randrange(95,115))
coolant_temps.append(random.randrange(170,220))
rpms.append(random.randrange(1000,9500))
speeds.append(random.randrange(30,140))
throttle_pos.append(random.randrange(10,90))
else:
for data_of_interest in [oil_temps, intake_temps, coolant_temps, rpms, speeds, throttle_pos]:
data_of_interest.append(data_of_interest[-1]+data_of_interest[-1]*random.uniform(-0.0001,0.0001))
return times, oil_temps, intake_temps, coolant_temps, rpms, speeds, throttle_pos
tiempos, temperaturas_aceite, temperaturas_ingesta, temperaturas_refrigerante, rpms, velocidades, pos_acelerador = update_obd_values(veces, temperaturas_aceite, temperaturas_entrada, temperaturas_refrigerante, rpms, velocidades, pos_acelerador)
app.layout = html.Div([
html.Div([
html.H2('Datos del vehículo',
estilo={'float': 'izquierda',
}),
]),
dcc.Dropdown(id='datos-del vehículo -name',
opciones=[{'label': s, 'value': s}
para s en data_dict.keys()],
value=['Temperatura del refrigerante','Temperatura del aceite','Temperatura de admisión'],
multi =Verdadero
),
html.Div(children=html.Div(id='gráficos'), className='fila'),
dcc.Interval(
id='graph-update',
intervalo=100),
], className=" contenedor",estilo={'ancho':'98%','margen-izquierdo':10,'margen-derecho':10,'ancho-máximo':50000})
@app.callback(
dash.dependencies.Output('gráficos','niños'),
[dash.dependencies.Input('nombre-datos-del-vehículo',
'valor'),dash.dependencies.Input('actualización-gráfico ', 'n_intervalos')]
)
def update_graph(nombres_datos, n_intervalos):
gráficos = []
valores_obd_actualización(tiempos, temperaturas_aceite, temperaturas_ingesta, temperaturas_refrigerante, rpms,
velocidades, posición_del acelerador) if len(nombres_datos)>2:
elección_clase = 'col s12 m6 l4'
elif len(nombres_datos) = = 2:
elección_clase = 'col s12 m6 l6'
más:
elección_clase = 'col s12'
for data_name in data_names:
data = go.Scatter(
x=list(times),
y=list(data_dict[data_name]),
name='Scatter',
fill="tozeroy",
fillcolor="#6897bb"
)
graphs.append(html.Div(dcc.Graph(
id=data_name,
animate=True,
figure={'data': [data],'layout' : go.Layout(xaxis=dict(range=[min(times),max(times)]),
yaxis=dict(range=[min(data_dict[data_name]),max(data_dict[data_name])]),
margin={'l':50,'r':1,'t':45,'b':1},
title='{}'.format(data_name))}
), className=class_choice))
return graphs
css_externo = ["https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"]
para css en external_css:
app.css.append_css({"external_url": css})
external_js =
['https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js']
para js en external_js:
app.scripts.append_script({'external_url': js})
sinombre=='principal':
app.run_server(depuración=Verdadero)