はじめに
いまさらですが、ATOM Cam 2と ATOM Cam Swingを買ってみました。
atomcam_toolsを試したメモを残しておきます。
iOSアプリ「ATOM - スマートライフ」をインストールする
メールアドレスを入力しても認証コードが届かないなー、と思っていたら、操作が足りていませんでした。
メールアドレスを入力し、ライセンスに同意して、「認証コード取得」を押す必要がありました。
同じように悩まれている方の参考になれば幸いです。
iOSアプリへATOM Cam 2 / ATOM Cam Swingの登録
画面の指示に従って操作すればカメラの登録、Wi-Fiの設定は難しくありませんでした。
- RESETボタンの長押しでカメラを待機状態(Bluetooth ON)にし、アプリからカメラを発見
- スマホに表示されるQRコードをカメラに見せることでWi-Fiの接続情報を設定
消費電力
ATOMアプリでカメラをOFFにしていても、消費電力はあまり変わりませんでした。
(常に組み込みLinuxが動作している状態。起動時:0.28A 〜 停止時:0.23A)
atomcam_tools
ATOM Camを拡張するツールキットを導入します。
使用法に記載のとおり、zipファイルを解凍して、SDカードへコピーします。
リモートからSSHログインできるようにするため、解凍したファイルの中のauthorized_keysファイルにSSHの公開鍵を追記します。
例. macOSの場合
id_rsa.pubの内容をauthorized_keysファイルへコピー&ペーストします。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDN6gNVKw2XBsk/uF5Gv...
(以下、省略)
SSHログイン
ATOM CamのIPアドレスを確認し、sshコマンドでリモートログインできることを確認します。
例. masOSの場合
$ ssh root@192.168.3.7
[root@atomcam:~]#
2024.1.20 追記
Sonoma 14.2.1でTerminalからATOM CamへSSHログインしたところエラーになりました。
sshクライアントのssh-rsaを有効化する必要があることがわかりました。
$ ssh -o PubkeyAcceptedKeyTypes=ssh-rsa root@192.168.3.7
(参考)
https://pakapaka.jp/no-mutual-signature-algorithm/
ウェブ管理画面
ブラウザからATOM CamのIPアドレスへアクセスすると、ウェブ管理画面が表示されます。
RTSPストリーミング表示
ATOM Cam2は公式でRTSPストリーミング機能がサポートされましたが、ATOM Cam Swingは未サポートのため、atomcam_toolsの機能を利用するメリットがあります。(ATOM Cam2は公式、atomcam_toolsのどちらも利用できました)
公式の場合(ATOM Cam2のみ)
ATOMアプリを操作してRTSP機能を有効にします。
対象のデバイスを選択します。
右上の歯車マークを選択します。
「その他」を選択します。
「PCで再生」を選択します。
URLが表示されます。
ATOM Cam Swingの場合、「PCで再生」メニューが表示されません。
atomcam_toolsの場合
ウェブ管理画面からRTSP(Main)を有効(スライドボタンを右へ移動)にすると、URLが表示されます。
VLC Playerでの表示
URLを入力すると画面が表示されます。
例. atomcam_toolsのURLを入力した場合
静止画の保存
ffmpegコマンドで静止画を保存する方法です。output.jpgというファイル名で保存されます。
例. 公式のURLを指定した場合
$ ffmpeg -loglevel error -i rtsp://1781:9015@192.168.3.7/live -f image2 -frames:v 1 output.jpg
YouTubeLive配信
ffmpegコマンドでYouTubeLiveへ配信する方法です。
例. 公式のURLを指定した場合
$ ffmpeg -loglevel error -i rtsp://1781:9015@192.168.3.7/live -ar 44100 -f flv rtmp://a.rtmp.youtube.com/live2/[ストリームキー]
音声を再生する方法
こちらの方法でWAVファイルをATOM Camのスピーカーから再生することが可能です。
ただし、対応しているWAVファイルのフォーマットはサンプリングレート(16bit, 8kHz)のモノラルWAV形式である必要があります。
WAVファイルを用意する
効果音ラボの「ラッパのファンファーレ」を使用させていただきました。
ffmpegコマンドでフォーマットを変換します。
$ ffmpeg -i trumpet1.mp3 -acodec pcm_s16le -ac 1 -ar 8000 trumpet1.wav
trumpet1.wavをSDカードに保存します。
SSHログインしてコマンドで実行
$ /scripts/cmd aplay [WAVファイル] [ボリューム]
例.
$ /scripts/cmd aplay /media/mmc/trumpet1.wav 10
リモートからウェブ管理画面経由で実行
$ curl -X POST -H 'Content-Type: application/json' -d '{"exec":"aplay /media/mmc/test.wav 10"}' --output - 'http://[ATOM CamのIPアドレス]/cgi-bin/cmd.cgi?port=socket'
動体検知画像をLINE Notifyで送る方法
Webhookでイベントを通知する機能があるので、ATOM CamからNode-REDへ画像を送信し、LINE Notifyで画像を送ることができる。
Node-REDのフロー(ATOM Camから送信された画像を表示)
[{"id":"daba8f567e987ac1","type":"http in","z":"17cb3ce7696216ca","name":"","url":"/atomcam","method":"post","upload":true,"swaggerDoc":"","x":200,"y":320,"wires":[["0681bd467aae2df4","e607bdd4be4b3037","6d6ddcb72bca1522"]]},{"id":"0681bd467aae2df4","type":"http response","z":"17cb3ce7696216ca","name":"","statusCode":"200","headers":{},"x":460,"y":320,"wires":[]},{"id":"e607bdd4be4b3037","type":"debug","z":"17cb3ce7696216ca","name":"debug 10","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":460,"y":360,"wires":[]},{"id":"21fb53b45bba9fa8","type":"image viewer","z":"17cb3ce7696216ca","name":"","width":160,"data":"payload","dataType":"msg","active":true,"x":710,"y":500,"wires":[[]]},{"id":"6d6ddcb72bca1522","type":"switch","z":"17cb3ce7696216ca","name":"","property":"payload.type","propertyType":"msg","rules":[{"t":"eq","v":"alarmEvent","vt":"str"},{"t":"eq","v":"recognitionNotify","vt":"str"},{"t":"eq","v":"image/jpeg","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":4,"x":370,"y":440,"wires":[["9083b5f7c1b5b442"],[],["1bc984d6d3b88fa0","864f0262b3bff090"],[]]},{"id":"1bc984d6d3b88fa0","type":"debug","z":"17cb3ce7696216ca","name":"debug 11","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":520,"y":460,"wires":[]},{"id":"864f0262b3bff090","type":"change","z":"17cb3ce7696216ca","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"req.files[0].buffer","tot":"msg","dc":true}],"action":"","property":"","from":"","to":"","reg":false,"x":540,"y":500,"wires":[["21fb53b45bba9fa8"]]},{"id":"9083b5f7c1b5b442","type":"debug","z":"17cb3ce7696216ca","name":"debug 12","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":520,"y":400,"wires":[]}]
Node-REDフロー(LINE Notifyで通知)
(参考)