米サービスが本人認証のために送るSMSが受け取れる携帯番号取得法

追記: 英文でこの記事とかなりかぶる内容を書いたのが “Working Around The Can’t-Receive-Verification-SMS Issue“。それの続編が “Cheap Cell Phone Plans in the US Primarily for Texts Only“。


問題: Paypal等でGoogle Voice電話番号へのSMSによる本人認証ができない

アメリカ在住の知人に送金する必要がある。米Paypalにログイン時,ユーザ名・パスワードに加え,電話番号の入力を求められる。在米生活中に取得したGoogle Voice電話番号を入力すると,自分のものではないと蹴られ(左写真),試しに友人の携帯番号を入れてみると,やはり自分のものではないと蹴られる(右写真)。

メッセージを信用するなら,真の携帯番号か否かだけを判断しているのではなく,その所有者まで見ていることになる。そんなことできるんだろうか…?いずれにせよ,在米友人の携帯番号をSMS受信のために一時的に使わせてもらう,ということができないのであれば,非常に厄介な問題だ。

1月前にも同じ問題で苦しんだが,なんかの拍子でログインできて,必要な送金ができた。銀行がオンライン送金サービスZelleを提供しているが,それもSMSでの認証を要求し,Google Voiceの番号ではSMSが受け取れないため使えなかった。興味深いことに,銀行のオンラインバンキングにログインする際も2段階認証をする設定にしてあるため,そのためのコードが必要になるが,それはSMSではなく,音声通話で読み上げさせることで認証問題は回避できている。

そのとき,銀行のカスタマーサービスに電話をかけ,Zelleの認証はSMSでなければならないのか,オンラインバンキングのログイン時のように音声通話では駄目なのか,と問うと,「それはZelle側の制約でそうなっていて我々には何もできない」という回答だった。

今後もこういった問題が続くといたずらに時間と労力が浪費されるので,この際根本的に解決したい。

原因: 真の携帯番号にしか認証用SMSを送らなくなった機関が増えた

原因は,アメリカの金融機関が真の携帯番号にしか認証用SMSを送らなくなってきたから。 “Wellsfargo short number its not working anymore – Google Voice Community” に以下の説明がある。

The use of SMS texts for two-factor authentication/verification is known to be vulnerable to attack. The US government (NIST) has published a guideline, recommending that SMS no longer be used for this purpose. But, since it is so convenient and widespread, companies aren’t willing to give it up and replace it with more secure methods, like security tokens/keys. Instead, many financial institutions are now intentionally limiting these messages, allowing them to only be sent to true mobile phone numbers.
Google Voice phone numbers are classified as land lines, just like other VoIP service providers’ numbers. The SMS/MMS function is spliced on, via a third-party messaging gateway. Since there is a higher possibility that a criminal could compromise this technology, the banks won’t allow the use of VoIP numbers.
This limitation is being implemented by Wells Fargo (and other banks, like Bank of America), not by Google.
You will need to use a true mobile phone number to receive these text messages.

Phone Validatorサービスでテスト

ちょっと興味を持って,Phone Validator | Is it a Cell or is it a Landline?で,私のGV番号,友人の携帯番号を調べてみた。

確かに私のGV番号は “VoIP” だと判断し,友人のは携帯番号( “cell phone” )だと判断している。

ただし “About Our Free Search” では以下のように断っている。

Our free phone search uses the area code, prefix and first number of the last 4 digits to determine if a phone is a landline or cell based on its original assignment in the North American Numbering Plan.

Our free search does NOT check to see if the phone number has been ported from one phone company to another or from a landline to a cell phone.

金融機関は与えられた電話番号をチェックする際,このFree Search以上のチェックをちゃんとしているのだろうか…。

対応策

Alternative Bank Authentication Methods – Tips & Tricks – Member Community” には場繋ぎ的な回避策が。本質的解決策ではない。

以下の方法は,どれも月にたかだか数回のSMS受信のためには高すぎる…が他に選択肢はないのかも知れない。

OneSimCardのSMS認証に特化したサービス

OneSimCardUS Phone Number for SMS verifications and forwarding from PayPal, Banks and financial institutionsが~$70/年

“$10 balance on the account valid for one year required to receive such SMS at the cost of $0.09 per text.” ということでこれで111通/年まで追加料金なしに受信できる。月10回もないので慎重に使用しないと使い切ってしまう。

あるレビューサイトでもOneSimCardの全般的評価は高いのだが,OneSimCardが提供している複数サービスのうち,まさにこのサービスについてのレビューと思われる “Horrible service” を読むと,以下引用中斜体にした部分の「提供される番号がVoIP番号」というのが,もし本当なら決定的にまずい。

Horrible service. In their description, it states: USA Phone Number for 2 step SMS verifications and alarms from PayPal, Banks and financial institutions. However, after purchase, it can not receive txt code from etoro at all. ( etoro is just a normal financial institution). And I checked on phonevalidator website, the phone number they provide is a VOIP number! Who would pay 79 dollars for a VOIP number?! Google voice is free!

ただ,Phone Validatorの項でも書いたように,その無料調査では,その番号が本来どのカテゴリだったかしかわからない。その後番号がポートされてたりすると,今の実態とは合致しない可能性はある。実際のところはわからない。

VerifyWithSMSとTextVerified

こういった目的を達成してくれそうなサービスを検索すると,上位に出てくるのがこれら。

VerifyWithSMSはサービスごと,回数ごと?の課金。Paypalなら$1.33。しかも支払いはBitcoinはじめクリプトカレンシーでしか受け付けないようで正直怪しい感じがする。説明文書はほとんど提供されてない。しかも, “Bypass SMS and text verification. VerifyWithSMS.com – YouTube” を見ると,携帯番号が固定で振り分けられるのではなく,都度異なるものが振り分けられる模様。同じ番号がずっと続けられることが求められるシナリオでは使えない。

TextVerifiedも,都度番号,クリプトカレンシー支払い,の点でVerifyWithSMSと似通っている。ただ,番号を維持できる “rental” も用意はしてある。それでも基本7日間で,延長はできるもののそれでも最大50日程度までと思われる。

基本的な使用フローは “SMS/Text Verification Video Guide | www.textverified.com – YouTube” で伺える。

これら2者は,クリプトカレンシーでの支払いしか受け付けない辺り,やはり想定された使い方がまっとうなものとはちょっと考えにくい。

ハナセルのアメリカ携帯プラン

日本を離れてアメリカで生活する人をターゲットにしたHanaCell(ハナセル)のアメリカ携帯電話プランが~$10/月から。日本ではソフトバンクのネットワークでローミングするよう。アメリカ・日本双方での使用でSMS送受信が無料。日本国内へはクロネコヤマトで申込みから2~5営業日で配送される迅速さはよい。

利用開始日から8日間返品・交換を受け付けるとしながら,携帯プランについてはいずれにせよ初月分は1月分まるまる取る,ということだから,返金は事実上ない。詐欺まがいといわれてもしかたないだろう。それなら普通に1月使って解約したほうがいい。

ハナセルと同様なサービスがないか,と探して “アメリカSIM・携帯、日系サービス徹底比較【2020年最新版】” を発見。ハナセルを含む3社のサービス比較だが,比較対象の1社アメスマによる比較なので,当然アメスマがイチオシとなっている。それでも,自分のこの特殊な目的には,この3社の中ではハナセルのサービスが一番適している。

米携帯キャリアと直接契約

US MobileがSMS月50通$1.50/月というプランを用意している。$3.99のスターターキットはクーポンコードFREESIMで実質無料になる(カスタマーサービスとチャットして細かな質問をした)。何をどうしても使えるようになるのに時間がかかる,どう運用するか工夫しなくてはならない,といった問題をさておくなら,自分のニーズに合ったいい選択肢のように思えた。しかし,カスタマーサービスに問い合わせると$2~/月のサービス費や税が加算されると,ワシントン州での場合$4.50/月ほどになるという。$54/年の計算で,利用料金だけを見るのならOneSimCardのサービスよりは安くなる。

ただ,どう運用するかが大きな問題。アメリカに住む友人に頼んで端末を常時電源入れた状態で置かせてもらうか,自宅に置くか。

アメリカに置かせてもらう場合は,協力者に手間がかからないよう,受信するSMSが電子メールなど何らかの手段でこちらに自動で転送されるようにしなくてはならない。そもそもSMSが受信できる端末を調達する必要もある。うちで余ってる端末が使えるかも知れないが,使用バンドがちゃんと合っているかの確認が重要。仮に使えるのがあったとしても,それをアメリカに送らなければならない…。

