しろふくろうず (しろふくろーず)

修繕に関するDIYをメインに趣味や時事ネタなども

こんにちは。DIYフクロウです(・ω・)ノ

 

Raspberry pi から

slackへ画像ファイルをUploadするAPI仕様が変わっていたので

pythonのコードをchatGPTを使ったりしながら書き直しました。

 

slack側は従来通りです。

 

zenn.dev

 

# coding: utf-8

import requests
import json
import os
import datetime

 

# 変数など

token = 'xoxb-で始まる値'
name = datetime.datetime.now().strftime("%Y%m%d %H:%M:%S")  #任意の文字列

channel = 'チャンネルID'

 

# 1. 画像ファイルのサイズを取得
file_blob = "/home/pi/gazou.jpg"
file_size = os.path.getsize(file_blob)
print("file_size:",file_size)

 

upload_url_response = requests.get(f"https://slack.com/api/files.getUploadURLExternal?filename={name}&length={file_size}",headers={"Authorization": f"Bearer {token}",})
 
# 2. files.getUploadURLExternal APIを呼び出してURLとファイルIDを取得
upload_url_json = upload_url_response.json()
if not upload_url_json.get("ok"):
raise Exception("Failed to get upload URL: " + upload_url_json.get("error", "Unknown error"))
 
upload_url = upload_url_json["upload_url"]
print("upload_url:",upload_url)
 
file_id = upload_url_json["file_id"]
print("file_id:",file_id)
 
# 3. 取得したURLにファイルをアップロード
upload_response = requests.post(upload_url,files={"file":(name, open(file_blob,'rb'))},data={"token": token,"filename": name})
 
if upload_response.status_code != 200:
raise Exception("Failed to upload file: " + upload_response.text)
 
# 4. files.completeUploadExternal APIにファイルIDとオプション引数を送信してアップロードを完了
complete_upload_payload = {"files": [{"id": file_id, "title": name}]}
 
complete_upload_payload["channel_id"] = channel
 
complete_upload_response = requests.post("https://slack.com/api/files.completeUploadExternal",headers={"Authorization": f"Bearer {token}","Content-Type": "application/json"}, data=json.dumps(complete_upload_payload))
print("complete_upload_response:",complete_upload_response)
 
complete_upload_json = complete_upload_response.json()
print("complete_upload_json:",complete_upload_json)
 
 

本記事をお読みいただき、ありがとうございます。

以上となります(`・ω・´)v

Raspberry Pi OS Bookworm Python3.11.2 強制終了

こんにちは。DIYフクロウです(・ω・)ノ

 

Bookworm で困っていること。

 

Raspberry Pi OS が一つ前世代の Bullseye 64bit 環境下では

Tensorflow2を用いたPythonプログラムを動かしても、

ループで動かしたPythonが止まることはなかったのです。

 

さらに、

Raspberry Pi Zero 2 W や Raspberry Pi 3A+ といった、RAM=512MBのPiでもTensorflow2(TF2)の物体検出処理が重かろうが動いていました。

 

しかし、現行OSのBookworm環境下でTensorflow2を動かすと、

モリーリークが発生しているのか

どんなハードのPiでも(最新のRaspberry Pi 5でも)Bookwormだと・・・

仮想メモリ使用率が徐々に増えていき99%(※)近くになると

強制終了 してしまうのです。

 

現状お手上げ!(・ω・)ノ

import psutil

psutil.virtual_memory() 

print(mem.percent)

 

逃げ道、回避策、ワークアラウンドとしては、使用した変数を頻繁にdelして使用率の上昇を抑えつつ、数時間に1回、もしくは98%くらいになったら再起動コマンドを実行するしかない状況です。

 

1世代前のBullseyeですと使用率が99%になることはまずなく、80%くらいまで上昇しても、それ以上は上がっていかず、ずっと安定して動いています。

 

現行のBookworm は、Hailo AIやNVMe SSDといったデバイスや、遠隔接続の

Raspberry Pi Connectが使えるのですが、肝心なPython上のTF2プログラムが連続動作してくれなくて

環境をなかなか移行できない状況です(Tω

 

本記事をお読みいただき、ありがとうございます。

以上となります(`・ω・´)v

ソーラーケーブル用コネクタMC4から金属ピン(ギボシ)を抜く方法

こんにちは。DIYフクロウです(・ω・)ノ

 

市販のソーラーパネルに使われている太陽光ケーブル(HCVケーブル)の接続端子としてMC4コネクタを付けるケースがメジャーかと思います。

 

今回はMC4コネクタの電極となる金属ピン(ギボシ:コネクタ端子)を引き抜いて

樹脂パーツを再利用する話です。

(自己責任でお願いします)

 

 

なお、MC4コネクタの内部の金属ピン(コンタクト部)は、側面に抜け止め防止の小さな突起(ツメ)があり一度差し込んだら抜けない構造になっています。

 

なので、HCVケーブルをかしめる前にうっかり差し込んでしまったら抜けずに詰んでおしまいですし、MC4コネクタ付ケーブルからMC4コネクタだけを再利用しようとしてラジオペンチで引き抜こうとしても、その突起の関係でできませんでした。

 

