にゃんCAM再構築

ことの経緯 以前、raspberry piにて猫カメラ(にゃんCAM)を構築しました。 普段はTapoを使っていたので全然出番が無かったのですが、久々に起動しようとしたら起動を繰り返す変な動作をしていました(デスクトップ表示→左上にアンダーバー点滅→再起動の繰り返し) 直そうと適当にやっていたらSDカードを割ってしまいました(物理的に)。 というわけで、再構築しようとしたのですが環境が変わってつまずいたので新たに記事にしました。 教訓 SDカードは色んな意味ですぐ死ぬ。クローンを作っておくこと ハード raspberry pi 3B(3B+ではない) 32GBのSDカード 5.1V出力のACアダプタ これはlow voltage errorの対策です 機能、ファイルの置き場など OpenCVでUSBカメラ(webカメラ等)2台を制御し、30分ごとにLINEで撮影画像を送信します 2台用でプログラムを書いてあるため、2台以外(1台or3台〜)ではプログラムがエラーになり、動作しません。(具体的にはプログラムエラー→再起動のループ)) 1台分にコメントアウトすれば1台でも動作します saikidou.serviceとsaikidou.timerによってラズパイを定期再起動させますが、ラズパイの安定性向上やUSBが死んでカメラが認識しなくなることが偶にあり、それを復帰させるために実施します USBが死ぬ(例えば、カメラが1台しか繋がってないような状態になります)と上記した通りnyancam.pyがエラーになり、nyancam.serviceによってプログラムの再起動を繰り返しますが、少なくとも定期再起動のタイミング(6時間ごと)で復帰するため長期にカメラが機能しなくなることはなくなります 死亡したときはプログラムの再起動が繰り返されるため、USBカメラのLEDが点滅します(LEDは撮影時に点灯) ラズパイのそばで対応できるなら再起動を待たずともUSBの抜き差しで再認識します(USBが復帰し、nyancam.serviceによる再起動でカメラが2台認識します) GPIO26に接続したスイッチを単押しするとテスト撮影、5秒以上長押しするとラズパイをシャットダウンします Filename Path Note nyancam.py /home/USERNAME/Desktop/ プログラム本体 nyancam.service /lib/systemd/system/ nyancam.pyを自動起動する エラー時にnyancam.pyを再起動する saikidou.service /lib/systemd/system/ ラズパイを定期再起動する saikidou.timer lib/systemd/system/ saikidou.serviceとセット githubにあげてあります プログラムの実行結果 nyancam.pyを実行した結果例を載せます カメラ検索でワーニングが出ますが、動作に問題ないためそのままにしています。 camera number 0 Find! [ WARN:0] global /tmp/pip-wheel-a8gfdc_n/opencv-python_13563f08137a4b20bc4dfee05bcbf854/opencv/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video1): can't open camera by index camera number 1 None camera number 2 Find! [ WARN:0] global /tmp/pip-wheel-a8gfdc_n/opencv-python_13563f08137a4b20bc4dfee05bcbf854/opencv/modules/videoio/src/cap_v4l....

2023/09/07 · Last updated on 2023/09/23 · 3 min · 576 words

【にゃんCAM2】Tapo C200 を Homeassistant で動かす

