B-Routeサービスの魅力に迫る:ハードウェアとソフトウェアの準備完全ガイド

序章

最近引っ越しをしたので、以前から興味があったB-Routeサービス(電力メーター情報発信サービス)を試してみることにしました。東京電力の管轄内に住んでいるので、直接東京電力に申し込んでB-Routeサービスを開始しました。これで、自分のIoTデバイスを通じて、自宅の電力消費量や累計のキロワット時数をリアルタイムで取得できるようになります。

ハードウェアの準備

東京電力は迅速にB-Routeサービスを開始してくれました。認証IDとパスワードも受け取りました。次は、デバイスの準備です。最初は、検索エンジンでB-Route + Arduinoと検索し、ロームのBP35A1モジュールを使用したいくつかのソリューションを見つけました。簡単に評価した結果、実行可能だと判断しました。そこで、BP35A1モジュールを販売しているディーラーを探し始めましたが、税込みで8000円以上もすることがわかりました。そこで、中古市場で安いものがないか探してみると、IIJクラウドサービスが廃業したことで市場に出回っているIoTデバイス「SA-M0」を見つけました。これはシングルボードコンピュータのソリューションで、BP35A1モジュールが内蔵されている点が鍵です。ヤフオクで3000円で手に入れることができたので、即購入し、このデバイスの研究を始めました。

購入前に、このSA-M0は本来IIJクラウドサービスと連携して使用する必要があることを知っていましたが、IIJが廃業したため、現在中古市場ではジャンク品として扱われています。最悪の場合、シングルボードコンピュータ自体が使えず、モジュールを取り外して単独で使用する必要があるかもしれません。しかし、運が良ければ、この記事のケースのように、シングルボードコンピュータも利用でき、追加のハードウェアを節約し、個人的にはArmadillo-Box WS1ベースのSA-M0は、回路設計や筐体設計が非常に精巧な商業レベルの製品で、多くのオープンソースソリューションよりも優れていると考えています。そのため、このシングルボードコンピュータを使ってスマートメーターとのやり取りを行うことにしました。

ソフトウェアの準備

まずはshellアクセスを試みます。Armadilloの公式ウェブサイトのマニュアルによると、このマシンはBusyboxLinuxを搭載しています。公式マニュアルの手順に従ってshellに成功裏にアクセスしました。

ここでちょっとしたエピソードがあります。私はESP32からマイコンに触れ始めたので、通信に関する理解はTTLレベルのUARTに留まっていました。しかし、このSA-M0はRS232レベルなので、USB->UARTアダプタに接続するためにはレベル変換が必要でした。

RS232

[root@abws1-0 (pts/0) ~]# uname -a
Linux abws1-0 3.14.36-at11 #1 PREEMPT Sat Mar 31 02:35:12 JST 2018 armv5tejl GNU/Linux
[root@abws1-0 (pts/0) ~]# cat /proc/cpuinfo
processor       : 0
model name      : ARM926EJ-S rev 4 (v5l)
BogoMIPS        : 133.00
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 4

Hardware        : Armadillo-420
Revision        : 0300
Serial          : 0000000000000000
[root@abws1-0 (pts/0) ~]#

当初は、B-Routeのプロトコルを自分で調べて小さなプログラムを書いてみようと思っていましたが、Githubを軽く検索すると、既にたくさんのソリューションがありました。その中からPythonで書かれたプログラムを使ってみることにしましたが、このマシンに実行環境を整えるのが結構大変だと気づきました。最終的には、コンパイル型のソリューションを使うことに決めました。例えばGoやRustなどです。Githubオープンソースのプロジェクトもあり、早速試してみると、とても使いやすかったですが、そのプロジェクトはデータの読み取りのみで、どうやらexecを使ってshellスクリプトを実行し、zabbixのようなサービスに送信しているようです。しかし、私たちが必要なのはHome Assistantに直接データを取得してもらうことです。色々と研究した結果、万能のmqttを橋渡しとして使い、接続を完了することにしました。

コードの部分は非常にシンプルです。ほとんどの部分は元のリポジトリの実装を参考にすることができるので、mqttの部分を追加するだけでよかったのです。最後にパラメータを設定し、起動時に自動で実行されるようにすると、大きな成果が得られました。

ha

参考文献

