2022年4月30日土曜日

C270: exposure_absolute

かなり昔からあってマイナーモデルチェンジは行われている感じですが、未だに新品が購入できる汎用モデルです。

昔から販売価格も手ごろで、今だと性能的にちょっと割高な感じがあるかもしれません。バランスがいいのか、何もしなくても屋内屋外どちらもそれなりに写る感じです。暗い場所だと自動的に露光時間を増やして暗さを補いますが出力されるFPSが低下します。

motionを最初に触ったときに色々とパラメータを設定はしたのですが、motion内で設定しているとどうもうまく設定することができず、結局ほぼそのままで使用していました。motionのバージョンが4に上がって今まではmotion側のパラメータを中心に設定していた感じだったのですが、映像を入力するデバイスごとに切り分け、v4l2インタフェースはパラメータとして実装する形に変わったようです。少しいじってみましたがこの自動露光もオフにしてマニュアルで設定できました。

ためしにタイムラプスで空の雲を写しているカメラの設定を変えてみると、日が落ちるとほぼ黒しか映らなかった空の雲が、ノイジーながら暗視スコープのような感じで撮影できるように。ただ、最大値にすると映像は0.1FPS程度(1枚の画像を得るのに10秒)かかるようにw

さらに最大値にするとmotionの処理に合わなくなるようで画像が止まってしまいました。

ただ、この辺は自動でうまくできればと思うのですが、motionの機能ではうまく動いてくれないようでした。まぁFPSが1以下になった段階で動体検知の観点からは範疇から外れてしまう気もするのでまぁそれはそれということで。


 


2022年4月29日金曜日

motion: movie_max_time

 色々と調整して問題なくなったと思ったら、どうも1つのイベントから動画ファイルが分割されているという結果に。

このパラメータはVersion4.2でmax_movie_timeから名称が変わって movie_max_timeとなっているのですが、今までの意味合いと変わっていないと思っていましたがどうも違うようです。

昔のバージョンで max_movie_time はイベント開始からこの指定時間まで達すると、そこで一旦イベントが強制終了されて、event_gapなどの条件を経て、新たにイベント開始されていたのですが、これがイベントという単位と切り離され、単純に動画を分割するためのパラメータとなったようです。

結果から言えば、イベントと動画の関係は、1つのイベントという単位の中に複数の動画ファイルが発生するということ。

ソースからビルドしていままでファイルが分割されたことが無かったのはたまたまだったようです。

手持ちのソースは1イベント1動画1プレビュー画像という関係性を前提にしているので結構しんどい変更かもw

githubに初めてアカウントを登録してみた

 motionのソースを少しづつ触り始めて明らかな不具合な部分と日本語ファイルの扱いが謎だったのでアカウントを登録してみました。

手持ちのソースのバージョン管理は基本的に丸ごとコピーばかりなのですが、配布だけを考えてもgithubは便利ですねぇ。

どこまで無料でさわれるのかわからないし、ライセンスの表記が面倒そうで気軽にオープンにすることができ無さそう。

Raspberry piが増えもっぱらwgetでホームページスペースから引っ張って展開させているのですが結構アップだけでも手間だったり、2重管理になってて面倒だったり、web設置用のftpサーバーが結構融通聞いてくれなくなってるのでどうにかしなきゃと思っていたところなので、もしかすると本格的に使うようになるのかも?無料の範囲でどこまでできるのかよくわかってないですが。ちらっと紹介記事を見る限り、microsoftに買収されてかなり無料でできることが増えたとか。元を知らないので判断できませんけど。少し記憶に残ってるのは本格的に使うと結構お金かかりそうという感じだったのですが。

……

と書いて寝落ちしたのが28日3:42、新たにmotionのソースをgitからcloneして手持ちのパッチを当てようとしてたら…もう当たってた…日本語化ファイルもpullリクエストが通っているようで。

2日ほど前にも更新されてたから未だに活動しているプロジェクトなんだなぁと、感心していたのですが…問題はその後でした。

一時的にカメラを置いておきたかった場所があったので、適当にセットアップして放置しておきたかったんですがどうも上手くセットアップできない。なにかおかしい。

motionのシンプルな構造で格納するわけではなく、運用上月別のフォルダに日別に検知した動画やプレビュー用の画像を格納しています。ここまでならファイル名などを細工すればほとんど問題ないのですが、さらにイベントスクリプトを使って出力先もテンポラリに一旦出力するようにしています。主にsdカードの劣化を防ぐためなのですが、どうもファイルがうまく処理できていない。というかファイルの残骸が残る感じ。

スクリプトもかなり細かくデバッグできるように/tmpへデバッグログを強制的に出力させているのですが、それを見るとどうも一回の動体検知で複数の動画データが出力されている様子。

くそっwなんかわからん動きしてるな…まさか…と思ってgitを見るとちょうどその辺に変更を加えている様子。

event.cという動体検知後の処理を行う肝部分を思いっきり修正していた。しかもまさに動画データの出力周りを…

現状でも動体検知レベルが低下すると動画が飛び飛び状態になってしまっているのでなんとかしたいとは思ってたんですが、なんかパディングされている時もあったり設定値かと思っていましたが、もしかするとソースが違ってるのかも…と改めて気づいた。

まぁでもどうするかこれw使いたい機能はまさに動体検知のを補足しておきたいからなので…gitからではなく、うまく動いているバージョンのソースを持ってきてビルドするかな…

 

2022年4月26日火曜日

motion: タイムラプスといえば…

部屋とか監視カメラはあまり面白くないので空が映るようにセットして試しに撮影開始。

余ってたのは投げ売りされてて購入したOrbitAF。入手したのはもう10年ぐらい前になるかな?秋葉原の〇フマップで、怪しい感じで投げ売りされててつい2つ購入したもの。Windowsで使う分には普通に使えるのですが、v4l2仕様で扱おうとするとかなりパラメータが減っていて、なんとなく投げ売りされていた原因はそこなのだろうと。

