Files
arnaudne 941abd98d5 feat: initial myprimal MQTT bridge service
Dynamic MySolem/MyIndygo IoT bridge with MQTT, Home Assistant
autodiscovery, and Homebridge EasyMQTT compatibility.

- Device discovery via MySolem API on startup (all modules/inputs/outputs)
- Configurable poll engine (fast/normal/slow buckets, per-input overrides)
- MQTT retained state publishing + HA autodiscovery payloads
- Unified manual command routing (linesControl vs sendManualModuleCommand)
- Runtime config via MQTT $config/set, persisted to config.json
- Expression override system (API-provided > hardcoded > passthrough)
- Minimal REST API: /health, /state, /control, /rediscover
- Docker deployment (Dockerfile + docker-compose.yml)
- 38 unit tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 01:05:24 +02:00

83 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LRLEVEL — Pool Fill Valve Controller (LRLEVEL-0D2ED9)
**Module ID**: `6a1c4b153d6c33ab843edc13`
**Type**: `lr-niv` (niveau = level)
**Role**: Controls pool water fill valve; measures volume added and fill state
---
## Inputs
| Input ID | Type | Unit | Description |
|---|---|---|---|
| `6a1c4b153d6c33ab843edc15` | 33 (flow) | L | Volume of water added per fill cycle |
| `6a1c4b153d6c33ab843edc16` | 149 (level state) | raw | Fill valve / level state (0/1) |
### Input edc15 — Water volume (fill meter)
Expression: `javascript:if(x<=0){0.0}else if(x>=80000){68.76}else{-5.01×10⁻¹⁰×...}` (polynomial curve for pulse-to-litre conversion)
Recent readings — all **0 L** for the past 5 ticks (no fill events since 2026-06-03):
```
2026-06-04T19:12 0 L
2026-06-04T13:11 0 L
2026-06-04T07:10 0 L
2026-06-04T01:09 0 L
2026-06-03T19:08 0 L
```
Pool level currently stable — no refill needed.
### Input edc16 — Level state
Type 149 (new), raw 0/1. Consistently reads **1** in all recent ticks (every 6h):
```
2026-06-04T15:12 1
2026-06-04T09:11 1
2026-06-04T03:10 1
2026-06-03T21:09 1
2026-06-03T15:08 1
```
`1` = fill valve closed / level OK.
---
## Output
| Output ID | Name | Index |
|---|---|---|
| `6a1c4b153d6c33ab843edc17` | Station 1 | 0 |
Controls the physical fill valve. Program index 0 ("Station 1") exists but has no active windows — fill is triggered automatically by the level sensor, not by schedule.
---
## Remote state
- Battery: **94%**
- Last radio contact: 2026-06-04T20:12:35Z
- Relay: `60ca4276ad69dac1558f7c61` (LRMB10)
---
## Fill event detection
To detect when the pool was last filled and how much water was added, query the flow input over a wider date range and filter for ticks where `value > 0`:
```python
data = session.get(f"{BASE}/remote/input/getComputedSensorData", params={
"inputId": "6a1c4b153d6c33ab843edc15",
"startDate": "2026-01-01T00:00:00.000Z",
"endDate": "2026-06-04T23:59:59.000Z",
"ensurePrevTickForContinuity": "true",
}).json()
fill_events = [t for t in data["computedSensorData"] if t["value"] > 0]
```
---
## Notes
- Type 149 is a new input type not seen in other modules (likely lr-niv specific level state)
- The system works as: `pool-level-sensor` (float) → signals low → `LRLEVEL` opens fill valve (output 0) → `edc15` measures L added → valve closes when `pool-level-sensor` returns 1