joba-1 / Joba_ESmart3

Complete control of eSmart3 MPPT solar charge controllers with ESP32 or ESP8266 via RS485
7 stars 2 forks source link

Kann nicht auf Wemos D1 Mini uploaden #17

Open ChrisT7912 opened 3 weeks ago

ChrisT7912 commented 3 weeks ago

Hi Joba,

nach langen Tüftelön mit VS Code und Platform IO habe ich Dein Skript sauber kompilieren können. Nun scheitert es bei mir an der Stelle des Uploads. Ich habe Dir dazu einmal ein Foto angefügt. Hast Du vielleicht eine Idee warum er den USB Port nicht öffnen kann? Über Devices kann ich den Wemos erkennen. Die Verbindung scheint also zu funktionieren.

VG ChrisT

Screenshot 2024-08-24 093927

joba-1 commented 3 weeks ago

Freut mich zu hören, dass es soweit geklappt hat. Dein Problem ist, dass ich mit Linux arbeite. Da heißen COM Ports /dev/ttyIrgendwas. Unter Windows heißen sie COMx, wobei x eine Nummer ist die du selbst rausfinden musst. Steht im Gerätemanager, oder einfach durchprobieren…

Also die platformio.ini Datei öffnen und /dev/ttyUSB2 durch z.B. COM4 ersetzen. Dann sollte es gehen.

ChrisT7912 commented 3 weeks ago

Guten Morgen Joba,

danke für den Tip. Ich hatte mir das zwar schon gedacht, weil ich auch mit Lunix experimentiere aber dass es dann so einfach ist, den ESP8266 mit dem "com3" Befehl anzupassen habe ich dann gar nicht gedacht. Ich habe heute in meiner Not dann mal die .bin mit ESP8266 Flasher hochgeladen. Ich hatte heute irgendein Problem, dass das Board in Windows nicht wollte. Hab's dann aber geschafft :) Jetzt kann ich auf die Oberfläche zugreifen.

Nun stehe ich vor dem Problem, dass ich keine Daten sehen kann. Ich habe gedacht, dass ich auf dem Wemos D1 den TX und den RX Pin verwenden muss aber das scheint nicht so zu funktionieren. Hast Du eine Idee welche Pins ich noch testen soll?

Den eSmart Clone (in meinem Fall ein Eco Worthy) habe ich mit mit RJ45 Pin 1 und 2 angeschlossen. Kannst Du mir bestätigen, dass es soweit richtig ist?

Danke & ein sehr cooles Projekt von Dir :+1: Bildschirmfoto vom 2024-08-25 10-54-47

joba-1 commented 2 weeks ago

Die normalen Rx and Tx wollte ich für Debug Prints behalten.

https://github.com/joba-1/Joba_ESmart3/blob/4d89df062dcf1a0cf39d1f2eaadeffe2a80aaf76/examples/Monitor_ESmart3/src/main.cpp#L999

Diese Zeile definiert die Pins für den rs485. Die Pins mit dem Rx und Tx des rs485 Adapters verbinden. Und ja, A/B des Adapters mit 1&2 des RJ45 stimmt.

joba-1 commented 2 weeks ago

falls du beim Tüfteln irgendwelche Änderungen am Code oder den Konfigurationsdateien machen musstest, kannst du sie gerne schicken. Am liebsten als Pullrequest oder einfach hier. Evtl. hilft es ja jemandem.

ChrisT7912 commented 2 weeks ago

Also Dein Tip hat geholfen. :) Ich schreibe das mal zusammen, falls jemand auch so bauen möchte.

Auf dem Wemos D1 Mini habe ich die RX Leitung des RS485 Adapters auf D7 und die TX Leitung auf D8 gesteckt. Die Versorgung geht auf der 3,3V Seite des ESP82600 ebendso wie der GND Pin. Auf der Gleichrichterseite kommt der PIN 1 (orange) auf den Anschluss für die Datenleitung A und der PIN 2 (orange-weiß) auf den Anschluss B. Auf dem WMOS habe ich eine dauerhaft stehende blaue PIN und auf dem RS485 Board blinken zwei kleine rote LEDs für RX und TX.

