【ラズパイで猫ちゃんカメラ】 その7 ラズパイ起動時にプログラムを自動起動する

前回 だいぶ日が空いてしまいましたが・・・ 前回はLINE NotifyのAPI制限を確認しました 今回 systemd で自動起動 ラズパイを起動してからプログラムを手動で実行するのは実用的じゃないですね ですので、ラズパイ起動時にプログラムを自動起動します 自動起動には systemd を使います こちらの記事を参照ください↓ systemd の良いところ ちょっと本旨とずれますが、プログラムがエラーで停止しても、systemdがサービスを再起動してくれます ラズパイ自体の再起動はcronでも良いですが、自作のプログラムはバグ取りが不十分なのでエラー停止でサービスを再起動してくれるのは助かります(エラー対策の話につながります) エラー対策 今回はLINEに送信するため、ネットワークを利用します 実際動かしてみて、wi-fi関連処理がうまく行かずエラー停止が結構ありました 自分ではどうしようもない問題でした また、USBが死ぬこともよくあり、これは再起動で復活しますので、定期再起動もサービスにしました 手動でプログラムを再実行できれば対策不要ですが、猫カメラは不在時に使用します なので、手動で再実行はできず、エラー対策は必須です 私も猫カメラ開発でエラー対策が必要だと痛感しました (カメラ止まった!猫の様子がわからない!どうしよう!は飼い主には耐えられないです) 実装の候補は以下2つ Python中にリトライ処理をいれる systemdが勝手に再起動してくれる ← こっちにした リトライ処理も実装してみましたが、よりお手軽な systemd にしました .service の作成 猫カメラなので、名前はnyancam.serviceにしました(何でもOKです) ここでは/lib以下に作っています(上の記事でもあるように、/etc以下に作る方法もあります) sudo nano /lib/systemd/system/nyancam.service nyancam.serviceの中身↓ [Unit] Description = test [Service] ExecStart=/usr/bin/python3 /home/pi/Desktop/nyancam.py Restart=always Type=simple [Install] WantedBy=multi-user.target ExecStart = XXXはプログラムの起動についての記述です /home/pi/Desktop/nyancam.pyをpython3で起動します Restart=alwaysでnayncam.pyがエラー時にサービスを再起動してくれます systemd コマンド sudo systemctl start nyancam.service <--- サービスを起動するコマンド sudo systemctl stop nyancam.service <--- サービスを停止するコマンド sudo systemctl enable nyancam....

2022/06/27 Â· Last updated on 2023/09/23 Â· 1 min Â· 164 words

ラズパイ(ubuntu 20.04.4 LTS)に Tailscale を構築

ラズパイにtailscaleを構築した。 tailscaleはWireGuard(VPN)を扱いやすくしたものである(ざっくり) 素のWireGuardも検討したが、マンション住まいのため、上位のルーターの構成が不明で、かつポートを開けたり(知識不足)を下手にやってセキュリティガバガバになるのは嫌だったのでtailscaleにした 環境 ラズパイ 3B+ ubuntu 20.04.4 LTS 32GBのSDカード Tailscale のアカウント作成 何はともあれ、まずはアカウントを作る 参考: https://blog.tsukumijima.net/article/tailscale-vpn/#toc3 githubアカウントでログインした その端末の認証鍵の有効期限を無効にすることができます。 → 無効化した ラズパイに構築する前に、SynologyのNAS(DS118)がTailscaleに対応していたので、先に入れてみた すぐにアクセスできた 簡単すぎてビビった ラズパイのセットアップ まず、OSをSDカードに書き込み 書き込みには Raspberry Pi Imager を使用 https://www.raspberrypi.com/software/ 空だけど、何となく erase してから書き込む こちらを参考(↓)にしてwolサーバとしたかったのでubuntuにした https://macoshita.me/posts/wi-fi-router-and-tailscale/ ubuntu はラズパイ 3B+ なので、32bit armhf lts安定版 とした 初回セットアップはこちら(↓)を参考 https://takaken.tokyo/dev/raspberrypi/raspi_ubuntu_setup2004/ 習って、rootパスワード変更まで実施 有線だけで使うため、無線LANは無し(コメントアウトした) Tailscale のインストール 参考: https://tailscale.com/download/linux/ubuntu-2004 tailscale ip -4 か ip addr show tailscale0 で、ipがわかる でもipアドレスはtailscaleのページ(https://login.tailscale.com/admin/machines)でわかるから、コマンドを打たなくてもいいか ラズパイを再起動して、tailscaleが自動起動することを確認した 確認は、上記のtailscaleのページでactive(緑色の丸)になっていることからわかる exitnode の設定 ずっと電源入れっぱなしにしても大丈夫なラズパイをexitnodeに設定する VPNを野良Wi-Fiをセキュアにするために使いたいなら exitnode の設定が必要 exitnode経由にしてなかった時は、接続先がいなくてもVPN接続ができていた おやっ、VPNって2拠点間を繋ぐものなのになんで接続ができて(VPNがactiveになる)るんだ?って思ってグローバルipを確認したら、VPN接続前後でグローバルipが変わってなかった...

2022/06/26 Â· Last updated on 2023/09/22 Â· 1 min Â· 123 words

ラズパイを WOLサーバ にする