昨日カスタマーサポートとチャットしたときに提示された使用バンド情報。US Mobileは,T-Mobileのネットワークを利用した “Super LTE” というサービスと,Verizonのネットワークを利用した “GSM LTE” というサービスを提供している。スターターキットには,それぞれ用のSIMカードが1枚ずつ,計2枚入っているらしい。

Below are the network frequencies and bands supported by our GSM LTE network (Tmobile). GSM- Bands 2 and 4. Band 12 needed for 4G LTE. In most cases, GSM unlocked devices with a sim slot and without restrictions work, given they support these bands and your area has the specific frequency and band coverage. 2G/GPRS/Edge: Band 2 1900 MHz 3G/WCDMA: Band 2 1900 MHz 4G: Band 4 1700/2100 MHz LTE: Band 12 (700 MHz)

The bands supported on Super LTE are 2, 4 and 13 and along with these, the phone needs to be HD calling/VoLTE compatible and certified by Verizon.

自宅に置く場合日本でローミングできなければならない。ハナセルの場合,まさにこれが実現できるので都合がいいのであった。ハナセルは日本人をユーザとして想定しているので日本でのローミングができるようになっているのだが,一般的にアメリカのキャリアと契約したならそう都合良くはいかない。

すぐ契約できるという観点からeSIMの利用も考えた。その場合こちらでeSIM対応の端末を用意する必要があるが,楽天モバイルにばらまかれたRakuten Miniだと比較的安価に手に入るだろう。ただ,仮にeSIMでアメリカのキャリアとすぐ契約できたとしても,それであえて日本でローミングする,というシナリオに対応できるか疑わしい。ローミング状態でなければ,アメリカのキャリアに与えられた番号宛のSMSが受け取れない。そもそもeSIMは使用場所に応じた最適なキャリアを直接使用できるというのがウリなのであるから,日本において,日本のキャリアを直接利用せず,あえてローミングする,という妙な要求に対応するだろうか。

Paypalのカスタマーサポート電話番号

この問題,当然最初の対処方法はPaypalのカスタマーサービスに連絡することだが,そのためにログインが要求され,ログインができない現状ではにっちもさっちも行かなくなっていた。何度かログインに失敗したところで,やっとコンタクト先の電話番号が表示された。彼らの営業時間になったら電話かけてみよう。

その後

結局Paypalに2段階認証を外してもらうことでとりあえずの解決を見た

US Mobile

現在米金融機関等からの認証のために送られるSMSを受信できる真の米携帯番号していない。そのためにPaypalにログインできなくなるなどのトラブルに見舞われた:

それを根本的に解決するために米携帯事業者と契約することを検討した。候補としてはUS Mobile月50通までのSMSのみのプランが$1.50で少額であることと,クーポンコードでスターターキットが実質無料だからだ。

その他いろいろなことを質問するために,カスタマーサービスとチャットした履歴をこの後に保存する。要点をまとめると:

  • US MobileはVerizonとT-MobileのMVNOで,前者によるサービスを “Super LTE”,後者のそれを “GSM LTE” (なんちゅう名前)と呼んでいる。
  • スターターキットにはVerizon用SIMカードとT-Mobile用SIMカードの2枚が入っている。 “US Mobile’s Starter Kit Comes with a GSM and Super LTE SIM Card | US Mobile” 
  • Super LTEを使うかGSM LTEを使うかは契約時に決めたものが契約期間中ずっと続くのではなく,切り替えが可能(可能なタイミングは聞いてない)。
  • ウェブサイトではSuper LTEについてはLTE,GSM LTEについてもGSMとLTEしか使えないかのような印象を受けたが,少なくともGSM LTEについては3Gもサポートしている。
  • 月SMSが50通までのプランは$1.50であっても,別途「サービス費」や税が加算されるので,ワシントン州であれば合計$4.50/月ほどになる。

Hi there! What can I help you with?

Networks

Here’s some information about our networks. We call our networks Super LTE and GSM LTE.

Super LTE runs on Verizon and is the fastest network in the country.

GSM LTE runs on T-Mobile’s network and has the most compatible devices.

Would you like to learn more?

More on GSM LTE

Our GSM LTE is built on top of T-Mobile’s network, which is one of the largest in the country.

GSM also gives you the flexibility to activate on almost any device that uses a SIM card.

You can learn more about both our networks here!

USM GSM LTE

Learn how US Mobile can bring the nation’s best networks to you in an affordable, customizable way.

Ready to get started with a free starter kit?

No

Okay. You can message me at any time if you need any help. 🙂

When I purchase your Starter Kit, what kind of SIM card will I get? I understand it is going to be “universal” regarding its size, but what about network compatibility? Will it work with BOTH Verison’s network and T-Mobile’s? Or it is compatible with only one of the two and I am supposed to specify which one at the time of purchase?

I’m sorry, I didn’t understand that. Can you rephrase what you just said?

Also, you do not support any 3G connection (UMTS/WCDMA or CDMA2000) on either of the networks?

One of our specialists will be with you soon to help.

In the meantime, feel free to check out our Help page!

US Mobile Help Page

You can also visit our FAQs page and see if we can answer your questions there!

9:05 PM

Hi!

How can I help you?

Hi.

I have already asked you quesitons.

Do I need to repeat them?

*questions

This question right? When I purchase your Starter Kit, what kind of SIM card will I get? I understand it is going to be “universal” regarding its size, but what about network compatibility? Will it work with BOTH Verison’s network and T-Mobile’s? Or it is compatible with only one of the two and I am supposed to specify which one at the time of purchase?

And there’s another.

I.e., this:

Also, you do not support any 3G connection (UMTS/WCDMA or CDMA2000) on either of the networks?

Got it, wait I’m just typing its answer

These are really interesting questions

Sure, I can wait. Thanks for your answers in advance!

Aren’t they? 🙂

No problem at all, just answering

So the best thing about our starter kits is that they come with both SIMs, GSM LTE (Tmobile) and Super LTE (Verizon)

and you can choose any of them for your use by looking at coverage of these two networks in your area and what best suits you

also for both the SIMs you will need an unlocked phone 

Wow, I was not expecting that. You’re going to give two SIM cards… wow.

I understand I will need an unlocked phone, and that’s why I asked.

I needed to know what kind of network capabilities it is supposed to have.

Yes, that the best part you know you can easily use the SIM which you think works best for you

That’s truly awesome.

and specifically for super LTE (Verizon SIM) you will need a Verizon certified unlocked phone, that has HD Calling feature in it

Well, I was going to use the phone just for text messages.

So I was thinking more along the line of T-Mobile’s network.

Below are the network frequencies and bands supported by our GSM LTE network (Tmobile). GSM- Bands 2 and 4. Band 12 needed for 4G LTE. In most cases, GSM unlocked devices with a sim slot and without restrictions work, given they support these bands and your area has the specific frequency and band coverage. 2G/GPRS/Edge: Band 2 1900 MHz 3G/WCDMA: Band 2 1900 MHz 4G: Band 4 1700/2100 MHz LTE: Band 12 (700 MHz) The bands supported on Super LTE are 2, 4 and 13 and along with these, the phone needs to be HD calling/VoLTE compatible and certified by Verizon.

That brings us to my original second question.

Do you support 3G?

For texting then i think both super and GSM are perfect

if you want i can check the coverage for you in your area for both

Yes, we support 2g, 3g, 4g

Thanks, but that is not necessary for now.

Thanks all the same.

Perfect, do you have any more interesting questions

cause I loved chatting with you

If you have the info handy, would you give me the network specifications of what you call Super LTE as well?

Sure, I will send you link of an article for this

That’d be super, thanks!

While you look for the article, I have a few more questions to torment you with.

https://www.usmobile.com/blog/us-mobile-starter-kit-gsm-lte-sim-card/ Here it is^

also let me tell you the difference between super lte and GSM LTE

Thanks! I thought I looked around well enough, but apparently I was wrong.

Please do.

The Super LTE network is consistently rated the fastest and most reliable network in the country. The Super LTE Network is the black SIM card in the starter kit. The GSM LTE works best in urban areas with network ultra-fast data speeds in most cities. The GSM LTE Network is the white SIM card. As always, coverage depends on where you are. That’s why we have partnered with the two best networks in America. Wooho! 🎉

Woohooo!

So a few more questions.

Yes!

1. Since I will have two SIM cards, will it be possible to switch along the way?

Sure, would love to answer it

Let’s say start with GSM LTE and later switch to Super LTE if that seems to be a better option.

Sure, you can always switch from GSM to Super

and Super to GSM whenver you want

Wow. That’s fantastic!

Now, hopefully my last question.

Ikr, its amazing

and you can even customize plans with us

Sure, would love to answer it.

