Как понять, что из бака сливают топливо, и почему график расхода вас обманет
Подозрение почти всегда начинается одинаково: вы открываете график уровня топлива и видите обрыв вниз. Кажется, что вопрос решён, потому что «так быстро оно само не тратится». Проблема в том, что по одному только графику уровня отличить слив от обычного расхода нельзя, и крутизна падения тут вообще ни при чём.
Ниже, на каком признаке на самом деле держится детект слива в нашем сервисе, какие пороги мы используем, на каких ложных срабатываниях обожглись и почему рублёвая оценка «сколько топлива унесли» почти всегда считается неправильно.
контроль топлива по GPS-трекеру
Коротко о главном
- Слив отличается от расхода не скоростью падения уровня, а движением машины. Топливо, потраченное в движении, это расход, каким бы резким ни выглядел график. Топливо, исчезнувшее у стоящей машины, это слив или неисправность.
- Рабочее правило детекта: падение уровня на 10 % бака и больше между прогонами проверки, при условии что машина сместилась меньше чем на 200 метров, а позиция не старше 15 минут.
- Проверять «машина стоит» по скорости нельзя. У неподвижного автомобиля GPS «плавает» и выдаёт фантомную скорость до 7 км/ч. Мы перешли на смещение координат.
- Проверяемый случай 05.09.2026: уровень вырос с 66 % до 100 % внутри интервала открытой двери (открылась за 34 секунды до, закрылась через 24 секунды после), и это совпало с записанной вручную заправкой на 18,79 л. Три независимых источника сошлись.
- Цена топлива в баке не равна цене последней заправки. Бак это смесь партий, и расход снимается со всех партий пропорционально их долям.
- Поймать слив датчиком могут только приборы, отдающие уровень бака в потоке телеметрии. У трекера без датчика уровня есть лишь ручные записи заправок, и слив по ним не виден в принципе.
- У EGTS есть штатный топливный канал (подзапись
0x1bLIQUID_LEVEL). Он работает для любого EGTS-трекера со штатным датчиком без ручной разметки каналов, поэтому мы предпочитаем его сырому аналоговому входу.
Почему график уровня топлива не отвечает на вопрос «слив или не слив»
График уровня показывает, что топлива стало меньше, но не показывает, куда оно делось. Это две разные вещи, и путают их постоянно.
Возьмите обычную загородную поездку с подъёмом и прицепом. Уровень в баке падает быстро, датчик реагирует ступеньками, и на графике получается почти вертикальный обрыв. Теперь возьмите ночной слив на парковке: шланг, канистра, те же самые литры за те же самые минуты. На графике уровня эти два случая выглядят похоже, потому что график знает только одно измерение, литры по времени.
Отдельно мешает физика самого датчика. Поплавковый или ёмкостной датчик в баке колеблется вместе с топливом: на подъёме, на торможении, на неровной парковке показания гуляют. Из-за этого «резкое падение» на графике часто оказывается не событием, а плесканием жидкости. Ловить слив по крутизне графика означает ловить в основном волну в баке.
Полезнее задать графику другой вопрос: не «насколько быстро упало», а «что в этот момент делала машина».
как сервис считает заправки и расход топлива
Правило, на котором держится детект: упал уровень плюс машина не двигалась
Наш детект срабатывает по совпадению двух условий, а не по одному. Первое: уровень топлива упал на 10 % бака или больше между двумя прогонами проверки. Второе: машина в это время стояла, то есть сместилась меньше чем на 200 метров от предыдущей известной точки.
Логика простая до банальности, и именно поэтому она работает. Топливо, потраченное в движении, это расход. Топливо, исчезнувшее у стоящей машины, это либо слив, либо неисправность топливной системы, либо сбой датчика. В любом из трёх случаев владельцу стоит об этом узнать, а вот резкий расход на трассе беспокоить его не должен.
Полный набор параметров, с которыми проверка ходит по устройствам:
| Что проверяем | Значение по умолчанию |
|---|---|
| Падение уровня, после которого возникает кандидат на слив | ≥ 10 % бака |
| Рост уровня, который считается заправкой | ≥ 12 % бака |
| Порог «машина стоит на месте» | смещение < 200 м от прошлой точки |
| Максимальный возраст позиции, с которой работаем | 15 минут |
Все пороги вынесены в переменные окружения и меняются под конкретный парк. Двадцатилитровому баку легковушки и двухсотлитровому баку грузовика одни и те же 10 % стоят очень разного количества литров, поэтому единого «правильного» числа тут нет.
Важная деталь: порог всегда считается в процентах бака, а не в сырых единицах датчика. Приборы шлют уровень кто в процентах, кто в литрах, кто в непонятных попугаях АЦП. Мы приводим всё к процентам одной общей функцией, которая знает единицы измерения канала, калибровку «пустой/полный» и ёмкость бака. Если этого не делать, порог у одной машины означает три литра, а у соседней тридцать.
Есть и защита от дребезга. Опорный уровень вместе с координатами сохраняется между прогонами прямо в состоянии устройства и перезаписывается каждый раз. Поэтому событие возникает один раз на переход «было много, стало мало», а не повторяется бесконечно, пока бак остаётся полупустым.
Грабли, на которых мы обожглись
Фантомная скорость у стоящей машины
Изначально условие «машина стоит» проверялось по скорости из последнего GPS-фикса. Казалось очевидным: скорость около нуля означает, что автомобиль неподвижен.
На реальных данных выяснилось, что у стоящей машины скорость почти никогда не равна нулю. Приёмник «плавает» в пределах нескольких метров, эти микросмещения превращаются в скорость, и в наших данных стоящий автомобиль показывал до 7 км/ч. Для проверки «едет или стоит» это катастрофа: любой разумный порог по скорости либо пропускает слив у машины с шумным фиксом, либо принимает медленное движение по двору за стоянку.
Мы перешли на смещение координат: сравниваем текущую точку с точкой, запомненной в прошлый прогон, и считаем машину неподвижной, если она сдвинулась меньше чем на 200 метров. Дополнительно смотрим на признак движения от прибора, если он есть. Скорость осталась запасным вариантом на случай, когда ни того, ни другого нет.
Дубль заправки
Датчик замечает рост уровня не мгновенно: пока насос работает, пока значение стабилизируется, пока придёт следующий пакет. Человек за это время успевает вбить заправку в приложение руками.
В итоге сервис предлагал записать заправку, которая уже записана. Раздражает и подрывает доверие ко всем остальным подсказкам. Теперь перед предложением проверяется, нет ли рядом по времени свежей ручной записи.
Протухшая телеметрия, которая на самом деле свежая
Свежесть данных мы сначала мерили по времени GPS-фикса. Логика была та же: время в позиции, значит и есть время данных.
У трекера с потерянными спутниками фикс замирает, а пакеты продолжают идти. Показания датчиков в них абсолютно свежие, но по времени фикса вся телеметрия выглядит протухшей, и проверка её игнорирует. Получилось наоборот: в ситуации, когда контроль нужнее всего (машина стоит, координат нет), детект молчал. Исправлено 6 сентября 2026 года, теперь свежесть считается по времени прихода пакета на сервер.
почему трекер показывает движение при потерянном GPS
Случай, который можно проверить: три источника сошлись на одной заправке
5 сентября 2026 года последовательность в сырых данных выглядела так (время UTC):
| Время | Что произошло |
|---|---|
| 06:42:14 | дискретный канал двери: 0 → 1, дверь открыта |
| 06:42:48 | аналоговый канал adc5: 66 → 100, уровень топлива вырос |
| 06:43:12 | дискретный канал двери: 1 → 0, дверь закрыта |
Рост на 34 процентных пункта. Владелец в тот же день записал в приложении заправку на 18,79 литра, а эталонный лог самого производителя показывает на то же время «дверь открыта» и «дверь водителя закрыта» с точностью до нескольких секунд.
Три независимых источника: аналоговый датчик уровня, дискретный вход двери и человек с чеком. Ни один не знает про два других, и все трое описывают одно событие. Сходятся и числа: 34 процентных пункта на 18,79 литра дают бак примерно на 55 литров, что для этого автомобиля правдоподобно.
Обратите внимание на формулировку. Заправка попала внутрь интервала открытой двери, а не «в ту же секунду»: снимки датчиков приходят с медианным интервалом около 59 секунд, и говорить о секундной синхронности здесь нельзя. Попадание внутрь интервала — утверждение более слабое по форме и более сильное по смыслу: одно событие оказалось обрамлено другим.
Этот эпизод стоит отдельного упоминания по двум причинам. Первая: он подтверждает, что adc5 у этого прибора действительно уровень топлива, и подтверждает не догадкой, а совпадением с внешними данными. Вторая: он показывает, как выглядит правильно опознанная заправка. Рост уровня выше порога плюс открытая дверь плюс стоящая машина — заправка. Тот же рост наоборот, то есть падение у стоящей машины, — кандидат на слив. Механика одна, знак разный.
Та же заправка научила нас осторожности
Стоит рассказать и обратную сторону этого эпизода, потому что она про метод, а не про топливо.
Именно эта заправка была нашей первой уликой в пользу того, что дискретный канал din5 означает дверь. Рассуждение выглядело так: канал сработал, и одновременно выросло топливо, значит канал связан с заправкой, а заправка — это открытая дверь.
Вывод оказался верным, а обоснование — нет. Канал сработал не «из-за заправки», он сработал из-за двери, а совпадение с топливом было соседством во времени, не причиной. Разница кажется схоластической ровно до того момента, когда на таком же рассуждении вы опознаёте канал, у которого соседнего события не случилось.
Мы споткнулись об это дважды за один день, и оба раза выручало одно и то же: пересчёт на большем куске данных. Одно совпадение — это гипотеза. Проверяется она не красотой объяснения, а тем, держится ли связь на неделе записей.
Поэтому и совпадение с дверью мы намеренно не выдаём за доказательство. Как проверка оно удобно, но само по себе не доказывает ничего: дверь открывают и просто так.
настройка датчиков и дискретных входов
Вторая ошибка, которую делают почти все: цена топлива в баке
Предположим, слив вы поймали. Дальше возникает практический вопрос: на сколько рублей. И тут начинается вторая история, где интуиция снова подводит.
Наивный расчёт берёт цену последней заправки и умножает на количество исчезнувших литров. Это неверно, потому что в баке лежит не последняя заправка, а смесь.
Каждая заправка в нашей модели это партия со своими свойствами: бренд, АЗС, марка топлива, дата, количество литров и цена за литр. Расход между заправками снимается со всех партий пропорционально их долям, а не по принципу «сначала сгорает старое». Так устроена физика: топливо в баке перемешивается, а не выстраивается в очередь.
Отсюда два следствия. Первое: старые партии не исчезают, они продолжают висеть всё меньшими долями. Совсем мелкие остатки, меньше 0,2 литра, мы обнуляем как пыль, чтобы список партий не рос бесконечно. Второе: средняя цена литра в баке это взвешенная по литрам цена всех партий, у которых цена известна. Она же и есть настоящая цена того, что в баке сейчас.
Ошибка наивного расчёта растёт от двух вещей: как редко вы заправляетесь и как сильно за это время двигались цены. Заправляетесь через день до полного, ошибка почти нулевая. Ездите мало, заправляетесь раз в месяц по четверти бака, и цена последней заправки описывает меньшую часть содержимого.
Одна и та же взвешенная цифра используется у нас и в отчёте по поездкам, где считается рубль за поездку, и на экране состава бака. Это принципиально: если стоимость поездки и состав бака считать разными способами, цифры перестают сходиться между собой, и доверять нельзя уже ни одной.
Реконсиляция и партия «неизвестное топливо»
Любая модель бака дрейфует, если её не сверять с реальностью. Ручные записи забывают, литры округляют, часть расхода уходит на прогрев и холостой ход.
Поэтому в точках, где объём известен точно, а это заправка «до полного» или показание датчика уровня, модель сверяется с фактом. Если по модели топлива меньше, чем на самом деле, добавляется партия с меткой «Неизвестное топливо»: значит, была заправка, о которой мы не знаем. Если по модели больше, все партии ужимаются пропорционально.
Партия «неизвестное топливо» не участвует в расчёте средней цены. У неё нет цены, и придумывать её было бы враньём. Вместо этого её доля влияет на другую цифру.
Достоверность от 0 до 100
На вопрос «насколько верить составу бака» честный ответ это не «верить» и не «не верить», а число. Мы считаем оценку достоверности от 0 до 100 и показываем ярлыком: высокая, средняя, низкая.
Что снижает оценку:
- Доля «неизвестного топлива» в баке. До минус 40 баллов. Чем больше в баке литров непонятного происхождения, тем меньше смысла в средней цене.
- Возраст последнего показания датчика уровня. Минус 10 за 6 часов, минус 25 за сутки, минус 40 за трое суток. Модель без сверки дрейфует, и чем дольше не было сверки, тем сильнее.
- Отсутствие датчика уровня вообще. Минус 30. Остаются только ручные записи и расчётный расход.
- Давность последней заправки. Дополнительный штраф: чем дольше вы не заправлялись, тем больше накопленной расчётной ошибки в остатке.
Смысл этой цифры не в самой цифре, а в том, что она мешает принимать оценку за факт. Состав бака с достоверностью 35 это гипотеза, а не отчёт, и решать по нему кадровые вопросы не стоит.
Кто это вообще умеет, а кто нет
Здесь важно быть точным, потому что разница между «наш трекер это умеет» и «наш трекер отдаёт данные, из которых это можно посчитать» стоит владельцу денег.
Умеют приборы, которые отдают уровень бака прямо в потоке телеметрии. У нас это проверено на StarLine, работающем по EGTS: уровень топлива приходит аналоговым каналом adc5 в процентах. Есть поток, есть значение, есть детект.
Есть вариант лучше: штатный топливный канал стандарта EGTS. В протоколе для уровня жидкости предусмотрена отдельная подзапись 0x1b LIQUID_LEVEL. Traccar разбирает её сам, штатно, в атрибут liquid. С 1 сентября 2026 года мы завели этот атрибут как выбираемый источник уровня топлива рядом с adc5, в интерфейсе он подписан «уровень топлива (штатный датчик)».
Для владельца это хорошая новость, и вот почему. Аналоговый adc5 требует ручной разметки: кто-то должен выяснить, что уровень топлива у этой конкретной марки лежит именно в пятом канале, и это знание не переносится на другого производителя. Штатный канал такой разметки не требует вообще: это выделенный топливный канал стандарта, одинаковый для любого EGTS-трекера со штатным датчиком уровня. Подключили прибор, уровень появился.
Один нюанс из нашей истории стоит назвать вслух, потому что он объясняет распространённую жалобу «сервис не видит датчик». Этот канал декодировался и раньше, но приезжал он в сенсорных пакетах без координат, а такие пакеты сервер выбрасывал целиком. Данные приходили и терялись по дороге в базу. Починилось это нашим патчем протокола, и разбору самого патча будет отдельный материал.
Не умеют трекеры без датчика уровня. Простой GPS-трекер, который шлёт координаты и зажигание, о содержимом бака не знает ничего. Всё, что можно построить на таком приборе, это ручные записи заправок и расчётный расход по пробегу. Слив по ним поймать нельзя в принципе, потому что расчётный расход по определению не может показать исчезновение топлива, он его моделирует.
Не проверено: терминалы с цифровым датчиком уровня по RS-485. Такие приборы есть у нескольких производителей, например у Неоматики (линейка ADM) и у Навтелекома («Сигнал»), и теоретически они уровень передают. Но живого прибора у нас не было. Наш разбор ищет каналы с именами вида adc, din и liquid, а как эти каналы называются у конкретной модели, мы не знаем. Утверждать, что у вас заработает, было бы нечестно, поэтому пишем как есть: не проверяли.
Практический вывод для владельца: прежде чем рассчитывать на контроль слива, убедитесь, что ваш прибор действительно отдаёт уровень бака в поток, и что этот канал виден в сервисе. Проверяется это за минуту по истории телеметрии.
какие приборы и протоколы мы поддерживаем
Чего мы не знаем и не утверждаем
Этот раздел важнее, чем кажется, потому что вокруг контроля топлива очень много уверенных обещаний.
Мы не читаем CAN-шину и не читаем тахограф. Всё описанное построено на аналоговых и дискретных каналах телеметрии, которые прибор отдаёт по своему протоколу. Штатный датчик уровня автомобиля через CAN мы не опрашиваем.
Расшифровка аналоговых каналов у одного производителя не переносится на другого. То, что уровень топлива приходит в adc5, верно для конкретного разобранного нами прибора. У другой марки это будет другой номер канала или другой механизм целиком. Универсальной таблицы соответствий для аналоговых каналов не существует, потому что протокол описывает, как передать значение датчика, а не что этот датчик означает. Оговорка касается именно adc: у штатного топливного канала смысл задан стандартом, и в этом его преимущество.
Мы не приводим статистику по кражам топлива. Публичных данных, которым можно доверять и на которые можно сослаться с датой и методикой, мы не нашли. Числа вроде «столько-то процентов парков сталкиваются со сливом» кочуют по отраслевым статьям без первоисточника, и повторять их мы не будем.
Детект находит аномалию, а не преступление. Падение уровня у стоящей машины это ровно то, что написано: падение уровня у стоящей машины. Причиной может быть слив, а может быть подтекающая топливная система, отказавший датчик или неудачно вставший на уклоне автомобиль. Разбирается это только вместе с остальным контекстом.
Что делать, если вы прямо сейчас подозреваете слив
Начните с самого дешёвого шага: посмотрите не на график уровня, а на два графика рядом. Уровень топлива и перемещение машины по времени. Если провал уровня приходится на интервал, когда автомобиль стоял на месте, разговор имеет смысл. Если на движение, скорее всего вы смотрите на расход.
Дальше по порядку:
- Проверьте, стояла ли машина. Именно по координатам, а не по скорости в интерфейсе. Стоящий автомобиль вполне может показывать несколько километров в час из-за шума приёмника.
- Проверьте свежесть данных. Если координаты в момент провала были старыми, вы, возможно, сопоставляете свежие показания датчика со старой точкой, и вывод о «стоянке» ничего не стоит.
- Посмотрите дискретные входы за этот интервал. Открытие лючка или двери, включение зажигания. Совпадение по времени не доказывает слив, но резко сужает круг версий.
- Сверьте с ручными записями и чеками. Самая частая причина «пропавшего» топлива это незаписанная или записанная задним числом заправка.
- Оцените достоверность состава бака, прежде чем считать рубли. Если сервис показывает низкую достоверность, сумма ущерба будет ошибочной, и предъявлять её кому-либо рано.
- Повторите наблюдение. Одно событие это гипотеза. Повторяющееся событие на одной и той же стоянке в одно и то же время это уже картина.
Частые вопросы
Можно ли поймать слив без датчика уровня в баке? Нет. Без датчика уровня сервис знает только пробег, ручные записи заправок и норму расхода, а исчезновение топлива в таком наборе данных ничем не отличается от повышенного расхода. Детект слива требует прибора, который отдаёт уровень бака в поток телеметрии.
Какой источник уровня топлива выбрать, если доступны оба?
Штатный канал EGTS, тот, что в интерфейсе подписан «уровень топлива (штатный датчик)». Его смысл задан стандартом протокола, поэтому он не требует ручной разметки и не зависит от того, как конкретный производитель разложил свои аналоговые входы. Аналоговый канал вроде adc5 остаётся вариантом для приборов, которые штатный уровень не передают. какие приборы и протоколы мы поддерживаем
Почему порог задан в процентах бака, а не в литрах? Потому что приборы шлют уровень в разных единицах: проценты, литры, сырые значения АЦП. Мы приводим всё к процентам общей функцией с учётом калибровки и ёмкости бака, и порог получается сопоставимым для разных машин. При этом в литрах один и тот же порог означает совершенно разное: 10 % у легковушки это несколько литров, у грузовика десятки.
Почему нельзя определять стоянку по скорости? Потому что у неподвижной машины GPS «плавает», и эти микросмещения превращаются в ненулевую скорость. В наших данных стоящий автомобиль показывал до 7 км/ч. Смещение координат за интервал между проверками устойчивее: порог в 200 метров одинаково хорошо отсекает и шум приёмника, и медленное движение по двору.
Насколько сильно врёт расчёт по цене последней заправки? Зависит от того, как часто вы заправляетесь и как двигались цены. Если заправляетесь до полного и часто, разница минимальна. Если в баке лежат остатки двух-трёх старых заправок по заметно другой цене, стоимость поездки считается по цене топлива, которого в баке почти нет. Взвешенная по литрам цена решает эту проблему, потому что описывает то, что в баке сейчас.
Что означает «неизвестное топливо» в составе бака? Это партия, которую модель добавила при сверке с фактом: датчик или заправка «до полного» показали больше литров, чем следовало из расчёта, значит была заправка, о которой сервис не знает. У такой партии нет цены, поэтому в среднюю цену она не входит, зато снижает оценку достоверности, до 40 баллов из 100.
Датчик показал резкое падение, машина стояла, но слива точно не было. Что это? Три частые причины: сбой или наводка на аналоговом канале, температурная или уклонная погрешность датчика и незаписанный расход на прогрев или работу подогревателя. Поэтому событие детекта это повод посмотреть данные, а не готовый вывод. Устойчивость проверяется повторяемостью: разовый выброс на фоне ровной истории почти всегда датчик, а не канистра.
Вывод
Главная мысль укладывается в одну фразу: смотреть надо не на график уровня, а на график уровня вместе с перемещением машины. Топливо, потраченное в движении, это расход, каким бы пугающим ни выглядел обрыв на диаграмме. Топливо, исчезнувшее у стоящей машины, это то, что стоит разобрать.
Вторая мысль скучнее, но дороже: рублёвая оценка почти всегда завышена или занижена, если считать по цене последней заправки. Бак это смесь партий, расход снимается со всех пропорционально, и честная цена литра в баке это взвешенная цена, а рядом с ней обязана стоять оценка достоверности.
Практический следующий шаг простой. Откройте историю телеметрии своей машины и проверьте, приходит ли в неё уровень бака. Если да, у вас есть всё нужное для детекта. Если нет, никакие настройки порогов не помогут, и сначала надо решать вопрос с датчиком.
Материал подготовлен на данных сервиса мониторинга «Точка GPS»: рабочий код детекта слива и модели состава бака, а также сырая телеметрия реального устройства за август и начало сентября 2026 года.