2026年8月13日木曜日

イナバのガレージにソーラーLEDライトをつけてみた。

 バイク用にイナバのガレージ(FM-2230SD)を建てたんだけど、ガレージの入口を照らすのにセンサーライトを付けたかったのでソーラタイプを取り付けてみた。

取り付けにはマグネットベースを使ってガレージには穴あけ不要だし移動もできるようにしておいた。

分離式なのでソーラは日がよく当たるようにしたかったので、ガレージの後ろの方に設置して、配線を中を通すようにしてみた。実は最初は屋根の上に置いただけだったんだけどどうも水の流れを妨げてそうなので…

前の方は空気穴の下の方の隙間から通せないかトライしたんだけどもオプションのシャッターケースをつけてしまったためか隙間がなかった。雨が入らないということはいいことだけど…
結局サイドの水抜き穴を使うことにしてみた。おそらくこのパーツは左右共通なのでこの位置に穴が空いてるだけで、フロントの水抜き穴はほぼ使われないだろうということで…(後ろの方はここの穴からめっちゃ水出てくる)

ケーブルはコネクタがそのまま通らなかったのでカットして通して中でつなぐことに。

後ろは屋根の下にいい感じの隙間がある。

ケーブルをどこに固定するかなんだけど、フロントのケーブルを通した穴のところは中も水が流れるようになっているのでそこからは遠ざけるようにケーブルを貼り付けた。ここからケーブルを伝って水が中に入ってきても困るし。

このソーラー、ちょっと曇ってるときに測定したら充電中でも6.3V~5.2Vぐらい出ていたので横取りしてガレージ内LEDとかも一緒に点灯させることができるんじゃなかろうか。

ちなみにソーラーに光があたってる間はLEDが点灯しないので、室内用は充電しながら使えるタイプじゃないと不便かも。

とりあえずケーブルは適当につなぎ合わせておいたのでガレージ内用のLEDが届いたらもうちょっとなんとかしようかな。

2026年8月12日水曜日

MediaMTXでAction 5 ProのHWエンコードを使ってみた。

 前にラズパイでuStreamerでUSBカメラのMJPEGエンコーダを使ってそのままストリーミングしたらめっちゃ低遅延だったんだけど、友人がDJI Osmo Action 5 Proを持ってるとのことだったので借りてきてH264バージョンを試してみることに。

まず初めにどのフォーマットに対応してるのか確認。ウェブカメラモードにしてラズパイゼロに繋いで、

v4l2-ctl -d /dev/video0 --list-formats-ext

をしてみると

ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
        [1]: 'H264' (H.264, compressed)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.040s (25.000 fps)

まずは前回と同じ条件(720pのMJPEG)で測定してみた。

247msだった。C270だと160msぐらいだったのに。Action 5 ProのほうがC270より遅延がある。やはりここはUSBカメラのチップによるのかな。

お次はH264と思ったんだけどuStreamerが対応していないようなのでMediaMTXで試してみることに。

MediaMTXはラズパイカメラの遅延を試したときに使ったやつをそのまま使うことに。H264をそのまま入れてやるのにffmpegも必要だった。(copyなので変換はしていない)

mediamtx.ymlの下の方のpaths:を書き換える。

paths:
  cam0:
    runOnInit: ffmpeg -f v4l2 -input_format h264 -video_size 1920x1080 -framerate 30 -i /dev/video0 -c:v copy -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH
    runOnInitRestart: yes

解像度は720pと1080pが対応してるのでそれに合わせて入れてやらないとだめっぽい。

とりあえず1080pで遅延測定。

遅延は312msほど。フルHDでこの遅延はなかなか良いのかも。ちなみにWebRTCを使ってブラウザから見てる。

次は720p

遅延は319msだった。フルHDとあんまり変わらないかも。ちなみに帯域は2Mbpsぐらい。動かないと1/4ぐらいになる。フルHDだと4Mbpsぐらい。

カメラがめっちゃ温かい。そして電源に繋いであるのにバッテリーが減っているのでラズパイと同じところから供給では電流が足りていない可能性。今回はUSB2.0ってのもあるかもしれないけど。

