無料ブログはココログ

パソコン・インターネット

2024年3月22日 (金)

フォーマットする必要があります

2Tバイトの外付けSSDを約1年ほど使っている。 従って1年分のデータが入っている。 サイズは約600GB程度ある。 そのSSDが突然「フォーマットする必要があります」と通知された。 やっちまった!!!

そろそろバックアップしておかないといけない・・・とは思っていたのだが、月日の流れは速いもので。 まだこの時点では、さほど焦ってはいなかった。 Win11からWin10に変えてみたが、ダメ。 ふたを開けて、別のSATAコンバータに接続してみたが、ダメ。 ケーブルを変えてみてが、ダメ。 だいぶ顔が引きつってきた。 別のSATAコンバータでも症状が変わらないということは、中身が壊れたか。 中身ということは、ツールで修復できないか。 こんな時のツールが昔からあった記憶がある。 検索すると「EaseUS Data Recovery Wizerd」があった。 EaseUSはかの国にある会社で、絶対に使わないという人もいるにはいるが、自分は過去に同社のバックアックツールを使っているので差ほどの抵抗はない。 状況も状況だし。

Img_4195

早速ダウンロードして、実行。 直ぐに「壊れたリンクがみつかったよ」的なメッセージが出た。 先に進めると、見慣れたフォルダー名が出てきた。 解析には3時間かかるとの通知も。 でも、救済してくれそうな気配だ。 よし、進めよう。 その間に代替のSSDを準備しておこう。 明日にも使いたいので、Amazonしている余裕はない。 まだEDIONが開いているはず。 商品を見ると、SSDは256、512、1Tが主流のようだ。 2Tは少し早すぎたか。 1Tを選ぶが、同じ1Tでも値段に差がある。 書き込みスピードに差があるようだ。 今回は迷わず速いほう選ぶ。 帰宅すると、まだ解析が続いていた。 確かに3時間ほど時間がかかった。 解析が終わると、修復不能のファイルは心配するほどないようだった。 もしかして、このまま修復してくれるとのでは・・・ということはなかっや。 解析したファイルをバックアップできるようだが、この先はお金を払えということのようだ。 背に腹は代えられない、ということで、1年限定のライセンスを買った。 約1万円。 上手な商売の進め方だ。 ちなみに、2万円だと永久ライセンスだよ、ともいっている。 今回はSSDも買ったのでこちらは我慢。

バックアップ先を、購入したSSDにしてバックアップスタート。 2時間ほどたって進捗を見ると、約30%だった。 というこは、後4・5時間はかかりそうだ。 そのままお任せして就寝。 朝見ると、無事に完了していた。 いくつかファイル開いてみたがOKだった。 都合、2万円ほどかかったが、業者に頼むと桁が1桁上がると思うので、良しとしよう。 というか、助かった。 EaseUSさん、ありがとう。

SSDが壊れた原因を考えてみた。
普段はノートPCに接続して使っていた。 このところリモート作業が多かったので、ノートPCのACアダプターは繋ぎっぱなし。 今日、たまたま外出での作業があって、普段とは別の場所でノートPCを使った。 行きがかり上、Win11を使っている状態でノートPCのACアダプターを
外した。 恐らく原因はこれ。 たまたまWin11がSSDにアクセスしているときに、ノートPCのACアダプターを外したことで、瞬間的に電圧降下が発生して、SSDの書きこ込み不良となった。 といった流れか。 2T SSDの消費電流がギリギリだったのではないかと思う。

2024年3月10日 (日)

Markdown + Mermaid 最強ドキュメント作成ツール

Markdown + Mermaid で作成した文章を PDF に落としてみた。

PDFを開く - markdown20documnt20using20mermaid.pdf

 

2024年2月20日 (火)

PS3のコントローラをWin11で使う

自分は、昔からゲームはほとんどやらない。たぶん、最初の Super Mario Brothers で、自力ではピーチ姫に出会わないで終わっている。

自宅には、(その昔)娘さんが購入した PS/3 があって埃をかぶっている。 今では当たり前だけど、PS/3のコントローラはブルートゥース接続で扱える優れものだったことは知っていた。

Img_4171

仕事の関係でジョイスティック入力をしたくなり、そういえば PS/3 のコントローラがあったことを思い出した。 もちろん、娘さんの許可を頂き、PS/3 のコントローラをPCに接続してみた。 やっぱり、と言うか、当然コントローラには反応しない。 Net検索すると、いくつも記事があった。

① PlayStationNowに付属するドライバーを使う

② ちょっと怪しいけど、便利なドライバーを使う

もちろん、①でトライしたのだけれど、PS/3自体大分古く、サポートしているWindowsも古い。互換設定を駆使しても、結局動作しなかった。

