Экономим затраты на интернет от Yota

    Пролог


    Пару месяцев назад в моем городе запустил свою LTE сеть оператор беспроводной связи Yota. Немного поколебавшись, я решил, что стоит попробовать – в надежде, что с LTE Yota дела обстоят лучше, чем с 3G от операторов большой тройки. И, должен сказать, что пока ничуть не разочаровался в своем решении.

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

    Да, делать это через браузер не очень удобно. Таким образом мы перешли к сути поста.

    Автоматизация


    Итак, было принято решение написать клиент для управления скоростью модема. В качестве языка программирования использовался C#. Каюсь, пошел самой простой дорогой – использовал компонент WebBrowser. Первая версия была на Windows Forms, но недавно я переписал проект на WPF. Сама программа и проект в Visual Studio – в конце поста. А сейчас я бы хотел остановить внимание на некоторых аспектах.

    Первое, с чем мне пришлось столкнуться – для отображения страниц в WebBrowser используется старая версия Internet Explorer, и для того, чтобы использовать, к примеру, 8 версию, необходимо добавить в раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION ключ с именем, соответствующим названию программы, содержащий значение DWORD 8000. Я выделил для этого маленький класс:

    using Microsoft.Win32;
    using System;
    
    class BrowserEmulation
    {
      private BrowserEmulation() { }
    
      /// <summary>
      /// Активация эмуляции новой версии
      /// </summary>
      /// <param name="appName">Название файла приложения</param>
      public static void Enable(string appName = null)
      {
        if (appName == null) appName = AppDomain.CurrentDomain.FriendlyName;
        RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true);
        if (regKey != null)
        {
          try
          {
            regKey.GetValue(appName).ToString();
          }
          catch
          {
            regKey.SetValue(appName, 8000, RegistryValueKind.DWord);
          }
        }
      }
    
      /// <summary>
      /// Дезактивация эмуляции новой версии
      /// </summary>
      /// <param name="appName">Название файла приложения</param>
      public static void Disable(string appName = null)
      {
        if (appName == null) appName = AppDomain.CurrentDomain.FriendlyName;
        RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true);
        if (regKey != null)
        {
          try
          {
            regKey.DeleteValue(appName);
          }
          catch { }
        }
      }
    }
    

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

    По поводу рестарта WPF приложения, для этого у меня есть совсем крошечный класс:

    using System.Windows.Forms;
    
    class Restart
    {
      private Restart() { }
    
      public static void Go()
      {
        Application.Restart();
        System.Windows.Application.Current.Shutdown();
      }
    }
    

    Стоит признать, что, в общем-то, ничего интересного в коде программы нет.

    Результат


    Окно авторизации:


    Идет загрузка:


    Управление скоростью:


    Окно настроек:


    Вы можете загрузить: Всегда актуальная версия программы или Проект Visual Studio 2012
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 24

      0
      Интересное решение
        0
        На сколько экономнее получается, чем постоянно гонять быструю скорость?
          0
          У нас минимальный тариф – 250 рублей в месяц. Дома есть проводной интернет, так что с использованием в институте, в гостях и так далее выходит где-то 400-450 рублей.
          +2
          Тарификация как происходит, посуточно или почасово?
            +2
            По сути тарификация получается посекундная, но сумма снимается полность за первый выбранный тариф, при смене тарифа после меняется продолжительность тарифа. Больше скорость — меньше времени и наоборот.
            +2
            Деньги снимаются одноразово по выбранному тарифному плану на месяц вперед, но затем можно менять оставшийся срок сменой скорости. А в отчете это выглядит примерно так:

              0
              При манимуляциях со скоростью в Yota можете потерять лишние деньги на перерассчетах. Будьте внимательны.
                +14
                Я уже было подумал, что будет решена нетривиальная задача. Что программа будет автоматически выбирать необходимые показатели скорости, в зависимости от текущих потребностей, от загрузки канала и т.п.
                  +5
                  Тем или иным образом, в дальнейшем я планирую сделать подобную функцию.
                    0

                    Удалось?

                  0
                  Что-то мне кажется, что тем более после статьи на Хабре, эту фишку Yota может и прикрыть. Дескать, как это сделано в Домашнем интернете Билайна (было, когда я им пользовался): на большую скорость всегда пожалуйста, а на меньшую — только раз в месяц.
                  Хотя о Yota у меня сложилось мнение, как о в целом лояльной компании.
                    0
                    На сайте они представляют эту функцию своей фишкой, так что вряд ли прикроют.
                      0
                      Да, ведь, действительно. Это я просто давно Yota не пользовался :)
                    0
                    Вроде скорость можно менять через Yota Access? Или я ошибаюсь?
                      0
                      Нельзя. Она только открывает ссылку с личным кабинетом в браузере.
                      0
                      Идея витала в воздухе. Интересно было бы подобное организовать на какой-нибудь популярной прошивке роутера — есть трафик — скорость X, нет трафика — минималка.
                        +1
                        Дешевле — это организовать программно.
                        Мониторить Wifi и Ethern на текущую скорость передачи данных. Если высокая скорость держится долго (5, 10, 15) минут. То пора поднять максимальную скорость до какого-то уровня автоматически. При отсутствии нагрузки — скинуть ее на минимальный уровень.
                          0
                          Все к этому и идет. В следующем обновлении будут отображаться текущие данные о загрузке полосы + силе сигнала. А затем можно будет колдовать с автоматической регулировкой.
                        0
                        Жаль, что платформо-зависимо.
                          0
                          Во-первых, для Linux есть такая штука, как Mono.
                          Во-вторых, то же самое можно переписать, к примеру, на Qt, так как ничего выдающегося в коде нет.
                          Думаю, многие будут благодарны тому, кто напишет аналог под *nix. Но я отдаю предпочтение Windows и C#, и, хотя мне доводилось писать под Ubuntu на Qt в курсе «Операционные системы», я точно не буду портировать YotaRoot под другие платформы.
                            0
                            Хотя, мне подсказывают, что WPF на Mono не работает, извините. Никогда не использовал Mono и не знал даже.
                              0
                              Я буквально сегодня сделал кроссплатформенное решение. Описал вот тут habrahabr.ru/post/166721/
                                0
                                Вам бы сделать все это с графическим интерфейсом и многие будут рады. Хотя это просто мое мнение, решать, что делать дальше, конечно же вам.
                                  0
                                  Для суровых линуксоидов GUI не нужен обычно ) главное чтоб оно само работало. Да и не хочется возиться с ним признаться.

                            Only users with full accounts can post comments. Log in, please.