(Anfänger)probleme mit PlatformIO (mit VSC)

Gast #7414784
Lesenswert?

Hallo

Ich versuche gerade den Quellcode von OpenDTU ( siehe auch hier: Beitrag "Re: Wechselrichter Hoymiles HM-xxxx 2,4 GhZ Nordic Protokoll?" ) derart zu erweitern, dass der ESP die Messwerte direkt in meine MySQL Datenbank speichert.

Ich habe ein ähnliches Projekt mit einem LoRa-fähigen ESP bereits für meine Wasserzisterne verwirklicht (allerdings in der Arduinoumgebung) und dachte, dass es ja kein großes Problem sein würde, die erforderliche Bibliothek und die paar Zeilen Quellcode hinzuzufügen.

Tja. Falsch gedacht. Ich stolpere seit Tagen in dieser (für mich neuen und ziemlich unübersichtlichen) IDE herum und stoße ständig auf, für mich unerklärliche, Fehler.

Inzwischen ist es mir dank der Hilfe im anderen Thread gelungen OpenDTU von Github (mit dem ich mich ebensowenig auskenne) zu klonen und unverändert zu kompilieren (mit AhoyDTU, das ich eigentlich bevorzugen würde, schaffe ich das bis heute nicht).

Aber sobald ich die MySQL-Bibliothek ( https://github.com/ChuckBell/MySQL_Connector_Arduino ) auch nur zum Projekt hinzufüge (ohne auch nur eine Zeile des ursprünglichen Codes zu ändern (zumindest nicht wissentlich)), funktioniert kein Build mehr. Und das aber mit Fehlermeldungen, die m.E. nichts mit der neuen Bibliothek zu tun haben (z.B.: In file included from src/Display_Graphic.cpp:2: include/Display_Graphic.h:5:10: fatal error: U8g2lib.h: No such file or directory)

Kann mir da vielleicht jemand auf die Sprünge helfen und sagen was ich falsch mache?

Danke Christian

Gast #7415046
Lesenswert?

Auf zwei verschieden Arten.

Erst habe ich die Dependency in die platformio.ini eingetragen (das war allerdings mit dieser Bibliothek: https://github.com/khoih-prog/MySQL_MariaDB_Generic (ist, glaub ich, ein Abkömmling der Obigen)).

Da funktionierte das Kompilieren wenigstens wieder nachdem ich die Einträge aus der platformi.ini entfernt hatte.

Als letztes habe ich die Bibliothek hinzugefügt indem ich in dem senkrechten Menü von PlatformIO auf Libraries geklickt habe und anschließend nach mysql gesucht und "Add to Project".

Da geht das Compilieren auch nicht mehr, wenn ich sie wieder deinstalliere ... :(

Gast #7416094
Lesenswert?

Neuer Versuch:

Jetzt habe ich nur "chuckbell/MySQL Connector Arduino@^1.2.0" im Bereich [env] lib_deps eingefügt und auf Build gedrückt.

Das kommt dabei raus: ;(

Compiling .pio\build\generic_esp32c3\lib5a5\MySQL Connector Arduino\MySQL_Encrypt_Sha1.cpp.o .pio/libdeps/generic_esp32c3/MySQL Connector Arduino/src/MySQL_Encrypt_Sha1.cpp: In member function 'virtual size_t Encrypt_SHA1::write(uint8_t)': .pio/libdeps/generic_esp32c3/MySQL Connector Arduino/src/MySQL_Encrypt_Sha1.cpp:89:1: error: no return statement in function returning non-void [-Werror=return-type] } ^ .pio/libdeps/generic_esp32c3/MySQL Connector Arduino/src/MySQL_Encrypt_Sha1.cpp: In member function 'virtual size_t Encrypt_SHA1::write(uint8_t*, int)': .pio/libdeps/generic_esp32c3/MySQL Connector Arduino/src/MySQL_Encrypt_Sha1.cpp:95:1: error: no return statement in function returning non-void [-Werror=return-type] } ^ cc1plus.exe: all warnings being treated as errors

#7416099
Lesenswert?

Arduino/src/MySQL_Encrypt_Sha1.cpp:89:1: error: no return statement in function returning non-void [-Werror=return-type]

Das ist ein Fehler in der MySQL-Lib. Entweder den Compiler ignorieren lassen (-Werror Compiler-Optionen ändern)

oder reparieren: https://github.com/ChuckBell/MySQL_Connector_Arduino/commit/da48660b9b60cd717e856ed503bcc55ed91d755a

Leider hat der Entwickler die reparierte Version nicht getaggt/veröffentlicht... Platformio kann aber den aktuellen Git-Stand verwenden:

lib_deps = https://github.com/ChuckBell/MySQL_Connector_Arduino

statt chuckbell/MySQL Connector Arduino@^1.2.0

Gast #7416110
Lesenswert?

Danke euch. Ist wohl ein (kleiner) Fortschritt.

Aber viel weiter kommt der Compiler wieder nicht:

Archiving .pio\build\lolin32_lite\libf06\libU8g2.a .pio/libdeps/lolin32_lite/MySQL Connector Arduino/src/MySQL_Packet.cpp: In member function 'int MySQL_Packet::read_lcb_int(int)': .pio/libdeps/lolin32_lite/MySQL Connector Arduino/src/MySQL_Packet.cpp:523:7: warning: unused variable 'size' [-Wunused-variable] int size = 0; ^~~~ .pio/libdeps/lolin32_lite/MySQL Connector Arduino/src/MySQL_Cursor.cpp: In member function 'char* MySQL_Cursor::read_string(int*)': .pio/libdeps/lolin32_lite/MySQL Connector Arduino/src/MySQL_Cursor.cpp:389:12: error: 'char* strncpy(char*, const char*, size_t)' output truncated before terminating nul copying 4 bytes from a string of the same length [-Werror=stringop-truncation] strncpy(str, "NULL", 4); ~~~~~~~^~~~~~~~~~~~~~~~ cc1plus.exe: all warnings being treated as errors Compiling .pio\build\lolin32_lite\libf59\CMT2300a\cmt2300a.c.o *** [.pio\build\lolin32_lite\lib894\MySQL Connector Arduino\MySQL_Cursor.cpp.o] Error 1 ============================================================== [FAILED] Took 77.65 seconds ==============================================================

Environment Status Duration


lolin32_lite FAILED 00:01:17.647

#7416116
Lesenswert?

Christian B. schrieb:

output truncated before terminating nul copying 4 bytes from a string of the same length [-Werror=stringop-truncation] strncpy(str, "NULL", 4);

Ist zwar ein Fehler, aber der Entwickler hat ihn in der darauf folgenden Zeile repariert:

1
    strncpy(str, "NULL", 4);
2
    str[4] = 0x00;

-> Versuch erstmal das "-Werror" aus den Compileroptionen rauszunehmen. Ist zwar bei eigenem Code eine gute Idee, aber bei Fremdcode geht das halt nicht immer...

#7416117
Lesenswert?

Man könnte das Warnungen als Fehler abschalten, aber wenn eine Lib so unsauber programmiert ist, dann würde ich das nicht machen. Der richtige Weg ist die Fehler in der Quelle zu beheben: Zuerst einen Fork der Lib erstellen (anmelden bei Github, dann ist das nur ein Klick). Dann branch erstellen, z.B. fix-unused-var. In diesem dann die Fehlerkorrekturen machen und diesen Branch als dependency in das pio Projekt eintragen. Wenn das funktioniert, dann Pull Request an den Autor der Lib.

Meine Empfehlung: erst git, dann programmieren lernen. Git ist die beste Erfindung seit Bier in Dosen. Wobei gerade heute wohl letzteres mehr gebraucht wird 🍻

Für die unused vars gibt es in C++ das Attribut maybe unused. Wenn man die warum auch immer noch da stehen lassen möchte. Solche Relikte sind dank git aber auch meist überflüssig.

Gast #7416122
Lesenswert?

Ich habe jetzt (aufgrund eines Tipps auf dieser Seite: https://github.com/facebookarchive/xcbuild/issues/297 ) "strncpy" durch "memcpy" ersetzt (ohne zu wissen was ich da tue) und es compiliert :)

Ich habe es noch nicht auf einen Controller geflasht, gehe aber optimistischerweise davon aus, dass es laufen wird.

D.h. ich werde als nächstes versuchen meinen Code einzufügen ...

@J.S.:

Du hast absolut recht, das wäre die richtige Vorgangsweise. Aber: Wie gesagt, prorammiere ich seit Jahrzehnten in Pascal (auch wirklich große, kommerzielle Projekte) und konnte mich nie mit C/C++ anfreunden (trotz mehrerer Anläufe). Ich sehe Git auch als großartige Sache an (Im Gegensatz zu Dosenbier, Bier gehört in Flaschen! :) ), möchte aber in diesem Fall eigentlich nur ein begrenztes Ziel erreichen (Die Werte aus meinem Wechselrichter in die DB bekommen) und glaube nicht, dass ich (auch weil ich außerhalb der virtuellen Welt einiges an Projekten (sowohl zum Broterwerb als auch zum Vergnügen) am laufen habe) in meinem Alter noch viel Zeit investieren möchte um diese tolle Sache zu erlernen. (Aber man soll ja nie nie sagen ...)

Danke für eure Hilfe, mal sehen wie lang es dauert, bis ich die nächste (aus eurer Sicht möglicherweise dumme) Frage stelle :)

LG CHristian

#7416174
Lesenswert?

Christian B. schrieb:

"strncpy" durch "memcpy" ersetzt (ohne zu wissen was ich da tue) und es compiliert

Jaja... wenn die Blinden versuchen, den Quelltext vom Einäugigen zu reparieren...

Der erste kann nicht bis 5 Zählen, und schreibt eine 4 in den Quelltext. Der nächste sieht den Fehler, will aber die 4 nicht wegnehmen, sondern packt von Hand ein str[4] = 0x00; dahinter. Und dann kommen die nächsten Spezialisten, und machen ein memcpy aus dem strncpy, weil sie auch unbedingt an der falschen 4 festhalten wollen.

Ist "5" eine soo böse Zahl, dass man die nicht im Quelltext haben darf?

Gast #7416188
Lesenswert?

@Ernst und Stefan

Ich verstehe eure Ressentiments zu 100% und bin mir dessen auch durchaus bewusst. Aber wie gesagt: Ich habe nicht die Absicht mich (mehr als für diesen Fall notwendig) mit C/C++ zu beschäftigen, möchte nur dieses EINE Problem lösen und werde meine Lösung auch nur für meine Zwecke verwenden und nicht als Lösung mit nennenswerter Schöpfungshöhe veröffentlichen.

Aber (leider) geht es sich nicht aus in einem Leben alles zu erlernen und zu können, somit werde ich mit euren Spott und Hohn leben müssen :)

Schönen Feiertag Christian

Gast #7449519
Lesenswert?

Kleiner Zwischenbericht (um nicht in der Suppe derer mitzuschwimmen, die stets Fragen, nichts machen und nie wieder (bis zur nächsten dummen Frage) von sich hören zu lassen):

Ich konnte das Programm inzwischen um die Funktionalität des Schreibens in die MySQL-DB erweitern (allerdings noch ohne die sensationell gelungenen Einstellmöglichkeiten von AhoyDTU dafür zu verwenden, somit sind die Zugangsdaten, Server-IP etc. noch im Quellcode) und das abgebildete (Lazarus-)Programm visualisiert die Daten der Sonnenstromproduktion.

Der ESP8266 mit meiner modifizierten Version läuft inzwischen seit sechs Tagen problemlos durch.

Danke nochmals für eure Unterstützung Christian

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren