スマートメーター

ダッシュボード完成

先月作ったスマートメーターのダッシュボード。

一ヶ月あまり使ってみた感触をフィードバックする仕上げフェーズを実施。

2連円弧メーター(A,W)は基本的に同じ挙動しかしないので、電力(W)は邪魔かもな?と思い、電流(A)のみ水平ゲージに整理し、電力(W)は値だけ控えめに表示。

時系列グラフも、設定時間幅のままスクロールして過去に遡れるようにし、スケール調整も2段階に抑制。

完成版ダッシュボード

完成版ダッシュボード

見やすさ優先の調整を行い、万事OK。

最終的なGemini 3の完成版コードは670steps/25KBとなった。

まとめで「改めてゼロから作る前提でAIに投入するためのプロンプト」を生成し、終了。

Tapo P110MによるBルートアダプターのデイリーRebootで欠測ロスも解消した雰囲気で、冷房が本格稼働して電力消費の上がる夏に向けて、なかなかいい感じだ。

参照

Google Gemini https://gemini.google.com/

Wikipedia https://ja.wikipedia.org/wiki/

Tapo P110M投入

2017年11月に調達したArmadillo-Box WS1をベースにしたIIJのWi-SUN対応Bルートアダプター「SA-M0」

Tapo P110M

Tapo P110M

少々挙動が怪しくなってきた事もあって、2022年2月に「Nature Remo E Lite」を調達してみたのだが、こっちはこっちでもっと電力取得ができたりできなかったりしているので、「Nature Remo Cloud API」を叩いたところで悩みが増えるだけかもしれない…

と思っていたら、どうやら「スマートメーターのWi-SUN Bルートは、原則メーター1台あたり1アダプタ接続」らしい事がわかり、相変わらずSA-M0を使い続けている今日このごろ。

やっぱり24時間365日連続運転というのが良くないのかも?というありがちな思いに到り、ひとまず手持ちのTapo P110Mを投入。

Matter対応なら自宅サーバのcronで叩けるかと思ったが、そもそもTapoアプリのスケジューラ機能でOFF、1分後にONさせるだけで済んでしまったよ。

参照

INTERNET Watch https://internet.watch.impress.co.jp/

TP-Link 日本 https://www.tp-link.com/jp/

Amazon.co.jp https://www.amazon.co.jp

Wikipedia https://ja.wikipedia.org/wiki/

バイブコーディングgemini編

Perplexity Proの無料期間が6月で終了する。

gemini版のダッシュボード

gemini版のダッシュボード

2,950円/月、2万9500円/年で継続する必要があるかどうか判断するために、本腰入れて4月に契約したGoogle AI Plus(LLMモデルはGemini 3)を試す事に。

そんなわけで、先週完成したスマメ電力ダッシュボードについて、Perplexityでプロンプトを逆生成しGoogle Geminiにコピペしてみた。

さすがに一発OKとはいかなかったが、3ターンほどでやり取りして完成。細部の出来栄えはClaudeのSonnet 4.6に分があるものの、こっちを先に見ていれば文句なしの合格だろう。ちなみにGemini 3の生成コードは500steps/20KB、Claude Sonnet 4.6のコードは530step/24KB。

せっかくなので、別に40Aを超えたらGoogle Homeに警告アナウンスをキャストするスクリプト作成にもトライ。NestHubでのダッシュボード&警告表示はNestHubのブラウザJavascript対応がうまくいかずひとまず諦めたが、Google Home Miniへの音声キャストだけなら3~4ターンほどであっけなく完成した。

2017年11月にスマートメーターBルートを開通して8年以上経ってしまったが、奇しくも2016年5月のGoogle Home発売のアナウンスから10年目前なので、滑り込みセーフという事で喜びたい。

最後に「この一連のバイブコーディング作業を扉絵に」と頼んだところ、“バイブ"ではなく"ライブ"という文字が入ってしまい、わけわかめw

参照

ITmedia NEWS https://www.itmedia.co.jp/news/

Google Cloud https://cloud.google.com/

Google Gemini https://gemini.google.com/

Claude https://claude.ai/

Anthropic https://www.anthropic.com/

Wikipedia https://ja.wikipedia.org/wiki/

ダッシュボード完成

9日10日の続報。

ダッシュボード完成形

Perplexity+Claude Sonnet 4.6

PerplexityでLLMモデルを「Claude Sonnet 4.6」に指定して「バイブコーディング」を続行。

PC、スマホ、タブレットで確認しつつ情報やレイアウトを整理し、時系列グラフの表示幅(時間軸)を選択できるようにしたら、情報が多すぎて縦画面では選択ボタンが表示されなくなった。

縦画面ではプルダウンにしたり、いろいろと試行錯誤していたら「データ取得エラー」となって何も表示されなくなってしまったのだが、