Right, and that is exactly what I want to ask you about.

As I have already told you, for now, I only need texts.

Hahaha I read your mind

What!? US Mobile hires psychics?

Yes

Geez. I had no idea. 🙂

Anyhow, I only need to send/receive a few texts a month.

I believe the cheapest plan with you will be a 50-text-a-month plan for $1.50

like if you want only text messages then you can use your dashboard to build your plan

according to your plan builder

according to your needs

When I do not specify anything for the second line, it says, “Monthly total for 2 lines Not including fees & taxes $1.00.”

Sure, you can customize the plan

I would definitely not mind a $1/mo plan, but is this true?

So our cheapest plan for text is 50 text for $1.5 per month. But we charge service and tax fee

Apart from the plan prices, there is a $2 service fee per 30-day billing cycle and taxes are applicable, they may vary state to state and plan to plan but are typically observed to be between $0.98 to $6.29, you should be able to view the exact cost in an itemized bill before you actually purchase/checkout with the plans.

And that’s a minus amount? Otherwise you won’t arrive at $1.

I’m really sorry I didn’t get it what you meant by minus account

Could you help me explain it again

The plan builder says the first line with the 50 texts a month plan costs $1.50

However, somehow the total amount for TWO lines is $1 only.

It is even less than $1.50.

Don’t get me worng. $1 a month sounds FANTASTIC. I was just curious why the amount is reduced from $1.50.

Oh, thats unusual. This might be some glitch maybe

Hahaha, that’s amazing by the way. 

Have you tried going to the checkout again and

It was.

https://www.usmobile.com/savings

I am merely calculating here, so there’s no checkout. Am I wrong?

Oh, yes. This calculates only savings for you

So let me have a concrete number. Let’s say I want to use it in Washington State (WA, not DC) and have just one 50-texts-a-month plan, how much will I be paying?

that will provide you the exact amount including service fee and tax

To know the exact price you need to make an account on our website and then you can go on to purchasing the plan 

you can also check this link out https://www.usmobile.com/plans

Let’s see…

But the page you just mentioned does not give me any tax amount and such?

Would you give me a ballpark figure for my intended use?

Yes, the tax and service fee information will be known once you reach the check out page after logging into your account

because the system will calculate it accordingly then

If you would, then I would know if it is worth my while to create an account and proceed.

But, usually, the service fee is $2 and for tax let me check how much it would cost roughly

That’d be awesome. Thanks a lot!

It would cost roughly $4.48

I checked

So about $4.50. Thanks a bunch! That’s a huge help.

You’ve been wonderful, Omema! Thanks a lot!

Yes, approximately this much.

No problem, happy to help you.

Again, thank you very much! You have a nice day!

Let me know if I can be of any other help!

It was our pleasure helping you. Reviews help our business build an online presence and helps others learn about us. Would you be willing to take a few minutes to leave us a review? We’d love to hear your feedback!

I am sure I will contact you again if I need. 🙂

need to, rather

You too have a nice day!

Sure

Sure, I would love to help you out again.

Have a great day! 

Thanks. Byeeee!

Really looking forward to having you in our family

Here is the link where you can leave a review https://www.reviews.io/company-reviews/store/usmobile-com1 Please do make sure to write what made you like US Mobile and if you want you can also mention my name as well “Omema” ☺️

Bye!

Take care 🙂

9:05 PM

Thanks. You too!

2020年10月の携帯回線整理予定

今日知ったAuの10/1からの以下の2つのキャンペーンが自分にとって願ったりかなったり⇒よくよく考えたらそうでもなかった。

  1. au、月額980円~の「スマホスタートプラン」対象に5Gスマホも – ケータイ Watch
    公式告知: “5分以内の国内通話が24時間無料・月額980円から利用可能な「スマホスタートプラン」を改定、5G対応スマホも対象に追加 | 2020年 | KDDI株式会社
  2. au、UQ mobileからの番号移行プログラムを10月から開始 – ケータイ Watch
    公式告知: “UQ mobileからauへの番号移行がおトクに~各種手数料が実質負担なし、お一人でも月額3,460円で使い放題~ | スマートフォン・携帯電話 | au

というのは,たまたまちょうど以下の合計4回線をどうするか判断すべきタイミングだったからだ。

  1. ずっと維持したいいわば自分の公式携帯番号を含むAu2回線。端末は4Gガラホだが8月末まで端末購入サポートの違約金が発生していた。9月以降は発生しない。
  2. UQ 2回線。以前の2年縛りの回線で,しかも9月より2年目なため割引が減額し,1,000円/月が回線ごとに料金アップした。解約すると約10,000円の違約金が発生する。それまでは契約から1年間だけの割引が効いて安価な料金であり,あまり使ってなくても持っておいていいと思えたが,2回線で2,000円/月アップでは10,000円の違約金を支払っても解約したほうが得だと判断していた。本来9月頭に解約予定だったが,例によって怠惰なため今までずるずると…。

1. については,少なくとも公式番号については “安価に携帯番号を維持する” に書いたように,キッズフォン持ち込みでソフトバンクの「基本プラン(みまもりケータイ/キッズフォン)」(月額490円5分以内の通話かけ放題,MMS送受信無料,SMS受信無料)でソフトバンクに転入し,その形で維持する予定だった。そのためのキッズフォンは中古で既に入手してある。

「スマホスタートプラン」の改定点について,上記記事では触れていないが自分にとっては大きな意味を持つ点がある。機種変更の場合,今まではケータイ(3G)からauスマートフォン(4G LTE)に変更」(アーカイブ)が適用条件であり,4Gケータイは適用範囲外であった。しかし,10/1からはauケータイ (3G / 4G LTE)  からの機種変更 」となっており,4Gケータイも新たに適用範囲となった。さらに,注7として「持ち込み機種での契約も対象です」と明記してある。機種変更する上でお得な機種が用意されていれば購入することにやぶさかではないが,昨今期待できないだろう。

MNPした場合,Auからの転出料3,000円ソフトバンクへの転入料3,000円で合計6,000円。ただし,総務省の方針で「今秋」にもMNP転出手数料が無料化するはず。一方,機種変更した場合はおそらく事務手数料3,000円がかかるのだろう。①Au内で機種変更し(3,000円),MNP転出料が無料化してからソフトバンクに転入(3,000円)した方が,②今ソフトバンクに転入(6,000円)より安い,とか思った…んだが手数料は結局同額か。

ここの判断誤っていて①の方が②より3,000円安いと思ってたので,490円/月のソフトバンクの「基本プラン(みまもりケータイ/キッズフォン)」より490円/月高いピタットプラン4G LTE (s)(データ通信は1GBまで)でも,数ヶ月なら事務手数料が安い分結局安くつくしデータ通信もできる分いい,と思ってたが誤り。

だとするとやはり「公式番号回線」は機種変せずに,転出料無料化を待って素直にソフトバンクに転出,か。転出料無料化は「今秋」ということで,10/1からになるのではないかと思ってたが今だにその知らせはない。それでも「今秋」という以上,遅くても11/1には制度化するだろうから1, 2ヶ月なら待ったほうが安い。もう1回線は10月になるなり純解約。ただし,これは次のUQ→Auの番号移行の後にする。番号移行の際の審査に否定的影響を与えないようMNP予約番号はWeb上でできるが9:00am-8:00pmのみという時間帯制限に注意

さて,2. のUQ 2回線。約10,000円の違約金を払ってでも純解約のつもりをしていたのだから,手数料実質無料でAuに移れるのならこれはお得。一番安くなるのがデータMAX 4G LTEでデータ通信2GBまでの場合で,2年縛りで1,980円,なしで2,150円。この額は6ヶ月続くが,それだけ維持し続けてしまうと結局高くつく。4ヶ月以内で転出ないし純解約が安くあげるのに必要。

ただし,短期で解約するとブラックリスト入りする可能性が高い。ただ,もはやブラックリスト入りしても問題にならないんじゃ…?以前はMNPで大幅な割引やキャッシュバックがあったからAuと契約できることは大事だったがそういう時代はもう終わった。

音声回線で維持しなくてはならない回線は「公式番号」の1回線のみ。それは一旦ソフトバンクに基本プラン(みまもりケータイ/キッズフォン)」で転入してしまえば後はずっと確保できる。後はデータ通信が何らかの手段で安く実現できれば,自分のニーズは満たされる。自分はデータ通信はほとんど必要ないから,それはMVNOで実現されるであろう。もうAuに限らずキャリアと契約する必要はないだろう。

仮にブラックリスト入りしたとしても,1年間で外れる(いわゆる「喪明け」する)という話もある。そもそも,2年縛りありのプランからなしのプランに変更(いわゆる「N化」)した上で純解約した回線も過去にあるので,これが番号移行の際の審査に響く可能性はある。