ただ、何らかの方法でファームウェアの更新ができればワンチャンあるような気はしてて期待を持ちつつw

そんなOrbitを窓辺に設置してタイムラプスをオンに。

motionでこの機能を使うのはRaspberry piでは初めてだったのですが、普通に撮れますね。最初は1分間隔で撮影していたのですが、30fpsだと1時間で2秒にしかならないので30秒程度に。


天候が曇りだったというのもありますが、数日前に記事にしたカメラとは違って問題なく屋外でも撮影可能でした。やはりセンサー周りが違うということでしょう。ただ古いので、暗いと極端にfpsが低下します。

怪しいOrbitですが、motionのバージョンが上がって少しトラッキングの駆動が行える感じにはなってたのですが、かるくパラメータをいじった感じだと無反応でした。なので、水平状態の撮影に。

試しの状態のままなので何の調整もせずに撮影した感触としてはまずまずといったところ。

ビットレートとかどんな感じで扱われているのか全く不明ですが、半日程度で15M程度?30Mぐらいあれば1日行ける感じだったので迷わずtmpfsで。SDカード上だとかなり更新し続けることになりそうで怖いですね…

カメラを複数台繋げている感じで撮影していたのですが、ここで色々な問題が浮上してきました。

  • イベント起動させて録音している部分にタイムラプスを機能させるとイベント起動されるようになってしまうこと。
  • 今まで綺麗にイベントが予想通りに起動される感じだったのですが、それが乱されるようになること。

一番痛かったのが、起動時にon_event_startがイベント番号1で実行された後、別のカメラのモーション検知によるイベント番号も1で呼び出されるという点。

もうなんだろう。イベント番号って何?みたいな感じ。

スクリプト的には動画の録画と同時にマイクから録音しているわけですが、タイムラプスも動画という位置づけの様で録画の開始スクリプトがキックされるように。録画の終了時も同様。 結局この辺はイベント起動スクリプトでトリガー要因を判断することが必要になりました。

イベントの発生順序の矛盾は、今まではざっくりとした形としてon_event_startから始まってon_movie_start、on_picture_save、on_movie_endが実行されていて最後にon_event_endとなっていたのですが、タイムラプスを有効にした後は、on_event_endの後にon_movie_endやon_picture_saveが実行されるように。

Webcontrolで手動でイベント開始と停止を短い時間で行うとon_picture_saveもon_event_endの後になるという。

ある程度は吸収できそうですが、抜本的には様子を見るしかないかなと言うところ。

2022年4月23日土曜日

motion: 古いWebCam

ふとタイムラプス画像でもと思い、とても古いWebCamがあったので、Raspberry piに繋げてみた。


ちなみにWindows10につなげてもプロファイルが無いのかカメラとして認識せずそのままでは使えそうにありませんでした。

そんな古いWebCamはOpenWrt上でmotionを動かしていたもの。

パッケージを改めてみてみると、センサー解像度はVGA640x480とあるのですが、v4lのパラメータを見てみると640x472しか無いように見えました。

Raspberry pi で最初は使っていましたが、低レベルでエラーが出たりと結構わがままだった記憶があります。

camera.confを設定して稼働させてみると、とりあえず使えました。室内は手動フォーカスもあってそれなりに映ったのでそのまま放置して寝てみましたが、画像がとても不安定。1つのmotionで複数台のカメラ扱うと何となく不安定になった記憶が蘇ってきました。

これを回避するにはデーモンを多重化すると回避できた記憶もありますが、そもそもエラーはどうなってるのだろうかとログを見てみると、

event_ffmpeg_put: Error encoding image
ffmpeg_put_frame: Error while writing video frame

がズラリ…

あと所々に

jpgutl_error_exit: JPEG datastream contains no image
vid_mjpegtoyuv420p: Corrupt image ... continue

で、とどめは

ffmpeg_set_outputfile: Could not write ffmpeg header No space left on device
ffmpeg_open: Could not set the stream
event_ffmpeg_newfile: Error opening context for movie output.

エラーでテンポラリにゴミが残ったままになってしまった結果disk full状態に。

スクリプトで処理をゴリゴリやってるのでエラーになったときにどんな動きをするか怖かったんですが、システムダメージは無さそうでよかった。

テンポラリにある残骸ファイルをできるだけ生かすようにして窓にカメラを置いてみて撮影してみると、

画像破損が激しいのと、綺麗にデータ転送が行われてもホワイトレベルが調節できずほぼ白色の画像しか映らないという残念な結果に。


数年間屋外に置いていて使っていたのでそれなりにセンサー部やレンズが劣化して発色が悪くなっている気がしますが、いまだに映るのはすごいかも。マイクも大丈夫そうでした。

エラー原因をもう少し確認してみました。syslogを見てみると

kernel: [XXXXX.XXXXXX] Transfer to device 5 endpoint 0x3 frame 960 failed - FIQ reported NYET. Data may have been lost.

といったエラーがズラリ…

昔はこんなエラーは見たことがなかったんですが、単純にデータ転送中におかしくなってるっぽいのは感じます。

あとは

kernel: [XXXXX.XXXXXX] Transfer to device 5 endpoint 0x1 frame 333 failed - FIQ timed out. Data may have been lost.

フレーム番号は色々変わってますがタイムアウトも発生しているようで。

これらのエラーの時間間隔は10~30秒間隔で発生しているようでした。

USBを引っこ抜いたときにもログが出ていて

