Posts for: #Smartplug

クラウド経由で tapo を制御する方法がわからない

0時に寝て7時に起きて8時過ぎまでだらだらしてた。オフィスのエアコンの効き具合がよくなくて昼間暑くてやる気にならなかった。

先日 ifttt で tapo p105 の制御 を行った。これが動くということはなんらかのクラウドの api 経由で tapo p105 を制御できている。次の記事をみながらやってみようと試してみた。結論から言ってクラウドの api 経由ではできなかった。

アクセストークンを取得する。terminalUUID は適当に生成すればよい。

$ curl -s -X POST -H "Content-Type: application/json" -d '{"method": "login", "params": {"appType": "iphone", "cloudUserName": "xxx@example.com", "cloudPassword": "***", "terminalUUID": "bf63e1d0-d5dc-4636-abf1-7eeada585935"}}' https://wap.tplinkcloud.com/ | jq .
{
  "error_code": 0,
  "result": {
    "accountId": "142785160",
    "regTime": "2023-06-11 04:59:43",
    "countryCode": "JP",
    "riskDetected": 0,
    "email": "xxx@example.com",
    "token": "***-***"
  }
}

ここで取得したアクセストークンを使ってデバイスの一覧を取得する。

$ curl -s -X POST -H "Content-Type: application/json" -d '{"method": "getDeviceList"}' https://wap.tplinkcloud.com/?token=***-*** | jq .
{
  "error_code": 0,
  "result": {
    "deviceList": [
      {
        "deviceType": "SMART.TAPOPLUG",
        "role": 0,
        "fwVer": "1.3.6 Build 20230308 Rel. 52591",
        "appServerUrl": "https://aps1-wap.tplinkcloud.com",
        "deviceRegion": "ap-southeast-1",
        "deviceId": "802241DA5175CF114E567DE8D72A3094210CB12D",
        "deviceName": "P105",
        "deviceHwVer": "1.0.0",
        "alias": "U21hcnQgUGx1ZyAoS2F6YW1vcmkgT2ZmaWNlKQ==",
        "deviceMac": "482254AC1D25",
        "oemId": "495AC9D888EB711C42A28BECF62071CF",
        "deviceModel": "P105",
        "hwId": "58070BD9D8ECC915CD3D6F20A2172712",
        "fwId": "1D18AD293A25ABDE41405B20C6F98816",
        "isSameRegion": true,
        "status": 0
      }
    ]
  }
}

ここまでは従来のスマートプラグと同様に動く。ここから先の手順は従来の hs105 と tapo p105 では手順が異なるみたい。passthrough というメソッドを呼び出してみてもエラーが返ってくる。

$ curl -s -X POST -H "Content-Type: application/json" -d '{"method":"passthrough", "params": {"deviceId": "802241DA5175CF114E567DE8D72A3094210CB12D", "requestData": "{\"system\":{\"get_sysinfo\":null},\"emeter\":{\"get_realtime\":null}}"}}' https://wap.tplinkcloud.com/?token=***-*** | jq .
{
  "error_code": -20571,
  "msg": "Device is offline"
}

どうやら tapo シリーズはスマートプラグ自体が web api のエンドポイントを提供していて、ローカルからデバイスの web api を呼び出して制御できるらしい。例えば、次の記事でその手順が書いてあって、同様のやり方で実装した野生のライブラリもたくさんみつかる。

うちのシェアオフィスのネットワークはローカルの ip アドレスへの通信をすべて拒否しているようなのでこのやり方はうちのオフィスでは検証できない。しかし、tp-link 社のスマホアプリと ifttt の webhook 経由で p105 の制御ができているため、おそらくローカルのエンドポイントに接続する以外の別の手段があるのだと推測する。それをインターネット上で数時間探してみたものの、発見できなかった。この前 interop の展示で聞いた話しだと ifttt は非公開 api を使ってインテグレーションを実装しているという話しだったけど、どうやってクラウド経由で通信しているのだろう?と不思議に思った。

アイディアのコラボレーション

2時に寝て何度か起きて7時に起きた。今日は勉強会の登板なのになにも準備できてなくてどうしようとか思いながら寝た。

パッケージングとリリースのドキュメント

5月の落ち穂拾いの時期にプロジェクトの開発ドキュメントを刷新していろいろな要項を書き残している。最後に残ったまだ書いていないドキュメントに次の2つがある。水曜日から課題管理やコードレビューの隙間時間に書き出していって3日ほどかけて一通り書き終えた。私は文章を書くのが遅いのと、1回ですべての内容を網羅できなくて、書いているうちに思い出して追記したり、寝かした文章をあとで見返して推敲したりすることが多い。そのため、ドキュメントを1週間ぐらいかけて書いたりする。

  • パッケージング
  • リリース

