@camstack/addon-provider-enpal 0.1.14 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.1.16] - 2026-11-10
11
+
12
+ ### Changed
13
+
14
+ - Enpal: reads boxes on firmware 8.51 and later through the box's own web-page channel (embedded Python, no token, read-only); the device-page parser accepts the 8.52 markup
15
+ - Enpal: a failed web channel is skipped for 10 minutes, a missing Python is named as the reason, and the bridge output is capped
16
+ - Enpal: three containers (Enpal Box, Impianto, Heat pump) with accordion sections, text sensors, hidden diagnostics and identity facts as device attributes
17
+ - Enpal: the box is adopted as the Enpal Box gateway with its firmware and diagnostics; the System (PV, battery, grid, house) and the Heat pump (Enpal) are separate containers, each showing the child it declares first (PV power, heat-pump power)
18
+ - Enpal: a System or Heat pump adopted before the primary-child declaration gets it on its next start
19
+
20
+ ## [0.1.15] - 2026-11-10
21
+
22
+ ### Changed
23
+
24
+ - Rebuilt against updated dependencies.
25
+
10
26
  ## [0.1.14] - 2026-11-08
11
27
 
12
28
  ### Changed
package/README.md CHANGED
@@ -1,38 +1,39 @@
1
1
  # @camstack/addon-provider-enpal
2
2
 
3
- Enpal solar box provider for CamStack: the box is an integration, and the equipment it reports (photovoltaic, battery, grid, house, heat pump) is adopted as Container devices with history. There is no device for the box itself.
3
+ Enpal solar box provider for CamStack: the box is an integration, and it offers three pieces to adopt: the box itself (a Gateway), the System (photovoltaic, battery, grid, house) and the heat pump (both Containers), with history.
4
4
 
5
5
  ## What it does
6
6
 
7
- - **Enpal** (`provider-enpal`): add an integration with the box's host. The addon polls the box's InfluxDB 2.x (or, as fallback, its local device page) and offers one Container per piece of equipment the box actually reports. Adopting a container adopts its children.
7
+ - **Enpal** (`provider-enpal`): add an integration with the box's host. The addon reads the box through its own web-page channel (the one its web UI uses; an embedded Python bridge), or its InfluxDB 2.x, or its local device page, and offers the pieces the box actually reports. Each is adopted only when the operator picks it; adopting a piece adopts its children.
8
8
  - Node placement: `hub-only`.
9
9
  - Capabilities: `device-provider`, `device-adoption`.
10
10
 
11
- Containers and their children (a container is offered only when the box reported at least one of its values; a child only when the box reported its value):
11
+ Pieces (the box is always offered; a container only when the box reported at least one of its values; a child only when the box reported its value):
12
12
 
13
- | Container | Child | Caps |
14
- | --- | --- | --- |
15
- | Photovoltaic | Production | `power-meter` (W, lifetime kWh) |
16
- | | Inverter temperature | `numeric-sensor` |
17
- | Battery | Battery | `battery` (state of charge), `power-meter` (signed W, V, A) |
18
- | | Energy charged / discharged | `meter` (lifetime kWh) |
19
- | | Temperature, Health | `numeric-sensor` |
20
- | Grid | Import, Export | `power-meter` (W, lifetime kWh) |
21
- | House | Consumption | `power-meter` |
22
- | Heat pump | Consumption | `power-meter` |
23
- | | Hot water temperature, Outside temperature | `numeric-sensor` |
13
+ | Piece | Type | Sections | Children |
14
+ | --- | --- | --- | --- |
15
+ | Enpal Box | Gateway | Box, EEBUS, Connectivity | state, load and link sensors, all diagnostic; plus the link to the box's device page |
16
+ | System | Container | Photovoltaic, Battery, Grid, Home, Inverter | live sensors (power, level, day and lifetime energy, states) and diagnostic ones (voltages, currents, limits, ratings) |
17
+ | Heat pump (Enpal) | Container | none | the power, consumption and temperatures Enpal reads, running states and diagnostic ones; offered only when the box reports heat-pump keys |
18
+
19
+ - A diagnostic child is hidden by default (`display.hidden`); its history is still recorded.
20
+ - Identity facts (model, serial numbers, firmware) are device attributes of the piece (the box's on the Gateway), never sensors.
21
+ - A text value (a state, a mode) is an `enum-sensor` and keeps the label the box sent; a certificate expiry is a date-time sensor.
22
+ - Texts and attributes come only from the web-page channel; InfluxDB and the device page carry numbers only.
23
+ - Each container declares which child stands for it (`primaryChildPreference`), and the framework takes the first one that was adopted: System PV power, battery level, home consumption; Heat pump power, hot water, outside temperature. An operator's own pick wins over it.
24
+ - Not exposed on purpose: AC consumption duplicate, AC maximum, the network-traffic, cellular-guard and predictor internals.
24
25
 
25
26
  Removing the integration removes its devices. An unreachable box marks its devices offline; it never publishes zeros. A lifetime counter that drops for one poll is held at its previous value.
26
27
 
27
28
  ## Integration settings
28
29
 
29
30
  - **Box host / IP** — the box on the LAN. The box does not advertise itself, so the integration is added by hand.
30
- - **Source** — `auto` (InfluxDB when a token is set, the device page otherwise or when InfluxDB cannot be read), `influx`, or `page`.
31
+ - **Source** — `auto` (the box web channel, then InfluxDB when a token is set, then the device page; the first that answers wins), `blazor`, `influx`, or `page`.
31
32
  - **InfluxDB access token** — issued by Enpal support (ask in the Enpal app chat). Stored in the keychain. Organisation (`enpal`), bucket (`solar`) and port (`8086`) default to the usual values.
32
- - **Poll interval** — 30 s by default, 10 s minimum.
33
+ - **Poll interval** — 30 s by default, 10 s minimum. With the web channel in use (`auto` or `blazor`) the effective interval is never below 20 s, the worst-case read time. In `auto`, a failed web channel is skipped for 10 minutes and the snapshot says why; a node without Python says so too.
33
34
  - **Invert battery power sign** — flip it when charging shows as negative.
34
35
 
35
- Firmware 8.51 and later render the device rows of the device page only through a web socket; on those boxes the page fallback finds nothing and InfluxDB is required.
36
+ Firmware 8.51 and later render the device rows of the device page only through a Blazor Server web socket. The `blazor` source opens that channel the way the box's own page does (read-only: it only acknowledges renders, it never sends a UI event) and needs no credential. Its protocol modules are copied from the Home Assistant component derolli1976/enpal (MIT, see `THIRD_PARTY.md`). It needs the platform's embedded Python; without it `auto` falls back to InfluxDB or the page, which on those boxes hold less. Only numeric sensors are read; wallbox and heat-pump controls are not part of this addon.
36
37
 
37
38
  ## Requirements
38
39
 
@@ -44,7 +45,7 @@ Package `@camstack/addon-provider-enpal` on npm.
44
45
 
45
46
  ## What it provides
46
47
 
47
- - **Enpal** (`provider-enpal`): Add an Enpal solar box as an integration (InfluxDB, device page as fallback) and adopt its equipment: photovoltaic, battery, grid, house and heat pump. Category: providers.
48
+ - **Enpal** (`provider-enpal`): Add an Enpal solar box as an integration (its own web-page channel, InfluxDB or the device page) and adopt its equipment: photovoltaic, battery, grid, house and heat pump. Category: providers.
48
49
  - Capabilities: `device-provider`, `device-adoption`.
49
50
 
50
51
  ## Configuration