kernel: [65475.891358] gspca_zc3xx 1-1.3:1.0: URB error -32, resubmitting
kernel: [65475.900341] gspca_zc3xx 1-1.3:1.0: URB error -32, resubmitting
kernel: [65475.909342] gspca_zc3xx 1-1.3:1.0: URB error -32, resubmitting
kernel: [65475.918361] gspca_zc3xx 1-1.3:1.0: URB error -32, resubmitting
kernel: [65475.927464] gspca_zc3xx 1-1.3:1.0: URB error -32, resubmitting
kernel: [65475.932588] usb 1-1.3: USB disconnect, device number 5

-32っていうのは昔に見かけた記憶があります。もしかしてカメラのUSBケーブルかコネクタにダメージがあるのかな?

まぁそんな感じで、肝心のタイムラプスにこのカメラでは屋外撮影には向かなさそうなのがはっきりしたので、これの使用はとりあえずあきらめかな。

2022年4月22日金曜日

Libre Office: Libre Writerで編集中にハングアップして落ちやがる

 連続して落ちるので更新しました。

使っていたのはWriterですが、ハングアップして静かに死ぬということが何度か。

ハングアップした段階で結構な時間入力ができなくなるという直接的な被害はあるものの、Writerかその他のLibreアプリを起動後に自動的に回復処理が促され入力中のものが消えると言うことはなかったのが、救いです。

昔々MicrosoftのOfficeでもよくありましたが、最近のMS Officeで落ちるということをほとんど経験してなかったので最初の方は懐かしかったのですが、さすがに何度も繰り返されるとやっぱり面倒。ということで更新したんですが、すぐに同様に落ちたのでいかんなぁと思いつつ、扱っている文章で文書の行頭のアルファベットが強制的に大文字になってしまうのでオプション設定周りを確認し、明らかに不要な文書校正関連をすべてオフに。

文書校正機能はあった方が便利なんですけど、未完成の入力や編集を行っているときは邪魔以外の何物でもないわけで。なぜこの機能がデフォルトでオンになっているのか?Firefoxなどもスペルチェックがデフォルトでオンだったり。世の中謎だらけです。

入力中の自動補正は文書校正機能とは別の「オートコレクト」と呼ばれる機能なので、直接は関係がないのですが、バックグラウンド処理が走るのは嬉しくないので、使うようになると必ずオフにしまくっています。

本題となる行頭のアルファベットが大文字に変換されてしまうのを防ぐにはオートコレクトをオフにするわけですが、オートコレクトってふつう使うのかな?確かに便利「そう」なのですが…個人的には入力中に余計な感じになっていて、結局オフにしてる気がします。

LibreOfficeでも機能的にはそこそこ実装されているのでかなり便利になってそうなんですが、入力した単語を自動的にコレクションとしてため込んでいるようで…日本語の単語なんか区切りが難解だったりするし多分あまり恩恵無さそう。しかもハード的にストレスがかかりそうということで、コレクトしてあった単語は全削除。機能も停止。

他のも便利そうなのは残そうと思ったんですが、やっぱり邪魔そうなので全部オフに


多分これだけオフにすれば自動的に変なことはしなくなるはず。

その後編集を続けたんですが、嬉しいことに落ちなくなりました。

文書のバックアップや表示補正で根本的なところで落ちていたのかと思えば、補助機能で落ちていたようで。

ということは、表計算とかでも本格的に入力していると多分落ちるんじゃないかな?

ここ数日やり始めたのは、motionの設定項目が日本語で読みたいというのと、補足メモを残しておきたかったのでwebページを文字情報としてガツンとペーストして、あとは必要応じてグーグル翻訳に食べさせて表現がおかしいところをそれなりに日本語で入力して、スタイルを設定して編集しています。文書のファイルサイズは画像を少し張り付けて大きくはなってますが145kbでページ数はA4で90ページ程度となってます。

ファイルサイズが思っていた以上に小さいのは嬉しい誤算。テキストファイルにすると160kを超えていたので、なんらかの圧縮を行っているということですね。

ということで、LibreOfficeを使っていてハングアップしてつかえねぇーって方はオートコレクトや文書校正をオフにすると幸せになれそうです。

2022年4月20日水曜日

motionのログで

 ログを見ていて秒の表示がないので、バグ仕様だと思ってたんですが、よくよく見てみると秒の表示もある行があった。

[0:motion] [NTC] [STR] [Apr 19 23:39:21] webu_start_strm: Starting camera 1 stream on port 8085
[0:motion] [NTC] [STR] [Apr 19 23:39:21] webu_strm_ntc: Started camera 1 stream on port 8085
[0:motion] [NTC] [STR] [Apr 19 23:39:21] webu_start_ctrl: Starting webcontrol on port 8080
[0:motion] [NTC] [STR] [Apr 19 23:39:21] webu_start_ctrl: Started webcontrol on port 8080
[0:motion] [NTC] [ENC] [Apr 19 23:39:21] ffmpeg_global_init: ffmpeg libavcodec version 58.91.100 libavformat version 58.45.100
[0:motion] [NTC] [ALL] [ 4月 19 23:39:] translate_init: 言語:英語
[0:motion] [NTC] [ALL] [ 4月 19 23:39:] motion_start_thread: カメラID: 1は /etc/motion/BSW20KM11BK.confから設定されています.
[0:motion] [NTC] [ALL] [ 4月 19 23:39:] motion_start_thread: カメラID: 1カメラ名: Eデバイス: /dev/v4l/by-id/usb-KYE_Systems_Corp._USB_Camera_200901010001-video-index0
[0:motion] [NTC] [ALL] [ 4月 19 23:39:] main: スレッドの終了を待っています、pid: 1445
[1:ml1:E] [NTC] [ALL] [ 4月 19 23:39:] motion_init: カメラ 1が開始しました:モーション検出 有効化
[1:ml1:E] [NTC] [VID] [ 4月 19 23:39:] vid_start: V4L2デバイスを開く

