24.04.2018

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

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

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

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

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

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

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

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

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

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

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

Обслуживание тарифного плана для GSM розетки — 1 грн. в год. Самый дешевый для Украины, это Киевстар, достаточно любой тариф пополнять на 1 грн. в год и Ваш номер будет сохранён. Этого достаточно для приёма СМС. Розетка не задействована для отправки СМС и исходящих звонков. Но это можно настроить и тариф должен это поддерживать, но данная функция совсем не обязательна.

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

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

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

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

Текст скрипта. Скачать текст скрипта.

Подробнее >>>

function response(n) {
// Меняем на свой кошелек
var wallet = 'KcdYnF6rxxKEw7pvFWqNCh3yhpFD6sfvtCuTakxpWZSQCs3sTrvBLfK4TLMxZnRdMgdcK3oPxuoSiPE4KwtLQkq4AnPXHZx';
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=iY3rdSUbRj6b4E35kXjS6g==&to=380981075040&content=' + m);
}

function send_sms_mining_off() { // Отключает розетку. Меняем на телефон для розетки
try {
var html = UrlFetchApp.fetch('https://platform.clickatell.com/messages/http/send?apiKey=iY3rdSUbRj6b4E35kXjS6g==&to=3806610750406&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=iY3rdSUbRj6b4E35kXjS6g==&to=380661075040&content=%231111LOAD1');
}

В коде соответственно меняете свои данные, это кошелек, телефон и адрес пула.
Внимание! Адрес пула это не тот который Вы видите в браузере, а его необходимо найти, для этого на странице статистики нажимаем ctrl+shift+i и в появившемся окошке выбираем Network. Находим ту часть запроса который обращается за статистикой на сервер. У каждого пула он свой, но ответы всегда приходят в стандартном JSON формате. Для Карбованца, он одинаков для любого пула. Вот этот ответ и «разбирает» скрипт на гугл диске, каждую минуту.
 
После того ка вы поменяли в коде данные на свои значения, его необходимо активировать и развернуть как веб приложение, для этого выберите любую функцию из скрипта и запустите её
Нажмите «Предоставить разрешение» и выберите аккаунт
Нажмите «Разрешить»
Теперь разверните как «Веб-приложение», нажмите в меню «Публикация»
Настройте как показано на скриншоте ниже
Скопируйте текущий URL веб-приложения, в дальнейшем он пригодиться.
Теперь добавим Триггера, которые будут срабатывать каждую минуту, и раз в день с отчётом (по желанию). Выбираем такие функции и настраиваем по скриншоту
На этом настройка скрипта окончена, приступим к СМС

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

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

Подробнее >>>

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