https://www2.hatenadiary.jp/entry/2023/04/26/202125

https://github.com/yakumo-saki/b-route-reader-go

NURO MAP-E と OpenWRT:安定した効率的なネットワーク接続を構築

イントロ

NUROが提供するHGW(ホームゲートウェイ)にうんざりしました。ブリッジモードに変更できず、ファームウェアの機能も散々です。さらに、最初に契約したのは2024年2月で、その時にはSGP200WというHGWを受け取っていました。それはIPv4+IPv6のデュアルスタックDHCPでした。しかし、1か月後に2.5gをサポートするNSD-G1000Tを試したくなり、変更を申請したところ、密かにMAP-Eに変更され、専用IPv4とお別れしました…。ソニーマーケティング末期に遭遇したのに、それでも逃してしまいました。HGWとMAP-Eのダブルデバフの下で、自分の機器に置き換えることを考えました。

準備

最初は先輩に相談し、彼のTL-ER2260Tのプランをそのまま採用する予定でした。しかし、彼自身はまだデュアルスタックを使用しているため、TL-ER2260TはOpenWRTの公式サポートがなく、非公式のクローズドファームウェアしかありません。ソフトウェアリポジトリも共有できないため、選択しませんでした。その後、QNAPのqhora-301wを調査しましたが、この製品の10gポートはRJ45口で、2024年3月の時点でOpenWRTがこのルーターをサポートするファームウェアの対応度は良くありませんでした。これらの機器はすべて中国から輸入する必要があり、チャンスは一度しかないという原則に基づいて、最終的には安定を求めてx86ソフトウェアルーターを選択しました。さらに、GPON ONUスティックもどれが使えるか分からないため、ODI、HuaweiNokia、Alcatelの4つのメーカーの製品をそれぞれ1つずつ購入しました。

ハードウェアの選定

実際、全工程で最も難しいのは選定の部分です。その後、機器がすべて届いたら、箱を開けて商品を確認します。気づけば、スイッチを選ぶのに失敗していました。1つのSFP+ポートと8つのRJ45ポートを選ぶべきだったのに、2つのSFP+ポートと4つのRJ45ポートを選んでしまいました。しかし、2台をつないで使用すれば問題なく使えます。 GPON ONUスティックはまずODIを試しました。最も高価だったためです。しかし、元のファームウェアが原因で、設定が正しくなかったようで、O5の問題が解決できませんでした。しかし、他のブログでODIで成功してO5を達成した事例も見ました。その後、HuaweiNokiaに切り替えました。どちらも自作のOpenWRTファームウェアで、既にNSD-G1000Tに切り替えていたため、GPON SNを設定すれば完璧にO5を達成できました。Alcatelのものは電源を入れずに箱に戻しました…。

箱へ戻す

コンセントの節約を考えて、GPON ONUスティックとメディアコンバーターを使用せずに、直接スティックをスイッチに挿入し、スイッチのVLANを設定してWANとLANを分離しました。そして、スイッチの2つのポートにそれぞれx86ソフトウェアルーターのWANとLANを接続しました。他のポートはすべてLANポートとして設定し、2年以上使用していたWiFiルーターもついにブリッジとして引退しました。配線と整理の作業を経て、いよいよ電源を入れて実験を開始しました。

MAP-E

まず、x86ソフトウェアルーターにOpenWRTをインストールします。ここでは、公式のファームウェアセレクターの製品ファームウェアを直接選択します。期待通りにDHCPIPv6アドレスを取得できます。ここでopkgを通じてmapパッケージをインストールし、このスクリプトを使用してMAP-Eに必要なパラメータを自動生成します。この点ではリポジトリの開発者に感謝です。これでIPv4も正常に動作するはずです。ここで少し余談ですが、以前OpenWRTを使用したことがなかったため、多くの部分で最初はどのように設定すればいいのか分かりませんでした。MAP-Eを完了した後、IPv6アドレスを取得できないことに気づき、最初はそのスクリプトの問題かと思いました。しかし、最終的には、IPv6アドレスを割り当てるためのプロトコルを設定していないことが原因であることが判明しました。SLAACかDHCPv6のいずれかを設定していないため、調査の結果、SLAACを設定してネットワークを正常に復旧させました。

完璧

IPv4 && Ping

