[Из песочницы] Удалённый мониторинг «фермы» с помощью GSM-розетки
Опишу один из способов как можно мониторить «ферму» и удалённо перезагружать в случае если она зависла, «отвалилась» видеокарта или программа для майнинга, пропал интернет, завис роутер.
Преимущества GSM-розетки:
- Автоматическая перезагрузка «фермы», даже если она «жестко» зависла.
- Вы будите проинформированы о перезагрузке фермы. Даже если у Вас в этот момент отсутствует интернет на мобильном. Вам приходит обыкновенная СМС.
- Googl Drive — всегда работает в «облаке», без вашего участия, проверенно более 5 лет.
- Цена вопроса ~ 800 грн. + 1 грн в год. (за любой тариф от Киевстара)
Недостатки других систем по мониторингу:
- Программный WATCHDOG — кто бы что не говорил, но… зависает!
- USB WATCHDOG — не отсылает оповещение, бывает не перезагружает если по какой-то причине закрылся «майнер».
- Wi-Fi умные розетки автоматически не перезагрузят систему. Необходимо на них заходить и в ручную отключать и включать. При условии что у неё не «отвалился» интернет и не завис роутер.
Вся идея мониторинга работает если Вы майните на пуле и пул отдаёт статистику работы вашей «фермы».
- Регистрируемся в Google.com или используем готовую учётную запись gmail.com. Бесплатно!
- Регистрируемся на clickatell.com — это для отправки СМС на Вашу розетку. Бесплатно!
- Покупаем 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. Вот уже третий месяц, не было ни одного случая, что б надо было в ручную перезагрузить, или запустить ферму!