Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nutzung aller 1-3 Temperatursensoren des AC Thor 9s zur Ermittlung des SOC #18292

Open
walburgf opened this issue Jan 19, 2025 · 13 comments
Open
Labels
devices Specific device support

Comments

@walburgf
Copy link

Is your feature request related to a problem? Please describe.
Der AC Thor 9s kann bis zu 3 Heizstäbe mit bis zu 3 Temperaturfühler im Speicher haben (oben, mitte, unten). Die derzeitige Implementierung unterstütut nur einen Temperatursensor und stoppt das Laden, wenn dieser Temperatursensor das Limit erreicht hat. jedoch die unteren Heizstäbe noch heizen könnten, weil das Limit der anderen Sensoren noch nicht errecht ist. Deshalb sollten alle Temperaturen im SOC von evcc berücksichtigt werden.

Describe the solution you'd like
Der SOC sollte der Mittelwert der Temperatursensoren sein.

Describe alternatives you've considered
Alternative wäre, wenn evcc alle bis zu 3 Temperatursensoren einzeln berücksichtigen würde. Das ist jedoch nicht notwendig, da die Berücksichtigung des Mittelwertes ausreichend ist.

Additional context
Ich habe mal versucht die Lösung in Go zu schreiben (auch wenn ich kein ausgewiesener Go Spezialist bin. Man müsste die Datei mypv.go in etwa wie folgt ergänzen:

type MyPv struct {
	log     *util.Logger
	conn    *modbus.Connection
	power   uint32
	statusC uint16
	enabled bool
}

const (
	elwaRegSetPower  = 1000
	elwaRegTemp1     = 1001
	thorRegTemp2     = 1030
	thorRegTemp3     = 1031
	elwaRegTempLimit = 1002
	elwaRegStatus    = 1003
	elwaRegPower     = 1000 // https://github.com/evcc-io/evcc/issues/18020#issuecomment-2585300804
)


// CurrentPower implements the api.Meter interface
func (wb *MyPv) Soc() (float64, error) {

    temps := []uint16{}
    registers := []uint16{elwaRegTemp1, thorRegTemp2, thorRegTemp3}

    for _, reg := range registers {
        b, err := wb.conn.ReadHoldingRegisters(reg, 1)
        if err != nil {
            return 0, err
        }
        temp := binary.BigEndian.Uint16(b)
        if temp != 0 {
            temps = append(temps, temp)
        }
    }

    if len(temps) == 0 {
        return 0, fmt.Errorf("no valid temperature readings")
    }

    sum := 0
    for _, temp := range temps {
        sum += int(temp)
    }
    average := float64(sum) / float64(len(temps))

    return average / 10, nil
}

@andig
Copy link
Member

andig commented Jan 19, 2025

Es ist nicht vorgesehen, das umzusetzen. Die Abschaltung kann auch über die Steuerung des Thor erfolgen?

@andig andig added the wontfix This will not be worked on label Jan 19, 2025
@walburgf
Copy link
Author

da die Steuerung durch evcc erfolgt, wird die Heizung abgeschaltet, sobald evcc keine Leistung mehr vorgibt. Da evcc den 1. Temperatursensor (das ist der Sensor im oberen Teil des Speichers) als Steuerungsgröße nimmt, schaltet der Sensor ab, sobald die maximale eingestellt Temperatur des Sensors erreicht ist (z.B. 60°C). Wenn der 2. Sensor aber noch bei 50°C ist, würde der AC Thor den 2. Heizstab noch heizen, wenn er von evcc eine Leistungsvorgabe hätte. Da evcc aber dann 0W vorgibt, heizt auch der AC Thor nicht mehr.
Insofern wird das ohne evcc Unterstützung nicht funktionieren...

Was spricht denn gegen die Implementierung? Es ist ja nur eine kleine Änderung? Und sie ist auch nicht "schädlich" für alle diejenigen, die "nur" einen Sensor haben.....

@andig
Copy link
Member

andig commented Jan 19, 2025

Ja- aber es zwingt dich ja niemand, 60° einzustellen. Warum nicht bei 100° lassen? Gerade bei den SG Ready Chargern macht das auch keinen Sinn da die Heizung per Hysterese ohnehin über den Wert drüber geht.

Und sie ist auch nicht "schädlich" für alle diejenigen, die "nur" einen Sensor haben.....

Es ist m.E. physikalisch falsch und auch für mehrere Speicher- das Argument gabs schonmal ;).

@walburgf
Copy link
Author

Ich hab mir die My-PV Doku zum AC Thor 9s nochmals durchgelesen.
Das System ist nicht dafür gedacht mehr als einen Speicher zu heizen, sondern immer nur einen Speicher.
Dabei können 1-3 Heizstäbe verwendet werden:

Image

Am oberer Heizstab wird in der Regel Warmwasser entnommen, die anderen sind für das Heizungswasser gedacht.

Wenn man 3 x 3KW Heizstäbe hat, heizt der AC Thor 9s bei einer Vorgabe von 0-3kW den oberen Heizstab, so lange, bis die eingestellt maximale Temperatur (z.B. 60°C) erreicht ist. Danach wird der 2. Heizstab mit der Vorgabe beheizt, solange, bis auch dort die max. Temperatur erreicht ist, danach der 3. Heizstab....
Wenn mehr als 3 kW als Vorgabe kommt, wird der 1. Heizstab mit 3kW, der 2. und evtl. auch der 3. Heizstab dann mit dem Rest beheizt.
Wenn man die max. Temperatur auf z.B. 100°C stellt, dauert es viel länger bis der 2. und 3. Heizstab verwendet wird, da der 1. Heizstab ja damit beschäftigt ist, die 100°C zu erreichen.
Gerade in Zeiten, wo es genügend Sonne gibt, aber noch geheizt werden muss, ist diese Art der energetischen Optimierung besser, als das Warmwasser auf 100°C zu heizen und dann erst das Heizungswasser zu erhitzen.

