スマートメータから100V 2系統それぞれの電流値を得る
スマートメータから瞬間消費電力を読むRubyのコードをT相・R相の電流値(100Vの2系統)をとるように修正した。
仕様上は0.1A単位でとれるみたいだけど、実際は1A単位にまるめられてしまうみたい。なので細かいことはわからない。
うちの分電盤の場合、図面を確認すると交互に配線 (L1N, L2N, L1N, L2N) されているようで、奇数番目がR相、偶数番目がT相になっているようだった。
何が嬉しいか? というと電流値を見ることで、ブレーカーを落としたりしなくてもT相系かR相系かまでは特定できる。
あと力率がある程度わかるかな。コイル負荷か抵抗負荷かぐらいの種類をある程度推測できる。
--- smartmeter.rb.orig 2026-05-08 08:43:13
+++ smartmeter.rb 2026-05-08 20:30:44
@@ -385,7 +385,7 @@
ECHONET_Lite::EOJ.new(0x05, 0xFF, 0x01),
ECHONET_Lite::EOJ.new(0x02, 0x88, 0x01),
0x62,
- 3,
+ 4,
[
ECHONET_Lite::Property.new(
0xe7,
@@ -399,6 +399,11 @@
),
ECHONET_Lite::Property.new(
0xe0,
+ 0x00,
+ ""
+ ),
+ ECHONET_Lite::Property.new(
+ 0xe8, # 瞬時電力
0x00,
""
),
@@ -494,6 +499,8 @@
unit = nil
energy = nil
watts = nil
+ r_amp = nil
+ t_amp = nil
frame.edata.properties.each do |prop|
p prop
case
@@ -512,16 +519,26 @@
#0x0C:1000kWh
#0x0D:10000kWh
unit = UNIT_KW[prop.edt.unpack("C")[0]]
+
+ when prop.epc == 0xe8 && prop.pdc == 4
+ # 符号付き16bitビッグエンディアン2つ分をアンパック
+ r_raw, t_raw = prop.edt.unpack("s>2")
+ r_amp = r_raw / 10.0
+ t_amp = t_raw / 10.0
end
end
- puts "%.1f kWh / %d W" % [energy * unit, watts]
+ puts "%.1f kWh / %d W (R: %.1f, T: %.1f)" % [energy * unit, watts, r_amp, t_amp]
body = ""
body << "# TYPE consumed_power GAUGE\n"
body << "consumed_power #{watts}\n"
body << "# TYPE consumed_energy COUNTER\n"
body << "consumed_energy #{energy * unit}\n"
+ body << "# TYPE consumed_current_r GAUGE\n"
+ body << "consumed_current_r #{r_amp}\n"
+ body << "# TYPE consumed_current_t GAUGE\n"
+ body << "consumed_current_t #{t_amp}\n"
require 'net/https'