【ラズパイで猫ちゃんカメラ】 その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

【ラズパイで猫ちゃんカメラ】その6 LINE NotifyのAPI制限を確認する

前回 前回はpythonで定期的な動作を実装しました。 これで例えば10分毎に撮影し、画像をLINEすることができます。 今回 LINE NotifyのAPI制限を確認します。 画像のアップロード枚数制限やAPIのコール回数制限があります。 テストで画像を送りまくっていると制限にかかり、送れなくなります。 突然送れなくなるので、注意が必要です。 APIコール回数は1000回ですのでそうそう消費しないと思います。 ですが、画像のアップロード枚数制限は50枚(1時間あたり)です。 案外すぐ達してしまうのでモニターすることをオススメします。 ドキュメントのAPI Rate Limitに記載があります。 各サービスごとに1時間にAPIをcallできる回数の上限が設定されています。 デフォルトは1000回に設定されています。 上限はaccess tokenごとに設定されています。 API Rate Limitのstatusは、APIの以下のresponse headerで確認することができます。 API Rate Limitの確認方法 こちらを参考にさせていただきました。ありがとうございます(^^) # line-notify-limit.py import requests token = 'あなたの取得したトークン' api = 'https://notify-api.line.me/api/notify' message = '\n\nLIMIT CHECK' headers = {'Authorization': 'Bearer'+' '+token} data = {'message': message} resp = requests.post(api,headers=headers,data=data) print(message) # APIコール残 ratelimit = resp.headers.get("X-RateLimit-Limit") # max API call ratelimit_remaining = resp.headers.get("X-RateLimit-Remaining") # API call remaining print('API call remaining : {} / {}'....

2021/10/19 · Last updated on 2023/09/23 · 1 min · 131 words

【ラズパイで猫ちゃんカメラ】 その5 10分毎撮影しLINEに送信する【python】

前回、LINE Notifyを使って簡単に画像を送ることができました。次は、定期的にLINEに画像を送る下準備として、定期的に動作させる方法を考えてみたいと思います。 pythonでプログラムを書いていきます(^o^) 構想だけ(というか実装できる気がしない) こちらの記事を参考にして、10分ごとに写真を撮り、前回写真と差分があればLINEする というのも考えました 送る画像を減らせてAPIの節約になることと、猫の動きがわかるメリットがありますが、日暮れで暗くなった場合にしきい値が変わるので誤って撮ってしまいそうでした ですので、実装やめました(てかできない) なので、変化ありなしに関わらず、10分ごとに写真を撮ってLINEすることにします time.sleep()はイマイチ イマイチというのは、今回の用途には合わないということです 真っ先に思いつくsleepは例えば10分止める場合は以下のように書けます import time time.sleep(600) # 600秒(=10分)スリープ イマイチなところは、処理を止めてしまうのでその間に他のことができなくなってしまうことです お安いWEBカメラ 10分スリープして、直後に撮影をすると画像が真っ暗になりました お安いWEBカメラにはシャッター時間を長くとって明るさを確保しないと画像が暗いということがよくあるようですが、私の数年前のWEBカメラも漏れずそんな感じみたいです 撮影する少し前に起動して、明るくなったら撮影する必要があります というわけでsleepは却下〜 起動処理は以下記事内にあるこの文↓ ret, frame = capture.read() タイマー割り込み? → 無い😇 別の方法としてタイマー割り込みを考えてみます 割り込みであればメインループでカメラを起動しておき、時間が来たら割り込みの処理を実行する(撮影する)ため明るさの問題は回避できそうです 10分毎に割り込み処理が入るようにすれば、10分毎の動作が可能です し・か・し どうやらラズパイにはタイマー割り込みがない模様・・・(pythonで書く場合) こちら↓の方が質問をされています 残念〜 python以外(Cとか?)で制御するならできなくは無さそうですが、敷居はとっても高そうです 割り込みはありますが、外部入力でGPIOに変化があったことをトリガーにする動作なのでタイマー割り込みではありません メインループ内で時間を測る 割り込みが使えないので、正確な時間は測れ無さそうです ですが、10分毎に動作のように分オーダーの時間であれば数秒程度の誤差なら全く問題にならなそうです というわけで、メインループ内で時間を測ることにしました import time old = time.time() # 現在時刻取得(sec) while(True): # main loop time0 = time.time() # 現在時刻取得 delta = time0 - old # 差分 if delta > 600: # 差が600sec(=10分)以上だったら print(delta) # 確認 old = time0 # 古い値を保持 はじめにoldに現在時刻を取得して格納します...

2021/10/05 · Last updated on 2023/09/23 · 1 min · 90 words

【ラズパイで猫ちゃんカメラ】 その4 ラズパイからPythonでLINEする(メッセージ、画像)LINE Notify

