Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Shelly: Code cleansing and measure logic optimization following installation standards#18841

Open
thierolm wants to merge37 commits intoevcc-io:master
base:master
Choose a base branch
Loading
fromthierolm:shelly/enable_power_direction_awareness

Conversation

thierolm
Copy link
Contributor

@thierolmthierolm commentedFeb 15, 2025
edited
Loading

  • Code cleansing following the Shelly API documentation
  • Gen2 API: use specific method endpoints instead of complete device status endpoint
  • Enabling response caching
  • Enabling of Gen4 devices
  • The measure logic now follows installation standards and considers usage context.

Refer to discussion#18824

@andig
Copy link
Member

Brauchts das denn wirklich? Warum kann man bei einer Installation mit falscher Richtung nicht einfach die Sensoren drehen? Sind die wirklich hart montiert? Alternativ: wäre ein „invert“ oder „scale“ evtl. ein besserer Parameter?

@andigandig added the devicesSpecific device support labelFeb 16, 2025
Copy link
ContributorAuthor

@thierolmthierolm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Mein Gedanke hinter dem Parameter war, dass bestehende Konfigurationen von evcc Shelly Nutzern nichts ändern müssen. Bei invert oder scale könnten Teile Probleme bekommen, da es dann darauf ankäme wie die Messzange montiert ist. Können es aber gerne invert nennen, den Wert dann mit -1 multiplizieren und als breaking Change markieren.

@thierolmthierolm changed the titleShelly: add IgnorePowerDirection parameterShelly: add invert parameterFeb 16, 2025
@premultiply
Copy link
Member

Bei den Energiezählern ändert sich nicht das Vorzeichen aber das Zählregister (Import vs. Export).

@andig
Copy link
Member

Die Zange ist doch schnell gedreht, oder? Ich würde unterstellen, dass ein Grossteil der Anwender es i.S. Der App installiert hat.

thierolm reacted with thumbs up emoji

@thierolm
Copy link
ContributorAuthor

@premultiply der PR adressiert nur den Power Messwertact_power.

Für TotalEnergy der Energiezähler bilde ich die Differenz der beiden Zählregistertotal_act_energy undtotal_act_ret_energy.

switchd.channel {
case1:
energy=res.Switch1.Aenergy.Total+res.Pm1.Aenergy.Total+resem.Em1Data.TotalActEnergy-resem.Em1Data.TotalActRetEnergy
case2:
energy=res.Switch2.Aenergy.Total+res.Pm2.Aenergy.Total+resem.Em2Data.TotalActEnergy-resem.Em2Data.TotalActRetEnergy
default:
energy=res.Switch0.Aenergy.Total+res.Pm0.Aenergy.Total+resem.Em0Data.TotalActEnergy-resem.Em0Data.TotalActRetEnergy

Mein Ziel war möglichst viele Shelly Typen zu unterstützen.

@premultiply
Copy link
Member

Oha. Das sollten wir dann aber auch noch ändern.
Ich verstehe deine Intension aber es darf hier nur ein definiertes Zählregister pro Richtung verwendet werden. Sonst stimmen die Energiemengen im Gesamtsystem nicht mehr.
Differenzbildung ist definitiv falsch.
Normalerweise Lösen wir die Zuordnung jeweils überusage.

@mucki12
Copy link
Contributor

Also alle die ich kenne und die einen Shelly EM zB auch in anderen HEMS Systemen nutzen, klemmen die Zange idR so an, dass der Wert beim Zielsystem korrekt ist (also selbstverständlich ein positiver Wert für den Ertrag).

Aber wie schon mal an anderer Stelle geschrieben, passe mich da gerne der Allgemeinheit an und klemme die Zange auch falsch herum an. Hauptsache es werden nicht positive und negative Werte als PV-Ertrag gewertet :-)

@thierolm
Copy link
ContributorAuthor

