ESP8266 Webserver mit HTML Seiten im SPIFFS Werte Anzeigen

Ich würde gerne auf einer Webseite die im SPIFFS des ESP liegen aktuelle Werte anzeigen, hab folgendes Codebeispiel im Netz gefunden was mir die aktuelle Systemzeit (millis()) anzeigt, das funktioniert soweit, öndere ich aber das millis() auf floatwerte[0] (floatwerte[0] ist global als float deklariert) dann bekomme ich folgende Fehlermeldung ‘floatwerte’ was not declared in this scope.
wie kann ich diesen Float in dieser “class” angeben?

#include "WerteWebSite.h"

class TimeResponse : public UrsAsyncFileProcessorResponse {
public:
  String currentMillis;  // Speicher f�r die aktuelle Zeit

  // Konstuktor
  TimeResponse(const String & path) : UrsAsyncFileProcessorResponse(path, String(), false) {
    currentMillis = String(millis()); // Aktuellen Zeitwert zwischenspeichern --> Funktioniert
    currentMillis = String(floatwerte[0]); // Fehlermeldung 
  }

  // Template-Prozessor
  virtual String templateProcessor(const String & var) override {
    if (var == "millis") return currentMillis;
    return String();
  }
};

void WerteWebSiteClass::handleRequest(AsyncWebServerRequest * request) {
  sendFileResponse(request, new TimeResponse(request->url()));
}

Dann sieh dir mal folgende Website an.

Ich sehe auch keine floatwerte in Deinem Code. Unterschied floatwerte <–> floatwert?

Gruß Tommy

Hallo Tommy

funktioniert so nicht und ich bekomme die Fehlermeldung das floatwerte nicht declariert ist.

currentMillis = String(floatwerte[0]);

so aber direkt in der .ino vor void setup()deklariert

float floatwerte[100];

wie bring ich die werte rüber?

Das wundert mich bei dem gezeigten Code nicht. Da steht ein Array floatwerte / floatwert ja auch nicht drin.

Was diese beiden Zeilen sollen, ist auch unklar:

    currentMillis = String(millis()); // Aktuellen Zeitwert zwischenspeichern --> Funktioniert
    currentMillis = String(floatwerte[0]); // Fehlermeldung

Erst belegst Du den Wert mit millis() und dann mit einem ominösen Wert aus einem ominösen Array.
Eins von beiden kannst Du weg lassen.

Ich glaube, Du hast das, was Du zusammenkopiert hast, nicht im Geringsten verstanden.

Gruß Tommy

es wurde schon beide male floatwerte verwendet, war im ersten post von mir leider falsch geschrieben, im code passt es aber mit der deklaration über ein.

hänge leider immer noch an dem Problem fest und hoffe mir kann jemand nen Tipp geben…

WerteWebSite.cpp

#include "WerteWebSite.h"

class TimeResponse : public UrsAsyncFileProcessorResponse {

public:
  String currentMillis;
  String Floatwert1;

 

  // Konstuktor
  TimeResponse(const String & path) : UrsAsyncFileProcessorResponse(path, String(), false) {

    currentMillis = String(millis());  // FUNKTIONIERT
    Floatwert1 = floatwerte[1];   // Fehlermeldung: 'floatwerte' was not declared in this scope
  }


  virtual String templateProcessor(const String & var) override {
    if (var == "millis") return currentMillis;
    if (var == "Float1") return Floatwert1;
    return String();
  }
};

der html code dazu

<!DOCTYPE html>
<html>

<head>
   <meta content="text/html; charset=UTF-8" http-equiv="content-type">
   <title>Werte</title>
   <link href="favicon.ico" rel="shortcut icon" type="image/x-icon">
</head>

<body style="font-family: Arial, Helvetica, sans-serif">

<h1>LAN Gateway</h1>
<p>Die aktuelle Systemzeit ist <span style="color: #FF0000"><strong>%millis%</strong></span> seit Start.</p>
<p>Der aktuelle Floatwert1 ist <span style="color: #FF0000"><strong>%Float1%</strong></span> seit Start.</p>

</body>

</html>

sieht dann so aus

das ganze funktioniert auch mit millis() nur nicht mit einer selbst erstellten Variable aus meinem Programm

die Variable floatwerte ist ganz normal nach den #include … deklariert

float floatwerte[200];

kann mir jemand erklären warum ich in diesem Codeteil keine Variablen die beim Start deklariert wurden verwenden kann?
oder noch besser, wie kann ich in diesen Codeteil (WerteWebSite.cpp) die Variablen die im restlichen Programm verwendet werden hinein bekommen?

DANKE

Die Fehlermeldung lautet ‘floatwerte’ was not declared in this scope

floatwerte[1] wird im normalem Code mehrfach erfolgreich verwendet, nur eben bekomme ich die Fehlermeldung wenn ich floatwerte[1] (ist das selbe mit allen anderen selbst declarierten Variablen) in der WerteWebSite.cpp verwende.
warum funktioniert millis() und selbst erstellte Variablen hier nicht?

