家に帰る途中で、盛大に雪が降ってきて、明日大丈夫か?と思ったが、一時的なものだったようだ。
ラジオで懐かしい曲が流れて来たので、テンション上がったわ(笑)
I know who Iam.
家に帰る途中で、盛大に雪が降ってきて、明日大丈夫か?と思ったが、一時的なものだったようだ。
ラジオで懐かしい曲が流れて来たので、テンション上がったわ(笑)
0:40 付近、車内に雪が舞う程の横風。
時速10km/hくらいで走る下手くそに、わしブチ切れまくり。
こんな下手くそは雪の日に外に出ずに家に引きこもってりゃいいのに。
朝だったら、大体、通勤路で時速40km/h位の走行を想定して、1.5倍の15分程度の時間が掛かる計算で家を出ると、時速10km/hの下手くそに遭遇して、いつもの6倍の1時間も時間が掛かるという罠。
下手くそから解放されて、やっと普通に走れるようになった。
ドライブレコーダーだと分かりにくいけど、結構吹雪いてる。
いつもの山道走ってると、回転灯が見えて、早速事故ってるご様子。
ちょっと縁起が悪いから、調子に乗らず慎重に運転しましたぞよ。
1 2 |
Car Security alarm was GPS Warning! 18599.26m moved. at 2023/01/20 19:50:58 https://maps.google.com/maps?q=35.052185000,136.240325000 |
車載Raspberry Pi Zero 2Wからひっきりなしにメールが届いたが、「車が 18.6km移動してるよ」との事。
もちろん、移動してないので、GPSの測位誤差なんだろうけど、凄いズレ方。
平和堂の屋内立体駐車場に停めると、こういう事が起ったのはこれで2回めで、何か、GPSを狂わせる毒電波でも出てるのだろうか……
平和堂へ行こうとして RX-7 のリモートエンジンスタータを作動させるも、エンジンが掛からない。
カーポートソーラーの20AHのバッテリを RX-7 のバッテリに接続してエンジン始動を試みるもやっぱりかからず。
家にあったジャンプスタータを接続してセルを回すと、やっとかかった。
車内に入ると、切ったはずのドライブレコーダが作動してるし、車載のRaspberry Pi Zero 2 Wと合わせて、電力消費が高いのかな?
とりあえず、ドライブレコーダとRaspberry Pi Zero 2 Wの電源を切って、カーポートソーラーの100Wソーラーパネルと接続して充電中。
【追記皇紀2682年12月19日】
先週から天候が悪くて、カーポートソーラに接続せず、車に常時繋いでいる18Wソーラーパネルも、ほぼ仕事できていなかったのが原因だろうな。
今回はカーポートソーラに繋いだので、大丈夫だとは思うが、一応、ジャンプスタータは暫く車載するか。
【/追記皇紀2682年12月19日】
これの続き。
ちょいとピンぼけだが(笑)、普通にZero用カメラケーブルで接続したら、「使えますし、動作する事を確認しました」(笑)。
このHDMIケーブルは、多分、Raspberry Pi 3のセット買った時に付いてきたヤツだけど、やたら太いな(笑)
という事で、
また接続端子のピン数が少ないRaspberry Pi Zero系統のモデルでは使えません。実際にRaspberry Pi Zero WHでは動作しないことを確認しました。
情報源: Raspberry PiのカメラモジュールをHDMIケーブルで接続する | ガジェライブ!
ここに書かれてるのは、製品付属のケーブルだと、Zero系本体のピン数が少なくて物理的に接続できないから、「使えません」だし、「動作しないことを確認しました。」なんだろうな。
しかし、Zero系用カメラケーブルを使うという、物理的接続する方法を思い付けなかったんだから、接続できない事を確認したのみで、動作しない事は確認できてないよなあ。
フラットケーブルをHDMIケーブルの電線に置き換えてるだけだから、ピン数の合う部分で物理的に接続さえできれば、Raspberry Piの本体要因で、動かないなんて事は有り得ねえだろうに。
Zero系のケーブル延長しようと思ってる奴が、これ、見て買うのやめたら、店にとって、えらい風評被害だわ。事実、わしも諦めかけたけど、書いてる事がおかしいから、実際に買って、自分の仮説を確かめようと思ったんだな。
これで、車載した時のカメラ映像を上に上げられるので、motion で監視状態の時に、空ばっかり写ってるのが、フロントガラスからの景色にできるな。 🙂
どうも、/dev/shm をRAM DISKとして使用すると、ファイルが勝手に消されてしまうようで、そのせいで、lock file したつもりだったが、それが消されてしまい、motion が多重起動してしまっていたようだ。
そこで、明示的にRAM DISKを作成する事にした。
1 2 3 4 5 6 |
proc /proc proc defaults 0 0 PARTUUID=8c28c22f-01 /boot vfat defaults 0 2 PARTUUID=8c28c22f-02 / ext4 defaults,noatime 0 1 tmpfs /ramdisk tmpfs defaults 0 0 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that |
/ramdisk に tmpfs をマウントするようにした。
motion の動画もRAM DISKに作成するようにし、micro SDカードにやさしい運用に 🙂
一応、donedone エントリープラン 128kbps でネットワーク回線が繋がっていて、動画作成後にすぐに家のサーバーに転送するようにしてるので、RAM DISKのパンクは無い想定。
1 2 3 |
# To give the filename as an argument to a command append it with %f ; on_movie_end value on_movie_end rsync -av --remove-source-files %f 192.168.11.254:public_html/motion |
motion の設定で、on_movie_end で実行するコマンドを指定できるので、それでVPN経由でのファイル転送をやっている。
rsync の –remove-source-files で転送元ファイルを削除するので、RAM DISKにはファイルが貯まらない(はず)。
RAM DISK作成に伴い、車載監視プログラムも /ramdisk を使用するように変更。
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 |
#!/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 # bluetooth 接続による動体検知OFF用 #BTMAC=XX:XX:XX:XX:XX:XX # OPPO Reno3 A BTMAC=XX:XX:XX:XX:XX:XX # OpenRun Pro by Shokz BTKEY=XX:XX:XX:XX:XX:XX # AB Shutter3 BTKEY_ACTIVATE=0 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 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_ } sms_send(){ DATEMES=`date +"%Y/%m/%d %H:%M:%S"` curl -X POST https://api.twilio.com/2010-04-01/Accounts/[twilioアカウント]/Messages.json \ --data-urlencode "Body=Car Security alarm was $1 at $DATEMES" \ --data-urlencode "From=[twilio電話番号]" \ --data-urlencode "To=[わしの携帯電話番号]" \ -u [twilioアカウント]:[twilioパスワード] -o /home/noizumi/logs/twilio.log } button_pushed(){ # 車載警報装置発報で、携帯電話のイヤホンマイクスイッチが押され、GPIO26に信号が来る 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" | /bin/sed -r 's/.*Detection status (.*).*/\1/'` if [ "${MOTION_STATUS}" != "ACTIVE" ]; 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} fi fi } motion_stop(){ MOTION_STATUS=`curl -s http://localhost:8080/0/detection/status |grep "Detection status" | /bin/sed -r 's/.*Detection status (.*).*/\1/'` if [ "${MOTION_STATUS}" = "ACTIVE" ]; 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_connect(){ # 接続状態確認 CONNECTED=`cat << _EOD_|bluetoothctl|grep "Connected: yes" power on info ${BTMAC} quit _EOD_ ` # bluetooth 接続状態確認 if [ "${CONNECTED}" != "" ] || [ -e ${MOTION_STOP} ]; then # 接続してたら、動体検知止める motion_stop else # 接続してなかったら、動体検知スタート motion_start fi # AB Shutter3 接続状態確認 CONNECTED=`cat << _EOD_|bluetoothctl|grep "Connected: yes" power on info ${BTKEY} quit _EOD_ ` # 接続してたら triggerhappy再起動 if [ "${CONNECTED}" != "" ] && [ -e /dev/input/event0 ]; then if [ "${BTKEY_ACTIVATE}" != "1" ]; then BTKEY_ACTIVATE=1 sudo systemctl restart triggerhappy.service fi fi } initialize trap shutdown_handler 1 2 3 15 # motion を daemon モードで起動 if [ ! -e ${MOTION_PID} ]; then mkdir -p ${MOTION_MOVIE_DIR} motion -b fi while :; do # pulseaudo 起動確認 if [ "`ps ux|grep -e \"${USER}.*pulseaudio\"|grep -v grep`" = "" ]; then pulseaudio --start sudo systemctl restart bluetooth.service fi # イヤホンマイクボタンが押された時(車載警報装置発報) if [ "`cat ${GPIO_DIR}/gpio${GPIO}/value`" = "0" ]; then button_pushed fi bluetooth_connect if [ -e ${GPS_BASE} ]; then GPS_SAVE=`cat ${GPS_BASE}` GPS_NOW=`${GPS_LATLON}` if [ "${GPS_NOW}" != "" ] && [ "${GPS_BASE}" != "" ]; then DISTANCE=`distance.sh ${GPS_SAVE} ${GPS_NOW}` if [ "`echo \"${DISTANCE}>100\"|bc`" = "1" ]; then mail_send "GPS Warning! ${DISTANCE}m moved." "https://maps.google.com/maps?q=${GPS_NOW}" echo "${GPS_NOW}" > ${GPS_BASE} fi fi fi sleep 1 done |
追加してる処理は、AB Shutter3 用 triggerhappy 再起動で、AB Shutter3 が接続してない状態だと、/dev/input/event* が作られておらず、triggerhappy が起動しても、監視対象デバイスが無い状態。
接続後は、デバイスファイルが作成されるので、その時点で triggerhappyを再起動すれば、設定通り動くようになる。
ちなみに、AB Shutter3 用の設定は次の通り。
1 2 |
KEY_VOLUMEUP 1 sudo reboot KEY_VOLUMEDOWN 1 sudo poweroff |
わしの買った AB Shutter3 は長押しのキーコードが出なかったので、上と下だけ。
triggerhappy は root 権限で動いてるので、sudo は要らんけど、まあ、念の為、付けておいた。
1 2 3 |
#!/bin/sh timeout 1 /usr/bin/gpspipe -w -n 5| /bin/grep -E "\"TPV\",.*\"lat\":.*\"lon\":" | /bin/sed -r 's/.*"lat":([^"]*),"lon":([^"]*),.*/\1,\2/' | /usr/bin/head -1 |
他には、gpsd の出力で、”TPV” の行に、lat と lon が存在しない場合があって、緯度、経度が正しく出力されていない事があったので、その対策をした。
※画像貼るのが面倒なのでアフィリエイトを使っています。
折角、負荷端子付きのチャージコントローラーを買ったので、aliexpress で、2個 $1.57(220.34円)のCOBデイライトを買った。
設定は、ソーラーパネル入力消失後、6時間負荷ONにしたので、大体、午前0時位に電灯が消える。
どれくらいチャチなのかと言えば、カバーを外すと細っそい線が出てきて、商品紹介には、6Wと書かれていたので、こいつに12V 0.5A位流したら、火吹くんじゃね?位の細さ。
さすがにこのまま使う気がしないので、エーモンの線と付け替えた。
前は、光センサースイッチで、スタンドにはめた電球を光らせていたけど、今回はチャージコントローラーで、ソーラー入力消失で負荷ONにする機能があるから、それを使った。
あと、スタンドが経年劣化の錆で朽ちて、車の天井に落下する恐れがあるので、もっと軽量なものにした訳だな。