Йа сделяль!
Jun. 30th, 2023 04:13 pmТаки сотворил адского монстра - сетевое управление GPIO на Raspberry Pi. Условно делю гребенку пополам: нечетные номера — выходы, четные — входы. Каждому выходу соответствует определенный вход, что конфигурируется парой массивов в исходниках. Как только состояние входа изменяется, сервер отсылает всем клиентам "UPxx" или "DOWNxx" (смотря на то, была кнопка отпущена или нажата). Аналогично делает клиент - отсылает серверу те же сообщения.
Если же клиент или сервер получают эти сообщения, по таблице ищется соответствующая выходная нога. Если она находится, партнеру отправляется ответ "OK" и нога меняет свое состояние (UP - нуль, DOWN - 1). Если возникает ошибка, отправляется ответ "FAIL".
Соответственно, жамкнул вахтер кнопку - релюшка включилась. Отпустил - выключилась... Ну и в ответку могут присылаться всякие вещи, чтобы светодиодиками мигать и пищалкой пищать.
Сервер разворачиваем на одноплатнике со стороны шлагбаума, клиент - в "коробочке" с кнопками у вахтера. Заодно можно будет дистанционно открывать/закрывать, вызывая клиента с ключами -C "команда" (это можно делать с любого компьютера).
Жаль, правда, что "малинка" - такая тормозная. SSL-рукопожатие у нее спокойно может аж 2 секунды длиться! Я поначалу даже не понял, почему отваливается соединение с ошибкой: а это из-за того, что я таймаут в 0.1с установил. Повысил его до 10с.
Простой баш-скрипт генерирует мастер-сертификат и сертификаты для клиента и сервера. И клиент, и сервер проверяют оба сертификата. Хотя, конечно, можно было бы так не заморачиваться, а использовать libssh…
Если же клиент или сервер получают эти сообщения, по таблице ищется соответствующая выходная нога. Если она находится, партнеру отправляется ответ "OK" и нога меняет свое состояние (UP - нуль, DOWN - 1). Если возникает ошибка, отправляется ответ "FAIL".
Соответственно, жамкнул вахтер кнопку - релюшка включилась. Отпустил - выключилась... Ну и в ответку могут присылаться всякие вещи, чтобы светодиодиками мигать и пищалкой пищать.
Сервер разворачиваем на одноплатнике со стороны шлагбаума, клиент - в "коробочке" с кнопками у вахтера. Заодно можно будет дистанционно открывать/закрывать, вызывая клиента с ключами -C "команда" (это можно делать с любого компьютера).
Жаль, правда, что "малинка" - такая тормозная. SSL-рукопожатие у нее спокойно может аж 2 секунды длиться! Я поначалу даже не понял, почему отваливается соединение с ошибкой: а это из-за того, что я таймаут в 0.1с установил. Повысил его до 10с.
Простой баш-скрипт генерирует мастер-сертификат и сертификаты для клиента и сервера. И клиент, и сервер проверяют оба сертификата. Хотя, конечно, можно было бы так не заморачиваться, а использовать libssh…