span-panel-api-schema-1 1.2.1__tar.gz → 1.2.2__tar.gz

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.
Files changed (40) hide show
  1. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/CHANGELOG.md +9 -0
  2. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/PKG-INFO +2 -2
  3. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/pyproject.toml +4 -2
  4. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/adapter.py +9 -2
  5. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/.gitignore +0 -0
  6. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/README.md +0 -0
  7. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/breaker.json +0 -0
  8. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/charge-limit.json +0 -0
  9. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/connection.json +0 -0
  10. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/door.json +0 -0
  11. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/grid-forming.json +0 -0
  12. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/grid.json +0 -0
  13. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/info.json +0 -0
  14. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/load-shed.json +0 -0
  15. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/meter.json +0 -0
  16. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/pcs.json +0 -0
  17. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/power-flows.json +0 -0
  18. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/shed-forecast.json +0 -0
  19. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/shed.json +0 -0
  20. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/soc.json +0 -0
  21. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/status.json +0 -0
  22. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/catalogs/switch.json +0 -0
  23. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/spec/registries/device-types.md +0 -0
  24. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/__init__.py +0 -0
  25. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/adoption.py +0 -0
  26. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/catalog.py +0 -0
  27. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/charge_limit.py +0 -0
  28. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/circuits.py +0 -0
  29. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/const.py +0 -0
  30. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/description.py +0 -0
  31. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/devices.py +0 -0
  32. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/extension.py +0 -0
  33. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/field_metadata.py +0 -0
  34. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/firmware.py +0 -0
  35. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/panel.py +0 -0
  36. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/py.typed +0 -0
  37. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/reference/parent_child_tree.json +0 -0
  38. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/snapshot.py +0 -0
  39. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/spec_lock.json +0 -0
  40. {span_panel_api_schema_1-1.2.1 → span_panel_api_schema_1-1.2.2}/src/span_panel_api_schema_1/transport.py +0 -0
@@ -9,6 +9,15 @@ number. A release here means this parser changed, never that the panel did.
9
9
 
10
10
  Pre-releases are not listed separately. A beta is a step towards the next public version, so its changes are folded into that version's entry as they land and are described against the last public release, never against the beta before it.
11
11
 
12
+ ## [1.2.2]
13
+
14
+ Requires `span-panel-api` **3.6.2 or newer**, which waits on this parser's missing labels after a reconnect as well as on connect.
15
+
16
+ ### Fixed
17
+
18
+ - **`circuit_nodes_missing_names()` gives an inverter that appears after another inverter's feed link has arrived, within the same wait, a full grace for its own**, rather than reporting nothing missing the moment it appears and so letting it be keyed by
19
+ its device id.
20
+
12
21
  ## [1.2.1]
13
22
 
14
23
  Every PV inverter a panel commissions is read, and the battery's power keeps its sign on firmware r202639. Requires `span-panel-api` **3.6.1 or newer**.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: span-panel-api-schema-1
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Parent/child schema (data-model-version 1.x) parser for span-panel-api
5
5
  Project-URL: Homepage, https://github.com/SpanPanel/span-panel-api
6
6
  Project-URL: Issues, https://github.com/SpanPanel/span-panel-api/issues
@@ -8,7 +8,7 @@ Author: SpanPanel
8
8
  License-Expression: MIT
9
9
  Requires-Python: <4.0,>=3.14
10
10
  Requires-Dist: ebus-sdk<0.24,>=0.19.0
11
- Requires-Dist: span-panel-api<4.0,>=3.6.1
11
+ Requires-Dist: span-panel-api<4.0,>=3.6.2
12
12
  Description-Content-Type: text/markdown
13
13
 
14
14
  # span-panel-api-schema-1
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "span-panel-api-schema-1"
3
- version = "1.2.1"
3
+ version = "1.2.2"
4
4
  description = "Parent/child schema (data-model-version 1.x) parser for span-panel-api"
5
5
  authors = [
6
6
  {name = "SpanPanel"}
@@ -26,7 +26,9 @@ dependencies = [
26
26
  # parser fills. Against an earlier one, building a snapshot fails on those
27
27
  # arguments.
28
28
  # Raised to 3.6.1, whose SpanPanelSnapshot.pv documents what this parser builds.
29
- "span-panel-api>=3.6.1,<4.0",
29
+ # Raised to 3.6.2, which waits on this parser's missing labels after a bridge
30
+ # rebuild as well as on connect; the fix spans both, so the pair moves together.
31
+ "span-panel-api>=3.6.2,<4.0",
30
32
  # Only this distribution depends on the eBus SDK. The bootstrap and
31
33
  # schema-0 stay clean, so a flat-panel install never pulls it in — which is
32
34
  # what bounds the release coupling this dependency introduces to panels on
@@ -230,7 +230,9 @@ class SchemaOneAdapter:
230
230
  unvalued after the grace is taken as absent. The inverter is then keyed
231
231
  by its device id, reported once at INFO rather than the transport
232
232
  warning after the full name timeout. The grace restarts whenever
233
- anything else is missing again.
233
+ anything else is missing again, and once every inverter is placed, so
234
+ an inverter that appears after another's feed has arrived, within the
235
+ same wait, gets a whole grace of its own.
234
236
  """
235
237
  roles = TreeRoles(self._children())
236
238
  missing = [circuit.device_id for circuit in roles.circuits if not circuit.get_property(NODE_INFO, PROP_NAME)]
@@ -257,8 +259,13 @@ class SchemaOneAdapter:
257
259
  )
258
260
  self._feed_wait_reported = True
259
261
  feeds = []
260
- elif missing:
262
+ else:
263
+ # No feed is being waited out on its own: something else is still
264
+ # missing, or every inverter is placed. Either way a later feed wait
265
+ # is a new one and gets the whole grace.
261
266
  self._feed_wait_since = None
267
+ if not feeds:
268
+ self._feed_wait_reported = False
262
269
  missing.extend(feeds)
263
270
  return missing
264
271