// HivePage.jsx — full-page hive detail (CP-7 inline view)
function findHiveFallback(hiveId) {
const all = Object.values((DATA && DATA.hives) || {}).flat();
const row = all.find((item) => item.id === hiveId) || all[0] || null;
if (!row) return null;
return {
id: row.id,
name: `Улей ${row.id}`,
zone_id: row.zone_id || null,
status: row.state || "ok",
activity_per_min: row.departures_per_min || null,
gate_status: row.gate_status || null,
gate_device_id: row.gate_device_id || "C771-3308-1100",
};
}
function HivePage({ onClose, hiveId }) {
const [tab, setTab] = React.useState("telemetry");
const [gateHive, setGateHive] = React.useState(null);
const [gateDeviceStatus, setGateDeviceStatus] = React.useState("ok");
const HiveGateControl = window.HiveGateControl;
const TelemetryChart = window.TelemetryChart;
const resolvedHiveId = hiveId || "B-06";
React.useEffect(() => {
let cancelled = false;
async function load() {
let hive = null;
try {
hive = await Keeper.api.hive(resolvedHiveId);
} catch (_) {
hive = findHiveFallback(resolvedHiveId);
}
if (cancelled) return;
setGateHive(hive);
if (!hive?.gate_device_id) return;
try {
const gateDevice = await Keeper.api.device(hive.gate_device_id);
if (!cancelled) setGateDeviceStatus(gateDevice?.status || "ok");
} catch (_) {
if (!cancelled) setGateDeviceStatus(hive?.status || "ok");
}
}
load();
return () => { cancelled = true; };
}, [resolvedHiveId]);
return (
Улей B-09
Зона AB1 · 6 станция · колония 41 дн. · обновлено 14:38
Активность
74/мин
▼ 18 % за 3 дня
Темп. в улье
22,1°C
норма 21–25
Возраст колонии
41дн.
→ замена 12 фев
{tab==="telemetry" && (
<>
{/* [TASK_START:T007] */}
{TelemetryChart ? (
) : (
Компонент графика не загружен
)}
{/* [TASK_COMPLETE:T007] */}
Леток · задвижка
ОткрытаРасписание: 06:00–11:00, 18:00–21:00
АвторежимСледовать расписанию опыления
Активность падает 3-й день. Возраст колонии — 41 день. Запланируйте замену до 12 февраля.
{/* [TASK_START:T008] */}
{HiveGateControl && gateHive?.gate_device_id && (
)}
{/* [TASK_COMPLETE:T008] */}
>
)}
{tab==="history" && (
Журнал событий
Активность ниже нормы 3-й час
Снижение активности на 18 %
Калибровка датчика активности · П. Сидоров
Установка колонии · М. Кузьмин
OTA v3.0.2 на задвижке
)}
{tab==="commands" && (
Последние команды
| Время | Действие | Кем | Статус |
| 14:18 | Открыть задвижку | авто (правило) | Выполнено |
| 11:00 | Закрыть задвижку | авто (расписание) | Выполнено |
| 06:00 | Открыть задвижку | авто (расписание) | Выполнено |
| 9 фев 22:14 | Калибровка датчика | П. Сидоров | Выполнено |
)}
{tab==="config" && (
Конфигурация устройства
| ID задвижки | E990-1213-AA5C |
| Прошивка | v3.0.2 (стабильная) |
| Связь | RSSI −68 dBm · 2,1 КБ/ч |
| Батарея | 71 % · ~84 дн. |
| Расписание опыления | 06:00–11:00, 18:00–21:00 (по умолч.) |
| Установлено | 14 янв 2026 · М. Кузьмин |
)}
);
}
window.HivePage = HivePage;