From 89155c3f2a33a2e9319c662ea2dd83fe43239eef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Przemys=C5=82aw=20Kie=C5=82kowski?=
Date: Fri, 31 Jul 2026 08:16:36 +0200
Subject: [PATCH] =?UTF-8?q?Wska=C5=BAnik=20offline:=20ramka=20zamiast=20be?=
=?UTF-8?q?lki=20+=20naprawa=20cyklicznego=20migania?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Dwa zgłoszenia z kiosku (2026-07-31):
1. BELKA ZASŁANIAŁA DANE ALS. Pełnoekranowy pasek u góry zajmował pas
ekranu i obcinał dane informacyjne w iframe. Zastąpiony cienką pulsującą
RAMKĄ wokół całego ekranu (pointer-events: none, niczego nie zakrywa)
plus małą plakietką w rogu. Z daleka widoczna równie dobrze.
2. WSKAŹNIK MIGAŁ zamiast świecić ciągle. disconnectedSince było resetowane
przy KAŻDEJ nieudanej próbie reconnectu, nie tylko przy przejściu
połączone->rozłączone — przy odstępie ponowień > 10 s (backoff dochodzi
do 30 s) licznik ciszy zerował się co próbę i wskaźnik cyklicznie znikał
i wracał. Teraz znacznik początku przerwy ustawiany wyłącznie przy
przejściu ze stanu połączonego.
Kontekst zgłoszenia: strona działa jeszcze przeciw STAREMU LuPortowi,
który nie ma kanału zbiorczego ani uwierzytelniania WS — połączenie pada
ciągle (oczekiwane do czasu wdrożenia; potem wstaje bez zmian), a błąd
zamieniał tę ciągłą przerwę w miganie.
Testy: scenariusz 7 próbkuje wskaźnik co 500 ms przez 90 s ciągłej awarii
i wymaga 100% aktywnych próbek — z błędem aktywnych było 51/182 (72% czasu
zgaszony; dokładnie zgłoszone "pojawia się i znika"). Fałszywy WebSocket
odrzuca teraz połączenia jak przeglądarka (onclose po nieudanej próbie),
więc długa przerwa z ponowieniami jest testowalna. 11/11 scenariuszy PASS,
mutacja poprawki wywraca scenariusz 7.
Co-Authored-By: Claude Fable 5
---
README.md | 29 ++++--
als_alert_screen.html | 86 +++++++++++-------
test/__pycache__/testy_ekranu.cpython-313.pyc | Bin 0 -> 10332 bytes
test/testy_ekranu.py | 61 +++++++++----
4 files changed, 118 insertions(+), 58 deletions(-)
create mode 100644 test/__pycache__/testy_ekranu.cpython-313.pyc
diff --git a/README.md b/README.md
index 85bfd50..6baea8e 100644
--- a/README.md
+++ b/README.md
@@ -18,13 +18,15 @@ także po każdym wznowieniu połączenia.
|----------|-------|
| Brak maszyny w alarmie | Iframe z infoterminalem ALS |
| Co najmniej jedna maszyna w alarmie | Ekran alarmowy z kartami maszyn |
-| Brak łączności z LuPort > 10 s | Pomarańczowy pasek u góry (na obu widokach) |
+| Brak łączności z LuPort > 10 s | Pomarańczowa pulsująca ramka wokół ekranu + plakietka w rogu (na obu widokach) |
Alarm jest wykrywany, gdy pole `status` maszyny zawiera słowo **`alarm`**
(bez rozróżnienia wielkości liter), np. `"Alarm - awaria"`, `"ALARM"`.
-Pomarańczowy pasek to celowo INNY kolor niż czerwień alarmów: mówi „ekran może
-pokazywać nieświeży obraz", a nie „maszyna stoi".
+Wskaźnik offline to cienka pulsująca RAMKA wokół całego ekranu plus mała
+plakietka w rogu — niczego nie zasłania (pełnoekranowa belka zakrywała dane
+ALS w iframe). Pomarańcz to celowo INNY kolor niż czerwień alarmów: mówi
+„ekran może pokazywać nieświeży obraz", a nie „maszyna stoi".
---
@@ -39,7 +41,7 @@ Wszystkie parametry na początku sekcji `