generated at
UDP をブロードキャストするサービスを作る
UDP39390UDP39391 のようなものを作る。

UDP の受信方法
動作確認で必要なので覚えておこう。
一度だけ受信したい人は
$ nc -ul 39391
で十分、socat 不要。 nc -ulk 39391 だとずっと Listen できる。

sh
sudo apt install socat sudo socat -T 1 -u UDP-LISTEN:39390,fork STDOUT

UDP をブロードキャストするプログラム
python を使うと簡単に作れる。socket モジュールそのまま使うだけ便利

python -m venv .venv で仮想環境を作ってね( .venv/bin/activate でアクティベートを忘れずに )。

main.py
import socket HOST_NAME = '' PORT = 39391 host = socket.gethostname() #udp通信を使いたいので、SOCK_DGRAM sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #ブロードキャスト sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #データ送信 message = message.encode("utf-8") sock.sendto(message, (HOST_NAME, PORT)) sock.close()

定期実行の仕組み
systemd.timer を使う。Unit で service を指定する。 [Timer] で 30s ごとに値を入れる
/etc/systemd/system/udp3939x.timer
# /etc/systemd/system/udp3939x.timer [Unit] Description=udp3939x [Timer] OnBootSec=30s OnUnitActiveSec=30s Unit=udp3939x.service [Install] WantedBy=timers.target

Unit の設定
/etc/systemd/system/udp3939x.service
# /etc/systemd/system/udp3939x.service [Unit] Description=udp3939x [Service] Type=oneshot User=pi Group=pi WorkingDirectory=/home/pi/workspace/mikumiku ExecStart=/home/pi/workspace/mikumiku/.venv/bin/python ./main.py [Install] WantedBy=multi-user.target

実行してみよう
sh
sudo systemctl start udp3939x.service
エラーがでなければOK。
エラーが出たら次のコマンドでエラーを見よう!
sh
sudo journalctl -u udp3939x.service

udp3939x.service のファイルに間違いがあるようなら、次のコマンドでエラーを確認しよう。
sh
sudo systemctl status udp3939x.service


定期実行させる
sh
sudo systemctl enable udp3939x.service sudo systemctl enable udp3939x.timer

UDP の受信方法 の方法をみて受信できるか見てみよう!