そこで、②にトライ。 ②自体もいくつも種類があって、どの記事も「これがいいよ」と言っている。 シチュエーション的に危険度Maxなので、ダウンロード サイトで判断した。 その中に、Githubに上げているドライバーがあって、ソースも公開しているものがあった。 これなら安全かと思いダウンロードした。

結果は正解で、ドライバー自体が Win10, Win11 以降を対象にしていた。しかも、x64 x86 いづれも対応。 特にトラブルこともなく、インストールは完了して、当たり前のように PS/3のコントローラが認識された。 いわゆる「神」ってやつだね。 取り合えず有線(最近ではめっきり出会わなくなったUSB Type2)接続で試したけど、ブルートゥースも可能なようなので、トライする価値はありそうだ。

PS3コントローラーをドングル不要でPCに無線接続する (DsHidMini)

 

2023年12月11日 (月)

定電圧電源を購入したのだれけど

これまで、24V電源をACアダプター(24V5A)で確保していた。余裕を持って、24V10A程度の定電圧が欲しくなり探したところ、24V20Aを謳う製品をAmazonで見つけた。

やはり、一番惹かれたのは値段で ¥5,153-。 この仕様でこの価格なので、もちろん中華製。心ある技術家さんは手をださないだろうな・・・とは思いつつ、ポチッた。 20Aは使わないが、10A程度なら使えるかも・・・という、根拠のない見通しで。流石に出力電圧電流は確認したいので、合わせて高精度LED表示電圧電流計なるものもポチッた。こちらは3個で ¥999- という代物で、もちろん中華製。テスターを買うか若干迷ったが、取り回しが良いと思った。

定電圧電源は、1日程度電源を入れて初期不良での出火とかないか確認したが、問題はなかった。でも、負荷を付けていなかったので負荷を接続した状態でのエージングは必要と思っている。次に、高精度LED表示電圧電流計を定電圧電源に組み込めないか検討したところ、(予想通り)取り付けられそうなスペースがあった。シャーシを分解して、(久しぶりに)シャーシに高精度LED表示電圧電流計を取り付ける穴を開けた。更に、端子台を取り付けて、結果、写真のような定電圧電源ユニットが完成した。

Img_4140

配線を確認して、電源オン・・・あれっ、電圧表示が全く違う! テスターで確認すると、定電圧電源に最初から付属するLEDの電圧表示が 24.0V、高精度LED表示電圧電流計が 26.7V を示しているとき、テスターは 24.0Vだった。定電圧電源に最初から付属するLEDの電圧表示は正しくて、高精度LED表示電圧電流計がでたらめ。おいおい、確認用の電圧計のほうがでたらめって何だよ。やっぱり、安くてもテスターのほうが良かったか・・・、でも、10Aはあるけど、20A測定できるテスターは高い。

これでは使えないと思ったが、出荷時の校正用ボリューム位あるかもと考えて、基板を眺めてみると・・・らしいのが2つあった。極小のボリュームが。たぶん、これば電圧と電流の微調整つまみだと思って試してみたところ・・・ビンゴ! しかし、電圧はつまみ最大でも、まだ +0.6V 程の差がある。電流は +0.01A 程度だった。電圧は目をつむるととして、電流はセーフ側に倒れるので、良しとすることにした。

口コミでは ±0.1V 程度だったのにね。うーん、これが中華製を使う醍醐味だね。ちなみに、高精度LED表示電圧電流計は3個あったので、もう一つも試したが、同じ程度はズレていた。たぶん検査不良品(ハネもの)だね、まっ、一個あたり¥300-なので、こんなものか。
肝心の定電圧電源は使えそうで、良かった。

 

 

 

 

2023年6月27日 (火)

RaspberryPi 4B のUSB起動

仕事に関係する調査目的もあり、PasPi 4B (8GB) をAmazonでポチった。合わせて、240GBのSSDとUSB-SATA変換アダプターも購入した。

以前、RasPi 2BでUSB起動を試みたがうまく行かなかった。巷の情報では、RasPi 4になって、USB起動も随分と簡単になったとのことだった。ただ、多くのUSB起動についての記事で、「RasPi 4はUSB-SATA変換アダプターとの相性がある」との一文があることも知っていた。

そうは言っても、「Amazonおすすめ★4.3」なら大丈夫だろうとタカをくくっていたら、「Amazonおすすめ★4.3」は全くダメだった。あっ、製品がダメと言っている訳ではなくて、あくまで「RasPi 4との相性」の話なので4649。1回だけ再トライしてみるか・・・ということで過去に関連製品を購入したことのあるメーカー「UGREEN」のUSB-SATA変換アダプターを追加購入してみた。

