Опишу один из способов как можно мониторить «ферму» и удалённо перезагружать в случае если она зависла, «отвалилась» видеокарта или программа для майнинга, пропал интернет, завис роутер.

Преимущества GSM-розетки:

  • Автоматическая перезагрузка «фермы», даже если она «жестко» зависла.
  • Вы будите проинформированы о перезагрузке фермы. Даже если у Вас в этот момент отсутствует интернет на мобильном. Вам приходит обыкновенная СМС.
  • Google Drive — всегда работает в «облаке», без вашего участия, проверенно более 5 лет.
  • Цена вопроса ~ 800 грн. + 1 грн в год. (за любой тариф от Киевстара)

Недостатки других систем по мониторингу:


  • Программный WATCHDOG — кто бы что не говорил, но… зависает!
  • USB WATCHDOG — не отсылает оповещение, бывает не перезагружает если по какой-то причине закрылся «майнер».
  • Wi-Fi умные розетки автоматически не перезагрузят систему. Необходимо на них заходить и в ручную отключать и включать. При условии что у неё не «отвалился» интернет и не завис роутер.


Вся идея мониторинга работает если Вы майните на пуле и пул отдаёт статистику работы вашей «фермы».

  1. Регистрируемся в Google.com или используем готовую учётную запись gmail.com. Бесплатно!
  2. Регистрируемся на clickatell.com — это для отправки СМС на Вашу розетку. Бесплатно!
  3. Покупаем GSM-розетку. Хорошо зарекомендовали себя «GSM-Розетка SOKOL». Достаточно 1-й версии SOKOL-GS1. Или другую доступную GSM-розетку, которая работает через СМС команды.

Смысл работы мониторинга:

Скрипт работает, круглосуточно, в Google Drive и каждую минуту опрашивает Ваш пул. Как только скрипт получит Вашу скорость равную нулю H/sec, сразу вышлет СМС на розетку для перезагрузки «фермы». Всё работает без вашего участия.

Все СМС Бесплатны!

Настройка Скрипта для Гугл диска


На примере криптовалюты KARBO (карбованец), с алгоритмом CryptoNight и пула krb.sberex.com


Заходим на drive.google.com и создаём новый скрипт Google Apps Script:


Прописываем данный код:


Код скрипта
function response(n) {
  // Меняем на свой кошелек
  var wallet = 'KcdYnF6rxxKEw7pvFWqNCh3yhpFD6sfvtCuTakxpWZSQCs3sTrvBLfK4TLMxZnRd';  
  try {
    // Адресс Вашего пула для парсинга статистики
    var html  = UrlFetchApp.fetch('http://home.sberex.com:7006/stats_address?address=' + wallet, {muteHttpExceptions:true});
  } catch (e) {
    if (n < 2)
      response(++n); 
    else
      send_sms('sberex.com+недоступен+3+раза');
    return false;
  }
  try {
    return JSON.parse(html.getContentText());
  } catch (e) {
    //    Logger.log(response);
    send_sms('error+sberex.com:+'+html.getResponseCode());
    return false;
  } 
}

function sberex() {
  var JSONresponse = response(0);
  if (!JSONresponse)
    return;
  var dateLastShare = Utilities.formatDate(new Date(JSONresponse.stats.lastShare*1000), Session.getScriptTimeZone(), "HH:mm");
  var hashrate = JSONresponse.stats.hashrate;
  var cacheHashrate = CacheService.getScriptCache().get('hesh');
  if (hashrate && cacheHashrate == 'undefined')  {
    send_sms('YES_KRB+' + dateLastShare);
    CacheService.getScriptCache().put('time', 0);
  }
  if (!hashrate && cacheHashrate != 'undefined') {
    send_sms_mining_off();
    send_sms('NOT_KRB+' + dateLastShare);
//    send_sms_mining('Vkl');
  }
  if (!hashrate && cacheHashrate == 'undefined') {
    var cacheTime = CacheService.getScriptCache().get('time');
    if (cacheTime) ++cacheTime;
    else
      cacheTime = 0;
    if (cacheTime != 0 && cacheTime % 10 == 0)
      send_sms('NOT_KRB+%3E' + cacheTime + 'min+' + dateLastShare);
    CacheService.getScriptCache().put('time', cacheTime);
  }
  CacheService.getScriptCache().put('hesh', hashrate);
}