追記1: 9/22申込締切だった,Auとの契約(新規・乗り換え・プラン変更)で10,000Pontaポイントがもらえるクーポンアーカイブ)を利用しそこねたのは大変痛かった…。以下の4回線全てで利用できたはずなので合計4万円分…。もっとも,既存Au2回線については後々利用することは考えられても,UQ2回線についてはその時点では考えられなかったかも知れないが…。

追記2: プラン2.は実行に移したが,策に溺れてしまったのだと思い知った

ESP32搭載TTGo T-Displayからセンサー値をMQTTブローカに投げる

TTGo T-Display ディスプレーつきESP32開発ボードにESPHomeを導入し,Mi Flora BLEプラントモニタをモニタさせることができた(せっかくのディスプレーが使えないのは残念だが…)。次のステップは,得られたセンサー値をMQTTブローカに投げるようにすること。

道具立て

MQTTブローカ

MQTTブローカ” はBeebotte無料プランが,無料で使えるパブクックMQTTブローカとしてよい選択肢というのが骨子だった。しかし今回いざ使い始めてみると,Beebotteの利点と認識していたことがMQTTブローカとして使った際には必ずしも当たらないことがわかった。それでも,無料で使えるパブクックMQTTブローカとしてよい選択肢,という事実は変わらず,予定通り使うことに。

現時点でESPHomeからのSSL/TLSによる接続はESP8266でしかサポートされておらずESP32からは使えない。いずれサポートされるであろう。

BeebotteをMQTTブローカとして使えるようにするための手順は以下。

  1. アカウント作成。
  2. IAMトークンを取得。左のサイドバーの “Account Settings” を選び,右のタブペーンで “Access Management” タブを選ぶ(写真)。見ての通り細かくアクセス制御できるが,とりあえず大半のアクセス権を与える設定にする(写真はその変更前の様子)。

Beebotte(本体)は「チャネル」と「リソース」の2階層のみで,MQTTのトピック相当の情報管理をする。MQTTブローカとして使う際には,MQTTの多層のトピックが使える。

Beebotteでアカウントを作成すると,引き続きチャネルの作成を促されるが,MQTTブローカとしてのみ使うのであれば,チャネルもリソースも作成する必要はない。

このIAMトークンがMQTTクライアントのユーザネームとなる。パスワードはなし。ESPHomeがTLSに対応していないので,ブローカとしてはmqtt.beebotte.com,ポートはデフォルトのままの1883。

ESPHomeのMQTTクライアントコンポーネント

ESPHomeの設定ファイルで,MQTTクライアントのコンポーネントを使うようにする。これだけで,デフォルトで各種センサー値がMQTTブローカにpublishされるようになる。デフォルトのトピックのスキームは以下:

デバイス名/センサ種類/センサ名/state

Mi Flora一台目(設定でmiflora1という名前を与えている)の温度計をアクセスするT-Displayにmifloramonという名前を与えていれば以下:

mifloramon/sensor/miflora1_temperature/state

MQTTクライアント

Windows 10上で走らせたMQTT ExplorerからBeebotteのMQTTブローカに流れるメッセージを眺めると以下のような感じ。グラフが表示されるとそれっぽい。

さて,Windows上でMQTTブローカ上の値を見るときは,基本デバッグ目的だからMQTT Explorerで用が足りると思われる。一方Android端末からは,A. 同じくデバッグ目的にメッセージを直接見る, B. 数字をグラフィカルUIなどで直感的に見,場合によってはデバイスを操作するダッシュボード機能を提供する,の双方の役割を担うアプリが別途欲しい。

A. の目的には以下の3アプリを検討した:

  • MQTT Snooper唯一トピックのソーティングをサポートしている(図)。トリー表示には対応していない。他のアプリではメッセージは到達した時刻の逆順に表示するだけ。ただし,文字の配置の工夫不足で,老眼で文字を大きくしなくてはならない自分には見づらい。
  • MyMQTT実に見やすい画面例)が,トピックのソーティング・トリー表示に対応していないのが残念。
  • MQTT Client ー トピックのソーティング・トリー表示に対応していないし,メッセージ一覧もMyMQTTのそれに比べて単色,同サイズ・同フォントでの表示で特に見やすくない(画面例)。Taskerプラグインでもあるところが最大のウリ。

これらは主にデバッグ用に使うものなので,それはPC上のMQTT Explorerで用が足りて,実際にはあまり使わないのかも知れない。

B. の目的にはいわゆるダッシュボードアプリを使う。そのうちのMQTT Dash (IoT, Smart Home)で表示させたMi Flora3台の測定した土中水分度が右のスクリーンショット。Mi Flora専用のFlower Careアプリでは,3台の情報が別々に表示されるのだが,このダッシュボードでは3台の土中水分度が一覧できるので非常に有用。水やりが必要かすぐ判断できる。

ちなみに,ESP32の設定と実際のMi Floraが合致するかを確認するため,#2だと思っているMi Floraが刺さっている鉢,#1だと思っているMi Floraが刺さっている鉢,#3だと思っているMi Floraが刺さっている鉢,の順に水をやってみときの表示の変化。その順に数値が上がっているところを見ると,どうやら正しく推測できていたようだ。

MQTT Dashはグラフの表示はしてくれないので,IoT MQTT Panelで土中水分と気温の変化を示すグラフを作成してみた(下図)。履歴データを持っているわけではないので,アプリを起動中の間のみグラフがアップデートされて実用性に乏しい。

同様の機能を提供するLinear MQTT Dashboardアプリに関しては「サーバーモード」を指定することで常時バックグラウンド実行させてMQTTブローカにアクセスし続け,データを蓄積させることは可能ではあるが,その分電池消費が激しくなるであろう。そもそも妙にグラフの更新間隔が短くて伸ばしたいところだがそういった変更はできないようであるし,電池消費は抑えたい。

そもそも,現在想定している用途であればリアルタイムに更新される必要は必ずしもない。日常的に必要なのは現在の値のみ。過去を振り返って全体的傾向を分析したいのであれば,値の履歴が記録されていてそれが利用できなければならないし,逆に現在のリアルタイム値が使える必要はない。

履歴の保存はMQTTの守備範囲ではない。必要ならばMQTTの外でそれは実現しなくてはならないので,それに合わせてそういった過去のデータを元にしたグラフ化を考ええた方がよさそうだ。

IoT OnOffも同様なアプリだが今回試さなかった。スクリーンショットを見る限り洗練されている印象を受ける。

ところで,驚いたことにMQTT DashはJavaScriptで表示をさらにカスタマイズできるようだ(右図)。相当内部構造がわかってないとできないんだろうとは思うが…。Linear MQTT Dashboardも,MQTT DashほどではないがJavaScriptによる機能拡張ができそうだ。

Android端末上のダッシュボードについては,いずれはHome Assistantを導入してESPHomeと連携させるつもりをしているので,もしそうであればHome Assistantに接続するコンパニオンアプリを使用するのが結局賢明かも。

上に上げたようなMQTTダッシュボードアプリはMQTTのトピックの意味は全くわかっていない。なので自動でUIは生成できず,全て手動に頼ることになる。しかし,Home AssistantはESPHomeの設定ファイルから自動でデフォルトのUIを生成してくれて,必要なそれに少し手を入れるだけでよい。それがコンパニオンアプリにも自動で反映するようだから,手間はぐっと減るだろう。

ただし,LAN外でもHome Assistantのコンパニオンアプリが使えるためには,インターネットからHome Assistantのインスタンスにアクセスできるようにしなくてはならない。

通知の遅延

Mi HomeアプリではMi Floraのデータは刻々と更新されるが,MQTTブローカ上のデータが更新されるのはもっと間が開いていて,しかもその間隔がまばら。センサーによってはその値が更新されるのに最大数分かかることがある。Mi Floraに限れば一刻を争うデータではないので大した問題ではないが,今後対象領域を広げたときにそれでは問題になることもあるだろう。

しかも,1台のMi Floraで4つのセンサー値が得られる(湿度・気温・日照・養分)のだが,同じMi Floraのそれらの値のMQTTブローカ上での更新は,同じ時間内に同じ回数起こるわけでもない。この辺の理由ははっきりわかってない。Android端末に比べればT-Displayは明らかにBLE電波の掴みは弱いようなので,それが理由の可能性も確かにあるし,ESPHome内のBLE処理も関係している気がする。

さらに,照度の値がMi Home値に示される値とかなり違う。違う単位?他の3つの値は概ね合致している。

BeebotteのMQTTブリッジ

