Archive for the ‘Linux’ Category

先日ちょっと書いた、ブログにボットが良く来る件でアクセスログを見ていたら、不正ログイン試行や悪質なアクセス※が結構多くて気になってしまった。

※例: シェルのコマンドを実行しようとするもの、大量のバイナリデータを送って来るもの。

以前にも何度か、目に付いた時に そのアクセス元近辺のIPアドレスをブロックするように設定したのだが、設定するスクリプトを変更するのは面倒だし失敗する可能性があるので、ブラックリストのファイルにIPアドレスを書いて、適宜追加できるようにしてみた。動作確認した時は うまく動いたのだが、たまたま翌日にカーネルの更新で再起動になった あとは繋がらなくなってしまった・・・

それでサーバ(VPS)のコンソールで調べたら、起動はしているもののNWが全然使えない状態になっていた。: ホスト名の検索(DNS)は駄目だし、プロバイダのDNSサーバにすらpingが通らなかった。

ログを調べると、networkd-dispatcherが"Unknown state for interface NetworkctlListState"という訳の分からないエラーを出していた。更新されたカーネルの問題・相性を疑っていたのだが、検索しても ほとんど出て来ないので、僕の環境の問題だと思った。

結局、(上のエラーの前に出ていたのだが、)systemd-networkdが起動しなくなっていたためにNWが使えなくなっていた。その原因は、上に書いたブラックリストのために追加した処理にバグがあり、必須のNWアクセスも遮断するようになっていたためだった。

そのバグというのが しょうもなくて、たった一個の余計な空白(下の $var のあと)が原因だった。シェルスクリプトに

if [ -n "$var " ]; then

のように書いてしまったのを気付かなかった(近眼+老眼+白内障(進行中)のコンボに加え、そもそも眼が不調だ)。$varが空の場合に以降を実行するのに、これでは 全く実行されない。その処理が重要で、実行されないとNWが全部遮断されてしまうのだ。。。

そもそも、空かどうか調べるのに"$var"のように " で挟んで書くのが良くなく(しかも面倒)、もっと間違い にくい書き方がある気はするが、今まで見たことがない。少し考えたい。

そこを直してサーバは回復し、ファイルに入れたブラックリストも ちゃんと動いた。

 

