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
Christian B. schrieb: > auch nur zum > Projekt hinzufüge Wie hast du das "hinzufügen" gemacht? Eine neue Dependency in der platformio.ini eingetragen, oder das Mysql-Modul selbst heruntergeladen und irgendwo in den Source-Tree entpackt? https://registry.platformio.org/libraries/chuckbell/MySQL%20Connector%20Arduino/installation
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 ... :(
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
> 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
Lass mal die Versionsangabe in der dependency weg, der Fehler wurde nach dem Release gefixt, ist aber nur im aktuellen master branch.
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
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...
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.
:
Bearbeitet durch User
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
J. S. schrieb: > Git ist die beste Erfindung seit Bier in Dosen. Vorher gab es CVS, das ist wie Bier in Fässern (etwas unhandlicher aber auch gut).
5L in Glas sind so schwer zu schleppen … Und nein, das sind keine dummen Fragen.
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?
Εrnst B. schrieb: > Ist "5" eine soo böse Zahl, dass man die nicht im Quelltext haben darf? Dafür muss man unbedingt eine spezielle Library hinzufügen. Am Besten eine aus dem Arduino Umfeld, damit die Qualität passt.
@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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.