ここまで順調だと思っていたのですが、IPv4Pingが動作しないことに気づきました。しかし、IPv6Pingは正常に動作していました。そこで調査を進めたところ、こちらに解決策が見つかりました。日本のISPのMAP-Eプロトコルの一部がmapパッケージで処理されていない部分があるようです。そのため、コードを手動で修正する必要があります。

IPv6 && Android

WiFiに接続したAndroidバイスでは、数時間後にIPv6接続が失われます。WiFiを一度切断して再接続することで正常に戻りますが、数時間後に再び失われる現象が起こります。この問題は他のルーターを使用していたときにも経験しましたが、その時はルーター自体のファームウェアが不十分で深く追求しませんでした。今はOpenWRTを使用しているので、しっかり調査する時が来ました。この問題の原因はシンプルです。Androidがディープスリープモードに入ると、RA(ルーターアドバタイジング)を失います。RAのライフタイムがデフォルトで1500秒であり、ディープスリープ後にライフタイムが切れると、新しいIPv6アドレスを取得できなくなります。この問題の解決策も簡単です。RAのライフタイムを最大値の9000秒に変更すれば、問題を解決できます(完全に解決するわけではありませんが、発生する頻度が大幅に減少します)。

参照

掃除ロボットをクラウドの奴隷にさせない - Valetudoで制御権を取り戻す

序文

ことしの初めに、メルカリでDreame L10Proというロボット掃除機を手に入れました。その時、Valetudoというプロジェクトに関心を持ち、試しにロボットを購入して改造しようと考えました。ロボット掃除機が届いた後、ドキドキしながらドキュメントに従い、ルート権限の取得を試みました。しかし、残念ながら中古品で、以前のユーザーがファームウェアを新しいバージョンにアップグレードしてしまっていました。その当時、最新バージョンのファームウェアのルート化方法は公開されていませんでした。それゆえ、断念せざるを得ませんでした。

しかし

当時、いくつかのルート化方法は非公開で、Valetudoプロジェクトチームに直接連絡して詳細を入手する必要がありましたが、うまく進展しませんでした。最近、新しいルート化方法が公開されたことで、実際には物理的なツールを併用して実現する必要があることが分かりました。Valetudoプロジェクトチームは主にヨーロッパ地域で活動しており、アジア地域のユーザーには支援できないことが自然な状況でした。しかし、新しい方法が公開された以上、私はロボットに手を入れる方法を研究し始めました。

徹底的な研究

実は、最初は新しいルート化方法がDEFCON 31と一緒に公開されたことを知りませんでした。私は単に日常的にコミュニティのメッセージを見ていたのですが、最近のValetudoユーザーグループの活気ある議論を目にし、新しいルート化方法が公開されたことを知りました。それで、大いに興奮し、詳細を調査し始めました。実際のところ、変更は大したことはありませんでした。私のDreame L10Proは古いファームウェアバージョンでは、UARTラインをコンピュータに接続して、シリアル通信を介してシェルにアクセスする方法でした。その際に問題になったのは、シェルがスポーンされなかったことです。新しいファームウェアでは、同じくUARTラインを接続し、以前は使用されていなかったUSB OTGラインを同時に接続すると、新しいファームウェアはUSBデバイスが接続されている場合、シェルがスポーンされるようになります(さらにはrootfsがマウントされますが、それは重要ではありません、私たちはただシェルが必要です)。

原理を大まかに理解したら、詳細な研究に取り掛かりました。まず、USBメスケーブルとUSBメモリを用意する必要がありました。ジャンパーワイヤーやシリアルチップなどは既に家にあったので、これ以上用意する必要はありませんでした。近くの百元店でUSB延長ケーブルとUSBメモリを購入しました。

高価なUSBメモリ
高価なUSBメモリ

これで準備が整いました。ただし、USBケーブルの処理が必要です。ジャンパーワイヤーヘッドを接続するために、はんだごてを使うのが面倒だったので、ワニクリップなどの道具を使って固定しました。マルチメーターで各ピンが正しく接続され、短絡していないことを確認し、いよいよ作業を開始しました。

これらのデバッグワイヤーは以前にオシロスコープの購入で送られてきたものです
これらのデバッグワイヤーは以前にオシロスコープの購入で送られてきたものです