function sberex_day() {
  var JSONresponse = response(0);
  if (!JSONresponse) return;
  var payments = JSONresponse.charts.payments;
  var hashrate = JSONresponse.charts.hashrate;
  var day = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd") - 1;
  var pay = 0,
      hash = 0;
  for (var i = 0; i < payments.length; i++) {
    if (Utilities.formatDate(new Date(payments[i][0]*1000), Session.getScriptTimeZone(), "dd") == day)
      pay += payments[i][1] / 1000000000000;
  }
  for (var i = 0; i < hashrate.length; i++) {
    hash += hashrate[i][1];
  }
  hash = (hash / hashrate.length).toFixed(0); 
  send_sms(pay + '+KRB+выплата+за+' + day + '+(~+' + hash + '+H/sec)');
}

function send_sms(m) { // для отправки смс на ваш телефон (меняем на свой тел.)
  UrlFetchApp.fetch('https://platform.clickatell.com/messages/http/send?apiKey=iY3rdSUbRj6b4E356g==&to=380981075040&content=' + m);
}

function send_sms_mining_off() { // Отключает розетку. Меняем на телефон для розетки
  try {
  var html = UrlFetchApp.fetch('https://platform.clickatell.com/messages/http/send?apiKey=iY3rdSUbRj6b4E36g==&to=380661075040&content=%231111LOAD0');
  var mesID = JSON.parse(html.getContentText()).messages[0].apiMessageId;
    if (mesID)
      CacheService.getScriptCache().put('mesID', mesID, 21600);
    else
      send_sms('Не+отправлена+СМС+для+отключения+майнинга');
    } catch (e) {
      send_sms_mining_off();
  } 
}

function doGet(e) { // Получаем ответ что розетка отключилась, и включаем её. меняем на телефон для розетки
  var status = e.parameter.status;
  var mesID = CacheService.getScriptCache().get('mesID');
  if (e.parameter.status == 'RECEIVED_BY_RECIPIENT' && mesID == e.parameter.messageId) 
    UrlFetchApp.fetch('https://platform.clickatell.com/messages/http/send?apiKey=iY3rdSUbRj6b4E36g==&to=380661075040&content=%231111LOAD1');
}

В коде соответственно меняете свои данные, это кошелек, телефон и адрес пула.

Внимание! Адрес пула это не тот который Вы видите в браузере, а его необходимо найти, для этого на странице статистики нажимаем ctrl+shift+i и в появившемся окошке выбираем Network.

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


После того ка вы поменяли в коде данные на свои значения, его необходимо активировать и развернуть как веб приложение, для этого выберите любую функцию из скрипта и запустите её:


Нажмите «Предоставить разрешение» и выберите аккаунт:


Нажмите «Разрешить»:


Теперь разверните как «Веб-приложение», нажмите в меню «Публикация»:


Настройте как показано на скриншоте ниже:


Скопируйте текущий URL веб-приложения, в дальнейшем он пригодиться.

Теперь добавим Триггера, которые будут срабатывать каждую минуту, и раз в день с отчётом (по желанию). Выбираем такие функции и настраиваем по скриншоту:


На этом настройка скрипта окончена, приступим к СМС.

Настройка СМС шлюза


Регистрируемся на clickatell.com. Заходим в личный кабинет и добавляем два телефона. Для отчетности Ваш телефон и тот, что в розетки. Ресурс Сlickatell позволяет отправлять полностью бесплатно смс на три своих номера, которые вы зарегистрируете у них, в неограниченном количестве. Теперь настроим АПИ для рассылки смс, идём сюда и настраиваем АПИ, вам будет присвоен ключ API.


На этом настройка мониторинга «фермы» окончена. вставляйте СИМ карту в  GSM-розетку, включайте ферму. Можно протестировать работу розетки, запустив функцию в скрипте send_sms_mining_off(). Розетка должна отключиться и через несколько секунд включиться, при этом отправиться оповещение на Ваш телефон. 

