В наши дни можно утверждать, что телефон перестал быть устройством только для звонков. Он позволяет нам оплачивать покупки, находить правильную дорогу, вызывать такси. Ситуация, в которой у вас садится батарейка, становится одной из самых стрессовых. Остаться ночью на незнакомой улице без телефона довольно неприятно. При этом расход батарейки растет во многом как следствие расширения возможностей.


Производители как железа, так и софта, стараются решить эту проблему. Для Яндекса она тоже актуальна, потому что наши сервисы — это то, что должно быть под рукой у человека в любой момент. Мы по-разному над этим работаем и в рамках эксперимента создали устройство для измерения тока, который потребляется телефоном с батарейки. Теперь мы умеем мерить мгновенные значения тока с батарейки телефона (Nexus, iPhone и др.) в миллиамперах 500 раз в секунду, сохранять эту метрику на диск и считать по ней среднее потребление.



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



С самого начала у нас была какая-то тактика


Несколько месяцев назад, когда мы начинали прикручивать нагрузочное тестирование телефонов к Яндекс.Танку (это наш opensource инструмент для тестирования производительности), мы столкнулись с тем, что одну из самых важных метрик — потребление тока с батарейки — мы не можем замерить достоверно, а на некоторых телефонах не можем замерить вообще. Например, вот как выглядит график потребления тока на iPhone, полученный стандартными средствами от Apple:


Метрики мониторинга в Instruments

Все три запуска теста значение потребления вообще не изменялось и было равно 1/20. Удивляет использованная единица измерения — 1/20 означает, что если телефон дальше будет работать с тем же энергопотреблением, то сядет он за 20 часов. То есть, метрика получается очень неточная и не очень интерпретируемая. Кроме того, цифры в сыром виде получить нельзя, только разве что скриншот сделать и приложить его к тикету.


С Android девайсами ситуация выглядит лучше, но все равно далека от идеала. Ток замерять можно, читая из /proc/… циферку, но лучше не делать это слишком часто — опросом значения можно просадить производительность телефона и испортить тесты. На разных девайсах циферка находится в разных местах файловой системы. На части Android телефонов вообще отсутствует железка, измеряющая ток, поэтому на них не получится программными средствами снимать потребление. На Nexus, которые мы взяли как reference, значение в /proc меняется раз в 20 секунд.



В общем, мы решили попробовать измерять потребление хардверно и таким образом убить всех зайцев разом: так можно мерить вообще на всех девайсах, включая ноутбуки и холодильники. Мы знали о существовании Power Monitor, но цена устройства (примерно $800 за штуку, а на каждый телефон потребуется свой девайс), и его несовместимость с Linux (а значит, и сложности с автоматизацией), заставили задуматься о своем велосипеде. Аналогичная ситуация наблюдается с осциллографами и другими измерительными устройствами общего назначения на рынке — покупать дорого, автоматизировать сложно.


Существует еще проект BattOr, по описанию это примерно то, что мы хотим. Сам я не пробовал связаться с авторами, но коллеги говорят, что команду купил Google и с тех пор от них ничего не слышно и на почту они не отвечают. Совпадение? =)


Для начала, в качестве proof-of-concept, мы собрали схему с шунтом, аналогичную представленной в этой статье. Ток мы измеряли в разрыве провода USB. Поскольку значение тока ожидалось небольшое, до 500 мА, пришлось усиливать напряжение с помощью инструментального усилителя, а не снимать его напрямую с шунта ардуинкой.



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



Электроника работает на белом дыме


Как известно, все, чему нас учили на уроках физики и электротехники, — ложь, никаких электронов не существует, а устройства работают на белом дыме. И если этот белый дым выходит, то устройство работать перестает. В очередном эксперименте белый дым вышел из Arduino и мы ее потеряли. Оказалось, что между “0” на входе нашего блока питания и “-“ на его выходе — 88 вольт переменного напряжения. После еще нескольких экспериментов с разными БП мы поняли, что не все они одинаково хороши, но есть такие, которые нам подходят. И мы стали использовать эти подходящие. Также мы решили больше не использовать схему с шунтом и инструментальным усилителем и вместо этого взять готовый модуль измерения тока к Arduino на базе MAX471, которая по сути то же самое, только в виде микросхемы. Еще мы рассматривали вариант на базе датчика Холла (ACS712), но, изучив документацию на этот чип, увидели, что он сильно шумит и решили даже не пробовать.



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



