HTML via SPIFFS in ESP32 (Server) funktioniert nur ohne background worker

Hallo liebe Helfer,
ich benötige bitte wieder Eure Hilfe:
Ich habe einen HTML-Code via SPIFFS in den ESP32 hochgeladen. In meinem Browser (Edge) funktioniert der Code sehr gut und ich kann in beiden Richtungen mit dem ESP32 kommunizieren.
Im HTML-Code soll nun per Button-Click auch ein Background-Worker gestartet werden. Dabei handelt es sich erstmal zum Test um einen simplen Zähler, den ich im JS-Code geschrieben habe und der separat auf dem Rechner liegt (in meinem Fall: c://exchange/counter.js).
Mein Problem: dieser Counter startet nicht. In Edge bekomme ich die Fehlermeldung “script5022 security error”.
Wenn ich den HTML-Code “lokal” auf dem Rechner laufen lasse, also dieser nicht per WLAN mit ESP32 verbunden ist, funktioniert es einwandfrei. Woran kann das liegen?
Muss das JavaScript ebenfalls via SPIFFS hochgeladen werden? Kann man 2 Files denn hochladen? Ich hab’s bisher nicht geschafft und bin für jede Hilfe dankbar.
Ach ja: falls wichtig, PC und ESP32 sind über Async WebSocket verbunden. Wie gesagt, ohne Probleme.
Danke im Voraus
Flieger

SPIFFS ist ein Filesystem. Du kannst viele Dateien (je nach Platzbedarf) hochladen.
Ich habe mit Background-Workern noch nicht gearbeitet, es könnte aber an den verschiedenen Quellen liegen, besonders wenn es lokal funktioniert.

Gruß Tommy

Hallo,

natürlich muß das .js vom Webserver ausgeliefert werden, wenn es Bestandteil der Webseite ist.
Ich hätte eine ganze Menge dagegen, wenn mein Webbrowser irgendwas von meiner lokalen Platte nachladen dürfte, nur weil es im HTML-Code steht und von Laufwerk C: sowieso nicht…

SPIFFS: ich kenne Deinen kompletten Aufbau des Codes nicht, natürlich kann man alles mögliche ins SPIFFS legen solange der Platz reicht.
Im Sketchordner den Ordner data anlegen und die Files reinkopieren. Dann in der IDE unter Werkzeuge “ESP32 Sketch Data Upload” auswählen und alles wird schön zusammengepackt und ins SPIFFS geschrieben.

Gruß aus Berlin
Michael

Hallo Thommy, hallo Michael,
vielen Dank für Eure Bemühungen.
@Michael: was Du in Deinem 2. Absatz schreibst, habe ich schon einige Male versucht; bisher leider ohne Erfolg. Ich nehme aber nun an, dass beide files, das html und das js nun im SPIFFS sind. Kann ich das irgendwie überprüfen? Auf jeden Fall sind beide im data-Ordner.
Falls Ihr noch Ideen habt, welche ich testen könnte...……..
Danke im Voraus
Gerhard

flieger1990:
Hallo Thommy, hallo Michael,
vielen Dank für Eure Bemühungen.
@Michael: was Du in Deinem 2. Absatz schreibst, habe ich schon einige Male versucht; bisher leider ohne Erfolg. Ich nehme aber nun an, dass beide files, das html und das js nun im SPIFFS sind. Kann ich das irgendwie überprüfen? Auf jeden Fall sind beide im data-Ordner.
Falls Ihr noch Ideen habt, welche ich testen könnte...……..
Danke im Voraus
Gerhard

Lass dir doch die Dateien aus dem Spiffs auflisten.
Wie das geht steht im FSBrowser oder nimm das Tool von meiner Webseite.

Gruß Fips

Hallo,

aus den Beispielen etwas abgewandet hab ich das so in meiner Anwendung

den code hab ich bei ausgeschnitten ich denke das sollte lauffähig sein. Klar loop fehlt :slight_smile:

Heinz

#include "FS.h"

void setup() {


  Serial.begin(115200);
  SPIFFS.begin();
  FSopen();

}

// --------------- Fillesystem öffne ---------------------
void FSopen() {
  FSInfo fs_info;
  SPIFFS.info(fs_info);
  float fileTotalKB = fs_info.totalBytes / 1024.0;
  float fileUsedKB = fs_info.usedBytes / 1024.0;
  Serial.print("\nFilesystem Total KB "); Serial.print(fileTotalKB);
  Serial.print(" benutzt KB "); Serial.println(fileUsedKB);

  Dir dir = SPIFFS.openDir("/");  // Dir ausgeben
  while (dir.next()) {
    Serial.print(dir.fileName()); Serial.print("\t");
    File f = dir.openFile("r");
    Serial.println(f.size());
  }
}

Rentner:
ich denke das sollte lauffähig sein. Klar loop fehlt :slight_smile:

Du denkst falsch!
Das ist auf einem Esp32 nicht lauffähig!

Gruß Fips

Hallo,
@Fips

danke für den Hinweis, bei dem Ding scheint ja so Einiges anders zu sein, muss man sich merken wenn man mal einen ESP32 verwenden sollte.

Heinz

Hallo Heinz, hallo Fips,
@Heinz: es ist richtig was Fips sagt: Dein Sketch funktioniert auch auf meinem ESP32 nicht. Ich habe mir aber etwas gebastelt mit dem Ergebnis, dass alle files, welche hochgeladen wurden, auch vorhanden sind; in meinem Falle 2x js und 2x txt. Also alles ok damit.
Nur der worker arbeitet immer noch nicht. Ich habe nun herausgefunden, da er in meinem html-script zwar kreiert wird (w1 = new Worker("counter.js"), aber die "onmessage function" nicht greift (w1.onmessage = function(event) {…
Offensichtlich kommen keine Daten an...?!
Ich hab's auch mit der addEventListener-Methode versucht, aber das gleiche Ergebnis.
Der Worker selbst sendet mit der postMessage-Methode.
Und, wie gesagt, lokal funktioniert dies alles.
Falls jemand noch Tipps/Ideen hat: immer gerne.
Danke und Grüße
Gerhard

Ich verstehe immer noch nicht was du eigentlich über WS auf dem Rechner machen willst. Würde mich aber interesieren!

Vielleicht hilft dir das hier.

Gruß Fips

Hallo Fips und die anderen,
zuerst zu Fips: ich möchte folgendes tun: der Webserver überträgt Daten vom und zum ESP32 auf welchem ein Arduino Sketch läuft. Am ESP sind Sensoren bzw. Aktuatoren angeschlossen.
Die Abfrage dieser Daten bzw. das Senden von Befehlen soll zeitgesteuert erfolgen; dazu der Background-Worker.
Ich habe mittlerweile folgendes herausgefunden:
In meiner OpenCloseWebSocket-function ist u.a. eine ws.onmessage = function(evt) {… enthalten.
Eine solche ist auch in der Worker-function: wc.onmessage = function(event) {…
Die beiden scheinen sich nicht zu vertragen...?
Noch folgendes dazu: wenn ich die var von ws in wc ändere, also beide gleich sind, erhalte ich die Daten vom ESP, allerdings werden sie im Ausgabefeld des counters (Workers) dargestellt. Der worker selbst scheint keine Daten zu senden bzw. sie werden nicht empfangen/dargestellt.
Letztlich brauche ich natürlich beides: die Daten vom ESP (es werden später mal ca. 10 Variable sein) sowie die des Workers.
Falls jemand den Code haben möchte, bitte hier gerne melden.
Noch Ideen? Ich bin für ein paar Tage außer Haus, komme aber hierauf zurück
Danke
Gerhard

Liebe Helferfreunde,
nach einigen Tagen "Denkpause" habe ich mich wieder hiermit beschäftigt; leider ohne Erfolg.
Alles funktioniert einwandfrei, der HTML-Code, die Übertragung vom ESP32, usw...
Nur der Worker startet scheinbar nicht??!! Kann denn ein Background-Worker prinzipiell nicht auf einem ESP als Server ausgeführt werden? Ich habe nicht einmal eine Idee, ob und wie ich prüfen kann, ob der Worker läuft.
Hat von Euch denn keiner mehr eine Idee? Irgendein Ansatz? Oder Workaround?
Ich bin schon recht frustriert :confused:
Danke
Gerhard

Hallo, alle zusammen,
also, mein Frust hat ein Ende. Ich hab's geschafft und möchte Euch teilhaben lassen. Letztlich war es wie so oft, nämlich ein Fehler 1. Ordnung.
Folgendes: ich habe im Arduino-Sketch lediglich vergessen, den Async-Webserver mitzuteilen, dass da noch ein JS-Script liegt. Für den HTML-Code hatte ich dies getan. Hier die Code-Ergänzung:

server.on("/html", HTTP_GET, (AsyncWebServerRequest *request){
request->send(SPIFFS, "/GW10_k2c.html", "text/html");
});

//neu für Backgroundworker:
server.on("/coolerpumpcounter.js", HTTP_GET, (AsyncWebServerRequest *request){
request->send(SPIFFS, "/coolerpumpcounter.js", "text/javascript");
});

Also, alles gut und der Backgroundworker funktioniert.
Nachzulesen auch bei:

Danke an alle und frohe Weihnachten
Gerhard