Skip to content

Commit 16ecc44

Browse files
authored
Merge pull request #21 from chaichuk/chaichuk-patch-6
Update monitor.js
2 parents 86bb34d + 0bf7847 commit 16ecc44

File tree

1 file changed

+55
-6
lines changed

1 file changed

+55
-6
lines changed

src/monitor.js

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ async function getYasnoData(url, label) {
228228

229229
// --- ТРАНСФОРМАЦІЇ ---
230230

231+
// 🔥 ОНОВЛЕНА ЛОГІКА ДЛЯ ПОЛТАВИ ТА ІНШИХ JSON 🔥
231232
function transformToSvitloFormat(dtekRaw) {
232233
let daysData = null;
233234
if (dtekRaw?.data?.fact?.data) daysData = dtekRaw.data.fact.data;
@@ -248,21 +249,69 @@ function transformToSvitloFormat(dtekRaw) {
248249
if (!scheduleMap[groupKey]) scheduleMap[groupKey] = {};
249250
if (!scheduleMap[groupKey][dateStr]) scheduleMap[groupKey][dateStr] = {};
250251

252+
// Змінна для зберігання статусу ПОПЕРЕДНЬОЇ години
253+
// За замовчуванням "yes", щоб не малювати відключення на 00:00 без причини
254+
let prevStatus = "yes";
255+
251256
for (let h = 1; h <= 24; h++) {
252257
const status = hours[h.toString()];
253258
const hourIndex = h - 1;
254259
const hh = String(hourIndex).padStart(2, "0");
255260

256-
let val00 = 1, val30 = 1;
261+
let val00 = 1; // 1 = Є світло
262+
let val30 = 1; // 1 = Є світло
263+
257264
switch (status) {
258-
case "yes": val00 = 1; val30 = 1; break;
259-
case "no": val00 = 2; val30 = 2; break;
260-
case "first": val00 = 2; val30 = 1; break;
261-
case "second": val00 = 1; val30 = 2; break;
262-
case "default": val00 = 1; val30 = 1;
265+
case "yes":
266+
val00 = 1; val30 = 1;
267+
break;
268+
269+
case "no":
270+
val00 = 2; val30 = 2; // 2 = Немає світла
271+
break;
272+
273+
// --- Точні відключення (без "m") - це точно НЕМАЄ ---
274+
case "first": // Немає 00-30
275+
val00 = 2; val30 = 1;
276+
break;
277+
278+
case "second": // Немає 30-60
279+
val00 = 1; val30 = 2;
280+
break;
281+
282+
// --- Сірі зони (з "m") - вважаємо, що світло Є (1) ---
283+
284+
case "mfirst":
285+
// "Можливе 1-ша половина". Вважаємо як Є (1).
286+
// Навіть якщо до цього було "no", mfirst означає початок слота зі світлом.
287+
val00 = 1; val30 = 1;
288+
break;
289+
290+
case "msecond":
291+
// "Можливе 2-га половина".
292+
// Друга половина (30-60) - це сіра зона, тому вважаємо Є (1).
293+
val30 = 1;
294+
295+
// Перша половина (00-30) залежить від попередньої години:
296+
if (prevStatus === "no") {
297+
// Якщо минула година була "чорна", то перші 30 хв поточної -
298+
// це гарантоване продовження відключення.
299+
val00 = 2;
300+
} else {
301+
// Інакше все ок, світло є.
302+
val00 = 1;
303+
}
304+
break;
305+
306+
default:
307+
val00 = 1; val30 = 1;
263308
}
309+
264310
scheduleMap[groupKey][dateStr][`${hh}:00`] = val00;
265311
scheduleMap[groupKey][dateStr][`${hh}:30`] = val30;
312+
313+
// Оновлюємо статус для наступної ітерації
314+
prevStatus = status;
266315
}
267316
}
268317
}

0 commit comments

Comments
 (0)