Pull to refresh

Удалённый мониторинг «фермы» с помощью GSM-розетки

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

Преимущества 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. Вот уже третий месяц, не было ни одного случая, что б надо было в ручную перезагрузить, или запустить ферму!
Tags:
Hubs:
Total votes 28: ↑20 and ↓8+12
Comments16

Articles