Данный обзор заинтересует, в первую очередь, тех, кто использует популярное для дач, сельских домов и маленьких офисов решение: раздавать мобильный интернет от usb-модема с симкой через бытовой wi-fi-роутер. Парк таких роутеров сейчас обширен, мобильный интернет достаточно доступен, вот и трудятся по дачам Асусы, Зикселы и прочие тп-линки с воткнутыми в них Хуавеями и ЗТЕ.
Одна проблема — всё это периодически подвисает.
Да оно бы и не беда: казалось бы, ну что тут такого, — зависло, — современная прошивка любого роутера имеет различные ватчдоги. И в dd-wrt, и в open-wrt, да и в стоковых прошивках есть различные keep-alive инструменты: ребут по отсутствию пингов до указанного ресурса, ребут по расписанию, разрыв сессии модема и т.д.
Но на практике всё оказывается гораздо неприятнее. Зависают, чаще всего, именно сами usb-модемы. А программная перезагрузка роутера никак не спасает ситуацию: напряжение с usb-порта роутера при таком ребуте не снимается. Т.е. роутер честно обнаруживает зависание, честно перезагружается, но сам модем так и остаётся зависшим. Помогает только физическое обесточивание системы «роутер-модем».
Столкнувшись со всем вышеописанным, решил сделать универсальный отвисатор бытовых роутеров, который поможет в подобных ситуациях. Нисколько не претендую на оригинальность идеи. Более того, я даже уверен, что такое уже есть. Наверняка такое реализовывалось многими людьми и многими способами. Но, потратив полдня, вот так «слёту» найти готовое решение я не сумел. Понял, что самому сделать проще и сподручнее.
Обозреваемый девайс включается в разрыв линии питания роутера, между низковольтным штекером блока питания и гнездом питания самого роутера. Также отвисатору потребуется от роутера один lan-порт. Смысл прост. Девайс раз в несколько минут пингует последовательно несколько заведомо живых ресурсов (в моём случае это публичные DNS-серверы Яндекса и Гугля). И, если с нескольких попыток не допингуется ни до одного, он разрывает линию питания роутера на несколько секунд, физически перезагружая всю систему.
К конструкции. Главным узлом является сетевой модуль. У меня в тумбочке нашёлся модуль на W5500 от RobotDyn, поэтому он и вынесен в заголовок. Но модули на этом чипе делают все, кому не лень (и, уж конечно, дешевле, чем $5). Так что воспользовавшись поиском по Aliexpress, каждый найдёт лот, подходящий именно ему. Справедливости ради, отмечу, что вся продукция RobotDyn, которую я держал в руках, оставляла самые приятные впечатления — качественный монтаж, отличное качество изготовления плат, продуманность конструкции. Я не рекламирую, — думаю, многие подтвердят мои слова.
Мозгом отвисатора выступает ардуина, — работа как раз для неё. У меня нашлась Pro Mini. Но подойдёт любая, хоть Nano, хоть Uno. Я люблю ProMini за то, что их не жалко оставлять в готовых конструкциях, это самая бюджетная модель из линейки ардуино. Покупаю их сразу пригоршню и всегда имею запас «в тумбочке». Новичкам же, наверное, больше подойдёт упомянутые выше Nano или Uno, потому что они сразу, без переходников и сложностей, умеют подключаться к USB «большого брата».
Ещё конструкция должна содержать ключевой элемент, чтобы разрывать питание роутера. Я, каюсь, применил
модуль реле, но это исключительно от лени. n-канальный MOSFET был бы и дешевле, и надёжнее. Можно и твердотельное реле (хоть то же Омроновское), но это уже если шиковать.
Для того, чтобы схема успешно работала в широком диапазоне питающих напряжений (наш отвисатор универсален), используется миниатюрный
dc-dc преобразователь, настроенный на выходные 5 вольт.
Вот всё, что потребуется для постройки девайса:
Немного о сетевом модуле, как о центральном в этой конструкции.
Человеку, который впервые выбирает сетевой модуль для своей ардуино-самоделки, приходится делать нелёгкий выбор. Даже если за скобками оставить Wi-Fi, и предположить, что требуется именно коммуникация витой парой, то спектр таких модулей весьма широк. С одной стороны, это семейство шилдов на различных вариациях ENC28J60 и CP2200. Главное, что в них подкупает новичка — это стоимость таких модулей. Они действительно довольно дёшевы. А вот дальше начинаются трудности. Ведь это, в прямом смысле, контролеры Ethernet, которые работают на довольно низком уровне ОСИ. Они работают с Ethernet-фреймами, и не более того. Это значит, что весь стек TCP/IP и всё, что выше, придётся делать ручками и программно. А для новичка, даже при наличии готовых библиотек, это, зачастую, является довольно сложной задачей.
А далее, всем известный визнетовский чип W5100. Готовых модулей на клонах этого чипа — превеликое множество. W5100 — это уже настоящий TCP/IP сопроцессор. Т.е. от низкоуровневой рутины пользователь становится освобождён. Чип стал очень популярен. Но он не лишён кучи недостатков. Главные: работа на скорости 10 Mbit/s, жуткий нагрев, ряд глюков (документированных). Но, W5100 — до сих пор стандарт для официальной ардуины, и все версии библиотеки Ethernet поддерживают именно его.
Последующая эволюция — это появление чипа W5200 (это уже 10/100 Mbit/s, это более стабильная работа). И, наконец, дальнейшее развитие — чип W5500 (от 5200 он отличается меньшим энергопотреблением, (из-за улучшения технологического процесса, 0.13µm против 0.18µm), меньшим допустимым порогом питающего напряжения (1,2V-3.3V против 1,8V-3.3V), изменением формата SPI-фрейма, способностью программно уходить в сон, умением WOL от UDP-пакета и рядом других улучшений).
Многие ардуинщики недолюбливают W5500. Главным образом потому, что официальной поддержки этого чипа стандартной библиотекой Ethernet всё ещё до сих порт нет. А почти четыре года прошло. По ардуиноориентированным форумам полно сообщений, типа «купил модуль на W5500, открыл стандартный пример, ничего не заработало, модуль плохой, буду возвращать». Да, всё это печально, но официальным релизерам библиотек должно икаться по многим поводам, не только по этому. Увы.
Путей решения проблемы несколько.
Во-первых, можно использовать стороннюю библиотеку
Ethernet2. Способ хорош, если в вашем проекте не будет использоваться других библиотек, ссылающихся на оригинальную Ethernet. В одном проекте совместить обе библиотеки не получится.
Во-вторых, написать всё самому. Если задачи просты, то вполне возможно.
В-третьих, можно модифицировать стандартную библиотеку Ethernet, чтобы она научилась работать с чипом W5500. Минус в том, что при смене IDE на новую версию, библиотеку придётся модифицировать заново. Или носить модифицированную библиотеку вместе со своим проектом.
Я пошёл по третьему пути. Всё подробно
вот тут. Ничего сложного, надо просто по шагам сделать то, что там расписано. Скачиваем архив, заменяем им стандартную библиотеку, раскомментируем ту строку, которая соответствует нашему чипу, наслаждаемся.
Для тех, кто решит повторить описанную тут конструкцию,
я приготовил архив с исходником и всеми необходимыми библиотеками, включая уже модифицированную и настроенную библиотеку Ethernet. Её остаётся лишь перенести в папку «libraries» туда, где установлено ArduinoIDE, заменив стандартную библиотеку Ethernet.
В константах, при необходимости, нужно установить IP-адрес отвисатора, соответствующий диапазону контролируемой сети.
Схема устройства предельно проста и очевидна:
Перед началом сборки, надо не забыть выставить выходное напряжение на преобразователе, равное пяти вольтам. Это единственная регулировка в устройстве. Движок подстроечного резистора после этого целесообразно зафиксировать капелькой подходящего лака. У кого нет цапона, подойдёт лак для ногтей, отобранный у жены.
Собираем всю конструкцию в подходящем корпусе:
Вливаем в ардуину код.
Проверяем работоспособность отвисатора.
Окончательно крепим плату ардуины (на двусторонний скотч или капельками термоклея по углам), но, желательно, так, чтобы при необходимости было возможно подключиться TTL-конвертером для перепрограммирования.
Закрываем корпус.
Готово.
Плюсы конструкции:
— Универсальность алгоритма. Конструкция пингует по нескольку раз и сразу несколько ресурсов. И только в случае полной неудачи перезагружает нагрузку.
— Универсальность адресов и протоколов. Можно пинговать любые ресурсы. Например, мониторить собственный сайт на собственном веб-сервере. Можно заменить ICMP-пинги на что-то другое. Например, на подключение к контрольным ресурсам в качестве web-клиента или, скажем, по ftp-протоколу. Аппаратно конструкция никак не изменится.
— Развязанность контролируемой сети и контролируемого устройства. Отвисатор может сидеть во внутренней офисной сети за офисным прокси-сервером или НАТом и, при этом, допустим, перезагружать какой-нибудь старенький аппаратный файервол, который стоит намного раньше и, соответственно, в другой сети.
— Универсальность подконтрольной нагрузки. Уже в существующем виде конструкция будет работать с любой низковольтной DC-нагрузкой, оснащённой разъёмом 5,5x2.1, в широком диапазоне питающих напряжений. Но заменив ключевой элемент на хорошее реле или каскад из оптосимистора (желательно с контролем перехода нуля) и силового симистора, мы без проблем сможем управлять любой рабочей станцией, сервером или фермой. А хороший электромагнитный пускатель сможет обеспечивать аппаратную перезагрузку целой вычислительной стойки или небольшого машинного зала :)
Минусы конструкции:
— DIY. Надо найти время, силы и желание, чтобы сесть и это сделать.
— Аскетичность конструкции. И внешне, и внутренне, отвисатор суров, аскетичен и неаляпист. Нет собственного веб-интрфейса, нет рюшечек, нет модного управления от смартфона, нет блестящих элементов, обтекаемого корпуса, китайского облака, нет логотипов «Mi», «зелёного робота» или «яблока», даже нет никаких мигающих лампочек. Чёрная коробочка, которая молча делает свою работу. Мной подразумевается, что на эту коробочку годами никто не будет смотреть и она явно будет не на виду, — скорее всего, где-то на пыльном чердаке или на дальней антресоли.
PS: Никто ничего для обзора не предоставлял и не спонсировал. Всё, что описано в конструкции, покупалось в разное время за свои собственные деньги или было найдено в собственных закромах.
Но это не мои, это роботдиновские :)
тоже кстати зухель кинетик вива всё прекрасно работает
идиоты)))Ну есть же разница ;-)
Смотрите:
Светодиод светит. Т.е. излучает свет. Значит, он «lampados». Значение «лампа», ведь даже и в русском языке, никак не привязано ни к накаливанию, ни к огню. Так что употребление «лампочка» вполне себе уместно, согласитесь теперь.
По моему мы нарушаем уже правила сайта.
почему это касается меня:: вижу новый коммент в интересной мне статье, отвлекаюсь, открываю, читаю((
Еще добавлю лампы керосиновые (всем известная «летучая мышь»), масляные, карбидные.
Но, да, развешивать дачный роутер можно и лазая на чердак, обычно они там располагаются — там «берёт лучше» :)
2
3
В одном отдалённом посёлке на электроподстанции стоит древний компьютер, который снимает и отправляет показания с приборов на центральную.
Бывает, он зависает.
Так, чтобы не посылать человека за несколько десятков км. для перезагрузки компа, они удалённо вырубают на несколько секунд свет во всём посёлке.
Но — тоже решение, почему нет.
или отрыть в нём закладку «для DDOS» и использовать её в своих мирных целях))
Именно в этом и заключается рациональность…
Да и среди готовых, мной предложено решение дешевле для своей задачи.
А вот про поддержку я что-то не нашел.
У того же кинетика даже на старые аппараты zyxel регулярно выпускает обновления.
У прошивок кинетика есть пакостная защита, затирающая по-моему boot. Срабатывает рандомно. Так что лучше openwrt туда ставить.
Внутри кстати нет распаянных gpio, так что ценность его в плане пощелкать релюшкой минимальна. И до сих пор непонятно — может ли он отключать usb порт по питанию.
Короче, я за zyxel- за разницу в 1000р получаю гарантию, неплохую прошивку и ее обновление. Быстро настроил и забыл. Все остальное — openwrt на разном железе, микротик — это настроил и начал писать скрипты.
А зачем если можно дешевле и функциональней?
Именно в этом и заключается рациональность…
Да и среди готовых мной предложено решение дешевле для своей задачи.
К сожалению указанная схема не подойдет если питание poe, но в таком случае там обычно бывает сброс usb и вочдог.
Я себе для таких целей взял gl-mt300n с POE и повербанком ;) вход выход 1 микро usb
А то у меня роутер Upvel, при воткнутом модеме включаю в розетку не подхватывает интернет-сеть, приходится вытаскивать модем из роутера.
Данное решение ТС вполне изящно и имеет право на жизнь для старых моделей роутеров не поддерживающих USB Power Control и с глюками при работе с модемами. Видимо прошивки для этой модели с исправлениями уже не выпускают, тогда только изящные костыли…
Хочу все вынести на улицу в небольшой шкаф, к модему антенну приколхозить, искал что то маленькое, нашел на Kroks минироутер, но по цене, да еще бп и шнурок покупать.
PS в ночном отключении есть побочный плюс, иногда засиживаешься и бац сети нет, а т.к. всё в облаке, нужно идти спать до утра. А если очень нужно продолжить работу – на таймере ползунок перевести в режим без таймера и можно продолжать работать дальше.
— роутеры Zyxel Keenetik поддерживают данную функцию
— роутеры Mikrotik это позволяют — статья на Хабре
— третье что приходит на ум — сделать устройство аналогичное как в статье. Коробочка, что-то пингует с заданным интервалом, если соединение пропадает, то по ssh\telnet подключается к роутеру, гасит проводной интерфейс, активирует интерфейс свистка…
У меня роутер TP-Link MR3220 перепрошит в Open-WRT. Самописный скрипт пингует яндекс и гугл раз в минуту, если пинг не проходит 3 раза, сначала перегружает роутер, затем меняет конфиг с проводного интернета на 3G.
И имеется возможность управлять пинанием УСБ свистка:
echo 0 > /sys/class/gpio/gpio8/value # Отключить питание USB
echo 1 > /sys/class/gpio/gpio8/value # Включить питание USB
mikrotik, poe, реле.
если нет желания курочить железячно роутер, то можно организовать сьем с них оптическими датчиками. и, возможно, программная настройка роутера тоже не понадобится.
Так что — «просто микротик», и задача уже сразу решена.
Паять не надо, действует на 100 метров.
Вот поэтому мне и нужно устройство, некий USB хаб, чтобы после подачи команды на него он смог «сымитировать» переподключение путем разъединения всех контактов — не только дата линий, но и питание в 5В…
В моем случае, если подключенное устройство зависло и получает питание 5В, то как бы я его не удалял из системы, оно так и будет оставаться «unknown device», до полного физического извлечения…
Непрерывная перезагрузка роутера не даст работать этой локалке.
Хотя конечно подпадает под «курочить роутер», да. Но если USB портов у роутера больше одного, можно во второй копеечную СР2102 пихнуть на эту роль.
Т.е. вы описали классическую собаку. Ваше решение спасёт от зависания роутера, но не от зависания модема, он останется зависшим.
И нужна будет ещё одна задержка, чтобы выключинным роутер хоть несколько секунд подержала, а потом включила.
Собаки на 555-х были популярны, и они работают до сих пор, но их остаётся всё меньше, это решение стабильно теряет популярность. Главный времязадающий элемент там — электролит большой ёмкости. А это очень нестабильный элемент, со временем у такой собаки гарантированно поплывут все параметры.
Да, ваше решение жизнеспособно, согласен. Но, если честно, мне кажется, по трудозатратам и по затратам времени оно намного дороже, чем описанное. А материально — нет, — очень вероятно всё найти бесплатно в своей тумбочке. Почему бы и нет.
сделать скрипт, чтобы мигал светодиодом каким и сбрасывал таймер в тиньке или опрашивал модем и при ответе тоже сбрасывал
а тут у тебя 2 контроллера и куча сложного кода, который тоже может зависнуть или пинг пропадет не по причине зависания модема
я сейчас делаю ручной дергатель питания видеокамер на есп8266
3 штуки будет
потом еще скрипт мониторинга напишу, видеорегистратор должен выдавать какие-то данные срабатывания датчиков или событий типа потери сигнала на сервер какой-то, в доках ничего не говорится про это
вот было бы интересно расковырять и чтобы перезапускал камеры при пропадании потока, а то они виснут не полностью
тогда «Отвисатор отвисатора» потребуется?
Но этого комментария очень ждал.
На самом деле описанная в обзоре про-мини прошивается optiboot-загрузчиком и тогда внутренняя собака не окирпичивает ардуину. А далее в скетче работает собака. Которая и следит.
И даже более того. Когда обнаруживается отвал интернета, то сначала реле щёлкает и перезагружает нагрузку, потом сознательно собака не дёргается дольше положенного срока и ардуина сама аппаратно также перезагружается, вместе с подконтрольной нагрузкой. Реальный аппаратный ресет всей системы, и подконтрольной и следящей.
а если уж припёрло, то можно через лампочку сделать — поставить ssr реле в разрыв usb питания, наверное даже в корпус роутера всё уместится…
У народа, вон, и мегафон e392 зависает. Разное случается…
Йопта + микромах (купленный за 145 р. по ссылке с муськи) на даче у тещи работает как часы, а на даче у родителей йопта регулярно виснет.
И метод с отвисатором мне не поможет, у роутера встроены 2Х18650 — жди пока разрядятся? :)
а не тот где прошивка раз в год и то в момент выпуска ;)
я лак у мамаши взял давно и уже не первый год он стоит и даже вот недавно конверт заклеивал, а то там эта клейкая полоска давно высохла, а клея обычного нет
Однако для многих роутеров ваше решение очень жизнеспособно. Было интересно прочитать ваш обзор. Спасибо за интересное решение.
До сих пор жалею что не могу поставить в деревню такое элегантное решение — у меня там до введения 4г лет 15 или 20 ждать осталось :(
[с подмосковным приветом, первому WiMax в европе]
микротики RB951 сейчас полторы две тысячи стоят, один вечер чтобы написать скрипт мониторинга соединения, туннеля и забыть навсегда то место где он стоит.
для ленивых кинетики умеют при потере пинга перегружать свисток по питанию.
Хотя, да, микротики я тоже очень люблю. Но тут задача другая. Население, в основном, «на дачу» отправляет трудиться как раз то, что уже дома не надо. А вот, сослав на дачу что-то старое, домой покупать микротик — это да. Отличное решение. Один раз настроил и забыл, где он.
особенность микротиков в том, что не надо торопиться, на них цены волнами с разницей чуть ли не вдвое.
оно и понятно, когда частник свой аппарат продает у него одна цена, когда контора сливает, там важнее быстро продать пару десятков.
Это hAP, он и на маркете недалеко ушёл. Но, да, условиям, в общем, отвечает.
за микротик твой камент заслуживает минуса, а за кинетик плюса
разбей свой камент на два разных — я один плюсану, второй минусану
кинетик примитивно делает вкл-выкл, ну а на микротике сценарии отлично пишутся. у меня помимо свистка еще надо мониторить туннели и если он завис со стороны сервиса, то хорошо бы на резервный туннель преключиться, а когда основной оживет вернуться обратно. что микротик собственно и делает :)
з.ы. в микротиках вообще не бумбум. тупо купил, полистал интернет с базовыми настройками, ну и скрипты по чужему образу и подобию склеил. ровно один вечер.
з.ы.ы. с чердака сообщают :)
впрочем как и сам mikrotik… ведь уже итак есть bash, Iptables итд
к тому же они не открывают исходники и не коммитят в linux kernel (
уверен, что этих клоунов заблокируют на законодательном уровне
mikrotik не нужен
— вот всё, что потребовалось для решения задачи
в опенврт глюки бывают в вебморде, я отказался от него в пользу ubiquiti и скоро возьму микротик для изучения
дизайн у них хороший еще
>>уверен, что этих клоунов заблокируют на законодательном уровне
>>mikrotik не нужен
Хотелось бы услышать аргументы.
А вот как сделать переключение обратно, да и какое устройство для этого поможет при том, что паяльник я в руках не держал — вот это я придумать не могу. Или надо на ifttt как-то придумать, но тоже не думается. У кого есть идеи — буду рад.
Если брать хардовое решение — то я пока на EdgeRouter X вырулил…
2. Сейчас этого в коде нет, но почту может оправлять по SMTP, только прописать код в скетч и адрес почтового сервера.
3. Нет специально не отслеживает, ей попросту незачем. Но без малейших проблем и безболезненно переживает любые отключения питания. Можно в логи писать факт начала работы, это будет либо плановое включение, либо перезагрузка после пропадания. После подачи питания снова начнётся отсчёт времени до контрольного пингования ресурсов, только и всего — это единственное неудобство от броска по питанию. Другой вопрос, как переживёт броски по питанию стоящая за ним подконтрольная нагрузка.
4. Ей всё равно, с чем работать. Абсолютно. Она ничего не знает о характере подконтрольной нагрузки. Ей лишь бы коммутирующий элемент справился.
crontab -e
[email protected]
[email protected]
@reboot echo "`hostname -f` was rebooted"|mail -s "`hostname -f` booted at `date`" $EMAIL — -f $FEMAIL
Можно аналогично использовать тот же zbxtg.py(или его брата zbxtg.sh) для того, что бы отправлять сообщение в телеграм, либо sendxmpp для отправки в джаббер и так далее.
Вы пишите чушь. Ребута по команде reboot(или init 6) хватает, что бы модем отвис. Более того, хватает даже rmmod cdc_acm(cdc_ether) && modprobe cdc_acm(cdc_ether). При выгрузке модуля происходит полный сброс модема и инициализация при загрузке модуля, никакие сторонние железные вотч-доги не нужны.
С вами поделиться скриптом который достаточно повесить в крон и который будет пинговать какой-нибудь заведомо отвечающий IPшник(8.8.4.4 или что-то еще), а при отсутствии ответов будет ребутить роутер или передергивать модуль? Или сам можете пяток строчек на баше написать?
И, да, правильный вариант — передергивать модуль, а не ребутить.
В данное время использую x86-роутер на базе обычного компа, там помогает удалённо отправить комп в спящий режим, с пробуждением по расписанию через 15 секунд:
Тоже успешно вырубает USB-порты и включает их обратно.
Это кстати не только при зависаниях полезно, а и когда «что-то странное со скоростью, а давайте-ка попробуем перерегистрироваться в сети, может на другую БС кинет».
Может быть часть зависаний ваше наивное «передёрнуть модуль» решит, но ту часть которую нет, надеюсь вы будете рады лично поехать за 20-50 КМ перезагружать.
> а ещё ведь бывают 3G и 4G модемы
Да. 3G представляют из себя модемы в 99% случаев и поддерживаются cdc_acm, многие 4G представляют из себя роутеры с андроидом на борту(да-да, с андроид линукс, просто обычно у него нет доступа по adb или ssh) и поддерживаются cdc_ether.
Но вы не знаете что такое модули ядра Linux, не знаете что такое их выгрузка и потому написали отборную чушь.
Вы бы лучше читали что пишут люди умнее вас, может научились бы чему-то.
по крайней мере у хуавея.
Да уж откуда мне, it's not like моё ФИО не раз и не два встречается в чейнджлоге того самого ядра о котором я ничего не знаю.
в норм системах никто никуда не ездит, это сразу заложено
Я таким образом мышь «переподключаю». Иногда почему-то перестают работать настройки дополнительных кнопок, чтобы не перетыкать каждый раз — написал батник из 2 строк и положил на рабочий стол.
К вам же вопрос, вы почему так уверены что выгрузка модулей модема или там выгрузка ohci/ehci/uchi абсолютно точно аппаратно полностью обесточивает USB-порты? абсолютно на всех существующих моделях чипсетов материнок и USB-контроллеров? «Судя по тону вашего ответа» вы и сейчас скажете что я вам вру или не был в курсе чего-то. Вы точно считаете что с вами можно в таких условиях продолжать цивилизованную беседу?
Дальше. Ваши 17 лет с линуксом я под сомнение ставить не стал, но вот вопрос, а сколько моделей 3G/4G моделей вы лично щупали? Хотя бы штук 5-7 будет, от всех трёх основных производителей? Соотв-но здесь же вопрос, есть ли у вас достаточные основания утверждать что выгрузка/загрузка модулей без ребута по питанию абсолютно всегда решает все варианты возникающих в реальной жизни их зависаний. (хинт: nope)
Отсюда собсна мой изначальный посыл: вы говорите всё в теории верно, так должно работать, и это всё должно помогать, но вот на практике весьма часто и того и другого оказывается недостаточно.
Объясните мне, ентерпрайзнику с 7 летним стажем?
стоит где-то баксов под 100
Это схема:
а вот так я её развёл:
(белая черта — на месте перемычки, спрятанной под корпусом NE555).
Товарищи гуру, подскажите — разведено правильно? Спасибо
керамикуплёнку по питанию. Место как раз есть — немного сдвинуть вниз корпус 555.(не гуру :) )
Также «на отрыв» выше прочность
Все хочу намутить такой отвисатор со сбросом нагрузки, но я думал сделать сложнее — со встроенной розеткой. Теперь думаю, что проходной сбрасыватель нагрузки проще и компактнее. Спасибо за обзор +.
кинетик + хуавей е3320(емнип) + йота
вачдогом стали электросети — рубанули гады на часок ))))
Вуаля — внутренний вачдог роутера ресетит и управляет внешним вистком…
И ни одна ардуина не пострадает ;)
Ваша система выключит модем. Но включить его будет некому — лампочка сама по себе не зажжётся никогда :)
А если я дома использую сеть 10.7.32.0/23? Что даст от набора где-то 192.168.0.1? :-D
location / {
proxy_pass natribu.org
}
Увидел содержимое сайта natribu.org.
Что же делать? У моего роутера нет веб-интерфейса. Вообще. И что с твоими советами делать?
Позвольте вопрос, а где вы взяли такую красивую коробочку? У самого много вкусняшек разных в виде ардуин, espешек, датчиков и прочего барахла, но обычно собранное мною устройство больше похоже на бомбу — с кучей торчащих проводков в разные стороны, чем на безопасную красивую штуковину)
Хотя, оно и в Вольтмастере есть, и в Чипе-Дипе.
Маленькую ложку дёгтя в эту бочку мёда вносит лишь одно...-показушная(или явная??) неграмотность изложения некоторых комментариев, порой переходящая на личности. Лично я приношу свои извинения тем, кого ненароком обидел-право, я этого абсолютно не хотел, и просто сорвался, как любой живой «организЬмЬ», который не терпит хаоса и безграмотности даже в простых мелочах… Спасибо тем, кто делится своими наработками, опытом и практикой, учитывая то, что не все оппоненты-профи, и не чурается объяснять всё простым, грамотным РУССКИМ языком.
Автору статью + за труд, но нужно искать простые решения.
Еще лет 7 назад был DIR-320 — чудо прогресса своего времени.
У него был двухцветный светодиод, которым можно было управлять в кастомной прошивке. Садили на него ключ управления питанием всего роутера. Получался такой жесткий аппаратный ресет, восстанавливающий все )))
Ключ на диод питания тоже хорошо
А да, в указанной моделе нет поддержки LTE? Да и цена высокая.
Если же надо не пинги, а подключение как веб-клиента, как ftp-клиента или ка Telnet-клиента к контролируемым ресурсам, то это ровно одну строчку в коде поменять. Никакого усложнения.
PS: У обозреваемого девайса полноценные 100 мегабит, только зачем они ему, если он всего лишь раз N минут к серверам обращается…
Да и замена сторублёвой ардуины на любые фрукты резко увеличит стоимость девайса.
100 мегабит интерфейс для ардуины не тянет скорость. Для пинга не критично, а для сервера очень даже критично.
Ардуина сторублёвая требует совсем не дешёвый LAN модуль, а в апельсинке/малинке LAN по умолчанию есть. Так что фрукты по цене становятся сравнимы с ардуинкой с LAN. А возможности фруктов на порядок превосходят.
Стоит только дофига.
А тут народ (и я в частности) собираем из хлама за 5 долл функциональное устройство.
Лет 5 назад купил на все мосты Nanostation Loco M5 и с тех пор даже конфиги не правил, а все ватчдоги отправлены на свалку истории.
Может все же дело в железе?
1. Непонятно для чего процедура TickEvery1s(), если вызывается только из одного места в коде.
2. Лучше было бы использовать процедуру для пинга сервисов (Которая дублирует код для Гугл и Яндекс).
3. Вместо использовать
4. Ну и последняя проверка
лучше использовать
А подскажите, что делает
Я чего то такого вообще никогда не встречал.
Имел ввиду,
или
Честно говорят насчет последнего куска с ретурном не уверен, умеет ли арудиноИДЕ ретурн (не помню), но в целом это все для того что бы убрать и не использовать delay().
В идеале лучше для этих целей прерывания использовать.
Нужно в ProMini влить загрузчик OptiBoot, взамен стандартному. Для начала ознакомиться вот с этим.
На практике.
1. Вливать надо программатором. Из Уны программатор мне оказался без надобности, программатор мне нужен постоянно зачем-нибудь. Поэтому я себе давно купил AVRASP. Чуть больше доллара — не те деньги. Обзор вот тут, читать надо, там много полезных ссылок. Его самого не прошивал, всё осталось так, как прислал китаец, — меня устраивает.
2. Драйвера к нему поставит Zadig. Запустить; в опциях поставить галку, чтобы отображал все девайсы; из выпадающего списка найти наш USBASP; Поставить ему драйвера WinUSB.
Для сомневающихся. Всё от начала и до конца работает на Windows 10 x64. Лично проверено.
3. Заливать загрузчик будем AVR-дудкой. Скачиваем и пользуемся. Дуду из стандартной поставки ArduinoIDE лучше не использовать, с ней что-то не так.
4. Распаиваем нашу ProMini по всем известной схеме. :) Только убедиться, что ноги программатора соответсвуют рисунку. Разные китайцы могут делать разную распайку колодки программатора, но на странице товара (или на самой плате программатора) написано точно.
5. Запускаем AVRDUDEPROG.exe, выбираем мегу328p, пробуем что-нибудь скачать из неё. Убеждаемся, что всё работает.
6. Что заливать? Заливаем только flash. Фьюзы не надо даже трогать, если нет уверенности и точных знаний. Указываем hex-файл.
Если будем лить optiboot загрузчик, то он находится в установленной ArduinoIDE в папке \hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex
если нужен оригинальный загрузчик от ProMini, то он лежит \hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex
Берём оттуда нужный hex и указываем нашей дуде. Прошиваем, верифицируем. Всё. Наша ардуина готова.
6. Допиливаем свой ArduinoIDE, чтобы он умел заливать скетчи в новые ардуины с оптибут -загрузчиками. Без этого будет Can't resync.
Идём сюда, берём файл «boards-1.6.txt» и его содержимое дописываем в конец файла \hardware\arduino\avr\boards.txt вашего IDE. Теперь в список добавятся [optiboot] платы. Выбирайте 32-ногую мегу, скорость соответствующую — и всё прошьётся.
7. В своё удовольствие используем собаку в собственных проектах.
(avrdude с поддержкой этой микры взял здесь: monitor.net.ru/forum/ch341-atmega-and-pic-info-570991.html#5280810)
Выше уже разобрали множество альтернативных решений, добавлю в копилку еще одно, которым пользуюсь на практике.
Есть серьезное подозрение, что USB модемы зависают из-за проблем с питанием: жрут они прилично, характер потребления — импульсный, а USB порты в большинстве роутеров — хилые. В итоге, я взял следующее: кусок USB кабеля с разъемом-папой, USB-маму с планки на заднюю стенку компьютера, кусок провода с разъемом питания-папой, кусок провода с разъемом питания-мамой и платку на LM2596.
Разъемы питания соединяем вместе (это будет «проходной» переходник) и подключаем к 2596. У USB соединяем черный к черному, белый к белому, зеленый к зеленому. Красный с «папы» не используем", красный с «мамы» — к выходу 2596. Саму 2596 настраиваем на 5.1в
Все. Адаптер питания — в «маму» питания, «папу» питания — в роутер, «папу» USB — в роутер, модем — в «маму» USB. И месяцами — «ни одного разрыва» ©.
Впринципе решения есть для всего +)
aliexpress.com/item/MYLB-New-LCD-Digital-Control-Power-Programmable-Timer-DC-12V-16A-Time-Relay-Switch/32745865150.html
crontab -e
13 4,12,20 * * * /sbin/reboot
Собственно все. Никаких левых железок.
PS. А вашу коробочку пришлось бы ещё привязывать к каждой конкретной беспроводной сети.
ebay.com/itm/191527413765
Поймите правильно. Сейчас ваш вопрос выглядит примерно так, как СМСка доктору на мобильник: «Доктор, у меня болит. Вылечите меня».
Чем и как вам помочь по переписке? Вам тут обязательно помогут (и я в том числе), с ответами на вопросы, на которые можно ответить письменно, а не телепатически.
Для начала расскажите, какая у вас ардуина? На каком чипе сетевая плата? Какая версия IDE? Библиотеки стандартные или из приложенного архива? Скетч скомпилироовался? Влился без ошибок? Напряжение питания сетевой карты и ардуины проверяли?
Изначально взял про мини, но через IDE она никак прошиваться не хотела, после компиляции я брал HEX и прошивал через AVR, после нескольких неудачных попыток, что бы было проще и быстрее прошивать я заказал ардуино нано, через IDE она нормально прошивается.
Чип сетевой карты W5500
Версия IDE 1.8.9
Библиотеки из архива, при чем если заменить в библиотеке Ethernet только файлы из архива, то скетч не компилируется, если полностью удалить папку Ethernet и вставить из архива, то компилируется, но в скетче в приложенных библиотеках Ethernet.h не выделен красным шрифтом
Напряжение не проверял, питаюсь от блока питания 5v
Проблема в том, что когда проходит 15мин и должна сработать реле, на ардуине загорается второй светодиод и дальше ничего не происходит.
В скетче я поменял только byte ip[ ] = {192,168,0,1}; прописал ip роутера
1. Библиотеку надо брать точно из архива. Её надо положить вместо стандартной. Идёте туда, где установлено IDE. Допустим, это «C:\Program Files\Arduino» и там тоже должна быть папка libraries. Вот то, что внутри libraries из архива надо положить в libraries того, где установлено ide. После этого запускать ide.
2. В byte ip[] = {} прописывается не адрес роутера, а адрес, который будет иметь сам отвисатор в вашей сетке. То есть для вашего случая должно быть что-то типа byte ip[] = {192,168,0,112}; при условии что сейчас этот адрес не занят в вашей сети. Проверте пингом (Win+R, cmd, в коммандной строке пишете ping 192.168.0.112, смотрите ответы. От этого адреса ответов не должно приходить)
Если после этих двух пунктов проблема не решилась, начинаем разбираться с «зажиганием второго светодиода»
3. В скетче нет ничего, что бы зажигало второй светодиод. Второй светодиод — это судя по всему, 13-й пин, как я понимаю? Он не используется в скетче. Попробуйте следующее. Уменьшите InactivityPeriod раз в десять, до 60. Влейте скетч. Светодиод станет зажигаться через минуту?
1. Идёте вот сюда: github.com/Wiznet/WIZ_Ethernet_Library
2. Там же ниже в абзаце «Software» есть инструкция, что делать. В нашем случае всё, что для IDE 1.5.x
3. Скачиваете zip и распаковываете файлы по указанному там пути
4. правите файл \libraries\Ethernet\utility\w5100.h согласно инструкции, под чип W5500
Расскажите о результатах.
1. Идёте сюда: www.arduino.cc/en/Main/OldSoftwareReleases
2. Качаете что-нибудь типа 1.6.12. или 1.6.5. Причём, не инсталлятор, а голый zip
3. Распаковываете в отдельную папку. Или на другой компьютер.
4. В его папку с распакованным из зипа IDE идёте в \libraries. И туда распаковываете всё, что в этом обзоре в архиве. Прямо удаляя и заменяя одноимённые библиотеки, если они есть.
5. В той же папке, куда вы распаковали старую версию, запускаете arduino.exe
6. Открываете проект из архива в обзоре. Ну, время можете уменьшить до 60 секунд. И ip должен быть не 192.168.1.112, а 192.168.0.112. У вас же роутер имеет адрес 192.168.0.1, верно? Я ничего не путаю? Убедитесь пингом.
7. Пробуете скомпилировать. И влить.
8. Рассказываете.
Сейчас попробую
У роутера адрес 192.168.0.1 Пингом проверил адрес 192.168.0.112 он почему то пишет ответ от 192.168.0.105: Заданный узел не доступен.
С архивами вроде сделал всё как описано, скетч скомпилировался и влился без ошибок, но 13-й пин всё равно загорается через минуту и ничего больше не происходит.
Вот здесь github.com/Wiznet/WIZ_Ethernet_Library
я правильно понял, что указан уже готовый пример, как должно быть? у меня небыло строчки #include <avr/pgmspace.h> я её дописал и так же как в примере раскомментировал строчки, после чего сохранил и заменил в библиотеке.
При этих действиях компилируется и заливается без ошибок. Время уменьшил до 60 секунд, я правильно понял, в таком случае через минуту если отвисатор не допинговался, то он должен сразу перезагрузить питание?
Да, вы правильно поняли, если через InactivityPeriod секунд он не допингуется, то он должен передёрнуть нагрузку.
Вероятность глюков с библиотекой я бы посчитал сведённой к минимуму. Остаётся думать на аппаратные прогблемы.
Давайте разбираться, где и что конкретно у вас в скетче подвисает.
Допишите в скетч следующее.
В секцию void setup(), в конце, перед закрывающей фигурной скобкой, после строчки MsTimer2::start(); следующее:
А в основном цикле следующее логирование:
Перед строчкой ICMPEchoReply GoogleechoReply = ping(IPAddress (8,8,8,8), 2);
допишите
а сразу после этой строчки ICMPEchoReply GoogleechoReply = ping(IPAddress (8,8,8,8), 2);
допишите
Аналогично со строчкой ICMPEchoReply YandexechoReply = ping(IPAddress (77,88,8,8), 2);
До неё напишите
а после неё
Загружайте скетч. Открывайте Монитор порта в самой IDE. В нижнем угу окна монитора только проверьте, что он настроен на скорость 9600. Смотрите лог. Будет понятно, на каком этапе оно виснет. Должно быть по четыре попытки пингануть каждый ресурс.
Появилось немного свободного времени, всё сделал по вашему описанию. Я правильно понял, что смотреть лог в мониторе порта можно не собирав всё, а просто на самой ардуине?
Открыв монитор порта пишет
Starting log
а ровно через минуту на ардуине загорается 13-й пин и появляется надпись
Trying to ping Google
И всё, больше ничего не происходит
Получил ровно ту же самую картину, что и у вас. Знаете как? Я не подключал к ардуине сетевую карту! :)
Потом распаял плату, попробовал с непатченой библиотекой. Та же самая картина.
Это значит, что описываемая вами картина может быть как от софтовых, так и от аппаратных проблем.
Потом в IDE 1.6.12 в библиотеки положил то, что из архива. И всё заработало.
Вот что.
Держите HEXы, это полный результат компиляции. Компилировал под Nano. Влить сможете в ардуину? Только правильно, чтобы загрузчик не убить. Попробуйте. Залитую ардуину так же подключайте в IDE. Ничего не компилируя и не заливая открывайте монитор порта и снова смотрите, что оно пишет. Рассказывайте о результатах.
Подключил только NANO без реле и сетевых плат, в мониторе порта следующее:
Starting log
Trying to ping Google
Google pinged
Trying to ping Google
Google pinged
Trying to ping Google
Google pinged
Trying to ping Google
Google pinged
Trying to ping Yandex
Yandex pinged
Trying to ping Yandex
Yandex pinged
Trying to ping Yandex
Yandex pinged
Trying to ping Yandex
Yandex pinged
Я так понял, что всё таки видимо я накосячил в библиотеках?
Подождите до завтра, я скомпилирую ещё один HEX, но уже с интервалом в 10 минут и без вывода лога в порт, просто молчаливо делающего свою работу.
Да, это однозначно косяк с библиотеками. Но раз HEX влился, то и неважно. Мне не трудно…
Завтра попробую залить и проверить.
Всё таки мне интересно, что я и где сделал неправильно. Получается у меня сейчас и исходника рабочего нет.
Ещё заметил, когда залил ваш готовый HEX и открыл монитор порта, сначала у меня была только одна попытка пинга Гугла, пошевелив usb провод у меня сразу стало дальше пинговаться, видимо ещё может быть проблема в этом проводе, попробую его заменить, или шить через isp.
И ещё вопросик, с выводом в порт вся сборка работать не должна? Я интереса ради всё подключил и не работало
Почему не должна? В тестовой спборке только внесены изменения из этого поста. Т.е. дополнительно добавлен текстовой выод в консоль и уменьшен интервал ожидания между проверками с десяти до одной минуты. Во всём остальном всё одинаково. Тут уж вам никто не поможет :) Ищите ошибки в подключениях по схеме. Там путаться не в чем: семь проводов до сетевой карты и три до реле :)
Мерьте мультиметром уровень на 8-м пине. Он должен быть в высоком состоянии всё время, а на время после неудачных попыток пингования должен падать в ноль на 10 секунд.
Если включить только ардуину, то по светодиодам видно, что она работает, подключаю всё остальное к ардуине и не работает.
И вот опять двадцать пять… Ровно такая же история и сейчас. В подключении уж точно нет ошибок, там мне кажется вообще не реально ошибиться:)
Замерил 8й пин, он всегда с напряжением, прошло 10 минут, загорелся 13й пин и с 8го пина напряжение не пропало.
Может дело в самой сетевой карте? Наш китайский друг отправил мне не такую сетевую, как у вас, мне пришла широкая, синего цвета, но на чипе 5500
Вливайте HEX, который с логированием и минутным интервалом. Он у вас работал. Вы же мне скопипастили результат сюда.
Он ничем не отличается от описываемого в обзоре, кроме как уменьшенным интервалом опроса. Он работает? Уровень на 8-й ноге после серии пингов, которые вы видите в логе, падает в ноль?
2. А если только сетевую карту?
3. А если сетевую карту только по питанию?
Заказал сетевую карту как в этом описании и всё заработало. Есть ещё вопросик, а возможно сделать так, что бы этот отвисатор мог работать со всеми типами роутеров и как эти через usb и обычные роутеры с симками и без симок
1й вариант это USB модем (свисток) работает со свичём. На нём отвисатор работает безупречно.
2й вариант это 4х портовый роутер с сим картой, питание от своего блока питания 12в, на нём отвисатор уже не срабатывает
Давайте ещё раз. У коробочки есть сетевой интерыейс и реле. Если она по сетке не может пингануть Яндекс и Гугль, он щёлкпет релюшкой. Она ничего не знает про роутеры, коммутаторы, модемы, симки и прочую нагрузку. Универсальней некуда. Ей попросту всё равно. Нет пинга по сетке — размыкаются контакты реле. Откуда берётся интернет для её порта и что она там размыкает релюшкой, девайсу пофик. Хоть всю квартиру.
Что значит «не работает»? Реле не щёлкпет?
Так надо разбираться с IP адресацией. У данного девайся же должен быть адрес, как и у любого сетеаого устройства, иначе не бывает. И в исходнике это есть. Возможно, у того роутера адресация в другом диапазоне. Проверьте и, соответственно, поправьтк в исходнике.
Arduino IDE 1.6.12. Все файлы из архива скинул в папку libraries. Что просто с заменой, что удаляя родную библиотеку ethernet.
Уж глупости ради скачал все с нуля, букву в букву все скопировал:
Starting log
Trying to ping Google
И тишина.
Индикаторы на шилде все весело горят, моргают и прочее, но ip как я понимаю железяка не получает, ибо dhcp сервер сообщает что offline, да и пинги до устройства не идут.
Я уже видел Ваш bin, но мне жуть как не хватает функционала… как минимум не тот ip забит, не тот ip пингует )
IP надо выбирать самостоятельно и вписывать в исходнике. В строчке
По делу и у 5200 такая же проблема. Все эти сетевые контроллеры — низкоуровневые. Грубо говоря — отправил-принял и все равно что. А вот что отправить и как и куда принять — все реализовывается уже программно.
Библа работает нормально с любой 1.х версией библиотеки ethernet из комплекта ArduinoIDE (со второй проблемы с сокетами): www.youtube.com/watch?v=-SM7HBJ49pk
Компилировал на 1.8.13 (1.8.8, 1.6.5).
У меня дома роутер на чердаке дома (так получилось что быстро прокинуть в коммутационный шкаф лапшу не выходило, оставил до лучших времен, ну а нет ни чего постоянее чем то что делается на время). В общем роутер (dsl модем выступает в роли bridge) уже год временами подвисает наглухо, даже пинги не принимает, да чего уж там, линк роняет. Ходить ногами до автомата надоело. Решил автоматизировать тем что было в наличии.
Физу разрываю реле через нормальнозамкнутый контакт. Т.е. включена ли ардуина, выключена в нормальном положении реле замкнуто и на роутере есть напряжение. Как только в моем случае 6 раз в течнии 60 секунд роутре не ответил на пинг с временм ожидания 100мс и одной попыткой, то на 10 секунд отключается питание, включается и 60 секунд ватчдог ждет загрузки роутера. После начинает пинговать. В моем случае хватило бы и EthernetStatus библиотеки Ethernet, но решено было сделать сразу более универсальным ватчдогом. На работе второй соберу. а то pfsense может загнаться когда у него multi_wan и оба основных шлюза down. Он тогда перестает вообще маршрутизировать весь трафик, даже по DHCP не выдает ip и пинги на себя не принимает.
#include <Ethernet.h>
#include <MsTimer2.h>
#include «Ping.h»
// введите ниже MAC-адрес и IP-адрес вашего контроллера;
// IP-адрес будет зависеть от вашей локальной сети:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {192,168,0,206}; // IP устройства
byte ds[] = {192,168,0,1}; // DNS
byte gw[] = {192,168,0,1}; // GW
//IPAddress TARGET = (192,168,0,1); // Какой ip пинговать
IPAddress TARGET = (172,26,0,1); // Какой ip пинговать
int TIME_PING = 0;
#define NC_RELAY HIGH//Уровень ноги чтобы роутер был включен
#define NO_RELAY LOW //Уровень ноги чтобы роутер был выключен
const int INTERVAL = 10; // Интервал через какое время пинговать в сек. В ping.h поменять для локлаьных ресурсов, для интернет ресурсов стоит увеличить PING_TIMEOUT:
// const uint8_t PING_TRY = 1;
// const uint32_t PING_TIMEOUT = 100;
int INTERVAL_COUNT = 0;
const int MAX_FAIL = 6; // сколько пингов считать неуспешными. При пинге через каждые 10 секунд получается 1 минуту не отвечает роутер.
int FAIL = 0; // счётчик фейлов
const int WAIT_POWER_OFF = 10; //Сколько роутер держать выключенным в сек
const int WAIT_POWER_BOOT = 60; //Сколько ждать загрузки роутера в сек
// Инициализируем Ethernet нашим MAC, IP и шлюзом по умолчанию.
// инициализируем библиотеку Ethernet Server, указывая нужный порт
// (по умолчанию порт для HTTP – это «80»):
EthernetServer server(80);
// задаем контакт и начальное состояние для реле:
String RELAY1STATE = «NC»;
const int RELAY = 5;
// задаем переменные для клиента:
char linebuf[80];
int charcount=0;
//Счетчик до пинга. Вызывается каждую секунду по прерыванию
void pingMyAdressTimer() {
INTERVAL_COUNT++;
}
//Непосредственно вызов пинга
void pingMyAdress() {
TIME_PING = ping(TARGET);
}
//Процедура включения нагрузки и таймера ожидания загрузки
void rebootRouter1() {
digitalWrite(RELAY, NC_RELAY);
RELAY1STATE = «NC»;
MsTimer2::stop();
MsTimer2::set(WAIT_POWER_BOOT*1000, rebootRouter2);
MsTimer2::start();
}
//Обратно запускаем таймер пинга
void rebootRouter2() {
MsTimer2::stop();
MsTimer2::set(1000, pingMyAdressTimer);
MsTimer2::start();
}
void setup() {
// подготавливаем реле-модуль:
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, NC_RELAY);
// открываем последовательную коммуникацию на скорости 9600 бод:
Serial.begin(9600);
// запускаем Ethernet-коммуникацию и сервер:
Ethernet.begin(mac, ip, ds, gw);
server.begin();
Serial.print(«server is at „); // “сервер на „
Serial.println(Ethernet.localIP());
//первично пингуем чтобы в loop войти с данными. первый раз пинг может быть очень большим
pingMyAdress();
//Теперь запускаем счетчик пингования по прерыванию
MsTimer2::set(1000, pingMyAdressTimer);
MsTimer2::start();
}
// Показываем веб-страницу с кнопкой «вкл/выкл» для реле:
void dashboardPage(EthernetClient &client) {
client.println(“<!DOCTYPE HTML>»);
client.print("<meta http-equiv=\«Refresh\» content=\"");
client.print(INTERVAL);
client.println("\" />");
if (TIME_PING < 0) {
client.println("
Router is offline.
");client.print("
Now count fail check:");
");client.print(FAIL);
client.print("
}
else {
client.print("
ping time: ");
");client.print(TIME_PING);
client.println("
}
// генерируем кнопку для управления реле:
client.println("
Relay 1 — State: " + RELAY1STATE + "
");// если реле выключено, показываем кнопку «вкл»:
if(RELAY1STATE == «NC»){
client.println("NO");
}
// если реле включено, показываем кнопку «выкл»:
else if(RELAY1STATE == «NO»){
client.println("NC");
}
client.println("");
}
void loop() {
//Если счетчик достиг нужного количества, то пингуем роутер
if (INTERVAL_COUNT >= INTERVAL) {
INTERVAL_COUNT = 0;
pingMyAdress();
//Если TIME_PING < 0, то увеличиваем счетчик фейлов на единицу
if (TIME_PING < 0) FAIL++;
//Если счетчик достиг нужного количества, то тушим роутер и запускаем таймер выключенного положения ройтера
if (FAIL == MAX_FAIL) {
FAIL = 0;
Serial.println(«Начинаем процедуру перезапуска»);
digitalWrite(RELAY, NO_RELAY);
RELAY1STATE = «NO»;
MsTimer2::stop();
MsTimer2::set(WAIT_POWER_OFF*1000, rebootRouter1);
MsTimer2::start();
}
}
// прослушиваем входящих клиентов:
EthernetClient client = server.available();
if (client) {
Serial.println(«new client»); // «новый клиент»
memset(linebuf,0,sizeof(linebuf));
charcount=0;
// HTTP-запрос заканчивается пустой строкой:
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// считываем HTTP-запрос, символ за символом:
linebuf[charcount]=c;
if (charcount<sizeof(linebuf)-1) charcount++;
// если вы дошли до конца строки (т.е. если получили
// символ новой строки), это значит,
// что HTTP-запрос завершен, и вы можете отправить ответ:
if (c == '\n' && currentLineIsBlank) {
dashboardPage(client);
break;
}
if (c == '\n') {
if (strstr(linebuf,«GET /relay1NC») > 0){
digitalWrite(RELAY, NC_RELAY);
RELAY1STATE = «NC»;
}
else if (strstr(linebuf,«GET /relay1NO») > 0){
digitalWrite(RELAY, NO_RELAY);
RELAY1STATE = «NO»;
}
// если получили символ новой строки…
currentLineIsBlank = true;
memset(linebuf,0,sizeof(linebuf));
charcount=0;
}
else if (c != '\r') {
// если получили какой-то другой символ…
currentLineIsBlank = false;
}
}
}
// даем веб-браузеру время на получение данных:
delay(1);
// закрываем соединение:
client.stop();
Serial.println(«client disonnected»); // «Клиент отключен»
}
}