MQTTブローカ” はBeebotte無料プランが,無料で使えるパブクックMQTTブローカとしてよい選択肢という骨子だった。Beebotteは確かにMQTTブローカ機能は提供しており,無料枠でも使いでがある。しかしいざ使い始めてみると,MQTTブローカ機能は互換性を提供するため後づけされた印象。 “Beebotte MQTT Support” 参照。

Beebotteのメインサービス(MQTT機能と区別するため「本業」と呼ぶ)は,MQTTと同様のpub/subアーキテクチャを採用しているが,MQTTがトピックとして任意の多階層をサポートしているのに対し,「本業」では“チャネル/リソース” の2階層のみ。「本業」の世界とMQTTの世界がマップするのは,MQTTでもトピックがこの2階層になっている場合に限る上,仮にMQTT側で higher/lower のトピックをpublishしたとしても,「本業」側でチャネルhigher,リソースlowerが生成されるわけではなく,用意されたダッシュボードUIにも表示されない。別途「本業」側で,Web UIを利用するなどしてチャネルhigher,リソースlowerを生成する必要がある模様。

Beebotteの細かなアクセス制御などは「本業」側の話であり,普通のMQTTブローカとして制限なく使う場合はこれらの恩恵に預かれない。この場合,チャネル別のトークンは使えず,IAMトークンでアクセスする必要がある。しかし,IAMトークンが自由にrevokeしたり再生成できるのはよい。「本業」側でチャネルhigher,リソースとしてlowerなどを生成しておき,チャネルhigherの直下のリソースだけを操作する場合に限りチャネルトークンが使える模様。

「本業」側で提供されている高度な機能がMQTTブローカとしてアクセスする場合は基本使えない,というのは残念。特にルールエンジンには期待していただけにこれが使えないのはがっかり。それでも,TLSも提供するMQTTブローカとして使え,無料枠でも十分使いでがあるということは変わらない。

ESP32搭載TTGo T-Displayからセンサー値をMQTTブローカに投げるようにしてみた

TTGo T-Display ディスプレーつきESP32開発ボード

今年はコロナ禍「新しい普通」(日本では「新しい日常」の方が用語として定着したと思うが)を受け入れざるを得なかった。その「新しい日常」の一環として,家庭菜園に力を入れることにした

その助けになるよう,Bluetooth Low-Energy (BLE)対応プラントモニタXiaomi Mi/HHCC Flora Monitor/Flower Care Monitorを導入した。さらに,それを使ってゆくゆくは野菜栽培の自動化をしようと考えた。その実現の一部分として,BLE/LANブリッジを実現するためにESP32について調べる過程でLILYGO TTGO T-Display ESP32 WiFi and Bluetooth Module Development Board For Arduino 1.14 Inch LCDを知った。AliExpressでこれを857円で購入した自分用関連写真のアルバム)。ESP32はwifiとBLEの双方をサポートしているので,これらが必要なプロジェクトでよく使用されている。

Mi Floraのセンサ類はそのまま,中核をESP32にしたようなTTGO T-Higrowという製品もある。一石二鳥のように思えたが,水の対処を自分でしなくてはならないのが難点。屋外使用の場合はもちろん,屋内使用でも植物のモニタに使うものなので,水がかかってしまうことは想定しなければならない。簡便な解決策はなさそうで,やはりある程度は水対策のされたMi Floraに軍配が上がる。

T-Displayについては,公式サイトのページにある図はV1.0となっているが,そのページに掲載されたリンクの指すGitHub – Xinyuan-LilyGO/TTGO-T-Displayの図はV1.1となっている。

ESP32を採用した開発ボードは多数あるが,特にこれを採用したのは, “Getting started with ESP32 development using the TTGO T-DISPLAY – YouTube” で勧められていたから。自分はこの分野は全くの素人だが,ディスプレイが最初から付属しているのは確かに便利だろう,と考えた。

たまたま同時期同じく1.14インチディスプレー搭載に加えて,各種センサー・スピーカ搭載,ケース入りのM5StickC Plusが発売された(AliExpressの公式ストアで送料込みで1,800円ほどスイッチサイエンスで2,200円+送料)のでこれも検討していたんだがすぐ在庫切れに。スイッチサイエンスでは再入荷は10月中旬としているので、そのときになったら再度検討してみよう。運用上はケース入りのメリットは大きい。T-Displayのケースどうしよう…。

(下に続く)

ファームウェアとしては “ESP32デバイス向けESPHome” にあるようESPHomeを検討していた(とりあえずは考えていないがJavaScriptによるプログラミング可能にするファームウェアもある)。その後,TasmotaとESPHomeとの違いを再度しっかり調べてみた

T-Displayの購入を検討した時点では,ESPHomeのサポートに関して決定的情報がなかったが,今は “ST7789V TFT LCD — ESPHome” に完全な設定ファイルがある。 買ってから長らく放っていたが,都合いいことに9/13に公開されたバージョン1.15.0でカラーLCDディスプレーがサポートされたということだから,結果的にそれがよかったのかもしれない。

さらに,Xiaomi Mijia BLE Sensorsの一部としてMi Floraがサポートされている上, BLE対応スマート温度・湿度計LYWSD03MMCも。つまりESPHomeが現時点で自分が必要とする機能を全て提供していることになる。

以下,何日か使ってみた範囲での諸感想。

のっけから,PCとの接続に使ったUSBケーブルが充電専用,という大ポカをしでかしてしまった。そこそこ時間を無駄にした。

それに気づくまで,Windows 10 PC側に必要なドライバがないからか,と考えた。製造元のスペックシートによると,USB-to-TTLはSilicon LabsのCP2104 Classic USB to UART Bridgeによって実現されているとのことなので, “USB to UART Bridge VCP Drivers – Silicon Labs” からWindows 10用ドライバーをダウンロードしてインストールしてみた。

mDNSサービスがうまく使えてない。ただ,これはどの次元での問題なのかわかっていない。Windows 10では最近はデフォルトで使えるはずだが,実際には問題があることがあるとのこと。

ただ,以下のようなメッセージを吐いているのでやはりT-Display側の問題か。

[02:21:03][E][ESPmDNS.cpp:65] begin(): Failed starting MDNS
[02:21:03][E][ESPmDNS.cpp:148] addService(): Failed adding service http.tcp.
[02:21:03]
[02:21:03][E][ESPmDNS.cpp:167] addServiceTxt(): Failed setting service TXT

T-DisplayにMi Floraをモニタさせるのは比較的容易。Mi FloraのMACアドレスを知る必要があり,現時点で3台あるためそこはちょっと面倒。いろいろ方法はあろうが,T-Displayでいずれにせよ使うesp32_ble_trackerコンポーネントを使用すれば,シリアルにT-Displayが見つけるBLEデバイスについての情報が随時表示される。ただ,3台分見つかったものの,どのMACアドレスがどのMi Floraに対応しているかはまだわかってない。

BLE対応スマート温度・湿度計LYWSD03MMCを接続させるのは実ははるかに大変だということがわかったので,とりあえずあと回し。

ST7789V TFT LCD — ESPHome” にある設定ファイルを若干手直しし,連携するHome Assitantから時刻を取得する設定になっていたのを,自力でNTPで取得するように変え,TTFフォントを用意しそれに合った設定に直すと無事ミニNTP時計として動作する(写真)。

将来的に日本語での表示も視野に入れて, “M+ FONTS” のmplus-1c-medium.ttfを使用してみた。一般的にフォントデータを組み込み型機器に持たせる際には,データサイズを極力小さくする必要があるのだが,ESPHomeのフォント管理では,指定したグリフのみを取り出ししてそのデータだけファームウェアに組み込むという処理を自動でやってくれる。そこまでやってくれるとは恐れ入った。デフォルトのグリフとしてはいわゆるASCII文字のみがデフォルトで指定されているので,もし将来的に日本語文字を表示したい場合はその指定を適宜変える必要があるだろう(fontセクションのglyphs変数で)。

ここまではいいのだが,BLE機能を追加するとメモリを圧迫するのか,メモリ管理に何か問題があるのか動作が不安定になり,最悪ブートループを起こす。どうもwifi機能が不安定になるようで,以下のログにあるように極めて頻繁に再起動を繰り返しながらそれでもなんとか散発的にwifiに繋がることもあれば,wifiにはスキャンが全くできなくなり繋がらなくなる(BLE機能は維持されていても)ということもあった。

