|
1 | 1 | package charger |
2 | 2 |
|
3 | | -// LICENSE |
4 | | - |
5 | | -// Copyright (c) 2025 evcc, premultiply |
6 | | - |
7 | | -// This module is NOT covered by the MIT license. All rights reserved. |
8 | | - |
9 | | -// The above copyright notice and this permission notice shall be included in all |
10 | | -// copies or substantial portions of the Software. |
11 | | - |
12 | | -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
13 | | -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
14 | | -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
15 | | -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
16 | | -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
17 | | -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
18 | | -// SOFTWARE. |
| 3 | +// DEVELOPMENT STATUS: |
| 4 | +// - Tested with E3DC Multi Connect II Wallbox (FW 7.0.6.0/1.0.3.0) |
| 5 | +// - Individual RSCP calls verified, full evcc integration pending |
| 6 | +// - Phase switching (1p3p): E3DC handles ramping internally (tested) |
| 7 | +// - Requires testing with additional E3DC systems before production use |
19 | 8 |
|
20 | 9 | import ( |
21 | 10 | "errors" |
@@ -443,34 +432,31 @@ func (wb *E3dc) GetMaxCurrent() (float64, error) { |
443 | 432 | var _ api.ChargeRater = (*E3dc)(nil) |
444 | 433 |
|
445 | 434 | // ChargedEnergy implements the api.ChargeRater interface |
446 | | -// Returns the energy charged in the current/last session in kWh |
| 435 | +// Returns the energy charged in the current session in kWh |
447 | 436 | func (wb *E3dc) ChargedEnergy() (float64, error) { |
448 | | - res, err := wb.conn.Send(*rscp.NewMessage(rscp.WB_REQ_DATA, []rscp.Message{ |
449 | | - *rscp.NewMessage(rscp.WB_INDEX, wb.id), |
450 | | - *rscp.NewMessage(rscp.WB_REQ_PM_ENERGY_L1, nil), |
451 | | - *rscp.NewMessage(rscp.WB_REQ_PM_ENERGY_L2, nil), |
452 | | - *rscp.NewMessage(rscp.WB_REQ_PM_ENERGY_L3, nil), |
453 | | - })) |
| 437 | + res, err := wb.conn.Send(*rscp.NewMessage(rscp.WB_REQ_SESSION, nil)) |
454 | 438 | if err != nil { |
455 | 439 | return 0, err |
456 | 440 | } |
457 | 441 |
|
458 | | - wbData, err := rscpContainer(*res, 4) |
| 442 | + sessionData, err := rscpContainer(*res, 1) |
459 | 443 | if err != nil { |
460 | 444 | return 0, err |
461 | 445 | } |
462 | 446 |
|
463 | | - var energy float64 |
464 | | - for i := 1; i <= 3; i++ { |
465 | | - e, err := rscpFloat64(wbData[i]) |
466 | | - if err != nil { |
467 | | - return 0, err |
| 447 | + // Find WB_SESSION_CHARGED_ENERGY in session data |
| 448 | + for _, msg := range sessionData { |
| 449 | + if msg.Tag == rscp.WB_SESSION_CHARGED_ENERGY { |
| 450 | + energy, err := rscpFloat64(msg) |
| 451 | + if err != nil { |
| 452 | + return 0, err |
| 453 | + } |
| 454 | + return energy / 1000.0, nil // Wh -> kWh |
468 | 455 | } |
469 | | - energy += e |
470 | 456 | } |
471 | 457 |
|
472 | | - // Convert Wh to kWh |
473 | | - return energy / 1000.0, nil |
| 458 | + // No active session |
| 459 | + return 0, nil |
474 | 460 | } |
475 | 461 |
|
476 | 462 | var _ api.ChargeTimer = (*E3dc)(nil) |
|
0 commit comments