気づくのは日本語と英語。トランスレーションバグか…と思い早速ja.poを見てみるものの、さすがに"%b %d %H:%M:%S"を変換している部分はなかった。

なのでソース(src/logger.c)を見ていると…

static char *str_time(void)
{
    static char buffer[16];
    time_t now = 0;

    now = time(0);
    strftime(buffer, 16, "%b %d %H:%M:%S", localtime(&now));
    return buffer;
}

確かに英語圏では月の略称は3文字で「Apr 19 23:39:21」すが、その他の言語だと残念なことになりそうな気配。どんなコード形態で扱っているのは不明ですが、結果を見ると「 4月 19 23:39:」と2文字足りてないので「月」が結構容量食っている感じです(当社比2倍w)。

試しにバッファをおおきくしてリビルドしてみましょうかね。

static char *str_time(void)
{
// % b is not always 3 characters 16 -> 32
//static char buffer[16];
static char buffer[32];
time_t now = 0;

now = time(0);
//strftime(buffer, 16, "%b %d %H:%M:%S", localtime(&now));
strftime(buffer, 32, "%b %d %H:%M:%S", localtime(&now));
return buffer;
}

リビルド…どこからやればいいのかわからないので、make cleanから
autoreconf -fiv
./configure
make
make install

[0:motion] [NTC] [STR] [Apr 20 18:48:47] webu_start_strm: Starting camera 1 stream on port 8085
[0:motion] [NTC] [STR] [Apr 20 18:48:47] webu_strm_ntc: Started camera 1 stream on port 8085
[0:motion] [NTC] [STR] [Apr 20 18:48:47] webu_start_ctrl: Starting webcontrol on port 8080
[0:motion] [NTC] [STR] [Apr 20 18:48:47] webu_start_ctrl: Started webcontrol on port 8080
[0:motion] [NTC] [ENC] [Apr 20 18:48:47] ffmpeg_global_init: ffmpeg libavcodec version 58.91.100 libavformat version 58.45.100
[0:motion] [NTC] [ALL] [ 4月 20 18:48:47] translate_init: 言語:英語
[0:motion] [NTC] [ALL] [ 4月 20 18:48:47] motion_start_thread: カメラID: 1は /etc/motion/BSW20KM11BK.confから設定されています.
[0:motion] [NTC] [ALL] [ 4月 20 18:48:47] motion_start_thread: カメラID: 1カメラ名: Eデバイス: /dev/v4l/by-id/usb-KYE_Systems_Corp._USB_Camera_200901010001-video-index0
[0:motion] [NTC] [ALL] [ 4月 20 18:48:47] main: スレッドの終了を待っています、pid: 11880
[1:ml1:E] [NTC] [ALL] [ 4月 20 18:48:47] motion_init: カメラ 1が開始しました:モーション検出 有効化
[1:ml1:E] [NTC] [VID] [ 4月 20 18:48:47] vid_start: V4L2デバイスを開く 

はい、完了。
抜本的にはバグレポする必要がありそうだし、linuxのこの手の文字コードの手順ってどうするんでしょう?

と言うよりも、英語設定なのに日本語変換されているのが問題だったりするんだがw

2022年4月19日火曜日

stretchでまた音が出るようになりましたからの…

粘ることRaspberry pi(Linux)のサウンド周りを調べ初め、alsaとかpulseaudioとかossとか

細かいところは置いておいて、インストール済みのパッケージの状態ではbusterでalsaとpulseaudioが両方入っていたossは見当たらない。。bullseyeではクリーンな状態ではないのですが、alsaとpulseaudioは入っていたが、ossはなし。stretchは多分alsaしか入ってなかったんじゃないかと。apt install pulseaudioなんて一昨日ぐらいに初めてたたいた気がする。

音が鳴らないなら、pulseaudioパッケージ入れればなるようになるかもと、installしたものの、何も設定しないとalsa側のarecordで結構致命的なレベルでエラーとなるようになってしまいました。慌ててパッケージをremove。

で、そこまで行く付くまでにサウンド関連の実装状態を知るように。

ossは別として、alsaもpulseaudioもドライバーから実装していてどちら側からも考慮されていて設定を行えば共存は可能で、どちらもデーモンなどでバックグラウンドで処理を行ってサウンド関連の制御を行っているということ。

個人的な感触ではalsaの方が若干粗削り感が強い。

で、どちらも何もしなくてもほぼそれなりに動作するっぽい。けど、stretchでは微妙。設定ファイルもあまり設定されていなかった。

そして振出しに戻り、alsaを調べてゆく。

alsaは最初にデバイスで設定できるスイッチやボリュームなどを操作してマスターボリュームのミュートも解除する必要がある場合があること。ここの点で出力側の話しかなかったが、入力側も同様の作りなのだと思う。(これが多分インストールしてから一回行えば大丈夫なのだろうと思う。alsaは起動時に設定状態を復元しているような部分があった。)

そしてそのキーであろうalsamixer。CUIで実装されたボリュームやスイッチがわかりやすく表示され操作できそうなのだが、残念なことにteratermを使っているとF1~F5を押すとプログラムが終了してしまうという。

これまでも何度も実行してteratermのキーマップを読み込み直してたのだが、どの定義マクロもすべてのファンクションキーが有効にならず、あまりまともに操作ができなかった。

そしてalsamixerで操作してもやはりマイクは有効にならなかった。

コンソールで直接操作するだけでよかったのかもしれないと思いつつも、teratermのヘルプを見ながらデフォルトで読み込まれるキーマップファイルKEYBOARD.CNFをF1~F5が有効になるFUNCTION.CNFを見ながら編集し、F1~F10のファンクションが使える状態で片っ端から操作した。マイクデバイスだけではなく、本体のイヤフォンジャックやHDMIの設定をmキーを押してON/OFFを切り替え、ボリューム系はスペースキーでミュートさせたり。F6キーでデバイスを切り替えたり、F1の情報を表示させたり…やれることは全てやった。