Was ich von @joba-1 gern wissen möchte: Die Daten sind dann über das Skript nur lesbar oder lassen sich auch Parameter setzen? Bei meinem Gerät habe ich glücklicherweise 2 RJ45 Anschlüsse und betreibe auf einem PIN die M2 Bluetooth Box und auf dem anderen den Konverter.

Ich würde mit Deinem Board gerne eine etwas smartere Regelung meines Bastel BKW realisieren. Dazu hätte ich gern noch einen PZEM 17 am Batterieausgang zum Netzwechselrichter hin angeschlossen bzw. ausgewertet. Denkst Du sowas ist über das selbe Board möglich? Hintergrund ist, dass ich gern rechnen möchte (wahrscheinlich mittels Iobroker), wie viel Strom aka Wattstunden vom Laderichter in die Batterie geht und was dann in Wechselspannung umgesetzt wird. Ich stelle mir dass so vor, dass ich saldierend ermittle, was "erzeugt" wird und je nach Batteriestand (die ich leider nur über ein Daly BMS per BT) auslese entweder die volle Solarleistung zum Laden verwendet wird (initial würde ich die Batterie auf 100% laden) oder als Überschuss schon eingespeist wird. Über den Shunt kann ich ja sehen, was ich entnehme und entsprechend eine Tasmota Steckdose schalten. Ich hoffe, Du kannst mir da leicht folgen :)

Zwei kleine Fragen habe ich noch zu Deinem bestehenden Projekt. Du hast ja eine Influx DB erstellt. Kann ich auch eine bestehende verwenden? Ich hatte mir eine V2 in einem Proxmox Container für Tasmota, Zigbee Geräte erstellt. Geht das? Und die zweite Frage, wie hast Du das mit dem MQTT gelöst? Steht bestimmt auch in einem Teil des Quellcodes wie ich das anspreche :)

Ich würde gern an dem Projekt / Protokolldaten weiter tüffteln aber von der Programmierung habe ich nur VBA Basics Kenntnisse. Das andere ist glaub noch etwas zu hoch für mich und benötigt weiteren Support :(

joba-1 commented 2 weeks ago

Schön dass das gleich funktioniert hat! 👍

Pzem17 geht auch über rs485, oder? Auch mit 9600 baud? Dann wird das mit dem selben Board gehen. Man muss nach einem Request eben immer auf Antwort oder Timeout warten bevor man den nächsten verschickt.

Evtl brauchst du den Pzem aber gar nicht? Der esmart3 liefert doch schon Werte was er über den schaltbaren Load Ausgang liefert. Wenn dir die 40A reichen würd ich den Wechselrichter dort anschließen. Dann könntest du auch den Load Ausgang nur dann über meine lib anschalten wenn die Batterie voll ist (ohne extra Tasmota Steckdose)

Ein Influx Daemon/Service kann beliebig viele Datenbanken gleichzeitig verwalten. Du kannst also einfach deinen bestehenden verwenden und damit eine neue Datenbank anlegen.

Als Mqtt Broker verwende ich Mosquitto. Wenn du noch keinen hast, dann würd ich den empfehlen. Braucht 0 Konfiguration. Geht sicher mit Proxmox als VM oder Container. In der platformio.ini dann einfach dessen IP oder hostnamen eintragen.

Oder war die Frage eher: Wozu eigentlich Mqtt?

Evtl. hab ich was falsch verstanden/konnte nicht folgen - gern nochmal nachhaken.

ChrisT7912 commented 2 weeks ago

Darüber habe ich mich auch gefreut 🥇

Ja der PZEM 017 läuft auch über RS 485. Wegen der Geschwidnigkeit schaue ich mal Freitag wenn ich wieder daheim bin.

Ich habe von dem eSmart3 nicht den LOAD Ausgang beschaltet, weil das wohl nicht gut für das Relais sein soll, wenn der ständig direkt auf den Netzwechselrichter an und aus geht. Daher die Idee mit dem PZEM und Tasmota. Aber senden (Commands) an den Gleichrichter gehen mit diesem Skript nicht oder?

Ah okay das ist natürlich cool. Dann spiele ich mal bissl mit der Influx DB rum. Ich muss nur mal blöd fragen, der Befehl in Deinem Skript ist schon die V2 oder noch die V1 der Influx.

Mit dem MQTT war schon richtig beantwortet´die Frage. Ich habe diesen immer für Tasmota und iobroker verwendet und und da war das relativ einfach einzustellen in der kleinen Maske.

joba-1 commented 2 weeks ago

der PZem hat 9600 8n2 und der esmart 8n1. Manche Geräte sind da tolerant mit der Anzahl der Stopbits. Musst du wohl ausprobieren. Notfalls einen weiteren Bus mit zwei freien Pins…

Hohen Load schalten ist wirklich nicht gut. Ich schalt seit 2Jahren täglich einmal ~30-100W, das geht offenbar :) Die Wechselrichter fahren Last normalerweise langsam hoch. Vor dem Ausschalten sollte man die Last runterdrehen und erst nach dem Anschalten wieder auf den gewünschten Wert. Dann sollte das gehen. Senden von Commands hab ich aber nicht drin. Das hab ich erst mit dem Lifepo-Island gemacht (zusätzliche BMS Steuerung)

