A cornerstone correction: 734 radios (mesh participants — battery/RSSI/link_quality/travel_time live here) are physically distinct from 689 sensors (probes — substrate/climate readings live here). The two roles have different telemetry, different failure modes, and different remediations. Prior counts that summed the two categories together were inflated. Corrección clave: 734 radios (miembros de la malla) son distintos físicamente de 689 sensores (sondas). Cada rol tiene telemetría, modos de fallo y remediación distintos.
Node (Wirepas battery Li-SOCl₂), TEROS-12 and the H340-series repeaters are battery-powered; gateways, sinks, legacy H11x repeaters and h421/h412/h810 climate hardware are PoE. Battery/RSSI/link_quality/travel_time telemetry is per-radio. Node, TEROS-12 y los repetidores H340 funcionan a batería; el resto PoE. Batería/RSSI/LQI/TT viven en la capa radio.
TEROS-12 → soil_moist / pore_ec / soil_temp (plugs into Node via cable). TEROS-One → same metrics but self-contained radio (H343 base). ATMOS-14 → air_temp / rel_hum / vpd / solar (climate probe). TEROS-12 → substrato (por cable al Node). TEROS-One → substrato con radio integrada (H343). ATMOS-14 → clima.
Backbone radios = 87 (4 gateways + 8 sinks + 75 repeaters). Gateways & sinks emit NO device-chart series on public_api (architectural artifact, not offline), so health can only be evaluated on the 75 repeaters. The stacked bar below shows their current-2d classification. Columna: 87 radios. Gateways y sinks no emiten series en public_api. Salud clasificable solo en 75 repetidores.
P1 = F1–F7 (original build-out). P2 = F8–F14. P3 = F15–F21. P4 = F22–F40 (expansion, per Ashley 2026-05-21). Radios and sensors counted separately; health rollup counts only radios (mesh members). P1=F1–F7, P2=F8–F14, P3=F15–F21, P4=F22–F40 (expansión). Radios y sensores separados; salud solo cuenta radios.
| PhaseFase | RoomsSalas | RadiosRadios | SensorsSensores | CRIT | WARN | OK | SILENT | Rooms (sample) |
|---|---|---|---|---|---|---|---|---|
| P1 | 4 | 57 | 47 | 43 | 7 | 7 | 4 | Flower 1 · Flower 5 · Flower 6 · Flower 7 |
| P2 | 7 | 105 | 118 | 86 | 11 | 8 | 6 | Flower 10 · Flower 11 · Flower 12 · Flower 13 · Flower 14 · Flower 8 · Flower 9 |
| P3 | 7 | 106 | 105 | 60 | 17 | 29 | 1 | Flower 15 · Flower 16 · Flower 17 · Flower 18 · Flower 19 · Flower 20 · Flower 21 |
| P4 | 19 | 393 | 395 | 181 | 32 | 180 | 13 | Flower 22 · Flower 23 · Flower 24 · Flower 25 · Flower 26 · Flower 27 · Flower 28 · Flower 29 … |
| Other | 2 | 73 | 24 | 49 | 9 | 3 | 5 | Clone 1 · Hallways |
Every active Flower room × every bimonthly 2-day sample (2024-04 → 2026-06). Cells show the total number of valid data points across ALL metrics in that 2-day window — the direct measurement of "how much data actually made it to AROYA." Red cells mean the room went dark; green means dense delivery; changes across the row are the signal of mesh degradation over time. This is the corrected pull using stitched /public_api/rooms/<id>/chart/ 2-day windows (43 rooms × 14 windows = 602 stitched calls, real historical data through the full window). Cada sala Flower × cada muestra bimestral. Rojo = sala silenciada; verde = alta densidad. Datos reales stitcheados en ventanas de 2 días.
| Phase · Room | 2024-04 | 2024-06 | 2024-08 | 2024-10 | 2024-12 | 2025-02 | 2025-04 | 2025-06 | 2025-08 | 2025-10 | 2025-12 | 2026-02 | 2026-04 | 2026-06 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| P1 · Flower 1 | 6720 | 6720 | 6720 | 5900 | 6720 | 6720 | 3520 | 3520 | 3520 | 3273 | 3520 | 3520 | 3520 | 3520 |
| P1 · Flower 2 | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| P1 · Flower 3 | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| P1 · Flower 4 | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| P1 · Flower 5 | 6720 | 6720 | 6720 | 5440 | 3200 | 15680 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 |
| P1 · Flower 6 | 6720 | 6720 | 6720 | 5440 | 5440 | 16960 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 7680 | 7040 |
| P1 · Flower 7 | 8000 | 8000 | 8000 | 8000 | 5120 | 5120 | 19551 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 |
| P2 · Flower 8 | 6720 | 6720 | 6720 | 3520 | 3842 | 3840 | 22080 | 22080 | 22088 | 22080 | 22080 | 22080 | 22088 | 19520 |
| P2 · Flower 9 | 6720 | 6720 | 6720 | 6720 | 6720 | 6720 | 21760 | 21760 | 21760 | 21760 | 21760 | 21770 | 21760 | 21760 |
| P2 · Flower 10 | 6720 | 6720 | 6720 | 6720 | — | 21768 | 21760 | 21760 | 21760 | 21760 | 21760 | 21760 | 20800 | 20808 |
| P2 · Flower 11 | 8000 | 8000 | 8000 | 21120 | 21128 | 21120 | 22080 | 22080 | 22080 | 21120 | 21120 | 22080 | 22080 | 21281 |
| P2 · Flower 12 | 6720 | 6720 | 6720 | 22080 | 22080 | 22080 | 22080 | 22088 | 22080 | 22088 | 22080 | 22080 | 21120 | 22080 |
| P2 · Flower 13 | 6720 | 6720 | 6720 | 22080 | 20800 | 22080 | 22080 | 22088 | 22080 | 22080 | 22080 | 22080 | 20286 | 22080 |
| P2 · Flower 14 | 6720 | 6728 | 6720 | 17709 | 22080 | 20257 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 11030 | 22080 |
| P3 · Flower 15 | 8000 | 8000 | 21912 | 22080 | 22080 | 22088 | 22080 | 22080 | 22080 | 22071 | 22080 | 22080 | 22071 | 22080 |
| P3 · Flower 16 | 6720 | 6720 | 21120 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22032 | 22090 | 20800 | 22080 | 22080 |
| P3 · Flower 17 | 6720 | 6728 | 22080 | 22080 | 22080 | 670 | 20567 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 |
| P3 · Flower 18 | 5802 | 6720 | 22088 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 19520 |
| P3 · Flower 19 | 8000 | 8000 | 22080 | 20791 | 20791 | 20800 | 22080 | 20800 | 20800 | 20800 | 22080 | 22080 | 22072 | 22071 |
| P3 · Flower 20 | 6730 | 6720 | 22080 | 22080 | 22080 | 22080 | 22080 | 21976 | 22088 | 22080 | 22080 | 22080 | 22080 | 22088 |
| P3 · Flower 21 | 6720 | 7712 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 | 22080 |
| P4 · Flower 22 | 6720 | 6720 | 8648 | 22080 | 20876 | 20800 | 22080 | 22080 | 22080 | 20800 | 22080 | 20800 | 22080 | 22080 |
| P4 · Flower 23 | 9280 | 9280 | 9280 | 29760 | 29760 | 28480 | 28480 | 29760 | 29760 | 28800 | 28800 | 28800 | 29760 | 26371 |
| P4 · Flower 24 | 9280 | 9280 | 9280 | 29760 | 29760 | 29760 | 29768 | 29760 | 29760 | 29760 | 29760 | 28480 | 29760 | 26416 |
| P4 · Flower 25 | 9280 | 9280 | 9280 | 28480 | 25920 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 28480 | 26420 |
| P4 · Flower 26 | 8892 | 9280 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 26412 |
| P4 · Flower 27 | 9280 | 9280 | 28800 | 29760 | 28800 | 28800 | 28842 | 28800 | 28808 | 29440 | 27200 | 29760 | 29760 | 26404 |
| P4 · Flower 28 | 9288 | 9280 | 22236 | 29760 | 29760 | 29760 | 29768 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 26356 |
| P4 · Flower 29 | 9288 | 9290 | 13028 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 29768 | 29760 | 29760 | 29760 | 26412 |
| P4 · Flower 30 | 9280 | 9280 | 9280 | 29768 | 29760 | 29034 | 29760 | 29760 | 29760 | 29760 | 28415 | 28480 | 29760 | 23856 |
| P4 · Flower 31 | 9280 | 9280 | 9280 | 29760 | 29760 | 29760 | 26880 | 28401 | 28185 | 29760 | 29760 | 28480 | 29760 | 26412 |
| P4 · Flower 32 | 6180 | 9280 | 9280 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 29760 | 25377 | 29760 | 26880 | 26880 |
| P4 · Flower 33 | 9156 | 9288 | 9280 | 29760 | 29760 | 29768 | 29768 | 29760 | 29760 | 29760 | 25389 | 29760 | 26880 | 29768 |
| P4 · Flower 34 | 6320 | 9280 | 9280 | 29760 | 29768 | 29672 | 29760 | 29760 | 29760 | 29760 | 25397 | 29760 | 29760 | 29760 |
| P4 · Flower 35 | 6409 | 9280 | 29760 | 29760 | 29760 | 29760 | 29768 | 29760 | 28800 | 29760 | 25401 | 29760 | 29760 | 29760 |
| P4 · Flower 36 | 8883 | 9280 | 29760 | 29348 | 28480 | 28480 | 29760 | 29760 | 29760 | 28604 | 25112 | 29440 | 29440 | 29440 |
| P4 · Flower 37 | 9164 | 9280 | 21584 | 29760 | 29760 | 27848 | 29760 | 29760 | 29760 | 29760 | 25377 | 29760 | 29760 | 29760 |
| P4 · Flower 38 | 9151 | 9280 | 12720 | 29760 | 29760 | 29760 | 29760 | 28864 | 29760 | 29760 | 25381 | 29760 | 29760 | 29760 |
| P4 · Flower 39 | 9164 | 9280 | 9280 | 29760 | 29768 | 28480 | 29770 | 29760 | 29760 | 29760 | 25393 | 29760 | 29770 | 29760 |
| P4 · Flower 40 | 3823 | 9280 | 9280 | 29760 | 26888 | 26432 | 29760 | 29768 | 29760 | 29760 | 25385 | 29544 | 27312 | 29760 |
Where each sensor's data flows. Every radio parents zero or more sensors within its zone. When a radio goes silent, all its downstream sensors go dark — this is why silent-radio count matters more than silent-sensor count. Health rollup per room shows the ratio of healthy vs impaired radios; each impaired radio takes N sensors offline (see next section for exact downstream count). Cada radio parenta cero o más sensores en su zona. Radio silencioso = todos los sensores hijos silenciosos.
| Room | Radios | Sensors | OK radios | Silent | Batt CRIT | Signal CRIT |
|---|---|---|---|---|---|---|
| P1 · Flower 1 | 12 | 2 | 0 | 0 | 0 | 12 |
| P1 · Flower 5 | 15 | 15 | 7 | 0 | 0 | 8 |
| P1 · Flower 6 | 15 | 15 | 0 | 4 | 0 | 11 |
| P1 · Flower 7 | 15 | 15 | 0 | 0 | 0 | 15 |
| P2 · Flower 8 | 15 | 28 | 3 | 1 | 2 | 9 |
| P2 · Flower 9 | 15 | 15 | 0 | 2 | 0 | 13 |
| P2 · Flower 10 | 15 | 15 | 0 | 0 | 0 | 15 |
| P2 · Flower 11 | 15 | 15 | 1 | 3 | 0 | 11 |
| P2 · Flower 12 | 15 | 15 | 1 | 0 | 0 | 14 |
| P2 · Flower 13 | 15 | 15 | 2 | 0 | 0 | 13 |
| P2 · Flower 14 | 15 | 15 | 1 | 0 | 0 | 14 |
| P3 · Flower 15 | 15 | 15 | 8 | 0 | 0 | 7 |
| P3 · Flower 16 | 15 | 15 | 0 | 0 | 0 | 15 |
| P3 · Flower 17 | 15 | 15 | 4 | 0 | 0 | 11 |
| P3 · Flower 18 | 15 | 15 | 3 | 1 | 0 | 11 |
| P3 · Flower 19 | 16 | 15 | 5 | 0 | 0 | 11 |
| P3 · Flower 20 | 15 | 15 | 4 | 0 | 0 | 11 |
| P3 · Flower 21 | 15 | 15 | 5 | 0 | 0 | 10 |
| P4 · Flower 22 | 15 | 15 | 2 | 0 | 1 | 12 |
| P4 · Flower 23 | 21 | 22 | 8 | 0 | 0 | 13 |
| P4 · Flower 24 | 21 | 21 | 9 | 0 | 0 | 12 |
| P4 · Flower 25 | 21 | 21 | 0 | 3 | 0 | 18 |
| P4 · Flower 26 | 21 | 21 | 0 | 0 | 0 | 21 |
| P4 · Flower 27 | 21 | 22 | 11 | 0 | 0 | 10 |
| P4 · Flower 28 | 21 | 21 | 13 | 1 | 0 | 7 |
| P4 · Flower 29 | 21 | 21 | 5 | 0 | 0 | 16 |
| P4 · Flower 30 | 21 | 21 | 14 | 3 | 0 | 4 |
| P4 · Flower 31 | 21 | 21 | 8 | 2 | 0 | 11 |
| P4 · Flower 32 | 21 | 21 | 11 | 1 | 0 | 9 |
| P4 · Flower 33 | 21 | 21 | 18 | 0 | 0 | 3 |
| P4 · Flower 34 | 21 | 21 | 15 | 0 | 0 | 6 |
| P4 · Flower 35 | 21 | 21 | 3 | 3 | 0 | 15 |
| P4 · Flower 36 | 21 | 21 | 18 | 0 | 0 | 3 |
| P4 · Flower 37 | 21 | 21 | 3 | 0 | 0 | 18 |
| P4 · Flower 38 | 21 | 21 | 6 | 0 | 0 | 15 |
| P4 · Flower 39 | 21 | 21 | 18 | 0 | 0 | 3 |
| P4 · Flower 40 | 21 | 21 | 18 | 0 | 0 | 3 |
Full radio-level JSON: telemetry_map.json (804 radios each with model, room, zone, current health, attached sensors, per-sensor metric list). JSON completo: telemetry_map.json (804 radios con sensores hijos).
The 29 silent radios, sorted by how many sensors go dark when they're offline. Fixing a silent Node with 2 attached sensors saves 2 lost data streams; fixing a silent repeater saves its entire downstream tree. Los 29 radios silenciosos ordenados por sensores hijos afectados.
| Radio ID | Model | Serial | Room | Sensors offline |
|---|---|---|---|---|
| 68583 | repeater | H1110005904 | P2 · Flower 8 | 1 |
| 68566 | repeater | H1110005876 | P2 · Flower 11 | 1 |
| 76944 | repeater | H1110005852 | P4 · Flower 32 | 1 |
| 68808 | node | H3210010266 | P1 · Flower 6 | 1 |
| 68823 | node | H3210010275 | P1 · Flower 6 | 1 |
| 68902 | node | H3210010300 | P1 · Flower 6 | 1 |
| 68884 | node | H3210010368 | P1 · Flower 6 | 1 |
| 147831 | node | H3430002013 | P2 · Flower 9 | 1 |
| 69021 | node | H3210010200 | P2 · Flower 9 | 1 |
| 69025 | node | H3210010223 | P2 · Flower 11 | 1 |
| 69023 | node | H3210010207 | P2 · Flower 11 | 1 |
| 68927 | node | H3210010340 | P3 · Flower 18 | 1 |
| 80315 | node | H3210011003 | P4 · Flower 25 | 1 |
| 80663 | node | H3210011124 | P4 · Flower 25 | 1 |
| 147841 | node | H3430002108 | P4 · Flower 25 | 1 |
| 80255 | node | H3210011044 | P4 · Flower 28 | 1 |
| 80353 | node | H3210011116 | P4 · Flower 30 | 1 |
| 80341 | node | H3210011114 | P4 · Flower 30 | 1 |
| 80683 | node | H3210011481 | P4 · Flower 31 | 1 |
| 80697 | node | H3210011459 | P4 · Flower 31 | 1 |
Clusters of silent radios in one room usually indicate a local coverage or shielding problem (bad hop path, obstruction, dead repeater). Clusters spanning multiple rooms indicate a shared gateway or firmware issue. Silenciosos agrupados en una sala = problema local; en múltiples salas = gateway o firmware compartido.
Radios ranked by 5th-percentile signal — the "bad moments" that cause grower-visible dropouts. Signal < −85 dBm = CRIT (repeater/hop reposition required). P5 de señal — momentos críticos que causan caídas visibles.
| ID | Model | Serial | Room | Signal p05 (dBm) | LQI p05 | Status |
|---|---|---|---|---|---|---|
| 135963 | repeater | H4110006603 | P4 · Flower 26 | -91 | 24.0 | CRIT |
| 68703 | node | H3210010257 | P2 · Flower 12 | -89 | 33.0 | CRIT |
| 76961 | repeater | H1110005559 | P4 · Flower 24 | -89 | 33.0 | CRIT |
| 77015 | repeater | H1110006108 | P4 · Flower 37 | -89 | 34.0 | CRIT |
| 68561 | repeater | H1110005864 | P2 · Flower 12 | -88 | 29.0 | CRIT |
| 68886 | node | H3210010277 | P3 · Flower 19 | -88 | 52.0 | CRIT |
| 69141 | node | H3210010003 | P3 · Flower 20 | -88 | 53.0 | CRIT |
| 76958 | repeater | H1110005590 | P4 · Flower 34 | -88 | 36.0 | CRIT |
| 68568 | repeater | H1110005828 | P2 · Flower 13 | -87 | 35.0 | CRIT |
| 68562 | repeater | H1110005810 | P2 · Flower 14 | -87 | 36.0 | CRIT |
| 68588 | repeater | H1110005906 | P3 · Flower 18 | -87 | 42.0 | CRIT |
| 68744 | node | H3210010271 | P3 · Flower 19 | -87 | 64.0 | CRIT |
Only Nodes are battery-powered (Li-SOCl₂). Below 3.4 V = WARN, below 3.0 V = CRIT — schedule replacement. Solo Nodes son a batería. <3.4 V = WARN, <3.0 V = CRIT.
| ID | Model | Serial | Room | Battery mean (V) | Status |
|---|---|---|---|---|---|
| 56751 | node | H3210004721 | P4 · Flower 22 | 3.174 | WARN |
| 68668 | node | H3210010535 | P2 · Flower 8 | 3.371 | WARN |
| 68666 | node | H3210010415 | P2 · Flower 8 | 3.378 | WARN |
| 56722 | node | H3210004812 | P1 · Flower 1 | 3.444 | WARN |
| 135976 | node | H3310009749 | P4 · Flower 26 | 3.454 | CRIT |
| 56744 | node | H3210004777 | P1 · Flower 1 | 3.459 | CRIT |
| 68627 | node | H3210010511 | P1 · Flower 6 | 3.476 | CRIT |
| 56728 | node | H3210004800 | P1 · Flower 1 | 3.540 | CRIT |
| 56723 | node | H3210004796 | P1 · Flower 1 | 3.580 | WARN |
| 56705 | node | H3210004801 | P1 · Flower 1 | 3.591 | WARN |
| 56746 | node | H3210004770 | P1 · Flower 1 | 3.592 | CRIT |
| 80880 | node | H3210010886 | P4 · Flower 33 | 3.603 | OK |
H1 — Signal/mesh degradation clustered in P2 & P4 · HIGH
Silent-radio counts by phase: 4 P1 · 6 P2 · 1 P3 · 13 P4. Clustering by room (not scattered) indicates a local coverage or shielding issue rather than fleet-wide firmware. Matches the 2024-05 6-repeater install (P1/P2/P3) predating P4 expansion. Silenciosos agrupados por sala → problema local de cobertura, no firmware.
H2 — Battery aging on legacy P1 Nodes · MEDIUM
First-wave Nodes (installed 2023–2024) now 2–3 years into their Li-SOCl₂ lifespan; batteries below 3.4 V begin appearing in Flower 1/6/8. Replacement wave should target lowest batt-p50 first. Nodos legacy en P1 muestran envejecimiento de baterías.
Data delivery preserved:Entrega de datos preservada: The longitudinal room-density trend shows NO systemic collapse — zone-level data delivery per 2-day window rose from ~180K points (2024-04, facility onboarding) to ~540K (mature) and holds steady through 2026-06. Localised silent-radio events are the failure mode, not fleet-wide. Densidad longitudinal muestra crecimiento sano; los eventos son locales, no sistémicos.
Inventory: GET /public_api/devices/?facility=3003&pagination=0 — 1515 device records, classified 734 radios + 689 sensors after excluding retired room 11368. Radios = mesh participants (gateway·sink·repeater·node); sensors = probes (TEROS-12·TEROS-One·ATMOS-14). Only Node + TEROS-12 are battery-powered — everything else is PoE. Inventario: 1515 registros → 734 radios + 689 sensores.
Current snapshot: /public_api/devices/<id>/chart/ with start/end covering the trailing 2-day window. Called for all 734 radios, 3 workers with 0.12s inter-call sleep to stay under the ~2–3 worker 429 threshold documented in aroya-public-api-device-telemetry. Gateways & sinks return HTTP 200 with empty series (architectural artifact — same behaviour observed across every AROYA facility). Sensors are NOT called on this endpoint — their metrics live in the room chart. Instantánea actual: devices/<id>/chart/ para los 734 radios, 3 workers, sleep 0.12s.
Longitudinal (117 weeks): /public_api/rooms/<id>/chart/ for each active room × 14 bimonthly 2-day windows (2024-04-14 → 2026-06-14). This endpoint returns zone- and room-level metric series with a hard 2-day cap per call — matches the stitched pattern in aroya_14d_stitch_pull.py (memory aroya-stitch-pull-no-browser). 43 rooms × 14 windows = 602 stitched calls, ~ 41 min total runtime. Longitudinal (117 semanas): rooms/<id>/chart/ × 14 ventanas bimestrales. 602 llamadas stitcheadas.
Historical per-radio telemetry: The /devices/<id>/chart/ endpoint is empirically confirmed to return only the rolling recent ~2 days regardless of the requested start — historical windows return HTTP 200 with empty series. This is an architectural limit of the public API; per-radio 117-week battery/RSSI/LQI trending requires either the SPA /dataReadings/ endpoint (localStorage-scoped token, not accessible unattended) or a batch/history endpoint added to public_api. This report substitutes zone-level data delivery density from stitched room chart as the longitudinal proxy — since every zone is downstream of exactly one Node radio, zone-delivery density tracks mesh health at the Node granularity. Telemetría histórica por radio: El endpoint devices/<id>/chart/ solo devuelve ~2 días recientes; usamos densidad longitudinal por zona (proxy directo de salud de la radio parenta).
Thresholds: Signal p05 < −85 = CRIT, −75 to −85 = WARN; LQI p05 < 100 = CRIT; battery p50 < 3.0 V = CRIT, 3.0–3.4 = WARN. Umbrales: señal p05 < −85 CRIT; LQI p05 < 100 CRIT; bat < 3.0V CRIT.
Data caveats: Gateways & sinks show as "unclassifiable" (not silent) because they emit no device-chart series by design. TEROS-One (ter15) shares its base H343 serial with its parent Node — same physical device, listed twice in the API (one radio side, one sensor side). Total device-record count (1515) is the raw API count; dash-2 replacements were checked (none present in current inventory). Advertencias: Gateways/sinks emiten cero series por diseño; TEROS-One comparte serial con Node H343; total 1515 records raw sin duplicados dash-2.