Samsung Innovation Campus

Идёт набор участников открытого интенсива для школьников Mobile GameDev Bootcamp по разработке мобильных игр! Регистрация до 24 мая

Здравствуйте, уважаемые участники хакатона IT Academy Hack 2024!

Тема нашего хакатона звучит как «Citizen Science + Экология». Благодаря повсеместному распространению Интернета и удешевлению сенсоров, на службе экологии начали появляться новые коллективные сервисы для отслеживания показателей загрязнения окружающей среды и предотвращения возможных нарушений законодательства в этой сфере. Собирают данные для этих сервисов обычные люди — волонтеры. Из-за отсутствия бизнес-применения, такие сервисы тем не менее остаются нишевыми и не привлекают большого количества участников.

Наша цель — придумать продукт, который использует данные, собранные в сервисе Citizen Science, способен привлекать финансирование и обеспечивает устойчивое развитие сервиса. И создать прототип этого продукта.

На нашем хакатоне мы предлагаем сосредоточиться на следующих параметрах: концентрация мелкодисперсных взвешенных частиц (PM2,5 и PM10), температура, влажность, давление, а также уровень шума. Но вы можете выбрать и другие параметры, исходя из вашей бизнес-задачи.

Задание для удобства разбито на четыре основных составляющие: 

  • Идея продукта
  • Устройство
  • Интерфейс
  • Аналитика

Для упрощения вашей работы, мы подготовили учебное хранилище данных StudentsEcoMap (описано в Приложении), которым вы можете по желанию воспользоваться. Схема системы дана ниже, на ней заштрихованы те части продукта, которые вы разрабатываете самостоятельно.

Мы подготовили для вас техническое задание, описывающее составляющие продукта. Работать над составляющими можно изолированно, но больше всего баллов вы получите, если будете держать в уме продуктовую задачу. Поэтому залог успеха — согласованная работа всех участников команды. 

На выполнение задания у вас будет не так уж много времени, в общей сумме около 14 часов (если забыли, где посмотреть расписание — оно в Положении). Не забывайте есть, спать и отдыхать 🙂

Ваша презентация должна длиться не более 5 минут и посвящена в основном продуктовой задаче (решение технических задач у вас проверят менторы на чекпоинтах). В презентации расскажите о ключевых особенностях вашего прототипа. По итогам презентации жюри задаст вам свои вопросы.

1. Идея продукта

Придумайте идею продукта, прототип которого вы будете создавать в рамках хакатона.

Нарисуйте бизнес-модель этого продукта, реализованного по модели научного волонтерства. Как можно окупить затраты на ее разработку и поддержку? 

Особое внимание уделите следующим пунктам бизнес-модели: 

  • Потенциальные партнеры такого продукта. Можно ли заинтересовать бизнес? Производители каких товаров могут быть партнерами? Какие еще источники финансирования, помимо коммерческих организаций, вы можете назвать?
  • Ценностное предложение: какую мотивацию вы можете предложить клиентам? Как поощрять наиболее активных участников сообщества?

Полезные материалы к задаче:

  • Лекция «Что такое Citizen Science»: видео

2. Устройство

Ваша задача заключается в разработке устройства сбора данных, необходимых для реализации вашего продукта. Подумайте о параметрах окружающей среды, которые могут быть измерены, и реализуйте их в вашем решении. Данные должны передаваться в хранилище данных. Вы можете воспользоваться предложенным нами хранилищем StudentsEcoMap (см. Приложение). Устройство может быть реализовано в двух вариантах на ваш выбор: 

  • На микроконтроллере/микрокомпьютере (ESP8266/32, STM32, Raspberry Pi и т.д). В качестве референса можно использовать устройство проекта Sensor Community.
  • На базе смартфона. В этом случае вы разрабатываете мобильное приложение, которое считывает необходимые вам данные, например, уровень фонового шума в акустических децибелах.

Бонусные баллы за решение подзадач:

  • Устройство оснащено корпусом. Как  вариант, это может быть концепт корпуса (если в необходимые сроки изготовить его невозможно)
  • Устройство имеет экран/графический интерфейс для наглядного отображения показателей

Полезные материалы к задаче:

  • Инструкция «Изучаем датчик чистоты воздуха SDS011: подключение»: видео
  • Инструкция «Подключаемся к облачной платформе Яндекса»: видео

3. Интерфейс

Интерфейс должен быть разработан с учетом задачи вашего продукта. Он должен помогать клиенту решать его «боль» и учитывать особенности вашего ценностного предложения. В интерфейсе обязательно должна присутствовать карта, отображающая показания всех устройств, необходимых в рамках вашей продуктовой задачи. Допустима реализация веб- или мобильного интерфейса системы.

Данные отображаются из выбранного вами хранилища (StudentsEcoMap, либо стороннего, либо созданного вами самостоятельно). В случае, если вы решили реализовать хранилище данных самостоятельно, то для демонстрации работоспособности решения вам нужно будет отобразить дополнительно загруженные демо-данные. В качестве источника дополнительных данных вы можете использовать проект Sensor Community (имейте в виду, что Sensor Community — это некоммерческий проект Citizen Science, и вам не стоит перегружать эту систему своими запросами).

Бонусные баллы за решение подзадач:

  • Пользователь может видеть на карте свою позицию
  • Сделайте наглядную маркировку показаний сенсоров. При масштабировании карты, ее наглядность не должна теряться. Решите, как отображать несколько показателей (температура/влажность/…), если в вашей системе они присутствуют
  • Представьте на карте исторические данные за прошедший период — чтобы можно было «промотать» историю на прошлые даты

Полезные материалы к задаче:

  • Лекция о работе с географическими данными в Kotlin: ссылка
  • Инструкция «Подключаемся к облачной платформе Яндекса» (для работы со StudentsEcoMap): видео

4. Аналитика

Для решения вашей продуктовой задачи, реализуйте обработку и анализ полученных от сенсоров данных. Выгрузите данные и визуализируйте их в удобном вам инструменте.

В качестве источников данных вы можете использовать:

  • данные, собранные платформой научного волонтерства Sensor Community
  • данные, собранные участниками хакатона на учебном сервере StudentsEcoMap
  • любую другую платформу сбора экологических данных на ваш выбор

Сверхзадача: выберите один из вариантов возможного анализа данных или предложите свой:

  • Пример: вы решаете продуктовую задачу «Система оповещения», согласно которой необходимо отслеживать общую экологическую ситуацию и предупреждать о выходе какого-либо участка за пределы нормы. В этом случае ваша аналитическая задача будет состоять в детектировании выбросов данных: придумайте подход к классификации аномально высоких показателей, в простейшем варианте это будет отклонение от среднего.
  • Пример: вы решаете продуктовую задачу оценки экологической ситуации на определенном участке, скажем, для оценки стоимости недвижимости. В этом случае, ваша аналитическая задача — интерполяция. На карте видно, что станции измерения качества воздуха расположены далеко друг от друга. Вам нужно будет заполнить пропуски в сенсорных данных сторонними данными из других источников: уровни загруженности дорог, отопительные сезоны, направление ветра и прочие факторы, влияющие на содержания вредных веществ в воздухе. 
  • Пример: вы решаете продуктовую задачу «Моя здоровая прогулка» — оценка пешеходных маршрутов из точки в точку с выбором наиболее здорового маршрута с точки зрения чистоты воздуха. В этом случае вашей аналитической задачей будет алгоритм покраски маршрутов исходя из показаний сенсоров в ближайших точках. Для построения вариантов маршрутов можете использовать открытый API OpenRouteService.
  • Пример: вы решаете продуктовую задачу прогноза чистоты воздуха. Вашей аналитической задачей будет выявить временные тенденции в изменении качества воздуха. Видите ли вы какую-либо цикличность (время суток, время года)? Используя инструментарий временных рядов, можно попробовать предсказать значения датчиков, которые мы собираемся учитывать в определенной точке.
  • Не ограничиваясь предложенными выше типовыми задачами, предложите свой вариант, решающий придуманную вами продуктовую задачу! Работа в «свободной» номинации даст вам больше баллов.

Полезные материалы к задаче:

  • Пример порядка работы для тех, кто выбрал работать с проектом Sensor Community: данные выложены в открытый доступ, где они хранятся в формате CSV. Для удобства умельцы написали небольшую библиотечку для работы с ними напрямую. Для нашей задачи функциональность этой библиотеки может быть избыточна, но она уже есть, можно ею воспользоваться. 
  • Лекция о работе с временными рядами: ссылка
  • Обратите внимание на проект «Бризометр» — там вы можете провести сравнение с данными, полученными другим способом (фото со спутника).

Приложение

Чеклист оценивания

Чеклист с прописанными баллами за каждое задание находится здесь: чеклист.

Техническая справка: StudentsEcoMap

Учебный сервер сбора телеметрии, реализован на базе Яндекс.Облака. Включает в себя MQTT-брокер, базу данных PostgresSQL, функцию-обработчик. Для получения доступа к серверу в качестве наблюдателя (например, для просмотра логов) обращайтесь к Татьяне Волковой или Алексею Шадрикову, через Discord-сервер.

Разработчики графического интерфейса могут взаимодействовать с базой данных посредством SQL-запросов, а разработчики устройства — с MQTT-брокером, куда отправляются данные.

О сервере рассказано здесь:

  • Инструкция «Подключаемся к облачной платформе Яндекса»: видео

База данных

Данные для подключения к базе данных:

  • Hostname: rc1d-gh60uaznwt0p6gc1.mdb.yandexcloud.net
  • Порт: 6432
  • Название БД: telemetry
  • Логин: guest
  • Пароль: BO1JXIZ&toSpG25A
  • Где скачать сертификат удостоверяющего центра (CA certificate): ссылка
  • Запрос на получение всех имеющихся в базе данных: SELECT * FROM telemetry_hist

MQTT-брокер

Данные для отправки сообщения на MQTT-брокер:

  • Адрес брокера: mqtts://mqtt.cloud.yandex.net
  • Порт: 8883
  • Шифрование: TLS v1.2
  • Где скачать сертификат удостоверяющего центра (CA certificate): ссылка
  • Логин: ваш deviceID
  • Пароль: ваш пароль от устройства
  • QoS: 1
  • Топик, куда отправляем данные: $registries/arev7mm0e3m31r168s15/events
  • Периодичность отправки данных рекомендуем сделать следующую: один раз в пять минут.

Где взять логин и пароль устройства

Каждая команда получает следующие данные для авторизации своего устройства на MQTT-брокере:

  • Имя устройства
  • ID устройства
  • Пароль устройства 

Эти данные находятся в учебной системе, в разделе «Справочные материалы — Данные для авторизации устройства» выберите группу своей команды в списке изолированных групп.

По умолчанию устройство одно на команду, если нужно больше, обращайтесь в Discord к Татьяне Волковой.

Формат сообщений

Формат передаваемых данных выглядит так:

{"device_timestamp": "2024-04-17T08:28:47.340Z", "device_name": "iot_test_device",  "sensor_model": "sds011", "location": [{"latitude": "55.796441"}, {"longitude": "37.600502"}], "sensordatavalues": [{"value_type": "PM2_5", "value": "4.9"}, {"value_type": "PM10", "value": "7.1"}]}

Географическая метка выглядит как пара значений latitude, longitude.

Измеренные значения представляют собой массив пар «тип значения — значение». Пример:

{"value_type": "PM2_5", "value": "4.9"}, {"value_type": "PM10", "value": "7.1"}

Названия показателей (value_type):

  • PM2_5
  • PM10
  • humidity
  • temperature
  • pressure
  • noise
  • cpm
  • other

Список моделей сенсоров: ссылка (также есть в базе данных telemetry, в таблице sensors_models)

Таким образом, пример отправляемой с устройства строки выглядит так:

{"device_timestamp": "2024-04-17T08:28:47.340Z", "device_name": "iot_test_device",  "sensor_model": "sds011", "location": [{"latitude": "55.796441"}, {"longitude": "37.600502"}], "sensordatavalues": [{"value_type": "PM2_5", "value": "4.9"}, {"value_type": "PM10", "value": "7.1"}]}

Если в посылке данных отсутствует хотя бы одно поле, посылка отбрасывается и не вносится в базу данных. Пример неоформленной строки:

{“datetime”: “2024-04-17T08:28:47.340Z”, “sensordatavalues”: [{“value_type”: “temperature”, “value”: “25”}]