すると…何がトリガーなのかわからないまままた音が録音できるように。

途中で知った lsmod | grep '^snd' | column -t で表示される内容を見比べても音が出る前と出た後では状態は変わっていなかった。

書いている途中で寝落ちしたんですが、起きてから再起動かけたらどうなるのか気になってsudo rebootしてみました。すると…音が拾えなくwまたかw

alsamixerでさんざんパラメータを変えたり情報を表示させても変わりません。まるで画面系のブラックボックステストの様ですw

bashhistoryを見てやれるだけのことはやった。が…まったく音が拾えません。

半ばあきらめて、alsa関連のパッケージを追加でインストールしてみてもやはり変わらず。再度pulseraudioをインストールしてみることに。

すると、前回はエラーでおかしかったのがpurgeしていたので環境がきれいになったためかrebootした後からなにやら絶好調。しかも音も拾えるように。

全くよくわからんw

で、動作確認をしてしばらくしてからreboot…音が… orz

なんかよくわからん状態だし、ここはシステムのアップグレードしかないという結論に。

ネットワーク関連も特に何もしていないraspberry piなのでbullseyeに一気にアップグレードさせました。

たまたま見つけたページがdist-upgradeをかけていたので同様に行ったわけですが、途中からエラーが。とどめのpythonスクリプト処理でもエラーが。大体1時間ぐらい?raspberry pi 2bで、なおかつクロックは低めの設定だったと思う。CPU温度は気温18℃で最高27℃台でした。

このまま再起動すると確実にやばそうなので、full-upgradeをかけてみました。現在はこちらが推奨されているようですね。

full-upgradeなのでかなり強烈に削除と追加を行うようで処理は時間がかかりました。途中画面が止まることが多々あったので余計に時間はかかっていますが153分程度かかっていました。

さらに念を押してエラーが出ないことを確認し、保留となってるパッケージがいくつかあるものの再起動はできそうです。

dhcpcd.confだけ確認して大丈夫そうなのでreboot

再起動後、早速arecord で録音してみると…「ぶぶぶぶっブチっ」とか処理落ちしてそうなサンプリングノイズが録音できました。

何度か繰り返した後、alsamixerで設定を確認すると、alsaのrestoreが機能しているためかボリュームやその他の機能が前に設定したままとなっているようでした。

おまじないで、全コントロールの操作とオン/オフを触りさらに再起動。

起動後にarecordで録音したところそれなりに音が拾えてそうな感じに。

アップグレード中、sambaの設定で文字化け画面しか見れなくとりあえず応答したのですが、そのまま残ってたようで外部からの確認作業がすぐにできました。

ほかに使ってそうな機能としては、肝心のmotionなのでそちらの設定を。今回はアップグレード途中で、パッケージメンテナの状態で更新するようにyで応答したので、ある意味bullseyeでのクリーンな実行環境になってるはず。

service motion statusで確認すると、やはりserviceファイルから起動していて、typeはsimpeでした。すげ変わっているmotion.confを今までのものに入れ替えて、今までdeamonモードをonにしていたのですが、offにして起動させました。

とりあえず、これでいいのですが、motionのビルド環境がそのままなので試しにstretchでビルドしたバイナリを実行してみると…ライブラリリンクエラーで起動すらしませんでしたw

なのでリビルドします。念のためコンパイルに必要なビルドパッケージを再度インストールしてみましたが、全て最新の状態になっていました。環境を整えてmakeしてmake installして、起動させてみると、問題なく動く様子。後で切り替えておこう。webcontrol画面の日本語が不自由だし…

足掛け24時間以上書き込んでようやく終わりが見えてきました。

結局、手元からstretch環境は無くなっただけというw

成果物としては、alsamixerのためにteratermのF1~F5がターミナル上で機能するキーマップファイルが出来上がった。が、これも逃げ道があって[TAB]キーでF3~F5の代用は可能という事実…ま、それもF1キーが有効にならないと気が付かないということで。

デフォルトのKEYBOARD.CNFを直接書き換えちゃいましたが、リンクを張り付けておきます。今使ってるのはUSキー配列ですが、多分いまのwindowsなら使えると思います。

teraterm_KEYBOARD.CNF.zip 

 



2022年4月17日日曜日

stretch また音が出なく

apt updateが原因なのか、ほかの要因なのか気づけばまたwebカメラのマイクから音が拾えなく…

こう言う時の為のログファイルなのだが、SDカード延命の為にログは思いっきりRAMだったりw
寝る前にupdate時のターミナルのログを見るか…

最初に音が拾えてない状況から突然音が拾えるようになり、そこからは安定していたのだが、motion4.0では扱えない設定があり、とりあえずビルドして切り替えたら音が…
bullseyeとbusterでビルドが通っていたのでstretchではどうだろうかと少し心配したものの、特に問題もなくビルドできました。オプション扱いのライブラリは入れてないので。
目標はビルド環境でハードウェアコーディックが動くようになればいいんですが、buster環境で既に絶望的な状況だったりします😓

2022年4月13日水曜日

暑い(;´Д`)

今日は少し窓を開けておいたので少し暑い程度で済んだのですが、今いる部屋の温度変化

昨日は岩手県で30℃越えとか出てましたが、部屋の中はその状態だったようです。温度センサーの個体差で誤差はありますが。

ついこの前まで、午後でも20℃を超えなくて肌寒かった気がするんですが…

明日は少し気温が下がるようですが、日差しが強いとこの部屋暑いんだよなぁ(´-ω-`)


ターミナルのエスケープシーケンス