結果は ◎(二重丸)で、何の問題もなくUSBのSSD起動ができた。価格も「UGREEN」のほうが若干だけど安かった。やっぱりメーカーかな・・・もとい、「RasPi 4との相性」です。

Ugreen_usbsata
Amzonサイト 2023.06.27現在

SSDにインストールしたのは、Ubuntu Desktop 23.04 (64-bit)で、Raspberry Pi Imager で直接書き込んだだけ。

RasPiのケースも放熱板とファンが付いているタイプを購入したので、長時間運転にも耐えられそうだ。i7のWinPCのようにはいかないが、普段使いのDesktop PCとして使えるレベルだね。最終的に購入費用はどうなったのかと言うと...

1 Raspberry Pi 4B (8GB) 15,900-  
2 MicroSD 32GB 1,030-  
3 ケース (ファン・ACアダプタ付き) 1,989-  
4 Micro HDMI-HDMIケーブル 999-  
5 SSD 240GB 2,780-  
6 USB-SATA変換アダプタ(1) 1,399- USB起動×
7 USB-SATA変換アダプタ(2) 1,290- USB起動◎
  合計 25,387-  

USB-SATA変換アダプタの再購入を除いても、2万には収まらなかったが、最近の中高生なら気軽に手が出せる範囲だね。

2023年1月 9日 (月)

温度測定用 RasPi 復活

昨年末、温度測定用 RasPi のダウンに気が付き、バックアップ イメージをSDに再書き込みして、バックアップが最新でなかったために若干手間取ったが、比較的早く復旧した。

ここで止めておけばいいのだが、数か月後にまた同じ作業をしなくてもいいように、RasPiをHDで動かすことに挑戦した。

最新の RasPi 4 (?) は、HD起動もサポートしている様子だが、手元の RasPi は 2B なので、かなり古い。

WEBを検索すると2BでもHD起動 (正確にはHD実行)ができそうな様子だったが、手持ちの環境では結局ダメだった。

S-ATAのHD自体は認識されていてファイルも覗けるので、もう少し・・・みたいな感じだが、何度も繰り返すコピーに多大な時間がかかり、今回は諦めた・・・と言うか、疲れた!

結局、データの欠落は約1カ月間。

Bmp085

温度グラフは、ブラウザでページを開くか、PCでRasPiのDBを直接参照してグラフ描画することができる。

いづれも同じPythonコードを使う。 PC側のPythonコードを修正して、グラフ描画の度にデータをバックアップしておけば、手間にならないかも。 CSVデータでもいいし。

 

2022年12月28日 (水)

温度測定用RasPi起動せず

最近では、ほとんど「ほったらかし」の温度測定用RasPiのグラフ ページを久しぶりに開いてみた。 見ると12/11以降のデータが記録されていない。

温度測定用RasPiのDB (PostgreSQL)をPgAdminで開いてみると、確かに12/11以降のデータが記録されていない。 容量不足か? あれ、リモートアクセスができるようになっていない。えぇーっ! 久しぶりにKeyboard, mouse, displayを接続してみた。 空き容量はある。

過去記事を見ながら、ソフトの動作を確認するために温度測定用RasPiを数回再起動していたところ・・・起動しなくなった!

画面は ... Kernel panic ... のメッセージで停止している。 何度やっても同じ。 確かに panic だ。

確か7月頃から稼働を始めて、約5ケ月、「やっちまったな」・・・という訳でSDカードが逝ってしまったようだ。 以前、定点観測用PasPiとして使っていたときは1年位は稼働していた記憶はあるが、SDカードの品質や相性もあるし、こんなものか。

今回、特にSDカード延命の対策はなにもしておらず、標準設定でどの程度持つのかな・・・といった興味もあったが、5ケ月間記録した温度・湿度・気圧データを捨てるのは惜しい。

DBのデータだけ救出できないかと思い、WEB検索してみたところ、いい記事があった。

Raspberry Pi のSDカードが壊れ、起動しなくなってしまった場合の修復方法
https://jorublog.site/raspi-sdcard-repair/

(記事の備忘)

ls -l /dev/sd*

sudo umount /dev/sdb*

sudo fsck /dev/sdb1

Debianを入れたLet's noteでSDカードのリカバリーを試してみたが、上手くいかなった。

VirtualBox にもDebianマシンがあったことを思い出し、これを使ってリカバリーを試してみたところ・・・成功!

但し、「修復したけど、まだエラー残っているよ」的なメッセージは出ていた。 Let's noteでは、やり方が悪かったかも。

温度測定用RasPiが再起動した。 直ぐに、PgAdminでDBのバックアップを作成してWinPCのPostgreSQLにリストアした。

