アンテナのカバーのゴムが劣化してて、簡単に抜ける状態だったのだが、サンシェードを展開したりしたせいで、スポーンと抜けてどこかへ行ってしまった。
なんか、アンテナといいつつ、長いバネなんだが、振動でビョンビョンするし、このままだと少々カコワルイ。
そこで、4mm内径、6mm外径のシリコンチューブと、6mm内径の端末保護キャップをつけて、アンテナっぽくしてみた。
こいつもスポーンと抜ける状態だけど、まだ予備があるので、無くしたらまた作るだけ 🙂
I know who Iam.
Raspberry Pi Zero 2 Wは 4コアなので、並列処理した方が速くなる為、本体プログラムと bluetooth のチェックを分けた。
【メイン処理】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
#!/bin/bash export PATH=/home/noizumi/bin:$PATH GPIO=26 GPIO_DIR=/sys/class/gpio MOTION_MOVIE_DIR=/ramdisk/motion/detected MOTION_PID=/ramdisk/motion/motion.pid MOTION_STOP=/ramdisk/motion.stop GPS_BASE=/ramdisk/gps_base GPS_LATLON=/home/noizumi/bin/gpslatlon.sh GPS_LIMIT=100 initialize(){ # GPIO26を有効化。プルアップ抵抗ON echo $GPIO >${GPIO_DIR}/export sleep 0.1 echo in >${GPIO_DIR}/gpio${GPIO}/direction sleep 0.1 echo high >${GPIO_DIR}/gpio${GPIO}/direction } shutdown_handler(){ # GPIOクリーンアップ echo $GPIO >$GPIO_DIR/unexport if [ "${BT_CHECK_PID}" != "" ]; then kill -TERM ${BT_CHECK_PID} fi motion_stop exit 0 } # 車載警報装置が発報したら、メールで通知する mail_send(){ cat << _EOD_|/usr/sbin/sendmail -t -f yuji@noizumi.org From: yuji@noizumi.org To: yuji@noizumi.org Subject: Car Security alert $1 Car Security alarm was $1 at `date +"%Y/%m/%d %H:%M:%S"` $2 _EOD_ } # 車載警報装置が発報したら、twilio で携帯電話にSMSを送る sms_send(){ # 通常のSMS送信は、電話番号を購入して月額約164円払わねばならないが、 # Verify だと電話番号買わなくていいので、固定費が発生しない。 # # 通知内容は「あなたの車載警報装置 認証コード:123456」みたいな内容だが # 警報が発報した事が分かればよい。 curl -X POST \ https://verify.twilio.com/v2/Services/[twilio Service SID]/Verifications \ --data-urlencode "To=[わしの電話番号]" \ --data-urlencode "Channel=sms" \ -u [twilio Account SID]:[twilio Auth Token] } # 車載警報装置は、発報するとイヤホンマイクスイッチをONにする # イヤホンマイク信号を GPIO 26で検知して、発報時の処理 button_pushed(){ motion_start mail_send activated sms_send activated # ボタンが押されている間、ループ while [ "`cat ${GPIO_DIR}/gpio${GPIO}/value`" = "0" ]; do sleep 1 done mail_send stopped sms_send stopped } # 動体検知スタート motion_start(){ MOTION_STATUS=`curl -s http://localhost:8080/0/detection/status |grep "Detection status"` PATTERN=".*Detection status PAUSE" if [[ $MOTION_STATUS =~ $PATTERN ]]; then curl -s http://localhost:8080/0/detection/start >/dev/null 2>&1 fi if [ ! -e ${GPS_BASE} ]; then GPS_NOW=`${GPS_LATLON}` if [ "${GPS_NOW}" != "" ]; then echo "${GPS_NOW}" > ${GPS_BASE} GPS_SAVE=${GPS_NOW} fi fi } # 動体検知ストップ motion_stop(){ MOTION_STATUS=`curl -s http://localhost:8080/0/detection/status |grep "Detection status"` PATTERN=".*Detection status ACTIVE" if [[ $MOTION_STATUS =~ $PATTERN ]]; then curl -s http://localhost:8080/0/detection/pause >/dev/null 2>&1 fi if [ -e ${GPS_BASE} ]; then rm -f ${GPS_BASE} || true fi } # bluetooth チェックは別処理にし、ファイルの有無で状態を判断する bluetooth_check(){ # bluetooth 接続状態確認 if [ -e ${MOTION_STOP} ]; then # 接続してたら、動体検知止める motion_stop else # 接続してなかったら、動体検知スタート motion_start fi } # GPSで移動距離チェック # 警戒モードONの時、GPSの位置を gps_base ファイルに記録し、 # 以後、100m以上移動毎に現在位置をメール送信 gps_check(){ if [ "`ls /dev/gps* 2>/dev/null`" != "" ]; then if [ -e ${GPS_BASE} ]; then GPS_NOW=`${GPS_LATLON}` if [ "${GPS_NOW}" != "" ] && [ "${GPS_SAVE}" != "" ]; then DISTANCE=`distance.sh ${GPS_SAVE} ${GPS_NOW}` if [ "`echo \"${DISTANCE}>${GPS_LIMIT}\"|bc`" = "1" ]; then GPS_BASE_VALUE=`cat ${GPS_BASE}` TOTAL_DISTANCE=`distance.sh ${GPS_BASE_VALUE} ${GPS_NOW}` mail_send "GPS Warning! ${TOTAL_DISTANCE}m moved." "https://maps.google.com/maps?q=${GPS_NOW}" fi fi GPS_SAVE=${GPS_NOW} else GPS_LIMIT=100 fi fi } # メイン処理スタート initialize trap shutdown_handler 1 2 3 15 bt_check.sh & BT_CHECK_PID=$! # motion を daemon モードで起動 if [ ! -e ${MOTION_PID} ]; then mkdir -p ${MOTION_MOVIE_DIR} motion -b fi # pulseaudo 起動確認 if [ "`ps ux|grep -e \"${USER}.*pulseaudio\"|grep -v grep`" = "" ]; then pulseaudio --start sudo systemctl restart bluetooth.service fi while :; do bluetooth_check # 車載警報装置が発報した時 if [ "`cat ${GPIO_DIR}/gpio${GPIO}/value`" = "0" ]; then button_pushed fi gps_check sleep 1 done |
【bluetoothチェック処理】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#!/bin/bash # bluetooth 接続による動体検知OFF用 BTMAC=XX:XX:XX:XX:XX:XX # OpenRun Pro by Shokz BTKEY=XX:XX:XX:XX:XX:XX # AB Shutter3 FILE_MOTION_STOP=/ramdisk/motion.stop BTKEY_ACTIVATE=0 # bluetoothテザリング用 BTPAN=XX:XX:XX:XX:XX:XX # ASUS_X01BDA # bluetooth テザリングしてなかったらnmcliで接続する function bt_tethering_check(){ # bluetooth 接続状態確認 PATTERN="[\s\S]*?${BTPAN}" if [[ ! $CONNECTED =~ $PATTERN ]]; then sudo nmcli dev connect ${BTPAN} fi } # bluetooth ヘッドフォンが接続してたら、警戒モードOFF function bt_headphone_check(){ # bluetooth 接続状態確認 PATTERN="[\s\S]*?${BTMAC}" if [[ $CONNECTED =~ $PATTERN ]]; then if [ ! -e ${FILE_MOTION_STOP} ]; then # 接続してたら、動体検知止める touch ${FILE_MOTION_STOP} fi else # 接続してなかったら、動体検知スタート rm -f ${FILE_MOTION_STOP} fi } # AB Shutter3 接続状態確認 # triggerhappy に本体再起動、本体電源OFFを定義してある function bt_abshutter_check(){ # 接続してたら triggerhappy再起動 PATTERN="[\s\S]*?${BTKEY}" if [[ $CONNECTED =~ $PATTERN ]]; then if [ "${BTKEY_ACTIVATE}" != "1" ]; then BTKEY_ACTIVATE=1 sudo systemctl restart triggerhappy.service fi else BTKEY_ACTIVATE=0 fi } # bluetoothの接続は並列でチェック # 同じ処理を複数実行しても意味が無いので、各処理終了を待つ。 function bluetooth_connect(){ declare -a pids=() bt_tethering_check & pids+=($!) bt_headphone_check & pids+=($!) bt_abshutter_check & pids+=($!) for pid in ${pids[@]}; do wait $pid done } while :; do # bluetooth 接続状態を取得 CONNECTED=`hcitool con` bluetooth_connect sleep 1 done |
【GPS関連処理】
1 2 3 |
#!/bin/sh # gpspipe で位置情報行を抜き出して、「[緯度],[経度]」で出力する timeout 2 /usr/bin/gpspipe -w -n 10 | /bin/grep -E "\"TPV\",.*\"lat\":.*\"lon\":" | /bin/sed -r 's/.*"lat":([^"]*),"lon":([^"]*),.*/\1,\2/' | /usr/bin/head -1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/bin/bash # 2つの緯度経度情報からメートル単位の距離を算出する。 START=(${1//,/ }) END=(${2//,/ }) cat << _EOD_|bc -l scale=20 pole_radius=6356752.314245 /* 極半径 */ equator_radius=6378137.0 /* 赤道半径 */ pi=4*a(1)/180 start_lat=${START[0]}*pi start_lon=${START[1]}*pi end_lat=${END[0]}*pi end_lon=${END[1]}*pi diff_lat=start_lat-end_lat diff_lon=start_lon-end_lon avg_lat=(start_lat+end_lat)/2 /* 平均緯度 */ e2=(equator_radius^2-pole_radius^2)/equator_radius^2 /* 第一離心率^2 */ w=sqrt(1-e2*(s(avg_lat)^2)) m=equator_radius*(1-e2)/(w^3) n=equator_radius/w distance=sqrt((m*diff_lat)^2+(n*diff_lon*c(avg_lat))^2) scale=2 distance/1 _EOD_ |
今までは USBテザリングで通信していたが、セキュリティの為か、携帯電話の画面ロックを解除した状態にしないと接続できなかった。
しかし、bluetooth テザリングは、一度ペアリングすれば、接続要求によって簡単に繋がるので、画面ロック解除しなくても良くなった。
以前試行した時は、bluetooth テザリングに、 bt-pan というプログラム使ってたけど、接続できなくて sleep 1 で回してても負荷が無茶苦茶高かった記憶がある。
問題は最大3Mbps程度の通信スピードになるが、povo 2.0 の非課金速度が128kbps なので、ボトルネックになる事は無い。
今は、NetworkManagerを導入したおかげで、sudo nmcli dev connect [MACアドレス] で接続できるので、負荷が非常に低く、load avarage も
1 2 |
root@rx7pi:~# uptime 11:02:49 up 15:13, 2 users, load average: 0.10, 0.14, 0.16 |
こんな感じで非常に低負荷で済んでいる。
Raspberry Pi Zero 2 W(以下rx7pi)のカメラソケットが破損して、暫くカメラ運用をしていなかったが、新しい物が買えたので、交換し、カメラ運用するようになった。
motionも最新版にし、「助けて」「すべてのカメ」と、日本語が非常に残念であるが、rx7piからリアルタイム映像を閲覧できるようになった。
Wiregurd VPNで、rx7pi から Kagoya VPSの irc.noizumi.org までVPNを張って、192.168.40.2:8080 で motion のwebインターフェースにアクセスできるようになっている。
家ーKagoya VPSー車 とVPN網を構築し、この網に接続すれば、さも家のLANに繋いでるが如く、稼働している機器にアクセスできるってのは便利だね。 🙂
1 2 3 4 5 6 7 |
noizumi@rx7pi:~ $ nmcli con NAME UUID TYPE DEVICE aterm-f88921-g aac44e15-61ab-4a17-a712-0f813fc7eb2f wifi wlan0 iijmio 2fb23a81-e2a9-4a00-a318-1bea37a2be3d gsm cdc-wdm0 wg0 c556b10e-b638-42b6-a23c-0108f617b6dc wireguard wg0 donedone c59a1718-9cb4-406b-b043-9106eca59d3e gsm -- povo2.0 e11025e3-e746-44e3-9ebb-82868840c9fa gsm -- |
raspberry pi zero2 Wにて、NetworkManager のモバイルブロードバンド設定で iijmio 設定したら、無事、起動して即LTE回線接続するようにできた。
EM7430の通信カードで、povo2.0 のSIMだとダメだけど、iijmio の eSIMを eSIM.me の物理SIMカードに焼いた奴を挿したらいけた。
eSIMだから、月額440円で2GBまでの契約なんだが、もう一枚か……うーん。
eSIM.meのブランクカード余ってるから、もう一枚 eSIM契約でいけるし、今使ってる携帯電話の OPPO Reno7 Aは eSIM対応してるから、eSIM.me に焼かなくてもそれに使えばいいという話もある。
正直、通信速度が128kbpsでも事足りるから、iijmioのスペックは過剰で、povo2.0が使えていれば、丸く収まってたのに、色々と悩むなあ。
RX7に車載している raspberry pi zero2 W(以下rx7pi)だが、通信にUSB接続の携帯電話を使っている。
携帯電話のセキュリティ上、必ずロック画面を解除してからでないとUSB接続してくれないので、時折ふと忘れる事があって、車載警報が鳴ったとしてもメール通知できない状態の時がある(笑)
そこで、通信カードに変えようと思った。
これなら、rx7pi 電源投入時に自動で通信を確立できるはず。
ところが、dhcpcd で通信カードを使った設定例が探しても無い。
そこで、NetworkManager のモバイルブロードバンドで設定しようと、rx7piに NetworkManager をインストールしてみた所、dhcpcd とバッティングしてるのか、wi-fi接続毎にIPアドレスが変わって大層やりにくい。
ネットには、raspi-config で、dhcpcd か NetworkManagerのどちらを使うのか切り替えられるという記述を見たが、10 の buster のraspi-config にはそんな項目は無い。
とりあえず、NetworkManager の設定の為に、GUIを復活させてみたが、起動途上の画面は見えても最終的に GUIでも CUIでも「HDMI信号なし」となる。
つまり、rx7piにキーボードとマウスとモニタ繋いで操作ができず、ネットワーク接続できなくなったら、一切何もできなくなるから、迂闊に dhcpcdをアンインストールできない。
これは詰んだな。
後で気付いたが、raspi-config でGUI bootかCUI bootか選べるようになっていて、素人が知ってるLinuxの知識で、
1 |
# systemctl set-default muti-user.target |
とかやっちゃうと、多分、raspberry pi の設定と食い違いが出て不具合が出るのだろう。
という訳で、raspberry pi OS 11 の最新版を入れる事にする。 🙁
まずは、万が一の為に sdカードのバックアップ
1 |
# dd if=/dev/sdc of=.rx7pi.img |
32GBだから長いんだこれが 🙁
そしてバックアップが取れたら、今使ってる Ubuntu にSDカードを焼く環境を作る。
To install on Raspberry Pi OS, type
sudo apt install rpi-imager
in a Terminal window.
情報源: Raspberry Pi OS – Raspberry Pi
とあるので、その通りにする。
SD カード32GBをバックアップしてる間に、Raspberry Pi OS with desktopのイメージをダウンロードしていたので、次の様にして解凍して、OSのタブでカスタムイメージで設定。
1 |
$ xz -dc 2023-05-03-raspios-bullseye-armhf.img.xz |
しかし、OSのタブ見たら、ダウンロードも自動でしてくれるみたいで、別にダウンロードしなくても良かったが、その分、時間は節約できたから、まあヨシ。
ギアのボタン押したら、SDカードに焼く前に中身をカスタマイズできるようになっていて、今まで業者から買った時に付いてくるSDカードをそのまま使用していたから知らんかった。
pi ユーザー作らないし、結構便利だな。 🙂
焼き上がったので、早速 rx7pi にセットして起動……。
GUIで起動したけど、やたら重いなと思ったら、こいつメモリ500MBしか無かったんだった orz
お、あるね。という事で、NetworkManager を有効化して、デスクトップのWi-Fiアイコンを右クリックして、モバイルブロードバンドを設定……。
うーん、Ubuntu とかだと、「日本」とか選択できるんだが、選択肢が空だし、APN記入してても設定ファイルに記録されないし、完成度が低いぞ?
通信カードテストの為、Windows11 仮想マシンで色々やったが、donedone は接続できても、povo2.0 のSIMは「圏外」となって接続できない。
同じ KDDIの MVNOなのに、povo はダメってのがよく分からんが、楽天モバイルでも、古い携帯電話で使えないってのがあったし、EM7430って結構古いから、ダメなのかもしれんね。
という訳で、通信カード計画は断念 🙁
あと、 CUI起動にして、NetworkManager は、Wi-Fi の設定ファイルで、permissions=user:noizumi;: とかになってると、わしがログインするまでネットワーク接続されないので、permissions= と空にしてやった。
カメラはソケットが壊れたので、motion は入れてないけど、車が移動したら通知する為に、gpsd はインストール。ver.3.22 だったので、野良ビルドしなくて済んだ。 🙂
あと、メール飛ばすのに exim4 入れて、
1 |
# dpkg-reconfigure exim4-config |
「スマートホストでメール送信: ローカルメールなし」で設定。
設定した内容は次のファイルに記録される。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
dc_eximconfig_configtype='satellite' dc_other_hostnames='' dc_local_interfaces='127.0.0.1 ; ::1' dc_readhost='noizumi.org' dc_relay_domains='' dc_minimaldns='false' dc_relay_nets='' dc_smarthost='sv13449.xserver.jp::587' CFILEMODE='644' dc_use_split_config='false' dc_hide_mailname='true' dc_mailname_in_oh='true' dc_localdelivery='mail_spool' |
そして passwd.client にプロバイダのサーバーの認証情報を記述。
1 2 3 4 5 6 7 8 |
# password file used when the local exim is authenticating to a remote # host as a client. # # see exim4_passwd_client(5) for more documentation # # Example: ### target.mail.server.example:login:password sv13449.xserver.jp:[メールアドレス]:[パスワード] |
VPNの wireguard は、家のサーバーとのみ接続してたけど、家帰ってきて、家のLANに繋がると、VPNが応答しなくなるので、Kagoya VPSのサーバーをメインとして、家のサーバーと rx7pi はクライアントにした。
これでも、同じ家のLANに接続してるクライアント同士は通信できないのだが、少なくとも、Kagoya VPS経由でやり取り可能だから、一切rx7piと接続できない自体は減るはず。
いやあ、夏季休暇を満喫してるなあ 🙂
車検とへこみ修理とサスペンション交換に出していたRX-7が一時戻ってきた。
サスペンションはヘタっていて、フルボトム状態になると異音がするようになっていた。
右後方が遠心力でフルボトム状態になると、「ガーッガガガ」なんて音が出ている。
ちなみに、 RX-7 SPIRIT Rのサスペンションは、ビルシュタインダンパーなのだが、マツダには純正部品無しで、ビルシュタインにも問い合わせて貰ったが、RX-7用は出して無いとの事。
どうすっかなと悩んでいた所、車屋より、AutoExe のStreet Sports SUS.Kit KIJIMA-SPECってのを提案された。
一瞬、DQNのサスかよって思ったが、ページを良く読むと、マツダでRX-7のサスペンション開発をやっていた貴島孝雄氏が手がけたものだとか。
これなら純正に近いものになるなと思い、これに決めた。
乗った感じだと、今までサスペンションの油圧が抜けて、バネだけの乗り心地だったのが、段差で大きく沈み込む事が無くなったような気がするな。
で、「一時戻った」というのは、足周りのリンクの部品が入ってくるのが 9月になるとの事で、入ったら再び車屋へ再入院となるからだ。
純正部品だが、広島工場でせっせとリンクの部品を作ってくれるのだろう。
既に20年も経ってて、部品も枯渇してきているのに、未だ一ユーザーの為に部品を提供してくれるのはありがたいのう。
何か、日本語ペラペラのガイジンが尋ねて来て、RX-7を500万で売ってくれと言ってきたらしい。
母親が応対したが、名刺を渡され、それには三重県のダブルエムモーターズ株式会社の代表取締役と書かれていた。
車買い取りの為に、三重県から社長が車で遠征して、滋賀県の住宅地を回ってんの?
窃盗の下見じゃねえよな?
しかし、500万にいくら乗せて売るつもりだろう?車の程度も分からんのによくその値段付けられるな。
ちなみにボンネット開けてるのは、別にこの人に見せる為じゃなくて、RX-7 は普通に走行しても、エンジンの熱が逃げにくいから、ボンネットインシュレーターがすぐ痛むので、走行したら、開けて熱を逃がすようにしてるのだな。
家に帰る途中で、盛大に雪が降ってきて、明日大丈夫か?と思ったが、一時的なものだったようだ。
ラジオで懐かしい曲が流れて来たので、テンション上がったわ(笑)
0:40 付近、車内に雪が舞う程の横風。
時速10km/hくらいで走る下手くそに、わしブチ切れまくり。
こんな下手くそは雪の日に外に出ずに家に引きこもってりゃいいのに。
朝だったら、大体、通勤路で時速40km/h位の走行を想定して、1.5倍の15分程度の時間が掛かる計算で家を出ると、時速10km/hの下手くそに遭遇して、いつもの6倍の1時間も時間が掛かるという罠。
下手くそから解放されて、やっと普通に走れるようになった。
ドライブレコーダーだと分かりにくいけど、結構吹雪いてる。
いつもの山道走ってると、回転灯が見えて、早速事故ってるご様子。
ちょっと縁起が悪いから、調子に乗らず慎重に運転しましたぞよ。