Для кого и зачем
-
Агрономы и владельцы теплиц: понимать, что прогноз — реален и полезен, но не «магия».
-
Клиенты блога: увидеть дорожную карту: «что будет в продукте и как это поможет».
-
Разработчики Gros.farm: получить понятное ТЗ по данным, логике, API, интерфейсам.
Кратко о чём речь в статье
-
Региональные климат-карты в теплицах почти бесполезны; нужен локальный прогноз по микроклимату зоны.
-
Мы комбинируем: degree-days (как в DDRP-подобных моделях) + тепличный контекст (вентиляция, фенофаза, санитария, обработки) + живые наблюдения (ловушки и осмотры).
-
Выдаём Risk-score и ETA ближайших событий («массовый выход имаго через 6–9 дней») плюс практичные рекомендации IPM.
-
MVP: 4 ключевых вредителя теплицы — белокрылка, трипсы, тли, паутинный клещ.
-
Точность растёт с дисциплиной наблюдений и локальной калибровкой.
Что лежит в основе
Есть научная open-source система под названием DDRP (Degree-Days, Risk, and Phenological event mapping).
Она написана на языке R и используется в США для прогнозирования вредителей в открытом грунте.

Как работает DDRP:
-
Берёт климатические данные (температуру по часам/дням).
-
Считает так называемые «тепловые суммы» (degree-days, DD).
-
По известным биологическим порогам (например, сколько тепла нужно, чтобы личинка превратилась во взрослое насекомое) прогнозирует сроки появления стадий и риск вспышки.
-
Используется для инвазивных вредителей (например, плодожорки или саранчи).
Почему это можно использовать в теплицах:
-
В теплицах тоже есть температура, значит, тепловые суммы работают.
-
Мы можем создать «сущности» (белокрылка, трипсы, тли, паутинный клещ) и задать им их параметры.
-
DDRP — открытая система: её можно адаптировать, дообучить и встроить в Gros.farm как ядро прогноза.
Мини-глоссарий
-
Degree-days (DD) — «тепловые суммы». Математический способ посчитать, сколько тепла насекомое «накопило» для развития.
-
Нимфа — промежуточная стадия развития насекомого между личинкой и взрослой особью (имаго).
-
Имаго — взрослая стадия насекомого, способная размножаться.
-
MVP (Minimum Viable Product) — минимальный рабочий продукт. Первая версия системы, которая уже полезна пользователям, но ещё не полная.
-
ETA (Estimated Time of Arrival) — прогнозируемое время наступления события (например, через 6–9 дней будет пик имаго).
-
Risk-score — показатель риска (от 0 до 100), который система считает по текущим условиям.
-
IPM (Integrated Pest Management) — интегрированная система защиты растений: сочетание наблюдений, биозащиты и химии.
-
Ассимиляция данных — метод, когда модель подстраивается под фактические наблюдения (например, ловушки), чтобы быть точнее.
Часть первая. Проблема и контекст
Почему это сложно в теплице
-
Нет «зимовки» в классическом смысле. В теплице климат сглажен, популяции не «обнуляются» зимой и дают больше поколений.
-
Климат — управляемый. Режимы вентиляции, штор, полива и обогрева меняют условия быстрее, чем открытое поле.
-
Сильное влияние технологии. Биозащита, санитарные практики, поставки рассады и логистика внутри хозяйства зачастую важнее региональной погоды.
-
Летние неотапливаемые теплицы зависят от улицы: есть миграция вредителей снаружи, форточки открыты — и это надо учесть.
Что реально можно предсказывать
-
Окна высокого риска (когда вероятность взлёта численности велика).
-
ETA пиков стадий (через сколько дней будет массовый выход имаго/яйцекладка).
-
Оценка числа поколений за сезон/месяц при текущем микроклимате.
Что не обещаем
Архитектура решения (три слоя)
A) Ядро degree-days (DD)
Определяет «скорость времени» для вредителя: по почасовой температуре считаем накопленные тепловые суммы, чтобы понять прогресс жизненных стадий (яйцо → личинка/нимфа → куколка/нимфа → имаго).