Normalerweise Lösen wir die Zuordnung jeweils überusage.

@premultiply hast du ein Beispiel irgendwo im Code, das ich mir anschauen kann?

@premultiply
Copy link
Member

@thierolm
Copy link
ContributorAuthor

thierolm commentedFeb 16, 2025
edited
Loading

Ok, schau ich mir an. Würde dann aber nicht den ganzen Shelly Code in eine Custom Meter Umsetzung migrieren, sondern usage als Parameter mitnehmen und dann entsprechend im go Code eine Fallunterscheidung machen.
Beim Einsatz mitusage =grid, müsste ich aber dann immer noch entscheiden, was ich nehme, oder?
Macht der Einsatz eines einphasigen EM Shellies alsgrid überhaupt Sinn?

Und die es wird immer noch das Problem bleiben, dass die Messung vom Einsatz Mess-Zange abhängig ist.

@premultiply
Copy link
Member

Also alle die ich kenne und die einen Shelly EM zB auch in anderen HEMS Systemen nutzen, klemmen die Zange idR so an, dass der Wert beim Zielsystem korrekt ist (also selbstverständlich ein positiver Wert für den Ertrag).

Das ist leider nicht immer so ganz einfach, denn da gibt es mindestens zwei unterschiedliche Sichtweisen.

Im Elektrobereich werden separate Zähler genormt immer so verbaut, dass aus Sicht des Anschlusses zum übergeordneten Netz als definierte Wurzel der Verbrauch positiv (A+) und die Einspeisung negativ (A-) erfasst wird. Das ist völlig eindeutig.

Die Erwartungshaltung des Normalanwenders ist jedoch häufig abweichend und eher aus der Hauptfunktion des jeweiligen Systems betrachtet.
Dazu kommen noch Nischenfälle wo dem Anwender nicht klar ist, dass z.B. ein PV-WR teilweise erheblichen Netzbezug durch eigenverbrauch generieren kann, den man trotzdem nicht einfach ignorieren wenn eine Abrechnung oder Statistik halbwegs korrekt sein soll.

@mucki12
Copy link
Contributor

Die Erwartungshaltung des Normalanwenders ist jedoch häufig abweichend und eher aus der Hauptfunktion des jeweiligen Systems betrachtet. Dazu kommen noch Nischenfälle wo dem Anwender nicht klar ist, dass z.B. ein PV-WR teilweise erheblichen Netzbezug durch eigenverbrauch generieren kann, den man trotzdem nicht einfach ignorieren wenn eine Abrechnung oder Statistik halbwegs korrekt sein soll.

Wie gesagt, passe mich da gerne an wie es für evcc am besten passt. Notfalls drehe ich die Werte halt in meinem HEMS.

Aber genau wegen dem was du geschrieben hast (Eigenverbrauch des Erzeugers) habe ich den Shelly ja als custom meter umgesetzt.

@thierolm
Copy link
ContributorAuthor

@mucki12 +@premultiply ich switch mal aus dem PR hier zurück in unsere Diskussion. Diskutiert ihr bitte dort mit mir weiter. Habe Fragen. :-)

@thierolm
Copy link
ContributorAuthor

@premultiply +@andig können wir nicht diesen PR von der neuen Diskussion bezüglich der korrekten Abbildung der TotalEnergy abkoppeln und mergen? Mit dem invert Parameter ist jeder Nutzer in der Lage den Power Wert entsprechend seines UseCases zu ändern.

@andig
Copy link
Member

Energy ist ein anderes Thema. Ich vermisse hier aber die Entscheiden, das per BC einfachimmer beim EM zu invertieren. Falls der sich die Implementierung teil würde ich zu scale statt invert tendieren.

@premultiply
Copy link
Member

Können wir schon, gehört aber andererseits auch zusammen.

@andig
Copy link
Member

Alles gehört zusammen. Kann man trotzdem schön einzeln lösen und die diffs klein halten. Macht auch die Fehlersuche viel einfacher (auch wenns hier nicht relevant ist).