そして更にもう一個、隠れた問題が見付かった。Linuxの仕様なのか、NW-IFを有効にする前のスクリプト(/etc/network/if-pre-up.d/*)が何度も実行されるのだ。僕は そこに上述の悪質アドレスのブロックを設定するスクリプトを入れたのだが、今回初めて、それが何度(4回)も実行されていることに気付いた。

内訳は、実際のNW-IFに対するIPv4, IPv6が各1回、全体に対するもの?(IFACE="--all")、loopback(IFACE="lo")だった。

もちろん使う前に調べれば分かる・調べるべきことだが、余りにも おかしな・杜撰な仕様だ。今まで問題なかったので、スクリプトは何度実行されても問題ないようだが、念のため、一度だけ実行されるように修正した。

スクリプトに渡される環境変数のMETHODが"none", IFACEが"--all"の時だけ実行するようにした。ただ、これはどういう契機なのか分からず、将来は なくなるかも知れないので、実行されなかったら警告が出るようにした。

 

起きてから延々と作業して午後遅くまで掛かったが、そもそも、こんなIPアドレスのブラックリストなんて意味ないことに気付いた。

まず、不正・悪質なアクセスをするサイト(のIPアドレス)は無限にある。※ 良いブラックリストを手軽に入手できないかと検索したら、山のようにブラックリストが出て来たが、それらの いくつかと僕のブラックリストに共通のアドレスはなかった。

※今はまだIPv4がメインだが、v6なら本当に無限だ。それに、v6のアドレスは(プライバシー処理のため)基本的に「日替わり」だから、アクセス時のアドレスに永続性・再現性はない・・・

仮に 良いブラックリストを合わせて使うにしても、無限に多くのアドレスでフィルタリングできる訳はなく、段々重くなり、最後は破綻するだろう。

そして、悪質サイトはブラックリストに載ったらアドレスを変えるだろう。載らなくても随時変えるのではないか?※ 実際、以前アクセスして来たアドレスは、(ログを見る限り、)何度か失敗したあとはアクセスして来ない。それに対応するために余分な幅(例: v4なら256-65536個?、v6なら264個??)を持たせてブロックするとしたら、そのプロバイダの他の人までアクセスできなくなる。

※日本ではそうだが、固定IPアドレスの人が少ないこともありそうだ。そもそも固定にする意味がない。更に、上述のようにv6は基本的に固定でない。

そうやっているうちに、誰もアクセスできなくなりそうだ。

だから、IPアドレスでブロックする仕組みを作りは したし、定期的に不正・悪質なアクセスを調べようと思っては いるが、無意味だと思う。どこかで見たが、リアルタイムに挙動で判定するのが良さそうだ。それがWAFなのだろう。

手軽に使えるものがあるか、気になるところだ。

(23:30) 少し探したら、手軽(無料・簡単)なWAFは なさそうだが、無料のものは いくつか見付かった(例: NAXSI, ModSecurity)。

が、インストールや設定は容易では なさそうなので今後の課題とし、まずは現状の脆弱性などの問題をチェックしようとした。: Nikto2というツールとオンラインのスキャナ(例: InnuniWeb, Mozilla Observatory (HTTP), SSLTrust Free Website Safety & Security Check, WordPress Security Scan)を使った。その結果、軽微な問題は見付かったものの、概ね大丈夫そうだった。

ただ、脆弱性に関して余りチェックをしないもの(HTTPヘッダ辺りが中心の感じ → クライアントに被害を及ぼさないかがメイン?)が多かったので、もっとサーバにキツそうなもの(例: w3af, OWASPのいろいろなツール)でチェックする必要がある。

とりあえず、チェックで見付かったHTTPヘッダ周りの問題を修正した(できないものもあった)。

  • WebサーバとWPのセキュリティプラグインAll In One WP Securityが同じヘッダ(X-Frame-Options: SAMEORIGIN)を出していたため、設定値がおかしい(重複している)という警告が出たので、プラグイン側(Misc. → Frames → Enable iFrame Protection)を解除した。
    • 最初は どうして重複するのか分からず、苦労した。
  • (サーバ・OS依存のようだが、)ETagはリスクがあるとのことなので削除した。
  • httpsでのgzip圧縮にはリスクがある(BREACH攻撃)とのことだが、問題の起こらないタイプだけに制限しているので問題ない。
  • 一番の問題は、Content Security Policy(CSP)に対応していないことだ。: ページの修正が要りそうなので、容易には対応できない。

その他に、TLSの問題・互換性をチェックするものもあったので(例: Observatory (TLS), TLS Checklist inspector)、チェックして修正した。

  • 今はTLS 1.3に移行しつつあるようなので、(obsoleteらしい)1.1を止めて1.2と1.3に対応させた。
    • AEADというものに対応していなかったので、対応させた。
    • 1.3に対応させる時、Mozillaの、サーバの設定例を作るページが役に立った。
      • が、その設定と他のチェックが競合・矛盾する場合があって、(細かい問題ではあるが、)どうするか悩ましい。

あと、SQLインジェクションについても いくつかツールが見付かった(例: sqlmap, jSQL Injection)ものの、そもそもSQLインジェクションを良く理解していないので、正しくチェックできる方法を考える必要がある。

良く考えると、(考えなくても、)SQLインジェクションどころか、サーバのセキュリティ向上は2年以上前からTODOに入っており、今回も少ししたら忘れた振りをして放置する気がする・・・

 

PS. 全くの脇道だが、HTTPヘッダ関連を修正している時、Mozillaの設定サンプルにHTTP/2の設定もあって、調べたらサーバは対応しているので(もちろん、パフォーマンスが劇的に向上するなんて期待は しておらず、興味本位で)ちょっと試したくなった。

が、この「ちょっと」が いつもトラブルを招くのだ・・・w (9/24 8:31)

(9/24 14:39) やっぱり、ちょっとHTTP/2にしてみたw 今度は大きな問題は起こらず、webサーバの設定にHTTP/2を追加しただけで すんなり動いた。ただ、予想どおり、HTTP/2にしても速くならないどころか、わずかに遅くなった(例: このブログは約3%(約11ms)遅くなった)。ページの生成は並列に できないので、基本的には仕方ない。とりあえず試したかったのと、世の中の流れに追従するのが目的なので、まあいい。

このサーバをHTTP/2に対応させた。: Vivaldiの開発者ツールでプロトコル(中央辺りの"Protocol")がHTTP/2を示す"h2"と出ている(最後の"http/1.1"は外部サーバのもの)。

HTTP/2にしても速くない(遅い)原因を考えてみたら、当たり前の気がする。: そもそもHTTP/1.1では複数の接続で同時に転送していたのを、わざわざ1本(想像)にまとめて その中で多重化しているのだから、スケジューリング・多重化・非多重化処理が増えて遅くなりこそすれ速くなる訳がない。

HTTP/1.1の複数の接続では両端の機器や経路へのリソース的な負荷が重くなるが、それが問題なければ、1本にまとめるより ずっと効率が良いと思う。

あと、ヘッダをバイナリにするとデータ量は減るだろうが、元々ものすごく大きいものではないし、エンコード・デコードの処理が増えるから やっぱり少し遅くなるだろうし、ボディ(本体)は もともとバイナリ可なので、何も変わらない。

結局、接続を減らして処理が多くなるのに速くなるという理屈が不思議だ。HTTP/2はリソース面でエコだとは思うが、速度は期待できない。

不思議なのは、JoplinのデスクトップアプリがHTTP/2を使わない(なぜかモバイルアプリは使う)ことで、最新版に更新しても同じだった。良く分からないが、Joplinには構わないことにしているので良い。

他のアプリでは、PC(Linux)ではEvolutionは1.1だったが、意外にもSeamonkeyは2だった。Thuderbirdの新しいコードを取り込んでいるのか。スマフォ(Android)ではDAVx5は2だった。

作業に付随して起こった ちょっとした問題(これで疲れた)は、CLI版を更新したら なぜか起動しなくなり(以前もそうだったので、頭に来て更新しないことにした気がする)、ちょっと調べたらnodeのモジュール@aws-sdk/middleware-endpoint※が不足していたので、自分でダウンロードして追加したら動いた。

※パス: ~/.joplin-bin/lib/node_modules/joplin/node_modules/@aws-sdk/middleware-endpoint

構成ファイルが駄目なのか、nodeのバージョンの関係か。誰も指摘しないのが不思議だが、Joplinには構わないことにしているので、ここまでとした。

(9/24 18:12) 下のPS2にも書いたが、正直言ってHTTP/2はイマイチなので(実際、すぐにHTTP/3が出た)、対応したばかりだが止めた。処理が複雑な割に効果がないし、余計な機能はバグなどを生んでセキュリティ上のリスクになるから、ないほうがいい。

PS2. ようやくHTTP/2に追い付いたと思ったら、HTTP/3が出て居た。開発者ツールでGoogleのサイトを見ていたら"h3"というのがあって気付いた。今度はQUIC/UDPベースだそうで、応答は速そうだ。となると、結局HTTP/2はイマイチだったようだwww でも、HTTP/3も目論見ほど いいのか疑問はある。 (9/24 17:31)

  •  0
  •  0

(他にも書きたいことはあるが、眠いので軽く。)

近頃、ちょっとしたことが いつの間にか良くなっていた、あるいは、わずかな手間で良くなった。

一番はVivaldi(Linux版)+日本語入力(Fcitx+Mozc)とツイッターの相性問題で、以前は日本語が まともに入らなかった※のが、ちゃんと入れられるようになった。ただ、元々他のサイトでは起こっていなかったので、ツイッター側の問題だったのかも知れない。

※入れている途中で消えたり、文字が抜けたり、消した文字が残って居たり・・・

少し前は、DM(チャット)は まだ今一つな感じもしたが、今は大丈夫かも知れない。

何だか分からないが、とりあえず直って良かった。

次もVivaldiとツイッターだが、ツイート中のビデオの再生開始直後と終わってから少しの間、ブラウザが動かなくなっていたのが解消できた。これは何かが直った訳でなくVivaldiの設定の問題だった(Tabs→"Mute Tab Audio"を"Prioritize Active Tab"から"All Tabs"にした)。本当は元の設定が いいが、無理なものは仕方ない。

最後は、このブログで使っているWordPressが、いつの間にか画像のlazy loading(遅延読み込み)をサポートしていたことだ。僕は、結構前にそのためのプラグイン(Lazy Load - Optimize Images)を入れていたのだが、挙動が ちょっと気に入らなかった(画像の出方が もったいぶっている、それで遅く感じる)ので、早速無効にした。

WPのlazy loadingは そうなっているのが全然分からないので、本当に働いているのか疑って開発者ツールで調べたら、ちゃんとページのスクロールに合わせて画像のアクセスが起こって居たからOKだ。 (→ 画像: 上半分あるいは下の右半分の右側にポツポツとある点のところで、画像を遅延読み込みしている。) きっと、画像が表示される直前に読むのだろう。賢い。某プラグインのように、画像が出てから変に凝ってフェードさせて出すなんて愚の骨頂だ。

WPのlazy loadingでのネットワークアクセス (Vivaldiの開発者ツール)

  •  0
  •  1

最初に断ると、正確には「(Linuxなどの)疑似乱数生成器(PRNG)の一様性の問題」だ。乱数自体の話は いろいろあるだろうけど、それではない。

前の稿に書いたように、乱数で画像の表示順序をランダムにしようとしたら、全然一様でなくて、偏りが大きくて  ばっさり棄てた。頻度の最多と最少の比が2以上もあるのでは、全く使えない。 (実験結果を最後に書く)

単に試行回数が少ないせいなのかと思ったが、階級(分類)数約30に対して1000回実施しても偏りは解消しなかった(約1.8)ので、永久に解消しないように思う。

ある掲示板で見たのだが、僕と類似の質問に対して、統計あるいは数学のプロらしき人が、「そんな試行回数じゃ全然足りない。文句を言う前に統計を勉強しろ」みたいな偉そうなことを書いていた。そういう連中は10万回とかが最低レベルで、基本は「無限の回数」なのだろうが、そんな前提では全く実用にならない!

そもそも、一様な乱数なら、なぜ試行開始から しばらく または ずっと 偏りが生ずるのだろうか? 階級数は少ない(= 狭い)ので偏る理由がない。確かに確率論的には ばらつくこともあり得るが、階級の数より充分大きい(例: 30倍)回数でも依然として偏ったままなのはおかしい。確率論での「充分大きい」は1000倍とか1万倍なのだろうか?

不思議なのは、それを使っているであろう多くのアプリケーションが問題ないことだ。僕の使い方が悪いのか、偶然問題が起こらないのか、そういうものなのか、実際には問題があるけど隠れているのかのどれかは分からない。

 

以下、細かい話である。

上に書いた、乱数のバラつき(階級数29の場合、最多と最少頻度の比が大きい)が気になったので、Linux、特にPHPで使える乱数機能を いろいろ試してみた。

なお、試行回数は階級数(29)の20倍の580回とした。また、頻度の集計には、Stack overflowの"How to generate a random number from a uniform distribution in php?"の回答1に書かれていたものを使った。

以下に、試した方法ごとの最多と最少頻度の比を示す。なお、実行するたびに比は変動するので、2回実施した。

1回目

  • PHP: rand: 5.6※
  • PHP: mt_rand:2.7※
  • PHP: random_int: 2.4
  • PHP: statsパッケージのstats_rand_gen_iuniform: 2.8
  • /dev/urandom (4バイト読み出し): 4.7 (処理に誤りがあったので取り消し。やり直した値はPSを参照のこと。)
  • opensslコマンド(openssl rand 4)*: 3.0 (処理に誤りがあったので取り消し。やり直した値はPSを参照のこと。)
  • shufコマンド(shuf -rn 1 -i 0-MAX): 2.5
  • Python: numpy.random.uniform*: 6.7
  • rand+僕の改良案2@: 2.3

2回目

  • PHP: rand: 2.6
  • PHP: mt_rand: 2.6
  • PHP: random_int: 2.7
  • PHP: statsパッケージのstats_rand_gen_iuniform: 2.8
  • /dev/urandom: 3.1 (処理に誤りがあったので取り消し。やり直した値はPSを参照のこと。)
  • opensslコマンド: rand: 2.8 (処理に誤りがあったので取り消し。やり直した値はPSを参照のこと。)
  • shufコマンド: 2.6
  • Python: numpy.random.uniform: 4
  • rand+僕の改良案2: 4.1

メモ

  • ※ ドキュメントではrandとmt_randは同じものなので、差が出るのはおかしい。mt_randをrandのあとに実行した関係があるのだろうか。実際、2回目はrandとmt_randの比は近かった。
  • * Pythonのnumpy.random.uniformは/dev/randomを使っているのか、随分時間が掛かった。opensslのrandも遅かった。
  • @ randの出す値の密度や間隔と実際の値域のそれが異なることが悪いのかと思い、階級数より充分大きな範囲の乱数から縮小するようにしてみた。要するに、浮動小数点の乱数(0〜1)を任意の範囲の整数にする手順にしてみた。また、結果の整数の乱数を出すのに、以下の2とおりを試した。
    • 案1: mod(剰余)
    • 案2: 除算

 

結局、比較的少ない試行回数ではPHPのrandom_intとshufコマンドが一番一様そう(2.6付近)で、その次はstats_rand_gen_iuniform(2.8)となった。stats_rand_gen_iuniformは安定しているところが良さそうだ。

randやmt_randは悪くないが、変動が大きそうだ。opensslのrandは良くはないが、比較的安定している。なお、Pythonのnumpy.random.uniformや/dev/urandomは今一つだった(後者は使い方が悪いのかも知れない → opensslとともに整数化の処理に誤りがあったので値を取り消した。: 9/15 10:26)。

(9/15 9:03) numpy.random.uniformについては、参考にしたページにある分布のグラフは ほぼ平坦で、これなら許せる(と期待して試した)。その試行回数は10000回(個)なので、階級数(そこでは10)の1000倍くらい試行しないと一様にならないのかも知れない。この、どれだけ繰り返せば充分かというのは、どうすれば分かるのだろうか? また、本質的に そうできない用途では どうするのだろうか?

(9/15 9:12) と書いたあとにグラフを良く見たら、上の例で生成している乱数(グラフの横軸)は整数でなく浮動小数点数だった! 僕は整数に丸めて評価したので、その辺りに問題があるのかも知れない。丸めについては僕も気になっていて、上述の改善案で試行錯誤したけどうまく行かなかった。

グラフを目で見た時と同様に、積分して整数にすればうまく行くだろうか? 面倒なことだ・・・ ← 丸めるのは積分(個数を求める場合)でなく単なる整数化(例: 四捨五入)で良いから、問題なかったはず。

いずれにしても、僕にはまったく許容できない偏りである。

そういう問題または仕様あるいは注意事項があるなら、ドキュメントに書くべきだと思うが、まったく見たことがない。せいぜい"cryptographically secure"かどうかだけだ。

僕に言わせれば、こんなに偏るものがsecureとは思えない。まあ、見るところが違うのだろうけど。

 

(9/16 13:59) 元々の用途(このブログの「時替わりギャラリー」)に対する うまい対処方法(workaround)を思い付いた。: 画像を替えるのに乱数(PHPのrand)を使うが、それで次に表示する画像の番号を直接決めるのでなく、乱数と現在の画像の番号を加えたもの(と画像数の剰余(mod))を次の画像の番号にするのだ。現在の画像番号をn、全画像数をNとすると、次の画像番号n'は以下の式で得られる。

n'= (n + rand(1, N-2)) % N

rand: 整数の乱数: 引数: 最小値, 最大値
%: 剰余

これなら、仮に乱数に出やすい値xがあっても、今の画像からx枚目の画像が出やすくなるだけで、いつも同じ数種類の値(しかも、それらが画像数と「いい関係」にある)が出るのでない限り、特定の画像が出やすくなることは起こりにくいと考えられる。

が、実は そうでもないというオチはないか?: 少なくともrandは今の画像の番号は分からないので、特定の画像が出やすくなるような値は出せないはずだ。あるとすれば、周期的に同じような値が出ること(上の「いい関係」)だろうか? 考えると難しい(面倒だ)。

(9/17 16:28) ところが、そうは問屋が卸さなかった。表示される画像をチェックしていたら、やっぱり良く出るものがあった。想像だが、上のように乱数に何かを加えたものも元の乱数と同じ性質であり、その元の乱数に良く出る値があるなら良く出るスキップ数となり、そのスキップ数と全画像数の関係(割り切れるか)にも よるだろうが、結局同じ画像が良く出るのではないだろうか。

結局、ギャラリー内の画像の順序のとおりに表示するように戻した。

(9/18 12:22) その後、擬似的な乱数としてページのアクセス時刻(正確には この処理を開始する時の時刻, μs単位)を使ってみたが、不思議なことに やっぱり一様でなく、良く出る値(→ 良く出る画像)と全然出ない値が生じた。

例えば、(回数は多くないが、)71回(約4時間分)のアクセスでは、最高に出た値の頻度は最小(1回)の5倍だった。出ない値は2個で、全体の平均は2.6回だった。

アクセス時刻(の階級数での剰余)がある時刻に集中するとは考えられないので この原因も謎だが、出ない3個(各1回と想像)が出やすいところに回って、平均の2.6+2 → 5回になったのかも知れない。

画像数(= 階級数)が29個と、10の倍数でないなのが関係していることも疑った。: アクセスはランダムな時刻に来るが、その時刻を階級(各画像)に振り分ける時に偏りが生ずるのではないか? ただ、時刻は100μs単位(0-99)のように区切っては いないので、剰余が偏りを生むとは思えない。

が、頻度分布を見ると、後半の12から25までの頻度が比較的多いのが気になる。その幅は13で、100と29の剰余に合う。また、頻度の高い区間が始まる12は13-1だ。単なる偶然とは思うが不思議だ。

だから、これは たまたまアクセス時刻が偏ったためで、回数を多くすれ(長時間、数日?見れ)ば均等になるのだろう。が、僕には、起動後数時間経っても偏りが直らないのは許容できないので、この方法もボツにした。

 

PS. Pythonのページに関する追記から、試行回数を増やして一様性を比較してみたら、どうやら、階級数x500回以上試行すれば、僕が満足できる一様性(最多/最少が概ね1.2 → ばらつき20%以内)に できそうなことが分かった。 (9/15 10:37)

試行回数と各方式での最多と最少頻度の比を示す。

29階級x20回= 580回: 2.5辺り (Pythonは3辺り、opensslは5辺り)

  • PHP: rand: 2.38
  • PHP: random_int: 2.64
  • /dev/urandom: 2.42
  • shuf: 2.31
  • openssl rand: 4.5
  • Python numpy.random.uniform: 4.83 2.9

29階級x500回= 14500回: 1.3辺り (random_intとshufとPythonは1.2辺り)

  • PHP: rand: 1.26
  • PHP: random_int: 1.19
  • /dev/urandom: 1.26
  • shuf: 1.21
  • openssl rand: 1.31
  • Python numpy.random.uniform: 2.07 1.2

29階級x1000回= 29000回: 1.1辺り (random_intとshufは1.15辺り、Pythonは1.2辺り)

  • PHP: rand: 1.11
  • PHP: random_int: 1.15
  • /dev/urandom: 1.11
  • shuf: 1.24
  • openssl rand: 1.11
  • Python: numpy.random.uniform: 2.26 1.19

本文で懸念したように、/dev/urandomとopenssl randの使い方(整数化の方法)に誤りがあったので修正した。

また、Pythonの一様性が悪いのは、使い方が良くないせいかも知れない。 ← (9/15 13:42) Pythonのnumpy.random.uniformの出力に想定外の問題があった。: 生成する乱数の最小, 最大値での頻度が他のものの半分くらいになっていた(乱数を表示する時の丸めの問題かも知れない)。 → 仮対処として、生成する範囲を広く取って数を多目に生成して範囲内のものだけを使うようにしたら、一様性は改善された。 → 上を更新した。

それから、Pythonの1回の実行でその系統全部の乱数を生成するようにしたら、実行速度は速くなった。

結局、試行(繰り返し)回数を随分増やせば一様になることが確認できた。実際に使う時にはそうできないことがあるが、その場合は「シャフル」のように あらかじめ一様な分布を作っておくとか、分布が一様になるように調整(取捨選択)するのだろうか?

あと、この問題は「システムの起動後しばらくは(乱数が今一つなので)安全でない」ということには ならないのだろうか? (この辺りは全くの素人なので、単なる思いつきである。)

 

(9/15 10:37 若干修正, 10:37 PSを追加, 16:22 題を明確化; 9/16 13:59 対処方法を追記, 22:42 題を変更; 9/17 16:28, 9/18 12:22 乱数を諦めた件とその後の試行を追記)

  •  1
  •  0

昨夜、寝る前に突然やって来た。どうにか対処したものの、大変な寝不足になってしまった。

以下、簡単に流れを書く。

  1. なぜか、ブログの管理画面にログインできなくなった。2要素認証(以下、2FA)が失敗する。
    • 一瞬、サーバが(一種のランサムウェアに)攻撃されて、絶対に入れない状態になったのかとも思った。
      • ただ、sshは問題なく、別のシステムの2FAは成功したので、ブログだけの問題なことが分かってホッとした。
    • あとで分かったが、セキュリティのプラグインAll In One WP Security(以下、All-in-one)の2FAが設定していないにも関わらずonになったようだ。
      • 近頃の更新で、All-in-oneに2FA機能が追加されたけど全然気付いていなかったのが、そもそもの敗因だった。
      • 自分では その2FAをonにした記憶がないので、勝手にonになったか、元々の2FAのプラグインと勘違いしてonにしたのかも知れない。
      • ただ、何も設定していないのに有効になる(できる)のは、とんでもなく ひどい!
        • 間違えて2FAの機能をonにするだけなら有り得るが、どのユーザーを2FAにするか、どんな方式(例: OTP, ハードキー)にするか、OTPなら確認のコード入力など いろいろあるのに、間違えて そこまで設定することは全くない。
      • 元々の2FAのプラグインの設定を流用して勝手に設定されたのだろうか?
        • 書いたあとで分かったが、All-in-oneの2FAをonにすると、管理者などの権限を持っているユーザーは2FAが有効になってしまう。罠だ。
          • そこで、All-in-oneの設定で、2FAを有効にする対象(権限・役割)を なし(全部チェックせず)にしたら、2FAの設定タブがなくなったので、もう間違うことはなさそうだ。
  2. (元々の)2FAのプラグインが変な状態になったと考えて一旦無効にしようとしたが、管理画面に入れないからできない。
    • それで、コマンドラインでプラグインのファイルを削除したが、なぜか2FAを無効にできなかった。
      • その前に、元々の2FAのプラグインのサイトを参考に、設定ファイルで無効にする方法を試したが、効かなかった。
    • 良く調べたら、(上記のように、)元々の2FAのプラグインとは別の、All-in-oneが2FAのOTP入力画面を出していた。
      • 最後は、認証エラーで出ているエラーメッセージを、インストールしているプラグインのプログラムから検索して特定した。。。
      • 似たような画面なので全く気付かず、どうしてもログインできないのが不思議だった。
    • それで、コマンドラインでAll-in-oneのファイルを一時的に削除して どうにかログインし、All-in-oneの2FAを無効にして、今までどおりログインできるようになった。
  3. PHPがダウングレードできない。
    • All-in-oneが悪いと分かる前、近頃更新されたPHPの互換性の問題で元々の2FAのプラグインが うまく動かなくなったかと思い、ダウングレードして試そうとしたものの、いろいろな依存関係のために諦めた。
  4. メールがGmailに送れない。
    • ログイン画面のパスワードリセット機能を使おうとしたが、その案内メールが届かなかった。
      • 届くこともあるのが謎だったが、どうも後述のDNSの逆引きがうまく動いていないためのようだった。
      • 更に、そのメールはパスワードをリセットするだけで、2FAには何もしないので無駄だった。
        • そもそも、元々の2FAのプラグインにはバックアップコードがあるのだが、All-in-one(バックアップコードは有料)とは違うので使えなかった。
    • 調べたら、Googleがスパムと判定するためのようだった。
    • メールの送信元認証システムのSPFやDKIMなるものを設定しないとGoogleはスパム扱いするようなので、(深夜なので止めておけばいいものの・・・)「ちょっと」SPFを設定してみた。
  5. SPFの設定がうまく行かない。
    • 自分のドメイン名を管理するDNSサーバにSPFを設定しても、チェッカーでは「SPFの設定なし」と出た。
      • 原因が良く分かっていないが、DNSの逆引き設定の不良(未設定?: 後述)とDNS情報の伝達遅延のせいだったようだ。
      • 書いたあとで調べたら、原因が分かった。 (9/9 13:56)
        • DNSサーバにSPFを設定する場合、TXTレコードとして書くのが一般的なようだが、以前はSPFレコードとして書く方式もあったけど廃れたようだ(→ 参照)。
        • 一方、僕は良く分からずに、(DNS設定画面のプルダウンメニューに出て来たから)SPFレコードで設定したので、チェッカーが「設定なし」としていたことが分かった。
        • SPFレコードからTXTレコードに設定し直したら、チェッカーもGmailへのメール送信も成功した。
          • 想像だが、未だにSPFレコードをサポートするのはGoogleくらいなのではないか??
  6. DNSの逆引き(IPアドレス→ドメイン名)がおかしい(未設定?)。
    • このサーバの設定項目に逆引きがあるが、ドメイン名のDNSサーバに登録すれば不要だと誤解していて、設定していないのが駄目だったようだ。
    • ただ、今まで、ちゃんと逆引きできていたこともあるので、それは どこのを参照していたかが謎。
      • 記憶が定かでないが、一時設定していたけど止めたのが どこかに残って居たのかも知れない。
    • あと、不勉強なため、逆引きは どこが標準(権威を持つ)サーバなのか分からなかった。このサーバのプロバイダなのだろうか?
      • サーバのプロバイダに問い合わせたら、想像どおり、このサーバのプロバイダにしか逆引き情報は設定できないとのことだ。

 

悪戦苦闘して何とかなったが、All In One WP Securityの ずさんさに呆れたしムカついたので使うのを止めたい。が、代わりの いいものを探すのが面倒だ。あと、DNSの逆引きの件は もう少し調べて勉強したい。

それにしても疲れた。。。

 

PS. 今朝、どうにか片付いて力尽きた頃に、UKの女王が亡くなられたようだ。その頃のツイートに、「BBCの出演者が みんな黒い服になった」というようなものがあった。

頭の中で、時々、(Queenの)"God save the Queen"(1975)が流れ、メイのちょっと寂しげなギターや最後の余韻のようなドラムに浸る。

  •  1
  •  0

もちろん、宗旨替えなんてしてないし、しない。MacでLinuxを使うのだ(もちろん、エミュレータなんかじゃない)。以前にも書いたように、x86のような効率の悪過ぎるクソプロセッサは止めて、次のPCはARMで行きたい。が、時々探しはしているものの、デスクトップPCに使えるようなプラットフォームがない。

そこに現れたのが、ARMベースのAppleシリコン(M1, M2)だ。Torvaldsも言っていたらしいが、そのMacでLinuxが動けばいいと思って居た。そして今日、偶然「「Linux 5.19」が公開、トーバルズ氏はAppleシリコン搭載Macからリリース」という記事を目にした。Asahi Linuxというのが動き出しているらしい。まだ完全ではないようだが、もう少しではないか?: 個人的期待だが、来年くらいには ちゃんと使えるようになるのではないか?

だから、現時点では、ARMベースのLinux PCにはAppleシリコンのMacを使うのがベストだろうと思う。

とは言え、Appleが意地悪をしてAsahi Linuxが起動できないような「更新」をする可能性があるので、そこを何とかできればいいが、できるのだろうか??

もちろん、もっと安くて いいものがあればいいが、今 影も形もないのに数か月で突然現れるとは思えない。

未だにPC・周辺メーカーはx86に どっぷり浸かっているようだが、それでいいのだろうかと思う。「ガソリン臭い車が好き」とか宣う どっかの偉い人みたいだ。

とは言え、そもそも(狭義の)"PC"はIBM PC互換機から始まったので、x86を止めれば"PC"の前提条件がなくなってしまって、「何を作るの?」みたいになるし、PCのさまざまな規格はIntelなどが作って来たものなので、いきなり「他」を出せるメーカーは なかなかないだろう。

そして、今 広義のPCを独自に推めている会社を挙げるとすれば、AppleとGoogle(Android)だけではなかろうか。

 

PS. 細かいことを考えると、実際に移行するのは容易ではない。例えば、オープンソースでないソフト(例: Spotify)がARM対応にならないと使えなくなる(macOSのように実行時に変換して動かせればいいが、Linuxではできない)といった問題がある。まだまだ先は長い。 (8/5 7:09)

  •  1
  •  0

ローカルでないバックアップは、duplicacyでクラウドストレージBackblaze B2 (以下、B2)とGoogle Cloud Storage Archive (以下、GCSA)に保存している。先日、そのB2の安価な代替が見つかった。

とは言え、現在B2に入れているデータ量は約75GBと とても少なく、月額料金はUSD 1未満(例: USD 0.4)なので、移行する必要性はない。

ちなみに、B2は月額料金が余りに安い場合は請求を延期するようだ(先月の請求が なかった)。クレジットカードの手数料が高く付くからだろうか。そのうち、「使用量が小さ過ぎるので、もっと使わないと退会になります」とか言われなければいいがw

それはiDrive e2で、ストレージの単価がUSD 0.004/GB/月※と、B2のUSD 0.005/GB/月より少し安い。それよりも魅力的なのは、ストレージの処理・操作やデータ転送が無料*なことだ。一方、B2は処理・操作回数やダウンロードデータ量に応じて課金される。

※年払いの1TBのプラン(料金: USD 40)では、USD 0.0033/GB/月相当になる。なお、このプランの初年の料金はUSD 4である。

*ダウンロードに関しては、「通常の範囲で」("good fit")のような制限がある。具体的には、保存しているデータ量の3倍までならOKで、普通に使うには充分そうだ。

データ転送が基本的に無料であれば、(滅多にないし、やりたくないが、)リストアが気軽にできる。

とは言え、90%以上(約1TB)のデータはGCSAに入っているので、フルリストアの費用は安くならない(GCSAからのダウンロードは超高い!)。が、今 B2に入れている基本的・アクティブな部分のリストアが無料になるのは、それなりにありがたい気がする。

また、具体的な案はないが、バックアップ以外の用途にも使えるかも知れない。

それから、細かいけど、10GB/月まで無料なのもありがたい。B2は、最初の試用期間が過ぎたら全部課金される。

こうして比べると、(今となっては)B2のセコさが目立つ。昔は他がなかった(高いAWSやGoogleなどが相手だった)ので良かったのだが、それに胡座をかいている(実際は そうではないのだろうが)うちに追い越されてしまうのではないか?

B2はアーカイブもやってないし、もう少し周りを見てアップデートする気はないのだろうか? 先日上場して一段落したのか、それで余り冒険ができなくなったのか。

「悪くないな」と思ったのだが、実はiDriveはB2にする前に少し試して止めたのを思い出した。が、それはe2とは異なるもので、ファイルベースのバックアップ用ストレージだった。e2はオブジェクトストレージというもので、基本的にブロック単位で格納するため、ファイルシステム的な機能は余りない。

気になる点は、速度、セキュリティ、使い勝手、継続性などであるが、多くは使ってみないと分からない。

以前の記録を見たところ、上記のファイルベースのiDriveは速かったようだ。ただ、ファイルシステムがWindowsを前提にしていてLinuxから使うには不便だった(例: sym-linkがない)ので止めた。

上述のように、e2はオブジェクトストレージなので、ファイルをブロック化してバックアップするduplicacyから使う分にはファイルシステム的な問題はない。

なので、今は いろいろ延期しまくっているTODOがあるものの、おいおい試してみたい。丁度、先日書いたKopiaというバックアップソフトも試したいので、それで使ってみたい。10GBまで無料なので気軽に試せるのがいい。

 

てな訳で、充分良いと思って使っていたB2ですら他に取って代わられる可能性が出るなど、クラウド関係のサービスは常時変わっていて、時々でもチェックしていれば 安くていいものが見付かることがある。※ が、一方で、新しいサービスがすぐに終わるということもあるので、そこら辺の見極めも重要だ。と言っても、外から事前に分かるものでもないので、いつでも乗り換えられるような仕組みや体制にしておくのがいいのだろう。

※ソフトも同様に、(僕の中では 設定が面倒臭くて謎の多い)duplicacyがKopiaに取って代わられる可能性がある。

  • IDrive Cloud Backup

    IDrive Cloud Backup

    Enterprise Class Cloud Backup for PCs, Macs, Serve…

  • Kopia

    Kopia

    Fast and Secure Open-Source Backup Software for Wi…

  •  1
  •  0

壊れた訳ではないのだが、数日前に見た、ある種(Cisco, HPE, SanDisk)のSSDが約4万時間(約4.6年)で使用不能になるというニュースが発端だった。 (→ 元の情報)

それで、僕のPCのSSD(AData SX900)の電源on時間を調べたら、約32000時間(約3.6年)で、4万時間までの残りは約1年であった。※ この問題が起こるとSSDに全くアクセスできなくなる(「文鎮化」)ということなので、心配になって調べてみると、対象はSanDisk製のSAS SSDのみのようだ。 (→ 参照)

※実際に使っていた時間(期間)は約6年なので、実際の残り期間は1.7年程度と思われる。

更に、HPEの資料によれば、対象のSSDは問題が起こり出す2020/10の約4年(4万時間)前(→ 2016/3/9頃)に出荷されたもののようだ。 (以下、左の資料から引用)

Due to the SSD failure not occurring until attaining 40,000 power-on hours of operation and based on the dates these drives began shipping from HPE, these drives are NOT susceptible to failure until October 2020

僕が使っているAData SX900は2013年頃の製品で、上の情報によれば問題のSSDより前に製造・出荷されただろうから、対象外の可能性が高いし、そもそも、対象はSanDiskのSAS SSD(ただし、確証となる情報は見付からなかった)と随分違うので、おそらく問題ない。だから、僕のSSD・PCで上記の問題が起こる可能性は ほとんど0だが、使用時間が長くなったので、安心のために(+気が向いたw)、手持ちの予備的なもの(東芝 THNSNH256GCST)に交換することにした。

そもそも、Linuxに移行した時に、暫定的に「そこら辺にあった」SSD(AData)にインストールして 、良かったら今回交換したもの(東芝)に換えるつもりだったのだが、問題なく動いていたし、面倒なので(どう面倒かは以降を参照)、そのままにしていた。

なお、新しいSSD(東芝)の電源on時間は約9400時間(約1年)だったので、充分な余命がありそうだ。

下調べと試行錯誤

交換するSSDはシステム(起動)ドライブ※なので、やっぱり いくつかの落とし穴があった。

※ここでは「ドライブ」は「ディスク」と ほぼ同義である。SSDを「ディスク」というのが少し変な感じなので、基本的に「ドライブ」とした。

システムドライブの移行方法を調べると、大きく分けて2種類があった。: 複製(クローン)かコピーかである。

複製(クローン)は、ddコマンドなどでドライブを丸ごとコピーし、コピーはドライブ中のファイル単位でコピーする。移行するのは起動ドライブなので、ブート情報・領域もそのままコピーできる前者のほうが安全な気がした。が、ドライブのUUIDまでコピーされてしまう(→ 論理的に同じものが2つできる)気がして(未確認)、後々トラブルの原因になると考えたので、後者のファイル単位でのコピーにした。

調べていたら、Clonezillaという良さそうな複製ツールが見付かり、最初はそれを使おうとしていた。が、なんか書いてあることがおかしいので止めた。

というのは、「ブートローダー(grub)なども再インストールする」とあるが、そもそも複製なのだからそんな必要はないのだ(必要なのはファイル単位でコピーする場合)。UUIDについては書いてないので、そのままコピーされるのではないか。

仮に、UUIDはコピーせず、それでgrubを再インストールするというなら、/etc/fstabも更新する必要があるが、それはしない(さまざまなOSには対応できないし、複製ツールがファイルまで変更するのは おかしい)から複製しただけでは起動できない。

それだったら、処理内容が分かっていて手慣れたddを使うほうが良いと考えて却下した。

大体ね、Clnonezillaはサーバなどの非対話環境でも使うことを想定しているようだが、クローンでは駄目だと思う。マシンの実行中にクローンしたら、微妙に変なものができないか?? そういう用途では論理的なコピー(ファイル単位かつロックなどする)でないと駄目だと思う。

ファイル単位でのコピーの場合で一番気になって居たのは、(どんなOSでも いつも面倒な※、)ブートローダー(grub)などを設定・更新しないと起動しないであろうことだ。調べたら、grub-installでgrubを再インストールし、fstabを更新(システムドライブのUUIDを変更)すればいいという情報があって(→ 参照)、それなら簡単そうだと思ってやったら嘘だった。。。 必要な作業内容に漏れがあって、そのままでは起動できなかった。

※だけど、LinuxはWindowsより3倍くらい楽で良かった^^

試行錯誤したら、どうやら、grub-installではgrubの設定(/boot/grub/grub.cfg)が作成されないためのようだ。それを作るコマンド(grub-mkconfig)はあるのだが、ライブメディアで起動したLinuxでコピーを実行しているため※、作成される設定は元々の設定とは関係ないものになりそうなので嫌だった。*

※コピー中に元のドライブの内容が変更されるのを防ぐため。

*今考えると、単に起動するだけであれば、ライブメディアで設定しても良さそうだ。が、現在の設定内容は自分で変更した箇所があるので、それが引き継がれないのは良くない。

仕方ないので、fstabと同様に、中のUUIDを新しいドライブのものに書き換えたものを使うことにした。

grub.cfgには「手で変更するな」という警告が書いてあるが、今回は仕方ない(ちゃんとやるのは面倒だ)し、実質的には複製した場合と同じことなので良しとした。

なお、最初は(トチ狂って?)grub-installは不要かと思い込んで試したが、見事に起動しなかった。ドライブのブートローダーはファイルとしては見えないので、コピーできないのだろう。ただ、なぜかgrubの画面が出たが、元々ラップトップ用Linuxのシステムドライブにしていたので、それが残っていたためだろう。

交換作業

最終的に、作業手順・内容は以下だった。

  1. 準備
    1. 新しいドライブ(東芝 SSD)の不良ブロックのチェック (badblocksコマンド)
      • 基本的に、寿命が残っているSSDでは不良ブロックは生じないが、数年間使っていなかったので回路・素子に問題が生じていないかや連続使用で問題が起こらないかの確認が目的である。
    2. 新しいドライブの内容(ラップトップ用Linux)をバックアップ (tarコマンド)
      • ラップトップ用Linuxのドライブが なくなると不便なので、別のものに移すことにした。
    3. 新しいドライブの内容を別の古いドライブ(Intel SSD)にリストア
      • 使ったUSB-SATAアダプタの電源アダプタのコネクタ(4ピン※)が今一つで、GNDが1本しか出ていないため、古いドライブではそのままでは電源がonにならなかったので、間にアダプタを入れた。
        • ※SATAの電源コネクタを壊してしまったため、4ピンを使った。
    4. 古いドライブにgrubを再インストール (grub-installコマンド)
    5. 古いドライブのgrub.cfgの修正 (起動ドライブのUUIDの変更)
    6. 古いドライブのfstabを更新 (ルートパーティションのUUIDの変更)
    7. 古いドライブでラップトップが起動するかの確認
  2. 移行
    1. 新しいドライブ(東芝 SSD)のフォーマット・パーティション作成 (gpartedコマンド)
    2. ライブメディアでLinux Mintを起動
      • コピー中にコピー対象のドライブの内容が変わらないようにするため、ライブメディアで作業した。
    3. 現在のドライブ(AData SSD)の内容を新しいドライブにコピー (rsyncコマンド)
      • データ量が少ないため、15分くらいで終わった。
    4. コピー内容のチェック (diffコマンド)
      • 基本的に、コピー時にエラー(中身の変化など)は起こらないが(起こるようならOSがまともに動かない)、念のためにチェックした。
    5. 新しいドライブにgrubを再インストール (grub-installコマンド)
      • 最初は、ブートディレクトリの指定を誤ったために起動しなかった。ドライブのトップでなく"/boot"まで指定する必要があった。
    6. 新しいドライブのgrub.cfgを更新する。 (起動ドライブのUUIDの変更)
    7. 新しいドライブのfstabを更新する。 (ルートパーティションのUUIDの変更)
    8. 新しいドライブをPCに取り付け・接続する。
    9. 新しいドライブで起動するかの確認
  3. 後処理
    1. 新しいドライブのSMART情報(属性)が、smartctlコマンドでちゃんと表示されるようにした。
      • 東芝SSDのベンダ固有情報を/etc/smart_drivedb.hに追加した。
      • 他の東芝のSSDになかった属性(7, 8, 10)については、CrystalDiskInfoの画面キャプチャを参考にした。
        • ただ、Seek_Error_RateなどSSDには関係ない属性なので、実は違うのかも知れない。
        • その点では、元々あったSpin-Up_Timeなども同様である。
    2. Muninで新しいドライブの情報が ちゃんと表示されるようにした。
      • ドライブの指定方法を修正し、新しいドライブの温度が表示されるようにした。
      • コピー(USB-SATAアダプタで接続していた)中に転送エラーが起こったようで、(smartctlコマンドがエラー64を返すために)SMARTのグラフが警告状態になったままで気分が悪いので、smartctlコマンドの代替(ラッパ)を作り、SMARTのエラー数が増えない限り「エラーなし」にするようにし、警告状態にならないようにした。

効果・感想など

新しいドライブは容量が以前の2倍くらい(128GB → 256GB)のため、交換後の空き領域がかなり増えた(約53GB → 約140GB)。なお、どちらのドライブも似たような性能らしく※、特段速くなったようには感じない。

※仕様上は新しいほうが速そうだが、未確認。

ただ、空き領域が増え、余命が伸びたので、以前はHDDに格納していたキャッシュなどをSSDに移動し、多少は高速化できたかも知れない。

が、体感上は分からずw

新しいドライブは、アイドル時の温度が以前のより2℃くらい低い(室温で約33℃ → 約31℃)のは、「ちょっといい感じ」なことである。

が、この辺りの温度での小さな差は、実質的な効果はない。

なお、元のドライブはPCに付けておき、非常時の起動用にしようと思っている。常時ミラーリングなどできるといいが、容量が小さいので簡単ではないし、古いドライブの寿命が縮まるので良くない。

更に、元のドライブの電源を繋げておくべきかどうかについても悩ましい。: 電源を繋げておけば、中のデータがリフレッシュされて(期待)、いざという時に駄目になっている確率が減るが、電源on時間とともに寿命が縮むのであれば、繋げておかないほうが良いし、誤操作を防ぐという点でもそのほうが良い。

→ 「非常時」が そうそうあるとは思えないし、逆に、(データが消えるかも知れない)十年以上放置するということもなさそうので、繋げないことにした。 (7/16 4:59)

 

例によって、「いつも苦労してんな」だが、まあ、(僕の周りの)世の中なんて そんなものだ。

 

その後 (7/18 12:08)

使っていたら、いくつかおもしろい・良さげなことに気付いたので、列挙する。

  • なぜか、システムの負荷(uptimeコマンドのload average)が下がった。
    • 時々wコマンドやtopコマンドでシステムの負荷を見ると、以前はアイドル時でもload averageが1を超えていて、今一気分が悪かったのだが、交換後は1未満(例: 0.4)になっていることがある。
    • 理由は不明だし、使っていて体感的には特に変化はないのだが、気分は良くなった^^
      • システムドライブの交換後にキャッシュなどをHDDからSSDに移したため、システムドライブの遅延時間が減り(下記)、プロセスの待ち時間が減ったためではないかと想像している。
        • "load average"は、簡単に言うと「何かを待っているプロセス数」なので、各プロセスが何も待たずに実行されているほど少なくなる。
  • システムドライブ(交換したSSD)の遅延時間が減った。
    • Munin(システムの状況監視ソフト)を見ていたら気付いた(やっぱり、体感的には特に変化はない)。
    • 以前(ADataのSSD)は平均1ms程度だったのが、東芝のSSDに換えてから平均0.7ms程度になった。 (→ グラフ: 右から1/3以降は交換後)
      • SSDの速度の違いによるものだろうか。
  • HDDの温度を4℃くらい下げられた。
    • これもMunin(システムの状況監視ソフト)を見ていたら気付いた。
    • 昨日だったか、なぜかHDDの温度が上がって40℃くらいになったので、下げられならないか考えていたら思い付いた。
      • ドライブベイの前のファンは12cm(元々は8cmx2だったのを改造した)と大きく風量はあるが、中央部は軸のために羽根がなくて風が少なそうだ。
      • 一方、HDDはその辺りに設置しているので、風が少なくて冷却効果が弱いのではないか? (→ 写真: HDDは中段の黒)
      • そこで、試しにHDDとSSD(ファンの下半分の後ろにある)の位置を交換してみたら、意外にうまく行って、4℃くらいも下がった(例: 40℃ → 36℃)。 (→ グラフ: 中央辺りで位置を換えた)
        • ファン中心部の風が少ないのなら、ファンの直近に冷やす対象を置くのは得策でない(場合がある)ようだ。少し離して、風を均一にするようなものがあるといいのか。
      • ただ、なぜかSSDの温度が1℃前後上がってしまった。
        • それで、SSDも風の強い部分(ファンの上半分の後ろ)に設置したり(→ 写真: HDDを下段に、SSDを上段に)、通風や放熱を改良したが、今一つ効果がなかった。
        • HDDの温度が低くなったために、ファンの回転数(ドライブの温度で制御している)が100rpmくらい下がって風が少し弱くなって、SSDの温度が上がったのではないかと推測している。
        • 書いたあとで写真を見ていて気付いたが、SSDの前のファンの前はケースの開口の境目で穴がなく、吸気が悪そうだ。これも関係あるのだろうか??
          • (7/19 5:24) 試しにベイに縦に設置してみたが、SSDの温度は下がらなかったので、関係なさそうだ。
            • ファンは回転しているので、吸気側の部分的な障害物の吸気効率への影響は全体に及ぶのではないか。
        • (7/20 13:21) 随分いろいろ試したら、SSDの温度を1-2℃くらい下げられた(かも知れない)。
          • 空調(冷房)にも影響されるので まだ安心できないが、ここ数時間はOKだ。 (→ グラフ: 緑の右側約1/3以降はSSDの平坦な面を下にして取り付けている。なお、左から2/3は凹みの広いラベル面を下にしていた。)
          • 効いたと思われることは、SSDのケースの平坦な面(ラベルのない側)をトレイに直接固定したことである。
            • なぜか、その面にはネジ穴がなく、(その反対側の)ラベルのある面を下にして設置する想定のようだが、その面はほとんどが凹んでいて(上の写真を参照)密着性が悪く、熱伝導も悪いのではないかと考えた。
              • こうする前は、想定どおりにラベル面を下にして居たが、少し放熱が悪かった印象だ。
              • ただ、ラベルのない面の内部は基板の裏面で、ケースがチップと接していないため(実際にラベル面で接しているかは不明)、放熱性はラベル面より劣りそうだ。が、トレイとの接触面積が広いほうがケースが冷えるので得策だと考えた。
            • また、マウンタを介すと、上と同様に凹みがある面でマウンタに接するうえに、マウンタはトレイにネジでしか接しないために熱伝導性が劣化する気がしたので、マウンタは使わないことにした。
            • それから、当然ながら、ファンからの風が ちゃんと(冷たい・直接・抵抗なく・分散せずに)ドライブに当たるのは重要なので、ベイ への設置方法も いろいろ試した。
              • 結局、当初のように、風量の少なそうなファンの中央部を避けて羽根の上半分の中央辺りの直後にSSDが来るようにした。
              • また、効果は なかったようだが、SSDとHDDの間に予備のトレイを入れてセパレーターにして、ファンからの風が分散せずにそれぞれのドライブに達するようにした。
          • いずれにしても、良く言われている、M.2やNVMeの冷却とは温度が全然違う。が、上のような考え方で冷却性を高められると思う。
        • (7/21 14:59) 上で、SSDの温度が2℃も下がることがあるのは どうもおかしいと思って居たら、思わぬ失敗が発覚したが、それで冷却性を高める方法が分かった。
          • 最後にSSDをベイに装着したあと、PCケースの前面パネルの閉め方が不充分だったために隙間ができていて、ファンの吸気量が増えたためのようだ。
            • パネル下側のヒンジのピンが抜けていたために、下部が少し開いていた。
          • それに気付いて前面パネルをちゃんと閉めたら、SSDの温度は1℃上がり、温度低下は1℃になってしまった。
          • ただ、怪我の功名で、比較的容易に吸気量を増やして冷却効率を向上させられることが分かった。
            • 前面パネルの側面の開口(吸気口)を広げればいい。
            • 吸気口はスリットになっているので、その柱が吸気抵抗になっているのだろうから、それを減らして開口を広げることにした。
              • 実物の構造を見て、右側はスリット部を下から約13cmを切断し、左側はスリットの柱を1/3に間引いた
                • ありがたいことに、スリットは前面パネル本体とは別の部品になっていた。
                • 右側は特に強度に寄与していないので、切断しても問題なさそうだったが、左側にはパネルを閉める爪が付いているため、切断は難しかった。
          • 作業後、無事に昨日のようにSSDの温度が1-2℃下がった。 (→ グラフ: 緑の右端から1/4以降。その前はケースの前面パネルを ちゃんと閉めていた。)
    • SSDの温度がわずかに高くなったのは少し気分が悪いが、そもそも実用上は全く問題ない領域なので良しとした。
      • ↑その後、上記のようにSSDの温度が高くなったのが解決できた(見込み)。 (7/20 13:21)

 

(7/16 4:59, 8:47 修正・加筆; 7/18 12:08 「その後」を追加; 7/19 5:24 「その後」に追記; 7/20 13:21 「その後」に更に追記; 7/21 9:24 若干修正; 15:18 「その後」にPCケースの改良について追記)

  •  1
  •  0

換気扇の換気効果・能力を知りたくて、CO2センサを買い、自動測定・記録・グラフ描画できるようにしたら、本当に いろいろなことが分かった。

どうして買うことにしたかというと、外からの臭いの侵入を防止しつつ、換気効果が充分な換気扇の動作設定(on/off比・周期)を調べたいと思ったのだ。また、その頃(先月-今月頭)は結構体調が悪かったし(今も まだ完全ではない)、毎日のように夕方近くに頭痛薬を飲むほどの頭痛が起こっていたので、それがCO2の影響なのかも調べたかった。

以前買ったC国製の臭いセンサ JSM-131SC※が使えればよかったのだが、そもそも出る値が怪しかったし、先日、経産省のガイドラインでチェックしたら駄目なことが分かったので、新たに買うことにした。

※今は同じ型番のものは ないようだが、青い縦長(下半分が少し細い)で数字が4行で表示され、画面の下にボタンがX型に5個配置されたもので、CO2, TVOC, HCHOが測定できると うたっているもの(例: 写真: 右側)は同じだろう。

なお、表示行数が多く、ボタンが画面の下(写真の"Air Quality Detector"の部分)に横一列に配置されているもの(カラー液晶のものが多い)やケースの形状が異なるものの画面表示が同じものも同類と推測する。

近頃、それらのCO2センサを上記ガイドラインに沿うもの(NDIR式)に換えたものを見た気がする。

(6/19 19:53) そういう いい加減なセンサを一発で見分ける方法が分かった。TVOCの表示がある場合、単位が"ppm"ならアウトだ。TVOCの量を示す単位はμg/m3だ。「TVOCは*(例: トルエン)として測定している」というような注釈があれば別だが、なければ、作っている人が何にも考えてない証拠だ。ただ部品を集めて組み立てて、「(なんか分からないけど)数字が出ればOK」というだけ。

というのは、TVOCはいくつかの揮発性物質の総量なので、ppm(parts per million)では表せないからだ。TVOCをppmで出すのは、「財布の中にお金が何個ある」と言うようなものだ。コインと紙幣の総数を調べるようなものだが、一体どういう意味があるのか。

まあ、μg/m3でも同様な気もして来たが、こっちは財布で例えればコイン全部の重さなので、個数よりはマシだろう。

結局、安価なセンサでTVOCを出しているものは全部アウトで良さそうだ。手頃な価格でTVOCをなす物質(現在は13種類)それぞれの濃度を調べて総和できる訳がない。いい加減にしろだ。

(6/23 7:48) 余談というか駄目押し。: 上のクソなC国製センサの箱には誇らしげに"RoSH"と書いてあった。(フォントが同様なので)RoHSの間違いか わざとか分からないが、RoHSすら分かっていないか誤魔化しているのかも知れず、そういうところでも見分けられそうだ(まあ、箱は買わないと分からないことが多いが)。

調べてみたら、手頃な価格で(測定・計測マニアの)僕にとって まともな製品は少なかった。: 例えば、「日本製」をうたっていても、(僕にしてみれば)いい加減なものが多かったのは残念だ。「日本で組み立て」しただけで、製品企画とか検査とかサポートなどが ちゃんとしてないのなら、単に高いだけなのでC国製のほうがいい。

主要部品がC国製で、ただ それを使って組み立てているだけで「日本製」って言うのは、先日のアサリなどと同じでは?

そして、コロナの影響か、「ぽっと出」の会社が上述のガイドラインに合う(だけの)ものを出していたり(売れると思ったんだろう)、以前のクソなC国製製品のセンサをガイドラインに合うもの(化学式 → NDIR(光学)式)に換えただけの(と思える)ものが結構あった。

(細かい話) 調べて分かったことだが、ただNDIRのセンサにすればいいという訳ではなく、センサ自体の精度はもちろん、2波長方式でないと安定性や経時変化が良くないようだ。

それから、NDIRセンサは光で測定しているためか、あまり小さいものでは良くなく、長いもののほうが精度がいいという情報もあった。素人だけど、確かにそういう気がする。

NDIRに換えただけのものは ここまでで落ちる。

あと、「自動較正」を うたうものは一見便利そうだが、使用環境について結構危うい仮定・想定(= 使っている場所は、定期的に(例: 毎日1回)屋外と同等のCO2濃度(約400ppm)になる)をしているので、結構な落とし穴になる。かといって、単にそれを止めればいいものでもないから難しい。 (詳しくは後述)

自動較正を止められないものは ここで落ちる。

残った候補はどれも完璧ではなかったが、少し不安はあったものの、CO2-mini※という製品を買った。約6800円だった。

※USのCO2Meter.comという会社の製品(CO2Mini)を日本のカスタムという会社が自社ブランドで発売しているもののようだが、元々は台湾(ZyAura ZGm053U)あるいはロシア(Master kitまたはDadget MT8057MT8057S?)の製品のようだ。複雑な経緯だが、CO2Meter.comのページを見るとなかなか ちゃんとしているので、それなりに信頼できそうだ。

製品候補と評価

僕のCO2センサに対する要求条件は以下である。

  • NDIR, 2波長型センサ
  • 単体で使えるもの(クラウドベースやスマフォ必須でない)。
    • 可能ならPCに繋がる。
      • 通信の仕様が公開されている。
  • 価格: 1万円以下
  • 可能なら、温度, 湿度が測れる。
    • 更に可能なら、気圧, HCHO, CO, PM2.5なども測れる。

検索して比較した製品と、それらの仕様や口コミからの評価(個人的印象)を書く。

  • × NETATMO (リンク先は並行輸入品): 有名だしNDIRだが高い(3万円くらい)のと2波長でなさそうなのとCO2は手動測定らしいのとクラウドベースなので却下
  • × Awair (リンク先は違うかも知れない): 悪評が多いので却下
  • × LinkJapan eAir: 高い(2万円くらい)のと較正が面倒とのことなので却下
  • × GiA, Prana air SQUAIR+: Amazonにないので却下
  • × Huma-i: NDIRでないので却下
  • × ピピっと換気君, TOMO-CO2-002: 1波長のようなので却下
    • これと同じ外観の格安粗悪品が出回っているとのこと。
  • × OMNI HCOM-JP003: 1波長のようなので却下
    • 画面表示から想像すると、C国製のセンサをNDIRにしたようなものか。
    • このメーカーは質問を無視したので、たとえ機能・仕様が良くても却下した。
  • × EPEA-CO2-NDIR-07: 1波長なので却下
  • △- EPEA-CO2-NDIR-08: 「2波長」と書いてあるが、証拠がない(センサのデータシートに記載されていない)ので却下した。
  • △ ポケットCO2センサーPro: 2波長だが、高い(約2万円)のと自動較正を止められないので却下した。
    • ディスプレイなしのもの(Lite)にディスプレイを後付けしたため、使い勝手が考慮されていないのも良くない。
      • 通気穴が上下にあるのとUSBケーブルが邪魔になるので、ディスプレイが見えるように立てて置くことができない。
  • マーベル001: 製品としては妥当そうだったが、高い(1.7万円くらい)ので却下した。
  • Custom CO2-mini: 2波長、PCに繋がり、値段も妥当(約7-9千円)で、ほとんど問題がない。
    • 気になったこと
      • 精度が今一つ(±100ppm), 湿度補償がない。
        • センサが長く、精度が期待できそうな感じもしたが、仕様上は良くないようだ。
      • PCへの接続は可能だがサポートされていない。
        • データに変な暗号化がされており、ちょっと厄介・筋が悪い印象。 (→ 購入後に分かったのだが、数年前に暗号化が解除されていた。: 後述)
      • (口コミ) 当たり外れがある。
      • (口コミ) ディスプレイがCO2濃度と温度が交互表示で不便 → 目障りになる可能性がある。
      • (口コミ) 高周波音(10kHzくらい)がする → 耳障りになる可能性がある。 (→ 購入後にチェックしたが、高周波音は検出できなかった。後述: 6/15 16:21)
  • △- Radiant ZGm27: 2波長、約1.3万円で機能は妥当だったが、下のモノタロウのほうが同様な機能なのに安くて良さそうだった。
  • △ モノタロウ CO2モニター NDIRセンサー式: 2波長、約1万円で良さそうだったが、質問への回答が遅過ぎたのとPCに繋がらないので却下した。

上で△にした4つが「最終選考」に残った。

  • PCに接続する場合
    • ○ CO2-mini
      • 一番製品として出来が良さそう(まとまっていそう)。
    • × ポケットCO2センサーPro
      • 自動較正を止められないから却下。
  • PCに接続しない場合
    • × CO2モニター (モノタロウ)
      • 質問への回答が遅過ぎた。
    • × マーベル001
      • 高いので却下。

結局、一番出来が良さそうなうえにPCに繋がるCO2-mini(以下、USに合わせてCO2Mini)にした。

CO2Miniで気になること(上述)については、精度は そこまで求めないから良し(ただし、経年変化は抑えたいので2波長がいい)、PCへの接続は検索すると いろいろな例があるからできそうだし、できなくても「+α」なので良し、当たり外れは最初の数か月で分かる(1年保証)、高周波音があったらケースを何とかする、交互表示は我慢しようと考えた。

CO2Miniを使い始める。

Amazonに注文したら翌日に届いた。約6800円だった。早速動作確認したら、(運良く?、)全く問題なく動作した。また、上記の経産省のガイドラインでチェックして問題なかった。: 呼気で値が上昇し、アルコールの影響はなく、屋外では充分に値が下がった(10分くらいで約420ppmまで下がった)。

一方、上述のJSM-131SCでは呼気以外は すべて駄目だった。更に、居間でCO2Miniと一緒に測定したら、CO2濃度の値も変わり方も全く合っておらず、全くデタラメなものだと分かった。 (写真: 左: CO2Mini: 995ppm, 右: JSM-131SC: 523ppm)

気になって居た高周波音は聞こえず、バックライトがなくて明るくないせいか、ディスプレイの交互表示は気にならなかった。

ただ、見たい表示と違う場合に待つのが面倒なことがある。が、(後述のように)PCで状態が分かるようにしたので、ディスプレイを見る必要は ほとんどなくなった。

それから、例によって「ちょっと改良」して(背面の通気が悪そうだったので、背面パネルをメッシュにして机上の明るさ・温度センサ(YL-40)のベースの上に設置した(ベースの厚みのため、少し持ち上げる脚を付けた※)。

※脚は、いつもの楽天のポケットWi-Fiの緩衝材をテキトーに切って作った。

(6/23 14:11) 測定を続けているうちに、どうも室温が変わる時にCO2濃度が異常な値になる(大きくなる)ことがあるような感じがした。背面パネルと換えたメッシュは通気が良過ぎるため(保温が悪く)、CO2センサと温度センサ(内の空気)の温度が食い違って正しい温度補正ができず、濃度がおかしくなるのではないかと推測した。それで元々のパネルに戻したら、YL-40の温度(室温)との差が大きくなる(とは言っても±0.5℃以内だろう)ことはあるものの、CO2濃度は確かそうな値になった。

なお、設置位置や置き方にも変更があるが、別の稿に書きたい。

CO2MiniをPCに繋ぐ。

PCに繋ぐのも思って居たより簡単で、届いた日の夕方には出来てしまった。そのためのソフトを探すと いろいろなものがあるが、製品を選んでいる時から参考にしていた、インテックス 平林さんの「CO2 計測 - USB」(2017)に載っているLinux用を試したら、ちょっと修正した※だけで動いた(→ 最初に取れたデータをスプレッドシートに取り込んでグラフにしたもの)ので、それに手を入れて使っている。

※以前は、CO2Miniのデータは暗号化されていてデコードする必要があったが、近頃のものは暗号化されなくなったようで、そのままではデータが読めなかった。が、少しいじってみたり、データをダンプしてみたりしつつ、「物は試し」でデコード処理をスキップしたら読めるようになった。CO2Miniからのデータ取得で苦労したのは ここだけである。

そのプログラムはソースファイル名が"a.c"だったりと、かなりワイルドな感じではあるが、一発でコンパイルできて起動した(ただし、上記のように製品の仕様が変わったために、そのままではデータは取れなかった)ので、例とかサンプルとしては必要充分なものだと思う。逆に、やたらに機能を豊富にされると、本当に必要な部分が分からなかったり、抽出が難しかったり、依存関係で問題が生じて使えなかったりするので、これでいい。僕のスタイルとは随分違うが、悪い印象は なかった。

ただ、実行プログラムにsetuidするのは控えたいので、sudoでrootで動かしている。

参考までに、オリジナルからの変更内容は以下である。

  • プログラムの名前を"co2mini_daq"に変えた。
  • 一定時間ごとにデータ取得を繰り返すようにした。
    • 取得間隔は1分にしている。
  • データを取得した日時をデータの前に出すようにした。
  • CO2MiniのデータがUSBのバッファに溜まって遅延するのを防ぐため※、取得間隔以内でも連続してデータを取得し、それらを平均した値を出力するようにした。
    • そのため、CO2濃度も浮動小数点で出る。
    • ※本当に溜まるのかは分からないが、CO2Miniを抜いても しばらくデータが出続けていたので、溜まっていると考えた。
  • 仕様に書かれていない「謎のデータ」(タイプ(item)が"P", "B"以外のもの)も出力するようにした。
    • 本来のデータと区別できるように先頭に"#"を付け、行数を減らすため1行にまとめて出す。
  • エラー処理・リトライ処理を追加した。
    • 例: CO2Miniを抜いても、再び挿せば(別のポートでもOK)データ取得が再開される。

CO2Miniを使い倒す。: 自動測定・記録・レベル表示・グラフ化できるようにした。

簡単にPCに繋がったのに気を良くして、CO2Miniから取得したデータ(CO2濃度, 温度(≒ 室温))をログに記録し、CO2濃度に従ってデスクトップ(Xfce)のパネル(タスクトレイ相当)に本体のランプ的なインジケーター(水色: 低※, オレンジ: 中, 赤: 高)を出すようにしマウスオーバーで濃度と温度が出るようにした。

※本体のランプの低は緑だが、緑は少し浮くのと余り好きでないので、(どちらかと言えば嫌いでない)水色にした。あとで気付いたが、空気が綺麗なイメージにも合って良さそうだ。

また、測定データ(CO2濃度, 温度)をPCの状態表示ツール(Munin)でグラフに描けるようにできた。※ これで、それまでのようにデータが記録されたログファイルをスプレッドシートにインポートしてグラフを描くなんてチマチマした作業不要で、待っていればグラフが出来ているようになったから、とりあえず何も言うことはないw(とはいえ、いろいろテキトーだし、まだやりたいことはある)。

※ついでに、CO2Miniの温度(≒室温)はYL-40での室温に どのくらい近いか調べたいのと、室温とPCのCPUやマザーボードの温度の関係を確かめたかったので、そういうグラフも描くようにした。

CO2Miniの感想・メモ

期待していたよりずっと いい(ちゃんとした)もので良かった。こういうのは久し振りだ。強いて挙げるとすれば、以下のような「ちょっとしたこと」があった。

  • 上にも書いたが、背面の開口(穴)が小さくて通気が悪そうな気がした。
    • 実用上は問題ないと思うが、反応速度が遅くなりそうな気がしたので、手元にあったメッシュ(アンプのカバーに使った残り)に交換してみた。
      • ただ、実際に使ってみると、メッシュでも反応速度が遅い場合もあって、効果は良く分からない。気流などの要因もあるのかも知れない。
  • 温度の精度は今一つな感じ。(ただし、充分に仕様(±1.5℃)の範囲内)
    • 室温測定に使っているYL-40の温度センサと比べると、0.5℃未満(概ね0.3℃くらい)でズレることがある。
    • 平均値はYL-40と概ね合う(差は0.2℃程度)。
    • CO2濃度(精度±100ppm)もそうだが、余裕を見て(ワーストケースを考慮して)実際より悪目の精度を仕様に出しているのかも知れない。
      • 正直者? 逆サバ?w: 僕は こういうスタンスのほうが好きだ^^
  • 湿度や気圧は測れない。 (仕様にないので当然)
    • CO2MiniからはCO2濃度と温度以外に謎のデータ(複数)も出て来るので、そのどれかが湿度や気圧ではないかと思って ちょっと試した※が、駄目だった。
      • ※値がそれらしくなる計算をした値と、温湿度計の湿度やアメダスの気圧を比較した。
    • それらを少し解析した情報があったが、結局分からなかった。
    • 却って気になる・・・
    • まあ、それらが補正に必要で測定できているなら温度同様に表示・出力するだろうし、仕様に書くはずだ。「書いてないものは付いてない」というセオリーどおりである。
  • (僕の個体では、)口コミにあった高周波雑音(10kHz辺り)は出ていない。
    • オーディオ調整用コンデンサマイクで測定したが、3-20kHzの間にCO2Miniから出る音は検出できなかった。
      • CO2Miniの電源をon/offして比較したが、スペクトラムに顕著な違いはなかった。
        • スペクトラムの18kHz辺りの山は、CO2Miniの横のディスプレイからの雑音と考えられる(マイクを離すと小さくなるため)。
        • 同じく8kHz辺りの山は、測定を停める時のマウスクリックに伴う雑音である(クリックするたびに音量が変わり、今回はoffのほうが大きい)。

以下は備忘録である。

  • 背面カバーは爪で固定されているだけなので、容易に開けられる。
    • 設定ボタンが どこにも固定されていないので、背面カバーを外すと落ちる。
    • カバーを付ける場合は、カバーを机などに置いて穴にボタンを入れ、そこに本体を被せる。
  • CO2Miniに作業した直後はCO2濃度が高く出る。
    • センサ温度に関係しているようで、温度が高いと濃度が実際より高く出るようだ。
      • 温度が正しくなるまで待てば良い。
  • CO2MiniのUSBデバイス名は"USB-zyTemp" (04d9:a052)。

以下に各種情報ページを列挙する。

  • Reverse-Engineering a low-cost USB CO₂ monitor (2015)
    • CO2Miniの暗号化を解読した話
      • 随分苦労したようだけど、暗号化されなくなってしまった・・・
  • USB Communication Protocol for CO2mini (2019)
    • CO2Miniの(暗号化が解除されたあとの)通信仕様 (公式)
  • CO2-miniの通信が暗号化解除されていた (2020)
    • CO2Miniからデータ取得するプログラムを手直ししたあとに見つかった。
  • CO2MeterHacking (2018)
    • 機種が違うため湿度が取れているが、CO2Miniでは常に0しか来ない。
  • CO2-miniを分解してみた (2021)
    • 買う前に内部が見られて参考になった。
  • CO2 + Temperature sensor based on MT8057 and ESP (2019)
    • ロシア語(マニュアルなどは英語), センサなどのマニュアルとプログラム
    • CO2Miniのものとは仕様が異なる。
  • Software for CO2 Monitor (2015)
    • データ取得プログラム (同様なものが新旧多数あり)
  • ZyAura CO2 & Temperature & Humidity Sensor (2021)
    • CO2MiniをESP homeとかいうものに組み込む情報
    • CO2Miniのシリーズは いろいろあるようだ。: MT8057, MT8057S, MT8060, ZGm05, ZGm053U, ZG1683R, ZG1583RUD
  • Предупреждён — значит, вооружён. Часть 1 (Warned - then armed. Part 1) (2015)
    • ロシア語, CO2Miniを使った いろいろな実験? (読めないので詳細不明)
      • ドアや窓に隙間があるほうが換気が良いということなどが書いてあった(どのパートかは忘れた)。まとめからも、この人は そういう居住環境のことをしている方だろうか。
    • Part 3まであり、3では実験の他に内部を少し解析している。
  • MT8057 Детектор углекислого газа (MT8057 Carbon dioxide detector) (2015?)
    • ロシア語, MT8057(この辺りがCO2Miniのシリーズの発端?)の販売ページ(今は終了)。
  • Обзор измерителя углекислого газа CO2 (Overview of the CO2 carbon dioxide meter) (2015?)
    • ロシア語, 構造や仕様の説明など。詳しいことが書いてあって、なかなかためになる。
    • センサの期待寿命や較正頻度も書いてあった。: MT8057とCO2Miniのセンサは同じもののようなので、寿命は5-10年くらいで較正は3年ごとで良い感じだ。
      • "ie. the sensor’s life time is 5-10 years. It is necessary to calibrate the sensor approximately once every three years."
  • Управляем вентиляцией с помощью детектора углекислого газа MT8057 (We control ventilation using the MT8057 carbon detector) (年不明)
    • ロシア語, CO2Miniにリレーを付けて換気扇を制御する、いかにもロシア的な改造。
      • なかなかおもしろそうで、こういう乗りは大好きだ^^
      • ページの下の方の出来上がり図的な写真に にこやかに(不自然な)ポーズをとる女性だけでなく、猫ちゃんが ちゃっかり写っているのがいい。きっとロシアでは普通の構図なんだろうけど、妙に新鮮だ。
        • それにしても、出窓なのかも知れないけど壁が分厚い。一方、寒そうなのに二重窓ではなさそうだ。

部屋のCO2や臭いに関して分かったことなど

まだ数日しか使っていないが、以前は分からなかったことが大分分かった。ちゃんと測って状況を正確に把握するのは重要だと再認識している。

  • JSM-131SCは全くあてにならないデタラメ、crapだった。
    • CO2Miniの半分くらいの値が出る(比較した時点での話)。
    • 換気しても値が変わらない。以前は変わったが、別の要因(TVOC系?)で変化したようだ。
  • CO2Miniを導入する前の換気扇の動作設定(On: 23%, 7分)では換気が不十分なようで、CO2濃度は1100ppmを超えていた。その設定ではCO2が減らず溜まる一方だったようだ。
    • その状態で換気扇を連続して回すと、10分くらいで値が1000ppm近くまで下がり、空気が綺麗な感じに近付いた。
    • そこで、換気扇の動作設定を修正して なるべく800ppm以下を維持するようにしたら、以前より随分良くなった。
    • 冒頭に書いた、午後になると起こる頭痛はCO2が溜まって起こったのかも知れない。
      • 元の換気扇の動作にして本当にCO2のせいだったかを確かめることは可能だが、頭痛だの不調になるのは嫌なので、気が進まない。
        • まあ、確証はなくても改善できたので良しとしたい。
  • (上の理由として考えられること) 換気扇の間欠動作の換気能力が想定(計算)と合わなかった。
    • 換気能力がon(回す)率に比例しないようで、on時間が短いと換気能力はon率から求めた値より低い。
    • On時間が15分以上なら、想定に近い換気能力が得られる感じ。
      • 30分だと充分良い。
    • その理由は分からないが、以下を推測している。
      • 換気扇を回してから換気効果(例: CO2が減る)が出るまでに時間が掛かる(遅延時間)。
      • ステップ応答みたいなもので、on率=出力振幅にならない。
        • 空気の動きに対する部屋の特性はLPFみたいなもので、急な変化は減衰して効果が小さくなってしまう?
        • ただ、その「減衰した分」がどうなるか謎。
      • On時間と排気(換気)量は比例するのかも知れないが、換気扇近く(人が居ない)の空気はCO2が少ないため、「遅延時間」部分の排気はCO2の低減に寄与しない?
      • 空気に慣性があって、長く動かすと気流ができて排気効率が上がる?
        • 実際、長く回していると風(気流)を感じる。
    • → そのため、換気扇の間欠動作の各モードの設定を変更し、基本的にはon時間を30分以上にしている。
      • いろいろ試したところ、on/offそれぞれ30分(on率50%)なら、この部屋で一人で安静にしている場合にCO2を漸減できるようなので、それを標準の動作モードにしている。
  • 外の空気は(意外に)綺麗。
    • 玄関の辺りで測ったら、10分くらいで420ppm前後(ほとんど自然の最低値)になった。
  • どういう訳か、朝(7-8時頃)にCO2濃度が上がる。
    • その頃に食事して代謝が活発になるせいか、近くの道路が通勤で混んで車の排ガスや中での喫煙や、近くの工事の関係かと想像しているが、まだ分からない。 → 更に観察が必要である。
      • 食事であれば、昼や夜も上がるはずだが、必ずしもそうでもない。
      • 道路が空いていても上昇することはある。
      • 工事がなくても上昇することはある。
  • (当然ながら、)部屋に人が居なければCO2濃度は下がる。
    • 人によるCO2濃度の増加は意外に大きく、人が居なければ換気効率が随分向上する(CO2濃度の減少が大きい)。
    • 人が部屋に居ると かなり換気しても400ppm付近までは下がらないので、自動較正は不可能(逆効果になる)。: 詳細は後述。
      • 無人で換気扇を連続して回せば可能かも知れない。
        • → 外出した時に試したら、CO2濃度の減少速度は約-200ppm/hくらいで、400ppmまでは下がらなかったが、もう少し長ければ行けそうだ。
  • (これも当然ながら、)部屋で火(ガスコンロ)を使うとCO2濃度が激増する。
    • 10分くらいで250ppmくらい上がった。 (→ グラフ: 右端)
    • 「火を使う時は換気扇を回せ」ってのは十理あるw
  • 部屋に嫌な臭いがない時に感じる「空気が綺麗な感じ」(いわゆる「新鮮な空気」的)はCO2濃度とは関係なさそう。
    • → 臭い物質とCO2は同じではない(それは そうだ)。ただ、部屋に空気が入るところで物質がフィルタリングされる訳ではないから、臭いのない状態でCO2濃度を下げるようにすれば臭い物質の濃度も下がるはずだから、その方針は悪くなさそうだ。
      • ただ、(以前も書いたが)外が臭い場合には どうしたらいいかが分からない。
    • 一方、CO2には臭いはないものの、濃度が高い場合には臭いを感じるという情報を見た気がするので、CO2濃度が高いために部屋に嫌な臭いがするように感じる場合もあるように思う。
      • そうでなくても、部屋のCO2濃度が高いということは臭い物質も溜まっているだろうから、それだけ臭くなる確率が高いことは確かだ。

今後やりたいこと

CO2濃度の自動測定が出来るようになり、(先日書いたように)PCから換気扇のリモコン(換気強度の設定)も出来るので、それらを繋げればCO2濃度に応じた換気扇の自動制御ができる。例えば、いつもは弱めの換気強度(換気扇の動作モード)にしておき、CO2濃度が高くなったら しばらく(例: 15-30分)回すなどである。あるいは、CO2濃度に応じて自動で換気強度を切り替えることも考えられる。

あと、季節に応じて換気強度を変えることも考えられる(冬や夏に換気し過ぎると空調が効かなくなりそうなので)が、空調のために換気を弱めるのも良くないから、余り調整の余地はないかも知れない。

なかなか おもしろそうだ(実際にやると疲れるが)。

CO2センサの自動較正機能について

CO2センサには自動較正/校正/補正機能があるものが多い。いくつか種類があるが、基本的には、ABC(automatic baseline calibration)と呼ばれる方式である。調べてみると余りにも乱暴な方式なので、僕は即座にoffにしたくなった(実際、CO2Miniの電源を入れて すぐにoffにした)。というのは、(上にも書いたが、)測定地点が定期的に(例: 毎日1回)屋外と同等のCO2濃度(約400ppm)になることを想定し、決められた期間の中で最低の濃度が(例えば)400ppmであるとして測定値を補正(引き算)するだけのものだからだ。

「あのぉ、屋外は確かにCO2濃度は低いけど、その値は場所や季節や時間で かなり変動するし、そもそも測定場所が屋外と同じように綺麗になる保証は ないんじゃないすか?」と言いたい。

これがどういう問題になるかというと、自動較正が起こるたびに値がふらつく(較正前後で不連続になる)のは確かだし、CO2濃度が常時低くならない場所では確実にCO2濃度が低く出るし、そうでない場所でも長く使うと表示されるCO2濃度が低くなっていくかも知れない。

確かにセンサの経年変化を補償する必要はあるし、その点で これは便利だから あってもいいが、on/offできなかったら話にならない。※ 実際、検索したら、この機能があるのを知らずに農業(ビニールハウスだったか)に使ってしまい、あとからoffにしていると思われる例が出て来た。

※Offにできない製品は、企画段階で使い方の検討が不十分だとか、そもそも詳しくない人が作っている可能性がある。もし、常にonで使っても問題ないような特別な用途・場所向けの製品なのなら、そういう注意を書くべきだ。いずれにしても、会社の見識や真面目さが疑われる。

偶然にも、上のCO2Miniのデータ取得プログラムの平林さんも僕と同様な意見なので安心した。以下、少し長いが、その「CO2 計測 - USB」から引用する。

多くの簡易測定器で使われているのは ABC Calibration(Automatic Baseline Calibration) と呼ばれる方法で、 週に一度は無人で CO2 発生源がなく、 測定場所の CO2 濃度が外気と同じになるだろうという期待に基づいたものです。 つまり、8 日間といった区間に於ける CO2 濃度の最低値(base line)を 400 ppm に校正してしまいます。 しかし、住宅、オフィスなどの施設は常時居住者が居て、 CO2 の最低レベルは 600 ~ 800 ppm になりますから、 これを使うと実際の濃度より 200 ~ 400 ppm 低い測定値が得られ、 大きな誤差が出ます。

以上のようなことから、僕だったら、経産省のガイドラインに「自動較正機能があるものはon/off切り替えが可能なこと。」と その理由、on/off設定の目安を入れるだろう。

なお、購入したCO2Miniは その自動較正をon/offできるのはいいが、その場のCO2濃度で即座に較正する機能はなく、自動較正し続けるか8日後に1回だけ自動較正するという設定しかない。

それで、仮に経年変化を較正するには どうしたらいいか考え、以下のようにしようとしている。

  1. 経年変化を較正する時、「8日後に1回だけ自動較正する」設定にする。
  2. 屋外にセンサを持参してCO2濃度が充分低い状態で充分(1時間くらい?)待つ。
    • → その値が最低値として記録されるはず。
  3. センサを元の場所(室内)に戻す。
  4. → 8日後に、屋外で記録された低い値で較正されるはず。

この時に問題になるのは、屋外で測定する時と部屋に戻る時にセンサの電源をonにし続ける必要がありそうなことだ(センサにはバックアップ電池や時計はないから、電源を切ったら「8日間」というのが分からなくなってしまう)。そのため、モバイルバッテリーと補助電源の付けられるUSBケーブルを用意する必要がありそうだ。

そのケーブルには、モバイルバッテリーからPCに、あるいはその逆に電源が逆流しないような仕組みが欲しい。

あるいは、(上に少し書いたが、)換気扇を連続運転して外出して(部屋を無人にする)、部屋のCO2濃度を充分に下げられれば外に持ち出さなくて済み、補助給電可能なUSBケーブルなども不要だ。

試したら、長時間掛ければ行けそうな雰囲気ではある。 (グラフ: 右端近くで急に下がっている部分)

そもそも、どのくらいの頻度で較正すべきか調べたら、CO2Miniのメーカーのサイトの資料"AN131 – CO2 Sensor Calibration: What You Need to Know"には以下のように書いてあった。

How Often Should A CO2 Sensor Be Calibrated?

The more accurate CO2 level reading required, the more often it should be calibrated.
・ Scientific Experimentation – Before each test
・ Personal Safety – Weekly to monthly
・ Greenhouse – After each growing season
・ Manufacturing – Bi‐Annually to Annually
・ Indoor Air Quality – Annually, or not required if ABC is used

OEM品であろうCO2Miniが上と同じでいい保証はないが、ある程度の目安にはなる。僕は"Indoor Air Quality"レベルでいいので、年に1回(多くて半年ごと)で良さそうだ。

また、上の資料には経年変化の影響も書いてあり、

Over many years, both the light source and the detector deteriorate, resulting in slightly lower CO2 molecule counts.

と、「ちょっと低くなる」という感じなので、2波長センサで出荷前にメーカーで検査している前提であれば、余りシビアに考えなくても良さそうだ。

製品選びにまつわる クソおもしろくない話

(以下、「営業妨害」とか言われると面倒なので、会社名などは書かない。)

証拠のない機能・仕様を うたっている会社があった。センサ(素子)メーカーが公表していないことが書いてあっても信用しにくい。今まで書いてない機能が実装されていたことは ほとんどなかったから(あって価値が上がるものを書かない理由は ない)、逆に不信感が増す。例えば、そのセンサを分解して内部の写真を示すとかメーカーからの情報を載せるとか すればいいと思うが、なぜしないのだろう?

質問に回答しない会社があった。買わないと質問すらできないようで(そういう返事すらなしで単に無視された)、まあ、論外なので止めたほうがいい感じだ。

経産省のガイドラインに助言した人が、実はガイドラインの対象となる製品(CO2センサ)を出しているメーカーの関係者だったということもあった。更に、正体不明とも思えるページ(ページを出している会社名などが書いてない)で製品を紹介していたり(ステマ的に思えるが、あれは広告なのか?)、そこでも自分が関わった製品を所属大学の肩書(メーカーの関係者とは書いてない)で推薦していたり・・・

「息の掛かった」とか「お友達」ってやつ? どこにでも居そうだけど、大嫌いだ。

全体的に、コロナ需要で急に参入したとか、ガイドラインが出てから、従来は半導体(化学)センサだったものを急にNDIRセンサに換えたもの(もちろんC国製)が多く、眉唾が多い印象だった。

製品企画時点でのユースケース・仕様・機能の検討が不充分なものも多い。単に「組み合わせて動いたから売ろう!」みたいな・・・

安いとは言え測定器なので、精度などの検証や長期的安定性などの評価をすべきだが、そういう情報を根拠(エビデンス)も一緒に載せていないのは おかしい。それ以前に、精度などが書いてない(分解能は ある)かセンサ(素子)の仕様を転載しているだけ(= 自分で測ってない?)の製品が多く見られるのは おかしい。もっと真面目にやれって思う。

 

まあ、「魑魅魍魎が跋扈」って感じかも知れない。もちろん、個人的印象である。

  •  1
  •  0

少し前に、スマフォ(AQUOS sense lite)の電池が減るのが速くなった気がして※気になったのだが、古くなって電池が劣化して来たためではないかと思い、また、実際に測定するとバラつきがあって以前の値になったこともあるので、その時は問題ないと考えた。が、実はそうではなく、本当の原因は分からないものの、思わぬことで電池消費率(= 消費電力)が増えることが分かり、意外な対処で解消できた(と思われる)話。

※アイドル状態で大体1%/h(→ 1日で1/4くらい減る)で、以前は もう少し小さかった記憶がある。

発端は、ニュース記事で、あるMVNOがIPv4(以下、v4)のグローバルアドレスを割り当てるのを止めてプライベートに できるようにするというのを見たことだ。今時、スマフォにグローバルアドレスを割り当てること自体が時代錯誤(どうして そんなに確保してるんだ?!)だが、それを(客の要望で)プライベートにするのもおかしかった。わざわざそんなことをする理由は、グローバルアドレスが割り当たっているとスマフォの消費電力が増大するという説※があるからだ。

※詳しくは知らないが、グローバルアドレスの場合、ポートスキャンなどで頻繁に外からIPパケットが来て、そのたびに端末が動いて電力を消費する(と推測されている)ためのようだ。その説が本当かは分からないが、いかにも腰が重いプロバイダがわざわざ対処するくらいだから、正しいのだろう。

僕のプロバイダはプライベートアドレスだから、それ自体は僕には関係なかったが、ふと、IPv6(以下、v6)が気になった。IPv6は全部グローバルアドレスのようなものなので、上のv4と同様なことが起こるのではないかと思った。

それでスマフォのモバイル(LTE)設定を調べてみたら、一時はv6対応にしていたものの、その後気が変わったらしくv4だけになっていた。それで、LTEのv6に関しては問題なさそうなことが分かった。

が、LTEでなくWi-Fi(光)でも同様な問題がありそうな気がした。スマフォのOS(Android)はv6対応で、ルータにはファイアウォール(仕様は不明)はあるものの、それを通過したパケットには反応する。v6のアドレスは幅広いのでポートスキャンのパケットが来る可能性は低そうだが、ルータやプロバイダなどの管理用パケット(そういうものがあるのかは不明だし、頻度も不明)やPCからのパケット(ブロードキャスト)は届きそうだ。

そこで、スマフォのLTEだけでなくWi-Fiもv4だけにして試したくなった。

ただ、AndroidのWi-Fiだけv6を停めることはできず、全体のv6対応を停められるかはメーカー依存のようで、僕のは不可能だった。そうするとルータで切ることになるが、僕のルータ(I/Oデータ WN-SX300GR。以下、I/Oルータ)は普通の家庭用のものなので、LANポートごとどころか全体でもv6のon/offができない。※ もちろん、LANポートごとのフィルタリングもできない。プロバイダに頼んでIPoEからPPPoEに切り替える手はあるが、時間が掛かるうえに全部がv4になるため、PCまで遅くなってしまう。

※そもそもIPoEモードで使っているので、普通は そこでv6を停める意味がない。

そこで、もう一台、v6非対応のルータを使うことを思い付いた。手持ちの古いルータはv6非対応なので、元のルータにその古いルータを繋ぎ、古いルータのWi-Fiにスマフォを繋げばv6がカットされる はずだ。

実際には、古いルータでなく、消費電力が小さいため、死蔵していたコンパクトWi-Fiルータ(TP-Link TL-WR802N, ルータモード。以下、TP-Linkルータ)を使った。v6対応だが、非対応にできるので使えた。

以下のような構成・接続である。

WAN → [I/Oルータ] → [TP-Linkルータ (v6 off)] Wi-Fi → [スマフォ (v4)]
(光, IPoE)              +→ [PC (v4/v6)]

主な設定

    • I/Oルータ: スマフォが誤って接続することがないように、Wi-Fiをoffにした。
    • TP-Linkルータ
      • WAN(I/Oルータ)側: デフォルトルータとDNSサーバをI/Oルータに設定した。
      • LAN(Wi-Fi)側
        • DHCPサーバ設定(スマフォへ): デフォルトルータをTP-Linkルータに、DNSサーバをI/Oルータに
    • PC: スマフォへのルーティング設定(スマフォのセグメントへのルータをTP-Linkルータに)を追加した。

この構成は、良く駄目だと言われている「2重ルータ状態」だが、意外にメリットがあるのかも知れない。僕はスマフォの通信速度は全く求めていないから、これで全く問題はない。

試したら、確かにスマフォの消費電力が減った。大体0.2%/h減った。: それまでは0.8-1%/h辺りだったのが0.60-0.75%/h辺りになり、以前のような減り方になった。

次に、ルータとスマフォのWi-Fi接続の問題の可能性も考え、TP-Linkのルータをブリッジモードにして試したところ、消費電力は減らなかった。ブリッジモードはv6のパケットも通すので、予想通り、v6が原因の可能性がありそうだ。

とは言え、v6が原因でスマフォの消費電力が増えるというのは どうにも腑に落ちない。上述のv6パケットが(頻繁に)来る以外に、そもそもAndroidのv6の処理が重くて負荷が高いのかも知れない。スマフォが古いのでCPUパワーが追いつかないのか。

他に考え付くのは、スマフォとルータとの「相性」である。実際、TP-Linkルータに接続すれば消費電力は増大しないが、それが何によるのかは分からない。

I/Oルータのログは簡素なので特に何も出て来ず、調べようがない。

そういえば、I/Oルータに繋いでいる場合、(別の稿に書いた、)PCからスマフォの画像を自動取得する処理でスマフォに繋がらない(スマフォが見付からない)ことがあるが、TP-Linkルータでは ほとんど起らないので、何かあるのかも知れない。

例えば、しばらく通信がないと、I/OルータあるいはスマフォがWi-Fiの接続(いろいろな層があるとして、比較的下のほうではないか)を切ってしまうが、なぜかTP-Linkルータでは切られないということがあるのかと思っている。

その他の要因として、上記のスマフォの画像を自動取得する処理の負荷が考えられるが、PCをスリープさせていて自動取得が行われない時でも消費電力は減らないので、主因ではなさそうだ。

あと、問題とは直接関係ないが、スマフォの電池残量表示から消費電力を計算すると、たまに予想外に値が大きく・小さくなることがある。それは残量の誤差(正確には表示分解能)による場合が多そうだ。というのは、Androidが表示する電池残量は1%単位なので、実際の残量は 表示値から表示値+1%未満※まで(表示値-1%未満から表示値や、表示値±0.5%も ありうる)の間の「どこか」であるためだ。

※0.5%と考えると、比較的うまく行くのかも知れない。

1%単位の表示値から正確な残量を求めるには、連続して残量変化を調べて残量曲線の細かい区間の傾きを求めれば、中間の時刻での残量を計算することができそう(直線補間)だが、手では困難だ。

あるいは、残量が変化した正確な時刻と残量を記録し(そういうアプリは ある。例: My Battery Monitor)、(任意の時刻の残量でなく)それを元に消費電力を求めるのが良さそうだ(が、今となっては遅い。→ ちゃんと確認したいので、上記のMy Battery Monitorを再度入れた)。

実際、数時間(3時間など)では誤差が大きくなることがあり、10時間くらい見ないと確からしい値は得られなかった。

例: 残量差から消費電力を計算する時、開始残量表示が90%、3時間後の終了残量表示が87%の場合

普通に計算すると、(90-87)/3= 1.0%/h となる。

一方、残量の表示分解能の影響を考慮すると、終了残量(開始残量も同様だが、簡単のため、ここでは終了だけを考える)は 87-88%の間 と考えられる。それを仮に87.5%とすれば、(90-87.5)/3= 0.83%/h となり、上の値より17%も小さい。

もし、開始残量もズレていたら、更に差が大きくなる場合がある。

 

という訳で、スマフォの電池は劣化してなさそうだし消費電力は減らせた(元に戻せた)ものの、原因が分からず もやもやするが、ひとまずは良しとしたい。

でも、時間が経つと別な要因で消費電力が増大して「あれ? また?」とか思いそうだ・・・

あと、実は最後に書いた、スマフォの電池残量の表示分解能の影響だけの問題で、実は、「何も問題はなく、だから解決すら していなかった」(= 全部 夢か幻、プラシボ効果。「は? 何寝ぼけてんだ!」w)というオチもありそうだが、何度も測定・確認したので、そうではないことを願っている。

と書いたら、本当に消費電力が激増してしまった。必要なくなったアプリをアンインストールしたのが関係しているのかと思って再起動して様子を見ているが、スマフォへのssh接続も遅くなってしまった。相変わらず謎は多い。。。 (10:41)

Androidの電池残量のグラフ(↓)を見てみたら、消費電力が激増したところを過ぎたら ほぼ平坦になって、三角形の窪みとか斜面の宅地のようになっているので、「謎の理由」で残量の測定がうまく行かなかったようだ。最終的に辻褄が合うのも不思議だ。

もしかすると、その辺りでアンインストールしたアプリ(Gsam Battery Monitor)が電池や消費電力関係のものだったからだろうか?

Androidの電池残量のグラフ: 「時間前」の辺りで一時的に残量が激減したが、なぜか元に戻った。

また、ssh接続などが遅いのが頻発していた件は直らない。外出して戻ったら直ったと思ったが、単に充電中のためだった。Androidやルータの設定が どこかおかしいのかも知れない。(Androidがやっている)LTEとWi-Fiの切り替え・併用は難しそうだし、謎は多い。 (18:11, 19:24)

 

PS. この問題を何とかする過程で、公開予定のPCからスマフォの画像を自動取得するソフトも結構改良できたのが良かった。それだけでも価値があった^^

  •  0
  •  0

(部屋の異臭問題のまとめを投稿してからと思って居たが、もう少し様子を見る必要があるので、こっちを先に出す。)

そもそも読者が少ないうえにニッチなものだからニーズは ほとんどないと思われるが、他を探しても僕の欲しい機能のものがなく(開発当時)、自分では便利に使っているので、(他の作業が一段落したこともあり、)公開したくなった。そのための作業が結構あるのと体調が今一つ不調なので、とりあえず予告を。夏(が終わる?)頃までには出したいと思っている。

もし、「すごく欲しい!」という方がいらっしゃったり、質問がございましたら、「いいね」を押して下さるなりコメントして下さると励みになります^^

概要

AndroidスマフォをPCの近く(実際にはルータに繋がるところ)に置いておけば、撮影した写真などを自動的にPCに取り込み、"年/四半期/日"のディレクトリに振り分ける。

「Google Photosのローカル版みたいなもの」と言えそうだが、ほとんど使ったことがないので良く分からない。

外出時に撮影した写真は帰宅して少し(5-30分くらい)経てば自動的にPCに入り、(小さい家では、)家の中や周囲で撮った写真も同様に、撮るそばからPCに入る。

スマフォ以外では、USB PTP対応のデジカメなども、PCに接続すれば自動で取り込まれる。

取り込んだ画像には「新規画像」を示すEXIFのタグ("New")が付くので、画像管理ソフト(例: digiKam)のタグで分類する画面を開けば容易に区別できる(下を参照)。

スマフォの写真をPCに自動取り込み後、digiKamで新規画像(タグ: "New"で識別される)が表示されている画面

なお、新規画像の整理や後処理が終わったら、上記のタグの設定を解除すれば(新規には)表示されなくなる。

主な機能・仕様

  • スマフォやデジカメなど(以下、デバイス)から新しい画像など(以下、メディア)を(可能な場合は自動で)PCに取り込む。
    • 前回最後に取り込んだものの次から取り込む。
    • スマフォなどWi-Fi対応デバイスの場合は、定期的に自動で取り込む。
    • USB接続デバイスの場合は、PCに接続したら自動で取り込む。
      • 現状はPTPのみ確認済み。
  • デバイスの接続方式
    • Wi-Fi (正確にはLAN)
      • Wi-Fi経由で定期的に(約5-15分間隔)自動でチェックする。
      • デバイスがルータに繋がったら自動で認識する。
        • 正確には、上記のチェック間隔でデバイスが接続されているか調べる。
      • ルータへの接続または新規メディアの生成後、だいたい5-30分くらいで新規メディアが取得される。
        • スマフォがスリープしていると取得は遅れるが、取り込まれないことは滅多にない。
    • USB
      • デバイスをUSBでPCに接続したら自動で取り込む。
        • 実際にはLinux(UbuntuかLinux MintかThunarかその他か不明)の仕組み(リムーバブルドライブとメディア)を使って開始する。
  • 取り込みのモード
    • 自動取り込み
    • 手動取り込み
      • 取り込まれるのを待てない場合に利用可能。
      • PCからの開始とスマフォからの開始の両方が可能
  • 取り込んだメディアの処理
    • 元々のファイル名に固有のID(整数)を追加し、複数デバイス間のファイル名の競合を防ぐ。
      • IDはデバイス情報(機種名, シリアル番号)と親ディレクトリ名(例: 100SHARP)から生成する。
      • 例: DSC_6328_2964489332.JPG
    • 年/四半期/日のディレクトリに振り分ける。
      • 例: Pictures/2022/2022_04-06/2022_05_26/
      • 年の次が月だと細かいので四半期にした。
    • タグを付けて、画像管理ソフトで新しい画像を識別可能にする。
      • 画像管理ソフトdigiKamがタグとして認識する"Subject"に"New"を設定する。
      • 注: EXIF(XMP)の格納できないメディア(例: 動画)にはタグは付けられない。
  • 対応メディア
    • 静止画, 動画, オーディオ
  • PC画面での表示
    • 自動取り込みモードの場合、取り込み完了後に簡単な通知(数秒で消える)を出す。
      • 取り込みが失敗した場合は、取り込み経過(ログ)を表示するウインドウを出す。
    • 手動取り込みモードの場合、取り込み経過(ログ)を表示するウインドウを出す。

動作環境

  • PC: 古過ぎないデスクトップLinux (Ubuntu 20.3 LTS, Linux Mint 20.3など)
    • 動作確認済み環境
      • OS: Linux Mint 20.3 Xfce
      • 画像管理ソフト: digiKam 7.3.0
  • スマフォ: 古過ぎないAndroid (sshdアプリが動くもの)
    • 推奨sshdアプリ: SimpleSSHD
    • 動作確認済み環境: Android 9 (シャープ AQUOS sense lite)
  • Wi-Fiルータ: スマフォを使う場合に必要。
    • スマフォとPCは同じセグメントに繋がっていること。 → その後、(別件で)別セグメント(「ルータの向こう」)でも可能にできた。 (6/2 17:43)
    • 動作確認済み機器: I/Oデータ WN-SX300GR
  • デジカメ: USB PTP対応のもの
    • Mass Storageからの自動取り込みは未確認(実装した気もするが忘れた)。
    • メーカー独自規格の通信方式は不可。
    • 動作確認済み機器: キヤノン IXY digital 3000IS
      • iPhone 6sやNexus 4も対応しているはずだが、昔のことなので現在は不詳。

補足

「ソフト」と書いているが、実際には単一のものでなく、複数のプログラムなどからなるので「システム」と呼ぶほうが正しいが、そこまで大掛かりでもないので こうした。

そんな訳で、個々のプログラムの名前はあるが、全体としての名前がないことに、今気付いた。

 

PS. そもそもはWindowsを使っていた時にキヤノンの画像取り込みソフトとACDSeeを使っていたのだが、Linuxに移っても同様の手順・使い勝手を実現したくて(既存のものを探し・試したが いいものがなかったので、)USB版の画像取り込みプログラムを作ってdigiKamと組み合わせ、その後スマフォ(USB接続)に対応し、更に、スマフォ側でAutomagicのスクリプトを動かしてWi-Fi経由で自動で取り込めるようにし、Automagicのディスコンに伴って不要にして今に至る。

PS2. 書いてから、「別に予告なんてしなくてもいいじゃん(単なる自己満足だよ)」と思ったものの、中学の先生が、「すること・しようと思っていることを予め周りに言うと、(しなくちゃならない状況になって、)本当に実行できる」というようなことを言っていたのを思い出したので、そういう意味で この予告は意味があるのだろう。

(以前にも書いた気がするが、)その先生には いろいろ話したいことがあるものの、結構昔に亡くなってしまったので、もう同窓会などでも会えないのが残念だ。

  •  0
  •  1