工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

Wi-Fiの自動再接続スクリプト

概要


Raspberry Piで、Wi-Fiの接続が切れたときに自動で再接続するスクリプトを作成した。


背景と目的


自宅で使っているRaspberryPiのWi-Fi接続が、電波状況が悪いのかよく切れるので、切れたら自動で再接続するように、簡単なスクリプトを組む。


詳細


0. 参考

1. NetworkManger

NetworkManagerを使いたいので、インストールと設定をする。

1.1 インストール

sudo apt-get install -y network-manager

1.2 設定

/etc/NetworkManager/NetworkManger.confの設定

以下を変更

[ifupdown]
managed=true

/etc/network/interfacesの設定

以下を追記

auto wlan0
iface wlan0 inet dhcp

1.3 再起動

sudo reboot


2. 自動再接続スクリプト

スクリプトを作成して、デーモン化する。

2.1 ソースコード

  • wifi_auto_reconnect.sh
    • nmcli connection show でIP4.ADDRESSという項目が出力されなければ切れているとみなして再接続する。
#!/bin/bash

CONNECTION=$1 #接続名
INTERVAL=$2 # チェック周期[sec]
WAIT=$3 # 起動時待ち時間[sec]

echo "connection=$CONNECTION"
echo "INTERVAL=$INTERVAL sec"

# 起動時待ち時間
# すぐに動かしたくないので適宜入れる
echo "waiting $WAIT sec..."
sleep $WAIT

# 繰り返し
while true
do

    # IPアドレスを取得
    x=`nmcli c show $CONNECTION | grep IP4.ADDRESS`

    if [ "$x" == "" ]; then
        # IPアドレスが空なら接続されていないので接続
        nmcli c up $CONNECTION
    fi

    # 待つ
    sleep $INTERVAL

done

2.2 デーモン化

  • wifi_auto_reconnect.service
    • 開始時のチェック開始待ちは3分。チェック周期は60秒。
[Unit]
Description=Wi-FiAutoReconnectDaemon
After=NetworkManager-wait-online.target

[Service]
Type=simple
ExecStart=/home/pi/wifi_auto_reconnect.sh 接続名 60 180

[Install]
WantedBy=multi-user.target

実行権限を追加

sudo chmod 755 ./wifi_auto_reconnect.sh

配置

sudo cp ./wifi_auto_reconnect.service /etc/systemd/system

有効化

sudo systemctl enable wifi_auto_reconnect

開始

sudo systemctl start wifi_auto_reconnect


まとめと今後の課題


これで、とりあえず切れても復帰してくれそう。

リーディングサイアーランキング回顧

  • 2022年

dekuo-03.hatenablog.jp

  • 2021年

dekuo-03.hatenablog.jp

  • 2020年

dekuo-03.hatenablog.jp

  • 2019年

    • サボり
  • 2018年

    • サボり
  • 2017年

    • サボり
  • 2016年

blog.livedoor.jp

  • 2015年

blog.livedoor.jp

  • 2014年

blog.livedoor.jp

  • 2013年

blog.livedoor.jp

  • 2012年

blog.livedoor.jp

  • 2011年

blog.livedoor.jp

  • 2010年

blog.livedoor.jp

Pythonでコーディングしてクラウドシステムの構成図が描けるDiagramsを試した

概要


Pythonでコーディングしてクラウドシステムの構成図が描けるDiagramsを試してみた。


背景と目的


半年前ぐらいに、Pythonでコーディングしてクラウドシステムの構成図が描けるDiagramsというものがあるのを知った。

dev.classmethod.jp

しかし、なかなか余裕がなく試す機会がなかった。年末年始休みで少し余裕ができたので、試しに使ってみる。


詳細


0. 参考情報

1. インストール

私の環境は、Windows10。

1.1 Diagramsのインストール

本家ドキュメントに従い、pipでインストール。

pip install diagrams

1.2 Graphvizのインストール

次に、Graphvizhttps://www.graphviz.org/download/からダウンロードして、

C:\

に配置。そして、ユーザー環境変数のPathに、以下を追加。

C:\Graphviz\bin


2. 描いてみる

とりあえず、簡単なシステム図を書いてみる。コードは以下。

# coding: utf-8

from diagrams import Diagram, Cluster
from diagrams.aws.compute import Lambda
from diagrams.aws.storage import S3
from diagrams.aws.network import APIGateway
from diagrams.aws.integration import Eventbridge
from diagrams.generic.device import Mobile

with Diagram('クラウドシステム'):

    client = Mobile("クライアントアプリ")

    with Cluster("AWS"):

        api = APIGateway("sampleapi")

        evn = Eventbridge("タイマー\nsample_event")

        client >> api

        with Cluster("Lambda"):
            
            lmb1 = Lambda("メイン処理の関数\nlambda_main")
            lmb2 = Lambda("バックアップ処理の関数\nlambda_backup")

            api >> lmb1
            evn >> lmb2

        with Cluster('samplebucket'):

            with Cluster("SampleDirectory"):
    
                total = S3("sample1.json")
                records = S3("sample2.json")
                budget = S3("sample3.json")

                with Cluster("backup"):

                    datelog = S3("{%Y-%m-%d}/")

                    lmb2 >> datelog

                lmb1 >> [records, total, budget]
                lmb2 >> [records, total, budget]

出力結果が以下。コンポーネントの配置、線のつながりとも、いい感じに出力できている。

f:id:dekuo-03:20210101133011p:plain

3. 解像度を調整する

2で描いたものは解像度がずいぶん低い。これをどうにかできないかと調べたところ、Diagramコンテキストを宣言する際に、Graphvizのオプションのdpiを与えることで調整できることが分かった。以下のように、graph_attrという引数で与える。

graph_attr = {
    "dpi": "192"
}

with Diagram('クラウドシステム', graph_attr=graph_attr):

改めて出力した結果が以下。解像度が上がってきれいになっている。

f:id:dekuo-03:20210101133015p:plain


まとめと今後の課題


コードでキチっと描けるのはとても気持ちいい。これからどんどん使っていきたいと思った。