Что нужно на вход:
-
Почасовая температура в зоне (датчики Gros.farm).
-
Базовые параметры вида: нижний и верхний пороги развития, DD по стадиям, опционально — штрафы за экстремальные T.
Что на выходе:
-
Процент завершения текущей стадии.
-
Дата/окно наступления следующей стадии.
-
Прогноз количества поколений за период.
B) Тепличный контекст
Модификаторы, которые «приземляют» расчёт к реальности конкретной зоны.
-
Вентиляция/форточки → риск заноса снаружи (важно летом).
-
Фенофаза культуры → привлекательность хозяина (молодые листья/цветение).
-
Санитария → чистота, липкие барьеры по периметру, севооборот.
-
Обработки/биозащита → снижение численности и/или плодючести после событий.
-
Внешний фон (для летних теплиц) → наружные DD и «сезон миграции».
Контекст не отменяет ядро, а масштабирует риск и смещает ожидаемую динамику.
C) Наблюдения и ассимиляция
Регулярные липкие ловушки, осмотры листьев и/или фото-ловушки.
-
Каждые N дней сравниваем модель с фактом и корректируем скрытую численность (простая ассимиляция).
-
Калибруем локальные коэффициенты (плодючесть, смертность после обработок) на истории хозяйства.
Результат трёх слоёв: понятный Risk-score (0–100), ETA ближайших событий и рекомендации (что сделать и когда).
Математика ядра
3.1. Что такое degree-days
Degree-days (DD) — это «тепловая валюта» развития насекомых.
За каждый час/день организм «копит» DD, если T выше нижнего порога (и ниже верхнего). Когда суммарные DD достигают значения для стадии — наступает переход.
-
Tbase — ниже этой температуры развитие почти останавливается.
-
Tupper — выше этой температуры развитие не ускоряется и/или повышается смертность.
-
DD по стадиям — сколько «тепла» нужно, чтобы пройти каждую фазу (яйцо, личинка/нимфа, куколка/нимфа, подготовка имаго).
3.2. Как считать DD в теплице
В теплицах суточные колебания могут быть значимыми (утро/день/ночь). Для точности используем метод синусоиды (double sine) или, упрощённо, «треугольник» по T_min/T_max, с обрезкой по Tbase/Tupper.
Суть алгоритма (упрощённо):
-
Берём почасовую T.
-
Для каждого часа:
-
Если T < Tbase → вклад = 0
-
Если T > Tupper → вклад = Tupper − Tbase
-
Иначе → вклад = T − Tbase
-
Суммируем за сутки → получаем DD_сутки.
-
Накапливаем по дням.
Для резких суточных волн лучше интегрировать синусоидально между T_min и T_max, чтобы не завышать/не занижать DD.
3.3. Мини-пример параметров (белокрылка, ориентировочно)
-
Tbase ≈ 10 °C, Tupper ≈ 32 °C
-
DD на цикл ≈ 250 DD (при 25 °C полный цикл ≈ 25 дней)
-
Разбивка по стадиям (пример для MVP, уточняется в калибровке):

