Pagina Web Arduino Q

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()>

Si prega di utilizzare la lingua inglese nelle sezioni inglesi del forum. Argomento spostato nella sezione italiana del forum.

:warning:
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.

Guglielmo

@stefanoraptor:

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 ... :roll_eyes:

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.

Poi ... vedete voi ...

Guglielmo

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.

    <script src="libs/socket.io.min.js"></script>
    <script src="app.js"></script>
</body>
</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 ridato un occhiata al codice e ho scritto questo per un attimo ha funzionato poi non più, qualcuno sa dirmi cosa fare?

index.html

<!--
SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc)

SPDX-License-Identifier: MPL-2.0
-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Clima Casa</title>
</head>
<body>
<p>Temperatura: <span id="Temperature">  </span> °C</p>
<p>Umidità: <span id="Umidita">  </span></p>
 <script src="libs/socket.io.min.js"></script>
 <script src="app.js"></script>
</body>
</html>

app.js

// SPDX-FileCopyrightText: Copyright (C) ARDUINO SRL (http://www.arduino.cc)
//
// SPDX-License-Identifier: MPL-2.0



// Connessione al server
const socket = io(`http://${window.location.host}`);
const Temperature = document.getElementById('Temperature');
const Umidita= document.getElementById('Umidita');
document.addEventListener('DOMContentLoaded', () => {
    initSocketIO(); 
    });
function initSocketIO() {
    // Ricezione dati in tempo reale
    socket.on("Temperatura", (data) => {
       Temperature.textContent = data.value;
       });

    socket.on("Umidita", (data)=> {
    Umidita.textContent=data.value;
    });
       
       
    };

python

import datetime
import math
from arduino.app_utils import App, Bridge
from arduino.app_bricks.web_ui import WebUI

Ui=WebUI()
def startdata(Temperatura: float, Umidita: float):
 
  Ui.send_message("Temperatura",{"value": float(Temperatura)})
  Ui.send_message("Umidita" , {"value": float(Umidita)})
 

print("Registering 'record_sensor_samples' callback.")
Bridge.provide("startdata", startdata)


App.run()

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.