たまたまメンバーにあるモジュールをリファクタリングのために再実装してもらっている。その開発を完了したら古いモジュールと入れ替える必要があるので、開発だけではなく、パッケージングやリリース周りの作業を把握してもらう、よい機会と言える。これまでパッケージングやリリース周りのインフラはほとんど私が作って運用をまわしてきたので徐々にそれらを引き継ぐタイミングとも言える。開発者はインフラのことを気にせず、アプリケーションを開発してコミットすれば後はすべて ci/cd が自動的にいろいろやってくれて便利ぐらいの感覚で扱えるようにするのが、外資系などではプラットフォームに投資しろと言われたりするものだと推測する。うちらが開発しているプロダクトはコンテナ、RPM、Windows インストーラーとパッケージングする種類が多い。その要項に加えて QA 責任の考え方などについても書いておいた。主には私がいなくなった後に役に立つドキュメントとなるだろう。

チーム勉強会

本当は go の generics の勉強会をやりますと先週宣言していた。しかし、私が遊んでいて全然準備できなかったので代わりに決済とスマートプラグの話しをした。先週末と月曜日 に作った決済とスマートプラグを組み合わせたもの。サービスや仕組みを簡単に説明して、実際にデモを動かして電球を灯す。

参加者からスマートプラグをラズベリーパイに置き換えてパワーリレーというモジュールを使えばもっとスマートにできるんじゃないかという意見が出た。たしかにラズベリーパイなら stripe の決済イベントを受け取るサーバーをデバイス内に同梱させることもできるかもしれない。そうすると、スマートプラグのような電源の on/off だけではなく、ラズベリーパイが扱えるセンサーとインテグレーションすることもできそう。また時間のあるときにやってみたい。コラボレーションって正にこういうことを言うとわかってきた。私が1人でこの仕組みを実装していたときにはラズベリーパイというキーワードはまったく頭の中になかった。他者の視点が加わるから新しいアイディアが広がる。

ネットワークからスマートプラグの制御

昨日は夕方に親が立ち寄るかもしれないというから待機していたのに空振りに終わった。0時に寝ようとしてあまり眠れなくて7時に起きた。ここ最近寝ているのか寝てないのかよく分からない眠り方になる。

決済してスマートプラグを ON にしろ

昨日の続き 。夕方に Tapo P105 が届いたので業務を終えてからさっそく使ってみた。

オフィスの wifi に接続して、tp-link 社のスマホアプリからデバイス登録する。スマホアプリからはすぐに on/off できた。スマホで電源の on/off を制御できてあまり嬉しいことはパッと思いつかないけど、プログラムから制御できるならなにか遊べそうな気もしてくる。ifttt というインテグレーションサービスがあって、それを使うと tp-link 社のデバイスと ifttt 社の web api 経由で制御できる。おそらくなんらかの web api が tp-link 社からも提供されているはず。それが公開されていれば ifttt を使う必要はないし、すでにハックされているものを使うのでもよいかもしれない。ひとまず動かすことを目的とするので ifttt を使う。スマートプラグに電球をつなげて、決済したら電球が灯って3秒後に消えるようなサンプルアプリを作った。一通り最後まで動かすことができておもしろかった。

スマートプラグ制御の調査

23時に寝てうまく眠れなくて5時に起きた。そのまま10時ぐらいまでだらだらしてた。

スマートプラグの通電テスター

昨日の続き 。スマートプラグを検索すると TP-Link 社の製品がよく出てくるのでミニスマート wi-fi プラグの Tapo P105 を購入してみた。この製品だとネットワーク経由で電源の on/off ができそう。ifttt というサービスが TP-Link Tapo インテグレーションを公開している。TP-Link 社も自前で TP-LINK Cloud というサービスを提供していて、どうやらその web api は公開されていないようだけど、おそらくそこで使っている web api を調べてライブラリにしたのが tplink-cloud-api のようにみえる。サイトをみる限りはカメラしかサポートしていないようにもみえる。スマートプラグのようなデバイスがハックしやすい性質のせいか、書いてある情報が曖昧で実際にどうやってデバイスを制御したらよいのかネット上の記事からよくわからない。実際に購入したもので試してみるのが早そう。明日届く予定。

このスマートプラグによる電源 on/off のテスターに、ダイソーで電球を購入してきた。電源ソケットアダプタが100円、電球は100円、200円、300円とそれぞれあったんだけど、100円の差異でどうせ買うなら精度のよいものをと考えて300円のものを購入した。LED で電力消費も少ない。

試しにオフィスにあった amazon 純正スマートプラグ経由で接続して alexa アプリで on/off したら意図したように電球が灯ってテスターの代替にできた。デモのために使うのでそれぐらいわかりやすいのがよい。

モロゾフ

昨日参加したもくもく会を借りていた 中央区文化センター には2フロアに渡って大小いくつかの会議室がある。それぞれの会議室には張り紙をしていて借り主の名前が外からわかる。たまたま通ったところに「モロゾフ労働組合」と書いてあって、どこかの会社の労組が会議しているんだなと覚えていた。今日になって来週の東京出張のお土産を探していたらモロゾフというお店があることに気付いた。モロゾフの歩み によると1931年創業の神戸本店の洋菓子の会社らしい。これもなにかの縁だと思って今回はモロゾフさんの神戸本店へ行って ブロードランド 15個入 をお土産用に購入した。

自分用にアーモンドケーキを買って食べてみた。しっとり食感で控え目にアーモンドの風味がして甘過ぎなくて後味のよいケーキでおいしかった。