原因が分かりました。applyRangeUiMode() 関数が .range-desktop / .range-mobile クラスを探していますが、前のリファクタリングでそれらの要素を削除済みです。さらに re.sub で isDual を全置換した際にJSコードが壊れている可能性があります。

と自己分析。

申し訳ありません、次のターンで改めてファイル全体を整合性のとれた状態で再生成します。現状は複数回の差分編集が積み重なってJS内部に矛盾が生じています。一度クリーンなベースから書き直した方が確実です。続行してよいですか?

という提案に乗って続けてもらい、無事に回復。

…すごいな。

参照

Perplexity https://www.perplexity.ai/

Claude https://claude.ai/

Anthropic https://www.anthropic.com/

Wikipedia https://ja.wikipedia.org/wiki/

バイブコーディング

昨日の生成AIで作ったスマートメーターモニターがいきなりいい感じだった件。

ほぼ完成形のダッシュボード

Perplexity+Claude Sonnet 4.6

速攻でClaude Codeの無料分(5時間枠)を使い切ってしまったので、さてどうしたもんかと思ったのだが、Perplexityで使用できるLLMモデルに「Claude Sonnet 4.6」があったので、こいつを使ったところ手作業で修正する必要がないものがサクッと出来上がってしまった。

そんなわけで、Perplexityのチャットインタフェースで、2要素グラフの軸を入れ替えたり、スマートフォン向けに位置や大きさを微調整したり、例外表示を追加したり、要件をプロンプトして、ほぼ完成。

なるほど、これが「バイブコーディング」か…

参照

Claude Code https://code.claude.com/

Perplexity https://www.perplexity.ai/

Google Cloud https://cloud.google.com/

IBM https://www.ibm.com/jp-ja/

Perplexity https://www.perplexity.ai/

Gemini https://gemini.google.com/

Microsoft Copilot https://copilot.microsoft.com/

ChatGPT https://chatgpt.com/

Wikipedia https://ja.wikipedia.org/wiki/

Nature Remo 障害

この7月、Nature Remoで2回の障害が発生していた模様。

この夏の酷暑とは関係なさそうだが、7月19日のブルースクリーン多発事件もあり、やな感じだ。

当初はIoTという名前の通り、何でもかんでもInternet接続させて喜んでいたものの、必要以上にクラウド依存になってしまう反動からIRkitのローカル対応などに取り組んでいる今日このごろ。ローカル対応が抜本的な対策となると考えていますというNatureを応援したい。

参照

ITmedia NEWS https://www.itmedia.co.jp/news/

Nature https://nature.global/

Nature Remoシステム稼働状況 https://status.nature.global/

Wikipedia https://ja.wikipedia.org/wiki/

Nature Remo

昨年6月に復活したIRKitの不調具合が加速してきた折、3,980円であらゆる家電をIoT化。Matterリモコン「Nature Remo nano」というニュースで、一つ前世代のNature Remo miniを調達してたのを思い出し、慌てて投入。

yano@haswell:~/smarthome$ Token=zjKKjfAL6X36SJvKtuqqXxm2SHMFeAjBnTHxZUhdzjKKjfAL6X36SJvKtuqqXxm2SHMFeAjBnTHxZUhd
yano@haswell:~/smarthome$ curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -k --header "Authorization: Bearer ${Token}" | jq
[
  {
    "name": "Remo mini",
    "id": "deb07f72-a5ab-4262-915b-ABCDEFG",
    "created_at": "2023-08-09T01:31:06Z",
    "updated_at": "2023-08-09T02:15:12Z",
    "mac_address": "98:cd:ac:XX:YY:ZZ",
    "bt_mac_address": "98:cd:ac:XX:YY:ZZ",
    "serial_number": "2W221070012345678",
    "firmware_version": "Remo-mini/1.12.2",
    "temperature_offset": 0,
    "humidity_offset": 0,
    "users": [
      {
        "id": "c376a287-5300-4c8b-b793-ABCDEFG",
        "nickname": "ホゲホゲフーガ",
        "superuser": true
      }
    ],
    "newest_events": {
      "te": {
        "val": 32,
        "created_at": "2023-08-09T05:03:19Z"
      }
    }
  }
]
yano@haswell:~/smarthome$

Nature Developer PageによるとIRKitのような「Local API」も公開されているらしい。

SwitchBot API

IFTTT不発事故に起因する2021年版AirconShutdownの善後策。

SwitchBotハブミニ

SwitchBotハブミニ

これまではTwitter経由のIFTTTで家電リモコンSwitchBotを制御していたところ、2022年版IRKitでは直接APIを叩くようにできたので、SwitchBotSwitchBot Open APIを叩くことに。

SwitchBot Open API

https://api.switch-bot.com/v1.0/devices/**<deviceId>**/commands