@thierolmthierolm changed the titleShelly: add invert parameterShelly: Standardize measure logic + invert parameterFeb 16, 2025
@thierolm
Copy link
ContributorAuthor

Bitte nicht mergen! Bin am Testen ...

@thierolm
Copy link
ContributorAuthor

thierolm commentedFeb 16, 2025
edited
Loading

Sieht jetzt m.E. gut aus. Die Shellies liefern jetzt wie von@premultiply empfohlen abhängig von derusage folgende Rückgabewert-Zuordnungen bzw. Vorzeichen:

  • pv oder battery: power: *-1, energy: total_returned
  • alle anderen: power: *1, energy: total

Für alle Nutzer, die ihre Shellies falsch/verdreht angeschlossen haben, bieten wir dieinvert Option, die einfach die Auslese-Logik umdreht. Imho passtinvert besser alsscale, weilscale ja suggeriert, dass man auch noch an den Werten drehen kann ...

@andigandig marked this pull request as draftFebruary 17, 2025 07:41
@andig
Copy link
Member

Ich habs nochmal durch geschaut. Es ist unglücklich, dass wir die usage (Logik) jetzt in Connection (Technik) mit drin haben. Schöner wäre es, die Usage auf Ebene des Meter/Chargers zu halten und bei Bedarf ein anderes API der Connection aufzurufen.

@thierolm
Copy link
ContributorAuthor

OK, verstehe, dann baue ich es entsprechend um.
BC wäre dann die mögliche Änderung des Powervorzeichens und der Energywerte, je nach individuellem/r Einsatz/Installation.

@thierolm
Copy link
ContributorAuthor

@andig +@premultiply: Um die Sonderimplementierung des ShellyEnergyMeters zurückbauen zu können, habe ich die Funktionen für die PhaseVoltages, PhaseCurrents und PhasePowers in das Shelly Meter integriert.
In der aktuellen Version würde bei negativen Power werten diese auch negativ bei den Phasen Powers ausgegeben.

Frage: Sind negative Werte für die PhasePowers API erlaubt, oder muss ich sicherstellen, dass es positive Werte sind?

Beispiel:

shelly-pro-em-50-0-pv---------------------Power:          332WEnergy:         144.8kWhCurrent L1..L3: 1.47A 0A 0AVoltage L1..L3: 227V 0V 0VPower L1..L3:   -332W 0W 0W

@premultiply
Copy link
Member

Negative Stromwerte sind sogar bevorzugt. 🙂

@thierolm
Copy link
ContributorAuthor

@andig ich werde aus dem integration test Fehler nicht schlau. Hast du eine Idee was die timeouts auslösen könnte?

@thierolmthierolm changed the titleShelly: usage dependent measure logic following installation standardsShelly: Code review and measure logic optimization following installation standardsApr 1, 2025
@thierolmthierolm changed the titleShelly: Code review and measure logic optimization following installation standardsShelly: Code cleansing and measure logic optimization following installation standardsApr 1, 2025
@thierolm
Copy link
ContributorAuthor

thierolm commentedApr 1, 2025
edited
Loading

Hallo@andig , ich hab die ganze historisch nicht nur durch mich gewachsene Shelly Codebasis mal konsolidiert. Die Wartung und Pflege sollte jetzt wesentlich einfacher sein.
Getestet habe ich alles mit den mir zur Verfügung stehenden gen1, gen2 + gen3 Devices und den mir zur Verfügung stehenden jsons des EM 50.

Ich bräuchte nur Unterstützung beim lokalisieren des Integration Fehlers.

@thierolm
Copy link
ContributorAuthor

thierolm commentedApr 2, 2025
edited
Loading

Negative Stromwerte sind sogar bevorzugt. 🙂

@premultiply : Ok :-)