こちらの記事で紹介したようにtailscaleを使ってラズパイをVPNサーバとして使っていますが、VPNできたら当然自宅NASにもアクセスしたくなりますよね でも、以前書いたようにNAS(DS118)は常時電源を入れていないので、使うときには起こす必要があります ですので、必要な時にNASを起こせるようにラズパイをwolサーバに仕立てます NAS(DS118)のwolを有効にする 使っているNAS↓ まず、NASがwol信号を受け付けられるように、wolを有効にします https://support.ask-corp.jp/hc/ja/articles/360051678474-Wake-on-LAN-を設定したい ラズパイに WOLサーバ を建てる 参考(大感謝!) 構成は Flask + uWSGI + Nginx となっています ラズパイのCPU温度とクロック周波数を追加していますが、すべてそのまま使わせていただきました 便利に使えており、大変感謝しております! 構築に関して、自分のつまずいた点などを書いています 出来上がり見た目↓ pip install -r requirements.txt のインストール方法 https://note.nkmk.me/python-pip-install-requirements/ 文字化けしたがインストールできたっぽい たぶんteratermの設定のせいで文字化けした 起動など ファイルは大体をPCで作って、FTPソフト(filezillaを使用)でラズパイに転送し、手直しはSSH接続して直接ファイルを弄った ubuntu@ubuntu:~$ pwd /home/ubuntu /home/ubuntu の下にファイルを作って配置する サービス起動 sudo systemctl start wakeonlan-server サービス自動起動(起動時) sudo systemctl enable wakeonlan-server 実行したのでbootで自動実行される サービスのステータス確認 sudo systemctl status wakeonlan-server active(running)になっているのでおけ プログラム(wol.py)のエラー箇所もわかる ValueError(“Incorrect MAC address format”) が出ていることがわかった たぶんwol.htmlから変数(MACアドレス)をwol.pyに渡す時におかしくなってるのだが、検証できなかった なので、MACアドレスを直書きすることにした(当面は同じNASしか使わないし) MACアドレスは:で区切る # wol.py 一部抜粋 def wol(): # addr = request....

2022/06/26 Â· Last updated on 2023/09/22 Â· 1 min Â· 113 words

HUGO robust に Google AdSense の広告を設定

自動広告 Google AdSense - 「広告」 - 「サマリー」 の 「サイトごと」タブ ドメイン名(atooshi-note.com)右横の鉛筆マーク(編集)をクリック 広告設定のプレビューが出るので、好みになるように調整 私は広告のフォーマットは「ページ内広告」のみにした 「コードを取得」を押してコードをコピー これ themes\hugo_theme_robust-master\layouts\partials\meta.html 場所変更↓(2022/09/08) layouts\partials\meta.html にそのまま貼り付ける 固定広告 固定広告も設定 Google AdSense - 「広告」 - 「サマリー」 の 「広告ユニットごと」タブ、「ディスプレイ広告」を選択 プレビューをみて広告タイプを決めたら作成してコードをコピー 広告を表示する場所は、記事の本文前後(参考サイトさんそのまま)とする コピーしたコードを以下に貼り付ける themes\hugo_theme_robust-master\layouts\_default\summary.html 場所変更↓(2022/09/08) layouts\_default\summary.html 参考 ありがとうございます! https://www.ame-kuma.com/post/site02/ ads.txt 以下のような注意がでましたので対策しました 要注意 - 収益に重大な影響が出ないよう、ads.txt ファイルの問題を修正してください。 ads.txt をダウンロードし、 static 以下に配置します 参考 ありがとうございます!

2022/06/25 Â· Last updated on 2023/09/22 Â· 1 min Â· 49 words

[Python]AmazonアソシエイトをHUGOブログに貼るのを少し簡単に

HUGOの記事にamazonアソシエイトリンクを貼る際に、取得したリンクを加工するのが面倒だったので、pythonで書きました tkinterでGUIにしています なんてことはない、中身は文字列を切って貼ってをしているだけです コマンドで起動するのは面倒なので、バッチファイルで起動するようにしています 作ろうとしているリンク こんな見た目 古風だけど自分はこれが好き 実際のリンクはこれ↓(リンク切れていたらスミマセン) 使い方 「Amazonアソシエイトツールバー」の「テキストと画像」タブを開いて、生成されたリンクをコピー(下画像の「これをコピー」部分) pythonプログラムを起動するとこれが現れる↓ コピーしたリンクをそのまま貼り付ける エンターキーを押すと、クリップボードにコピーされる 記事内に貼り付ける コピーされた文字列例↓(表示の都合上、先頭の{は全角になっていますが、実際は半角{です) {{< Amazon src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=アソシエイトID&language=ja_JP&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B088PGN64G&linkId=2ef7d1928670c9537cf1976fdc5a5b37" >}} クリアボタンを押すと消える 2回目以降は「クリップボードにコピーしました!」は消えないので注意 プログラム クリップボードを扱うライブラリー(pyclip)はインストールが必要です 表示の都合上、一部の{は全角になっていますが、実際は半角{です。使用の際は半角{に直してお使いください # -*- coding: utf-8 -*- """ アマゾンの商品リンクをhugoに貼る形に変換する エンターで変換 クリップボードにコピーされる """ import tkinter as tk import pyclip root = tk.Tk() root.geometry('500x90') root.title('Amazon affiリンク変換(hugo用)') def func(event): global label1 text1 = entry1.get() # amazon アソシエイトツールバー テキストと画像のリンク target = 'src="' # src="より後ろを抽出 idx = text1.find(target) r = text1[idx + len(target):] r = r[:-10] # 後ろの ></iframe> を削除 r = 'src="' + str(r) # 整形 r = '{{< Amazon ' + r + ' >}}' # 整形 pyclip....

2022/06/23 Â· Last updated on 2023/09/23 Â· 1 min Â· 135 words