[02:21:27][W][wifi_esp32:386]: Event: Disconnected ssid='XXXXXXX' bssid=XX:XX:XX:XX:XX:XX reason='Beacon Timeout'
[02:21:27][W][wifi:100]: WiFi Connection lost... Reconnecting...
[02:21:27][W][wifi:522]: Restarting WiFi adapter...
[02:21:28][I][wifi:194]: WiFi Connecting to 'XXXXXXX'...
[02:21:28][D][esp-idf:000]: E (27084) phy_init: failed to allocate memory for RF calibration data
[02:21:28]
[02:21:28]abort() was called at PC 0x400e05d5 on core 0
[02:21:28]
[02:21:28]Backtrace: 0x400923bc:0x3fff7200 0x400925ed:0x3fff7220 0x400e05d5:0x3fff7240 0x400fe9e0:0x3fff7270 0x400feae3:0x3fff72a0 0x400fee02:0x3fff72d0 0x400fb0c6:0x3fff7300 0x4009550b:0x3fff7320 0x4008eb05:0x3fff7360
WARNING Found stack trace! Trying to decode it
[02:21:28]
[02:21:28]Rebooting...

polclota/esp32lywsd03mmcというLYWSD03MMCとの連携専用のESP32用ファームウェア(Basic Arduino C ESP32 code for Mijia LYWSD03MMC cheap BLE temperature and humidity sensors to MQTT. Self device configuration for Home assitant so that you don’t need to configure them manually)のドキュメントには以下のように書いてある:

IMPORTANT!

Some USB cables as well as some usb power supplies do not provide enough power for BT and Wifi to work together so devices tent  (sic) to reboot. Should this occur loop count resets too so only first device (LYWSD03MMCのこと) is checked on and on. In some cases they even fail and reboot before first Wifi connection try.

Bluetoothとwifi機能を同時に使うと電力を消費するので,ケーブルを含め電源が十分電力を供給できるようになってないとリブートしてしまう,としている。要検討。

BLE機能は今の目的には必須機能なのでこれは外せない。いたしかたなく,フォント関係を含めディスプレー関係の機能をすっぽり抜くと,wifi, BLEとも安定して機能する。せっかくディスプレーつきのをわざわざ選んだのに残念だがいたし方ない。ディスプレーはフォントが使えなくても意味があるが,フォント機能抜きでディスプレー機能だけを残してもやはり同様の問題が発生した。

次のステップは,得られたセンサー値を “MQTTブローカ” で調べたBeebotteに投げるようにすること。

なお,T-Displayのディスプレーの解像度については製造元のスペックシートに記述がないが,Amazon.com: LILYGO TTGO T-Display-GD32 GD32VF103CBT6 Main Chip ST7789 1.14 Inch IPS 240×135 Resolution Minimalist Development Board: Computers & Accessoriesによれば240×135

また, “Frequently Asked Questions — ESPHome” で以下のようにあるように,設定ファイルは分割・パラメータ化ができる。

ESPHome supports (most of) Home Assistant’s YAML configuration directives like !include and !secret. So you can store all your secret WiFi passwords and so on in a file called secrets.yaml within the directory where the configuration file is.

For even more configuration templating, take a look at Substitutions.

!secretの使用法についてはあまり詳しくないが,その元になったという”Storing secrets – Home Assistant” 参照。


以下T-DisplayがESPHomeで正式サポートされる前に集めていたリソース:

TasmotaとESPHomeとの違い

ESP8266/ESP32用ファームウェアに関して,“Xiaomi Mi Flora Monitorを利用した自動化” , “ESP32デバイス向けESPHome” で触れてきたTasmotaESPHomeとの違いをきちんと調べてみた(他にもJavaScriptをサポートするものがあるがこの記事の範囲外)。

まず,TasmotaのESP32のサポートは現時点ではベータ版ということで,現時点でESP32のちゃんとしたサポートが欲しければ,それだけでESPHomeが自動的に選択される。が,TasmotaがESP32を正式サポートするのは時間の問題。

Tasmotaは動的構成でESPHomeは静的構成

設計方針としてここが大きく違う。

Tasmotaでは,基本的にまずはファームウェアをインストールしてから,後でWeb UIで構成する。そのため事前に想定された使用シナリオごとのファームウェアが複数用意されており,それが使えればそれをフラッシュした後,ハードウェアの設定をする。そのためのテンプレートリポジトリがある。自動化のルール設定はコマンドの一部として実現されているため,ファームウェアをインストール後,Web UIから設定できる。

事前に用意されたファームウェアの中に自分の使用法があったのが見当たらない場合自分で(クロス)コンパイルする必要がある。ユーザが自力でコンパイルできる環境を用意したりソースファイルに手を入れる必要があるため,敷居が大幅に高くなる。

ESPHomeではYAML形式のファイルで構成(自動化ルールを含め)を事前に指定し,変更があるごと,基本いちいちコンパイルしてファームウェアを生成してそれを焼く。必要なライブラリもその段階で面倒見てもらえる。そういった,「コンパイルありき」の使い方が前提なので,ユーザがコンパイル環境を用意したり,コンパイルする手間は最小限に抑えるよう工夫されている。

誤解を恐れず言語処理で例えるなら,Tasmotaはインタプリタ型言語処理,ESPHomeはコンパイラ型言語処理,のようだといえる。Tasmotaのファームウェアはいわば言語のインタプリタであり,一旦それをフラッシュすれば再フラッシュの必要はない。自分の望むように動作させるには,Web UIなどを使って数値を入力したり簡単なスクリプトを実行して設定する。一方,ESPHomeは,ユーザが用意した「プログラム」=設定ファイルを元に(クロス)コンパイルして,得られたファームウェアをフラッシュする。その後の設定は極めて限定した形でしかできない。「プログラム」を変更するたびに,コンパイルし,ファームウェアをフラッシュする,というプロセスが必要になる。

外部とのインターフェース

TasmotaはMQTT, Web API, Web UIに用意されたコンソール,シリアルの4種のアクセス方法を必ず提供している。これら4種に跨がって一貫した充実したコマンド体系を用意しているのは特筆すべき。例えば,スイッチが接続されている場合,どういうコマンドでこのスイッチのオン・オフを外部から操作するかも規定されている。

ESPHomeでは用意されているコンポーネントを使うことで同様のことが実現できなくはないが,どれもデフォルトでは使えるようになっていない。例えば,MQTTクライアントコンポーネントを使用すれば,既知センサー種の値を指定したMQTTブローカに投げるところまではやってくれるが,接続されたスイッチに対する外部からの操作を受け入れるためのトピックの指定やそこにpublishされた際どう対処するかは,全てユーザが指定しなくてはならない。一方,Webサーバ・コンポーネントを利用すればWeb(サーバ)APIが利用でき,そこでは外部から操作するためのURIが規定されている。

なおMQTTに関しては,MQTTサブスクライブ・センサーMQTTサブスクライブ・テキスト・センサーで,MQTTを介してデータが取得できる外部のセンサーを,自らに接続されたセンサーと同じように扱えるようにする道具立てが用意されている。

自動化

Tasmotaではルールはコマンドの一部という位置づけであるため,4種のアクセス方法全てで動的に設定できる。ただしルールは3つのみ。独自シンタックスで多様な内容が記述できる。動的に設定できるということは,裏返すとファームウェア内にハードコードされてないということ。同じ動作をさせたい機器を複数用意したい場合にこれは望ましくない。

これを限定的に補うためにスクリプト機能が用意されてはいるが,ファームウェアでデフォルトではこの機能は有効ではない。この機能が有効化されていたとしても,自分の理解ではやはりWeb UIで手動でいちいちスクリプトファイルを読み込ませなくてはならないと思うので,同じ動作をさせたい機器を複数用意したい場合にはやはり不十分。

ESPHomeでの自動化機能は “Automations and Templates” にまとめられている。ESPHomeでは構成は事前に静的に決められるため,自動化ルールも設定ファイルにYAMLシンタックスに従って記述される。特筆すべきはlambdaというキーワードで導入されるブロックで,ここには任意のC++のコードが埋め込める

それだけでなく,自前のセンサーコンポーネント,(センサーに限らない)一般的コンポーネントをC++で記述し,それを組み込むことも可能。

適性

Tasmotaは素人向き,ESPHomeは玄人向き。

Tasmotaは事前に用意されたファームウェアで目的が達成できる場合に適している。自分でコンパイルしなくてはならなくなるとその手間が大きく見合わない。対象機器の性格上,込み入ったカスタマイゼーションが必要なく,あってもちょっとした自動化をする程度の場合,など。Web UIが必ずあるのでとっつきやすく,自動化ルールも含めて,Web UIで操作できるのはよい。MQTTを含めたアクセス方法がデフォルトで用意されているので手間がかからない。

