Ciao a tutti ho inziato da poco a onfrontarmi con le realta Arduino Q e sto cercando di imparare come creare un sito web. Arrivo subito al punto, il problema è che ho scritto questo codice per usare i dati del mdulino e inviarli ad una pagina Web tramite api solo che il sito non parte, Ho provao a togliere tutta la parte su HTML, e mi parte ma giustamnete manca il sito web e quindi il sit rimane nero. Qulacuna sa come non funziona nel codice. grazie
type or paste code here
<import datetime
import math
from arduino.app_bricks.dbstorage_tsstore import TimeSeriesStore
from arduino.app_utils import App, Bridge
from arduino.app_bricks.web_ui import WebUI
Db=TimeSeriesStore()
def infodati(resource: str, start: str, aggr_window: str):
samples = db.read_samples(measure=resource, start_from=start, aggr_window=aggr_window, aggr_func="mean", limit=100)
return [{"ts": s[1], "value": s[2]} for s in samples]
Ui.expose_api("GET","/get_samples/{resource}/{start}/{aggr_window}",infodati)
def startdata(Temperatura: float, Umidita: float):
ts=int(datetime.datetime.now().timestamp()*1000)
Db.write_sample("Temperature", float(Temperatura), ts)
Db.write_sample("Umidita", float(Umidita), ts)
Ui.send_message("Temperatura",{"value": float(Temperatura) , "ts": ts })
Ui.send_message("Umidita" , {"value": float(Umidita), "ts": ts })
print("Registering 'record_sensor_samples' callback.")
Bridge.provide("startdata", startdata)
HTML = """
<html>
<body>
<h1>Stazione Meteo</h1>
<p>Temperatura: <span id="t">--</span> °C</p>
<p>Umidità: <span id="h">--</span> %</p>
<p>Timestamp: <span id="ts">--</span></p>
<script>
// Connessione WebSocket al server WebUI
const socket = new WebSocket(`ws://${location.host}/ws`);
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
if(data.type === "Temperature") {
document.getElementById('t').innerText = data.value;
document.getElementById('ts').innerText = new Date(data.ts).toLocaleString();
}
if(data.type === "Umidita") {
document.getElementById('h').innerText = data.value;
}
};
// Esempio: funzione per leggere dati storici tramite infodati
async function loadHistorical() {
let res = await fetch('/get_samples/Temperature/1h/1m');
let tempData = await res.json();
console.log("Dati storici temperatura:", tempData);
}
loadHistorical();
</script>
</body>
</html>
"""
Ui.expose_api("/", HTML)
App.run()>
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato. Grazie.
Come in questi casi dico sempre ... qui, nella sezione Italiana del forum, gli utenti di Arduino Q credo si contino sulle dita di una sola mano ...
Se si vuole una risposta più sicura ed in tempi più brevi, consiglio sempre di andare a porre la domanda, esclusivamente in lingua Inglese, nall'area internazionale didicata ad Arduino Q.
ciao Stefanoraptor,
anche io sto familiarizzando con Uno Q per la parte WEB.
posso suggerirti di copiare e analizzare l'esempio 'Blink LED with UI' che è relativamente semplice e usa la comunicazione con i Socket.
in particolare nella cartella assets/libs è fondamentale la libreria socket.io.min.js che viene caricata alla fine della pagina index.html.
e che viene poi utilizzata nel file app.js a partire da questa riga:
/*
* Socket initialization. We need it to communicate with the server
*/
const socket = io(`http://${window.location.host}`); // Initialize socket.io connection
per stabilire la connessione con il server web lato Python.
anche per me l'argomento è abbastanza nuovo sto studiando e provando gli esempi di uso della documentazione del brick WebUI - HTML.
Ho scritto ieri le mie prime impressioni su Uno Q dopo qualche giorno di smanettamenti nel post Primo contatto con Arduino UNO Q
Ho creato una nuova app vuota con i tuoi tre file e visto che non c'era ho creato uno sketch.ino semplice per simulare l’invio dei dati.
#include <Arduino_RouterBridge.h>
float temperatura=0;
float umidita=0;
void setup() {
Bridge.begin();
}
void loop() {
temperatura++; // incrementa il dato simulato
umidita++; // incrementa il dato simulato
Bridge.notify("startdata", temperatura, umidita);
delay(1000); // attendi un secondo
}
L’avvio automatico del browser non ha funzionato finché non ho aggiunto il brick WebUI-HTML dall’interfaccia ( vedi immagine sotto).
il brick è stato aggiunto al file app.yaml.
Poi ha funzionato inviando i dati simulati con intervallo di un secondo.
i tuoi file sembrano a posto, prova a confrontare lo sketch con il tuo.