温度測定用RasPiのPostgreSQLのほうがバージョンが新しいのでワーニングは出たが、データはリストアできた。

さて、同じSDカードに温度測定用RasPiのバックアップを再書込みしてみようか。 SDカードの耐久テスト。

 

 

2022年7月14日 (木)

BMP085もう一つあった

USBケーブルを探していて、Junk boxを覗いていたら BMP085 が出てきた。

あっ、以前、もう一つ買ったことを思い出した。 あるのなら、遊ばしておくのは勿体ない。 RasPi の温度監視に使える。

と言う訳で、VPNサーバーに使っている RasPi の基板にねじ付けして、温度監視するようにした。 今回は、最近復活させた温度・湿度・気圧測定用 RasPi のコードが流用できるので、凄く簡単だったが、一つだけ問題があった。

最初は、LAN内PCのPingチェックと電源オンを行うVPNサーバーのポータルサイトのcgi プログラムに、BMP085 を追加すればいいかと思っていたが、これが上手く走らない。 コンソールでは BMP085 計測用のPaythonコードは問題なく実行できるのだが、WEBページの cgi として実行すると測定でいない。 Rasbian の設定で「リモートでGPIOを使う」を「はい」にしてみたが結果は同じ。 ひょっとして、そういうものなのか?

理由は良く分からないが、仕方がないので、温度測定用 python は crontab で叩き、結果をファイルに記録した。 そのファイルを cgi で読むようにしてVPNサーバーのポータルサイトに温度を表示できるようになった。

Img_2991

実際には、PasPi基板にはアクリルの筐体があるので、筐体内温度になる。 値は 50 ℃前後あることが分かった。 値の補正はしていないが、±数度の誤差かと思うので、それなりの温度になっているようだ。

Raspi1

手間を惜しまず、忘れない内に SD カードのバックアップを取った。

SDカードの書込み回数対策もしていないし、5分間隔ではあるが積極的にSDカードに書込みを行うようになったし、カードはどのくらい持つのだろうか?

 

2022年7月 3日 (日)

Rasberry Pi による温湿度測定 復活計画

これだけ暑い日が続くと、気温のトレンドデータを取りたくなる。

そう言えば、過去にもRaspberry Piで温湿度のデータをとったことがあり、ココログ ページにも掲載していたが、既にリンク切れとなっている。

母さん、僕のあの温湿度センサー、どうしたんでせうね?
ええ、夏、実家に帰ったとき、
居間へ設置したあの温湿度センサーですよ。
母さん、あれは好きな温湿度センサー でしたよ、
  西条八十「ぼくの帽子」より

昨年、作業部屋の小物を整理したとき、Raspi関係の小箱に入れた記憶が・・・あった!

Bmp085_hdc1000_image

さてっ、その時使っていたRaspberry PiのSDカードは何処? ゼロから生成するのは面倒だな。

とりあえず、回路図だけ抑えておこうか。

Bmp085_hdc1000

以前の記事は 2013年6月22日 が最初だった。 1・2年前のような記憶、まさに「ジャネーの法則」だね。

その後、Rasberry Pi OS もアップデートが進んでいるので、改めてOSからインストールする。

Piimager

インストール後、RasPiのデスクトップから I2C を有効化しておく。 再起動。

コマンドラインでI2Cを有効化する場合は以下。

$ sudo raspi-config

-> 3 Interface Options

I5 I2C
Would you like the ARM I2C interface to be enabled?
はい

18 Remote GPIO
Would you like the GPIO server to be accessible over the network?
はい

Pythonの開発支援ツール python3-pip をインストールする。 9年前の python-pip から改定されている。

sudo apt-get install python-dev python3-pip

wiringpi2 をインストールする。

sudo pip install wiringpi2

ここで RasPi 再起動しておく。

9年前と同じサンプルコードをダウンロードしたが、サンプルは登録されていなかった。 いつまでも有ると思うな・・・

とりあえず、HDC1000だけ接続して・・・

i2cdetect -y 1
 0  1  2  3  4  5  6  7  8  9  a  b  c d e f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

自分で、ココログに張り付けた python コードをコピペした。 HDC1000のサンプル コード。

/2015/05/raspberrypi-hdc.html

若干のコード修正が必要だった。 TI_HDC1000_read.py

import wiringpi
import os
import struct
from time import sleep

