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

cli: add battery mode option #10901

Merged
merged 2 commits into from
Nov 24, 2023
Merged

cli: add battery mode option #10901

merged 2 commits into from
Nov 24, 2023

Conversation

andig
Copy link
Member

@andig andig commented Nov 24, 2023

Useful for testing batter control:

Usage:

evcc meter [name] -b normal|hold|charge

@andig andig added the enhancement New feature or request label Nov 24, 2023
@andig andig requested a review from premultiply November 24, 2023 12:25
@premultiply
Copy link
Member

/cc @VolkerK62 bzgl. Doku und Allgemeinwissen 🙂

@premultiply
Copy link
Member

Kann ich zwar mangels geeignetem Testobjekt noch nicht selbst testen, aber ja, sieht plausibel aus 👍🏼

@PeterPablo
Copy link

Wie genau sollen wir das testen? Ich meine, dass Du in einem anderen issue auch ein Tool zum Auslesen der modbus-Register (für mac/linux?) genannt hattest. Sollten wir das auch verwenden oder ist das mit der cli-Option überflüssig?

@andig andig merged commit 0e2a957 into master Nov 24, 2023
@andig andig deleted the feature/battery-cmd branch November 24, 2023 14:04
@andig
Copy link
Member Author

andig commented Nov 24, 2023

Wie genau sollen wir das testen? Ich meine, dass Du in einem anderen issue auch ein Tool zum Auslesen der modbus-Register (für mac/linux?) genannt hattest. Sollten wir das auch verwenden oder ist das mit der cli-Option überflüssig?

Der CLI Befehl erlaubt einfach gezielt einen Batteriemodus einzustellen, ggf. mit trace log, um zu schauen ob das das gewünscht Ergebnis bringt. Damit muss nicht mehr auf Fahrzeugladung oder irgendwelche anderen Laufzeitevents gewartet werden.

@cschlipf
Copy link
Contributor

cschlipf commented Nov 24, 2023

Kannst Du bitte kurz erklären, was die Optionen für eine Auswirkung haben?

  • Normal - vermutlich so wie heute?
  • Hold - ich vermute Batterie 'abschalten'?
  • Charge - Hier verstehe ich es nun nicht ganz. Hausspeicher wird geladen? Aber wie soll das funktionieren? Da braucht man ja deutlich mehr Register und Aktionen als nur die Entladetiefe zu ändern (zumindest bei SofarSolar)

@StevieC121176
Copy link

StevieC121176 commented Nov 25, 2023

Ich hab das jetzt mal ausgeführt, werde aber aus den logs nicht schlau.

evcc meter battery2 -b hold -l trace

