sokolov-sbs-flowserver/flow/handledepartures.js
2025-08-07 21:49:01 +02:00

1261 lines
51 KiB
JavaScript

exports.id = 'handledepartures';
exports.title = 'Handle departures';
exports.group = 'Worksys';
exports.color = '#5D9CEC';
exports.version = '0.0.1';
exports.output = ['white'];
exports.input = 2;
exports.author = 'Rastislav Kovac';
exports.icon = 'cloud-upload';
exports.readme = `Handle bus departures responses from service-prod01.worksys.io`;
const { execSync } = require('child_process');
const fs = require('fs');
/**
* Calculates Easter in the Gregorian/Western (Catholic and Protestant) calendar
* based on the algorithm by Oudin (1940) from http://www.tondering.dk/claus/cal/easter.php
* @returns {array} [int month, int day]
*/
function getEaster(year) {
var f = Math.floor,
// Golden Number - 1
G = year % 19,
C = f(year / 100),
// related to Epact
H = (C - f(C / 4) - f((8 * C + 13) / 25) + 19 * G + 15) % 30,
// number of days from 21 March to the Paschal full moon
I = H - f(H / 28) * (1 - f(29 / (H + 1)) * f((21 - G) / 11)),
// weekday for the Paschal full moon
J = (year + f(year / 4) + I + 2 - C + f(C / 4)) % 7,
// number of days from 21 March to the Sunday on or before the Paschal full moon
L = I - J,
month = 3 + f((L + 40) / 44),
day = L + 28 - 31 * f(month / 4);
return [month, day];
}
const pracovneDni = ['Pondeli', 'Uteri', 'Streda', 'Ctvrtek', 'Patek'];
const statneSviatky = [
'1.1',
'7.4', //velky piatok
'10.4', // Veľkonočný pondelok - deň pracovného pokoja
'1.5', '8.5', '5.7', '6.7', '28.9', '28.10', '17.11', '24.12', '25.12', '26.12'
];
const v32_42 = [
'23.12', '24.12', '25.12', '26.12', '27.12', '28.12', '29.12', '30.12', '31.12',
'1.1', '2.1', '6.2', '7.2', '8.2', '9.2', '10.2', '11.2', '12.2', '6.4', '1.9'
];
exports.install = function(instance) {
let departures = [];
let firstDepartureTime = "00:00";
instance.on('0', function(flowdata) {
firstDepartureTime = "00:00";
departures = flowdata.data;
//console.log("^^^^^^^^^^^^", departures);
return;
const dnesnyDatum = flowdata.data; // ['22.12', 'streda']
console.log('++++++++++ densnyDatum', dnesnyDatum)
let vysvetlivky = new Set();
if (statneSviatky.includes(dnesnyDatum[0])) {
vysvetlivky.add('6+');
if (dnesnyDatum[0] == '17.11') {
vysvetlivky.add('17'); // ide iba 17.11, vysvetlivky = ['6+', '17']
}
else if (dnesnyDatum[0] == '25.12' || dnesnyDatum[0] == '1.1') {
vysvetlivky.add('25'); // nejede 25.12.2022,1.1.2023,25.12.2023 ['6+', '25']
}
else if (dnesnyDatum[0] == '31.12') {
vysvetlivky.add('31'); // nejede 31.12 ['6+', '31']
}
else if (dnesnyDatum[0] == '24.12') {
vysvetlivky.add('24'); // nejede 24.12 ['6+', '24']
}
}
else if (pracovneDni.includes(dnesnyDatum[1])) {
vysvetlivky.add('X');
}
else if (dnesnyDatum[1] == 'Sobota' || dnesnyDatum[1] === 'Nedele') {
vysvetlivky.add('6+')
}
const d = new Date();
const month = d.getMonth();
if (v32_42.includes(dnesnyDatum[0])) {
vysvetlivky.add('32');
vysvetlivky.add('42');
}
else if (month == 6 || month == 7) //ked je mesiac jul august
{
vysvetlivky.add('32');
vysvetlivky.add('42');
vysvetlivky.add('33');
}
console.log('', vysvetlivky);
// X jede v pracovních dnech
// 6 jede v sobotu
// + jede v neděli a ve státem uznané svátky
// 17 jede jen 17.11.2023
// 32 jede od 23.12.2022 do 2.1.2023,3.2.2023, od 6.2.2023 do 12.2.2023,6.4.2023, od 1.7.2023 do 1.9.2023, od 26.10.2023 do 27.10.2023, od 23.12.2023 do 31.12.2023
// 42 nejede od 23.12.2022 do 2.1.2023,3.2.2023, od 6.2.2023 do 12.2.2023,6.4.2023, od 1.7.2023 do 1.9.2023, od 26.10.2023 do 27.10.2023, od 23.12.2023 do 31.12.2023
// 24 nejede 24.12.2022,24.12.2023
// 31 nejede 31.12.2022,31.12.2023
// 25 nejede 25.12.2022,1.1.2023,25.12.2023
// 33 jede od 1.7.2023 do 1.9.2023
departures = [];
for (let i = 0; i < allDepartures.length; i++) {
departure = allDepartures[i];
const params = departure[3].length;
if (params == 1) {
v = departure[3][0]
if (v == 'X' && vysvetlivky.has('X')) departures.push(departure);
else if (v == '6+' && vysvetlivky.has('6+')) departures.push(departure);
else if (v == '25' && vysvetlivky.has('25')) continue;
else if (v == '17' && vysvetlivky.has('17')) departures.push(departure);
else if (v == '24' && vysvetlivky.has('24')) continue;
}
else if (params == 2) {
v1 = departure[3][0];
v2 = departure[3][1];
if (v1 == "X" && vysvetlivky.has('X')) {
if (v2 == "42" && vysvetlivky.has('42')) continue;
if (v2 == "42" && !vysvetlivky.has('42')) departures.push(departure);
if (v2 == "32" && vysvetlivky.has('32')) departures.push(departure);
if (v2 == "32" && !vysvetlivky.has('32')) departures.push(departure);
if (v2 == "31" && vysvetlivky.has('31')) continue;
if (v2 == "31" && !vysvetlivky.has('31')) departures.push(departure);
}
else if (v1 == "6+" && vysvetlivky.has('6+')) {
if (v2 == "25" && vysvetlivky.has('25')) continue;
if (v2 == "24" && vysvetlivky.has('24')) continue;
if (v2 == "25" && !vysvetlivky.has('25')) departures.push(departure);
if (v2 == "24" && !vysvetlivky.has('24')) departures.push(departure);
if (v2 == "33" && vysvetlivky.has('33')) departures.push(departure);
}
}
}
console.log(departures);
fs.writeFileSync('dayDepartures.txt', JSON.stringify(dnesnyDatum) + '\n', { flag: "a" });
departures.map(departure => {
fs.writeFileSync('dayDepartures.txt', JSON.stringify(departure) + '\n', { flag: "a" });
})
fs.writeFileSync('dayDepartures.txt', "\n", { flag: "a" });
})
instance.on('1', function(flowdata) {
// for some reason new Date() function does not set month and year in local timezone, so we use "timedatectl" command
// let dateFromCommand = execSync("timedatectl", {}).toString();
// let first = dateFromCommand.search("time:");
// let last = dateFromCommand.search(" CE");
// dateFromCommand = dateFromCommand.slice(first, last); //Thu 2022-04-07 13:38:03
// const d = new Date(dateFromCommand);
const d = new Date();
let hour = d.getHours();
let minute = d.getMinutes();
//console.log('******hour, minute', hour, minute)
if (minute < 10) minute = `0${minute}`;
if (hour < 10) hour = `0${hour}`;
const now = `${hour}:${minute}`;
//console.log('******--------', firstDepartureTime, now);
//console.log('******--------', firstDepartureTime < now);
if (firstDepartureTime < now) {
departures = departures.filter(departure => {
const timeOfDeparture = departure[1];
if (now < timeOfDeparture) return true;
return false;
})
if (departures.length > 0) firstDepartureTime = departures[0][1];
else firstDepartureTime = "00:00";
instance.send(0, departures.slice(0, 10));
}
})
}
// exports.id = 'handledepartures';
// exports.title = 'Handle departures';
// exports.group = 'Worksys';
// exports.color = '#5D9CEC';
// exports.version = '0.0.1';
// exports.output = ['white'];
// exports.input = 2;
// exports.author = 'Rastislav Kovac';
// exports.icon = 'cloud-upload';
// exports.readme = `Handle bus departures responses from service-prod01.worksys.io`;
// const { execSync } = require('child_process');
// /**
// * Calculates Easter in the Gregorian/Western (Catholic and Protestant) calendar
// * based on the algorithm by Oudin (1940) from http://www.tondering.dk/claus/cal/easter.php
// * @returns {array} [int month, int day]
// */
// function getEaster(year) {
// var f = Math.floor,
// // Golden Number - 1
// G = year % 19,
// C = f(year / 100),
// // related to Epact
// H = (C - f(C / 4) - f((8 * C + 13)/25) + 19 * G + 15) % 30,
// // number of days from 21 March to the Paschal full moon
// I = H - f(H/28) * (1 - f(29/(H + 1)) * f((21-G)/11)),
// // weekday for the Paschal full moon
// J = (year + f(year / 4) + I + 2 - C + f(C / 4)) % 7,
// // number of days from 21 March to the Sunday on or before the Paschal full moon
// L = I - J,
// month = 3 + f((L + 40)/44),
// day = L + 28 - 31 * f(month / 4);
// return [month,day];
// }
// const pracovneDni = ['Pondeli', 'Uteri', 'Streda', 'Ctvrtek', 'Patek'];
// const statneSviatky = [
// '1.1',
// '7.4', //velky piatok
// '10.4', // Veľkonočný pondelok - deň pracovného pokoja
// '1.5','8.5','5.7','6.7','28.9','28.10','17.11','24.12','25.12','26.12'
// ];
// const v32_42 = [
// '23.12','24.12','25.12','26.12','27.12','28.12','29.12','30.12','31.12',
// '1.1','2.1','6.2','7.2','8.2','9.2','10.2','11.2','12.2','6.4','1.9'
// ];
// exports.install = function(instance) {
// let departures = [];
// let departuresToDisplay = [];
// let firstTimeInDisplayedDepartures = "00:00";
// instance.on('0', function(flowdata) {
// firstTimeInDisplayedDepartures = "00:00";
// const dnesnyDatum = flowdata.data; // ['22.12', 'streda']
// console.log('++++++++++ densnyDatum', dnesnyDatum)
// let vysvetlivky = new Set();
// const d = new Date();
// const month = d.getMonth();
// if(statneSviatky.includes(dnesnyDatum[0]))
// {
// vysvetlivky.add('6+');
// if(dnesnyDatum[0] == '17.11')
// {
// vysvetlivky.add('17'); // ide iba 17.11, vysvetlivky = ['6+', '17']
// }
// else if(dnesnyDatum[0] == '25.12' || dnesnyDatum[0] == '1.1')
// {
// vysvetlivky.add('25'); // nejede 25.12.2022,1.1.2023,25.12.2023 ['6+', '25']
// }
// else if(dnesnyDatum[0] == '31.12')
// {
// vysvetlivky.add('31'); // nejede 31.12 ['6+', '31']
// }
// else if(dnesnyDatum[0] == '24.12')
// {
// vysvetlivky.add('24'); // nejede 24.12 ['6+', '24']
// }
// }
// else if(pracovneDni.includes(dnesnyDatum[1]))
// {
// vysvetlivky.add('X');
// }
// else if(dnesnyDatum[1] == 'Sobota' || dnesnyDatum[1] === 'Nedele')
// {
// vysvetlivky.add('6+')
// }
// if(v32_42.includes(dnesnyDatum[0]) || month == 6 || month == 7) //ked je mesiac jul august
// {
// vysvetlivky.add('32');
// vysvetlivky.add('42');
// }
// console.log('', vysvetlivky);
// // X jede v pracovních dnech
// // 6 jede v sobotu
// // + jede v neděli a ve státem uznané svátky
// // 17 jede jen 17.11.2023
// // 32 jede od 23.12.2022 do 2.1.2023,3.2.2023, od 6.2.2023 do 12.2.2023,6.4.2023, od 1.7.2023 do 1.9.2023, od 26.10.2023 do 27.10.2023, od 23.12.2023 do 31.12.2023
// // 42 nejede od 23.12.2022 do 2.1.2023,3.2.2023, od 6.2.2023 do 12.2.2023,6.4.2023, od 1.7.2023 do 1.9.2023, od 26.10.2023 do 27.10.2023, od 23.12.2023 do 31.12.2023
// // 24 nejede 24.12.2022,24.12.2023
// // 31 nejede 31.12.2022,31.12.2023
// // 25 nejede 25.12.2022,1.1.2023,25.12.2023
// departures = [];
// for(let i = 0; i < allDepartures.length; i++)
// {
// departure = allDepartures[i];
// const params = departure[3].length;
// if(params == 1)
// {
// v = departure[3][0]
// if(v == 'X' && vysvetlivky.has('X')) departures.push(departure);
// else if(v == '6+' && vysvetlivky.has('6+')) departures.push(departure);
// else if(v == '25' && vysvetlivky.has('25')) continue;
// else if(v == '17' && vysvetlivky.has('17')) departures.push(departure);
// else if(v == '24' && vysvetlivky.has('24')) continue;
// }
// else if(params == 2)
// {
// v1 = departure[3][0];
// v2 = departure[3][1];
// if(v1 == "X" && vysvetlivky.has('X'))
// {
// if(v2 == "42" && vysvetlivky.has('42')) continue;
// if(v2 == "42" && !vysvetlivky.has('42')) departures.push(departure);
// if(v2 == "32" && vysvetlivky.has('32')) departures.push(departure);
// if(v2 == "32" && !vysvetlivky.has('32')) departures.push(departure);
// if(v2 == "31" && vysvetlivky.has('31')) continue;
// if(v2 == "31" && !vysvetlivky.has('31')) departures.push(departure);
// }
// else if(v1 == "6+" && vysvetlivky.has('6+'))
// {
// if(v2 == "25" && vysvetlivky.has('25')) continue;
// if(v2 == "24" && vysvetlivky.has('24')) continue;
// if(v2 == "25" && !vysvetlivky.has('25')) departures.push(departure);;
// if(v2 == "24" && !vysvetlivky.has('24')) departures.push(departure);;
// }
// }
// }
// console.log(departures);
// departuresToDisplay = [...departures]; // to make sure, "departuresToDisplay" is not an empty array after script start
// })
// instance.on('1', function(flowdata) {
// // for some reason new Date() function does not set month and year in local timezone, so we use "timedatectl" command
// let dateFromCommand = execSync("timedatectl", {}).toString();
// let first = dateFromCommand.search("time:");
// let last = dateFromCommand.search(" CE");
// dateFromCommand = dateFromCommand.slice(first, last); //Thu 2022-04-07 13:38:03
// const d = new Date(dateFromCommand);
// let hour = d.getHours();
// let minute = d.getMinutes();
// console.log('******hour, minute',hour, minute)
// if(minute < 10) minute = `0${minute}`;
// if(hour < 10) hour = `0${hour}`;
// const now = `${hour}:${minute}`;
// console.log('******--------', firstTimeInDisplayedDepartures, now);
// console.log('******--------', firstTimeInDisplayedDepartures < now);
// console.log('******-------- if', firstTimeInDisplayedDepartures < now && departuresToDisplay.length > 0);
// if(firstTimeInDisplayedDepartures < now && departuresToDisplay.length > 0)
// {
// //after all buses have departed, "departuresToDisplay" will stay an empty array till the next day
// //so we do not have to repeat iteration through "departures" every minute
// departuresToDisplay = [];
// departures.map(departure => {
// const timeOfDep = departure[1];
// if(now < timeOfDep && departuresToDisplay.length < 10)
// {
// departuresToDisplay.push(departure);
// }
// })
// if(departuresToDisplay.length > 0) firstTimeInDisplayedDepartures = departuresToDisplay[0][1];
// console.log(departuresToDisplay);
// instance.send(0, departuresToDisplay);
// }
// })
// }
const allDepartures = [
["3", "04:09", "Závodu míru", ["X", "25"]],
["3", "04:29", "Závodu míru", ["X"]],
["1", "04:50", "Březová, aut. st.", ["X"]],
["3", "04:52", "Závodu míru", ["X"]],
["3", "04:56", "Závodu míru", ["6+", "25"]],
["3", "05:02", "Závodu míru", ["X"]],
["4", "05:05", "Závodu míru", ["X"]],
["6", "05:07", "Sídl. Michal škola", ["X", "42"]],
["6", "05:07", "Závodu míru", ["X", "32"]],
["3", "05:09", "Závodu míru", ["X", "42"]],
["3", "05:22", "Závodu míru", ["X"]],
["1", "05:23", "Březová, aut. st.", ["X"]],
["6", "05:34", "Sídl. Michal škola", ["X", "42"]],
["4", "05:35", "Stará Ovčárna", ["X"]],
["3", "05:36", "Sídl. Michal škola", ["X", "42"]],
["3", "05:38", "Sídliště Michal", ["X", "32"]],
["1", "05:47", "Březová, aut. st.", ["6+", "25"]],
["1", "05:51", "Březová, aut. st.", ["X"]],
["3", "05:57", "Závodu míru", ["6+", "25"]],
["3", "05:58", "Závodu míru", ["X"]],
["6", "06:04", "Sídl. Michal škola", ["X", "42"]],
["1", "06:13", "Březová, aut. st.", ["X"]],
["3", "06:16", "Závodu míru", ["X", "42"]],
["3", "06:19", "Závodu míru", ["X", "32"]],
["3", "06:24", "Sídliště Michal", ["X"]],
["3", "06:24", "Závodu míru", ["6+", "25"]],
["4", "06:31", "Závodu míru", ["X", "42"]],
["6", "06:32", "Sídl. Michal škola", ["X", "32"]],
["3", "06:34", "Závodu míru", ["X"]],
["6", "06:34", "Sídl. Michal škola", ["X", "42"]],
["1", "06:46", "Březová, aut. st.", ["X"]],
["33", "06:49", "Sídl. Michal škola", ["X", "42"]],
["3", "06:56", "Závodu míru", ["X", "32"]],
["3", "06:56", "Závodu míru", ["X", "42"]],
["3", "06:56", "Závodu míru", ["6+"]],
["1", "06:57", "Březová, aut. st.", ["6+", "25"]],
["3", "07:04", "Závodu míru", ["X"]],
["1", "07:05", "Březová, aut. st.", ["X"]],
["3", "07:14", "Závodu míru", ["X"]],
["3", "07:19", "Závodu míru", ["6+"]],
["6", "07:23", "Sídl. Michal škola", ["X", "42"]],
["33", "07:27", "Sídl. Michal škola", ["17"]],
["3", "07:27", "Sídliště Michal", ["X", "32"]],
["3", "07:27", "Sídl. Michal škola", ["17"]],
["2", "07:31", "Sídliště Michal", ["X", "42"]],
["3", "07:34", "Závodu míru", ["X", "42"]],
["4", "07:34", "Závodu míru", ["X"]],
["1", "07:35", "Březová, aut. st.", ["X"]],
["3", "07:45", "Sídliště Michal", ["X"]],
["3", "07:51", "Závodu míru", ["6+"]],
["33", "07:54", "Sídl. Michal škola", ["X", "42"]],
["3", "07:54", "Závodu míru", ["17"]],
["1", "07:55", "Březová, aut. st.", ["X"]],
["1", "07:57", "Březová, aut. st.", ["6+"]],
["3", "07:58", "Závodu míru", ["X", "42"]],
["3", "08:10", "Závodu míru", ["X", "32"]],
["3", "08:15", "Závodu míru", ["X", "42"]],
["3", "08:15", "Závodu míru", ["6+"]],
["1", "08:18", "Březová, aut. st.", ["X"]],
["33", "08:29", "Sídl. Michal škola", ["X"]],
["3", "08:34", "Závodu míru", ["X"]],
["3", "08:50", "Stará Ovčárna", ["X"]],
["3", "08:51", "Závodu míru", ["6+"]],
["33", "08:54", "Sídl. Michal škola", ["X"]],
["1", "08:57", "Březová, aut. st.", ["6+"]],
["3", "09:04", "Závodu míru", ["X"]],
["1", "09:09", "Březová, aut. st.", ["X"]],
["3", "09:20", "Závodu míru", ["6+"]],
["3", "09:24", "Závodu míru", ["X"]],
["33", "09:34", "Sídl. Michal škola", ["X"]],
["3", "09:38", "Jezero Michal", ["6+", "33"]],
["4", "09:41", "Sídliště Michal", ["X"]],
["1", "09:44", "Březová, aut. st.", ["6+"]],
["3", "09:45", "Závodu míru", ["X"]],
["3", "09:51", "Závodu míru", ["6+"]],
["1", "09:58", "Březová, aut. st.", ["X"]],
["3", "09:59", "Jezero Michal", ["X"]],
["7", "10:14", "Březová, aut.st.", ["X"]],
["3", "10:19", "Závodu míru", ["6+"]],
["33", "10:24", "Sídl. Michal škola", ["X"]],
["3", "10:40", "Závodu míru", ["X"]],
["3", "10:43", "Jezero Michal", ["6+", "33"]],
["1", "10:55", "Březová, aut. st.", ["X"]],
["3", "10:55", "Závodu míru", ["X"]],
["1", "10:57", "Březová, aut. st.", ["6+"]],
["3", "11:02", "Závodu míru", ["6+"]],
["3", "11:17", "Závodu míru", ["X"]],
["33", "11:29", "Sídl. Michal škola", ["X"]],
["3", "11:29", "Závodu míru", ["6+"]],
["3", "11:44", "Závodu míru", ["X"]],
["1", "11:46", "Březová, aut. st.", ["X"]],
["1", "11:49", "Březová, aut. st.", ["6+"]],
["3", "11:51", "Závodu míru", ["6+"]],
["33", "11:56", "Sídl. Michal škola", ["X"]],
["3", "12:05", "Závodu míru", ["X"]],
["3", "12:19", "Závodu míru", ["6+"]],
["3", "12:24", "Jezero Michal", ["X"]],
["1", "12:33", "Březová, aut. st.", ["X"]],
["3", "12:38", "Jezero Michal", ["6+", "33"]],
["3", "12:44", "Závodu míru", ["X"]],
["3", "12:51", "Závodu míru", ["6+"]],
["1", "12:57", "Březová, aut. st.", ["6+"]],
["3", "12:59", "Závodu míru", ["X"]],
["6", "12:59", "Sídl. Michal škola", ["X", "42"]],
["33", "13:04", "Sídl. Michal škola", ["X"]],
["1", "13:06", "Březová, aut. st.", ["X"]],
["3", "13:15", "Závodu míru", ["X"]],
["2", "13:17", "Sídliště Michal", ["X"]],
["1", "13:22", "Březová, aut. st.", ["X"]],
["3", "13:24", "Stará Ovčárna", ["X"]],
["3", "13:28", "Závodu míru", ["6+"]],
["33", "13:39", "Sídl. Michal škola", ["X"]],
["1", "13:48", "Březová, aut. st.", ["X"]],
["3", "13:51", "Závodu míru", ["6+"]],
["1", "13:57", "Březová, aut. st.", ["6+"]],
["33", "14:04", "Sídl. Michal škola", ["X"]],
["6", "14:04", "Sídl. Michal škola", ["X"]],
["4", "14:06", "Stará Ovčárna", ["X"]],
["3", "14:09", "Závodu míru", ["X"]],
["1", "14:10", "Březová, aut. st.", ["X"]],
["3", "14:19", "Závodu míru", ["6+"]],
["3", "14:21", "Závodu míru", ["X"]],
["1", "14:34", "Březová, aut. st.", ["X"]],
["6", "14:34", "Sídl. Michal škola", ["X"]],
["4", "14:42", "Závodu míru", ["X"]],
["3", "14:43", "Závodu míru", ["X"]],
["33", "14:46", "Sídl. Michal škola", ["X"]],
["1", "14:49", "Březová, aut. st.", ["6+"]],
["3", "14:51", "Závodu míru", ["6+"]],
["3", "14:52", "Závodu míru", ["X"]],
["1", "15:09", "Březová, aut. st.", ["X"]],
["33", "15:09", "Sídl. Michal škola", ["X"]],
["3", "15:13", "Závodu míru", ["X"]],
["6", "15:14", "Sídl. Michal škola", ["X"]],
["3", "15:19", "Závodu míru", ["6+"]],
["3", "15:23", "Sokolov, Hrušková", ["X", "42"]],
["3", "15:30", "Závodu míru", ["X"]],
["1", "15:31", "Březová, aut. st.", ["X"]],
["3", "15:38", "Jezero Michal", ["6+", "33"]],
["33", "15:39", "Sídl. Michal škola", ["X"]],
["3", "15:39", "Jezero Michal", ["X"]],
["3", "15:51", "Závodu míru", ["6+"]],
["7", "15:54", "Březová, aut.st.", ["X"]],
["1", "15:57", "Březová, aut. st.", ["6+"]],
["3", "16:00", "Sídl. Michal škola", ["X", "42"]],
["4", "16:06", "Závodu míru", ["X"]],
["33", "16:14", "Sídl. Michal škola", ["X"]],
["3", "16:14", "Závodu míru", ["X"]],
["1", "16:21", "Březová, aut. st.", ["X"]],
["3", "16:28", "Závodu míru", ["6+"]],
["7", "16:29", "Březová, aut.st.", ["X"]],
["3", "16:35", "Závodu míru", ["X"]],
["6", "16:44", "Sídl. Michal škola", ["X", "42"]],
["3", "16:48", "Závodu míru", ["X"]],
["4", "16:51", "Závodu míru", ["X", "42"]],
["3", "16:53", "Závodu míru", ["6+"]],
["1", "16:57", "Březová, aut. st.", ["6+"]],
["7", "16:59", "Březová, aut.st.", ["X"]],
["3", "17:09", "Jezero Michal", ["X"]],
["3", "17:14", "Závodu míru", ["6+"]],
["3", "17:18", "Závodu míru", ["X"]],
["3", "17:34", "Závodu míru", ["X"]],
["1", "17:38", "Březová, aut. st.", ["X"]],
["3", "17:38", "Jezero Michal", ["6+", "33"]],
["3", "17:51", "Závodu míru", ["6+"]],
["3", "17:57", "Závodu míru", ["X"]],
["3", "18:14", "Závodu míru", ["X"]],
["3", "18:21", "Závodu míru", ["X"]],
["3", "18:21", "Stará Ovčárna", ["6+"]],
["1", "18:24", "Březová, aut. st.", ["6+"]],
["1", "18:26", "Březová, aut. st.", ["X"]],
["3", "18:34", "Závodu míru", ["X"]],
["3", "18:51", "Závodu míru", ["6+"]],
["3", "18:54", "Závodu míru", ["X"]],
["1", "19:08", "Březová, aut. st.", ["X"]],
["3", "19:14", "Závodu míru", ["6+", "24"]],
["3", "19:19", "Závodu míru", ["X", "31"]],
["3", "19:34", "Závodu míru", ["X", "31"]],
["1", "19:53", "Březová, aut. st.", ["X", "31"]],
["3", "19:54", "Závodu míru", ["X", "31"]],
["3", "19:54", "Závodu míru", ["6+", "24"]],
["1", "19:57", "Březová, aut. st.", ["6+", "24"]],
["3", "20:19", "Závodu míru", ["X", "31"]],
["1", "20:28", "Březová, aut. st.", ["6+", "24"]],
["3", "20:49", "Závodu míru", ["X", "31"]],
["3", "20:49", "Závodu míru", ["6+", "24"]],
["1", "20:55", "Březová, aut. st.", ["X", "31"]],
["3", "21:09", "Závodu míru", ["X", "31"]],
["1", "21:23", "Březová, aut. st.", ["6+", "24"]],
["3", "21:24", "Stará Ovčárna", ["X", "31"]],
["3", "21:24", "Závodu míru", ["6+", "24"]],
["1", "21:38", "Březová, aut. st.", ["X", "31"]],
["3", "22:04", "Závodu míru", ["6+", "24"]],
["3", "22:12", "Stará Ovčárna", ["X", "31"]],
["1", "22:28", "Březová, aut. st.", ["X", "31"]],
["3", "22:41", "Závodu míru", ["X", "31"]],
];
const allDepartures_24_5_2023 = [
["3", "04:09", "Závodu míru", ["25"]],
["3", "04:29", "Závodu míru", ["X"]],
["1", "04:50", "Březová, aut. st.", ["X"]],
["3", "04:52", "Závodu míru", ["X"]],
["3", "04:56", "Závodu míru", ["6+", "25"]],
["3", "05:02", "Závodu míru", ["X"]],
["4", "05:05", "Závodu míru", ["X"]],
["6", "05:07", "Sídl. Michal škola", ["X", "42"]],
["6", "05:07", "Závodu míru", ["X", "32"]],
["3", "05:09", "Závodu míru", ["X", "42"]],
["3", "05:22", "Závodu míru", ["X"]],
["1", "05:23", "Březová, aut. st.", ["X"]],
["6", "05:34", "Sídl. Michal škola", ["X", "42"]],
["4", "05:35", "Stará Ovčárna", ["X"]],
["3", "05:36", "Sídl. Michal škola", ["X", "42"]],
["3", "05:38", "Sídliště Michal", ["X", "32"]],
["1", "05:47", "Březová, aut. st.", ["6+", "25"]],
["1", "05:51", "Březová, aut. st.", ["X"]],
["3", "05:57", "Závodu míru", ["6+", "25"]],
["3", "05:58", "Závodu míru", ["X"]],
["6", "06:04", "Sídl. Michal škola", ["X", "42"]],
["1", "06:13", "Březová, aut. st.", ["X"]],
["3", "06:16", "Závodu míru", ["X", "42"]],
["3", "06:19", "Závodu míru", ["X", "32"]],
["3", "06:24", "Sídliště Michal", ["X"]],
["3", "06:24", "Závodu míru", ["6+", "25"]],
["4", "06:31", "Závodu míru", ["X", "42"]],
["6", "06:32", "Sídl. Michal škola", ["X", "32"]],
["3", "06:34", "Závodu míru", ["X"]],
["6", "06:34", "Sídl. Michal škola", ["X", "42"]],
["1", "06:46", "Březová, aut. st.", ["X"]],
["33", "06:49", "Sídl. Michal škola", ["X", "42"]],
["3", "06:56", "Závodu míru", ["X", "32"]],
["3", "06:56", "Závodu míru", ["X", "42"]],
["3", "06:56", "Závodu míru", ["6+"]],
["1", "06:57", "Březová, aut. st.", ["6+", "25"]],
["3", "07:04", "Závodu míru", ["X"]],
["1", "07:05", "Březová, aut. st.", ["X"]],
["3", "07:14", "Závodu míru", ["X"]],
["3", "07:19", "Závodu míru", ["6+"]],
["6", "07:23", "Sídl. Michal škola", ["X", "42"]],
["33", "07:27", "Sídl. Michal škola", ["17"]],
["3", "07:27", "Sídliště Michal", ["X", "32"]],
["2", "07:31", "Sídliště Michal", ["X", "42"]],
["3", "07:34", "Závodu míru", ["X", "42"]],
["4", "07:34", "Závodu míru", ["X"]],
["1", "07:35", "Březová, aut. st.", ["X"]],
["3", "07:45", "Sídliště Michal", ["X"]],
["3", "07:51", "Závodu míru", ["6+"]],
["33", "07:54", "Sídl. Michal škola", ["X", "42"]],
["3", "07:54", "Závodu míru", ["17"]],
["1", "07:55", "Březová, aut. st.", ["X"]],
["1", "07:57", "Březová, aut. st.", ["6+"]],
["3", "07:58", "Závodu míru", ["X", "42"]],
["3", "08:10", "Závodu míru", ["X", "32"]],
["3", "08:15", "Závodu míru", ["X", "42"]],
["3", "08:15", "Závodu míru", ["6+"]],
["1", "08:18", "Březová, aut. st.", ["X"]],
["33", "08:29", "Sídl. Michal škola", ["X"]],
["3", "08:34", "Závodu míru", ["X"]],
["3", "08:50", "Stará Ovčárna", ["X"]],
["3", "08:51", "Závodu míru", ["6+"]],
["33", "08:54", "Sídl. Michal škola", ["X"]],
["1", "08:57", "Březová, aut. st.", ["6+"]],
["3", "09:04", "Závodu míru", ["X"]],
["1", "09:09", "Březová, aut. st.", ["X"]],
["3", "09:20", "Závodu míru", ["6+"]],
["3", "09:24", "Závodu míru", ["X"]],
["33", "09:34", "Sídl. Michal škola", ["X"]],
["4", "09:41", "Sídliště Michal", ["X"]],
["1", "09:44", "Březová, aut. st.", ["6+"]],
["3", "09:45", "Závodu míru", ["X"]],
["3", "09:51", "Závodu míru", ["6+"]],
["1", "09:58", "Březová, aut. st.", ["X"]],
["3", "09:59", "Jezero Michal", ["X"]],
["7", "10:14", "Březová, aut.st.", ["X"]],
["3", "10:19", "Závodu míru", ["6+"]],
["33", "10:24", "Sídl. Michal škola", ["X"]],
["3", "10:40", "Závodu míru", ["X"]],
["1", "10:55", "Březová, aut. st.", ["X"]],
["3", "10:55", "Závodu míru", ["X"]],
["1", "10:57", "Březová, aut. st.", ["6+"]],
["3", "11:02", "Závodu míru", ["6+"]],
["3", "11:17", "Závodu míru", ["X"]],
["33", "11:29", "Sídl. Michal škola", ["X"]],
["3", "11:29", "Závodu míru", ["6+"]],
["3", "11:44", "Závodu míru", ["X"]],
["1", "11:46", "Březová, aut. st.", ["X"]],
["1", "11:49", "Březová, aut. st.", ["6+"]],
["3", "11:51", "Závodu míru", ["6+"]],
["33", "11:56", "Sídl. Michal škola", ["X"]],
["3", "12:05", "Závodu míru", ["X"]],
["3", "12:19", "Závodu míru", ["6+"]],
["3", "12:24", "Jezero Michal", ["X"]],
["1", "12:33", "Březová, aut. st.", ["X"]],
["3", "12:44", "Závodu míru", ["X"]],
["3", "12:51", "Závodu míru", ["6+"]],
["1", "12:57", "Březová, aut. st.", ["6+"]],
["3", "12:59", "Závodu míru", ["X"]],
["6", "12:59", "Sídl. Michal škola", ["X", "42"]],
["33", "13:04", "Sídl. Michal škola", ["X"]],
["1", "13:06", "Březová, aut. st.", ["X"]],
["3", "13:15", "Závodu míru", ["X"]],
["2", "13:17", "Sídliště Michal", ["X"]],
["1", "13:22", "Březová, aut. st.", ["X"]],
["3", "13:24", "Stará Ovčárna", ["X"]],
["3", "13:28", "Závodu míru", ["6+"]],
["33", "13:39", "Sídl. Michal škola", ["X"]],
["1", "13:48", "Březová, aut. st.", ["X"]],
["3", "13:51", "Závodu míru", ["6+"]],
["1", "13:57", "Březová, aut. st.", ["6+"]],
["33", "14:04", "Sídl. Michal škola", ["X"]],
["6", "14:04", "Sídl. Michal škola", ["X"]],
["4", "14:06", "Stará Ovčárna", ["X"]],
["3", "14:09", "Závodu míru", ["X"]],
["1", "14:10", "Březová, aut. st.", ["X"]],
["3", "14:19", "Závodu míru", ["6+"]],
["3", "14:21", "Závodu míru", ["X"]],
["1", "14:34", "Březová, aut. st.", ["X"]],
["6", "14:34", "Sídl. Michal škola", ["X"]],
["4", "14:42", "Závodu míru", ["X"]],
["3", "14:43", "Závodu míru", ["X"]],
["33", "14:46", "Sídl. Michal škola", ["X"]],
["1", "14:49", "Březová, aut. st.", ["6+"]],
["3", "14:51", "Závodu míru", ["6+"]],
["3", "14:52", "Závodu míru", ["X"]],
["1", "15:09", "Březová, aut. st.", ["X"]],
["33", "15:09", "Sídl. Michal škola", ["X"]],
["3", "15:13", "Závodu míru", ["X"]],
["6", "15:14", "Sídl. Michal škola", ["X"]],
["3", "15:19", "Závodu míru", ["6+"]],
["3", "15:23", "Sokolov, Hrušková", ["X", "42"]],
["3", "15:30", "Závodu míru", ["X"]],
["1", "15:31", "Březová, aut. st.", ["X"]],
["33", "15:39", "Sídl. Michal škola", ["X"]],
["3", "15:39", "Jezero Michal", ["X"]],
["3", "15:51", "Závodu míru", ["6+"]],
["7", "15:54", "Březová, aut.st.", ["X"]],
["1", "15:57", "Březová, aut. st.", ["6+"]],
["3", "16:00", "Sídl. Michal škola", ["X", "42"]],
["4", "16:06", "Závodu míru", ["X"]],
["33", "16:14", "Sídl. Michal škola", ["X"]],
["3", "16:14", "Závodu míru", ["X"]],
["1", "16:21", "Březová, aut. st.", ["X"]],
["3", "16:28", "Závodu míru", ["6+"]],
["7", "16:29", "Březová, aut.st.", ["X"]],
["3", "16:35", "Závodu míru", ["X"]],
["6", "16:44", "Sídl. Michal škola", ["X", "42"]],
["3", "16:48", "Závodu míru", ["X"]],
["4", "16:51", "Závodu míru", ["X", "42"]],
["3", "16:53", "Závodu míru", ["6+"]],
["1", "16:57", "Březová, aut. st.", ["6+"]],
["7", "16:59", "Březová, aut.st.", ["X"]],
["3", "17:09", "Jezero Michal", ["X"]],
["3", "17:14", "Závodu míru", ["6+"]],
["3", "17:18", "Závodu míru", ["X"]],
["3", "17:34", "Závodu míru", ["X"]],
["1", "17:38", "Březová, aut. st.", ["X"]],
["3", "17:51", "Závodu míru", ["6+"]],
["3", "17:57", "Závodu míru", ["X"]],
["3", "18:14", "Závodu míru", ["X"]],
["3", "18:21", "Závodu míru", ["X"]],
["3", "18:21", "Stará Ovčárna", ["6+"]],
["1", "18:24", "Březová, aut. st.", ["6+"]],
["1", "18:26", "Březová, aut. st.", ["X"]],
["3", "18:34", "Závodu míru", ["X"]],
["3", "18:51", "Závodu míru", ["6+"]],
["3", "18:54", "Závodu míru", ["X"]],
["1", "19:08", "Březová, aut. st.", ["X"]],
["3", "19:14", "Závodu míru", ["6+", "24"]],
["3", "19:19", "Závodu míru", ["X", "31"]],
["3", "19:34", "Závodu míru", ["X", "31"]],
["1", "19:53", "Březová, aut. st.", ["X", "31"]],
["3", "19:54", "Závodu míru", ["X", "31"]],
["3", "19:54", "Závodu míru", ["6+", "24"]],
["1", "19:57", "Březová, aut. st.", ["6+", "24"]],
["3", "20:19", "Závodu míru", ["X", "31"]],
["1", "20:28", "Březová, aut. st.", ["6+", "24"]],
["3", "20:49", "Závodu míru", ["X", "31"]],
["3", "20:49", "Závodu míru", ["6+", "24"]],
["1", "20:55", "Březová, aut. st.", ["X", "31"]],
["3", "21:09", "Závodu míru", ["X", "31"]],
["1", "21:23", "Březová, aut. st.", ["6+", "24"]],
["3", "21:24", "Stará Ovčárna", ["X", "31"]],
["3", "21:24", "Závodu míru", ["6+", "24"]],
["1", "21:38", "Březová, aut. st.", ["X", "31"]],
["3", "22:04", "Závodu míru", ["6+", "24"]],
["3", "22:12", "Stará Ovčárna", ["X", "31"]],
["1", "22:28", "Březová, aut. st.", ["X", "31"]],
["3", "22:41", "Závodu míru", ["X", "31"]],
];
// const departures_all = [
// ["3","04:09","Závodu míru",["25"]],
// ["3","04:29","Závodu míru",["X"]],
// ["1","04:50","Březová, aut. st.",["X"]],
// ["3","04:52","Závodu míru",["X"]],
// ["3","04:56","Závodu míru",["6+","25"]],
// ["3","05:02","Závodu míru",["X"]],
// ["4","05:05","Závodu míru",["X"]],
// ["6","05:07","Sídl. Michal škola",["X","42"]],
// ["6","05:07","Závodu míru",["X","32"]],
// ["3","05:09","Závodu míru",["X","42"]],
// ["3","05:22","Závodu míru",["X"]],
// ["1","05:23","Březová, aut. st.",["X"]],
// ["6","05:34","Sídl.Michal škola",["X","42"]],
// ["4","05:35","Stará Ovčárna",["X"]],
// ["3","05:36","Sídl. Michal škola",["X","42"]],
// ["3","05:38","Sídliště Michal",["X","32"]],
// ["1","05:47","Březová, aut. st.",["6+","25"]],
// ["1","05:51","Březová, aut. st.",["X"]],
// ["3","05:57","Závodu míru",["6+","25"]],
// ["3","05:58","Závodu míru",["X"]],
// ["6","06:04","Sídl.Michal škola",["X","42"]],
// ["1","06:13","Březová, aut. st.",["X"]],
// ["3","06:16","Závodu míru",["X","42"]],
// ["3","06:19","Závodu míru",["X","32"]],
// ["3","06:24","Sídliště Michal",["X"]],
// ["3","06:24","Závodu míru",["6+","25"]],
// ["4","06:31","Závodu míru",["X","42"]],
// ["6","06:32","Sídl.Michal škola",["X","32"]],
// ["3","06:34","Závodu míru",["X"]],
// ["6","06:34","Sídl.Michal škola",["X","42"]],
// ["1","06:46","Březová, aut. st.",["X"]],
// ["33","06:49","sídl.Michal škola",["X","42"]],
// ["3","06:56","Závodu míru",["X","32"]],
// ["3","06:56","Závodu míru",["X","42"]],
// ["3","06:56","Závodu míru",["6+"]],
// ["1","06:57","Březová, aut. st.",["6+","25"]],
// ["3","07:04","Závodu míru",["X"]],
// ["1","07:05","Březová, aut. st.",["X"]],
// ["3","07:14","Závodu míru",["X"]],
// ["3","07:19","Závodu míru",["6+"]],
// ["6","07:23","Sídl.Michal škola",["X","42"]],
// ["33","07:27","sídl.Michal škola",["17"]],
// ["3","07:27","Sídliště Michal",["X","32"]],
// ["2","07:31","Sídliště Michal",["X","42"]],
// ["3","07:34","Závodu míru",["X","42"]],
// ["4","07:34","Závodu míru",["X"]],
// ["1","07:35","Březová, aut. st.",["X"]],
// ["3","07:45","Sídliště Michal",["X"]],
// ["3","07:51","Závodu míru",["6+"]],
// ["33","07:54","sídl.Michal škola",["X","42"]],
// ["3","07:54","Závodu míru",["17"]],
// ["1","07:55","Březová, aut. st.",["X"]],
// ["1","07:57","Březová, aut. st.",["6+"]],
// ["3","07:58","Závodu míru",["X","42"]],
// ["3","08:10","Závodu míru",["X","32"]],
// ["3","08:15","Závodu míru",["X","42"]],
// ["3","08:15","Závodu míru",["6+"]],
// ["1","08:18","Březová, aut. st.",["X"]],
// ["33","08:29","sídl.Michal škola",["X"]],
// ["3","08:34","Závodu míru",["X"]],
// ["3","08:50","Stará Ovčárna",["X"]],
// ["3","08:51","Závodu míru",["6+"]],
// ["33","08:54","sídl.Michal škola",["X"]],
// ["1","08:57","Březová, aut. st.",["6+"]],
// ["3","09:04","Závodu míru",["X"]],
// ["1","09:09","Březová, aut. st.",["X"]],
// ["3","09:20","Závodu míru",["6+"]],
// ["3","09:24","Závodu míru",["X"]],
// ["33","09:34","sídl.Michal škola",["X"]],
// ["4","09:41","Sídliště Michal",["X"]],
// ["1","09:44","Březová, aut. st.",["6+"]],
// ["3","09:45","Závodu míru",["X"]],
// ["3","09:51","Závodu míru",["6+"]],
// ["1","09:58","Březová, aut. st.",["X"]],
// ["3","09:59","Jezero Michal",["X"]],
// ["7","10:14","Březová, aut.st.",["X"]],
// ["3","10:19","Závodu míru",["6+"]],
// ["33","10:24","sídl.Michal škola",["X"]],
// ["3","10:40","Závodu míru",["X"]],
// ["1","10:55","Březová, aut. st.",["X"]],
// ["3","10:55","Závodu míru",["X"]],
// ["1","10:57","Březová, aut. st.",["6+"]],
// ["3","11:02","Závodu míru",["6+"]],
// ["3","11:17","Závodu míru",["X"]],
// ["33","11:29","sídl.Michal škola",["X"]],
// ["3","11:29","Závodu míru",["6+"]],
// ["3","11:44","Závodu míru",["X"]],
// ["1","11:46","Březová, aut. st.",["X"]],
// ["1","11:49","Březová, aut. st.",["6+"]],
// ["3","11:51","Závodu míru",["6+"]],
// ["33","11:56","sídl.Michal škola",["X"]],
// ["3","12:05","Závodu míru",["X"]],
// ["3","12:19","Závodu míru",["6+"]],
// ["3","12:24","Jezero Michal",["X"]],
// ["1","12:33","Březová, aut. st.",["X"]],
// ["3","12:44","Závodu míru",["X"]],
// ["3","12:51","Závodu míru",["6+"]],
// ["1","12:57","Březová, aut. st.",["6+"]],
// ["3","12:59","Závodu míru",["X"]],
// ["6","12:59","Sídl.Michal škola",["X","42"]],
// ["33","13:04","sídl.Michal škola",["X"]],
// ["1","13:06","Březová, aut. st.",["X"]],
// ["3","13:15","Závodu míru",["X"]],
// ["2","13:17","Sídliště Michal",["X"]],
// ["1","13:22","Březová, aut. st.",["X"]],
// ["3","13:24","Stará Ovčárna",["X"]],
// ["3","13:28","Závodu míru",["6+"]],
// ["33","13:39","sídl.Michal škola",["X"]],
// ["1","13:48","Březová, aut. st.",["X"]],
// ["3","13:51","Závodu míru",["6+"]],
// ["1","13:57","Březová, aut. st.",["6+"]],
// ["33","14:04","sídl.Michal škola",["X"]],
// ["6","14:04","Sídl.Michal škola",["X"]],
// ["4","14:06","Stará Ovčárna",["X"]],
// ["3","14:09","Závodu míru",["X"]],
// ["1","14:10","Březová, aut. st.",["X"]],
// ["3","14:19","Závodu míru",["6+"]],
// ["3","14:21","Závodu míru",["X"]],
// ["1","14:34","Březová, aut. st.",["X"]],
// ["6","14:34","Sídl.Michal škola",["X"]],
// ["4","14:42","Závodu míru",["X"]],
// ["3","14:43","Závodu míru",["X"]],
// ["33","14:46","sídl.Michal škola",["X"]],
// ["1","14:49","Březová, aut. st.",["6+"]],
// ["3","14:51","Závodu míru",["6+"]],
// ["3","14:52","Závodu míru",["X"]],
// ["1","15:09","Březová, aut. st.",["X"]],
// ["33","15:09","sídl.Michal škola",["X"]],
// ["3","15:13","Závodu míru",["X"]],
// ["6","15:14","Sídl.Michal škola",["X"]],
// ["3","15:19","Závodu míru",["6+"]],
// ["3","15:23","Sokolov, Hrušková",["X","42"]],
// ["3","15:30","Závodu míru",["X"]],
// ["1","15:31","Březová, aut. st.",["X"]],
// ["33","15:39","sídl.Michal škola",["X"]],
// ["3","15:39","Jezero Michal",["X"]],
// ["3","15:51","Závodu míru",["6+"]],
// ["7","15:54","Březová, aut.st.",["X"]],
// ["1","15:57","Březová, aut. st.",["6+"]],
// ["3","16:00","sídl.Michal škola",["X","42"]],
// ["4","16:06","Závodu míru",["X"]],
// ["33","16:14","sídl.Michal škola",["X"]],
// ["3","16:14","Závodu míru",["X"]],
// ["1","16:21","Březová, aut. st.",["X"]],
// ["3","16:28","Závodu míru",["6+"]],
// ["7","16:29","Březová, aut.st.",["X"]],
// ["3","16:35","Závodu míru",["X"]],
// ["6","16:44","Sídl.Michal škola",["X","42"]],
// ["3","16:48","Závodu míru",["X"]],
// ["4","16:51","Závodu míru",["X","42"]],
// ["3","16:53","Závodu míru",["6+"]],
// ["1","16:57","Březová, aut. st.",["6+"]],
// ["7","16:59","Březová, aut.st.",["X"]],
// ["3","17:09","Jezero Michal",["X"]],
// ["3","17:14","Závodu míru",["6+"]],
// ["3","17:18","Závodu míru",["X"]],
// ["3","17:34","Závodu míru",["X"]],
// ["1","17:38","Březová, aut. st.",["X"]],
// ["3","17:51","Závodu míru",["6+"]],
// ["3","17:57","Závodu míru",["X"]],
// ["3","18:14","Závodu míru",["X"]],
// ["3","18:21","Závodu míru",["X"]],
// ["3","18:21","Stará Ovčárna",["6+"]],
// ["1","18:24","Březová, aut. st.",["6+"]],
// ["1","18:26","Březová, aut. st.",["X"]],
// ["3","18:34","Závodu míru",["X"]],
// ["3","18:51","Závodu míru",["6+"]],
// ["3","18:54","Závodu míru",["X"]],
// ["1","19:08","Březová, aut. st.",["X"]],
// ["3","19:14","Závodu míru",["6+","24"]],
// ["3","19:19","Závodu míru",["X","31"]],
// ["3","19:34","Závodu míru",["X","31"]],
// ["1","19:53","Březová, aut. st.",["X","31"]],
// ["3","19:54","Závodu míru",["X","31"]],
// ["3","19:54","Závodu míru",["6+","24"]],
// ["1","19:57","Březová, aut. st.",["6+","24"]],
// ["3","20:19","Závodu míru",["X","31"]],
// ["1","20:28","Březová, aut. st.",["6+","24"]],
// ["3","20:49","Závodu míru",["X","31","6+","24"]],
// ["1","20:55","Březová, aut. st.",["X","31"]],
// ["3","21:09","Závodu míru",["X","31"]],
// ["1","21:23","Březová, aut. st.",["6+","24"]],
// ["3","21:24","Stará Ovčárna",["X","31"]],
// ["3","21:24","Závodu míru",["6+","24"]],
// ["1","21:38","Březová, aut. st.",["X","31"]],
// ["3","22:04","Závodu míru",["6+","24"]],
// ["3","22:12","Stará Ovčárna",["X","31"]],
// ["1","22:28","Březová, aut. st.",["X","31"]],
// ["3","22:41","Závodu míru",["X","31"]],
// ];
/*
exports.id = 'handledepartures';
exports.title = 'Handle departures';
exports.group = 'Worksys';
exports.color = '#5D9CEC';
exports.version = '0.0.1';
exports.output = ['red', 'white'];
exports.input = true;
exports.author = 'Rastislav Kovac';
exports.icon = 'cloud-upload';
exports.readme = `Handle bus departures responses from service-prod01.worksys.io`;
const instanceSendTo = {
sendToExpress: 0,
}
const timeZoneOffsets = {
'-60': 1,
'-120': 2
}
exports.install = function(instance) {
let departures = [];
let departureIds = [];
let departuresToDisplay = [];
instance.on('data', function(flowdata) {
if(!typeof flowdata.data === 'object') return;
console.log('flowdata.data', flowdata.data)
let response = flowdata.data;
// if(response.indexOf('"query":{') > -1)
// {
// instance.send(instanceSendTo.repeatRequest, 'repeatDepartureRequest');
// return;
// }
//console.log('dep, del ----', response.hasOwnProperty('departures'), response.hasOwnProperty('delays'))
if(response.hasOwnProperty('departures'))
{
departures = response['departures'];
departureIds = [];
for (let i = 0; i < departures.length; i++)
{
departureIds.push(departures[i][0]);
}
}
else if(response.hasOwnProperty('delays'))
{
if(departures.length == 0) return;
const delays = response['delays'];
departuresToDisplay = [];
if(delays.length == 0)
{
instance.send(instanceSendTo.sendToExpress, departuresToDisplay);
departures = [];
departureIds = [];
return;
}
console.log('delays', delays)
const date = new Date();
const diff = date.getTimezoneOffset();
for (let i = 0; i < delays.length; i++)
{
const delayIdInList = departureIds.indexOf(delays[i][0]);
//console.log('id in list ------', delayIdInList)
if(delayIdInList == -1) continue;
if(delays[i][1]) // if equals to date string e.g. "2022-11-25T14:04:57" or it is 0
{
let currentDeparture = departures[delayIdInList][2].split(':'); //[ '15', '35' ];
let updatedDeparture = delays[i][1]; // "2022-11-25T14:04:57"
let temp = [...updatedDeparture.matchAll(/\d\d/g)].map(a => a[0]); //[ '20', '22', '11', '25', '14', '04', '57']
currentDeparture = new Date(Date.UTC(parseInt(`20${temp[1]}`), temp[2],temp[3], currentDeparture[0], currentDeparture[1], 0))
updatedDeparture = new Date(Date.UTC(parseInt(`20${temp[1]}`), temp[2],temp[3], +temp[4] + timeZoneOffsets[diff], temp[5], 0))
if(currentDeparture < updatedDeparture)
{
console.log('zmenit cas v odchodoch')
updatedDeparture = new Date(Date.UTC(parseInt(`20${temp[1]}`), temp[2],temp[3], temp[4], temp[5], 0))
updatedDeparture = updatedDeparture.toLocaleTimeString('sk-SK', { timeZone: 'Europe/Bratislava' })
console.log('odchod s meskaniim ++++++++',updatedDeparture)
departures[delayIdInList][2] = updatedDeparture.slice(0,5);
}
}
departuresToDisplay.push(departures[delayIdInList]) // [ '140', '3', '22:08', 'Stará ovčárna' ]
}
// sometimes delays.length is less than 10 (sometimes even 6). in that case we display some more scheduled departures
if(departuresToDisplay.length < 9)
{
let lastDelay = delays[delays.length - 1][0];
lastDelay = departureIds.indexOf(lastDelay);
l = departuresToDisplay.length
// we start from 1 and continue until departuresToDisplay length is nine
for (let i = 1; i < (10 - l); i++)
{
if(departures[lastDelay + i]) departuresToDisplay.push(departures[lastDelay + i])
}
}
instance.send(instanceSendTo.sendToExpress, departuresToDisplay)
//console.log('-----',departures)
//console.log(delays)
console.log('to display ++++++',departuresToDisplay)
}
})
}
// {
// "data": "{\"delays\":[[\"25\",0],[\"94\",0],[\"27\",0],[\"106\",0],[\"84\",0],[\"29\",0],[\"6\",0],[\"96\",0],[\"31\",0],[\"4\",0]]}",
// "status": 200,
// "headers": {
// "cache-control": "private, no-cache, no-store, max-age=0",
// "vary": "Accept-Encoding, Last-Modified, User-Agent",
// "expires": "-1",
// "x-powered-by": "Total.js",
// "content-type": "application/json; charset=utf-8",
// "date": "Mon, 21 Nov 2022 13:23:51 GMT",
// "connection": "close",
// "transfer-encoding": "chunked"
// },
// "host": "192.168.252.2:8004"
// }
// {
// "data": "{\"departures\":[[\"2\",\"3\",\"22.11.22 04:05\",\"Závodu míru\"],[\"290\",\"3\",\"22.11.22 04:25\",\"Závodu míru\"],[\"292\",\"3\",\"22.11.22 04:48\",\"Závodu míru\"],[\"296\",\"3\",\"22.11.22 04:58\",\"Závodu míru\"],[\"6\",\"3\",\"22.11.22 05:05\",\"Závodu míru\"],[\"300\",\"3\",\"22.11.22 05:18\",\"Závodu míru\"],[\"8\",\"3\",\"22.11.22 05:55\",\"Závodu míru\"],[\"16\",\"3\",\"22.11.22 06:30\",\"Závodu míru\"],[\"1\",\"33\",\"22.11.22 06:45\",\"sídl. Michal škola\"],[\"18\",\"3\",\"22.11.22 06:52\",\"Hrušková\"],[\"310\",\"3\",\"22.11.22 07:00\",\"Závodu míru\"],[\"22\",\"3\",\"22.11.22 07:10\",\"Závodu míru\"],[\"5\",\"33\",\"22.11.22 07:50\",\"sídl. Michal škola\"],[\"32\",\"3\",\"22.11.22 08:10\",\"Závodu míru\"],[\"7\",\"33\",\"22.11.22 08:25\",\"sídl. Michal škola\"],[\"100\",\"3\",\"22.11.22 08:30\",\"Závodu míru\"],[\"9\",\"33\",\"22.11.22 08:50\",\"sídl. Michal škola\"],[\"34\",\"3\",\"22.11.22 09:00\",\"Závodu míru\"],[\"38\",\"3\",\"22.11.22 09:20\",\"Závodu míru\"],[\"11\",\"33\",\"22.11.22 09:30\",\"sídl. Michal škola\"],[\"298\",\"3\",\"22.11.22 09:55\",\"Závodu míru\"],[\"2\",\"7\",\"22.11.22 10:10\",\"Březová, aut. st.\"],[\"13\",\"33\",\"22.11.22 10:20\",\"sídl. Michal škola\"],[\"48\",\"3\",\"22.11.22 10:50\",\"Závodu míru\"],[\"50\",\"3\",\"22.11.22 11:13\",\"Závodu míru\"],[\"15\",\"33\",\"22.11.22 11:25\",\"sídl. Michal škola\"],[\"52\",\"3\",\"22.11.22 11:40\",\"Závodu míru\"],[\"17\",\"33\",\"22.11.22 11:52\",\"sídl. Michal škola\"],[\"56\",\"3\",\"22.11.22 12:20\",\"Závodu míru\"],[\"62\",\"3\",\"22.11.22 12:40\",\"Závodu míru\"],[\"64\",\"3\",\"22.11.22 12:55\",\"Závodu míru\"],[\"19\",\"33\",\"22.11.22 13:00\",\"sídl. Michal škola\"],[\"66\",\"3\",\"22.11.22 13:20\",\"Stará ovčárna\"],[\"21\",\"33\",\"22.11.22 13:35\",\"sídl. Michal škola\"],[\"23\",\"33\",\"22.11.22 14:00\",\"sídl. Michal škola\"],[\"72\",\"3\",\"22.11.22 14:05\",\"Závodu míru\"],[\"25\",\"33\",\"22.11.22 14:42\",\"sídl. Michal škola\"],[\"94\",\"3\",\"22.11.22 14:48\",\"Závodu míru\"],[\"27\",\"33\",\"22.11.22 15:05\",\"sídl. Michal škola\"],[\"106\",\"3\",\"22.11.22 15:09\",\"Závodu míru\"],[\"84\",\"3\",\"22.11.22 15:35\",\"Závodu míru\"],[\"29\",\"33\",\"22.11.22 15:35\",\"sídl. Michal škola\"],[\"6\",\"7\",\"22.11.22 15:50\",\"Březová, aut. st.\"],[\"96\",\"3\",\"22.11.22 16:10\",\"Závodu míru\"],[\"31\",\"33\",\"22.11.22 16:10\",\"sídl. Michal škola\"],[\"4\",\"7\",\"22.11.22 16:25\",\"Březová, aut. st.\"],[\"102\",\"3\",\"22.11.22 16:30\",\"Závodu míru\"],[\"302\",\"3\",\"22.11.22 16:44\",\"Závodu míru\"],[\"8\",\"7\",\"22.11.22 16:55\",\"Březová, aut. st.\"],[\"108\",\"3\",\"22.11.22 17:05\",\"Stará ovčárna\"],[\"112\",\"3\",\"22.11.22 17:30\",\"Závodu míru\"],[\"114\",\"3\",\"22.11.22 17:53\",\"Závodu míru\"],[\"118\",\"3\",\"22.11.22 18:10\",\"Závodu míru\"],[\"120\",\"3\",\"22.11.22 18:30\",\"Závodu míru\"],[\"122\",\"3\",\"22.11.22 18:50\",\"Závodu míru\"],[\"124\",\"3\",\"22.11.22 19:15\",\"Závodu míru\"],[\"126\",\"3\",\"22.11.22 19:30\",\"Závodu míru\"],[\"130\",\"3\",\"22.11.22 19:50\",\"Závodu míru\"],[\"132\",\"3\",\"22.11.22 20:15\",\"Závodu míru\"],[\"134\",\"3\",\"22.11.22 20:45\",\"Závodu míru\"],[\"136\",\"3\",\"22.11.22 21:05\",\"Závodu míru\"],[\"256\",\"3\",\"22.11.22 21:20\",\"Stará ovčárna\"],[\"140\",\"3\",\"22.11.22 22:08\",\"Stará ovčárna\"]]}",
// "status": 200,
// "headers": {
// "cache-control": "private, no-cache, no-store, max-age=0",
// "vary": "Accept-Encoding, Last-Modified, User-Agent",
// "expires": "-1",
// "x-powered-by": "Total.js",
// "content-type": "application/json; charset=utf-8",
// "date": "Mon, 21 Nov 2022 13:23:51 GMT",
// "connection": "close",
// "transfer-encoding": "chunked"
// },
// "host": "192.168.252.2:8004"
// }
// flowdata.data
// ~~~~~~~~ z cloudu {
// data: '{"delays":[["13",0],["48",0],["50",0],["15",0],["52",0],["17",0],["56",0],["62",0],["64",0],["19",0]]}',
// status: 200,
// headers: {
// 'cache-control': 'private, no-cache, no-store, max-age=0',
// vary: 'Accept-Encoding, Last-Modified, User-Agent',
// expires: '-1',
// 'x-powered-by': 'Total.js',
// 'content-type': 'application/json; charset=utf-8',
// date: 'Tue, 29 Nov 2022 09:16:14 GMT',
// connection: 'close',
// 'transfer-encoding': 'chunked'
// },
// host: '192.168.252.2:8004',
// cookies: undefined
// }
// ~~~~~~~~ z cloudu {
// data: `<!DOCTYPE html><html><head><title>503: Service Unavailable</title><meta charset="utf-8" /><meta name="format-detection" content="telephone=no" /><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /><meta name="robots" content="all,follow" /><style type="text/css">html,body{height:100%;width:100%;overflow:hidden;font-family:Arial;font-smoothing:antialiased;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:antialiased;background-color:white;margin:0;padding:0;color:black}.table{display:table;width:100%;height:100%;table-layout:fixed}.body{padding:20px}.cell{display:table-cell;vertical-align:middle;text-align:center;width:100%;height:100%;font-size:40px}.cell b{font-size:60px;background-color:black;color:white;position:relative;display:inline-block;padding:5px 10px;border-radius:2px;margin-bottom:5px;animation:anim 0.5s forwards 2s}.error{font-size:11px;color:gray;width:90%;max-width:800px;margin:20px auto;background-color:#F0F0F0;padding:10px;border-radius:2px;text-align:left;font-family:monospace;overflow:auto}#url{font-size:12px;color:gray}@keyframes anim{0%{transform:rotate(0deg)}50%{transform:rotate(3deg) scale(1.3)}100%{transform:rotate(5deg) scale(1)}}@media(max-width:768px){.cell b{margin-bottom:10px}.cell{font-size:25px}}</style></head><body><div class="table"><div class="cell"><div class="body"><b>503</b><div class="status">Service Unavailable</div><div id="url"></div></div></div></div><script>document.getElementById('url').innerHTML=location.href;</script></body></html>`,
// status: 503,
// headers: {
// 'cache-control': 'private, no-cache, no-store, max-age=0',
// vary: 'Accept-Encoding, Last-Modified, User-Agent',
// expires: '-1',
// 'x-powered-by': 'Total.js',
// 'content-type': 'text/html; charset=utf-8',
// date: 'Tue, 29 Nov 2022 09:17:19 GMT',
// connection: 'close',
// 'transfer-encoding': 'chunked'
// },
// host: '192.168.252.2:8004',
// cookies: undefined
// }
// {
// "data": "{\"query\":{\"project_id\":\"30\"},\"body\":{\"departures\":[]},\"session\":null,\"user\":null,\"files\":[],\"headers\":{\"content-type\":\"application/json\",\"content-length\":\"17\",\"host\":\"192.168.252.2:8004\",\"connection\":\"close\"},\"url\":\"/getdepartures/\",\"params\":{},\"mobile\":false,\"robot\":false,\"referrer\":\"\"}",
// "status": 200,
// "headers": {
// "cache-control": "private, no-cache, no-store, max-age=0",
// "vary": "Accept-Encoding, Last-Modified, User-Agent",
// "expires": "-1",
// "x-powered-by": "Total.js",
// "content-type": "application/json; charset=utf-8",
// "date": "Tue, 29 Nov 2022 13:38:12 GMT",
// "connection": "close",
// "transfer-encoding": "chunked"
// },
// "host": "192.168.252.2:8004"
// }
const odchody = [
[ '140', '3', '22:08', 'Stará ovčárna' ]
]
*/