17.03.2021

GPIO

 Если ты начнёшь гуглить, как добраться до пинов Кубика? то тебя ждут крекс-пекс-фекс. И не делай это с собой. Но если ты всё же решишься на это колдунство, то тебе придётся гуглить, почему в Armbian нету соответствующих ингридиентов? И так ты попадёшь в зазеркалье. Астанавись! Лучше делай так

1. Подключись к пину (кликабельно)


2. Найди его в таблице - https://linux-sunxi.org/A20/PIO

Предположим, это будет PG09 (201)

3. Проверяемся. Берём английский алфавит и калькулятор, подсчитываем номер пина по формуле: (G-1)*32+9=201, где G - порядковый номер этого символа в алфавите. Получилось значение, как в таблице? Отлично! Теперь PG09 мы отныне будем звать 201


 

 4. Пишем скрипты

#!/bin/bash
# PG9 - (G-1)*32+9=201

PIN=$1	# 201
PIN_STRING="gpio$PIN"

# Выведем красиво пин, с которым будем работать
echo -e "\033[0;32m"	# Зелёненьким
echo -e "\n"
echo $PIN - $PIN_STRING
echo -e "\n"
tput sgr0	# Вернуть настройки терминала

# Активация пина
echo $PIN > /sys/class/gpio/export
# Проверка
ls /sys/class/gpio/
# Инициализация направления пина
echo out > /sys/class/gpio/$PIN_STRING/direction
# Прочитать пин
cat /sys/class/gpio/$PIN_STRING/value
# Установить пин
echo 1 > /sys/class/gpio/$PIN_STRING/value
# Проверить пин
cat /sys/class/gpio/$PIN_STRING/value
5. Что творится у нас по пинам?
gpiodetect
gpioinfo | grep "\[used\]"
И в качестве бонуса запрограммируем светодиоды. Сначала узнаем, какие есть триггеры. Далее задаём триггер светодиоду. В примере камень и флешка.
# All Trigers
cat /sys/class/leds/cubieboard2:blue:usr/trigger
# Set Blue LED
echo cpu > /sys/class/leds/cubieboard2:blue:usr/trigger
# Set Green LED
echo mmc0 > /sys/class/leds/cubieboard2:green:usr/trigger

16.03.2021

Port Forwarding -> VPN

 Были времена, когда на Белтелекомовском домашнем роутере можно было сделать проброс портов, придти на работу и попасть по сети домой с использованием DynDNS. Это было давно и уже не правда. Сейчас всё за NAT-ами. Проброс на роутере совсем не актуален для домашнего использования. 

Мой Кубик на данный момент является точкой доступа из сети к домашним устройствам. Схема проста. 

  1. На Кубике поднят VPN (Hamachi).
  2. На кубике сделан проброс портов iptables. 

Эта тема более актуальна для специфических протоколов, так как для проброса HTTP из сети через кубик на домашнее устройство можно обойтись Webmin. Да у него есть такая возможность - редирект в домашней сети и прячется во вкладке HTTP Tunnel.

Если надо попасть в SSH или заходить на Webmin неудобно, то применим колдунство iptables

Однако, давай по порядку. Сначала VPN.



#!/bin/bash
E_MAIL=$1

# https://www.vpn.net/linux
wget https://www.vpn.net/installers/logmein-hamachi_2.1.0.203-1_armhf.deb
dpkg -i logmein-hamachi_2.1.0.203-1_armhf.deb
hamachi login
hamachi attach E_MAIL

Проще, наверное, и не бывает. Регистрируешься, смотришь версию, устанавливаешь, в webe подключаешь свои точки к сети и делаешь прочие настройки. Теперь твои устройства связаны в своей собственной сети. Бесплатный тариф ограничен пятью точками. Но ко всей домашней локальной сети можно достучаться с Кубика при поднятом Hamachi только на нём. Для удобства делаем проброс порта.

Сервер - это девайс в локальной сети, к которому мы стучимся из VPN (192.168.100.15).

Шлюз - это Кубик.

Неправильный порт - порт, по которому из VPN мы получим доступ к девайсу (90).

