Ich weiss, ich bin spät dran. Und ja, es geht sicher weiter, nur momentan habe ich "wichtigere" Baustellen...
Beiträge von opferwurst
-
-
Huawei R4850G2 per CAN mit tasmota auslesen und steuern
Teil 3 - Olimex POE <> R4850G2 + Netzteilabschaltung + Pylontech (+ HLG)
...folgt
-
Huawei R4850G2 per CAN mit tasmota auslesen und steuern
Teil 2 - WT32-ETH1 <> R4850G2 + Netzteilabschaltung
...folgt
-
Huawei R4850G2 per CAN mit tasmota auslesen und steuern
Teil 1 - Allgemein
Teil 2 - WT32-ETH1 <> R4850G2 + Netzteilabschaltung
Teil 3 - Olimex POE <> R4850G2 + Netzteilabschaltung + Pylontech (+ HLG)
Das Huawei R4850G2 ist ein Netzteil, welches gern zum Laden von Akkus verwendet wird. Das R480G2 soll mein Meanwell HLG600-54B ersetzen.
Während sich das HLG recht einfach per PWM-Signal ansteuern liess, so muss das Huawei per CAN angesprochen werden.
Da die bestehenden Möglichkeiten mit dem Can_Sniffer per SPI nicht zum Erfolg führten hat Gerhard kurzerhand seinen SML-Treiber erweitert und dieser kann nun mit dem Huawei kommunizieren.
Hier noch einmal meinen RIESEN Dank dafür!
Hardware:
ESP: ESP32
CAN-Transceiver TJA1051-Modul (normale 5V Variante, nicht 3.3V /T3)
Ein ESP 8266 geht hier nicht, es muss zwingend ein ESP32 sein, da dieser den CAN-Controller integriert hat und man nur noch einen CAN-Transceiver benötigt. Ich nutze dafür einen TJA1051. (ein MCP2551 funktionierte nicht)
Das TJA1051-Modul wird mit 5V betrieben , somit liegt sicherlich auch der Signalpegel ebenfalls bei 5V. Und ja, die I/Os des ESPs dürfen offiziell nur mit 3.3V betrieben werden. Nach meinen Recherchen und Erfahrungen sind die I/Os 5V tolerant.
Wer dem allerdings nicht vertraut, der kann einen 3.3V Transceiver benutzen oder alternativ einen Levelshifter.
Schaltplan und Anschluss:
Den Anschluss der zwei CAN-Leitungen am Huawei und weitere Infos kann man hier entnehmen.
Software:
Die Firmware muss wieder mit dem Development branch von tasmota kompiliert werden.
Die benötigten Definitionen für die user_config_override.h:
Code
Alles anzeigen#ifndef USE_SCRIPT #define USE_SCRIPT # adds about 17k flash size, variable ram size #endif #ifdef USE_RULES #undef USE_RULES #endif #define USE_UFILESYS #define USE_SCRIPT_WEB_DISPLAY #ifndef USE_SML_M #define USE_SML_M #endif #ifndef USE_SML_CANBUS #define USE_SML_CANBUS #endif #define USE_SML_SCRIPT_CMD
Script:
Code
Alles anzeigen>D 40 ovolt=0 maxc=0 cstr="" >B =>sensor53 r >S if chg[ovolt]>0 { ; change voltage 41.5 - 58.5 cstr="908180FE0801000000"+hx(ovolt*1024) sml(1 3 cstr) } if chg[maxc]>0 { ; change max current 0-60A cstr="908180FE0801030000"+hx(maxc*20) sml(1 3 cstr) } >M 1 ; Huawei R4850G2 +1,12,C,0,3203,CAN,13,10,908040FE080000000000000000 1,1081407f0801700000UUuuUUuu@1024,Input Power,W,ipwr,1 1,1081407f0801710000UUuuUUuu@1024,Input Frequency,Hz,freq,1 1,1081407f0801780000UUuuUUuu@1024,Input Voltage,V,ivolt,1 1,1081407f0801720000UUuuUUuu@1024,Input Current,A,icurr,1 1,1081407f0801750000UUuuUUuu@1024,Output Voltage,V,ovolt,1 1,1081407f0801810000UUuuUUuu@1024,Output Current,A,ocurr,1 1,1081407f0801760000UUuuUUuu@20,Output Max Current,A,mcurr,1 1,1081407f0801800000UUuuUUuu@1024,Input Temp,C,itmp,1 1,1081407f08017f0000UUuuUUuu@1024,Output Temp,C,otmp,1 1,1081407f0801740000UUuuUUuu@1024,Efficiency,%%,eff,1 1,=so8,00000000 1,=so9,1081407f # >W <hr> nm(41.5 58.5 0.1 ovolt "Output Voltage (V): " 80 1) nm(0 60 0.1 maxc "Max Current (A): " 80 1) #
Mit dieser Minimalvariante kann man die Ausgangsspannung und die maximale Stromstärke manuell per Dropdownmenü einstellen. Eine erweiterte Funktionalität folgt im Teil 2 und 3.
Zu beachten ist, dass der ESP nach dem Netzteil starten muss, ist dies nicht der Fall muss der ESP / oder der Decoder neu gestartet werden.
Firmware zum Testen:
-
Freut mich das es funktioniert! Ich hatte im 1.Betrag ja schon geschrieben, dass die "billigen" RS232 oft einen Layoutfehler haben und deshalb nicht funktionieren.
Und gut zu wissen, dass sich auch der 5000er auslesen lässt.
-
Ich denke, libs müssen da keine "rein".
Du kannst mal von oben nach unten im Script die print Befehle auskommentieren (das Semikolon davor löschen) und die Ausgabe(n) mal posten. Da sieht man eventuell ob der Pylontech antwortet. Bitte aber vorher bitte genau die Verkabelung durchgehen, da liegt oftmals der Fehler.
-
-
Hallo Schraubi
Der RX-Pin wird im Script definiert, musst also in der WebConfig nichts einstellen (None).
Welches bin und welches Script hast Du benutzt?
Und ich habe hier nur den 2000er. Ob der 5000er die gleiche seriellen Daten bereitstellt kann ich nicht sagen.
-
Kann es sein, dass auch Deine Steuerung nicht TAB-konform ist?! Laut dieser Info darf man bei Verbrauchern mit 1000W nur 100mal pro Minute schalten (bei 1700W sogar nur 10x/min). Bei Deinen 2 Hz wäre ich mit 120 Schaltvorgängen schon bei 1000W darüber?! Macht es jetzt noch spannender für mich 😎 Ich werde die Tage mal eine Testschaltung zusammenbasteln und bin auf Zählerwerte gespannt...
Gruss ow
-
Hallo John
habe bezüglich Deiner Aussage "Sollte der saldierende Zähler besonders schnell sein (<100 ms) , stößt das Konzept jedoch an seine Grenzen." noch kurz gesucht und für zwei Hersteller folgendes gefunden:
Moderne digitale Energiezähler (konkret neuste Generation von z.B. Landis&Gyr) haben ein Samplinginterval von 100 ms.
EasyMeter Drehstromzähler der Reihen Q3A, Q3M oder T3M ermittelt die Energie in 1 Sek (1000 ms) Intervallen. Die Energiemesswerte der Einzelphasen werden dabei miteinander verrechnet (saldierender Zähler), das Gesamtergebnis dann je nach Vorzeichen auf die zugehörigen Energieregister inkrementiert.
Die interne Abtastrate der ADCs liegt bei 500kHz um auch nicht-sinusförmige Messgrößen bis über 150kHz sicher und richtig erfassen zu können.
Ich habe übrigens einen von Easymeter. Was meinst Du, sind die schneller als 100ms....?
Hier auch mal eine Grafik von heute Vormittag meiner derzeitigen Überschussverwertung mit Ladestrom vom Akku, Dimmlevel (wird in pwm umgerechnet) und Hauptstromzähler. Wie sieht das bei Dir aus, hast Du weniger "Zacken"?
Gruss ow
-
Hallo John
Dank für den Link.
Ich definiere PWM direkt im Script, da ich mehrere PWM-Channels des ESP32 nutze.
pwmN(-pin freq) = defines a pwm channel N (1..N) with pin Nr and frequency (pin 0 being -64, N=5 with esp8266 and N=8 with esp32)
pwmN(val) = outputs a pwm signal on channel N (1..N) with val (0-1023)
Momentan steuere ich meine Überschussverbraucher (Akku und Heizer) mit einer 2-Punkt Regelung welche halt immer etwas schwingt. Für mich aber in einem kleinen und vertretbaren Bereich. Daher hier meine letzte Anfrage, wie Du das mit der 3Punkt-Regelung umgesetzt hast.
Gruss ow
-
Moin John
Ja das Thema Phasenanschnitt... Zum einen konnte ich das in meinen TABs nicht finden, zum anderen waren auch mal Balkonkraftwerke verboten...
Aber Deine Wellenpaketsteuerung würde ich gern einmal an meinem Zähler testen. Welches SSR nutz Du hierfür? (Bezugsquelle). Kann ja wahrscheinlich jedes China-SSR mit Nulldurchgang sein, z.B. das 25 DA
Würdest Du mir neben der allgemeinen WIKI-Erklärung eines 3p-Regler auch die Umsetzung in Deinem Script offenbaren?
Gruss ow
-
Hallo John
Besten Dank für die Infos. Gehe ich recht in der Annahme, dass Du die Leistung per Wellenpaketsteuerung begrenzt?! Ich hatte dies auch mal mit einem Chiemtronic Leistungssteller (Wellenpaketsteuerung) vor, allerdings sollte man dann folgendes beachten:
Bei Schwingungspaket werden immer volle Sinusschwingungen an die Last gelegt und somit auch der volle Nennstrom gezogen!
Lies mal hier die Kommentare durch, dort hat auch jemand mit Wellenpaket geregelt und dann festgestellt, dass er trotzdem aus dem Netz zieht:
ZitatIch habe bei mir einen Test am Laufen mit einem Halbleiterrelais mit Schaltpunkt im Nulldurchgang das von einem PWM-Signal angesteuert wird.
Für mein Verständnis verhält sich ein Halbleiterrelais genau gleich wie ein Thyristorsteller mit Halbwellensteuerung (Wellenpaketsteuerung).
Zur Kontrolle erfasse ich die Ströme von der PV-Anlage und vom EW und zeichne diese in einem Trenddiagramm auf.
Wichtig bei der Messung ist, dass die Abtastzeit der Trendaufzeichnung genügend performant ist, ich erfasse alle 100ms einen Messwert.
In der Trenddarstellung ist eindeutig zu sehen, dass bei jedem Schaltpunkt der fehlende Strom vom EW bezogen wird.
Ich bin daher auf eine Phasenanschnittsteuerung gewechselt.
Und kannst Du die 3-Punktregelung mal genauer vorstellen?
Gruss ow
-
-
Hallo Lexton90
Kannst Du einen Fehler in der Verkabelung ausschliessen? Bei mir war dies immer der Fehler für keine Daten. Vielleicht mal RX un TX am Pylontech/RS232 tauschen.
Weiterhin sind im Script noch diverse print-Befehle aus kommentiert, diese eventuell von oben nach unten mal probeweise aus kommentieren und in der Konsole schauen was dann ausgegeben wird.
Gruss ow
-
Hallo Patrick
Bei mir läuft auch ein alter Q3DA1002 mit diesem Einstellung:
1,1-0:1.8.0*255(@1,Verbrauch,KWh,Total_in,2
1,1-0:21.7.255*255(@1,Verbrauch P1,W,Power_p1,2
1,1-0:41.7.255*255(@1,Verbrauch P2,W,Power_p2,2
1,1-0:61.7.255*255(@1,Verbrauch P3,W,Power_p3,2
1,1-0:1.7.255*255(@1,Aktueller Verbrauch,W,Power_curr,2
-
Hallo BananaJoeX
Lade 1 : Laderrelais ist an
Lade 0: Laderrelais ist aus
Selbiges dann auch beim Entladerelais...
Die Steuerung der Relais ist erst im Beitrag 2 im Script ergänzt worden, oder welche Angaben meinst Du?
-
Hier mal ausgedünnt auf das Wesentliche:
Stromzähler: ("Sender")
Code
Alles anzeigen>D 25 curr=0 g:pcurr=0 ; Globale Variable (write) >B =>sensor53 r >T curr=SML#Power_curr pcurr=0-SML#Power_curr ; curr negiert > dadurch bei Überschuss Wert positiv >M 1 +1,3,s,0,9600,SML ; Beispieldefinition für Easymeter Q3B ggf anpassen 1,77070100010700ff@1,Momentanleistung,W,Power_curr,0 #
und "Empfänger":
Code
Alles anzeigen>D 25 g:pcurr=0 ;globale Variable (read) >S ; Verwendung der Variable für if pcurr>0 then mache irgendwas... endif >W ;webdisplay ------------------------- Überschuss(+): {m}%pcurr% ------------------------- #
Ich lasse zusätzlich gleich im Sende-ESP den Überschuss in ein PMW-Level umrechnen und diesen per Globaler Variable ebenfalls versenden. Ich weiss aber nicht ob Deine Verbraucher das benötigen, Du willst wahrscheinlich nur etwas schalten.
Hinweis: Die globalen Variablen laufen über UDP. UDP ist wie ein Rundfunk Sender es wird gesendet aber man weis nicht sicher ob es ankommt.
Ich habe aber bisher keine nennenswerte Aussetzer registriert.
-
Vielleicht wären Globale Variablen was für Dich anstatt Websend.
Ich übermittle Werte unter verschiedenen ESPs mit Globalen Variablen. Mein Stromzähler-ESP liesst den Zähler aus und sendet den Momentanverbrauch an ein Display in der Küche und an zwei Überschussverbraucher.
-
Ich denke mal schon. Aber wie gesagt, DC-seitig kenne ich mich nicht so aus, da ist das PVF sicher die bessere Adresse für solche Fragen. Viel Erfolg!