まえがき 以前、ラズパイで猫カメラを作りました(にゃんCAM1)。 今回は、2です。 homeassistantとTP-linkのipカメラ Tapo C200 を使って構築しました。 こっちのほうが全然簡単です笑。 にゃんCAM1 part1から8まで記事が分かれています。 全体は8を見ればわかります。 8のリンクのみ載せておきます。 にゃんCAM1からの性能アップ内容 にゃんCAM1は画像をLINEで定期送信(30分ごと)が機能でしたが、それに加えて以下を追加しました。 ほとんどカメラのデフォルトの機能ですが。 暗視 動体検知 動画配信 カメラ設置の自由度向上 画質向上 簡素化 以下に詳しく記載します。 暗視 カメラのデフォルトの機能です。 IRカメラが搭載されており、周りの明るさに応じて自動でカメラが切り替わります。 暗さのしきい値を越えればIRカメラに切り替わります。 にゃんCAM1では普通のwebカメラを使っていたので、暗くなると全く映りません。 そのため、夜でも薄暗く電気をつけていました。 2ではその必要がなくなったため、にゃんこの負担も減るでしょう。 一応、にゃんCAM1でもIRのwebカメラを買って動作確認はしましたが、面倒くさくて完全導入はしていませんでした笑。 動体検知 これもカメラのデフォルト機能です。 30分ごとの撮影では良いタイミングを逃してしまうことは多々あります。 カメラの設置目的はお留守番に問題ないかな?の確認用とは言っても、あっ今ウンコ💩した!ご飯食べてる!がリアルタイムにわかるのは嬉しいです。 動画配信 これもデフォルト機能です。 あまり見ませんが、リアルタイムで見れるという安心感は大きいです。 homeassistantのオーバービューに表示していますが、外出先からはtailscale(VPN)でアクセスして確認します。 カメラ設置の自由度向上 カメラと電源コードのみなので置き場所の自由度があがります。 にゃんCAM1ではラズパイ本体とwebカメラ2台をダイソーのワイヤーネットに固定していたので大きいし、設置位置も限られました。 それが解消しました。 また、ipカメラなので、カメラが容易に増やせるのもメリットです。 簡素化 homeassistant本体(ラズパイ)はルーターボックスに常設していたWOLサーバ用ラズパイに入れたので、カメラ使用時はカメラだけ設置すれば良くなりました。 ついでにWOL機能もhomeassistantに構築しています。 後ほど紹介します。 そもそも ここまで読んでいただいて言うのもあれですが、わざわざhomeassistantを使わなくてもtp-linkのアプリ(tapoアプリ)を使って普通に使うだけで十分高性能です。 上記した動体検知や暗視は使えますし、モバイル回線からも動画が見れます。 じゃあ何でわざわざ?なのですが、以下が理由です。 tp-linkのサーバに動画をあげたくない LINEで画像を確認したい homeassistantで構築できる機能を使いたい 1については、モバイル回線から動画が見れている時点でtp-linkのどっかのサーバに動画が上がっているわけです。 動画のようなプライベート性の高いものを知らないサーバに上げるのは気持ちが悪いです。(それを言ったら他のクラウドサービスも一緒ですけどね) Amazonのレビューを見ると、カメラが勝手に動いたとかtapoアプリのプライバシーポリシーには第3者が動画を見ますよ?(←よく読んでない)的なことが書いてあって同意しないとアプリを使えないとか何とか。 など諸々を考えてLANのみの運用にしました。 後ほど詳しく記載しますが、ルータの設定でtapoのインターネットアクセスを遮断しています。 WANからはtailscale(VPN)を使ってアクセスします。 2についてはにゃんCAM1の機能を維持するためです。 tapo純正ではその機能は無い(調べてない、が正しい)ので、作ることにしました。 3については、WOLやtailscaleのことです。 日々の運用方法 homeassistantは常に起動しており、WOLやtailscaleのサーバとして動作しています。 そして必要なときにカメラの電源を入れればhomeassistantから見えるようになり、監視が開始します。 カメラが不要になったら、カメラの電源を抜けばそれで終わりです。 環境 raspi 3B+ 32GB SDカード 失敗メモ 以下に記載したのは構築時の自分メモです。...

2022/09/11 · Last updated on 2023/09/22 · 4 min · 743 words

【ラズパイで猫ちゃんカメラ】 その8 テスト撮影用のスイッチ動作(GPIO)と全体

前回 前回はプログラムの自動起動について書きました 今回 GPIOを使って、スイッチの状態を読み取りテスト撮影などの機能を盛り込みます また、これまでの内容を総括した全体プログラムを紹介します 現在、猫カメラとして実働しているものになります お出かけには必須になりました 作ってよかった😁 間が結構飛んでいるかもしれませんが、大きな心でご容赦ください笑 スイッチの機能 カメラの設置場所を決めるために撮影用のスイッチをつけます 以下のような機能をつけます 短押し(5秒以下)でテスト撮影 長押し(5秒以上)でラズパイシャットダウン 撮ったらLINEします スイッチの状態を読み取ってみる スイッチは秋月電子でこれを買いました↓ プッシュスイッチは電源(3.3V)ースイッチーラズパイ のように接続します GPIO26に接続し、プルダウンに設定しています ですので何もしなければ0Vで、スイッチを押せばhigh(3.3V)となります whileループ内でスイッチの状態を読み取ります プルダウンとして設定しているので、何もしなければGPIO26の電圧はGNDレベル=0Vでありaの値をprintすると0となります スイッチを押すとGPIO26の電位がHigh=3.3Vとなるのでa=1となります ctrl + Cでwhileループから抜けて終了です import RPi.GPIO as GPIO button = 26 GPIO.setmode(GPIO.BCM) GPIO.setup(button,GPIO.IN,pull_up_down = GPIO.PUD_DOWN) # プルダウン try: while True: a = GPIO.input(button) print(a) except KeyboardInterrupt: # ctrl + C print('\nbreak') GPIO.cleanup(button) 短押し、長押し判定 割り込みは使っていません whileループ中に50msec毎にスイッチを見に行っています 50msecはチャタリングを考慮しての時間です ボタンを最初に押してから離すまでの時間を測り、5秒以下なら短押しと判定、5秒以上なら長押しと判定しています 長押しでシャットダウン import osをして sudo shutdown -h now を実行するだけです 長押し時の処理にこれを実行します 実働プログラム レビジョン7まで上げてやっと安定しました...

2022/06/28 · Last updated on 2023/09/23 · 7 min · 1371 words

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