0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

スマートメーター × Confluent Cloud リアルタイムデモ(東京23区版)CHANGELOG

0
Last updated at Posted at 2026-07-30

スマートメーターデモ 変更履歴(公開用)

このファイルはデモの設計・実装・ドキュメントに対する変更を記録します。

公開ドキュメント

Ver.2
https://qiita.com/Shumpei_Kubo/items/581261ab3848fc8c120b

Ver.1
https://qiita.com/Shumpei_Kubo/items/65691b8b38767674bd92


[v3.2] — 2026-07-30

変更概要

業界専門家との技術ディスカッションを踏まえ、デモのストーリー構成を強化しました。

変更内容

ファイル 変更の種類 概要
README.md 追記 冒頭に「このデモが伝えること」セクションを新設。電力自由化の背景・Confluent 3条件・「オーバースペック」注釈を追加
DEMO_OVERVIEW.md 追記 §0「このデモを見せる前に」を新設。電力自由化の背景、Confluent適用 3条件、掲示板型 vs 郵便型比喩を整理
ARCHITECTURE.md 追記 「掲示板型 vs 郵便型」比較表・「Confluent 適用判断ガイド」を追加
4_dashboard_map_tokyo23.html 追記 サイドバー下部に「なぜ Confluent?3条件」パネルを追加

[v3.1] — 2026-07-30

変更の背景・契機

DEMO_OVERVIEW.md のデータリネージュセクション(§5)が旧来のアスキーアート形式であり、
v3.0 で追加した新フィールド(cumulative_kwhdelta_kwhis_outage_recovery 等)や
ksqlDB の差分計算・マルチコンシューマー構成が反映されていなかったため、Mermaid 図に全面刷新した。

変更内容

変更ファイル: DEMO_OVERVIEW.md

旧来のアスキーアート1図 + テーブル + テキスト構成を、以下5つの Mermaid 図に置き換えた。

セクション 図の種類 内容
5-1. システム全体フロー flowchart LR ①データ生成→②Confluent→③ksqlDB→④サーバー→⑤ブラウザ の5段階。ksqlDB 経路とローカル集計経路の2パスを明示
5-2. フィールドレベルのデータリネージュ flowchart LR 全11フィールドの生成→Kafka通過→ksqlDB変換→集計→表示 の流れをフィールド粒度で追跡。cumulative_kwh → LAG() → delta_kwh(Confluent上差分計算)を可視化
5-3. 停電バーストシナリオ sequenceDiagram フェーズ1(通常)→フェーズ2(停電・蓄積)→フェーズ3(復旧バースト)の3段階を時系列で表現。実測値(0.5秒・93,000件/秒)を記載
5-4. フィールドの変化まとめ テーブル 旧4列(生成/Kafka/集計後/表示)→新5列(生成/Kafka/ksqlDB/集計後/表示)に拡張。v3.0追加フィールドをすべて反映
5-5. end-to-end レイテンシ gantt 通常フロー(1〜2秒)とバーストフロー(0.5秒送信後に後段は通常ペース)を時間軸で比較

旧形式との主な差分

項目 旧(v3.0以前) 新(v3.1)
図の形式 アスキーアート Mermaid(GitHub / Obsidian 等で自動レンダリング)
フィールド数 7フィールド(kwh 中心) 11フィールド(cumulative_kwhdelta_kwh 等 v3.0追加分を網羅)
ksqlDB の扱い 記述なし LAG() 差分計算・二系統集計を図に明示
停電バーストの表現 記述なし Sequence 図で3フェーズを時系列可視化
レイテンシ表現 テキスト箇条書き Gantt 図で通常時・バースト時を比較

[v3.0] — 2026-07-30

変更の背景・契機

以下の3つのインプットをもとに、デモ全体を業界実態に即した内容へ刷新した。

インプット 概要
電力業界関係者との技術ディスカッション (2026-07-29) 積算値方式・停電バースト・マルチコンシューマーなど実業務の知見を収集
東京電力 スマートメータープロジェクト資料 PLC通信・コレクタ構成・30分値・2,900万台規模などの実態
経産省 次世代スマートメーター仕様書 Rev5.1 (2026-03-27) 1分値収集・停電即時通知・LTE-Mハイブリッド・双方向計量などの新仕様

変更内容

1. データモデルの変更(積算値方式への移行)

変更ファイル: smart_meter_generator.py / smart_meter_generator_tokyo23.py

変更前の問題

  • kwh フィールドを「その10秒間の消費量」として直接生成していた
  • 実際のスマートメーターは積算値(odometer型) のみを保持・送信するという実態と乖離していた

