nischram / EMD_1

E3DC-Modbus-Display-1
4 stars 1 forks source link

OpenWeatherMap #7

Closed oenings closed 1 year ago

oenings commented 1 year ago

Zunächst mal vielen Dank für das tolle Projekt. Alles ist gut beschrieben, so dass es bei der Inbetriebnahme keine größeren Probleme gab. Die OpenWeatherMap ist konfiguriert (WEATHER_KEY, WEATHER_ID und WEATHER_ID_USE), jedoch erscheint beim Default Screen kein Symbol für die Wetter Map. Wenn ich den Touchbereich auswähle, wird eine Sanduhr eingeblendet und das Programm stürzt ab und rebootet. Im Seriellen Monitor wird noch die korrekt zusammengebaute OpenWeatherMap URL angezeigt und Location und Timeoffset richtig ausgegeben, anschließend wird der Core Dump angezeigt und neu gebootet. Die Anzeige vom E3DC ist korrekt und funktioniert soweit fehlerfrei. Aktuell verwende ich noch keinen PIR Sensor und DHT Sensor. Habe ich noch eine Konfiguration vergessen, oder wo könnte der Fehler liegen?

Danke und viele Grüße, Frank

nischram commented 1 year ago

Hallo Frank,

freut mich, dass es auf anhieb geklappt hat. Ich habe gerade bei mir mal den Fehler nachgestellt. Wenn der "WEATHER_KEY" falsch eingetragen ist dann verhält sich das Display genau so wie beschrieben. Ich teste mal weiter ob man diesen Fehler umgehen kann und ggf. eine Fehlermeldung ausgeben kann. Ich melde mich wieder...

Gruß Nico

oenings commented 1 year ago

Hallo Nico,