3.4. Вычисление прогресса стадий
Для каждой стадии храним «сколько DD накоплено». Как только достигаем порога — фиксируем переход и начинаем счёт следующей стадии. Параллельно учёт adult lifespan (в DD) и средней плодючести позволяет оценить темп появления нового поколения.
3.5. Экстремальные температуры (опционально)
Вводим мягкие штрафы смертности при длительном нахождении выше/ниже порогов (например, >35 °C или <8 °C). Это снижает «эффективную численность» и корректирует ETA.
3.6. Псевдокод ядра
# вход: почасовая T, параметры вида
dd_day = 0
for hour in day_hours:
Th = T_hour[hour]
if Th <= Tbase: add = 0
elif Th >= Tupper: add = (Tupper - Tbase)
else: add = (Th - Tbase)
dd_day += add / 24.0 # нормируем к суткам при почасовых данных
state.dd_accum += dd_day
# переход стадий
while state.dd_accum >= stage_threshold[state.stage]:
state.dd_accum -= stage_threshold[state.stage]
state.stage = next_stage(state.stage)
# оценка ETA до следующего события
eta_days = (stage_threshold[state.stage] - state.dd_accum) / mean_dd_per_day
3.7. Границы применимости
-
В зимних отапливаемых теплицах — расчёты стабильнее (T ровнее), пики легче поймать по DD.
-
В летних неотапливаемых теплицах — добавляем внешний фон (наружные DD) в блок контекста, т.к. занос с улицы повышает риск.
Часть 2. Как это внедряем в Gros.farm
Сущности и словарь данных (что именно храним)
4.1. species.json
— профиль вредителя (настраиваемый)
Минимальный набор полей:
-
species_id
— уникальный ID (латиницей: whitefly_trialeurodes_vaporariorum
)
-
name_ru
— «Белокрылка тепличная»
-
params
:
-
Tbase
, Tupper
— нижний/верхний пороги развития (°C)
-
dd_per_stage
— требуемые DD по стадиям: egg
, larva
/nymph
, pupa
/quiescent
, adult_prep
-
fecundity_mean
— средняя яйцекладка самки (шт/жизнь)
-
adult_lifespan_dd
— «жизнь имаго» в DD (чтобы переводить в дни при текущей T)
-
extreme_penalties
— мягкие штрафы смертности за часы при T > Thigh
и T < Tlow
-
context_modifiers
:
-
host_suitability
— множители по фенофазам культуры (seedling
, vegetative
, flowering
, fruiting
)
-
ventilation_influx_weight
— вес влияния часов вентиляции (занос извне)
-
sanitation_score_weight
— вес санитарного индекса
-
action_thresholds
(IPM-пороги для рекомендаций):
Профили лежат как JSON (или в БД), редактируются через админку. Это позволит быстро калибровать хозяйство-к-хозяйству.
4.2. Микроклимат и контекст зоны
-
sensor_stream
: zone_id
, ts
, temp_c
, rh
-
ventilation_log
: zone_id
, date
, open_hours
(ч/сутки)
-
crop_phase
: zone_id
, текущая фенофаза культуры из техкарты Gros.farm (seedling/vegetative/flowering/fruiting
)
-
(для летних теплиц) outdoor_temp_series
: наружная T (почасовая) или outdoor_dd
(суточные DD) — ближайшая метеоточкa
4.3. Наблюдения (мониторинг)
-
trap_count
(липкие ловушки): zone_id
, date
, species_id
, traps_used
, count_total
, photos[]
-
leaf_inspection
: zone_id
, date
, species_id
, leaves_checked
, nymphs_total
или %_infested_leaves
, photos[]
-
treatments
(обработки/биозащита): zone_id
, date
, event
(spray
/biocontrol_release
), active
/agent
, dose
, area
, note
Протокол мониторинга (минимум, чтобы модель «дышала»)
-
Ловушки: 6 шт на ~1000 м². Счёт 1 раз/неделю. Фотофиксация в приложении.
-
Осмотры листьев: 30 листьев/секцию/неделю. Отдельно фиксируем «молодые листья».
-
События: запись обработок, выпуск энтомофагов (Encarsia, Amblyseius и т. д.).
-
Вентиляция: часы открытий (можно просто дневной суммарный счётчик).
-
Летние неотапливаемые теплицы: подключаем ближайшую наружную T; считаем outdoor_dd
для индекса внешнего давления.
Без дисциплины мониторинга точность падает. Мы прямо в UI покажем индикатор «качества данных» и попросим добрать недостающие наблюдения.
Полный алгоритм (ежедневный расчёт)