wiringpi.wiringPiSetup()
i2c = wiringpi.I2C()
dev = i2c.setup(0x40)
i2c.writeReg16(dev,0x02,0x10) #Temp + Hidi 32-bit transfer mode, LSB-MSB inverted, why?
i2c.writeReg8(dev,0x00,0x00) #start conversion.
sleep((6350.0 + 6500.0 + 500.0)/1000000.0) #wait for conversion.
#LSB-MSB inverted, again...
temp = ((struct.unpack('4B', os.read(dev,4)))[0] << 8 | (struct.unpack('4B', os.read(dev,4)))[1])
hudi = ((struct.unpack('4B', os.read(dev,4)))[2] << 8 | (struct.unpack('4B', os.read(dev,4)))[3])
os.close(dev) #Don't leave the door open.
print('Humidity: %.2f %%' % (( hudi / 65535.0 ) * 100))
print('Temperature: %.2f C' % (( temp / 65535.0) * 165 - 40 ))

wiringpi2 が wiringpi に変更されている。

パーミッションも設定。

sudo chmod 755 TI_HDC1000_read.py

とりあえず、HDC1000だけ接続して実行。

python3 TI_HDC1000_read.py

一応動作している。

Humidity: 88.74 %
Temperature: 26.53 C

BMP-085も試したいなぁー。

Github を探したら BMP-085 のサンプルが見つかった。

Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085

ダウンロードしたのは、

Adafruit_BMP085.py
Adafruit_BMP085_example.py
Adafruit_I2C.py

言われるがまま、python3-pipをインストールしたので、サンプルは python3 で実行することになった。