hier noch die zugehörige WerteWebSite.h

#ifndef _WERTEWEBSITE_h
#define _WERTEWEBSITE_h

#include "arduino.h"
#include <UrsAsyncWebSite.h>

class WerteWebSiteClass : public UrsAsyncWebSite {
 protected:
   // Handler-Methode, liefert den HTML-Response.
   virtual void handleRequest(AsyncWebServerRequest * request) override;

   // Liefert die URL f�r diese Seite. Gleichzeitig Dateiname der HTML-Datei.
   virtual String getUrl() override { return "werte.html"; }

   // Liefert alternative Ressourcen-Bezichnungen.
   virtual String getRewrites() override { return "werte|werte.htm|value|value.html|values.htm"; }
};
#endif

der Rest des Codes sind denk ich irrelevant für das Problem…

weil die Klasse in einer eigenen h ist und dort von deinem anderen Code nichts weis.
Genauso wie ich hier.

Perfekte Antwort, komm ich grad drauf :wink:

Um deutlich zu sein: Es liegt auch am Rest des Codes WIE DU DEN VERTEILT HAST.
Tommy hat dich darauf im September hingewiesen.

OK, und wie kann ich es der WerteWebSite.h mitteilen das es die z.B. floatwerte[] gibt?

Wie bereits gesagt: Indem Du uns einen [u]vollständig kompilierbaren Code[/u] mit allen beteiligten Dateien reduziert auf das Wesentliche, dass den Fehler reproduziert aber noch übersichtlich ist.

Gruß Tommy

entweder übergibst du den Wert als Referenz oder vieleicht gehts auch mit extern. Das kann ich nicht aus dem ff. brauche dazu also ein Beispiel, das ich mir aber jetzt nicht aus den Finger saugen werde.

Kannst aber vermutlich googeln. Oder eben einen vollständigen Sketch mit den gerade notwendigen Abhängigkeiten herstellen. Oder weitere 4 Monate auf combie, serenifly, doc, tommy, agmue... warten ... die können das sicher.

Hier der vollständiger Code hier die library

in dem Beispiel ist es die SysTimeWebSiteEx.cpp in der ich die Werte gerne übergeben würde.

Hoffe mit diesen Infos kannst Du mir weiterhelfen.

Was an

reduziert auf das Wesentliche, dass den Fehler reproduziert aber noch übersichtlich ist.

hast Du nicht verstanden? Du meinst doch wohl nicht im Ernst, dass wir uns da durch wühlen?

Gruß Tommy

Tja, nur der meiner Meinung nach wichtige Teil ist es zu wenig, und wenn ich ein Vollständiges Beispiel gebe ist es zu viel, ich weiß nicht wie ich es zusammenkürzen soll das es passt.

und wie gesagt es geht ja im Beispiel auch nur um die SysTimeWebSiteEx.cpp und diese ist ja sehr überschaubar.

simon24j: und wie gesagt es geht ja im Beispiel auch nur um die SysTimeWebSiteEx.cpp und diese ist ja sehr überschaubar.

Warum fragst du nicht einfach den Autor, der dürfte seinen Sketch am besten kennen.

Gruß Fips

simon24j:
und wie gesagt es geht ja im Beispiel auch nur um die SysTimeWebSiteEx.cpp und diese ist ja sehr überschaubar.

Da ist aber überhaupt kein “floatwerte” drin. Irgendwie ist das etwas unklar, was Du da von Dir gibst.

Gruß Tommy

doch die ist drin…
Wert1 = floatwerte[1];

floatwerte ist in der Baispiel.ino deklariert
float floatwerte[200];

// 
// SysTimeWebSite.cpp
// 

#include "SysTimeWebSiteEx.h"

class TimeResponse : public UrsAsyncFileProcessorResponse {
public:
  String currentMillis;  // Speicher f�r die aktuelle Zeit
  String Wert1;

  // Konstuktor
  TimeResponse(const String & path) : UrsAsyncFileProcessorResponse(path, String(), false) {
    currentMillis = String(millis()); // Aktuellen Zeitwert zwischenspeichern
    Wert1 = floatwerte[1];
  }

  // Template-Prozessor
  virtual String templateProcessor(const String & var) override {
    if (var == "millis") return currentMillis;
    if (var == "flaot1") return Wert1;
    return String();
  }
};

void SysTimeWebSiteExClass::handleRequest(AsyncWebServerRequest * request) {
  sendFileResponse(request, new TimeResponse(request->url()));
}

Ach ja, übersehen, sorry.

Und wo ist floatwerte angelegt?

Gruß Tommy

floatwerte ist in der Baispiel.ino vor dem void setup() deklariert und sieht so aus. float floatwerte[200];