これを力技ですが、金属ピンを抜くことができたので紹介します(・ω・)ノ

 

 

用意するもの:

・木板 厚さ1cm以上

・ゴムハンマー

・六角レンチ 4mm(オス用)と6mm(メス用)をそれぞれ1つ

・セーフティゴーグル(安全ゴーグル)

・作業用ゴム手袋

 

方法:

床に木板を置いて、六角レンチをMC4コネクタの接続側に差し込んで、ゴムハンマーでたたく

 

実際のイメージ(・ω・)ノ

写真は横になっていますが、高さ方向に並べたと思って下さい。

 

木板を敷いてゴムハンマーでほどよい力でたたく

MC4コネクタメス

MC4コネクタオス

これでうまく抜ければ黒い防水側(コネクタ)は金属ピンのMC4ギボシを別途新調するだけで再度使えるようになるのです(・ω・)♪

 

なお、MC4コネクタのオスは、互換製品によっては、六角レンチ4mmが入らない場合があるかと思います。

その場合は自己責任で何とか無理やり差し込むか、別ないい感じの部材で似たことをするか

あきらめましょう。

 

ここまでお読みいただき、ありがとうございます。

以上となります(`・ω・´)v

 

コードレス掃除機 エルゴラピード 壊れた・・・  ふ、復活修理(?) の巻き

こんにちは。DIYフクロウです(・ω・)ノ

 

我が家で愛用しているコードレス掃除機、エレクトロラックス社(Electrolux)の

エルゴラピード(Ergorapido)が転倒により壊れてしまいました(;ω;)

 

シロフクロウくんが寝ているすきに

ささっと直せないものかな (・Θ・)

f:id:shirofukurokun:20170906234619j:plain

 

ちなみに、DIYフクロウ家では、

リチウムイオンバッテリータイプなのでニッケル水素電池よりも

容量があってパワフルで、途中で継ぎ足しでもバッテリー劣化が少ないタイプを使用していました。(`・ω・´)v

 

購入から3年ほど経過した際、バッテリーが3分程度しか持たなくなってしまったので、ハンドユニット(にバッテリーが内蔵されている)を購入して

延命対応していました。(`・ω・´)v

 

もうそろそろ6年経過したところでした。

 

今回、取れた部品を見ると、透明なツメが6箇所あったうち2箇所が

すでに紛失していて(以前に、ツメが1個落ちていたことあったのですが

当時は、どこから外れたのかまったくわからず、しばらくしてから

捨てていました)

転倒によりさらに2箇所破損して残った2箇所では保持できなくなって

今回、プラスチックの止め具が外れたようです・・・ (・ω・;)

 

このままでは掃除が困難;

 

緊急事態発令!

 

なんとか 修理できないか、30分くらい考えました(・Θ・;)

 

・考 10秒

・・考  20秒

・・・考 25秒

・・・・考 ここでDIYふくろう名人、1回目の考慮時間に入ります(1分)

 ・・・・・考 30分経過・・・

  ・・・・・・♪ 

 

これだ(・ω・)!(ノ・ω・)ノ♪ 

 

結束バンド(インシュロック、タイラップ) : 4本

 

f:id:shirofukurokun:20170906234912j:plain

 

本来よりも曲がりませんが、多少は曲がってくれました(笑)

半時計回り

f:id:shirofukurokun:20170906235015j:plain

時計回り

f:id:shirofukurokun:20170906235027j:plain

この後、ヒゲを切って整え、

またエルゴラピードで(いつもどおり?)掃除できるようになりました。

 

延命対応成功かな(´・ω・`)♪

 

シロフクロウくんに気がつかれても、なんとなく違和感あっても

