Знакомая ситуация: сидишь на объекте, смотришь в проект — давление указано в кгс/см², а на манометре бары. В голове пытаешься вспомнить коэффициент. Или заказчик спрашивает: «А сколько это в гигакалориях?» — и ты лезешь в 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 как первую площадку — он набирает популярность, и для российских пользователей это логичный выбор.

Процесс оказался достаточно простым:

  1. Загружаешь APK и сертификат подписи

  2. Заполняешь карточку: описание, скриншоты, иконка, категория

  3. Указываешь что приложение не собирает данных (а оно действительно не собирает — ни аналитики, ни трекеров, ничего)

  4. Отправляешь на модерацию

Модерация прошла за пару дней.

Что пошло не так (а что-то всегда идёт не так)

Размер APK. 35 МБ за калькулятор — звучит смешно. Но Python-рантайм, который упаковывается внутрь, весит около 30 МБ. Это главный минус Kivy. Решения два: смириться или переписать на Kotlin. Я выбрал первое.

Кириллица в Kivy. Не все шрифты корректно рендерят кириллицу. Решение нашлось быстро — использовать системные шрифты. Но нервы потрепало.

Тестирование. Эмулятор Android Studio — это не реальный телефон. Некоторые вещи (скорость отклика, размер элементов, удобство ввода) можно оценить только на реальном устройстве. Совет: не откладывайте тест на реальном телефоне до последнего.

Что дальше

  • Google Play — AAB уже собран, в планах регистрация аккаунта разработчика

  • iOS — код адаптирован, для сборки нужен Mac

  • Новые расчёты — подбор насоса, расчёт воздуховодов, гидравлически�� расчёт системы отопления

  • Ваши идеи — если пользуетесь приложением и не хватает какого-то расчёта, напишите

Итого

Можно ли написать полезное мобильное приложение, не будучи мобильным разработчиком? Да, если знаешь Python и у тебя есть конкретная проблема, которую нужно решить.

Kivy + Buildozer — не идеальный стек. APK большой, производительность не как у нативного приложения, экосистема библиотек скромная. Но для инструмента, который решает конкретную задачу конкретных людей — этого более чем достаточно.

Главное — я больше не гуглю «кгс/см² в бары». И вы можете не гуглить.


Скачать бесплатно в RuStore: Engineering Converter

Бесплатно. Без рекламы. Без интернета. Без регистрации. Просто инженерный инструмент.


Если вы инженер ОВиК, проектировщик, монтажник, сантехник или студент технического вуза — попробуйте. И напишите в комментариях, каких расчётов и единиц не хватает. Я добавлю.