#!/bin/bash
EXT_IP="xxx.xxx.xxx.xxx" # внешний VPN, реальный IP-адрес шлюза 
INT_IP="xxx.xxx.xxx.xxx" # реальный IP-адрес шлюза в локальной сети
EXT_IF=ham0 # Внешний и внутренний интерфейсы.
INT_IF=eth0 # Для шлюза они вряд ли изменятся, поэтому можно прописать вручную.
FAKE_PORT=$1  # Вначале передаём скрипту "неправильный" порт на внешнем интерфейсе,
LAN_IP=$2     # затем - локальный адрес сервера
SRV_PORT=$3   # и в конце - реальный порт для подключения к серверу

iptables -t nat -A PREROUTING -d $EXT_IP -p tcp -m tcp --dport $FAKE_PORT -j DNAT --to-destination $LAN_IP:$SRV_PORT
iptables -t nat -A POSTROUTING -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT -d $EXT_IP -p tcp -m tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT

Пример использования скрипта

port_forward.sh 90 192.168.100.15 80
Теперь, если мы постучимся в кубик по его VPN-адресу на порт 90, то мы попадём на 80-ый порт по адресу в локальной сети 192.168.100.15

Это колдунство взято из этой статьи - Проброс и перенаправление портов в iptables 

Сохранить таблицы и восстановить после пеерзагрузки:

apt-get install iptables-persistent
systemctl enable netfilter-persistent
iptables-save > /etc/iptables/rules.v4

Motion Eye



 

Есть замечательная обёртка на Python для Motion - MotionEye.

# Эти ребята замутили даже дистрибутив - MotionEyeOS

В Wiki установка расписана уже с установкой самого Motion. Больше никакого колдовства для Motion не потребуется, всё остальное мышкой через web-интерфейс. Совушка уже сама будет запускать демона с заботливо подготовленным конфигом, который будет лежать здесь - /etc/motioneye/motion.conf

На данный момент у меня Armbian Focal и установка по мануалу для Ubuntu. Стоит отметить, что MotionEye не запускается под Python3, только Python2.

Соберу в удобное для себя с некоторыми актуальными правками и b

apt-get install ssh curl motion ffmpeg v4l-utils -y
# reboot
apt-get install python2 -y
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python2 get-pip.py
apt-get install libffi-dev libzbar-dev libzbar0 -y
apt-get install python2-dev libssl-dev libcurl4-openssl-dev libjpeg-dev -y
apt-get install python-pil -y
pip2 install motioneye

# Default config
mkdir -p /etc/motioneye
cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf

# Work Dir - Yandex.Disk
# mkdir -p /mnt/ya.disk

# autostart
cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
systemctl daemon-reload
systemctl enable motioneye
systemctl start motioneye

# check
netstat -tulpn | grep :8765 

# update
pip2 install motioneye --upgrade
systemctl restart motioneye

 

 

В MotionEye встроена уже загрузка фото/видео в некоторые облака и работа по добавлению новых сервисов ведётся... Ну а я добавлю ЯндексДиск.

apt install davfs2
mkdir /mnt/ya.disk
chmod -R 777 /mnt/ya.disk
usermod -aG davfs2 user

# Сохранить пароль для автостарта
nano /etc/davfs2/secrets    
# https://webdav.yandex.ru login password

# Монтирование диска
nano /etc/fstab             
# webdaveu.yandex.ru /mnt/ya.disk davfs users,rw,_netdev 0 0

# При поднятии сети примонтировать (на всякий случай)
nano /etc/network/if-up.d/yadisk_mount
#   #! /bin/sh
#   mount -a
chmod +x /etc/network/if-up.d/yadisk_mount

mount -a
# check
df -h | grep /mnt
ls /mnt/ya.disk

 

 

Добавим уведомление на почту. 

Первым делом идём сюда и включаем доступ для ненадёжных приложений. Далее забиваем поля в соответствующей вкладке.

  • SMTP Server: smtp.gmail.com
  • SMTP Port: 587
  • TLS: ON