[main  ] INFO 2023/11/25 09:28:46 evcc 0.122.1 (0e2a9578)
[main  ] INFO 2023/11/25 09:28:46 using config file: /home/pi/evcc.yaml
[db    ] INFO 2023/11/25 09:28:47 using sqlite database: /home/pi/.evcc/evcc.db
[db    ] TRACE 2023/11/25 09:28:47 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="settings" -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "settings" AND sql IS NOT NULL order by type = "table" desc 1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT * FROM `settings` LIMIT 1 -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT * FROM `settings` 0 <nil>
[mqtt  ] INFO 2023/11/25 09:28:47 connecting evcc-524952133 at tcp://192.168.178.80:1883
[mqtt  ] DEBUG 2023/11/25 09:28:47 tcp://192.168.178.80:1883 connected
[db    ] TRACE 2023/11/25 09:28:47 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="devices" -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="device_details" -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="configs" -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "configs" AND sql IS NOT NULL order by type = "table" desc 1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT * FROM `configs` LIMIT 1 -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT count(*) FROM sqlite_master WHERE type='table' AND name="config_details" -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT sql FROM sqlite_master WHERE type IN ("table","index") AND tbl_name = "config_details" AND sql IS NOT NULL order by type = "table" desc 2 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT * FROM `config_details` LIMIT 1 -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT count(*) FROM sqlite_master WHERE type = "table" AND tbl_name = "config_details" AND (sql LIKE "%CONSTRAINT \"fk_configs_details\" %" OR sql LIKE "%CONSTRAINT fk_configs_details %" OR sql LIKE "%CONSTRAINT `fk_configs_details`%" OR sql LIKE "%CONSTRAINT [fk_configs_details]%" OR sql LIKE "%CONSTRAINT 	fk_configs_details	%") -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT count(*) FROM sqlite_master WHERE type = "index" AND tbl_name = "config_details" AND name = "idx_unique" -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT count(*) FROM sqlite_master WHERE type = "table" AND tbl_name = "config_details" AND (sql LIKE "%CONSTRAINT \"fk_devices_details\" %" OR sql LIKE "%CONSTRAINT fk_devices_details %" OR sql LIKE "%CONSTRAINT `fk_devices_details`%" OR sql LIKE "%CONSTRAINT [fk_devices_details]%" OR sql LIKE "%CONSTRAINT 	fk_devices_details	%") -1 <nil>
[db    ] TRACE 2023/11/25 09:28:47 SELECT count(*) FROM sqlite_master WHERE type = "table" AND tbl_name = "config_details" AND (sql LIKE "%\"device_id\" %" OR sql LIKE "%device_id %" OR sql LIKE "%`device_id`%" OR sql LIKE "%[device_id]%" OR sql LIKE "%	device_id	%") -1 <nil>
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 01 00 00 00 06 47 03 9c 40 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 01 00 00 00 07 47 03 04 53 75 6e 53
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 02 00 00 00 06 47 03 9c 42 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 02 00 00 00 07 47 03 04 00 01 00 42
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 03 00 00 00 06 47 03 9c 86 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 03 00 00 00 07 47 03 04 00 67 00 32
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 04 00 00 00 06 47 03 9c ba 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 04 00 00 00 07 47 03 04 00 71 00 3c
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 05 00 00 00 06 47 03 9c f8 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 05 00 00 00 07 47 03 04 00 78 00 1a
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 06 00 00 00 06 47 03 9d 14 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 06 00 00 00 07 47 03 04 00 7b 00 18
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 07 00 00 00 06 47 03 9d 2e 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 07 00 00 00 07 47 03 04 00 a0 00 44
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 08 00 00 00 06 47 03 9d 74 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 08 00 00 00 07 47 03 04 03 22 00 3e
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 09 00 00 00 06 47 03 9d b4 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 09 00 00 00 07 47 03 04 ff ff 00 00
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 0a 00 00 00 06 47 03 9c 44 00 42
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 0a 00 00 00 87 47 03 84 4b 4f 53 54 41 4c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 4c 45 4e 54 49 43 4f 52 45 20 70 6c 75 73 38 2e 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 31 2e 32 39 2e 31 32 30 33 38 00 00 00 00 00 39 32 30 39 32 56 46 36 30 30 30 30 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47 5a 5a
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 0b 00 00 00 06 47 03 9c 40 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 0b 00 00 00 07 47 03 04 53 75 6e 53
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 0c 00 00 00 06 47 03 9c 42 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 0c 00 00 00 07 47 03 04 00 01 00 42
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 0d 00 00 00 06 47 03 9c 86 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 0d 00 00 00 07 47 03 04 00 67 00 32
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 0e 00 00 00 06 47 03 9c ba 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 0e 00 00 00 07 47 03 04 00 71 00 3c
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 0f 00 00 00 06 47 03 9c f8 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 0f 00 00 00 07 47 03 04 00 78 00 1a
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 10 00 00 00 06 47 03 9d 14 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 10 00 00 00 07 47 03 04 00 7b 00 18
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 11 00 00 00 06 47 03 9d 2e 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 11 00 00 00 07 47 03 04 00 a0 00 44
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 12 00 00 00 06 47 03 9d 74 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 12 00 00 00 07 47 03 04 03 22 00 3e
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 13 00 00 00 06 47 03 9d b4 00 02
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 13 00 00 00 07 47 03 04 ff ff 00 00
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 14 00 00 00 06 47 03 9c 44 00 42
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 14 00 00 00 87 47 03 84 4b 4f 53 54 41 4c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 4c 45 4e 54 49 43 4f 52 45 20 70 6c 75 73 38 2e 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 31 2e 32 39 2e 31 32 30 33 38 00 00 00 00 00 39 32 30 39 32 56 46 36 30 30 30 30 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47 5a 5a
[db    ] TRACE 2023/11/25 09:28:47 SELECT * FROM `configs` WHERE `configs`.`class` = 2 ORDER BY id 0 <nil>
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 15 00 00 00 06 47 03 9d 76 00 3e
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 15 00 00 00 7f 47 03 7c 00 18 39 08 3a 66 3a 66 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 62 00 00 00 00 00 00 00 00 00 01 00 04 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 8e 16 d0 00 00 00 21 00 00 00 00 00 20 00 00 00 00 00 00 ff e0 0a 00 0a 00 ff 54 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff fe ff fe 00 00
[modbus] TRACE 2023/11/25 09:28:47 802:0:SoC: 7
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 16 00 00 00 06 47 06 04 12 00 14
[modbus] TRACE 2023/11/25 09:28:47 modbus: recv 00 16 00 00 00 06 47 06 04 12 00 14
[modbus] TRACE 2023/11/25 09:28:47 modbus: send 00 17 00 00 00 06 47 03 9d 76 00 3e
[modbus] TRACE 2023/11/25 09:28:48 modbus: recv 00 17 00 00 00 7f 47 03 7c 00 18 39 08 3a 66 3a 66 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 62 00 00 00 00 00 00 00 00 00 01 00 04 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 8e 16 d0 00 00 00 21 00 00 00 00 00 20 00 00 00 00 00 00 ff e0 0a 00 0a 00 ff 54 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff fe ff fe 00 00
[modbus] TRACE 2023/11/25 09:28:48 802:0:W: -172
[modbus] TRACE 2023/11/25 09:28:48 modbus: send 00 18 00 00 00 06 47 03 9d 76 00 3e
[modbus] TRACE 2023/11/25 09:28:49 modbus: recv 00 18 00 00 00 7f 47 03 7c 00 18 39 08 3a 66 3a 66 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 62 00 00 00 00 00 00 00 00 00 01 00 04 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 8e 16 d0 00 00 00 21 00 00 00 00 00 20 00 00 00 00 00 00 ff e0 0a 00 0a 00 ff 54 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff fe ff fe 00 00
[modbus] TRACE 2023/11/25 09:28:49 802:0:SoC: 7
Power:    -172W
Soc:      7%
Capacity: 12.8kWh

