v0.11.4-devices

This commit is contained in:
Mateusz Gruszczyński
2026-09-03 09:58:26 +02:00
parent 500516b0fd
commit f0909a443d
10 changed files with 635 additions and 43 deletions
+15 -4
View File
@@ -74,9 +74,8 @@ document.addEventListener('click', async event => {
}
const action = button.dataset.action; if (!action) return;
const device = app.devices.find(v => v.id === button.dataset.device);
if (device && app.currentView !== 'devices' && deviceZoneDisabled(device.id) && ['power', 'temperature', 'mode', 'fan', 'toggle'].includes(action)) {
return toast(tr('devices.disabledZoneTechnicalOnly'), true);
}
if (action === 'open-ping' && device) { openDevicePing(device.id); return; }
if (action === 'ping-toggle') { if (app.pingMonitor.running) stopPingMonitor(); else startPingMonitor(); return; }
if (action === 'power' && device) return sendDeviceCommand(device.id, current => ({ power: !current?.power }));
if (action === 'temperature' && device) return sendDeviceCommand(device.id, current => ({ target_temperature: clamp(Number(current?.target_temperature ?? device.target_temperature) + Number(button.dataset.delta), 8, 30) }));
if (action === 'mode' && device) return sendDeviceCommand(device.id, { mode: button.dataset.value, power: true });
@@ -324,11 +323,23 @@ $('#discoveryNamesForm').addEventListener('submit', async event => {
$('#renameDeviceForm').addEventListener('submit', async event => {
event.preventDefault(); const form = event.currentTarget, raw = Object.fromEntries(new FormData(form));
await runFormTask(form, async () => {
const device = await api(`/api/devices/${encodeURIComponent(raw.id)}`, { method: 'PATCH', body: { name: raw.name.trim(), protocol_version: Number(raw.protocol_version) } });
const device = await api(`/api/devices/${encodeURIComponent(raw.id)}`, { method: 'PATCH', body: { name: raw.name.trim(), ip: raw.ip.trim(), port: Number(raw.port), protocol_version: Number(raw.protocol_version) } });
updateDevice(device); form.closest('dialog').close(); renderAll(); toast(tr('common.saved'));
});
});
$('#pingDeviceSelect')?.addEventListener('change', event => {
app.pingMonitor.targetId = event.target.value;
renderPingDialog();
if (app.pingMonitor.running) schedulePingCycle(0);
});
$('#pingAllDevices')?.addEventListener('change', event => {
app.pingMonitor.all = event.target.checked;
renderPingDialog();
if (app.pingMonitor.running) schedulePingCycle(0);
});
$('#pingDialog')?.addEventListener('close', () => stopPingMonitor());
$('#deviceForm').addEventListener('submit', async event => {
event.preventDefault(); const form = event.currentTarget, data = Object.fromEntries(new FormData(form));
data.port = Number(data.port); data.protocol_version = Number(data.protocol_version); data.simulated = form.simulated.checked;