Чтобы вернуть модифицированный таким образом iPhone (или другое устройство) в собранное состояние, мы сверлим корпус и выводим два проводка.



Вот такая коробочка у нас получилась в результате. Правда, в метро ее лучше не возить, телефон, провода, вот это все… могут не понять =)



Что нам это дает


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


Для получения релевантного результата теста при прямых замерах батарейки этим устройством достаточно пяти минут. Если же замерять «как раньше», то есть смотреть на скорость уменьшения % заряда батареи — то требуется 6-8 часов, плюс не забывайте про человеческий фактор. То есть, время теста сократили с 8 часов до 5 минут: почти в 100 раз.

Текущий разброс результатов замера ± 15%. Это не идеал и надо погрешность уменьшать. Однако, теперь доверие к результату повысилось за счёт исключения человеческого фактора и существенно меньшего времени на 1 замер. Достаточно выполнить за полдня много-много замеров и отсечь результаты, пострадавшие от внезапных всплесков непонятной активности на телефоне.

Стало возможным кросс-платформенное, и кросс-девайсное сравнение значений. Единица измерения — mA, а не «скорость уменьшения процентов заряда», которая зависит от платформы, объёма батареи, «свежести» батареи, не говоря уже про запущенные процессы… Сравнить только mA при одном и том же запущенном Я.Сервисе на Andoird и на iOS — нельзя. Надо добавить поправочный коэффициент — сколько жрёт каждая платформа, без Я.Сервиса. Но, это опять-таки вопрос на пол дня замеров (и это с кофе-поболтать).

Пара слов про софт


Чтобы собирать данные от Arduino (а она просто 500 раз в секунду шлет их по USB), мы написали простенькую читалку. На Python возникли проблемы с повторным открытием устройства на чтение — во второй раз данные уже не читались. Мы не стали разбираться и просто переписали то же самое на Golang — после этого все заработало.


Тут нас ждали еще небольшие грабли: в буфере устройства с предыдущего запуска остаются старые данные. Поэтому сейчас мы просто отбрасываем первые 500 измерений (1 секунда). Затем собранные в .csv данные обрабатываем скриптом на Python (в котором используются Pandas и Seaborn) и получаем графики, которые вы видели в начале статьи.


Если вам интересны исходники читалки, прошивка и код для обработки данных — могу поделиться, пишите в личку.

Поделиться с друзьями
-->