6.1. Ежедневный цикл по каждой зоне × виду
-
Degree-days ядро
-
Берём почасовую T зоны → часовой вклад DD (обрезка по Tbase/Tupper
)
-
Суммируем за сутки → dd_today
→ копим в state.dd_accum
-
Когда dd_accum
≥ порог стадии → переключаем стадию, остаток переносим на следующую
-
Контекст
-
Influx
(занос): шкалируем по ventilation.open_hours / 24
. Для летних теплиц умножаем на outdoor_pressure_index
(нормированный outdoor_dd
последних 7–10 дней).
-
Host
(фенофаза): множитель из профиля вида (host_suitability[crop_phase]
)
-
San
(санитария): внутренний индекс 0–1 (чем лучше санитария, тем ниже). В MVP — задаётся вручную по зоне; позже — автоматические чек-листы.
-
Применяем контекст к «эффективной численности» и/или к fecundity_mean
(например, fecundity_eff = fecundity_mean × Host × (1−San_weight×San)
).
-
Учёт событий
-
Обработки: применяем мгновенный мультипликатор смертности (например, population *= 0.6
) и подавление плодючести/«репеллентный эффект» на N дней.
-
Биоконтроль: задаём влияние как снижение рождения/выживаемости на N дней; добавим простой decay-профиль.
-
Ассимиляция наблюдений (в дни наблюдений)
-
Risk-score и ETA
-
Рекомендации (IPM-подсказки)
-
Запись состояния, уведомления
-
Сохраняем state
, Risk
, ETA
, tips
-
Отправляем нотификации, если пересекли пороги
UX / интерфейс (что увидит пользователь)
Карточка вида по зоне
-
Иконка вредителя + название
-
Текущая стадия (иконкой)
-
Risk-score (0–100) и ETA («пик имаго через 6–9 дней»)
-
Кнопки: «Добавить наблюдение», «Создать задачу», «Планировать биозащиту»
График
-
Линия накопления DD и метки стадий
-
Вертикальные полосы будущих событий (окна)
-
Точки наблюдений (ловушки/листья) и обработок
Журнал наблюдений
-
Мини-галерея фото ловушек
-
Динамика: «особей/ловушку/неделю», «нимф/лист» или «% инфицированных листьев»
Индикатор качества данных
Интеграция с тасктрекером
Пороги и правила (по умолчанию, настраиваемые)
Эти цифры — стартовые, далее подгоним под культуру/регион/теплицу.
Дорожная карта разработки
MVP
-
Вид №1: Белокрылка
-
Интеграция T из датчиков, ручной ввод наблюдений
-
Ядро DD + базовый контекст (вентиляция + фаза культуры)
-
Risk-score, ETA, простые рекомендации
-
Карточка + график + задачи
Версия 1
-
Добавить трипса, тлю, паутинного клеща
-
Учёт обработок/биоконтроля с эффектами
-
Ассимиляция наблюдений (сглаживание S)
-
Индикатор качества данных
Версия 2
-
Фото-распознавание ловушек
-
Индекс внешнего давления (наружные DD, ветер) для летних теплиц
-
Библиотека IPM-подсказок по препаратам/энтомофагам (региональные справки)
-
Тонкая калибровка коэффициентов по хозяйству
KPI (как поймём, что работает)
-
Lead time: дней предупреждения до пика (цель 5–10)
-
Precision/Recall по «окнам пика» (меньше ложных тревог)
-
Снижение пиковых численностей vs период «до внедрения»
-
Снижение числа инсектицидных обработок при сохранении качества
Стартовые JSON-профили (черновики для калибровки)
11.1. Белокрылка тепличная (Trialeurodes vaporariorum)
{
"species_id": "whitefly_trialeurodes_vaporariorum",
"name_ru": "Белокрылка тепличная",
"params": {
"Tbase": 10.0,
"Tupper": 32.0,
"dd_per_stage": { "egg": 70, "larva": 100, "pupa": 50, "adult_prep": 30 },
"fecundity_mean": 80,
"adult_lifespan_dd": 35,
"extreme_penalties": {
"high_temp": { "threshold": 35, "mortality_per_hour": 0.05 },
"low_temp": { "threshold": 8, "mortality_per_hour": 0.03 }
}
},
"context_modifiers": {
"host_suitability": { "seedling": 1.2, "vegetative": 1.0, "flowering": 1.1, "fruiting": 1.0 },
"ventilation_influx_weight": 0.02,
"sanitation_score_weight": -0.01
},
"action_thresholds": {
"trap_count_week": 20,
"leaf_metric": { "nymphs_per_leaf": 3 }
}
}
11.2. Трипс табачный (Thrips tabaci) — как пример группы трипсов
{
"species_id": "thrips_thrips_tabaci",
"name_ru": "Трипс табачный",
"params": {
"Tbase": 10.0,
"Tupper": 34.0,
"dd_per_stage": { "egg": 60, "nymph": 120, "pupa": 40, "adult_prep": 20 },
"fecundity_mean": 60,
"adult_lifespan_dd": 30,
"extreme_penalties": {
"high_temp": { "threshold": 36, "mortality_per_hour": 0.06 },
"low_temp": { "threshold": 8, "mortality_per_hour": 0.03 }
}
},
"context_modifiers": {
"host_suitability": { "seedling": 1.1, "vegetative": 1.0, "flowering": 1.2, "fruiting": 1.1 },
"ventilation_influx_weight": 0.025,
"sanitation_score_weight": -0.012
},
"action_thresholds": {
"trap_count_week": 15,
"leaf_metric": { "nymphs_per_leaf": 2, "percent_infested_leaves": 15 }
}
}
11.3. Тли (группа: Myzus persicae / Aphis gossypii)
{
"species_id": "aphids_group",
"name_ru": "Тли (группа)",
"params": {
"Tbase": 4.0,
"Tupper": 32.0,
"dd_per_stage": { "nymph_dev": 90, "adult_prep": 20 },
"fecundity_mean": 50,
"adult_lifespan_dd": 40,
"extreme_penalties": {
"high_temp": { "threshold": 34, "mortality_per_hour": 0.05 },
"low_temp": { "threshold": 2, "mortality_per_hour": 0.02 }
}
},
"context_modifiers": {
"host_suitability": { "seedling": 1.2, "vegetative": 1.1, "flowering": 1.0, "fruiting": 1.0 },
"ventilation_influx_weight": 0.02,
"sanitation_score_weight": -0.01
},
"action_thresholds": {
"trap_count_week": 10,
"leaf_metric": { "percent_infested_leaves": 10 }
}
}
11.4. Паутинный клещ (Tetranychus urticae)
для клеща используем ту же логику DD; RH может выступать как модификатор (низкая RH ускоряет развитие/повышает риск).
{
"species_id": "spidermite_tetranychus_urticae",
"name_ru": "Паутинный клещ",
"params": {
"Tbase": 12.0,
"Tupper": 38.0,
"dd_per_stage": { "egg": 50, "larva": 40, "nymph": 60, "adult_prep": 20 },
"fecundity_mean": 70,
"adult_lifespan_dd": 40,
"extreme_penalties": {
"high_temp": { "threshold": 40, "mortality_per_hour": 0.07 },
"low_temp": { "threshold": 8, "mortality_per_hour": 0.03 }
}
},
"context_modifiers": {
"host_suitability": { "seedling": 1.1, "vegetative": 1.0, "flowering": 1.1, "fruiting": 1.1 },
"ventilation_influx_weight": 0.015,
"sanitation_score_weight": -0.01
},
"action_thresholds": {
"trap_count_week": 0,
"leaf_metric": { "mites_per_leaf": 2, "percent_infested_leaves": 10 }
}
}
API (черновик контрактов)
-
POST /pest/observation/trap
тело: zone_id, date, species_id, traps_used, count_total, photos[]
-
POST /pest/observation/leaves
тело: zone_id, date, species_id, leaves_checked, nymphs_total | percent_infested_leaves, photos[]
-
POST /pest/event
тело: zone_id, date, event, active|agent, dose, area, note
-
GET /pest/status?zone_id=&species_id=
ответ: текущая стадия, Risk, ETA, рекомендации, доверие
-
GET /pest/chart?zone_id=&species_id=&period=
ответ: ряды DD/стадий/наблюдений/событий для графика
Особенности для летних неотапливаемых теплиц
-
Сильные суточные колебания T → считать DD по часам (у нас уже есть телеметрия)
-
Внешний фон: outdoor_dd
последних 7–10 дн как прокси «сезон миграции»
-
Проветривание ежедневно 6–10 ч: Influx
растёт → в правилах поднимаем частоту мониторинга и снижаем пороги для вмешательств
-
Переезды рассады/новые поставки — всегда «событие риска» (обязательная запись в журнал)
Что нужно команде разработки для старта (конкретика)
Прогноз вредителей в теплице: будущее в Gros.farm
Зачем это нужно
Любой агроном знает: белокрылка, трипсы, тли или паутинный клещ появляются «вдруг». Сегодня чисто — через неделю уже вспышка. И начинается гонка: срочные обработки, срыв биозащиты, потери урожая.
Мы хотим перевернуть эту логику. В Gros.farm мы строим систему, которая будет заранее предупреждать о рисках, показывать окна развития вредителей и помогать принимать решение вовремя, а не «по факту».
Как это будет работать
1. Ядро прогноза: тепловые суммы (degree-days)
Развитие насекомых напрямую зависит от температуры. У каждого вида есть «порог развития» (например, белокрылка почти не развивается ниже +10 °C). Если считать, сколько тепла насекомое накопило за день, можно предсказать, через сколько дней оно перейдёт в новую стадию: вылетит из яйца, станет имаго и начнёт откладывать яйца.
Эта идея называется degree-days (сумма тепла). Она давно используется в энтомологии, но мы перенесём её в теплицу, опираясь на данные с датчиков Gros.farm.
2. Тепличный контекст
В отличие от поля, теплица живёт по своим законам:
-
летом открыты форточки → риск заноса выше,
-
культура цветёт → листья и цветы особенно привлекательны для вредителей,
-
санитария на уровне → развитие замедляется,
-
был выпуск энтомофага → численность падает.
Все эти факторы будут учтены в прогнозе. Это и есть «второй слой» системы.
3. Наблюдения и коррекция
Ни одна модель не заменит реальность. Поэтому третий слой — это живые данные из теплицы:
Каждый раз, когда мы вносим наблюдения, модель «подтягивается» к факту и становится точнее.
Что будет видеть пользователь
-
Risk-score (0–100): вероятность вспышки в ближайшие дни.
-
ETA события: «массовый выход имаго через 6–9 дней».
-
Рекомендация: «повесьте дополнительные ловушки», «подготовьте выпуск Encarsia formosa», «проведите контрольный осмотр через 3 дня».
Всё это — в интерфейсе Gros.farm: карточка по вредителю, график стадий, журнал наблюдений и кнопка «создать задачу» для сотрудников.
С какими вредителями начнём
На старте мы сосредоточимся на четырёх «классиках теплицы»:
-
Белокрылка тепличная (Trialeurodes vaporariorum)
-
Трипс табачный (Thrips tabaci)
-
Тли (Myzus persicae, Aphis gossypii и др.)
-
Паутинный клещ (Tetranychus urticae)
Именно они чаще всего «выстреливают» в закрытом грунте и наносят основные убытки.
Честные ожидания
-
Это не «оракул» и не «100% гарантия вспышки».
-
Система будет работать как ранний предупреждатель: она показывает окна риска и помогает агроному принять меры вовремя.
-
Точность зависит от дисциплины мониторинга: чем регулярнее ловушки и осмотры, тем надёжнее прогноз.
Что нужно хозяйству, чтобы это работало
-
Датчики температуры в каждой зоне (лучше почасовые данные).
-
Липкие ловушки: 6 шт на 1000 м², еженедельный счёт + фото.
-
Осмотр 30 листьев на секцию раз в неделю.
-
Фиксация обработок и выпусков биозащиты.
-
В летних неотапливаемых теплицах — подключение наружной температуры (чтобы учитывать занос с улицы).
Почему это реально
Мы не изобретаем с нуля: метод тепловых сумм десятилетиями используется в науке (например, модели DDRP для США). Мы адаптируем этот подход под теплицу, добавляем контекст (вентиляция, санитария, культура) и встроим в цифровую систему Gros.farm.
Это значит, что через несколько сезонов тепличник сможет не просто «реагировать» на белокрылку или трипса, а управлять их динамикой — сэкономив на обработках и сохранив урожай.