@cschlipf
Copy link
Contributor

Zum Sofar Support:

Zunächst ist mir aufgefallen, dass das Register für die Entladungstiefe falsch ist. Siehe mein Review Kommentar bei #10847.

Nun fürchte ich jedoch, dass auch eine Korrektur nicht viel hilft. Ich habe nun mit Hilfe meiner HomeAssistant Integration versucht die Entladungstiefe zu ändern und hier wird auch das korrekte Register benutzt (siehe Source Code der Home Assistant integration: https://github.com/wills106/homeassistant-solax-modbus/blob/5730eb7e1228aae86a3886abcbf5ad5c18f3163a/custom_components/solax_modbus/plugin_sofar.py#L238). Aber leider habe ich auch damit keinen Erfolg. Ob im Self Use Mode oder im Passive Mode - ich kann da ändern wie ich es will - im Wechselrichter ändert sich der Wert einfach nicht. Irgendwas stimmt da nicht oder ich müsste noch irgendwo einen anderen Modus setzen.

Solange ich es aber nicht hinbekomme, den Wert direkt über HomeAssistant zu setzen, mach der Support in EVCC keinen Sinn. Ich empfehle daher #10847 zu reverten oder mindestens das Register zu korrigieren.

@andig
Copy link
Member Author

andig commented Nov 26, 2023

Aber leider habe ich auch damit keinen Erfolg

nochmal Anfrage an den Support probieren?

@andig
Copy link
Member Author

andig commented Nov 26, 2023

Zunächst ist mir aufgefallen, dass das Register für die Entladungstiefe falsch ist

Ist behoben

@andig andig added this to the Battery Control milestone Dec 6, 2023
@cschlipf
Copy link
Contributor

@andig - es kommt langsam Licht in die Sache, dank Photovoltaikforum.

Auch beim setzen des DoD Levels scheint Sofar mal wieder Sonderwege zu gehen, wie auch schon beim setzen anderer Werte:

https://www.photovoltaikforum.com/thread/217362-sofar-hyd-serie-kommunikation-%C3%BCber-modbus-tcp-erfahrungen/?postID=3534239#post3534239

image

D.h. für einen Sofar Support brauchen wir hier einen anderen, komplizierteren Ansatz, der eher in Richtung Scripting gehen würde. Mein Vorschlag: Nehmt den Sofar Support für Battery Control raus. Wer Battery Control mit SofarSolar realisieren will muss dass eben mit Home Assistant machen.

@andig
Copy link
Member Author

andig commented Dec 30, 2023

Die Lösung: Du musst alle 19 BatConfig Register (0x1044 - 0x1056) auf einmal setzen und dabei den Register BatConfig_Control (0x1053) auf 1 setzen.

Das mit den 19 auf einmal würde ich erstmal bedingt glauben. Den zweiten Hinweis- auch BatConfig_Control zu schreiben kannst Du ja ausprobieren. Ich würde erst wieder etwas ändern wenns eine belastbare Grundlage gibt (ausser dass die aktuelle Funktion wieder ausgebaut wird: #11341).

@andig
Copy link
Member Author

andig commented Jan 4, 2024

Das mit den 19 auf einmal würde ich erstmal bedingt glauben. Den zweiten Hinweis- auch BatConfig_Control zu schreiben kannst Du ja ausprobieren.

@cschlipf hast Du das mal ausprobiert? Sonst würde ich Sofar jetzt wieder rauswerfen...

@cschlipf
Copy link
Contributor

cschlipf commented Jan 4, 2024

@andig - gerade mal mit der Home Assistant Integration getestet. Tut nicht. Vielleicht kennt ja jemand anders einen Trick.

@cschlipf
Copy link
Contributor

@andig Ich habe jetzt die Doku und ich kann Euch definitiv sagen, dass ihr für Sofar das nicht umsetzen wollt. Das ist die Liste der Parameter, die man schreiben muss, nur um den Depth of Discharge zu schreiben:

image

Es sind nicht 19 Register, sondern 23. Ich sag mal: Das wollt ihr nicht ;-)

@premultiply
Copy link
Member

Kannst du mir das gesamte Dokument mal bitte anhängen oder per Slack schicken?

@cschlipf
Copy link
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants