Знакомая ситуация: сидишь на объекте, смотришь в проект — давление указано в кгс/см², а на манометре бары. В голове пытаешься вспомнить коэффициент. Или заказчик спрашивает: «А сколько это в гигакалориях?» — и ты лезешь в Google, открываешь три вкладки, считаешь на калькуляторе...
Я инженер ОВиК. Отопление, вентиляция, кондиционирование — это моя ежедневная работа. И каждый день одно и то же: пересчитай давление, переведи расход, посчитай скорость в трубе, прикинь объём расширительного бака. Рутина, которая отнимает время и нервы.
Почему существующие приложения не устроили
Я честно пытался найти готовое решение. Вот что нашёл:
Универсальные конвертеры — знают килограммы, метры, литры. Но попробуй найти там кгс/м², Гкал/ч или мм водяного столба. Этих единиц просто нет, потому что разработчики — не инженеры.
Инженерные калькуляторы — существуют, но:
Половина на английском без локализации
Реклама на полэкрана после каждого расчёта
Подписка 300₽/мес за то, чтобы посчитать потерю давления на клапане
Нужен интернет (а на объекте связь бывает не всегда)
В какой-то момент я подумал: я же умею писать на Python. Почему бы не сделать самому?
От идеи до приложения: выбор инструментов
Я не мобильный разработчик. Я не знаю Kotlin, не знаю Swift, не хочу разбираться в Android SDK. Зато я пишу на Python скрипты для работы — автоматизация расчётов, обработка данных, всё такое.
Оказалось, есть Kivy — фреймворк, который позволяет писать мобильные приложения на чистом Python. А Buildozer упаковывает это в обычный APK. Никакой Java, никакого Gradle. Пишешь на Python — получаешь приложение для телефона.
Звучит как магия? Отчасти так и есть. Но с нюансами — о них позже.
Что в итоге получилось
Конвертер, который знает инженерные единицы
10 категорий, 60 единиц измерения. Не просто длина-масса-температура, а то, с чем реально работают инженеры:
Давление — Па, кПа, МПа, кгс/м², кгс/см², мм.рт.ст., мм.вод.ст., бар, м.вод.ст. (да, все 9 штук, которые встречаются в проектной документации)
Мощность — включая ккал/ч, Мкал/ч, Гкал/ч и BTU/ч (попробуйте найти Гкал/ч в обычном конвертере)
Расход — м³/с, м³/мин, м³/ч, л/с, л/мин, л/ч
Плюс энергия, температура, длина, площадь, объём, масса, скорость
Вводишь значение — и сразу видишь таблицу пересчёта во все единицы категории. Не надо выбирать «из чего — во что» по одной штуке.
5 инженерных калькуляторов — то, что считаешь каждый день
Скорость потока в трубе. Выбрал материал (сталь, PPR, PEX, медь), выбрал DN — приложение знает реальные внутренние диаметры. Ввёл расход — получил скорость. Тут же справка: для магистралей норма 1.5-3.0 м/с, для распределения 0.5-1.5 м/с. Не надо лезть в СНиП.
Тепловая мощность. Формула Q = G × ρ × c × ΔT / 3600 — простая, но каждый раз нужно вспоминать теплоёмкость и плотность. А если теплоноситель — не вода, а гликоль? А при какой температуре? А при какой концентрации? Всё это приложение считает само: вода, этиленгликоль, пропиленгликоль, концентрация 10-60%, свойства интерполируются по температуре.
Потеря давления на клапане. Знаешь расход и Kvs — получи ΔP. Два поля, одна кнопка.
Объём расширительного бака. По СП 60.13330-2020. Вводишь мощность системы, диапазон температур, давления, тип теплоносителя — приложение считает нужный объём и сразу подбирает ближайший стандартный размер бака. От 5 до 1000 литров.
Площадь изоляции. Для составления спецификаций и смет — площадь и объём изоляции по диаметру трубы, толщине и длине.
Работает без интернета
Это было принципиальным требованием. На стройке, в подвале, в техническом помещении — связь есть не всегда. Приложение не делает ни одного сетевого запроса. Все данные, коэффициенты, таблицы свойств — встроены в код.
Русский и английский
Переключается одной кнопкой. Весь интерфейс, все подписи, справочная информация — всё на двух языках.
Техническая сторона (для тех, кому интересно)
Один файл — всё приложение
Весь проект — это один main.py на ~1200 строк. Без базы данных, без сервера, без внешних API. Данные (размеры труб, свойства теплоносителей, коэффициенты пересчёта) живут в словарях прямо в коде.
Можно ли было разбить на модули? Да. Нужно ли? Для инструмента такого размера — нет. Один файл проще поддерживать, проще собирать, проще отлаживать.
Свойства теплоносителей — не константы
Самая интересная техническая часть — расчёт тепловой мощности. Плотность и теплоёмкость воды и гликолей зависят от температуры. Для точного расчёта в приложении хранятся таблицы свойств с шагом 10°C, а значения между точками получаются линейной интерполяцией:
def interpolate(self, table, temp): temps = sorted(table.keys()) if temp <= temps[0]: return table[temps[0]] if temp >= temps[-1]: return table[temps[-1]] for i in range(len(temps) - 1): if temps[i] <= temp <= temps[i + 1]: t1, t2 = temps[i], temps[i + 1] v1, v2 = table[t1], table[t2] return v1 + (v2 - v1) * (temp - t1) / (t2 - t1)
Для этиленгликоля и пропиленгликоля данные хранятся с учётом концентрации — двумерные таблицы «температура × концентрация».
Сборка: Windows + WSL2 + Buildozer
Buildozer работает только в Linux. На Windows спасает WSL2:
# Первая сборка (~15 минут — скачивает Android SDK/NDK) buildozer android debug # Release-версия для публикации buildozer android release
Итоговый APK весит ~35 МБ. Да, многовато для калькулятора — это цена Python-рантайма внутри. Нативное приложение весило бы 5-10 МБ. Но для офлайн-инструмента это терпимо.
Публикация в RuStore
Выбрал RuStore как первую площадку — он набирает популярность, и для российских пользователей это логичный выбор.
Процесс оказался достаточно простым:
Загружаешь APK и сертификат подписи
Заполняешь карточку: описание, скриншоты, иконка, категория
Указываешь что приложение не собирает данных (а оно действительно не собирает — ни аналитики, ни трекеров, ничего)
Отправляешь на модерацию
Модерация прошла за пару дней.
Что пошло не так (а что-то всегда идёт не так)
Размер APK. 35 МБ за калькулятор — звучит смешно. Но Python-рантайм, который упаковывается внутрь, весит около 30 МБ. Это главный минус Kivy. Решения два: смириться или переписать на Kotlin. Я выбрал первое.
Кириллица в Kivy. Не все шрифты корректно рендерят кириллицу. Решение нашлось быстро — использовать системные шрифты. Но нервы потрепало.
Тестирование. Эмулятор Android Studio — это не реальный телефон. Некоторые вещи (скорость отклика, размер элементов, удобство ввода) можно оценить только на реальном устройстве. Совет: не откладывайте тест на реальном телефоне до последнего.
Что дальше
Google Play — AAB уже собран, в планах регистрация аккаунта разработчика
iOS — код адаптирован, для сборки нужен Mac
Новые расчёты — подбор насоса, расчёт воздуховодов, гидравлически�� расчёт системы отопления
Ваши идеи — если пользуетесь приложением и не хватает какого-то расчёта, напишите
Итого
Можно ли написать полезное мобильное приложение, не будучи мобильным разработчиком? Да, если знаешь Python и у тебя есть конкретная проблема, которую нужно решить.
Kivy + Buildozer — не идеальный стек. APK большой, производительность не как у нативного приложения, экосистема библиотек скромная. Но для инструмента, который решает конкретную задачу конкретных людей — этого более чем достаточно.
Главное — я больше не гуглю «кгс/см² в бары». И вы можете не гуглить.
Скачать бесплатно в RuStore: Engineering Converter
Бесплатно. Без рекламы. Без интернета. Без регистрации. Просто инженерный инструмент.
Если вы инженер ОВиК, проектировщик, монтажник, сантехник или студент технического вуза — попробуйте. И напишите в комментариях, каких расчётов и единиц не хватает. Я добавлю.
