fsantini / python-e3dc

Python API for querying E3/DC systems through the manufacturer's portal
MIT License
72 stars 23 forks source link

Wallbox interaction #116

Closed mstv closed 5 months ago

mstv commented 6 months ago

Continue the abandoned #59

Kudos to @mdhom for the initial PR!

Tested with my E3DC S10 and E3DC Wallbox Easy Connect (installed in 2021) All added functions work except set_wallbox_schuko(), which does not apply to this wallbox.

klepptor commented 5 months ago

@mstv I think I need a bit help here to do some testing. As I'm not a developer it's quite complicated to start here.

Could you provide an example script to test all (?) the new implemented functions?

BTW: I also have a S10E with an Easy Connect Wallbox installed in 2021, so my setup is quite the same.

bullitt186 commented 5 months ago

Thank you for your new attempt to get Wallbox Support integrated!

I tested your PR 116 with by changing the values of these methods below, checking the WB behaviour and reading back the data.

I think everything works as intended. I don't know how "toggle_wallbox_charging" should behave. It toggles " 'chargingCanceled' between true and false but does not start charging when sun mode is activated and no sun is shining. When sun mode is deactivated, it starts/stops charging as intended.

Is there anything particular you would like me to check?

e3dc.set_wallbox_sunmode() e3dc.set_wallbox_phases() e3dc.toggle_wallbox_charging() e3dc.get_wallbox_data() e3dc.set_wallbox_max_charge_current() e3dc.toggle_wallbox_charging()

mstv commented 5 months ago

Is there anything particular you would like me to check?

Thank you! I think this will suffice, @bullitt186.

I don't know how "toggle_wallbox_charging" should behave. It toggles " 'chargingCanceled' between true and false but does not start charging when sun mode is activated and no sun is shining. When sun mode is deactivated, it starts/stops charging as intended.

Yes, that's how it works for me, too. I call this method in dependency on the the result of e3dc_obj.get_wallbox_data(keepAlive=True)['chargingActive'].

Could you provide an example script to test all (?) the new implemented functions?

Like described in https://github.com/fsantini/python-e3dc/blob/master/README.md, I have created a test.py file and run it just by typing python test.py on the command prompt. The current state is printed before and after the set function. set_battery_to_car_mode(True can be replaced by the other new API functions. Don't forget to restore the initial state after testing.

from e3dc import E3DC

TCP_IP = '192.168.x.y'
USERNAME = 'local.user'
PASS = 'my user password'
KEY = 'mein RSCP-Passwort auf 2. Seite im Benutzerprofil'
CONFIG = {}

e3dc_obj = E3DC(E3DC.CONNECT_LOCAL, username=USERNAME, password=PASS, ipAddress = TCP_IP, key = KEY, configuration = CONFIG)
print(e3dc_obj.get_wallbox_data(keepAlive=True))
e3dc_obj.set_battery_to_car_mode(True, keepAlive=True)
print(e3dc_obj.get_wallbox_data(keepAlive=True))
e3dc_obj.disconnect()
klepptor commented 5 months ago

Hi @mstv ,

until now I could only verify your little test.py, this works with my E3DC setup.

In the next days I will try to verify this with the other getters and setters, but I will need to get more familiar with Python before.

Great work so far!!

mstv commented 5 months ago

You could replace e3dc_obj.set_battery_to_car_mode(True, keepAlive=True) with each of the following

e3dc_obj.set_battery_to_car_mode(True)
e3dc_obj.set_battery_to_car_mode(False)
e3dc_obj.set_wallbox_max_charge_current(8) # might work also with just 6 amperes but not with my car
# up to
e3dc_obj.set_wallbox_max_charge_current(16) # 11 kW
# or up to
e3dc_obj.set_wallbox_max_charge_current(32) # if the WB supports 22 kW
e3dc_obj.set_wallbox_phases(1)
e3dc_obj.set_wallbox_phases(3)
e3dc_obj.set_wallbox_schuko(True) # not applicable for WB "Easy Connect"
e3dc_obj.set_wallbox_schuko(False) # not applicable for WB "Easy Connect"
e3dc_obj.set_wallbox_sunmode(False)
e3dc_obj.set_wallbox_sunmode(True)
e3dc_obj.toggle_wallbox_charging() # run twice in order to restore the original state 
mstv commented 5 months ago

@vchrisb, do I need to do anything about the validation scripts?

image

vchrisb commented 5 months ago

yes you need to adhere to the code styling: https://github.com/fsantini/python-e3dc?tab=readme-ov-file#contribution

klepptor commented 5 months ago

Hi @mstv

I just tested all methods mentioned by you above and they work like a charme! Great work!

mstv commented 5 months ago

yes you need to adhere to the code styling: https://github.com/fsantini/python-e3dc?tab=readme-ov-file#contribution

I had already run it. flake8 complains about line lengths in the entire file. 🤔 This PR just adds lines 985-1185.

.\e3dc\_e3dc.py:75:80: E501 line too long (87 > 79 characters) .\e3dc\_e3dc.py:76:80: E501 line too long (94 > 79 characters) .\e3dc\_e3dc.py:77:80: E501 line too long (101 > 79 characters) .\e3dc\_e3dc.py:78:80: E501 line too long (143 > 79 characters) .\e3dc\_e3dc.py:79:80: E501 line too long (217 > 79 characters) .\e3dc\_e3dc.py:111:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:126:80: E501 line too long (88 > 79 characters) .\e3dc\_e3dc.py:153:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:246:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:248:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:265:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:279:80: E501 line too long (96 > 79 characters) .\e3dc\_e3dc.py:284:80: E501 line too long (104 > 79 characters) .\e3dc\_e3dc.py:300:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:312:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:314:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:322:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:351:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:364:80: E501 line too long (85 > 79 characters) .\e3dc\_e3dc.py:365:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:366:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:382:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:419:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:472:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:476:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:477:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:496:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:501:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:547:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:548:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:554:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:558:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:582:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:583:80: E501 line too long (87 > 79 characters) .\e3dc\_e3dc.py:585:80: E501 line too long (87 > 79 characters) .\e3dc\_e3dc.py:593:80: E501 line too long (87 > 79 characters) .\e3dc\_e3dc.py:595:80: E501 line too long (85 > 79 characters) .\e3dc\_e3dc.py:623:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:628:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:639:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:644:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:655:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:663:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:678:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:680:80: E501 line too long (87 > 79 characters) .\e3dc\_e3dc.py:683:80: E501 line too long (92 > 79 characters) .\e3dc\_e3dc.py:684:80: E501 line too long (91 > 79 characters) .\e3dc\_e3dc.py:688:80: E501 line too long (89 > 79 characters) .\e3dc\_e3dc.py:697:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:698:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:701:80: E501 line too long (90 > 79 characters) .\e3dc\_e3dc.py:734:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:735:80: E501 line too long (88 > 79 characters) .\e3dc\_e3dc.py:739:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:740:80: E501 line too long (88 > 79 characters) .\e3dc\_e3dc.py:748:80: E501 line too long (85 > 79 characters) .\e3dc\_e3dc.py:760:80: E501 line too long (87 > 79 characters) .\e3dc\_e3dc.py:763:80: E501 line too long (107 > 79 characters) .\e3dc\_e3dc.py:764:80: E501 line too long (93 > 79 characters) .\e3dc\_e3dc.py:765:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:769:80: E501 line too long (89 > 79 characters) .\e3dc\_e3dc.py:778:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:783:80: E501 line too long (90 > 79 characters) .\e3dc\_e3dc.py:800:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:817:80: E501 line too long (88 > 79 characters) .\e3dc\_e3dc.py:835:80: E501 line too long (87 > 79 characters) .\e3dc\_e3dc.py:837:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:851:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:852:80: E501 line too long (88 > 79 characters) .\e3dc\_e3dc.py:854:80: E501 line too long (88 > 79 characters) .\e3dc\_e3dc.py:888:80: E501 line too long (93 > 79 characters) .\e3dc\_e3dc.py:890:80: E501 line too long (95 > 79 characters) .\e3dc\_e3dc.py:891:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:903:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:930:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:948:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:949:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:956:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:957:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:977:80: E501 line too long (194 > 79 characters) .\e3dc\_e3dc.py:993:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:997:80: E501 line too long (95 > 79 characters) .\e3dc\_e3dc.py:998:80: E501 line too long (94 > 79 characters) .\e3dc\_e3dc.py:999:80: E501 line too long (98 > 79 characters) .\e3dc\_e3dc.py:1000:80: E501 line too long (111 > 79 characters) .\e3dc\_e3dc.py:1001:80: E501 line too long (119 > 79 characters) .\e3dc\_e3dc.py:1002:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1004:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1007:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1009:80: E501 line too long (101 > 79 characters) .\e3dc\_e3dc.py:1011:80: E501 line too long (97 > 79 characters) .\e3dc\_e3dc.py:1074:80: E501 line too long (96 > 79 characters) .\e3dc\_e3dc.py:1087:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:1102:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:1130:80: E501 line too long (96 > 79 characters) .\e3dc\_e3dc.py:1150:80: E501 line too long (85 > 79 characters) .\e3dc\_e3dc.py:1208:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1211:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:1242:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1334:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1353:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1357:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1359:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:1381:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1396:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1397:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:1409:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:1413:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:1419:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1465:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:1471:80: E501 line too long (88 > 79 characters) .\e3dc\_e3dc.py:1483:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1484:80: E501 line too long (88 > 79 characters) .\e3dc\_e3dc.py:1493:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1497:80: E501 line too long (88 > 79 characters) .\e3dc\_e3dc.py:1498:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1506:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1533:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1540:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1557:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:1601:80: E501 line too long (101 > 79 characters) .\e3dc\_e3dc.py:1614:80: E501 line too long (85 > 79 characters) .\e3dc\_e3dc.py:1615:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:1730:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1731:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1732:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:1733:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1741:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1744:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:1747:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:1754:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1755:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:1756:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:1765:80: E501 line too long (85 > 79 characters) .\e3dc\_e3dc.py:1768:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1770:80: E501 line too long (81 > 79 characters) .\e3dc\_e3dc.py:1776:80: E501 line too long (85 > 79 characters) .\e3dc\_e3dc.py:1782:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1783:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1798:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:1801:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:1811:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:1814:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:1820:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1835:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:1842:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1859:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:1860:80: E501 line too long (83 > 79 characters) .\e3dc\_e3dc.py:1861:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1890:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:1975:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:1993:80: E501 line too long (89 > 79 characters) .\e3dc\_e3dc.py:2010:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:2026:80: E501 line too long (87 > 79 characters) .\e3dc\_e3dc.py:2114:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:2151:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:2154:80: E501 line too long (91 > 79 characters) .\e3dc\_e3dc.py:2155:80: E501 line too long (85 > 79 characters) .\e3dc\_e3dc.py:2156:80: E501 line too long (91 > 79 characters) .\e3dc\_e3dc.py:2160:80: E501 line too long (100 > 79 characters) .\e3dc\_e3dc.py:2168:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:2170:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:2173:80: E501 line too long (86 > 79 characters) .\e3dc\_e3dc.py:2232:80: E501 line too long (84 > 79 characters) .\e3dc\_e3dc.py:2252:80: E501 line too long (113 > 79 characters) .\e3dc\_e3dc.py:2277:80: E501 line too long (80 > 79 characters) .\e3dc\_e3dc.py:2282:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:2296:80: E501 line too long (82 > 79 characters) .\e3dc\_e3dc.py:2338:80: E501 line too long (80 > 79 characters)
vchrisb commented 5 months ago