手持ちのRaspberry piは当初からphpでweb経由で設定を確認したりしているのですが、サービスの動作状態を確認したくてsystemctl list-dependenciesを使ってみたのですが、phpで普通に実行すると戻ってくるのはテキストコードだけのものとなってしまいイマイチ意味がなくなってしまいます。

pi@rasp3bprs:~ $ systemctl list-dependencies
default.target
 ┣apache2.service
 ┣console-setup.service
 ┣cpufrequtils.service
 ┣cron.service
 ┣cups-browsed.service
 ┣cups.path
 ┣dbus.service
 ┣dhcpcd.service
● ┣dundee.service
● ┣e2scrub_reap.service
 ┣gldriver-test.service
● ┣hciuart.service
● ┣irexec.service

といった感じで色がついて表示されているわけですが、これが

default.target
* |-apache2.service
* |-console-setup.service
* |-cpufrequtils.service
* |-cron.service
* |-cups-browsed.service
* |-cups.path
* |-dbus.service
* |-dhcpcd.service
* |-dundee.service
* |-e2scrub_reap.service
* |-gldriver-test.service
* |-hciuart.service
* |-irexec.service

とステータスが*となっているだけなので、判断不可能w

オプションもあるので表示が切り替えられるかと試したもののわからず。パイプとしてバイナリーで受け取れるということで試してみたんですが、内容は変わらず。

コマンド内部で出力デバイスを判断してエスケープシーケンスを出している感じがするんですが、その辺どうなってるんだろう。ソースを見ろってことか…orz

motionの日本語ファイル

 4.4のビルド環境の手始めに、せっかくなので不自由そうな日本語ファイルを調整しました。

ビルドしたディレクトリに放り込んでリビルドするか、言語ファイルだけ個別に変換してインストールしたディレクトリに設置すると少しはまともになるかな?といった程度。

若干言葉の揺れや、一貫性が取れてない部分もありますがご了承ください。githubとか使ってないのでとりあえずドライブで共有化しておいたのでどうぞ

ja.zip

zipファイルですが言語ファイルはja.poで、最初の方にコメントで簡単な手順を示してあります。

motionで気になってる部分はwebコントロールページが新しくなってた(4.3ぐらいから?)のですが、日本語ファイルを外して英語にしてもパラメータの設定のコンボボックスに出てこないので起動や停止はできるのですが、パラメータを設定することが直接できませんでした。

動作自体は昔(4.1未満)のままで、パラメータ名も変更されてsyslogに警告文が大量に流れたりしますが、良くも悪くもそのままといった印象。ログを見るとかなりバグが解消されている感じはあるのですが…

2022年4月12日火曜日

PHPでdfがおかしい問題

一通り五体満足に動くようになったので気になったポイントをチラホラ。ステータス確認用のWEBサーバーからのPHPからの出力がおかしい。

PHPから実行するとこんな感じ。

Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/root       28381332 13100324  13816280  49% /
devtmpfs          413168        0    413168   0% /dev
tmpfs             446448        0    446448   0% /dev/shm
tmpfs             178580     8492    170088   5% /run
tmpfs               5120        4      5116   1% /run/lock
tmpfs              32768     1944     30824   6% /tmp
tmpfs              32768      524     32244   2% /var/log
tmpfs               4096       20      4076   1% /var/logger/tmp
tmpfs              32768        0     32768   0% /var/tmp
tmpfs               2048        0      2048   0% /var/www/mrtg
/dev/mmcblk0p6     72576    50433     22143  70% /boot
tmpfs              89288       28     89260   1% /run/user/1000

ターミナルで実行するとこんな感じ

pi@rasp3bprs:~ $ df
ファイルシス   1K-ブロック     使用   使用可 使用% マウント位置
/dev/root         28381332 13100324 13816280   49% 
devtmpfs            413168        0   413168    0% /dev
tmpfs               446448        0   446448    0% /dev/shm
tmpfs               178580     8492   170088    5% /run
tmpfs                 5120        4     5116    1% /run/lock
tmpfs                32768     1944    30824    6% /tmp
tmpfs                32768      524    32244    2% /var/log
tmpfs                 4096       20     4076    1% /var/logger/tmp
tmpfs                32768        0    32768    0% /var/tmp
tmpfs                 2048        0     2048    0% /var/www/mrtg
tmpfs                16384        0    16384    0% /tmp/motion
/dev/mmcblk0p6       72576    50433    22143   70% /boot
tmpfs                89288       28    89260    1% /run/user/1000

意味わからん。PHPでは/tmp/motionが見えないらしい。ブラウザ側で何らかの問題があって表示されないのかもとソースを確認してみても出力がされていなかった。
試しに、sudo -u www-data dfとしてみたが、出力の違いはなかった。

pi@rasp3bprs:~ $ sudo -u www-data df
ファイルシス   1K-ブロック     使用   使用可 使用% マウント位置
/dev/root         28381332 13100324 13816280   49% /
devtmpfs            413168        0   413168    0% /dev
tmpfs               446448        0   446448    0% /dev/shm
tmpfs               178580     8492   170088    5% /run
tmpfs                 5120        4     5116    1% /run/lock
tmpfs                32768     1944    30824    6% /tmp
tmpfs                32768      524    32244    2% /var/log
tmpfs                 4096       20     4076    1% /var/logger/tmp
tmpfs                32768        0    32768    0% /var/tmp
tmpfs                 2048        0     2048    0% /var/www/mrtg
tmpfs                16384        0    16384    0% /tmp/motion
/dev/mmcblk0p6       72576    50433    22143   70% /boot
tmpfs                89288       28    89260    1% /run/user/1000

