Практически каждый пользователь сталкивается с тем, что не может зайти на определенный сайт, хотя он ещё 5 минут назад работал. Но администратор такого сайта даже может и не подозревать, что он у него не работает. А что, если администратор этого сайта — вы?
Практически любой сайт рано или поздно перестает работать. Причины могут быть разными. Вопрос только в том, как быстро вы об этом узнаете? Вариант первый — постоянно и вручную проверять жив ли сайт. Но это как-то не целесообразно тратить время и нервы.
Мы вам предлагаем способ решения проблемы с помощью автоматического устройства.
S
и V
поставьте перемычку, для того чтобы светодиод всегда светил. Возьмите два провода «папа-папа» и подключите их в Breadboard Mini. По ним будет идти питание от источника напряжения к макетной плате. Красный потом подключим к плюсу, а зеленый к минусу. Этим мы сделали рельсы питания и земли. Запоминая текущее время, делаем запрос к сайту. Если код ответа страницы в диапазоне 200–400, вычисляем время задержки за которое ответил сервер и показываем смайл соответствующий этой задержки:
Если код ответа страницы в другом диапазоне (отличен от 200–400) или сайт вообще не отвечает, показываем «мёртвый смайл».
Далее проделываем такой запрос каждые 60 секунд.
//Загружаем модуль BoneScript, к которому в коде мы будем обращаться с именем b var b = require('bonescript'); var SERVO = 'P9_14'; // пин с серво var url = 'http://ya.ru'; var SMILE_DUTIES = { ':)': 0.03, ':|': 0.06, ':(': 0.09, 'XS': 0.126 }; var currentSmile = ':)'; //Задаём SERVO направление <выход> b.pinMode(SERVO, b.OUTPUT); var http = require('http'); // Функция, которая показывает смайл, соответствующий задержке `time` function showSmile(time) { // Выбираем вид смайла var smile = null; if (time < 1000) { smile = ':)'; } else if (time < 5000) { smile = ':|'; } else if (time < 10000) { smile = ':('; } else { smile = 'XS'; } console.log(smile); // Поворачиваем барабан до смайла, если он ещё не там if (currentSmile !== smile) { b.analogWrite(SERVO, SMILE_DUTIES[smile], 50); currentSmile = smile; } } //Определяем новую функцию update, которая состоит из кода между фигурными скобками function update() { // Запоминаем момент начала запроса var startTime = new Date(); console.log("Start time " + startTime); // Делаем сам запрос к сайту http.get(url, function (response) { // Эта функция будет вызвана, как только мы получим ответ // Выводим HTTP-статус ответа console.log(response.statusCode); if (response.statusCode >= 200 && response.statusCode < 400) { // Если код ответа страницы 2хх — это ОК, 3хх — это редирект // будем считать оба сценария нормальными console.log("OK"); // Узнаём время получения ответа var endTime = new Date(); console.log("End Time " + endTime); // Вычисляем задержку, с которой мы получили ответ var time = endTime - startTime; console.log("time = " + time + " ms"); // показываем смайл соответствующий задержке showSmile(time); } else { // Мы получили в ответ какой-то странных, плохой HTTP-код. // Будем считать это ошибкой console.log("Error Time"); // показываем мёртвый смайл showSmile(10000); } // «Потребляем» тело ответа, чтобы высвободить HTTP-подключение response.on('data', function() {}); }).on('error', function (e) { // Эта функция будет вызвана если сайт вообще не доступен // Например, если пропало сетевое подключение или сервер... console.log(e.message); // показываем мёртвый смайл showSmile(10000); }); } // Вызываем функцию update при старте и затем каждые 60 секунд update(); setInterval(update, 60000);
На основе этого проекта вы можете также собрать девайс, который будет вам показывать прогноз погоды (ясно, пасмурно, дождь, снег), загруженность дорог с Яндекс.Пробок, да и вообще любые другие показатели, которые можно получить через какой-либо API.