変更後

フィールド 変更内容
cumulative_kwh 新規追加。起動時に1000〜9999 kWhで初期化し、バッチごとにインクリメント。実際のメーターが送信する積算値を模倣
kwh 今回バッチの増分(デモ表示用・ksqlDB LAG() のフォールバック値として併送)
value_type 新規追加"provisional"(速報値)/ "confirmed"(確定値)
is_outage_recovery 新規追加。停電復旧時の蓄積データ送信フラグ(bool)
sequence_no 新規追加。バースト時の順序保証・重複排除用の送信連番

実態との対応

実際のメーター送信: cumulative_kwh(積算値のみ)
消費量の計算: 受信側(HES or Confluent上のksqlDB)が差分計算
  例) 12:00 → 1234.567 kWh
      12:30 → 1237.089 kWh
      差分  →    2.522 kWh(30分間の消費量)

2. ksqlDB クエリの全面刷新(Confluent上での差分計算)

変更ファイル: 3_ksqldb_queries.sql

変更前: kwh(瞬間消費量)を直接集計するシンプルなウィンドウ集計のみ

変更後: 6ステップ構成に拡充

Step ストリーム/テーブル名 役割
1 smart_meter_stream_tokyo23 生データストリーム定義(cumulative_kwh を受信)
2 smart_meter_delta LAG() で積算値→差分計算(Confluent上で実施)
3 district_power_1min 速報集計(1分ウィンドウ・速報ダッシュボード用)
4 district_power_30min_confirmed 確定値集計(30分ウィンドウ・課金計算用)
5 outage_recovery_events 停電バースト検知フィルター(is_outage_recovery=true 抽出)
6 meter_alerts 異常メーター抽出(CP4D / Maximo 連携用)

訴求ポイント: 同一トピック(smart_meter_tokyo23)を3つの Consumer Group が独立消費する「掲示板型」マルチコンシューマー構成を実装した。

smart_meter_tokyo23
  ├── Consumer Group A → district_power_1min(速報ダッシュボード)
  ├── Consumer Group B → district_power_30min_confirmed(課金確定値)
  └── Consumer Group C → meter_alerts(異常検知・AI分析)

3. ダッシュボードサーバーの起動モード整理

変更ファイル: 4_dashboard_server.py / 4_dashboard_server_tokyo23.py

変更前: --local-aggregate(デフォルト)/ --offline の2モード

変更後: 3モードに整理し、ksqlDB モードをデフォルトに変更

フラグ トピック 集計場所 用途
--ksqldb(デフォルト) district_power_1min Confluent上のksqlDB 本番推奨。差分計算はConfluent側で完結
--local-aggregate smart_meter_tokyo23 Pythonサーバー側 ksqlDB クラスター不要の簡易デモ
--offline なし(ローカル生成) Pythonサーバー側 Kafka 接続不要のオフラインデモ

4. Producer への停電バースト機能追加

変更ファイル: 2_produce_to_confluent_tokyo23.py / 2_produce_to_confluent.py

追加フラグ

# 60分間の停電を想定した復旧バースト送信
python 2_produce_to_confluent_tokyo23.py --outage-recovery --outage-minutes 60

# 送信内容
#   - 345台 × 360バッチ(60分÷10秒)= 124,200件を一括送信
#   - is_outage_recovery=true フラグ付き
#   - バースト送信時刻は停電中の過去時刻を再現
#   - sequence_no で順序保証

バッファ設定も追加(BufferError 対策)

"queue.buffering.max.messages": "500000",   # バースト送信用にキュー拡大
"queue.buffering.max.kbytes":   "1048576",  # 1GB

停電シナリオ自動演出スクリプト: outage_scenario.py を新規作成

3段階を自動で演出:

  1. 通常運転(30秒・3バッチ送信)
  2. 停電(20秒間 送信ゼロ・カウントダウン表示)
  3. 復旧バースト(蓄積データを一括送信)

5. ダッシュボード HTML へのバーストインジケーター追加

変更ファイル: 4_dashboard_map_tokyo23.html

追加要素

追加内容 説明
「受信レート(件/秒)」KPI 1秒ごとにスループットを計測・表示
「累計受信件数」KPI 接続後の総受信件数を表示
停電復旧バーストインジケーター outage_recovery_count > 0 を検知すると画面下部に赤バナーが点灯・点滅。is_outage_recovery=true フラグ検知 | Confluent が高負荷を吸収中 と表示