ラズパイカメラV1より画質が良くて低遅延なんだけども今のところの遅延最強はC270とuStreamerかなぁ。

2026年8月11日火曜日

MacBook Pro Late 2013をmacOS Sonomaにアップグレードしてみた。

 昔購入したMacBook Proを久しぶりに引っ張り出してきたらChromeとかドライバ類のサポートが終了していて困ったんだけど、OSもBigSurまでのサポートなのでどうしようもなくなってしまっていた。

調べてみるとOpenCore Legacy Patcherというソフトを使うとサポート終了したデバイスに新しいOSをインストールすることができるらしい。試しにやってみた。

必要なものは32GB以上のUSBメモリ。できればUSB3.0対応が良いらしい。microSDカードとカードリーダーで試してみたけどEFI bootで表示されなかったのでUSBメモリが良さそう。

ちなみにBootcampはBoot Campアシスタントから削除しておいた。

とりあえずBigSurまでアップデートされているのでOpenCore Legacy Patcherをダウンロードしてインストールする。OpenCore-Patcher.pkgをダウンロードして実行すればOK。

インストールが終わったら起動して、インストール用USBメモリを作成する。Create macOS Installerを選ぶ。

今回は少し古めのSonomaにしてみた。USBメモリの作成が終わるとOpenCoreをインストールするように言われるのでOpenCoreをMac本体のSSDにインストールする。

OpenCoreをインストールしたら作成したインストールUSBメモリを指したままOptionキーを押しながら再起動する。

EFI bootが追加されてるのでそちらからSonomaのインストーラーを選択して起動。インストール先をBigSurが入ってるパーティションを選んだのでアップグレードインストールが実行された。

あとは何回か再起動を繰り返すんだけど、特に何もせずに放置しておくと勝手にSonomaが立ち上がってきた。結構な時間がかかったような気がするけどこれは簡単かも。

とりあえずChromeもアップデートできるようになったし、動作もSonomaとBigSurだとさほど変わらない気がするのでまだ使えそう。



2026年8月1日土曜日

OpenWrt用のMACアドレス検索スクリプトを作ってみた。

 DD-WRTからOpenWrtに移行するにあたって、デバイスが多いと何がつながってるのか調べるのにMACアドレス検索を使っていたんだけど、DD-WRTではクリックするだけで見れていたのにOpenWrtのLuCIにはそういう機能がないのでJavaScriptで試してみた。

最初ブックマークレットを作ってみたんだけど、自動リフレッシュのタイミングでリンクが消えてしまうのでluci.jsに追記する形にしてみた。

(function(){function l(n){let w=document.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,!1),t,m=/\b([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})\b/g,r=[];while(t=w.nextNode())t.parentNode&&"SPAN"!==t.parentNode.tagName&&"A"!==t.parentNode.tagName&&"SCRIPT"!==t.parentNode.tagName&&"STYLE"!==t.parentNode.tagName&&m.test(t.nodeValue)&&r.push(t);r.forEach(e=>{let p=e.parentNode;if(!p)return;let h=e.nodeValue.replace(m,o=>{let oui=o.replace(/[:-]/g,"").substring(0,6).toLowerCase();let u=["https:","","uic.jp","mac","address",oui,""].join("/");return'<span data-mac-link="1" title="MAC Vender: '+o+'" style="color:#0066cc;text-decoration:underline;font-weight:bold;cursor:pointer;" onclick="window.open(\''+u+'\',\'_blank\',\'width=800,height=600,scrollbars=yes,resizable=yes\');">'+o+"</span>"});let s=document.createElement("span");s.innerHTML=h;while(s.firstChild)p.insertBefore(s.firstChild,e);p.removeChild(e)})}let v=new MutationObserver(n=>{n.forEach(w=>{w.addedNodes.forEach(t=>{1===t.nodeType&&!t.querySelector('[data-mac-link="1"]')&&l(t)})})});if("loading"===document.readyState)window.addEventListener("DOMContentLoaded",()=>{l(document.body);v.observe(document.body,{childList:!0,subtree:!0})});else{l(document.body);v.observe(document.body,{childList:!0,subtree:!0})}})();

