Skip to content

Commit dd119d8

Browse files
committed
changelog & docs
1 parent 9f72b7a commit dd119d8

4 files changed

Lines changed: 90 additions & 54 deletions

File tree

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,79 @@
11
# Changelog
22

33
<https://github.com/kellerza/sunsynk/commits/>
4+
5+
## Unreleased
6+
7+
All items below are changes since add-on **0.10.1** (stable release on GitHub `main`).
8+
9+
### GitHub issues (in progress)
10+
11+
- [#639](https://github.com/kellerza/sunsynk/issues/639) – Loss of communication with one inverter
12+
blocked MQTT updates for **all** inverters; **per-inverter availability** is aimed at isolating
13+
failure to the affected device. Issue remains **open** until validated in the field.
14+
- [#642](https://github.com/kellerza/sunsynk/issues/642) – Ongoing work to improve
15+
**AUX / generator port** alignment between **single-phase** and **three-phase** sensor definitions
16+
(issue **not closed**). _(GitHub thread title may also cover related inverter-side options.)_
17+
- [#641](https://github.com/kellerza/sunsynk/issues/641) – Solarman / dongle connectivity (e.g. Fuji
18+
micro-inverter setups); **clearer warnings and validation** around **`DONGLE_SERIAL_NUMBER`** so
19+
misconfiguration shows up early in logs. Issue **open** while scenarios are confirmed.
20+
- [#635](https://github.com/kellerza/sunsynk/issues/635) – New firmware **SELL** option per time
21+
program slot; **commented-out** proposed `SwitchRWSensor` definitions (`Prog1 sell` …
22+
`Prog6 sell`) are in `single_phase.py` for review—**not enabled** until register/bitmask behaviour
23+
is **verified** on hardware. Issue **open**.
24+
25+
### Add-on behaviour
26+
27+
- **Per-inverter availability** – Each inverter publishes its own retained lifecycle topic
28+
(`SS/availability_1_<HA_PREFIX>`). Home Assistant device discovery uses that together with the
29+
add-on MQTT session topic, so one inverter can enter a **stale** state (failed reads / timeouts)
30+
and its entities reflect **unavailable** without dragging the whole multi-inverter add-on offline.
31+
- **`TIMEOUT`** – Modbus connect/read timeout in **seconds** (edge schema and translations). A full
32+
sensor batch/run is bounded by **`2 × TIMEOUT`** (`asyncio.timeout`) so slow buses can be tuned
33+
without changing schedule intervals alone.
34+
- **`STALE_INVERTER_AFTER_SECONDS`** / **`STALE_INVERTER_SKIP_SECONDS`** – Grace period after the
35+
last good read before going stale, and how long to skip Modbus for that inverter while in stale
36+
quiet (then probe again). Defaults appear in edge `config.yaml`; see reference docs for details.
37+
- **`DONGLE_SERIAL_NUMBER` (Solarman)** – Clearer **validation and logging** for the Wi-Fi dongle
38+
serial (non-zero integer, driver consistency, ignored values on non-Solarman drivers)—see
39+
[#641](https://github.com/kellerza/sunsynk/issues/641).
40+
41+
### Sensor definitions
42+
43+
- **Aliases** – Sensors may declare an `alias` (string or tuple). Each alias is registered in
44+
`SensorDefinitions.all` under a **slug** of that name, pointing at the **same** `Sensor` instance
45+
as the canonical `name`. Your `SENSORS` list can use either the primary id (from `name`) or any
46+
alias id (e.g. **Gen** vs **AUX** labelling on generator port registers) without duplicating
47+
registers in the definition set.
48+
- **Single-phase / three-phase** – Commented register notes for **Essential power** math sensors;
49+
continued tweaks in `single_phase.py` and `three_phase_common.py` (including **Gen** / **AUX**
50+
port sensors) toward clearer parity across definitions.
51+
- **Program slot SELL (proposed)** – Commented **`Prog1 sell` … `Prog6 sell`** `SwitchRWSensor`
52+
lines (one per slot) for the new firmware **SELL** bit; left disabled pending verification—see
53+
[#635](https://github.com/kellerza/sunsynk/issues/635).
54+
- **Tooling and docs** – `gen_sensors.py`, **Solarman** read path, generated **reference group**
55+
HTML, and power-flow / Lovelace examples updated to stay in sync with definition changes.
56+
57+
### Diagnostics and library
58+
59+
- **RS485 timeout** – Per-inverter MQTT sensor reflecting timeout counters from the connector (helps
60+
spot noisy RS485 / Solarman issues).
61+
62+
### Docs and repo hygiene
63+
64+
- **rumdl** – Markdown rules wired into **pre-commit** and applied across the VitePress site, README
65+
files, and GitHub issue templates (consistent lists, headings, emphasis).
66+
- **Wiring** – [Wiring guide](https://kellerza.github.io/sunsynk/guide/wiring.html) clarifies using
67+
the inverter **RS‑232 (DB9)** port: **Modbus RTU** at **RS‑232** signalling (TX/RX vs ground),
68+
**not** RS‑485 levels—use a **USB‑RS‑232** adapter or a gateway that supports that port when you
69+
want a dedicated serial link instead of the **RS‑485** terminal block bus.
70+
- **Reference docs** – `multi-options.md` updated for `TIMEOUT`, stale options, and the two-level
71+
availability model; other guide/example fixes (e.g. fault-finding, Lovelace).
72+
73+
### Internal / developer
74+
75+
- **Cursor and Copilot instructions** – Added **Cursor** rules (e.g. `.cursor/rules/`) and
76+
**GitHub Copilot** repo instructions (`.github/copilot-instructions.md`) so contributors and AI
77+
assistants follow the same add-on layout and editing policy.
78+
- **`sunsynk.utils`** split (e.g. stats vs. pretty table), expanded **`a_inverter`** tests, and
79+
related **`uv.lock`** / dependency updates from the same workstream.

‎src/sunsynk/definitions/single_phase.py‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -316,12 +316,12 @@
316316
SelectRWSensor(278, "Prog5 mode", options=PROG_MODE_OPTIONS, bitmask=0x1C),
317317
SelectRWSensor(279, "Prog6 mode", options=PROG_MODE_OPTIONS, bitmask=0x1C),
318318
# Untested
319-
SwitchRWSensor(274, "Prog1 sell", bitmask=0x20, on=0x20),
320-
SwitchRWSensor(275, "Prog2 sell", bitmask=0x20, on=0x20),
321-
SwitchRWSensor(276, "Prog3 sell", bitmask=0x20, on=0x20),
322-
SwitchRWSensor(277, "Prog4 sell", bitmask=0x20, on=0x20),
323-
SwitchRWSensor(278, "Prog5 sell", bitmask=0x20, on=0x20),
324-
SwitchRWSensor(279, "Prog6 sell", bitmask=0x20, on=0x20),
319+
# SwitchRWSensor(274, "Prog1 sell", bitmask=0x20, on=0x20),
320+
# SwitchRWSensor(275, "Prog2 sell", bitmask=0x20, on=0x20),
321+
# SwitchRWSensor(276, "Prog3 sell", bitmask=0x20, on=0x20),
322+
# SwitchRWSensor(277, "Prog4 sell", bitmask=0x20, on=0x20),
323+
# SwitchRWSensor(278, "Prog5 sell", bitmask=0x20, on=0x20),
324+
# SwitchRWSensor(279, "Prog6 sell", bitmask=0x20, on=0x20),
325325
)
326326
SENSORS += (
327327
NumberRWSensor(

‎www/docs/reference/groups/all.html‎

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,54 +1138,6 @@
11381138
<td>[177] & 0x1C</td>
11391139
<td></td>
11401140
</tr>
1141-
<tr>
1142-
<td>Prog1 sell (R/W)</td>
1143-
<td>[274] & 0x20</td>
1144-
<td>[274] & 0x20</td>
1145-
<td></td>
1146-
<td></td>
1147-
<td></td>
1148-
</tr>
1149-
<tr>
1150-
<td>Prog2 sell (R/W)</td>
1151-
<td>[275] & 0x20</td>
1152-
<td>[275] & 0x20</td>
1153-
<td></td>
1154-
<td></td>
1155-
<td></td>
1156-
</tr>
1157-
<tr>
1158-
<td>Prog3 sell (R/W)</td>
1159-
<td>[276] & 0x20</td>
1160-
<td>[276] & 0x20</td>
1161-
<td></td>
1162-
<td></td>
1163-
<td></td>
1164-
</tr>
1165-
<tr>
1166-
<td>Prog4 sell (R/W)</td>
1167-
<td>[277] & 0x20</td>
1168-
<td>[277] & 0x20</td>
1169-
<td></td>
1170-
<td></td>
1171-
<td></td>
1172-
</tr>
1173-
<tr>
1174-
<td>Prog5 sell (R/W)</td>
1175-
<td>[278] & 0x20</td>
1176-
<td>[278] & 0x20</td>
1177-
<td></td>
1178-
<td></td>
1179-
<td></td>
1180-
</tr>
1181-
<tr>
1182-
<td>Prog6 sell (R/W)</td>
1183-
<td>[279] & 0x20</td>
1184-
<td>[279] & 0x20</td>
1185-
<td></td>
1186-
<td></td>
1187-
<td></td>
1188-
</tr>
11891141
<tr>
11901142
<td>Prog1 voltage (R/W)</td>
11911143
<td>[262] * 0.01</td>

‎www/docs/reference/multi-options.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ The port for RS485 communications, which can be either:
6767

6868
Refer to the [Schedules](./schedules) section for recommended schedule overrides.
6969
:::
70+
::: tip Shared RS485 bus (one connector, many inverters)
71+
You can repeat the **same** `PORT` value for **multiple** `INVERTERS` entries. Each inverter still
72+
needs its own **`MODBUS_ID`** (and the usual unique `SERIAL_NR` & `HA_PREFIX`). One physical
73+
gateway or shared Modbus bus can then reach every unit on that wire. This is the **recommended**
74+
layout when all inverters share a single physical bus: the add-on ensures
75+
**only one I/O request is active at a time** on a shared port, which reduces contention compared
76+
to several clients fighting the same link.
77+
:::
7078

7179
- A serial port. List of available ports under _Supervisor_ -> _System_ tab -> _Host_ card
7280
**&vellip;** -> _Hardware_ (You can also use the text in the DEBUG_PORT as reference)

0 commit comments

Comments
 (0)