@mstv I don't know why it is reporting this to you. Please make sure that flake8 is picking up the pyproject.toml. I've checked out the pr and flake8 does not complain at all. But if you look at the output of the validation checks, it is failing due to black. Pyright will also complain, as the new functions are missing type annotations.

mstv commented 5 months ago

Thank you for the hints, @vchrisb. I suggest to remove set -e from tools\validate.sh in order to see all complaints. (BTW; I do not like the output of black because it is just "uh oh, not nice" + silly symbols. It should rather print "run 'black ./' in order to resolve the code style".)

mstv commented 5 months ago

updated test calls:

print("set_battery_to_car_mode f ->", e3dc_obj.set_battery_to_car_mode(False, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_battery_to_car_mode t ->", e3dc_obj.set_battery_to_car_mode(True, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_battery_to_car_mode f ->", e3dc_obj.set_battery_to_car_mode(False, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_max_charge_current 0 ->", e3dc_obj.set_wallbox_max_charge_current(0, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_max_charge_current 1 ->", e3dc_obj.set_wallbox_max_charge_current(1, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_max_charge_current 6 ->", e3dc_obj.set_wallbox_max_charge_current(6, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_max_charge_current 8 ->", e3dc_obj.set_wallbox_max_charge_current(8, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_max_charge_current 10 ->", e3dc_obj.set_wallbox_max_charge_current(10, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_max_charge_current 16 ->", e3dc_obj.set_wallbox_max_charge_current(16, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_max_charge_current 32 ->", e3dc_obj.set_wallbox_max_charge_current(32, keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("toggle_wallbox_phases 1 ->", e3dc_obj.toggle_wallbox_phases(keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("toggle_wallbox_phases 2 ->", e3dc_obj.toggle_wallbox_phases(keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("toggle_wallbox_phases 3 ->", e3dc_obj.toggle_wallbox_phases(keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("toggle_wallbox_phases 4 ->", e3dc_obj.toggle_wallbox_phases(keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_schuko f ->", e3dc_obj.set_wallbox_schuko(False, keepAlive=True, wbIndex=0))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_schuko t ->", e3dc_obj.set_wallbox_schuko(True, keepAlive=True, wbIndex=0))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_schuko f ->", e3dc_obj.set_wallbox_schuko(False, keepAlive=True, wbIndex=0))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_sunmode f ->", e3dc_obj.set_wallbox_sunmode(False, keepAlive=True, wbIndex=0))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_sunmode t ->", e3dc_obj.set_wallbox_sunmode(True, keepAlive=True, wbIndex=0))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("set_wallbox_sunmode f ->", e3dc_obj.set_wallbox_sunmode(False, keepAlive=True, wbIndex=0))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("toggle_wallbox_charging 1 ->", e3dc_obj.toggle_wallbox_charging(keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("toggle_wallbox_charging 2 ->", e3dc_obj.toggle_wallbox_charging(keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("toggle_wallbox_charging 3 ->", e3dc_obj.toggle_wallbox_charging(keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
print("toggle_wallbox_charging 4 ->", e3dc_obj.toggle_wallbox_charging(keepAlive=True))
print(e3dc_obj.get_wallbox_data(keepAlive=True))
T1ppes commented 5 months ago

I would love to give additional feedback, but I can't get the package to install/run. I setup a fresh raspberry pi to which I am connected via SSH. When trying to install the package via pip install pye3dc the system comes back with `× This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install.

If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.

For more information visit http://rptl.io/venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.`

It did also not work with apt install pye3dc /home/pye3dc as proposed. When typing pip install pye3dc --break-system-packages something was successfully installed, but the test file is not being executed by python e3dc.py I am getting the following error: Traceback (most recent call last): File "/home/pye3dc/e3dc.py", line 1, in <module> from e3dc import E3DC File "/home/pye3dc/e3dc.py", line 1, in <module> from e3dc import E3DC ImportError: cannot import name 'E3DC' from partially initialized module 'e3dc' (most likely due to a circular import) (/home/pye3dc/e3dc.py)

Update: I tried to pip install the pye3dc package in a venv, but calling the file gives the same error.

mstv commented 5 months ago

@T1ppes, I took a look into the .bash_history of my rpi. Luckily, it still holds the commands I used about 2 years ago: nothing special but using pip.

sudo apt install python3-pip
pip install pye3dc
bullitt186 commented 5 months ago

Once one or two could verify the latest changes, we should be good to go.

I tested the PR again with the most recent changes on my S10X Compact with a MultiConnect II (the one without a Schuko but with an RFID reader). The newly introduced toggle_wallbox_phases() works as expected. I see no change in the other methods i tested earlier. So for me, it seems working fine 👍

For completeness, find below the full output of the test cases posted by @mstv.


set_battery_to_car_mode f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_battery_to_car_mode t -> False
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_battery_to_car_mode f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_max_charge_current 0 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 6, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_max_charge_current 1 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 6, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_max_charge_current 6 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 6, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_max_charge_current 8 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 8, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_max_charge_current 10 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 10, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_max_charge_current 16 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_max_charge_current 32 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
toggle_wallbox_phases 1 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 1, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
toggle_wallbox_phases 2 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
toggle_wallbox_phases 3 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 1, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
toggle_wallbox_phases 4 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_schuko f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_schuko t -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_schuko f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_sunmode f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': False}
set_wallbox_sunmode t -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': True}
set_wallbox_sunmode f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': False}
toggle_wallbox_charging 1 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': False}
toggle_wallbox_charging 2 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': False}
toggle_wallbox_charging 3 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': False}
toggle_wallbox_charging 4 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 5191, 'energyNet': 4087, 'energySun': 1104, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 32, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 0, 'sunModeOn': False}
klepptor commented 5 months ago

I just also tested again with my S10E and Easy Connect, works liked expected. 👍

Test output:

set_battery_to_car_mode f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_battery_to_car_mode t -> True
{'appSoftware': 0, 'batteryToCar': 1, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_battery_to_car_mode f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_max_charge_current 0 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 6, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_max_charge_current 1 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 6, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_max_charge_current 6 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 6, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_max_charge_current 8 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 8, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_max_charge_current 10 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 10, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_max_charge_current 16 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
toggle_wallbox_phases 1 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 1, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
toggle_wallbox_phases 2 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
toggle_wallbox_phases 3 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 1, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
toggle_wallbox_phases 4 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_schuko f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_schuko t -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_schuko f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_sunmode f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': False}
set_wallbox_sunmode t -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': True}
set_wallbox_sunmode f -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': False}
toggle_wallbox_charging 1 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': True, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': False}
toggle_wallbox_charging 2 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': False}
toggle_wallbox_charging 3 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': True, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': False}
toggle_wallbox_charging 4 -> True
{'appSoftware': 0, 'batteryToCar': 0, 'chargingActive': False, 'chargingCanceled': False, 'consumptionNet': 0, 'consumptionSun': 0, 'energyAll': 410320, 'energyNet': 230335, 'energySun': 179985, 'index': 0, 'keyState': 0, 'maxChargeCurrent': 16, 'phases': 3, 'plugLocked': False, 'plugged': False, 'schukoOn': False, 'soc': 100, 'sunModeOn': False}
bullitt186 commented 3 months ago

Based on this functionality, i opened a PR for the Home Assistant integration hacs-e3dc here: https://github.com/torbennehmer/hacs-e3dc/pull/153 As i guess there are quite a few HA users here as well, i'd like to encourage you to test this PR.

@mstv @klepptor @vchrisb @T1ppes @

mstv commented 3 weeks ago

Hint: Most likely since the E3DC update to S10_2024_024, set_wallbox_max_charge_current does not have the full desired effect. The S10 or the wallbox seem to often choose a lower value between max_charge_current and min_charge_current. At the moment, we have no remote control for min_charge_current. It can be configured in the wallbox settings using the S10 display.