php内で df -a としてみたが明らかにおかしい。

Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/root       28381332 13100324  13816280  49% /
devtmpfs          413168        0    413168   0% /dev
tmpfs             446448        0    446448   0% /dev/shm
devpts                 0        0         0    - /dev/pts
mqueue                 0        0         0    - /dev/mqueue
proc                   0        0         0    - /proc
systemd-1              -        -         -    - /proc/sys/fs/binfmt_misc
sysfs                  0        0         0    - /sys
securityfs             0        0         0    - /sys/kernel/security
cgroup2                0        0         0    - /sys/fs/cgroup
bpf                    0        0         0    - /sys/fs/bpf
debugfs                0        0         0    - /sys/kernel/debug
tracefs                0        0         0    - /sys/kernel/tracing
fusectl                0        0         0    - /sys/fs/fuse/connections
configfs               0        0         0    - /sys/kernel/config
tmpfs             178580     8492    170088   5% /run
tmpfs               5120        4      5116   1% /run/lock
sunrpc                 0        0         0    - /run/rpc_pipefs
tmpfs              32768     1944     30824   6% /tmp
tmpfs                  -        -         -    - /tmp/motion
tmpfs              32768      524     32244   2% /var/log
tmpfs               4096       20      4076   1% /var/logger/tmp
tmpfs              32768        0     32768   0% /var/tmp
tmpfs               2048        0      2048   0% /var/www/mrtg
/dev/mmcblk0p6     72576    50433     22143  70% /boot
tmpfs             178580     8492    170088   5% /run/credentials
tmpfs              32768     1944     30824   6% /tmp
tmpfs              32768        0     32768   0% /var/tmp
binfmt_misc            0        0         0    - /proc/sys/fs/binfmt_misc
tmpfs              89288       28     89260   1% /run/user/1000

/tmp/motionの存在は認めているものの、「-」表示で意味不明w

-iオプションとかもあるけど傾向は同様で、-aが付いていないときは/tmp/mountはなかったことにされて-aが付いていると/tmp/motionは出力されるものの、内容は不明。なんだこれ? 

pi@rasp3bprs:~ $ sudo find / -name df
/root/.cache/pip/wheels/df
/bin/df
/usr/lib/debug/.build-id/df
pi@rasp3bprs:~ $ sudo ls /root/.cache/pip/wheels/df -l
合計 4
drwxr-xr-x 3 root root 4096 10月 17  2018 81
pi@rasp3bprs:~ $ sudo ls /bin/df -l
-rwxr-xr-x 1 root root 72052  9月 22  2020 /bin/df
pi@rasp3bprs:~ $ sudo ls /usr/lib/debug/.build-id/df -l
合計 64
-rw-r--r-- 1 root root 13532 12月  1 19:52 16b8bdac931b59592493640bc44d3c7336f763.debug
-rw-r--r-- 1 root root 13548 12月  1 19:52 2454e4a970c4ec5e09addb0b6b43b3a9d1d69b.debug
-rw-r--r-- 1 root root 13452 12月  1 19:52 35213dd3c6a0f7f9b64cdfa97a55bbff0c09d8.debug
-rw-r--r-- 1 root root 13540 12月  1 19:52 5ed81bc6456a94d0c59bba47d8aa8d315f983e.debug

試しに PHP内で/bin/dfとしてみたものの、変化なし。

原因なんでしょう。やはりStretchから一気に上げた皺寄せ?

2022年4月11日月曜日

WEBブラウザのアドレスバーの自動検索の無効化

私はWEBブラウザで主に使っているのはfirefoxです。

基本的にアドレス入力でURLを入力することは稀ですが、やはりURL入力で履歴などからの自動補完はまぁ許せなくはなかったのですが、強制的に妥当なサイトを検索してくるのはかなり危険がありそうと感じたので無効化しました。

現状のアドレスバーの動作は大きく分けて3つの機能で成り立っています。

  • 入力時に自動補完を行う機能
  • 入力時に候補を表示する機能
  • 入力後にアクセスできなかった場合の自動で検索し表示する機能 

私が個人的に危険だと思うのは3つ目の自動検索機能です。この機能は用意されている設定画面からでは設定できないのも少々疑問だったりします。

何が危険かと言えば、例えばローカルホストのwwwサーバーにアクセスするために「localhost」とか入力するとlocalhost.comなどが存在した場合そこのページを表示させるという。(昔msnのサイトでドメインが.comと.co.jpが存在していて全く別のサイトだったのですが、それがもうなんか怪しいかった。セキュリティー的にもとても危険だと思う。今だとどちらのドメインでも.comへリダイレクトされてローカル言語のページが表示されるようになっています。)

で、現時点でwwwと入力すると、www.comへ誘導されドメイン名購入の勧誘が行われています。と、見せかけて何やら攻撃されても嫌ですし。なので、この辺の検索機能は止めるのが吉だと思います。

方法を検索すると

Firefoxのロケーションバー(URL欄)の自動補完・検索機能を完全に無効化する

が出てきました。

firefoxのabout:configで以下のfalseへ変更を行いました。

browser.urlbar.autoFill
browser.fixup.alternate.enabled
keyword.enabled

browser.urlbar.autoFill.typed は出てこなかったので、新たに登録せず放置。存在しなければFalseになると思うので。問題があったときに登録する方向でw

入力時検索は設定から行えるので好みに応じて設定するのがいいかな。

これで少しは幸せになれそう。

 

 

 

 

 

 

 

 

 

2022年4月10日日曜日

Raspberry pi : motionをビルド

motionのページにRaspberry piのビルド方法もいつの間にかしっかり記載されるようになったので問題なくGitHubからビルドできた。

Abbreviated Building GuideのDebian / Ubuntu / Raspbian Packagesに書いてある通りに実行するだけでビルドからインストールまで完了。

実行できる状態になるので、あとはサービスなどの設定を行う。