この一行を/www/luci-static/resources/luci.jsの一番最後に追記するだけ。後は設定画面を開いてCtrl+F5を押してリロードするとあらゆるMACアドレス表示部分がリンクに変更されているはず。

これでhostnameが表示されないデバイスでも、デバイスのメーカーがわかりやすくなったのでデバイスが増えても安心。
MACアドレスをクリックするとこんな感じで検索サイトをそのまま小さいウインドウで出してくれる。DD-WRTの機能としては地味に便利だったのでこれでOpenWrtのLuCIも便利になったな。

2026年7月26日日曜日

OpenWrtでDNSブロックを設定してみた。

 OpenWrtでもDD-WRTで使用してたDNSブロックのスクリプトが使いたかったので設定してみた。Softwareからインストールしてもいいんだけど何を使えばいいのかわからなかったのでとりあえず。WRC-X3200GST3に設定してみた。

DD-WRTで使用していたスクリプトはjffsに入れておいてtmpにコピーしてcronで実行していたので、同じ用にStartupスクリプトに入れてtmpにコピーしてcronで動かすようにしてみた。まずはStartupの設定。

#adblock
cat <<'EOF' > /tmp/adblock.sh
#!/bin/sh
logger WAN up script executing
if test -s /tmp/hosts0
then
        rm /tmp/hosts0
fi

logger Downloading http://www.mvps.org/winhelp2002/hosts.txt
(wget -qO- https://winhelp2002.mvps.org/hosts.txt |
    sed '2,$s/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
wget -qO- https://280blocker.net/files/280blocker_domain_$(date +"%Y%m").txt |
    sed 's/^/127.0.0.1 /g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
#wget -qO- https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardDNS.txt |
#    sed 's/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
#    grep -v localhost ;
#wget -qO- https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt | 
#          grep "^||" | grep -v "*" | sed 's/||/127.0.0.1 /g'| tr -d '^';
wget -qO- https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardMobileAds.txt |
    sed 's/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
#wget -qO- https://raw.githubusercontent.com/multiverse2011/adawaylist-jp/master/hosts |
#    sed 's/127.0.0.1/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
#    grep -v localhost ;
wget -qO- https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt |
    sed 's/^/127.0.0.1 /g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
wget -qO- https://warui.intaa.net/adhosts/hosts.txt |
    sed 's/0.0.0.0/127.0.0.1/g; s/[[:space:]]*#.*$//g;' |
    grep -v localhost ;
echo 127.0.0.1 v-img-ad.interactive-circle.jp ;
echo 127.0.0.1 extrk4.mira-dsp.com ;
echo 127.0.0.1 ve.adingo.jp ;
echo 127.0.0.1 cu-ad.tbs.co.jp;
echo 192.168.1.1 buffalo.setup;
echo 192.168.1.1 web.setting ) | tr ' ' '\t' |
    tr -s '\t' | tr -d '\015' | sed '/^$/d' | sort -u >/tmp/hosts0
sed '/vortex.data.microsoft.com/d' /tmp/hosts0 -i
sed '/imasdk.googleapis.com/d' /tmp/hosts0 -i
sed '/tags.tiqcdn.com/d' /tmp/hosts0 -i
/etc/init.d/dnsmasq restart
EOF

chmod +x /tmp/adblock.sh
/tmp/adblock.sh

WRC-X3200GST3の方はOSがそれ用じゃないのでLEDの設定とかあるけどそれと一緒にStartupに突っ込んでみた。DD-WRT用から変更したのはcurlからwgetにしたりとかdnsmascの設定とかかな。

お次はdnsmasqの設定とcronの設定をsshから。

uci add_list dhcp.@dnsmasq[0].addnhosts='/tmp/hosts0'
uci commit dhcp
echo "0 4 * * * /etc/adblock.sh" >> /etc/crontabs/root

これで後はルーターを再起動してやれば自動でtmpに作成されてAM4時にフィルタが更新されるようになるはず…

ちなみにWAN側のDNSはカスタム設定にしておいた。