というRESTエンドポイントに制御データをPOSTする枠組み。****で指定する対象装置は

curl --request GET 'https://api.switch-bot.com/v1.0/devices' \
  --header 'Authorization: 認証トークン' \
  --header 'Content-Type: application/json; charset=utf8'

で一覧を取得できる。なお、認証トークンはSwitchBotをHub経由でAPIから操作するに倣い、SwitchBotアプリの「開発者向けオプション」から取得できる。

ちなみに、エアコンの制御データのパラメータは

deviceType
commandType
Command
command parameter
Description
…となっているので、、エアコン停止用の
{  "command": "setAll", "parameter": "25,1,1,off", "commandType": "command"}

というデータを"switchbot_aircon_off.json"というファイルにして

#!/bin/bash
BASEPATH=$(dirname $0);
SWITCHBOT_API="https://api.switch-bot.com/v1.0"
SWITCHBOT_TOKEN="90edf....3431"
hdr_auth="Authorization:${SWITCHBOT_TOKEN}"
hdr_type="Content-Type: application/json"
# BODY="@${BASEPATH}/switchbot_aircon_off.json"
BODY='{"commandType": "command", "command": "setAll", "parameter": "25,1,1,off"}'
AIRCON_1F="01-2020XXXXXXXX-32"  # 1F
AIRCON_2F="01-2020YYYYYYYY-52"  # 2F
AIRCON_3F="01-2020ZZZZZZZZ-82"  # 3F
for DEVICE_ID in $AIRCON_1F $AIRCON_2F $AIRCON_3F;
do
    URL="${SWITCHBOT_API}/devices/${DEVICE_ID}/commands"
    curl "${URL}" \
         --silent -O /dev/null \
         -H "${hdr_auth}" -H "${hdr_type}" \
         -X POST -d "${BODY}"
done

というスクリプトを回せばエアコン3台が順次停止になる運びだ。

IRKit復活

先日エアコン自動停止不発問題。

IRKit

2016年に購入したIRKit

IFTTTが不発という事で善後策の検討していたのだが、iPhoneで家電を操作できるリモコンデバイス IRKitのアプリが実は直接叩いていて、そのDevice HTTP APIも公開されている事がわかった。

なんと、curlコマンド一発で赤外線データをJSON形式で取得できて、それをまたcurlで送りつければいいらしい。

というわけで、2016年に調達したIRKitを復活。

まずはBonjourを使ってIPアドレスを求める必要があるので、UbuntuではAvahiなツールを使って

yano@GT110b:~$ IRKIT=$(avahi-resolve -n $(avahi-browse -t _irkit._tcp | awk '{print $4"."$6}') | awk '{print $2}');echo ${IRKIT};

てな感じでIPアドレスを調べておく。

それから、IRKitに向けてリモコンボタンを押したあと、curlで

yano@GT110b:~$ curl -H "X-Requested-With: curl" -i "http://$IRKIT/messages"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain
{"format":"raw","freq":38,"data":[843,843,935,843,935,843,,,,,935,787,935]}

てな感じで赤外線データが採れる事を確認。

IRKitの赤外線データはGET応答と引き換えに消去される仕様なので、もう一度IRKitに向けて同じリモコン操作を行い

yano@GT110b:~$ curl -H "X-Requested-With: curl" "http://$IRKIT/messages" --output ${HOME}/IRKit/urusara_off.json

てな感じでボディだけをファイルに保存したあと、

yano@GT110b:~$ curl -i "http://${IRKIT}/messages" -H "X-Requested-With: curl" -d @${HOME}/IRKit/urusara_off.json
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain
yano@GT110b:~$

とする事で、Ubuntuのターミナルからエアコンの停止に成功。

Nature Remo E Lite

Nature Remo E Lite

Nature Remo E Lite

2017年11月に調達したArmadillo-Box WS1をベースにしたIIJのWi-SUN対応Bルートアダプター「SA-M0」

瞬時電力の取得が数分空いたり、少々挙動が怪しくなってきた事もあり「Nature Remo E Lite」を調達。11,840円也。

NatureスマホHEMS「Nature Remo E(ネイチャーリモイー)」にはECHONET Liteを使って"エネルギー機器の制御"までできる高機能版もあるが、ECHONET Liteの受信に特化した廉価版で十分。

「Nature Remo E / E lite のスマートメーターに関するAPI」も公開されているようだが、まだローカルAPIが無いっぽいのが残念。

瞬時電力を使ったオートメーションが作れるようなので「ブレーカーが落ちる前にエアコンを止める」くらいはスマホアプリ単体で実装できるので、まぁいいか。

参照

家電 Watch https://kaden.watch.impress.co.jp/

Nature https://nature.global/

Nature Developer Page https://developer.nature.global/

Wikipedia https://ja.wikipedia.org/wiki/