基本ロジックはそのままでいいけど、文法が変わっている。 実行して、怒られた部分を都度手直しした (^^;

要点は、以下のとおり。

print ...  → print(...)
except IOErroe, err: → except IOErroe as err:
X1 = (p >> 8) * (p >> 8) → X1 = (int(p) >> 8) * (int(p) >> 8)

実行

python3 Adafruit_BMP085_example.py
Temperature: 26.00 C
Pressure: 936.04 hPa
Altitude: 663.48

動いた!

ちなみに、BMP-085だけ接続して、I2Cのステータスを見ると・・・

i2cdetect -y 1
 0  1  2  3  4  5  6  7  8  9  a  b  c d e f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

忘れた頃のメンテナンス用に、ソースも貼り付けておこう。

ダウンロード - i2csample.zip

次は、BMP-085 と HDC-1000 を同時接続するケーブルを用意する。 このケーブル、圧着用みたいで半田の付きが悪くて苦労した。 作る前にイメージした形とは違うけど、一応出来た。 できるだけスッキリさせたかったので、今回はブレッド ボードでなく、半田付け。

Img_2975_20220705082401

i2cdetect -y 1
 0  1  2  3  4  5  6  7  8  9  a  b  c d e f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

同時に、2つのセンサーが見えている。

$ python3 Adafruit_BMP085_example.py
Temperature: 25.20 C
Pressure:    936.36 hPa
Altitude:    660.29
$ python3 TI_HDC1000_read.py
Humidity:    93.51 %
Temperature: 25.19 C

いい感じ。

さて、測定した温湿度他をWEB表示するための MRTG をインストールしよう。 その前に、おまじない。

sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove -y
sudo apt clean
sudo reboot

そういえば、I2Cデバイスは使えるようになったけど、グラフ表示関係のソースが無いね。 以前も「コピペ+ちょい変」で使っていたので、ソースがないのは困るね。 全く覆えていないし。

 

ここで、方針を変更。 せっかく再構築するならDBに記録して、pythonでグラフ描画する方向とする。

https://raspi.taneyats.com/entry/install-postgresql

https://www.learning-nao.com/?p=3002

https://www.learning-nao.com/?p=3016

PostgreSQL のインストールは参照した記事のとおり、psycopg2 のインストールは

sudo pip3 install psycopg2

で行った。

DBは pgAdmin で新規作成したほうが簡単。 PostgreSQL は最新版をインストールしてしまったので、pgAdmin4 じゃないとダメか。

こんなDBをpgAdmin4で作って、

Database = bmp085
Table = samp_datas

Bmp085samp_datas

pythonでテスト データを書いてみた。

----- PostgreSQLTest.py -------------------------------------

mport psycopg2
from psycopg2 import Error

try:
    connector = psycopg2.connect('postgresql://{user}:{password}@{host}:{port}/{dbname}'.format
    (
        user="postgres",          #ユーザ
        password="xxxxxxxx", #パスワード
        host="localhost",         #ホスト名
        port="5432",               #ポート
        dbname="bmp085"      #データベース名
    ))

    #カーソル取得
    cursor = connector.cursor()

    cursor.execute("SELECT version();")
    result = cursor.fetchone()

    print(result[0]+"に接続しています。")

    #データ記録
    sql = 'INSERT INTO samp_datas VALUES (%s,%s,%s,%s,%s)'
    t = 12.3
    h = 23.4
    p = 987.6
    with connector.cursor() as cur:
        cur.execute(sql, ('NOW', t, h, p, 'test'))
    connector.commit()

    cursor.execute('SELECT * FROM samp_datas')
    #rows = cursor.fetchall()
    for row in cursor:
        print(row)

except(Exception, Error) as error:
    print("PostgreSQLへの接続時のエラーが発生しました",error)

#最後は必ずクローズ
finally:
    cursor.close()
    connector.close()

へェ~、RasPi で PostgreSQL 使えるね。

Python でグラフ描画するのは matplotlib みたいだね。

sudo pip3 install matplotlib

インストールはできたけど、これ使えなかった。 import error が解消できない。

uninstall して、別の「お勧め」を試した。

sudo apt-get install python3-numpy
sudo apt-get install python3-imaging
sudo apt-get install python3-pandas
sudo apt-get install python3-matplotlib

これでもダメで、表示されたリンク先の説明

https://numpy.org/devdocs/user/troubleshooting-importerror.html

に従って

sudo apt-get install libatlas-base-dev

で解決できた。 大分、いらないものもインストールしたみたい。 いくつか試したが、ここで紹介されていたサンプルでグラフの生成が確認できた。

http://www.fjks.jp/abc/abc751.htm

Graph

ちなみに matplotlib は、Windows PC でも、Graphフォルダーのパス変更だけで「すんなり」と動いた。 素晴らしい移植性。

pip install matplotlib
pip install psycopg2           ← これも必要だった!

Windows PCの場合、インストーラー版もあるようだ。 (動作は未確認!)

https://github.com/downloads/matplotlib/matplotlib/matplotlib-1.2.0.win32-py2.7.exe

ちなみに、Windows の Python は V3.x を使う。  V3.x は、Pathも自動設定してくれる。

 

「オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ」 matplotlib は・・・手強かった! そもそも、Pythonを理解していない・・・

プログラムは改めて掲載するとして、基本は2本の .py を作った。

① BMP085, HDC1000を使い、温度・湿度・気圧の計測データを取得して、データをPostgreSQLに記録する

② PostgreSQLに記録されたデータを読んで、計測データのグラフを作成する

watch コマンドを使って、①を10分間隔で、1昼夜連続実行させた。 そのデータを②で参照してグラフを作ってみた。 ②の作成には、WindowsのPython環境を使った。 RasPiだけだと、もっと大変だった気がする。 まだプロトタイプだが、一応グラフ作成もできた。
(訂正) watchコマンドではなく、以下のコマンドを使った。


while true; do python3 Run_SAMPLING.py; sleep 600; done&

Graph_temp_humi

気圧は、別のグラフだね。 記憶では、気圧のグラフは、変化が少ないので面白くはなかったと思う。長期で集計すれば、天気との関連性も見えるかも・・・

今回は、計測データをDBに記録するので、データだけ記録しておけば後々、遊べる気がする。

 

PasPiの操作には、VSCode のターミナル コンソールを使っている。 以前は、PowerShell を使っていたが、例の「悪魔的配色」に閉口していた。 なぜ、いつまでたっても既定値を直さないのだろうか。

PasPiで作成した.png形式のグラフは、scp でWinPCに持って来ることができる。

scp pi@192.168.xx.xxx:/home/pi/Public/i2c-exec/Graph/graph_temp_humi.png ./graph_temp_humi.png

最終的には、WEBページで表示する予定。 年・月・週・日(2日程度)を指定して、都度グラフ作成か。

 

備忘を兼ねて、温湿度測定サーバーで WWW サーバーを立ち上げる手順を残しておこう。 基本は、VPNサーバーの時と同じで python の http.server を使う。

$ cd /home/pi/Public
$ sudo mkdir www
$ sudo chown pi:pi www

$ sudo nano http_start.sh
------------------------------------------------------
#!/bin/bash
cd /home/pi/Public/www
/usr/bin/python -m http.server --cgi 8000
------------------------------------------------------

$ sudo chown pi:pi http_start.sh

$ sudo chmod 755 http_start.sh

$ sudo mkdir cgi-bin
$ sudo chown pi:pi cgi-bin

$ sudo nano hello.html
------------------------------------------------------
<html>

<body>
HELLO WORLD!<br/>
This is Raspberry Pi BMP085+HDC1000 Sampling server<br/>
</body>
</html>
------------------------------------------------------

$ sudo chown pi:pi hello.html

$ hostname -I
192.168.xx.xxx

$ ./http_start.sh
/usr/bin/python: No module named http

$ sudo nano http_start.sh
------------------------------------------------------
#!/bin/bash
cd /home/pi/Public/www
/usr/bin/python3 -m http.server --cgi 8000
------------------------------------------------------

$ ./http_start.sh
http://192.168.xx.xxx:8000/hello.html


***自動起動***************************
$ sudo nano /etc/rc.local
------------------------------------------------------
# startup WWW server with cgi
/home/pi/Public/www/http_start.sh
------------------------------------------------------

$ sudo reboot

RasPiの再起動が、更に遅くなった・・・

***別PCからWWW接続***************************
http://192.168.xx.xxx:8000/hello.html

HELLO WORLD!<br/>
This is Raspberry Pi BMP085+HDC1000 Sampling server

WWWサーバーも準備できたので、とりあえず、10分毎の自動測定スクリプトに、グラフ作成スクリプトを追加する。 作成したグラフは、WWWサーバーの配下フォルダーにコピーする。 試しに、hello.html に img タグでコピーされたグラフをリンクする。 

Www_test

見えた! イントラでの利用だけなので、これだけでも使えるね。

その後、グラフは進化させた。 グラフ線は、温度・湿度・気圧の3軸に。 グラフ種別は、単純折れ線から散布図折れ線に。 X軸が時間間隔になって見易くなった。 3軸目の目盛り線をまだ出せない・・・matplotlib ム難しい!

Www_test2

当初、測定・記録・グラフ作成用の .pyは、バッチを常駐させて試していた。

sudo while true; do python Run_SAMPLING.py; sleep 300; done&

完成度が向上してきたので、crontab を使った定時起動にした。 毎時、5分、10分、15分、... に起動。

$ crontab -e
*/5 * * * * python3 /home/pi/Public/i2c-exec/Run_SAMPLING.py

最初、crontab に記述するコマンド部分を .sh にしていたが、どうやってもグラフが作成できなかった。 測定・DB記録だけだと動作したので、どうやら matplotlib が嫌がっていた様子。 .sh をやめて、直接 .py を実行する記述としたところ、期待した動作となった。

 

第3軸の気圧の目盛りを表示させたくて、また、.py をWinPCで実行して、試行錯誤してみた。 その結果、なんとか第3軸の気圧の目盛りも表示できた。 ほんとは、右側の第2軸 湿度目盛りの右横に表示させたかったのだが、うまくできないので、グラフ領域に持っていった。

その過程で思ったのだけど、matplotlib のグラフは、WinPCで直接表示させたほうが便利なことに気が付いた。 これまでは、RasPiで測定→DB記録→グラフ作成(png)→WinPCのブラウザでRasPiのグラフ(png)を表示 することにこだわっていたが、WinPCで matplotlib のグラフ表示用 .py を実行すれば、グラフは matplotlib のグラフ表示ツールが表示しれくれる。 それに、 matplotlib のグラフ表示ツールは、「部分拡大」ボタンがあるので、わざわざデータ集計用のコードを書かなくて良い。 WinPC側で、python・matplotlib が実行できる環境を準備する必要はあるが、ブラウザで固定のpngを見るより、大幅なメリットがある。

つまり、第3軸の気圧の目盛りを表示できるようになったので、今回の「Rasberry Pi による温湿度測定 復活計画」はこれで完了かな。

Www_test3

matplotlib のグラフ表示ツールの機能ボタン、これがあると指定範囲のデータ集計や、グラフの拡大表示ができるので便利!

Www_test4

最初から matplotlib を意識していたわけじゃなかったけど、測定データをDBに記録する方式にしていて良かった。

後は、記憶が新しい内に、コードを整理して、RasPiのバックアップだね。

 

遊びで、WEBページの背景イメージを設定したところ、グラフの背景(白)がそのまま表示されてしまったので、グラフの背景を透明にし、フォント色を設定してみた。 ついでに、第3軸を当初の希望通りに、第2軸の右側に移動してみたら、問題なく表示できた。 先日、できなかったのは何故? WEBページは、イントラだけの公開で、publicには公開なし。

Cocolog_2

以前、構築したシステムでは MRTG を使ってグラフ表示したが、今回は matplotlib を使った専用グラフなので、見やすい。

http://miro3.cocolog-nifty.com/blog/2013/06/post-c9bf.html

 

ソフトウエアの構成は以下のイメージ。

Soft_bmp085_hdc1000_20220712093501

 

ソフトの作り込みに気を取られていて、測定値の確認をしていないことに気が付いた。

手元にあったデジタル温湿度計と比較して、オフセット補正した。 既にDBに記録データがあるので、グラフ作成時に調整した。

temp_offset = -0.6   #温度補正値
humi_offset = -39.8 #湿度補正値
pres_offset = 0.0   #気圧補正値

温度は誤差程度だったが、湿度は全然異なっていた。 気圧は基準値が分からないので、後日調整予定。

Cocolog_3

 

2022年7月 2日 (土)

Raspberry Pi ダウン

仕事部屋 兼 趣味部屋にしている作業小屋(プレハブ)がある。 夏は、そのままだとサウナ状態となる。

昨年の夏は、窓用冷房で乗り切った。 ただ、狭いスペースなので冷房は良く効くが、屋根

からの輻射熱がきつかった。「寄る年波」もあるかな。 毎年、センシティブになっている

のを感じる (^^;

どうやら、今年は更に暑い夏になりそうとのことだったので、一計を案じて、夏場は母屋へ

避難することにした。最初は、作業小屋をPCルームにして、母屋ではノートPCを使っていた。

これはこれで快適だったのだが、作業も佳境に入ってくると大きなディスプレイを使いたく

なる。 で、作業小屋から4Kディスプレイ(いいやつじゃないが仕事用に一応持っている)を

持ってきた。 ところが、自分のノートPCは1Kディスプレイしか接続できないことに気が付く。

なので、デスクトップPCを持ってきた。 使っているデスクトップPC自体はコンパクト サイズ

なのだが、周辺一式を持って来たくなかったのだが、あきらめた。 ここまで移動すると、

24時間、蒸し風呂で頑張っている Rasberry Pi も救済したくなった。 ここで、ちょっとだけ

「Rasberry Pi移動して大丈夫かな」という心配が頭をよぎったが、「乗りかかった船」と

「勢い」で移動した。 結局、大移動になってしまったが、案ずるより産むがやすしで、母屋の

PC環境は問題なく稼働を始めた。

Pc

その後、やっつけの配線や配置が気になり、母屋向きの設置にマイナーチェンジ(なるべく目立たない

机の下に設置したり、目立たない結線にしたり)した。 さて、電源を再投入すると・・・

Rasbery Pi が応答しない! 昔も経験があるぞ。 恐らく移動でSDカードが甘刺しになった

かとタカをくくっていたが、どうやっても正常起動しない。 どうやら「やっちまった!」らしい。

こういうこともあろうかと、Rasbery Pi を VPNサーバー化した折にSDカードのバックアップは

とってある。(^^V

とりあえず、SDカードを(一応気休めで)再フォーマットしてから、Win32 Disk Imager で

バックアップを戻した。 Rasbery Pi 電源オン、LEDが点滅を始めて、正常起動した。

スマホのWiFiをオフして、VPN接続をオンした。 接続できた。 VPNサーバーは動いている。

次に、Rasbery Pi 経由でPC電源をオンするWEBページにアクセスした。 あれっ、接続できない。

このページ、最近良く利用しているんだよなぁー。 どうやら、バックアップは、WEBページ整備前

の状態だったようだ。 WEBページのバックアップは単独でとってあった。 さて、WEBサーバー

はApacheだっけ? おい、おい、記憶の劣化が激しい。 そうそう、PythonでWEBサーバーだった。

ところで「PythonでWEBサーバー」ってどうやるの? バックアップに手がかりがあった。

---http_start.sh---------------------------------
 #!/bin/bash
 cd /home/pi/Public/www
 /usr/bin/python -m http.server --cgi 8000

なるほど、/home/pi/Public/www に展開していたわけだ。

pythonを使ってCGIしていて、フォルダー構成はこんな形か。

 /home/pi/Public/www
   *.html
   /cgi-bin
     *.py
     *.sh

WinPCから、Paspberry Piへのファイル コピーは、Paspberry Pi に smtsc 接続して、コピペしたほうが簡単だ。

もとい、power-shellのscpコマンドのほうが、もっと簡単だった。

コピーしたファイルは、アクセス権の設定も忘れずに。

 sudo chmod 644 *.html
 sudo chmod 755 *.sh
 sudo chmod 666 *.log

みたいな感じか。

http_start.sh をたたけば、pythonのWEBサーバーが起動する。

WinPCからpythonのWEBページを開いてみる・・・接続できた。

次は・・・pythonのWEBサーバーの自動起動と常駐化。

以前はどうやっていたのか(今となっては)不明だが、systemd が簡単か。

sudo nano /etc/systemd/system/www.service
---------------------------------------------------------
[Unit]
Description=Start www server used python

[Service]
ExecStart=/home/pi/Public/www/http_start.sh

[Install]
WantedBy=multi-user.target
---------------------------------------------------------

動作テスト。

sudo systemctl start www.service
sudo systemctl status www.service

常駐化。

sudo systemctl enable www.service

Raspberry Piを再起動して、Python WEBページにアクセスできることを確認。 OK!

イントラだけの使用なので、セキュリティは無視。

 

もちろん、手間を惜しまず、最新の状態で Raspberry Pi をイメージ バックアップした。

こういった「駄文」も後で役に立つときもあるんだよね。きっと。

 

より以前の記事一覧