Meine Influx ist noch V1. K.A. wie kompatibel die V2 ist.

ChrisT7912 commented 2 weeks ago

Kannst Du mir erklären, wie das in den Quellcode eingebettet werden muss? Oder vielleicht hast Du ja eine gute Seite zum Nachlesen :) Der PZEM 017 hat ja soweit ich das sehe eine gute Dokumentation im Netz.

Das mit der Last stimmt. Ich habe ja auch in meiner Wohnung nur eine Grundlast von 150W am PC am Tag (Home Office) und den Kühlschrank (im Schnitt 30W/h) - das werde ich mal versuchen. Muss das eh die nächsten Wochen nochmal umbauen bzw. will ich das tun :)

Was ist denn dein LiFePo Island Projekt? Klingt auch interessant. Kann man da von dem Quelltext vielleciht auch ein paar Befehle übernehmen / implementieren?

Bei der Influx werde ich mal rumprobieren. Das scheine ich auch hinzubekommen. Wird aber bestimmt erst Ende September, da ich jetzt viel mit der Arbeit eingebunden bin.

joba-1 commented 2 weeks ago

mit Pzems hab ich noch nie was gemacht. Da die recht beliebt sind gibt es sicher viele die da besser helfen können. Für mich war das aber auch der erste Kontakt mit dem ESmart und dem BMS - insgesamt ist das alles machbar. Etwas Grundlagen von C lernen wär aber sicher hilfreich. Zeichenketten und Zeiger/Adressen sind schon etwas speziell wenn man sonst nur BASIC kennt.

zum https://github.com/joba-1/LiFePO_Island

ChrisT7912 commented 2 weeks ago

Dann noch eine Frage. Kann man Deinen Code um folgendes Platform IO Projekt https://github.com/mplattu/signalk-pzem017 erweitern? Es müsste doch sicherlich nur eon Copy Paste sein und einige Parameter müssten geändert werden je nach Konfoguration des PZEM (Also z.B. setzen als Gerät 2) Oder denke ich zu einfach?

joba-1 commented 2 weeks ago

ja, ich denk schon, das würde funktionieren die modbus Teile zu kopieren und etwas anzupassen

ChrisT7912 commented 1 week ago

kann ich Dich im Sinne einer buy me a coffee Aktion zu einem Support "überreden"? Würde das Projekt gern mit Deiner Hilfe noch etwas voranbringen. Vielleicht helfen wir dann ja noch anderen Nutzern damit :-)

joba-1 commented 1 week ago

Sorry, aber es macht keinen Sinn für ein Gerät zu entwickeln, das man nicht hat und auch nicht braucht. Dafür ist meine Todo Liste zu lang.

ChrisT7912 commented 1 week ago

Das verstehe ich natürlich - mir ging es auch in erster Linie nur darum, überschüssigen Code (z.B. für die WLAN Verbindung) zu identifizeren und zu eliminieren...

Ich habe mal die Tage in der wenigen Zeit, die ich hatte mit MQTT rumgespielt. So wie ich dich verstanden hatte, muss ich und der ini Datei den Server "jobs4" durch meinen ersetzen, korrekt? Also z.B. 192.168.4.177 oder muss der noch anders angesprochen werden? Benötige ich dann noch einer User / Password oder kann ich den frei ansprechen? Was ich auch noch nicht verstanden habe, weil das bei Tasmota und dem Sonoff Adapter problemlos funktioniert, ist bei mir das Feld "Subscripe pattern" Topics abonnieren. (Durch Komma getrennt, z. B. 'mqtt/0/#,javascript/#') was muss ich da eintragen? Ich hatte die Hoffnung ich sehe das in der ini / cpp Datei aber nichts gesehen, was ich mir vorstellen könnte...