次にUSBからシリアルに変換する作業です。家に専用のUARTアダプタがなかったので、一時的にesp32を使用しました。esp32-devkitにはUSBからシリアルに変換するチップが内蔵されていました。ここでは、esp32のENピンをGNDに接続し、動作を停止させ、外部回路のみを使用する必要があります。

esp
esp

最後に、ドキュメントに示されている変換カードのPCBデザインから接続を導き出しました。接続する必要があるピンは以下の通りです:

  • TX -> TX(ここではRXと交換することが必要な場合もあります。私はesp32-devkitの回路を使用しているため)
  • RX -> RX
  • GND -> GND(ここでは一本の接地線のみを接続しました。他の部分はすべてブレッドボード上で共通の接地を持っています)
  • USB_OTG_ID -> GND(この線は共通の接地に直接引き出されます)
  • D+ -> D+(以下の3つのすべてがUSBケーブルですが、特に特別なことはありません)
  • D- -> D-
  • VBUS -> VBUS

Credit to Valetudo
Credit to Valetudo

最終的な外観と、成功したルートアクセス。

このMOTDは実際には中国語で書かれています
このMOTDは実際には中国語で書かれています

ルートアクセスを手に入れた後は、簡単です。元のデータをバックアップし、Valetudoをフラッシュしてクラウドから独立した完全なローカルコントロールを実現しました。

新しい世界への一歩
新しい世界への一歩

参考文献

https://web.archive.org/web/20230131072513/https://valetudo.cloud/pages/installation/dreame.html https://robotinfo.dev/detail_dreame.vacuum.p2029_0.html https://chaos.social/@fizzo/110887346585058373 https://medium.com/@shelladdicted/how-to-use-an-esp32-devkit-as-an-uart-adapter-e698594e0378

NodeMCUを使って電動おもちゃを改造・強化する方法

はじめに

この記事では、NodeMCUを使って電動おもちゃを改造・強化する方法についてご紹介します。NodeMCUは、ESP8266マイクロコントローラーモジュールを基にしたプラットフォームで、IoTプロジェクトや電子デバイスの制御に広く利用されています。この素晴らしいデバイスを使って、お手持ちの電動おもちゃをさらに楽しく、機能豊富なものにアップグレードしてみましょう!

必要なもの

  • NodeMCUボード
  • USBケーブル
  • 電動おもちゃ
  • プログラム可能なソフトウェア(Arduino IDEなど)

ステップ1:NodeMCUのセットアップ

最初に、NodeMCUをコンピューターに接続し、Arduino IDEなどのプログラム可能なソフトウェアを使用して、ボードをセットアップします。NodeMCUのドライバーをインストールし、IDEにボードを追加します。

ステップ2:電動おもちゃの分解

改造するおもちゃを安全に分解して内部の回路やモーターにアクセスします。注意して分解し、部品を破損させないようにしましょう。

ステップ3:NodeMCUとの接続

NodeMCUのピンを使って、おもちゃの回路と接続します。モーターやセンサーなど、おもちゃの機能に応じて適切なピンを選びましょう。

ステップ4:プログラムの書き込み

Arduino IDEを使ってNodeMCUにプログラムを書き込みます。モーターの制御、センサーの読み取り、LEDの点灯など、おもちゃに追加したい機能に合わせたプログラムを作成します。

ステップ5:動作テスト

プログラムが正常に書き込まれたかを確認するため、NodeMCUをおもちゃに接続して動作テストを行います。うまくいかない場合は、プログラムに誤りがないかを再確認してください。

ステップ6:おもちゃの組み立て

おもちゃを元の形に戻し、改造部分がきちんと組み込まれるようにします。余分な配線がないか、また全ての部品が適切に固定されているかを確認しましょう。

ステップ7:楽しむ!

改造が完了したら、おもちゃを楽しみましょう!NodeMCUによって追加された新しい機能や制御方法を体験してください。

注意事項

  • 改造作業は自己責任で行ってください。電動おもちゃの改造には危険が伴う場合があります。
  • 電源や電圧に十分注意し、事故や故障を防止してください。

このように、NodeMCUを使って電動おもちゃを改造・強化することで、新たな楽しみや学びを得ることができます。さまざまなアイデアを試して、クリエイティブなプロジェクトを楽しんでください!