Dein Argument bzgl. SG Ready verstehe ich nicht, da der AC Thor ja kein SG Ready Charger ist?

@andig
Copy link
Member

andig commented Jan 19, 2025

Wenn man die max. Temperatur auf z.B. 100°C stellt, dauert es viel länger bis der 2. und 3. Heizstab verwendet wird, da der 1. Heizstab ja damit beschäftigt ist, die 100°C zu erreichen.

Das mag sein hat aber mit evcc nichts zu tun- denn das steuert der Thor.

@walburgf
Copy link
Author

walburgf commented Jan 19, 2025

nein, das steuert nicht der Thor.... die Leistungsvorgabe kommt von evcc und die max. Temperatur wird durch den Benutzer manuell eingestellt.....
Aber selbst wenn man die max Temp. auf 100°C einstellt, schaltet evcc die Beheizung beim Erreichen der Max. Temp die Leistung auf 0W und der 2. und 3. Heizstab werden nicht mehr beheizt, obwohl dort die max. Temp noch nicht erreicht ist....

Der AC Thor geht ganz simpel vor:

  • Zuweisung der Leistungs zunächst an Heizstab 1 (oben).
  • Wenn mehr als 3kW vorgegeben werden, wird der Rest an Heizstab 2 oder evtl. Heizstab 3 gegeben.
  • Wenn die max. Temp an Heizstab 1 erreicht ist, gibt der Thor keine Leistung mehr an Heizstab 1 sondern an Heizstab 2 und 3.
  • wenn die max. Temp dann an Heizstab 2 erreicht ist, gibt der Thor die Leistung an Heizstab 3

@andig
Copy link
Member

andig commented Jan 19, 2025

und die max. Temperatur wird durch den Benutzer manuell eingestellt.....

...und auf die reagiert der Thor.

Aber selbst wenn man die max Temp. auf 100°C einstellt, schaltet evcc die Beheizung beim Erreichen der Max. Temp die

...aber nur weil 100°C der Höchstwert der Skala ist. Dann würde ich vorschlagen den Sensor auswählbar zu machen.

@walburgf
Copy link
Author

den Sensor auswählbar machen wäre auch ok, dann könnte ich z.B. den 2. Sensor auswählen (in meinen Fall habe ich ja "nur" 2 Sensoren...

Oder: Wäre es auch möglich den SOC in der evcc.yaml zu definieren? Dann könnte man eine eigene Definition des SOC machen.


  soc:
    source: http
    uri: http://<ip des Thor>/data.jsn
    method: GET # default HTTP method
    headers:
      - content-type: application/json
    jq: "[.temp1, .temp2, .temp3] | map(. | select (. != null)) | add / length" # parse response json, get the median temperature
    scale: 0.1 # floating point factor applied to result, e.g. for kW to W conversion
    timeout: 10s # timeout in golang duration format, see https://golang.org/pkg/time/#ParseDuration

Wenn es keine Definition in evcc.yaml gibt, nimmst DU dann die Default Einstellung?

@andig
Copy link
Member

andig commented Jan 19, 2025

Kannst du als custom Charger machen.

@walburgf
Copy link
Author

walburgf commented Jan 20, 2025

ok, dann wäre es auf jeden Fall gut, wenn man den Temperatursensor (Modbus Register 1001, 1030, 1031) auswählen könnte, der als SOC verwendet wird....

@andig
Copy link
Member

andig commented Jan 20, 2025

Gerne- willst Du PR machen?

@walburgf
Copy link
Author

was muss ich da tun? hab ich noch nie gemacht?

@docolli
Copy link
Contributor

docolli commented Jan 20, 2025

Also die aktuelle Lösung in evcc ist NUR für diese Betriebsart gedacht:

AC•THOR 9s für 3-phasige Heizstäbe bis 9 kW

Image

Dann gibt es jedoch auch noch diese Betriebsart:

AC•THOR 9s auch für drei einphasige Heizstäbe

Das Bild hast du ja oben bereits gezeigt.

Zum Schluss kann der AC Thor aber auch in dieser Betriebsart genutzt werden:

AC•THOR 9s für Warmwasser und Raumheizung

Image

Wie @andig bereits ausgeführt hat, kann man die anderen Betriebsarten über einen Custom Charger realisieren. Oder besser gesagt mehrere Custom Charger / Loadpoints, die auf die jeweiligen Register von Leistung / Temperatur vom Heizkreis 1/2 bzw. 3 verweisen.

Siehe #13398

Eventuell magst du ja für jeden Heizstab einen anderen Sollwert vorgeben, bis zu dem geheizt werden soll. Dann machen getrennte Loadpoints Sinn.

Du kannst aber auch einen Pull Request (PR) einreichen, also am evcc Project gerne aktiv mitarbeiten. Das heißt, mache Dir in Github einen Fork von evcc, programmiere dort die notwendigen Änderungen in Go, beachte aber dass diese Änderungen auch für die anderen Betriebsarten (zumindest der aktuell unterstützen) funktionieren. Kompiliere evcc selbst auf deinem System, teste es und wenn du der Meinung bist, der Code ist reif, dann reiche deine Änderungen als PR ein. Wenn keine Probleme bei automatischen Tests auftreten und auch ansonsten nichts gegen den Code spricht, wird er vermutlich in evcc übernommen.

@andig andig added devices Specific device support and removed wontfix This will not be worked on labels Jan 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
devices Specific device support
Projects
None yet
Development

No branches or pull requests

3 participants