P.S. Вот уже третий месяц, не было ни одного случая, что б надо было в ручную перезагрузить, или запустить ферму!

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


  1. Darth_Malok
    02.05.2018 16:32
    +1

    Очень интересная статья. Но не в плане перезагрузки ферм — программный + аппартный вачдог работает не хуже и совсем бесплатно.

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

    Странно, что на хабре про Google Apps Script почти нет статей. Пойду изучать документацию и попробую телеграм-бота куда-нибудь прикрутить)


    1. apinetua Автор
      02.05.2018 17:40

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


      1. Chosen_One
        03.05.2018 08:17

        Так вроде же интернет есть, чтобы ферма с пулом общалась? Смотрю на фотке счетчик от Energenie/Gembird? У меня такой же есть + еще есть удлиннитель с управлением отдельных розеток по USB. Так вот к малине его можно прицепить и на малине проверять пул и чуть что ресетить розетку без облаков


      1. Andry_231
        03.05.2018 08:18
        -1

        Так ведь нет интернета = нет майнинга. Ферма всегда онлайн.
        У данного решения есть и большой недостаток: отвал драйвера, мигание трафика, секундное пропадание майнинг-пула- хэшрейт 0, ферма перезагружается. Потеря 1-3 минут на перезагрузку и старт майнера. Любители найсхэша или других автоматических переключателей майнеров вообще не смогут пользоваться.

        Программный вачдог вполне может контролировать ситуацию, имеет возможность отфильтровывать временные пропадания без перезагрузки, есть возможность перезагруить и роутер набором команд по сети.
        Если риг повис в синий экран, то вариант_1: usb вачдог, вариант_2: оповещение с майнинг-пула в почту или смс, перезагрузка wifi выключателем.


        1. apinetua Автор
          03.05.2018 08:20
          +1

          Имелось в виду интернет на Вашей стороне. Например WI-Fi розетку надо ручками заходить и перегружать. Да я и не претендую на самую лучшую мониторинговую систему для ферм. Это просто один из вариантов.


          1. vladics
            03.05.2018 15:29

            mysku.ru/blog/china-stores/57097.html
            Как вариант. Без регистрации и смс…


            1. apinetua Автор
              03.05.2018 15:30

              А Вы подумайте как её применить к мониторингу именно фермы? Заморочка…


    1. zerg59
      02.05.2018 23:28

      Насчёт «всегда»…: Google просто обожает время от времени убивать какие-нибудь свои не основные сервисы.


      1. apinetua Автор
        03.05.2018 08:42

        Google Apps Script — они только улучшают.


    1. QDeathNick
      03.05.2018 00:04

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


      Спасибо за наводку на смс-сервис.


      1. apinetua Автор
        03.05.2018 08:16

        Я в курсе за ограничения, и кстати их в последнее время наоборот увеличили.
        Сам скрипт работает менее одной секунды, раз в минуту. Минут в сутках 1440, а это примерно 720 секунд процессорного времени Google drive, что 12 минут от 90 мин. разрешенных в сутки.


      1. p0gank
        03.05.2018 15:30

        строятся красивые графики отражения радиоволн от ионосферы

        А можете поподробнее рассказать про этот проект?


  1. Grinch997
    03.05.2018 08:09
    +3

    Я думал нормальная ферма, а тут…


    1. apinetua Автор
      03.05.2018 08:10
      -1

      Здесь описание не фермы, а принцип удаленной перезагрузки.


    1. unwrecker
      03.05.2018 09:36
      +2

      Корова даёт мало молока — перезагрузить корову? :)


  1. lilek
    03.05.2018 09:24
    +1

    Вот немного про дешевый "умный" SMS+GPRS+WIFI контроллер с возможностью писать свой код в Arduino IDE: https://www.youtube.com/watch?v=6hi-wMx6T9A
    А дальше можно к нему добавить реле на свой вкус и цвет (дешевые китайские, омроны, бесконтактные, комбинированные и тд)