Eine Frage noch zur Sicherstellung positiver Power Werte im Falle das Einsatzes eines Shelly als PV oder Batterie Meters, was ich auf Basis deines Feedbacks eingebaut habe:
Für die PV Usage kann ich das verstehen, da eine Solaranlage Strom ja nur produzieren kann.
Eine Batterie kann aber Strom ins Hausnetz einspeisen (wie eine Solaranlage) aber auch aufnehmen.
Wäre da das Vorzeichen bei Power nicht wichtig? (oder habe ich dich bezgl. Batterie usage falsch verstanden :-) )

@Robodrill1131
Copy link

Negative Stromwerte sind sogar bevorzugt. 🙂

@premultiply : Ok :-)

Eine Frage noch zur Sicherstellung positiver Power Werte im Falle das Einsatzes eines Shelly als PV oder Batterie Meters, was ich auf Basis deines Feedbacks eingebaut habe: Für die PV Usage kann ich das verstehen, da eine Solaranlage Strom ja nur produzieren kann. Eine Batterie kann aber Strom ins Hausnetz einspeisen (wie eine Solaranlage) aber auch aufnehmen. Wäre da das Vorzeichen bei Power nicht wichtig? (oder habe ich dich bezgl. Batterie usage falsch verstanden :-) )

Habe mir gerade eine Batteriebox ( Stromspeicher) gebaut und will die Werte über ein Shelly PM mini Gen3 erfassen, leider macht mir auch hier die Vorzeichenbehandlung von evcc ein Strich durch die Rechnung und die Ladeleistung wird als entladen angezeigt, obwohl der Wert vom Shelly negativ ausgegeben wird.

@thierolm
Copy link
ContributorAuthor

@Robodrill1131: Das spricht doch dann für die Sicherstellung des positiven Powerwertes nur für die PV usage ...

@premultiply +@andig : richtig? Dann nehme ich die Vorzeichenbehandlung für battery aus der Logik raus.

@thierolm
Copy link
ContributorAuthor

@Robodrill1131 könntest du mir eine evcc trace Ausgabe deines Shelly PM mini Gen3 schicken.
Mich interessieren die json Ausgaben ...
... und gibt es im Menü des Shellys eine Option bei Bedarf das von Power Vorzeichen zu drehen?

@Robodrill1131
Copy link

@thierolm JSON Auszug mach ich mich morgen dran.
Das Vorzeichen passt bei mir, denn wenn die Batterie geladen wird soll es ja negativ sein und beim einspeisen in das Netz soll der Wert positiv sein.

thierolm reacted with thumbs up emoji

@thierolm
Copy link
ContributorAuthor

thierolm commentedApr 2, 2025
edited
Loading

@naltatis könntest du bitte bei Gelegenheit auch mal über den "Integration" Testfehler schauen?
Ich hab mir das ganze Log jetzt einmal angeschaut aber keinen Hinweis auch die Abbruchursache gefunden. Es scheint aber mit den UI Tests zu tun zu haben.
Ich komme nicht weiter. :-(

@thierolm
Copy link
ContributorAuthor

thierolm commentedApr 2, 2025
edited
Loading

Hab' das Problem im /shelly Simulator gefunden:https://github.com/thierolm/evcc/blob/1413c4bd9de34999e8c946228b2d5ea5f633634f/tests/simulator/api.js#L74
Der Status Endpoint passt nicht mehr ...

führt zu
image

@thierolm
Copy link
ContributorAuthor

Mit den UI Tests über npx playwrigth test habe ich wieder was dazu gelernt :-)
Aber ich würde sagen der PR steht zum mergen bereit.

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@andigandigandig left review comments

Assignees

@premultiplypremultiply

Labels
devicesSpecific device supportprioPriority
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

6 participants
@thierolm@andig@premultiply@mucki12@VolkerK62@Robodrill1131

[8]ページ先頭

©2009-2025 Movatter.jp