2026年7月25日土曜日

かってにスイッチをつけてもらった。

 玄関の電気を自動でつくようにするために"かってにスイッチ"WTK1811WKをポチってみた。やはり今まであったのに無いとちょっと不便だったので…

熱線センサ付自動スイッチというもので、人間が通ると自動で電気がつくんだけどWTK1811WKとかWTK18115WKとかどっちを買えばよかったのかわからなかったんだけど、たまたまWTK1811Wが出品されてて買い逃がしてしまったら新型でLED対応のWTK1811WKが出ていたので即ポチってみた。

WTK1811WKとWTK18115WKの違いはブランクチップが付属しているかどうかの違いっぽい。なのでスイッチの配置によって選ぶ必要があるっぽいけどWTK1811WKのブランクチップを外せばWTK18115WKとして使える。

取り付けは電気工事士の資格が必要なので父にお願いしてつけてもらった。もともと3連が付いていたんだけど1個は4路スイッチであんまり使わないところのが来ていたのでバイパスしてもらって、かってにスイッチが2個分占有するのでちょうどよくつけられた。

かってにスイッチの蓋があいて時間と明るさセンサの感度を調整できるの知らなかった…

2026年7月19日日曜日

OpenWrtにTailscaleをインストールしてみた。

 E8450用のUBIバージョンのOpenWRTをインストールしたWRC-X3200GST3にTailscaleをインストールしてみた。容量がたくさんあるのでいろいろなアプリケーションがインストールできそう。

とりあえずコマンドプロンプトから
ssh root@192.168.1.1

でOpenWRTのSSHにログオンして

apk update
apk add tailscale

でインストールできる。今回使ってるOpenWRTのバージョンは25.12.5です。OpenWRT 25.12からapkコマンドになっているのね…
インストール後、Disk Spaceを11.82MBぐらい消費した。

tailscale up

でTailscaleを起動して、うまく起動するとURLが表示されるのでPCなどからアクセスしてTailscaleにログオンする。
デバイスがうまく登録できるとSuccessとでてログオン完了。

とりあえずこれでTailscaleのネットワークに接続されたんだけど、今回はExit nodeとして設定してみる。

apk add ethtool
ethtool -K lan1 rx-gro-list off ethtool -K lan1 rx-udp-gro-forwarding on
tailscale up --advertise-exit-node --netfilter-mode=off

これでTailscaleのコンソールからExitノードとして設定できるようになる。ethtoolの設定2行はCPU負荷を軽くするための設定のようなんだけど起動のたびに戻ってしまうようなのでこの2行はうまく行ったらStartupに入れておくと良い。ちなみにlan1なのはE8450化するとlan1がWANなので…WANにつながってるインターフェースを設定する感じ。

次にTailscaleのコンソールの設定とファイアーウォールの設定。Tailscaleのコンソールを開いて

openwrtのデバイスのEdit route settingsを開いて
Use as exit nodeにチェックを入れる。

次にOpenWRTの方に戻ってWebUIで設定してみた。

Network→Interfaceのところを開いてAddでtailscaleを追加。

とりあえずこの設定のあとに出てくる画面はデフォルトのままで保存した。これを作っておかないとファイアーウォールの設定が出来ないので…

次にNetwork→Firewallを開いて、Addで

こんな感じにWAN側にパケットを通せるようにして保存。
あとはSave & Applyをする。

これでiPhone側からTailscaleに接続してEXIT NODEをタップするとopenwrtが選べるようになってるはず。なぜか繋がらないときはifconfigをしてtailscale0のIPアドレスを確認してみると良いかも。ipv4のアドレスが存在してなくて再起動したらつながった…
とりあえず最後に再起動するとよいのかも。(Interfaceの設定を変更したりするとどうしてもEXIT NODEが繋がらなくなるんだけど再起動で治る)

前にDD-WRTでWireGuard設定したときよりも簡単かもしれない。これで海外に行ったときも安心だな。WireGuardでは普通にネトフリも見れていたのでTailscaleではどうなるか。

LAN内のデバイスに接続できるようにするのは後日やってみようっと。