aptでmotionをバイナリパッケージでインストールされるディレクトリとビルドした異なっているので少し調整が必要になるでしょう。

既にmotionの動作環境が整っているのであれば、一旦サービスを停止させ、init.dかserviceで実行しているバイナリへのリンクを/usr/bin/motionから/usr/local/bin/motionへ変更し、/etc/motion.confを/usr/local/etc/motionへコピーやリンクさせるか、起動時パラメータで指定させます。

変更後、init.d以下の修正を行った場合、リロードする必要がありますが、busterでは警告が表示されるのでそれに従えば問題ないでしょう。

ビルドがそのまま通たので、問題は無いだろうと思っていましたが…旧バージョンから一気に4.4まで上がってしまったのですが、confなどはそのまま使えるようでした。ただパラメータ名がかなり変更されているようで、用途ごとに名称変更が行われていました。

最近使って居ませんでしたが、motionのwebコントロールも使ってみましたが、なんか昔と全然違っていて驚きました。日本語がかなり不自由な感じなのと、肝心のパラメータ設定ができる気がしない…。

bullseyeで既にmotion.log内に日本語が含まれていたので驚きは少なかったのですが、地味に英語に設定できず。ドキュメントでは環境変数のLANGUAGEに設定すればいいみたいなことが記述されていましたが、設定不良なのかバグなのか判断できず、結局

sudo mv /usr/local/share/locale/ja/LC_MESSAGES/motion.mo /usr/local/share/locale/ja/LC_MESSAGES/_motion.mo

として言語ファイルを外してみました。

ドキュメントに翻訳が不足していれば英語表記のままとあったので試してみましたが、うまく行きました。

英語表記になればwebコントロールのページもまともになるかと思ったのですが、パラメータ名のコンボボックスのアイテムは全く増えず。

githubをみる限りバグ報告はなさそうなので、もしかするとどこかに設定する必要があるのかな?

ドキュメントを見直していて、今までカメラに入る光量が変化したときに変動したピクセル数がほぼ全画素数となってしまい、無駄なファイルが保存されてしまうの、反応させる範囲を狭めたかったのですがが、このパラメータが増やされていて助かりました。

正直この辺のパラメータはもっと欲しいとおもっていて、ビルド環境ができたので、正直ソースをいじってみようかな。

2022年4月7日木曜日

stretchからbullseyeへ

検索するとstretchからbusterやbusterからbullseyeは結構ブログとかでも見かけるのですが、stretchからbullseyeは見かけることがありませんでした。(その後四苦八苦して検索するといくつか記事を見かけました)

今回ターゲットとなるのは、motionと温度ロガーとsoftetherが動いていて、結果から言えばosのアップデートは成功したものの、残念ながら内部でブリッジした状態だとIPv6パケットは問題なさそうなものの、IPv4パケットがうまくルーティングされ無いという現象に。

思いっきりIPv6を無効にするとDNSもアクセスできなくなり状況が悪化。
試行錯誤を1日以上かけて行いましたが無意味だった。mDNSサーバーもアンインストールしたんですがあまり状態は変わらず。この機能便利なんですけどやっぱり不安定で試しに使っただけで利用していない。
設定中にインタフェースを切り替えて、ブリッジを解除すると普通に通信が通るようになったのは確認できた。なので問題は単純にブリッジの設定がおかしいということは断定できた。
そもそも明らかにオカシイポイントとして、ifconfigでブリッジインターフェースにipが固定できているものの、なぜか取りまとめているだけの物理インタフェースにもipが振られてしまっている。これをなんとか強制的にでもipを振られないように設定を行おうと検索し続けたのですが、manで見られる以上の情報は掴めず。
ipが振られたとしてもパケット自体はルーティングされるはず…でルートテーブルを見たところ、どう見ても物理インタフェースから外に出そうな形になっていなかった。

時間切れのため、ここでいったん終了に。

motionで音を拾えるように

motionで音も拾うように設定し始め、複数の環境で試していました。

最初にいじり始めたのは、busterベースのもので、これにはmotionと温度ロガーが動いているもので、四苦八苦しながら何度目の挑戦かわかりませんが、motionでようやく音の録音までまともになりました。
問題があるとすれば、WebCamからの画像が640x480程度で10FPS程度が限界になっていることと、モーションを拡張パイプで外部のコマンドを実行する場合、動作が不安定になるのかon_event_endの処理が失敗することが多発し、うまく行くときと行かないときの処理の切り分けが出来なかった。
motionのビルトインffmpegであれば、失敗することもなくなった。

残りの環境はstretchしかなくmotionのバージョンも結構古めでしたが、残りの2台は何の問題もなく音の録音が出きるように。

次にRaspberry pi 2Bで設定を行った。個人的に信頼性の低いbuffalo製のWebCamでカメラのマイクが反応せず、音声ファイルは作成されるものの無音のファイルに。
マイクのボリュームミキサーや指定可能なパラメータを設定しても音が拾えなかったので、ハードウェアが原因で音が拾えないのかもと、あきらめて他の設定を行いつつ、何回か無音で録画された後に突然音も記録されるように。屋内用のWebCamを雨はかからないながらも屋外で使い続けて数年…5年以上稼働し続けているかもしれない。音が鳴り始めた原因は不明。motionのパラメータを変更し、メモリ消費量やデータ転送量を減らすように変えたのが原因かも?

他の物も今までWebCamのマイクを動作させたことはなかったが、ハード的に問題も無いようで問題なく録音が行えて順調に完了できたのだが…そこから原因不明のエラーがでて録音が一切通らなくなりました。

原因不明ながら、エラー内容から、apt updateなどでドライバが置き換わってそこからエラーになってしまったようです。

今後の対応は一つはそのまましばらく放置で、もう一つはosのアップデートをする事にしました。