Zn: строим простой ретранслятор

Totoro 2017-02-13   4 минуты на чтение

Иногда случается такое, что ваши компьютеры расположены на расстоянии большем, чем стандартные 400 блоков. Wi-Fi отказал, а вам надо связать компьютеры по сети.

Какие тут есть варианты?

  1. Повысить лимит в конфиге.
    Это просто, но не всегда возможно.

  2. Использовать linked карту.
    С её помощью можно пробить любое расстояние, да.
    Но тут есть несколько своих проблем. Она связывает компьютеры только попарно. Для связи нескольких компьютеров надо уже делать сложную систему проброса сообщений.
    Она занимает дополнительный слот. И т.п.

  3. Использовать цепочку Wi-Fi карт
    Казалось бы, чем это проще второго варианта?
    А проще оно тем, что тут есть уже готовые библиотеки. =)

Интермедия

Когда-то в стародавние времена, когда трава была зеленее и птички пели громче, собралась на нашем сервере компания крутых парней и написала OpenNet.
Это была полноценная компьютерная сеть. Этакий местный интернет. Она обладала своей строгой и надёжной топологией. Каждый узел - своим местом и адресом в сети.

Никакой анархии. Хочешь - в чатике общайся. Хочешь - сайты строй.

К сожалению, исходники и гайды до сих пор разбросаны по частям по всему форуму. Чтобы собрать это снова вместе, потребуется немало усилий.
Да и зачем нам поднимать полноценный "интернет", если всё, чего мы хотим - это пробросить парочку сообщений туда-сюда?

Поэтому в более новые и не такие добрые времена (птички потише, трава потускнее), некто Totoro и fingercomp придумали систему попроще и погибче.

И назвали её Zn.

Приступаем к решению

Итак, как нам связать Васю и Олю, которые живут на противоположных краях Земного Блина?

1) Через микроконтроллёр

Самое дешёвое в плане ресурсов решение - собрать микроконтроллёр, прошить его и закопать где-нибудь в лесу на полпути между Васей и Олей.

Сначала нам потребуется код прошивки. Он идёт в комплекте с Zn библиотекой. Как цивилизованные современные люди, мы скачаем её с Hel-репозитория:

hpm install zn

Теперь в папке /usr/share/zn/ у нас есть файлик eeprom.lua. Который мы и прошиваем на чистый EEPROM:

flash -q /usr/share/zn/eeprom.lua "Zn node"

Всё. Осталось вставить чип в контроллер, включить его и закопать.

Сеть создана!

2) Через компьютер

Более солидное и основательное решение. Строим в лесу будку. В будке ставим компьютер. На компьютер устанавливаем OpenOS и HPM (если он не идёт в комплекте).
Снова качаем библиотеку:

hpm install zn

Создаём мини скрипт:

edit node.lua

Пишем в нём такой код:

(require ('zn')).connect()

Сохраняем, выходим, запускаем его:

node

Всё! Скрипт выполнится и завершится, а в фоновом режиме останется работать демон Zn-сети, который будет пробрасывать сообщения.

По желанию можно сделать скрипт более сложным - например выводить на экран сетевой трафик и другую полезную инфу.
Также можно добавить скрипт в автозапуск компьютера, чтобы даже неожиданные сбои питания (белка залезла в трансформатор) не смогли повалить сеть.

Эти два варианта обладают некоторыми недостатком, конечно.
Чтобы ретранслятор работал автономно, надо ставить чанклодер и источник энергии. Однако, в силу своей гибкости, Zn сеть можно организовать и по другому.
Поднять, так сказать, "лайт версию" ретранслятора.

3) Через планшет

Устанавливаем на планшет OpenOS и ставим библиотеку и скрипт по методике #2. Далее, вручаем планшет соседу Пете и забиваем ему стрелку в том самом лесу.
На протяжении X минут (где X зависит от терпения Пети) у вас будет полноценная сеть!

Игрок будет служить чанклодером, а батарея планшета источником питания.

4) Через робота

Строим робота, устанавливаем скрипт по методике #2. Затем ставим робота где-нибудь в незаметном месте (можно спрятать в кроне дерева, так чтобы свет солнца падал на солнечную батарею).
Всё, мобильный ретранслятор готов.

Если чанклодеры к роботам разрешены, он может существовать автономно долгое время, питаясь солнечной энергией.

5) Через дрон

Прошиваете EEPROM как для микроконтроллёра, заряжаете в дрона. Дрона запускаете в свободный полёт над лесом. Готово! Хотя чанклодер всё равно нужен. Так что вам наверное придётся пастись где-то рядом.

Этот вариант самый сложный, потому что если вы хотите управлять дроном (например, с планшета) то вам потребуется модифицировать прошивку и добавить блок управления.

Зато запустив 1000 дронов, вы можете почувствовать себя Илоном Маском, или Цукербергом, раздающим Интернет папуасам.

А как теперь этой сетью пользоваться?

Все просто. Это делается почти как с обычным модемом.
Только вместо модема вы используете библиотеку Zn.

Если вы знаете адрес модема адресата - можете послать сообщение прямо на него. И не важно, через сколько промежуточных узлов оно должно будет пройти. До тех пор пока адресат в радиусе досягаемости хотя бы одного узла вашей сети - он ваше сообщение получит.

-- подключаем библиотеку
local zn = require('zn')

-- коннектимся к сети
zn.connect()

-- посылаем Оле сообщение
zn.send("адрес модема Оли", "сообщение для Оли")

-- при завершении программы не забываем закрыть коннект
-- (можно и не закрывать, но зачем тратить ресурсы компа зазря)
zn.disconnect()

Ну а если адресат неизвестен, можно кинуть сообщение бродкастом.
Тогда его получат все, кто подключен к сети. И адресат, конечно тоже.

local zn = require('zn')

zn.connect()

-- посылаем сообщение всем, кто подключён к сети (Оле в том числе)
zn.broadcast("сообщение для Оли")

zn.disconnect()

Удачи в построении своих сетей.

Enjoy Zn!