ESPHomeは込み入った構成や複雑な自動化を行いたい場合によい。必要なコンポーネントのみファームウェアに組み込まれるため,同じことを実現するのならTasmotaの場合より,ファームウェアは小さく収まることが期待できる。逆に言えば,同じフラッシュの容量なら,より多くの機能を詰め込める。一方,例えば通信相手のMQTTブローカを変える,といった小さい変更のためだけにファームウェアをいちいち再コンパイルしなくてはならないのは手間といえば手間。

参考資料

The COMPLETE Guide to Tasmota 2019 – YouTube

追記: “Tasmota vs ESPhome: Who wins? (DIY Sensors, ESP32, Deep-Sleep, etc.) – YouTube

MQTTブローカ

重要な追記: 以下,Beebotte無料プランが目的が達成されるよい選択肢という骨子だった。いざ実際に使い始めてみると,その結論は誤ってないものの,Beebotteの利点と認識していたことがMQTTブローカとして使った際には必ずしも適用されないことがわかった。これらのことを “BeebotteのMQTTブリッジ” にまとめた。その上で,ESP32搭載TTGo T-Displayからセンサー値をMQTTブローカに投げるようにしてみた


MQTT.orgのロゴ

MQTT.orgのロゴ

MQTTブローカを使いたい。複数ベンダによるIoT機器を包括的にモニタし,コントロールするのにMQTTを統一インターフェースとして利用するのが理にかなってると思われるから。

LAN内の運用

自前でMQTTブローカーを用意することも難しくない。オープンソースのEclipse Mosquittoがある。それはOpenWrtでもサポートされているので,LAN内のモニタ・サーバ上で走らせることもできる。LAN内MQTTブローカからインターネット上の外部サービスへの一方通行の通信のみ必要なのなら,リバース・プロキシを用意するなどしてセキュリティに配慮する必要も特にない。

インターネット上のサービスの利用

パブリックでフリーなMQTTブローカーも存在するのでそれを利用するのも手。LAN内ではなくインターネット内に存在するので,セキュリティーに注意する必要がある。

例えば,仮に自宅の室内の温度を見られたところで実害があるとは考えにくいが,IPカメラの画像であればそうもいってられなくなる(後でとりあげるBeebotteであれば, “Plans” のFAQ中の “What is a message?” によればインバウンドのメッセージは最大16KBということなので粗い画像を送りつけることは十分可能)。さらに,読み出しだけならまだしも,何か機器を制御できるようにしてあるのなら,それはアクセスされてはまずい。

TLS (Transport Layer Security)がサポートされていることが最低限必要だが,それだけでは不十分かもしれない。 “JavaScriptをサポートするESP8266/ESP32ファームウェア” でとりあげたMQTTブローカ機能を持つIoTプラットフォームのmDashのドキュメントに以下があった:

NOTE: mDash also supports MQTT as a transport protocol for devices. However, we would discourage from using it because of a security reasons. A single leaked device password can give an access to the entire fleet. A malicious client can suscribe to the # wildcard topic to sniff all traffic, and also can send commands to any device connected over MQTT.

Beebotte

Beebotte太っ腹な無料プランで以下が提供されるのでお遊びには十分。後で見るように,他にも無料プランとは思えない機能の充実ぶり。

  • Unlimited Channels
  • 50,000 Messages/day
  • 5,000 Persistent Messages/day
  • 3 Months History
  • SSL Encryption

ただし,messageの数え方は少し特殊で,5万メッセージ/日は意外と早く消費するかもしれない。 “Plans” のFAQ中の “What is a message?” 参照。

その他の無料MQTTブローカサービスもあるが(以下参照),あくまでお遊び用で「トピック」が丸見えになってしまうものもあるようなので注意。

Beebotteと他のサービスとの連携については以下のように双方向通信が可能:

β版としているがルールエンジンが用意されている。MQTTブローカはデータのやりとりだけに終止させ,それに基づく自動化は別に分けるのが separation of concerns の観点からはいいのかもしれないが,簡単なことであればBeebotteの中で完結させてしまう選択肢があるのはよい。アクションとしてAndroid端末にFCMでメッセージが送れるとなっているが,具体的にどうするのかわかってない。

セキュリティーの重要性は認識しているようで, “Beebotte MQTT Support” で3つのレベルのアクセス制御を提供している。トークンは取り消したり再生成できる

Beebotte MQTT Support” の “Considerations” にある細かな要件を,ESPHomeであれば,そのMQTTクライアントコンポーネントで満たすことができるのかはこれから要検討。

用意されたウィジェットを使ってグラフィカルなダッシュボードを作れる

Microsoft Azure IoT Hub

Microsoft Azure IoT Hub(MQTTブローカー機能あり)は,「IoT Hub Free エディションは、概念実証プロジェクトを推進する目的で用意されています。1日あたり合計 8,000メッセージまで送信でき、最大500台までのデバイスIDを登録できます。デバイス ID の制限は Free エディションにのみ適用されます。」ということ。8,000メッセージ/日ならまだ使えそう。

モノのインターネット (IoT) の徹底的なセキュリティ | Microsoft Docs” でTLSだけでなくそれ以上のセキュリティー対策が講じられていることが分かる。

無料使用については “ようやく始める Azure IoT Hub – Qiita” ,MQTTブローカー機能の使用については “Azure IoTHubにMQTTを使ってつないでみる。 – Qiita” 。 “AWS と Azure と Raspberry Pi (ラズパイ) で IoT してみた (3) #raspi #aws #azure – クリエーションライン株式会社

 

IFTTT代替自動化システム

IFTTTロゴ

IFTTTロゴ

IFTTT、上位プラン「IFTTT Pro」の導入により無料プランに大幅な制限。実質的な有料化との声も【やじうまWatch】 – INTERNET Watch” にあるように,IFTTTが実質的に有料化された(~$10/月)。無料プランは残るが,それでは最大3個までしかアプレットが作成できない。無料でゴリゴリ使うことはもうできない。Proアカウントはこれから1年は料金割引があるようだが,その後~$10/月の出費が正当化できるほどには使うとも思えない。

IFTTTは今まで全然使ってなかったのだが今後各種自動化の核にしようと思っていた。なので、IoT機器やそのファームウェアを考える上でもIFTTTとの連携は選択基準になってた。 “Xiaomi Mi Flora Monitorを利用した自動化” でもそういう趣旨のことを書いたし, “「スマート」なコンセントやテーブルタップ” でも以下のようなことを考慮していた。

(TuyaのESP8266/ESP32を採用したスマート機器は)ファームウェアの書き換えはせず,IFTTTのような一般的クラウド自動化サービスと連携させることも可。今年はじめにTuyaのクラウドサービスSmart LifeとIFTTTとの連携の解消が一旦アナウンスされたが,その後回復された模様( “IFTTT resumes support for Tuya Smart Life and Wink, gains 22 other new services” )。

しかしそれがチャラ…。代替自動化システムには何があるだろうか。

2種類の自動化

ところで。「自動化」,「オートメーション」といっても大きく2種類ある。いわば「事務処理系」と「制御系」。前者は主にクラウドサービス間の連携,後者は物理的センサ,アクチュエータを交えた複合的モニタリングや制御,が主目的。

機能的に被る部分はあるのでクロスオーバーが大なり小なり起こる。例えばIFTTTのように、もともとは「事務処理系」だったと思われるものが、後に「制御系」の機能を併せ持つようになる、といったように。

しかし、「出自」が違うのでやはりこの2種は分けて扱ったほうがいいと個人的には思うのだが,「IFTTTの代替サービス◯選」みたいな記事ではこの2系統を区別していないことが多い。IFTTTのように主にクラウドサービス間の連携を実現するクラウドサービスと,Taskerのように主にデバイス上でのセンサー値・設定変更・アプリ間連携をデバイス内で実現するものを同列に扱うのは間違っているだろう。この記事では「事務所理系」のIFTTT代替サービスを調べてみる。

IFTTTのような「事務所理系」自動化サービスがスマホと連携するには,コンパニオンアプリのインストールが必要(IFTTの場合(Android))。ただし,Taskerのようにもともとスマホ上での「制御系」自動化を実現するものに比べると提供されている機能は大幅に限られている。

Top 10 Zapier Alternatives to Automate Your Work (2020) | Beebom

フリーミアム

IFTTTのライバルとして必ず上げられるZapier連携サービス数は2,000を超え,「素人向けのIFTTT,玄人向けのZapier」といった対比もされるようだが,機能云々以前に無料アカウントでできることは極めて限られている上,一番安い有償プランが~$20/月(年払いで)では,お財布様が首を縦に振らない。