前回、Twitterのデベロッパーは却下されてしまったので別の方法を模索する中、LINE Notifyを使ってみることにしました。 こちらはAPI取得が楽ちんです。 自分のLINEや、LINEグループに画像を送るだけの今回のような用途には、こちらの方が適しているかもしれませんね! トークンの取得 こちらでトークンを取得します iPhoneからだとアクセストーン発行ボタンが見えませんでしたが、デスクトップモードにしたら見えました ご注意ください(^^) ドキュメントを見ると、トークンは一人当たり100個までのようです まずはメッセージを送ってみる【Python】 まずはメッセージだけを送ってみたいと思います プログラムはこれだけ↓ import requests token = 'あなたの取得したトークン' api = 'https://notify-api.line.me/api/notify' message = 'Hello!! message check!!' # 辞書型で記載 headers = {'Authorization': 'Bearer'+' '+token} data = {'message': message} requests.post(api,headers=headers,data=data) たったこれだけでメッセージが送信できてしまいます 「あなたの取得したトークン」と書かれているところに、取得したトークンを記載します 本当は、トークンはOSの環境変数において読み込んだほうが良いらしいですが、ここではしません(以下参照) 次に画像を送ってみる【Python】 カメラ画像を送りたいので、これが本来の目的です jpeg画像を用意して、以下のプログラムを実行すればLINEに画像を送ることができます ここでは、ラズパイのデスクトップにtest.jpegという画像データをおいて、それを送信します 画像だけを送ることはできないようです(メッセージとセットで送る) import requests token = 'あなたの取得したトークン' api = 'https://notify-api.line.me/api/notify' images = '/home/pi/Desktop/test.jpeg' # 画像のフルパスを記載 形式はjpgかjpegかpng message = 'Send image!!' # 辞書型で記載 headers = {'Authorization': 'Bearer'+' '+token} data = {'message': message} files = {'imageFile': open(images,'rb')} # バイナリ形式(テキスト以外) requests....

2021/09/15 · Last updated on 2023/09/23 · 1 min · 97 words

【ラズパイで猫ちゃんカメラ】 その3 Twitterのデベロッパー申請【却下😢】

前回、twythonが入っていることは確認したので、今回はtwitterのデベロッパー申請をします。 twitter APIを使用するために必要です。 で・す・が! 却下されました😢 ググると、簡単に通った方と落ちている方の両方が散見されますが、一応記録として残しておきます・・・ 申請には以下を参考にさせていただきました(^^) 時系列 09/09 アカウントを新規作成(猫ちゃんカメラ用)、デベロッパー申請 09/09 23:49 review中 09/10 02:58 追加情報くれ(これは前情報通り) 09/10 11:54 返信 09/10 22:03 更に追加情報くれ 09/11 00:26 返信 09/11 03:57 却下 Account Application Not Approved 追加情報をくれというメールが2回来ました Twitterからの返信レスポンスはよく、夜に返信すればその夜中に帰ってきました(時差) review中 申請するとすぐこんなメールが来ました 追加情報くれ 申請時の英作文(200文字)ではよくわからなかったから、もうちょっと詳しく教えて的なメールが来ました (そもそもその英作文も英語で書く必要が無いとの意見も!?) だいたい内容的には、こんな感じ APIを使う目的は? どうやって分析するか? ツイートとかする場合、どうやって共有する? 公開するなら、どうやってやる? それを踏まえて以下のように返信しました APIを使う目的は? 防犯カメラを作りたい。そのためにAPIが必要(ざっくり)※猫ちゃんカメラじゃなくて防犯カメラとしています(似たようなもんなので) どうやって分析するか? 分析しない ツイートとかする場合、どうやって共有する? 使わない 公開するなら、どうやってやる? 公開しない さらに追加情報くれ さらに、よくわからないからもっと教えてとメールが来ました 下の方には太字で、「必要な情報が得られないと受け入れられません!!!」とあります👅 質問内容は更に詳しく説明されている感じです 1つ目の問に対しては、内容は最初の返信とさほど変わりませんが、文言を変えてより詳しく説明しています(すべてgoogle翻訳!) 3つ目の「ツイートする?」の問いには、画像を自動でアップロード(ツイート)します、としました(最初の返信と回答を変えました←まずかったかな・・・) そして却下へ〜 Account Application Not Approved😢 ああ、すぐに来ましたよ Not Approved ああ、厳しいものよ 今更思いますが、向こうの聞きたかったことと返信したことがすれ違っていたのかもしれませんね(泣) はっきりしたことは不明なのですが、同じアカウントで再申請はできないっぽいです(やる気が出ないw)...

2021/09/11 · Last updated on 2023/09/23 · 1 min · 73 words