Комментарии (64)


  1. vazir
    20.10.2016 21:06
    +4

    А результаты хде?


    1. Direvius
      20.10.2016 22:32

      Не заставят себя долго ждать ;) Но вообще это, конечно, только первый шаг на большом пути к светлому будущему.


      1. HunterSpy
        21.10.2016 11:12

        В светлом будущем давно аккумуляторы, а не батарейки.


      1. aamonster
        21.10.2016 12:14

        Заранее спасибо. Данные крайне интересные, но заморачиваться с разборкой своего телефона, дабы подключиться последовательно с батарейкой, очень не хотелось.
        Если ещё и замерите потребление в зависимости от текущей частоты CPU (на андроиде, наверное, удобнее их для этого зафиксировать настройками governor), загрузки процессора и количества задействованных ядер для основных чипсетов — будет вообще праздник, ибо есть подозрение, что в power_profile.xml у производителей телефонов обычно числа от балды.
        Ну и реальное потребление WiFi, Bluetooth и т.п. тоже интересно…


        1. Direvius
          21.10.2016 13:20

          Да, мы хотим что-то такое сделать и запилить статью по результатам. Собираем идеи, что бы посравнивать и посмотреть.

          По поводу разборки телефона — да, все так. Есть телефоны, у которых вынимается аккумулятор — там не надо курочить батарейку. Но для чего-то типа айфона, например, можно найти в сервисе неисправный аккумулятор, откусить от него контроллер и припаяться к нему. А свой работающий отложить в сторонку. Конечно есть риск спалить телефон, но тут уже ничего не поделаешь ) Говорят, у айфона 5 экраны одноразовые — один раз собрал и все. Разобрать и собрать обратно можно с шансом 50/50.


  1. rom_dim
    20.10.2016 22:26

    Почему не использовать Анализатор электропитания например R&S®8015 или WT1000. Они могут довольно
    0.05% точно измерять ток и напряжение. Это намного повысит точность. Плюс у низ встроенный интегратор тока.


    1. Direvius
      20.10.2016 22:29
      +1

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


      1. segment
        20.10.2016 23:13

        Это небольшая сумма для компании, если это позволяет качественно анализировать работу приложений. Что у вас с точностью измерений сейчас?


        1. Direvius
          21.10.2016 00:04
          +4

          Это позволит точно измерить потребление одного приложения на одном телефоне. А вот чтобы качественно анализировать работу приложения, его нужно тестировать на разных телефонах и в разных условиях, поэтому от измерительного прибора требуется еще и мобильность. То есть, умножьте 200 тысяч на количество приложений и на количество телефонов, на которых вы хотите тестироваться.

          Иными словами, упомянутые устройства подходят нам только в качестве референсных, чтобы откалиброваться и узнать погрешность. Этого мы пока не делали, но теоретически, если учесть, что Arduino дает 10 бит на 5В, то ее разрешающая способность — это 5 мА/бит. Можно брать внешние 16-битные АЦП на ADS1115, которые соответственно дадут 0.05 мА/бит. Или другие АЦП. Характеристики MAX471 я не помню, их можно посмотреть в даташите. Там, правда, написанно, что не стоит использовать их для новых разработок, но на алиэкспрессе их столько, что нам еще на годы хватит )

          Чтобы не быть голословным, вот картинка, полученная с более новой версии коробочки, которая сейчас в разработке. По горизонтальной оси — микросекунды, по вертикальной — миллиамперы. Миллион измерений в секунду, 12 бит на диапазон в 3.3В.


          1. chersanya
            21.10.2016 08:57

            Иными словами, упомянутые устройства подходят нам только в качестве референсных, чтобы откалиброваться и узнать погрешность. Этого мы пока не делали, но теоретически, если учесть, что Arduino дает 10 бит на 5В, то ее разрешающая способность — это 5 мА/бит.

            Разрешающая способность — да, а погрешность проверяли? Вполне возможно, что она в разы больше — как из-за погрешности самого arduino, так и к примеру от неточности шунта. И так как вы используете сравнения также между разными экземплярами такой «коробочки», то важна и постоянность результатов между экземплярами.


            1. Direvius
              21.10.2016 11:40

              Вы правы, абсолютная погрешность — это важно при сравнении измерений с разных устройств. И нам еще предстоит верифицировать результаты с устройств, калибровать их. Мы даже можем взять 20 коробочек и сравнить их друг с другом. Но сейчас мы делаем back-to-back тесты на одной и той же коробочке, поэтому на данный момент нас и наколеночный прототип устраивает. Плюс он позволяет сопоставить события из лога Android с графиком потребления — т.е. получается такой профайлинг по энергопотреблению, можно прямо локализовывать проблемы в коде.

              Это все конечно не означает, что мы остановились и не думаем, как сделать лучше. У нас уже есть прототипы на ARM и ESP8266, и мы, после уточнения требований и спроса на коробочки, готовы сесть проектировать все это «по науке». Если конечно это будет оправдано.


          1. Hoksmur
            21.10.2016 12:06

            Порекомендовал бы по ещё одному каналу АЦП измерять напряжение на батарее, т.к. внутренним DC/DC потребляется именно мощность (U*I). То есть если процу нужно X милливат, то при разном напряжении аккумулятора будет потребляться разный ток, а выходное напряжение преобразователя фиксировано. Возможно этим и обусловлено

            Текущий разброс результатов замера ± 15%.

            Ещё интегрирование можно делать внутри, чтобы реже отсылать результат, уж на это-то ардуины хватит. Интегрирующая RC-цепочка на входе с постоянной времени на единицы миллисекунд тоже неплохо бы вписалась, как мне кажется.
            По комментарию про погрешность ниже замечу, что тут важна скорей не точность измерений, а больше повторяемость.


            1. Direvius
              21.10.2016 12:24

              Была такая идея, но мы зафиксировали напряжение аккумулятора путем исключения аккумулятора вообще и использования вместо него блока питания с постоянным напряжением. А разброс результатов — это элементарно фоновая активность на телефоне. Мы ее будем отлавливать с помощью анализа логов, как раз сейчас учимся это делать.

              Про интегрирующую RC-цепочку думаем, возможно, поставим, но нужно поэкспериментировать. А реже отсылать результат нам, похоже, не потребуется — 500 SPS пролезает и через USB serial, и через UDP пакеты по WiFi. Если же взять ARM (в нашем случае это пока что Arduino Due, stm32 уже в пути), то там вообще нативный USB и 2 MB в секунду при 1 миллионе SPS тоже спокойно пролезает.


              1. Hoksmur
                21.10.2016 12:33

                По напряжению — понятно, хорошо что исключили. RC-цепочка сгладила бы форму напряжения между выборками АЦП. Если без них — вы можете «удачно» попасть на пик или просадку потребления. Статистически оно не особо важно будет на сколько-нибудь длительном интервале, но мне с ней бы было спокойней.


                1. Direvius
                  21.10.2016 13:09

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

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


      1. AlexanderG
        21.10.2016 13:22
        +1

        Я думаю, можно повысить точность, снимая данные с нескольких последовательно включенных датчиков тока и усредняя. Плюс можно оценивать интегральную ошибку датчиков, добавить термостатирование и т.п.


        1. Direvius
          21.10.2016 15:05

          Вот это хорошая идея! Если упремся в точность, попробуем. Спасибо!


  1. Necrocannibal
    20.10.2016 22:32
    +1

    В топку андроиды. До сих пор сижу на симбиан и плюс s40 от нокии. Ресурс батареи вполне устраивает. Жаль, что на данный момент из сегмента кнопочных телефонов на рынке ничего адекватного нет, один хлам низкого качества. А также жаль приказавшую долго жить симбиан. Остаётся пользоваться уже ставшими раритетом нокиа. Андроиды вызывают отвращение из за своей бесконтрольности. Можно конечно обуздать, но для этого надо изрядно постараться чтоб понаставить запреты на нежелательные доступы у приложений. Хотя версия 4.3, на мой взгляд была вполне адекватная, там это всё было встроено.


    1. Direvius
      20.10.2016 22:36

      Да, я тоже печалюсь из-за отсутствия достойных и современных альтернатив смартфонам в виде простых и надежных трубок. Но вообще с точки зрения архитектуры андроиды довольно интересно устроены и многое можно расковырять. Вот с айфонами все намного сложнее =)


      1. Necrocannibal
        20.10.2016 22:53
        -1

        Айфоны неадекватно дорогие, я их даже не рассматриваю, продавать свои органы на покупку американского огрызка пока в планах нет. Андроиды интересны, не спорю, когда есть желание повозиться и понастраивать. Но оно бывает не всегда. В моём случае, был смартфон Sony Xperia J, всё вроде ничего, батарею держал недели 2 (не вру, чисто в режиме мобилы). Но банально было лень что то настраивать и доступ к интернету был либо отключен совсем. Либо, когда надо было зайти например вконтакт или т.п., давал доступ, то тут начиналось… В итоге продал его, т.к. желания возиться с ним так и не появилось. Вот если бы в андроиде были адекватные настройки по контролю за ним, то тут отношение бы изменилось. А так, где то что то искать, рутовать, ставить какую то программу по контролю, которая в итоге не работает как надо, желания не возникает.


        1. valera5505
          21.10.2016 00:59

          А что именно надо контролировать?


          1. chersanya
            21.10.2016 09:02

            Да хотя бы как много-много лет назад было реализовано ещё в телефонах с J2ME — вот уж что-то, а система разрешений там была отличная. Для каждого приложения и каждого типа разрешений (интернет, файловая система, звонки, смс, ассоциация с разрешением файлов, отображение на фоне домашнего экрана, ...) можно было выбрать, разрешить/спрашивать при запуске/спрашивать при каждом запросе/запретить! И без разрешения приложения просто не могли обращаться к соответствующим ресурсам. Приложения тоже можно было сворачивать и запускать несколько их — но если выбрал не «свернуть», а «закрыть», то оно действительно закроется, а не как с андроидом.
            Описанное выше относится к Sony Ericsson, другими я тогда не пользовался.


            1. jehy
              21.10.2016 14:08

              В последнем Android есть примерно это — критичные функции нужно разрешать после запуска. Но это поддерживают только приложения, собранные с последним SDK, плюс Google Play перестал показывать что приложение хочет интернета, решив, что все хотят интернета...


              1. chersanya
                21.10.2016 14:57

                Всё равно далеко не полностью реализовано то, что хотелось бы: например, программы так же могут спокойно продолжать работать в фоне, и не всегда есть явный способ её остановить. Также я не нашёл, но вроде нет опции «спрашивать каждый раз» — например, если я хочу отправить фотку, то я разрешу доступ к ФС, но по умолчанию его быть не должно.


            1. Necrocannibal
              21.10.2016 17:28

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


              1. chersanya
                21.10.2016 17:38

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


        1. rasswet
          21.10.2016 09:03

          у меня леново P780 и сейчас держит 2 недели «чисто в режиме мобилы»


          1. sharaev
            21.10.2016 12:25
            +1

            это использование телефона на 5%. проще купить нокию 3310


        1. RRater
          21.10.2016 11:41

          про трафик: у меня на Meizu m2 mini — контроль доступа к интернету есть из коробки, причем разделён: мобильная сеть/Wi-Fi. Любому приложению можно разрешить/запретить доступ. И лишних приложений из коробки можно сказать что нет.


    1. navion
      26.10.2016 14:14

      Для меня стала открытием самая дешевая звонилка от Senseit (там как раз S40) — его не хотелось выпускать из рук, настолько приятной форма и материал. Но там совмещённый динамик из-за чего проблематично говорить в шумном окружении.
      За месяц с ним почти освободился от мобильного рабства и вместо залипания в интернете снова читаю книжки, хотя пару раз всё же понадобилась карта.


  1. bmj
    20.10.2016 22:54

    я бы часто заходил на сайт, где выкладывались бы такие тесты…


    1. gimntut
      21.10.2016 06:42
      +6

      Кстати, да. Если бы в Яндекс.Сторе у каждого приложения была бы оценка энергопотребления, то я бы всегда начинал поиск приложения оттуда, а не с плеймаркета. А если бы я оказался бы таким не одним, то разработчики стали бы учитывать при разработке своих программ влияние энергопотребления на рейтинги и популярность приложения.


      1. Direvius
        21.10.2016 13:22

        Ответил выше на подобный комментарий. Присылайте идеи, что померить — возможно, сделаем.


        1. Ryav
          29.10.2016 12:49
          +1

          Начните с популярных мессенджеров.


  1. stifff
    21.10.2016 00:25
    +1

    Прикольно, в Яндексе ещё и железо разрабатывают прототипируют в железе


  1. jehy
    21.10.2016 00:42

    Тон повествования и инструментарий очень похож на работы моих студентов. Уж не уверен, это студентам комплимент, или наоборот...


    Вопрос такой — а зачем вы это делаете? Если говорить про энергопотребление телефона, то всё, что может сделать Яндекс — это более хитро управлять подсветкой, оптимизировать алгоритмы для меньшего сжирания процессорного времени и меньше отсылать в бекграунде свои логи в Кремль. Плюс пара очевидных мелочей вроде частоты опроса GPS. Неужели эти факторы не получается отследить без контроля за батарейкой? Понимаю, что это было бы нужно, если бы Яндекс делал свой дистрибутив Android, но этот проект кажется давно умер, как и yandex.store, которому это тоже было бы полезно...


    1. Hoksmur
      21.10.2016 11:41
      +1

      > оптимизировать алгоритмы для меньшего сжирания процессорного времени
      На мой взгляд и этого будет не мало. Заодно есть возможность объективно сравнить два похожих (на первый взгляд) алгоритма, и сравнить довольно быстро.


  1. zxweed
    21.10.2016 01:34
    -4

    даже выключенный яндекс.навигатор убивает полностью заряженный телефон за несколько часов. Что толку мерять потребление если вы не умеете его экономить?


  1. Keroro
    21.10.2016 06:56
    +5

    Летом, когда вышли Покемоны (которые жрали батарею как свиньи-апельсины), тоже заинтересовался потреблением смартфона в различных режимах. Вкорячил обычный мультиметр между клемой батареи и смартфона (Xiaomi Redmi Note 2), повтыкал разные режимы.
    Выводы сделал такие:
    Потребление напрямую зависит от частоты и загрузки ЦП. От 0.47А в десктопе и 1% загрузки ЦП (400МГц) до 1.1А (1.28ГГц) в тяжелых приложениях типа «покемонов».
    Потребление сильно зависит от яркости дисплея (0.33А в десктопе при 10% яркости, 0.44А при 80% яркости и 0.53А при 100% яркости). Снижение яркости реально работает.
    Потребление в спящем режиме примерно 0.09А (колеблется). Если включен плеер и наушники, то скачет 0.12А — 0.15А. Т.е. плеер потребляет не так уж много по сравнению с общим холостым потреблением.
    Включение\выключение Bluetooth показывает потребление на уровне точности методики измерения (очень мало т.е.)
    WiFi тоже оказался не таким уж прожорливым (0.44А против 0.53А соответственно, т.е. 0.09А). Но если экономить каждый мА\ч то можно и выключать.
    GPS модуль жрёт порядка 0.02А (довольно мало)
    Можно заблокировать максимальную частоту и число ядер на 400МГц и 2 ядра максимум. Тогда потребление падает до 0.61А при полной загрузке ЦП, но игра (и сам Андроид) начинают жутко тормозить, так что овчинка выделки не стоит.
    image


    1. Grox
      21.10.2016 07:29

      А WiFi вы меряли в режиме скачивания большого объёма данных или в холостом виде?


      1. Keroro
        21.10.2016 07:32

        В холостом. Меня интересовал вопрос, нужно ли выключать WiFi модуль, если он в данный момент не используется (ушел из дома\макдональдса etc).


        1. rasswet
          21.10.2016 09:08

          у меня если WiFi включен в планшете, то за ночь в простое сжирает чуть не 10% батареи. если WiFi выключен то 1-2% может быть. Подозреваю что в первом случае активизируется WhatsApp и ест батарею не смотря на то, что никто планшетом в это время не пользуется.


    1. buryndin
      21.10.2016 11:48
      +1

      GPS в режиме поиска спутников будет расходовать куда больше. Впрочем как и WI-FI в режиме передачи.


    1. Direvius
      21.10.2016 11:58

      Мы тоже с мультиметра начинали. Но возможность снимать 500 сэмплов в секунду, и даже миллион сэмплов в секунду (ARM) и передача этого в реалтайме на компьютер открывает много интересных возможностей. А так, кейсы примерно такие же смотрим +)
      Радиомодуль еще очень прожорлив. Если включен только wifi, телефон просто лежит на столе с включенным экраном — 300 мА. Включаем радиомодуль — 350 мА. Выключаем wifi — 560 мА. Так что если есть wifi — лучше сидеть на wifi.
      Еще интересный кейс — некоторые приложеньки, собирающие данные о положении телефона, жрут больше, если телефон в движении. Была идея собрать из лего специальную шаталку телефона, чтобы их тестировать.


      1. aamonster
        21.10.2016 17:16

        А за процессами следили? (загрузка проца, трафик). Чтобы на радиомодуль уходило больше 250 mA — он должен активно качать данные. Иначе типовой смартфон садился бы за день просто от лежания в кармане (аккумулятор 3000 mAh / 250 mA = 12 часов). Наиболее вероятно — у вас в этих условиях почему-то и данные качаются, и проц загружен на полную. Синхронизации какие, или ещё что… Или это вы мерили, что в _вашем приложении_ происходит? Тогда, наверное, есть резон посчитать расход энергии на мегабайт трафика (и потом сможете упереться в уменьшение трафика, пользователи лишний раз спасибо скажут)

        Да и 50 mA просто от включения радиомодуля imho тоже многовато (для телефонов характерно отнюдь не 60 часов чистого standby).

        А насчёт «если есть wifi — лучше сидеть на wifi» — лично я подумываю настроить tasker, чтобы дома и в офисе телефон переключался на 2G (вроде бы при этом меньше жрёт в фоне).


        1. Direvius
          21.10.2016 18:45

          Да, да, там именно фоновые процессы жрать начинают через 3G трафик. Периодически. Сейчас учимся мониторить, кто что сожрал (battery historian прикручиваем, например).

          Почему такой большой ток — экран включен, он довольно много отжирает. Когда телефон лежит в кармане, экран выключен и он вообще в standby уходит, там маленькое потребление.


  1. g0nzo
    21.10.2016 08:11
    +2

    А код может на гитхаб?Зачем через личку.


    1. Direvius
      21.10.2016 11:48

      Там ад и содомия, поэтому не стал публиковать прямо в статью +) Но вообще он уже на гитхабе.


  1. selheim
    21.10.2016 09:32
    +3

    Еще было бы прекрасно, если Яндекс перестал почти во все свои приложения прикручивать рекламу своих же приложений при первом запуске. Ужасно раздражает. Программы хорошие, полезные, но реклама самих себя ужасно раздражает. А статья интересная, спасибо.


    1. jehy
      21.10.2016 10:49

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


      1. selheim
        21.10.2016 13:48
        +1

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


    1. Direvius
      21.10.2016 12:13
      +1

      У нас многие ходят в таких футболках. Возможно, вам тоже стоит такую завести ;)
      image

      Это я к тому, что интерфейс приложений и их поведение подгоняется под целевую аудиторию. А мы тут на хабре не очень то похожи на всех остальных. Приходится терпеть или делать что-то свое (opensource, конечно), чтобы мир стал лучше.


  1. osipov_dv
    21.10.2016 12:00
    +1

    Меньше всего я ожидал тут увидеть ардуину, интересное использование, значительно отличается от часов и умного дома :)


    1. Direvius
      21.10.2016 12:29

      Вот проект, который значительно отличается от часов и умного дома =)


      1. osipov_dv
        21.10.2016 14:10

        к сожалению, на хабре про него не писали


  1. victorlapshev
    21.10.2016 12:00

    Мне одному показалось, что снимать данные с потребления по USB затея так себя?


    1. Direvius
      21.10.2016 12:01

      Поясните +) а то нам тоже кажется, но может быть нам кажется по разным причинам.


      1. jehy
        21.10.2016 14:01

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


        Плюс при работе от сети он может радостно снимать внутренние ограничения на расход батареи и начинать светить ярче \ выполнять полезные внутренние функции вроде поиска и установки обновлений. Собственно, ровно под это есть даже специальный Intent — ACTION_BATTERY_CHANGED. Кстати, было бы интересно произвести анализ приложений с маркета и стандартных компонент на предмет того, какой процент из них обрабатывает этот Intent — задачка не очень сложная.


        Ну и вы сами выше упомянули, что некоторые приложения начинают кушать батарею больше во время движения. Так что надо мерить потребление, приклеив на вентилятор...


      1. victorlapshev
        21.10.2016 14:16

        Я к тому что вроде как сразу было очевидно потребление тока от зарядки != реально потребляемого тока, и мне показалось странным что вы не отбросили эту идею сразу, не проводя тестирование


        1. Direvius
          21.10.2016 15:03

          А, в этом смысле. Я подумал, что вы про подключение Arduino в USB. Да, это было очевидно (хотя были предположения, что хотя бы среднее потребление можно померить), но мы тогда были на этапе proof-of-concept: нужно было быстро попробовать, можно ли вообще ардуинкой мерить потребление тока и как это будет выглядеть на графиках. При этом для измерения тока в USB не надо разбирать телефон и батарейку, можно просто провод разрезать. После того, как мы поняли, что можно, мы стали делать вариант с батарейкой.

          Зато мы воочию увидели, как телефон договаривается с зарядкой о максимально допустимом токе (ступеньками поднимает ток, потом возрващается на пару ступенек назад). Причем разные телефоны заряжаются по-разному.


  1. AVX
    21.10.2016 14:45

    Интересно, как можно отсеивать «непонятные всплески активности», если на андроиде (да и любой другой сложной современной ОС) они чуть не постоянно. Да даже на симбиане у меня пару месяцев назад, впервые за 6 лет использования без сброса и переустановки, вылез странный глюк — тормозило, но потребление CPU не повысилось, хотя потребление энергии выросло в 2 раза почти (в простое), я вначале даже батарею новую купил, думал пора уже. Оказалось, дело вовсе не в батарее. Причина не выяснилась, но снялась только hard-reset'ом.
    А теперь камушек в огород яндекса.
    Для чего всё это? Зачем измерять потребление, если потом ничего не делать для его снижения? Наглядный пример — стояли и работали у меня на nokia c5-00 яндекс.карты, всё нормально. Но чёрт меня дёрнул скачать поновее версию — и она, кстати, нашлась, и поставилась. Изменений — только декоративные, больше украшательств, и намного сильнее тормозит. Пытался найти предыдущую версию — а не нашёл. Хорошо, сохранилась на телефоне. Поставил снова старую. Аналогично с веб-интерфейсом яндекс почты: пару лет назад дизайн сменился, я немного огорчился, что старый комп на работе стал тормозить в яндекс.почте. Но оказалось, это только цветочки — вот они, недавние изменения — вроде с виду стало всё простенько, но тормозит ещё больше, и ссылки на легкую версию интерфейса с ходу не видно (ранее даже предлагалось автоматически).
    К чему я? К тому, что измерения сами по себе ничего не сделают, надо тестировать приложения, на разных устройствах, в т.ч. и на старых. Ещё лучше, если сами разработчики будут пользоваться своими программами на медленных устройствах — так сразу оценят вклад каждого нововведения в прожорливость программы.


    1. Direvius
      21.10.2016 14:56

      Статья как раз про «тестирование приложений на разных устройствах, в т.ч. на старых». Наша цель — в каждой команде мобильной разработки сделать обязательным тестирование энергопотребления каждой новой версии приложения. Конечно, это произойдет не мгновенно, но мы двигаемся в этом направлении.


  1. Antispammer
    26.10.2016 03:10

    Я как-то разочаровался в питоне, читал данные от датчика температуры по шине I2C, так аналогичный скрипт на похапе работает на порядок быстрее. В чем фишка я так и не понял. Испытывал скрипт на 2-х устройствах (C.H.I.P. with Debian & Onion Omega with OpenWRT).

    Попробуйте ради интереса обрабатывать данные не_питоном (не важно чем) и сравнить производительность.


    1. Direvius
      27.10.2016 01:29

      Обрабатывать питоном получается очень быстро, потому что я использую внутри C++ кишки (библиотеки numpy/pandas etc). Читать с самого устройства пробовал еще на Golang, но у меня не с производительностью проблема была, а с совместимостью с китайскими драйверами к USB-serial чипу CH341. Хотя думаю и их можно было бы решить при желании. К производительности питона пока нареканий нет — он легко пережевывает поток в миллион сэмплов в секунду и отрисовывает графики на экране прямо в реалтайме.

      Если вы имеете в виду питон на самом устройстве, то тут да — только C/C++, чтобы быть поближе к железу =) Даже Golang туда не хочу тащить, хотя возможность есть.