Signalio
Към съдържанието
Технология

Signalio следи 50+ институции — ето как работи автоматизацията

3 мин четене
Абстрактна визуализация на потоци данни

Всяка сутрин, докато ти спиш, Signalio чете. Сайтове на ВиК дружества, XML feeds от метеорологичните служби, API-та на GDACS, RSS потоци от NAVTEX. Следи, парсира, геокодира — и ако намери нещо ново за твоя район, изпраща сигнал.

Ето как изглежда целият процес.

Откъде идват данните

Разделяме источниците на три вида.

Официални API-та и фийдове — MeteoAlarm, НИМХ, GDACS, EFAS/Copernicus, EURDEP, NAVTEX. Тези системи публикуват структурирани данни в стандартни формати (GeoJSON, RSS, CAP). Лесни за четене, надеждни, добре документирани.

Уебсайтове на комунални дружества — ЕВН, ЕРМ, ВиК. Тук нещата стават по-интересни. Всяко дружество има свой формат, своя структура, понякога Windows-1251 кодиране вместо UTF-8. ЕВН Юг например използва ASP.NET форми с __VIEWSTATE токени, където за всеки от 9-те региона трябва да се направи отделна POST заявка. ЕРМ публикуват PDF-и. ВиК дружествата — таблици в HTML, понякога plain text.

Глобални системи за мониторинг — NASA FIRMS/VIIRS за горски пожари (сателитни данни с резолюция 375м, обновявани на 3 часа), EU Safety Gate за опасни продукти, МААЕ за ядрени инциденти.

Общо над 50 активно следени институции.

Пътят от текст до координати

Комуналните дружества не предоставят геоданни. Те пишат текст: "авария Населено място: гр. Пловдив Място: ул. „Рогошко шосе" Засегнати: района на аварията".

Signalio трябва да превърне това в координати — и да го направи правилно.

Процесът минава през три стъпки:

1. Парсиране — специализиран Bulgarian Address Parser разпознава над 15 формата на адрес. Регулярни изрази за ЕТР X/Y формата (ЕВН Варна), за "КЕЦ NR-XX Община" формата (ЕВН Пловдив), за "Пловдив обл., гр.Хисаря" формата (ВиК Пловдив), за "с.МАНОЛЕ" с главни букви без интервал. Всяко дружество пише по свой начин.

2. Геокодиране — след парсирането се изгражда оптимизирана заявка за Nominatim (собствена инстанция с пълен import на OpenStreetMap за България). Тук имаше много уроци: Nominatim намира улиците по-добре без "ул." префикс. "Рогошко шосе, Пловдив" работи; "ул. Рогошко шосе, Пловдив" — не. За квартали на Варна добавяме "кв." префикс, за да разграничим "кв. Изгрев, Варна" от едноименното село край Суворово.

3. Fallback верига — ако пълният адрес не намери резултат, опитваме само улицата. После само населеното място. После Ollama (локален LLM) за екстракция на адрес от свободен текст. После само общината. Има сигнали, при които дори тази верига не успее — дружеството е написало "стопански двор" без повече информация. В тези случаи падаме до центъра на населеното място.

Цялата верига се изпълнява в Redis-базирана опашка с rate limiting — Nominatim изисква максимум 1 заявка в секунда.

Защо не просто ползвате Google Maps?

Добър въпрос. Nominatim с OpenStreetMap данни има три предимства: безплатен е без лимити, данните за България са изненадващо добри (особено за малки села и квартали), и можем да го хостваме сами — което означава пълен контрол и GDPR compliance.

Минусът: улици, добавени след последния import, няма да бъдат намерени. Но за нашия случай — стари комунални мрежи, исторически квартали — това рядко е проблем.

Какво следим

  • Токово захранване — ЕРМ Запад, ЕРП Север, EVN (Юг и Варна), ENTSO-E
  • Водоснабдяване — 14 ВиК дружества
  • Метеорология — MeteoAlarm, НИМХ (метео + хидро)
  • Наводнения — GDACS, EFAS/Copernicus
  • Горски пожари — NASA FIRMS (VIIRS сателит, обновяване на 3 часа)
  • Земетресения — Европейски сеизмологичен портал, GDACS
  • Качество на въздуха — AQICN/WAQI, EEA
  • Топлофикация и газ — Топлофикация София/Пловдив, Bulgartransgaz
  • Транспорт — СОТ, БДЖ, АПИ/БТА, Пловдив, Варна
  • Морска безопасност — NAVTEX (Черно море, станция J Варна)
  • Радиационен мониторинг — EURDEP/JRC (точки BG1–BG6)
  • Опасни продукти — EU Safety Gate (RASFF/RAPEX)
  • Ядрени инциденти — МААЕ NEWS (INES скала)

Всяка нова категория или дружество е отделен "spider" — модул, знаещ как да чете конкретния сайт или API. Добавянето на нов source отнема часове, не дни.

Свързани статии

Използваме само необходими бисквитки. Аналитични (Google Analytics) включваме само с ваше съгласие.

Подробности