Integromatもよく取り上げられる(コンパニオンAndroidアプリ機能は限られている)。フローブロック間で渡されるデータをわかりやすく見せてくれるのは好感が持てる(かつてのYahoo! Pipesのよう)。無料プランでは月1,000オペレーションまで。用途によってはあっという間に達してしまいそうだ。 “無料&IFTTTやZapierよりもウェブサービスの連携を作り込める「Integromat」レビュー – GIGAZINE” 参照。

Microsoft Flowだったんだが,Microsoft Power Automateに改名?$15/月からとされてるが自分は1本flowを走らせてて課金はされたことがないと思うのだが…? “Microsoft Flow Alternatives and Similar Software – AlternativeTo.net” は “The free tier offers 750 runs per month, unlimited flow creation, 15-minute checks.” としている。

Zoho Flow ー 完全に「事務所理系」でMQTTなどのサポートは皆無。”無料&連携サービス豊富なIFTTTやZapier代替のワークフロー自動化サービス「Zoho Flow」レビュー – GIGAZINE” によれば,「Zoho Flowの無料アカウントでは作成できるフローは5つ、フローの実行回数はひと月あたり100回まで。ポーリング間隔は15分」。 “無料&連携サービス豊富なIFTTTやZapier代替のワークフロー自動化サービス「Zoho Flow」レビュー – GIGAZINE” 参照。

Work Super Smart – Automate.io ー 有償プランはZapierよりお得らしいが,無料プランの制限がきついことは同様。

これから長く使っていくという観点からは,私的使用に限るなら,これらフリーミアムサービスはどれもあまりいい選択肢には思えない。商業的に使用するのなら費用が正当ができるであろうから話は別。

FOSS

FOSSのものは自前でホストしなくてはならないのため敷居が高い。また,上の商業サービスに比べて,連携サービス数が少ない傾向にある。

n8n.io – Free and Open Workflow Automation Tool
無料でIFTTTやZapierっぽく全自動連携できる「n8n」を自サーバー上に構築してみた – GIGAZINE“…連携サービス数は商用システムに比べれば明らかに少ないが,ホストシステムのコマンドを起動できるので,直接連携をサポートしてないサービスのAPIをcurlで直接叩くことが可能。Line Messaging APIを利用する例あり。

huginn/huginn: Create agents that monitor and act on your behalf. Your agents are standing by! ー ともかくとっつきにくい。

あと,Node-REDは “a programming tool for wiring together hardware devices, APIs and online services in new and interesting way” ということなので,そもそも「事務所理系」と「制御系」のどちらにも対応できることを目指しているのかもしれない。多数のカスタムnodes/flows/collectionsがあるが,必要なものが見つかるか。 “Google” で検索してみるとGoogleの事務所理系サービスとの連携は手薄?パッと見,Tuya機器向けのものSonoff機器向けのものXiaomi機器向けのものがあるにはある(精査してない)。Node-REDをOracleの無料VPSサービスにインストールして使ってみることにした

余談: node-red-contrib-iotflows (node)があったのだが,何をするものか悩んだ。IoTFlowsというIoTコントロールシステムがある。操作者の役割分けがしっかりしているところを見ると,大規模な組織(会社やその部署)単位で操作することを想定している模様。MQTTによるコミュニケーションをベースにしている。Raspberry Pi上で走らせることを前提にしているOSを用意しているが,それを使わずともMQTTクライアントであればIoTFlowsにはMQTTでデータを送れる。node-red-contrib-iotflows (node)はどうも,Node-REDでIoTFlowsとデータのやり取りをするもののようだが,突き詰めると,それはMQTTブローカとのやり取り。だったら一般MQTTブローカとのやりとりと何が違うの,という話になるが,MQTT本体にないアクセスコントロール機能を追加しているのかもしれない(未確認)。

これ以外に,Huginnの作者等による “Similar or Complimentary to Huginn · huginn/huginn Wiki” が参考になる。

ちなみに,WindowsにはEventGhost: Automation made simple.が以前から。深く調べてないが,一般的PC使用というよりも,メディアプレーヤーとして使用するときや,ゲームをするときに使うことを前提にしているような印象。

以上ビジュアルな編集ができるものをに限ってきたが,Googleのサービスを利用するのなら,Google Apps Script (GAS)がよいのかも。クオータ

Google Apps Script は何が強くてどんなときに使うべきか自分なりのプラクティスをまとめてみた | by tanabee | google-cloud-jp | Medium

結局,仕事の方で必要になりそうな事務処理の自動化をやるんであれば,n8n.ioNode-REDで簡単に実現できそうならそれ(自分でホストする手間がペイしそうなら),そうでなければGASで頑張る,かな。Node-REDは制御系の自動化にも使えるからその点でn8n.ioより良いか。

追記: 後日Node-REDをOracleの無料VPSサービスにインストールし使えるようにした

JavaScriptをサポートするESP8266/ESP32用ファームウェア

JavaScriptをサポートするESP8266/ESP32ファームウェア3種。他のESP8266/ESP32用ファームウェアについては, “Xiaomi Mi Flora Monitorを利用した自動化” , “ESP32デバイス向けESPHome” ,  “TasmotaとESPHomeとの違い” で触れた。

Moddable

非公式JavaScript ロゴ

非公式JavaScript ロゴ(GitHub logo.jsより)

Moddable ー 完成度は断然高い。ソースはGitHub – Moddable-OpenSource/moddable: Tools for developers to create truly open IoT products using standard JavaScript on low cost microcontrollers.Moddable TechによるJavaScriptエンジンXSを使用していて,これはECMAScript 2019とほぼ互換らしい。詳しくは “XS7 @ TC-39” 。解説本が出版されている

Espruino

Espruino – JavaScript for MicrocontrollersPuck.jsなんか面白そうなんだが,ESP32についてはBLEをサポートしていないのが致命的

Mongoose OS

Mongoose OS – an IoT Operating SystemWikipedia)ー C/C++とES6のサブセットmJS- “Embedded JavaScript engine for C/C++” でプログラムが書ける。ModdalbeのXSが標準準拠を目指しているのに対し,mJSは “restricted” という通り制限が強く,JavaScriptで自由にプログラムが書ける,というより,C/C++以外のより簡便なプログラミング手段を提供する,といった意味合いが強い。

Cesanta Software, Ltd.の関連製品3つのうちの1つデュアル・ライセンスで,Apacheライセンス2.0を採用した場合,クラウドIoTプラットフォームとしてはCesantaによるmDashとの連携に限られることになっている(実際それしかできないかどうかはわからない)。しかもmDashの無料枠は限られている。

Google,Amazon,Microsoft,IBM等のIoT向けクラウドサービスとの連携を強く意識。 自分たちのmDash: IoT Frameworkも用意(機器11台目より有料)。Mongoose OSを使用しなくてもArduino IDEからmDashクライアントライブラリを使うようにすれば,mDashから管理できる。mDashクライアントライブラリはヘッダファイルとライブラリファイル(バイナリ)が提供されているだけで,ソースは提供されていない。

mDashクライアントライブラリは機能が非常に充実しており,IoT機器を商業的にかつ大規模に展開するために欲しいであろう機能が網羅的に提供されている(フラッシュの容量を圧迫しないのかしらん)。

Mongoose OS Documentation“に説明があるように,クラウド上のダッシュボードからプッシュ型のOTAが実施できるのは,手元にないIoT機器の管理には非常に有用だろう。ESPHomeでもOTA機能は用意しているがNAT超えとか想定しているとは思えない。プッシュ型OTAのためだけにmDashクライアントを使用する価値があるかも。

mDashのOTA機能だけを取り出したようなVCON::Remote Arduino updateサービスには無料枠はない。

おまけ: NectarJS

JavaScriptのコンパイラNectarJS(Github)がIoTでの応用も想定しているターゲットとしてArduinoの一部機種をサポートしている模様。これら用には,Cに変換し,AVR-GCCでバイナリを得るようになっているようだ。

以下の情報によれば,ArduinoではESP32用にもこのクロスコンパイラが使われているそうなので,SDKをちゃんと用意するなどすればJavaScriptプログラムを最終的にESP32用にコンパイルすることも可能になるのかも知れない。手間が見合うかは全く別の話だが…。

追記: その他

low.js — “Node.js for microcontrollers”ESP32にちゃんと対応している模様。ただしBLEはサポートしていないし,「サポートしてほしければ金払え」という態度のようなので今後も期待できない。

Duktapeで実装されている。このページ末尾にはDuktape同様,リソースに制限があるデバイス向けのJavascriptエンジンの実装がリストされている。この中にはJerryScriptも含まれる。

これらについては, “What’s the deal with iot.js and JerryScript | Max Ogden’s Website” で知った。