Add NFC enable/disable support; update devices, Sonoff, and Tuya

This commit is contained in:
2026-04-13 21:35:17 +03:00
parent 86bfecca26
commit 5340f88ffe
15 changed files with 843 additions and 175 deletions

View File

@@ -87,6 +87,14 @@
<!-- Current relay & timeout -->
<dl class="row mb-0 small">
<dt class="col-5 text-secondary">Module state</dt>
<dd class="col-7" id="module-state-dd">
{% if nfc.get('nfc_enabled') %}
<span class="badge text-bg-success"><i class="bi bi-toggle-on me-1"></i>Enabled</span>
{% else %}
<span class="badge text-bg-secondary"><i class="bi bi-toggle-off me-1"></i>Disabled</span>
{% endif %}
</dd>
<dt class="col-5 text-secondary">Trigger relay</dt>
<dd class="col-7 fw-semibold" id="relay-display">Relay {{ nfc.get('relay_num', 1) }}</dd>
<dt class="col-5 text-secondary">Absence timeout</dt>
@@ -101,6 +109,34 @@
<div class="col-lg-7 d-flex flex-column gap-4">
{% if current_user.is_admin() %}
<!-- ── Module Enable / Disable ─────────────────────────────────────── -->
<div class="card border-0 rounded-4">
<div class="card-header bg-transparent fw-semibold pt-3">
<i class="bi bi-toggle-on me-1 text-primary"></i> Mifare / NFC Module
</div>
<div class="card-body d-flex align-items-center justify-content-between gap-3">
<div>
<div class="fw-semibold mb-1">Access control module</div>
<div class="text-secondary small">When disabled the board stops polling the PN532 and will not open any relay on card presentation. The setting persists across power cycles.</div>
</div>
<form method="POST" action="{{ url_for('boards.nfc_enable', board_id=board.id) }}" class="flex-shrink-0">
{% if nfc.get('nfc_enabled') %}
<input type="hidden" name="enabled" value="0">
<button type="submit" id="nfc-toggle-btn"
class="btn btn-success d-flex align-items-center gap-2" style="min-width:140px">
<i class="bi bi-toggle-on fs-5"></i><span>Enabled</span>
</button>
{% else %}
<input type="hidden" name="enabled" value="1">
<button type="submit" id="nfc-toggle-btn"
class="btn btn-secondary d-flex align-items-center gap-2" style="min-width:140px">
<i class="bi bi-toggle-off fs-5"></i><span>Disabled</span>
</button>
{% endif %}
</form>
</div>
</div>
<!-- ── Quick Enroll ──────────────────────────────────────────────────── -->
<div class="card border-0 rounded-4">
<div class="card-header bg-transparent fw-semibold pt-3">
@@ -252,6 +288,13 @@ function loadStatus() {
if (relayDisp) relayDisp.textContent = 'Relay ' + (d.relay_num || 1);
const pulseDisp = document.getElementById('pulse-display');
if (pulseDisp) pulseDisp.textContent = (d.pulse_ms || 3000) + ' ms';
// module enabled/disabled summary in left card
const modDd = document.getElementById('module-state-dd');
if (modDd) {
modDd.innerHTML = d.nfc_enabled
? '<span class="badge text-bg-success"><i class="bi bi-toggle-on me-1"></i>Enabled</span>'
: '<span class="badge text-bg-secondary"><i class="bi bi-toggle-off me-1"></i>Disabled</span>';
}
})
.catch(() => {})
.finally(() => {