きっとほよほよ(?)していることでしょう(謎

 

以上となります (`・ω・´)v

 

 

 

 

 

Raspberry Pi OS の buster と bullseye のi2cアドレスレンジ範囲の違いと、明るさセンサー使用の巻

こんにちは。DIYフクロウです(・ω・)ノ

 

Raspberry Pi OS の buster と bullseye のi2cアドレスレンジ範囲の違い 備忘録です
(buster 32bit とbullseye 32bitにて確認)

 

図において

左がレガシーのBuster、右が現行のBullseryeです。

seeed社のGrove Base HAT for Raspberry Pi(0x04アドレスのSTM32版) のアナログ入力が使えなくて(=動かない)

見比べたところ、

Bullseyeでは0x03,0x04,0x05,0x06,0x07の割り当てが無いから使えないの(・ω・;)

(右図の赤字の箇所がBullseyeから割り当てなしI2Cアドレス)

 

seeed社のGrove Base HAT for Raspberry Pi

STM32版はファームウェアを書き換えて0x08以上にしないと無理っぽいですね
(しろふくろうはすぐには無理です)

 

現行のMM32版のGrove Base HATは、I2Cアドレスが0x08なので BullseryeでもBusterでも

どちらでも使えると思います。

 

ということで、

/home/pi/grove.py/grove/adc.pyの57行目:

def __init__(self, address = 0x08):

の0x08は使用するGrove Base HATがSTM32かMM32かによって、I2Cアドレスに書き換えましょう。(STM32=0x04、MM32=0x08)

 

書き換えたら、/home/pi/grove.py の階層で

sudo pip3 install . を再度して反映させましょう。

 

し忘れると、/home/pi/grove.py/grove/の階層にある

grove_light_sensor_v1_2.py 等のアナログ入力(adc.py)を使うpython3サンプルで

Check whether I2C enabled and   Grove Base Hat RPi  or  Grove Base Hat RPi Zero  inserted

のエラーが出てしまうので、反映は必須です (;ω;)

 

ちなみに、OKな場合は、次の通り出力されます。

pi@raspberrypi:~/grove.py/grove $ python3 grove_light_sensor_v1_2.py 
Hat Name = 'Grove Base Hat RPi Zero'
Usage: grove_light_sensor_v1_2.py <pin>
 <pin> could be one of below values
       in the pin column for ADC function
   And connect the device to corresponding slot
==============
 pin | slot
==============
  0  | A0   
  2  | A2   
  4  | A4  

 

引数0を付けた場合、A0ポートに接続した明るさセンサーの値が数値で出ます:

pi@raspberrypi:~/grove.py/grove $ python3 grove_light_sensor_v1_2.py 0
Hat Name = 'Grove Base Hat RPi Zero'
Detecting light...
Light value: 37
Light value: 36
Light value: 36
Light value: 36
Light value: 36

 

wiki.seeedstudio.com

 

以上となります(`・ω・´)v

 

ラズベリーパイ Zero / Zero 2W / 3A スワップサイズの変更(拡張) bullseye 32bitにて

こんにちは。DIYフクロウです(・ω・)ノ

 

ラズベリーパイ Zero / Zero 2W / 3A スワップサイズの変更(拡張) 備忘録です
(bullseye 32bitにて確認)


0. LXTerminalを起動

1. スワップの状況を確認

free -h

→Swapのtotalが99Mi

 

2. スワップの設定を編集する

sudo nano /etc/dphys-swapfile

 

CONF_SWAPSIZE=100 を 1024とかに変える

Ctrl + o (上書き保存)

Ctrl + x (nanoエディタ終了)

 

3. スワップのサービスを再起動(停止、スタート)する

sudo service dphys-swapfile restart

(restart = stop + start なので少し待つ)

 

4. スワップの状況を再確認

free -h

→Swapのtotalが1.0Giに変わっている

以上となります(`・ω・´)v

Planex Cloud Pi 2 P2Pプラットフォームソフトウェア を1年使ってみた感想

こんにちは。DIYフクロウです(・ω・)ノ

 

令和ゴネン、ウサギ年ですな・・・フクロウ年は永遠に来ない・・・


Planex Cloud Pi 2 をラズベリーパイで使った感想です。

個人的に、「点数」や
「使える」「使えない」や
「いけてる」「いけてない」で書くならば・・・

LTE回線で、リモートSSH接続は割とできるが、性質上、VNC接続は不安定で難しい感じなので、
1000~2000円で購入できたら、月額費用かからない点が良いのでSSH保守用に〇
2000円~3500円で購入できたら△
それ以上なら うーん躊躇しちゃうかも。


うーん、〇△ という感想になってますね (・ω・;ノ)
SSHは下記の条件を守れば、そこまで切断しやすい訳でもないので、
そこそこ使える製品だと思います!


1.ラズパイからの応答が無くなる件(・ω・;)

接続する際はP2PTunnelをCONNECTION SUCCEED UID した後に、TeraTerm等のターミナルを起動してSSH接続する順番でつながりますし、切断する際は、TeraTermを切断してからP2PTunnelを切断すればフリーズしないです。
つまり切断する際に、先にP2PTunnelを切断するとPeer-to-Peerのトンネルがなくなり、確実にTeraTermがフリーズします。(レールの上に車両を置いたのに、車両とレールを撤去する際に、レールを先に外すのは順番的にちょっと違うのでは?という感じでしょうか)

そうはいっても、操作を間違ってP2PTunnelのウィンドウがフリーズしたときはタスクマネージャーで強制的に切れば大丈夫でした。(・ω・;)

また、長時間接続するとフリーズしている場合があるのは、セキュリティ的にリモートをつなぎっぱなしはどうなのか?という面もあるので、使ったあとはまめにSSHを切断する運用が良いと思います。

 

2.ラズベリーパイOS 64bit環境下で動作(・ω・)♪

 

非公式ですが、Raspberry Pi OSが64bit(bullseye)の場合は、
Jetson Nanoのを使って内部のパス等を睨めっこしながら修正すればPiで使えました。
(Jetson Nano用というのは64bitという意味だったようです)


3.まとめ
1年以上連続稼働していますが、個人的には特に問題なくPiのリモート接続に使えて役立っています。

 

今後の製品改良でVNCの接続が安定する事に期待します。(・ω・)ノ