danke für die schnelle Rückmeldung. Ich habe den Key aus dem OpenWeatherMap Portal kopiert und als String eingetragen, und gültig scheint er ebenfalls zu sein. Wenn ich den Schlüssel im Browser teste, bekomme ich ein gültiges JSON Objekt zurück (https://api.openweathermap.org/data/2.5/weather?id=524901&appid=Mein_Key)

Was kann ich noch probieren? Kann es ggf. ein Problem mit der Version der OpenWeatherOneCall Bibliothek geben?

Danke für die Unterstützung... Frank

oenings commented 1 year ago

Merkwürdig... Folgender Aufruf liefert tatsächlich eine Fehlermeldung: https://api.openweathermap.org/data/2.5/onecall?id=524901&appid=Mein_Key

{"cod":401, "message": "Invalid API key. Please see https://openweathermap.org/faq#error401 for more info."}

Leider habe ich bisher keinerlei Erfahrung mit der API, vielleicht kannst du damit was anfangen...

nischram commented 1 year ago

Hi, dein letzter call mit "onecall" geht bei meinem API_KEY auch nicht.

Der Gedanke mit der Version, ist gar nicht so schlecht, welche nutzt du denn? Ich habe OpenWeatherOneCall v3.1.9 da meine immer noch Aktuell ist wird es wohl nicht der Fehler sein... Aber irgendwie hat deine Fehlermeldung Ähnlichkeit mit der Meldung aus Issue #4 Könnte es vielleicht sein, dass du in der "parameter.h" die Value #define WEATHER_GEO_USE aktiv hast und nicht auskommentiert? also so? //#define WEATHER_GEO_USE Alternativ könntest du es mal mit Koordinaten statt der City-ID versuchen. Ich bin gerade schon dabei was einzubauen das die Software be einem solchen Fehler nicht abstürzt sondern nur das Menü abbricht.

nischram commented 1 year ago

Nun habe ich eine Version hochgeladen die nicht abstürzt. Es wird aber deinen Fehler wohl noch nicht beheben.

oenings commented 1 year ago

Hallo Nico,

ich bin etwas weiter gekommen, das Problem ist tatsächlich der API KEY. Ich hatte jetzt noch einen alten Account reaktiviert, und mit dem KEY funktioniert die Wetteranzeige erstmal ohne Probleme und das ICON im Startbildschirm wird ebenfalls angezeigt. Offensichtlich wurde die Möglichkeiten mit neu generierten KEY's eingeschränkt, scheinbar neues Geschäftsmodell ;) Ich habe aber sowohl in deiner neuen und auch alten Version noch folgendes Problem:

Wenn ich die Wetterseite mit zurück beende, komme ich in die Einstellungen. Rufe ich anschließend erneut die E3DC Übersicht auf, stürzt die Applikation nach einigen Sekunden mit folgender Fehlermeldung ab und startet neu:

assert failed: heap_caps_free heap_caps.c:360 (heap != NULL && "free() target pointer is outside heap areas")

Hast Du eine Idee, oder das Problem ebenfalls?

VG Frank

nischram commented 1 year ago

Hallo Frank,

super das du es mit einen alten Key testen konntest und so meinen Verdacht bestätigst, dass ein neuer Key das Problem auslöst. Muss ich mir wohl einen neuen Key einrichten damit ich den Fehler bei mir nachstellen kann.

Den anderen Fehler konnte ich tatsächlich bei mir nachstellen. Da muss ich ran und schauen was da passiert. Die Meldung kenne ich noch nicht, aber da lässt sich bestimmt was finden.

VG Nico

oenings commented 1 year ago

Danke soweit, bin sicher du findest eine Lösung. Ich werde dein Projekt interessiert weiter verfolgen, und es erstmal so in Betrieb nehmen. Auch wenn es so natürlich nicht optimal ist... VG Frank

nischram commented 1 year ago

Jetzt wo ich mich an die Analyse machen wollte, tritt der Fehler nicht mehr auf. So denke ich es liegt vielleicht am Wettersymbol. Also das zu einem bestimmten Wetter, dass Wettersymbol nicht vorhanden ist. Wobei eigentlich die Funktion der Symboldarstellung wenn ein Symbol fehlt dies einfach überspringt und nicht abstürzt.

Für die Analyse habe ich bei mir in der "wetterGui.h" eine Ausgabe des Symbols eingebaut. Sieht so aus:

void drawWeatherSingleIcon() {
      if (millis() - weatherMillis > WEATHER_INTERVALL *60*1000 || weatherMillis == 0){
        weatherMillis = millis();
        if(strcmp(WEATHER_KEY, "12345678910111213141516171819202")==1){
          // Set Ecludes
          myEXCLUDES = EXCL_H+EXCL_M+EXCL_D+EXCL_A;

          // Start Weather Call
          startWeatherCall();

          if (OWOC.current)
          {
            Serial.printf("Current icon       :  %s\n", OWOC.current->icon);
            drawWeatherIcon(OWOC.current->icon,80,10);
            makeClock(OWOC.current->dayTime+OWOC.location.timezoneOffset, timeStamp, datum, zeit, zeitHoMi);
            overwriteLcdText(104, 18, 50, 8, ILI9341_LIGHTGREY, ILI9341_WHITE, FontMonospaced_bold_10,"%s", zeitHoMi);
            overwriteLcdText(101, 91, 68, 12, ILI9341_DARKGREY, ILI9341_WHITE, FontMonospaced_bold_13,"%4.1f\n", OWOC.current->temperature);
            tft.drawRGBBitmap(137, 82, celsius,11,9);
          }
        }
      }
}

Mal sehen ob ich den Fehler wieder erwische.

Gruß Nico

oenings commented 1 year ago

Du hast Recht, auch bei mir tritt der Fehler aktuell nicht mehr auf... Damit ist das Problem ja bereits ziemlich eingegrenzt...

VG Frank

nischram commented 1 year ago

Jetzt ist der Fehler wieder da und jetzt sogar noch schlimmer. Denn wenn das Display jetzt in den Bildschirmschoner geht und wieder hell wird dann beleibt es weiß aber die Ausgaben im Monitor sind korrekt.

Leider bin ich noch nicht weiter woher es kommt...

Was mir dabei aber auffällt, man braucht vielleicht noch einen Reset-Button am Gerät. Ich kann bei meinem Gehäuse noch recht gut an den Reset vom ESP kommen aber bei dem Original Gehäuse geht das nicht. Ich werde es wohl noch in die Anleitung aufnehmen müssen (oder ich finde es im Netz und kann es übernehmen).

oenings commented 1 year ago

Bei mir verhält sich die Anzeige aktuell leider ähnlich, so wäre es im Moment nicht benutzbar... Ich hoffe Du hast Erfolg bei der Fehlersuche... VG Frank

nischram commented 1 year ago

Hallo Frank, in den nächsten Tagen werde ich es nicht schaffen mich intensiv um den Fehler zu kümmern. So solltest du das Display erstmal ohne Wetterfunktion nutzen. Viele Grüße Nico

oenings commented 1 year ago

kein Problem... Melde dich einfach, wenn Du was gefunden hast...

nischram commented 1 year ago

Hallo Frank, erst war ich nicht dazu gekommen und dann war es vergessen 😉 Jetzt habe ich nochmal gesucht. Einiges an "try and error", also viel änder hochladen und testen. So habe ich einen Ansatz gefunden. Ich setzte in der "Aktuell" Ansicht und in der "Wetter" Ansicht die "EXCLUDES" für die Wetterabfrage jeweils unterschiedlich. Es schein so zu sein, dass man dies nicht unterschiedlich setzen darf. Ich könnte mir vorstellen, dass mit weniger Einschränkungen mehr Variablen gefüllt werden die nachher Leer bleiben, was zum Absturz führt. Zum Testen habe ich nun die "EXCLUDES" gleich gesetzt und kann den Fehler nicht mehr Nachstellen und andere Probleme habe ich nicht gefunden. Somit glaube ich, dass es die Lösung ist. Ich würde mich freuen wenn du es bei dir, bevor ich es veröffentliche, testen kannst.

Folgendes habe ich gemacht. In der Datei "weatherGui.h" die Zeile 328 mit den "EXCLUDES" von: myEXCLUDES = EXCL_H+EXCL_M+EXCL_D+EXCL_A; geändert nach: myEXCLUDES = EXCL_H+EXCL_M; So sieht der Bereich geändert aus:

void drawWeatherSingleIcon() {
      if (millis() - weatherMillis > WEATHER_INTERVALL *60*1000 || weatherMillis == 0){
        weatherMillis = millis();
        if(strcmp(WEATHER_KEY, "12345678910111213141516171819202")==1){
          // Set Ecludes
          myEXCLUDES = EXCL_H+EXCL_M;

          // Start Weather Call
          startWeatherCall();

          if (OWOC.current)
          {
            Serial.printf("Current icon       :  %s\n", OWOC.current->icon);

Ich hoffe es ist die Abhilfe um das Display ohne Einschränkungen weiter nutzen zu können.

Viele Grüße Nico

oenings commented 1 year ago

Hallo Nico,

Vielen Dank für deine Bemühungen, ich werde die Änderungen am Wochenende testen und melde mich wieder..

VG Frank

oenings commented 1 year ago

Hallo Nico,

ich habe die Änderungen jetzt einige Tage ausprobiert und bisher keine Probleme feststellen können. Offenbar hast Du den Fehler gefunden...

Viele Grüße und danke für die Unterstützung, Frank

nischram commented 1 year ago

Hallo Frank,

freut mich und danke fürs Feedback. Ich habe es nun in Version 1.09 hochgeladen.

Viele Grüße Nico