ChrisT7912 commented 3 days ago

Hi Joba, ich muss Dich nochmal wegen dem MQTT fragen. Ich habe dem jetzt die lokale IP meines Iobrokers auf dem ein MQTT Broker läuft zugeweisen und den Port in der platformio.ini geändert. Er scheint aber nicht erreichbar zu sein. hjast Du noch eine Idee?

Mir ist aber aufgefallen, dass er beim Kompilieren Warnungen aus der main.cpp in den Zeilen 151,221,297, 370, 447, 522 und 589 ausgibt. (Warning: comparison of integer expressions of different signedness: 'int' and 'size_t' {aka 'unsigned int'} [-Wsign-compare] return len < maxlen;

Auch inn zwei anderen Dateien gibt's Warnungen. Ich habe Dir die mal im Anhang eingefügt. Könnte das die Ursache sein?

Danke und Gruß ChrisT Screenshot 2024-09-11 175602

joba-1 commented 3 days ago

Hi Chris,

die Warnungen sind alle harmlos und sicher nicht die Ursache.

Hast du den Port wegen SSL Verschlüsselung geändert? Dafür müsste man vermutlich mehr tun (Zertifikate, Keys und Crypto Libs). Ich verwende dafür keine Verschlüsselung.

P.S. für Logs bevorzuge ich Text (als <> Code markiert)

ChrisT7912 commented 3 days ago

Hi Joba,

ich habe den Port mal geändert, weil einer der MQTT Broker gemeckert hatte wegen dem Port (bereits vergeben an meinen Sonoff Adapter), hatte aber vorher auch mit 1883 getestet.

Folgenden Code in der platformio.ini habe ich geändert:

<[mqtt] server = 123.123.123.1 port = 1883>

Die IP ist nur exemplarisch. Sind ggf. noch weitere Anpassungen notwendig?

joba-1 commented 3 days ago

es gibt mehrere Broker? Gibt eigentlich immer nur einen, und alle Clients verbinden sich über den.

Aber für die Verbindung ist das nicht entscheidend. Die sollte auch so funktionieren.

Ist die IP des Brokers im selben Subnetz wie die des ESPs? Was sagt die Ausgabe des ESP beim Start? Was steht in den Broker Logs? Hast du den Broker so konfiguriert, dass eine Authentifizierung nötig ist?

Ohne Logs und Konfigurationsdateien ist eine richtige Fehlersuche nicht möglich.

ChrisT7912 commented 3 days ago

Jaein, da es nicht funktioniert habe ich diverse Adapter im iobroker getestet. Nutze immer nur einen. Den Port habe ich auch wieder auf 1883 gesetzt und die firmwae.bin über das Update eingespielt. Ergebnis bleibt gleich.

Ja die IP befindet sich im selben Subnet. Was meinst Du mit Ausgabe des ESP beim Start? Wo finde ich diese? Im Webinterface zeigt er unter Log nur das Gerätelog an (logisch). Eine Authenifizierung habe ich nicht eingerichtet. Was mir noch eingefallen ist, ist dass wo als Server noch jobs4 stand ich diese Anzeige auch kurzzeitig mal im Iobroker hatte bei dem

Für den MQTT Broker habe ich Dir mal meine Konfig als Bild angefügt (gibt es leider nicht als Log) Bildschirmfoto vom 2024-09-12 11-25-15

Also der Broker scheint zu funktionieren. Ich habe gerade mal den sonoff Adapter angehalten und er hat sich alle Topics der Tasmotageräte gezogen.

Ich würde Dir gern noch ehr an logs und co senden, wüßte aber nciht wie :-(

joba-1 commented 2 days ago

Ich kenn den IOBroker nicht. Aber die Konfig sieht so aus, als würde sie nichts blocken (kein SSL, Zugriff von überall, keine Useranmeldung). Seltsam, dass der keine Logs schreibt? Meldungen wie "Da hat einer versucht sich mit IP x.y.z.w anzumelden, aber ich hab abgelehnt weil..." würd ich bei jedem Serverprogramm erwarten. So bleibt nur die Client Seite: Da kann man am ESP die serielle Schnittstelle mit einem Terminal mitlesen (z.B. über das Steckersymbol in der VSCode Platformio Extension). Alternativ schreib ich noch alles in ein Syslog - aber das geht natürlich erst wenn die Netzwerkverbindung schon steht und manches sieht man dann eben nie.

ChrisT7912 commented 2 days ago

Guten Abend Joba,

ich habe es mal mit dem seriellen Monitor probiert. Sowohl in meiner VM als auch über einen normalen PC. Ich bekomme mit allen Tools (VS Code - Steckersymbol, Arduino, ESP-Flasher, Tasmat-Flasher) keine Informationen. Ich bekomme immer den selben Error wie auf den beigefügten Bildern... Bin ratlos.

Screenshot 2024-09-12 202003 Screenshot 2024-09-12 204547

Was mir nur vorhin durch Zufall aufgefallen ist, dass ich massive Inputs von der IP des ESP8266 in mein Pihole bekomme. Ich schiebe das mal auf die Influx Schnittstelle.

Denkst Du es ist ein Hardwaredefekt oder liegts doch am Code?

joba-1 commented 2 days ago

es liegt definitiv (auch?) am Code.

was ich sehe ist die Ausgabe der erfolgreichen Verbindung zum WLAN gefolgt von Fehlern bei der Abfrage des ESmart3s. War der nicht angeschlossen?

Der Code, den du verwendest (Monitor) hat Mqtt noch garnicht eingebaut (https://github.com/joba-1/Joba_ESmart3/blob/4d89df062dcf1a0cf39d1f2eaadeffe2a80aaf76/examples/Monitor_ESmart3/src/main.cpp#L262) Die Daten landen „nur“ in der seriellen Console, auf der Webpage und in der Influxdb wo man sie z.B. mit Grafana für hübsche Diagramme holen kann.

Wenn du MQTT brauchst, dann müsstest du wohl zum https://github.com/joba-1/LiFePO_Island wechseln und ggf. den Code bezüglich meinem BMS deaktivieren (d.h. alles mit der Variable jbdbms).

ChrisT7912 commented 2 days ago

Dann haben wir das Problem ja schon identifiziert :-) Zum Testen hatte ich den Wandler nicht dran aber wenn der ohnehin kein MQTT konnte, war das ja auch egal.

Ich habe jetzt mal den LiFePo Island installiert und auch imho Ports (COM3) und die env für den D1 Mini aktiviert, jedoch gibt es jetzt beim Kompilieren irgendwelche Meldungen, dass es mit dem EEPROM Probleme gibt. Ich schicke Dir mal den Log. Vielleicht siehst Du was ich meine. Habe jetzt auch mal ESP32 geordert aber auf dem ESP8266 das Ding zum Laufen zu bekommen, wäre cool :)

Screenshot 2024-09-13 124208

joba-1 commented 2 days ago

das sieht nach einem typischen 8266/32 Kompatibilätsproblem aus. Mir wär/war das Fehlersuchen damals zu aufwändig ohne echten Usecase wegen 2€…

ChrisT7912 commented 1 day ago

Guten Morgen Joba, habe jetzt die ESP32 Version geflasht und es sieht auch gut aus. Ich bekomme eine Menge Dinge über die Konsole angezeigt in VS Code.

Nun aber nochmal zwei Fragen dazu 1) Er baut ein WIFI auf mit lifepo_island-1. Ich finde aber kein Passwort um es zu verbinden. Die Adresse scheint die Standartversion mit 192.168.4.1 zu sein 2) Welche PINS hast Du standardmäßig für den RS Wandler ausgewählt?

Danke in Advance :)

joba-1 commented 1 day ago

Frage 1: weiß ich nicht mehr. Ich setze kein Passwort, also ist es der Default des Wlan Managers (ich vermute der hostname oder leer). Wenn nicht -> dort in der Doku nachlesen.

Frage 2: https://github.com/joba-1/LiFePO_Island/blob/444648908f0b8884deb51e223f5a4380f551b645/src/main.cpp#L51

ChrisT7912 commented 1 day ago

Dein Tip mit PW = SSID hat's gelöst :-)