6. ドキュメントの刷新

変更ファイル: ARCHITECTURE.md / DEMO_OVERVIEW.md / README.md

主な追記内容:

  • 実際の5段階通信経路図(メーター→PLC→コレクタ→WAN→HES→Confluent→各システム)
  • 「10秒間隔はデモ映え用」の明示的な注記(実際は30分値/1分値)
  • 本番スケール対比表
指標 本デモ 東京電力管内(現行30分値) 東京電力管内(次世代1分値)
メーター数 345台 約2,900万台 同左
送信レート 34.5件/秒 約16,100件/秒 484,000件/秒
停電1時間分バースト 約12,420件 約17.4億件 約17.4億件
  • 次世代スマートメーター(Rev5.1)の記述追加
    • 1分値収集が標準仕様に(2024年度〜順次展開)
    • 停電発生のリアルタイム通知(数秒以内)が仕様化
    • LTE-M とのハイブリッド通信経路
    • 双方向計量(太陽光逆潮流)の標準化

デモ実施記録(2026-07-30)

実施内容

# シナリオ 結果
1 東京23区版 通常デモ起動 345台・10秒間隔・ブラウザ接続確認
2 停電バースト(単発) 124,200件を1.2秒で送信。約105,000件/秒。通常比約3,000倍
3 停電→復旧シナリオ(3段階自動演出) 通常30秒→停電20秒→バースト0.5秒。10,350件を93,000件/秒で送信

実測値

指標 通常時 バースト時(60分停電想定)
送信レート 34.5件/秒 約105,000件/秒
1回の送信件数 345件/バッチ 124,200件
件数倍率 基準 約360倍
レート倍率 基準 約3,000倍
Confluent蓄積総件数(累計) 1,749,445件

確認された Confluent 訴求ポイント

  1. 高スループット吸収: 3,000倍のバーストを受け取りながら後段への直撃を防いだ
  2. バッファリング: バースト後も後段(ダッシュボード)は自分のペース(1秒集計)で消費できた
  3. データ保持・再処理: 蓄積データは7日間保持。auto.offset.reset=earliest で過去データの再計算が可能
  4. マルチコンシューマー: 同一トピックを速報用・確定値用・異常検知用が独立して消費できる構成

変更ファイル一覧

ファイル 変更種別 主な変更内容
smart_meter_generator.py 修正 積算値モデル・新フィールド追加
smart_meter_generator_tokyo23.py 修正 同上(東京23区版)
2_produce_to_confluent.py 修正 --outage-recovery フラグ追加・コメント修正
2_produce_to_confluent_tokyo23.py 修正 同上・バッファ設定追加
3_ksqldb_queries.sql 全面書き換え LAG() 差分計算・速報/確定二系統・バースト検知追加
4_dashboard_server.py 修正 --ksqldb モード追加・デフォルト変更
4_dashboard_server_tokyo23.py 修正 同上・TOPIC_NAMERAW_TOPIC 参照修正
4_dashboard_map_tokyo23.html 修正 バーストインジケーター・スループット KPI 追加
ARCHITECTURE.md 修正 v3.0へ更新・5段階通信経路図・積算値解説追加
DEMO_OVERVIEW.md 修正 デモ映え注記・本番スケール表・バースト手順追加
README.md 修正 デモシナリオ説明刷新・バーストデモ手順追加
outage_scenario.py 新規作成 停電→復旧バースト 3段階自動演出スクリプト
CHANGELOG.md 新規作成 内部用変更履歴ファイル
CHANGELOG_PUBLIC.md 新規作成 本ファイル(公開用)

[v2.0] — 2026-07(東京23区版追加)

  • 東京23区版(23区・345台)を高松市版に追加
  • smart_meter_generator_tokyo23.py 新規作成
  • 2_produce_to_confluent_tokyo23.py 新規作成
  • 4_dashboard_server_tokyo23.py 新規作成
  • 4_dashboard_map_tokyo23.html 新規作成(Leaflet.js バブル地図)
  • トピック smart_meter_tokyo23(23パーティション)追加

[v1.0] — 2026-07(初版 高松市版)

  • 高松市5地区・36台のスマートメーターデモを初期構築
  • smart_meter_generator.py2_produce_to_confluent.py4_dashboard_server.py 作成
  • ksqlDB クエリ(3_ksqldb_queries.sql)作成
  • 棒グラフ版(4_dashboard.html)・地図版(4_dashboard_map_takamatsu.html)作成
  • トピック smart_meter_readings(5パーティション)使用
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?