ネトサバ日記

インフラに関する投稿をしていきます

Home AssistantとNature Remo E liteで電力使用量可視化

Home Assistantでやったことをアウトプットしたいけど、Qiitaだと何となく合わない気がしたので久々にこちらで投稿。

ホームオートメーションで使われるHome Asssitantには電力を管理するための画面があります。
そこで自宅電力を可視化したいと思い、n番煎じですが実装公開。

準備

Nature Remo E lite購入

Wi-SUNを使ってスマートメータからデータを取ってくる機能を備えたIoT機器。
もともと、Nature Remoという赤外線リモコンのIoT化ができる製品を販売しているメーカーが2020年頃に販売しています。

API関連が揃っていてとても使いやすく、簡単に最新の電力データが取得できます。

Nature Remo ENature Remo E liteがあり、違いはスマートメータ以外のHEMS機器も使えるかどうか。
スマートメータ以外管理する気がなかったので、Nature Remo E liteを購入しました。

Home Asssitantを導入しなくても、スマホから過去データ含めて電力使用量確認できるので電力可視化したい人にはおすすめです!

他にWi-SUNが使えてAPIも揃っているIoT機器を探しましたが現状これ一択でした。

Nature Remo E lite製品ページ nature.global

Nature Remo Cloud API developer.nature.global

Nature Remo E lite設定

公式サイトであったり、ほかの方が既に説明しているので割愛するが必要作業としては以下の通り。

  • 自宅電力メータをスマートメータに交換依頼
  • Bルート開通依頼を行い、BルートIDとパスワードをもらう
  • 上記ID、パスワードでNature Remo E liteからスマートメータに接続
  • Nature RemoのCloud API利用のためのユーザ作成、APIトークン発行

Home Assistant設定

こちらも詳細は割愛するが必要作業としては以下の通り。

  • Home Assistantインストール(HAOS版、Docker版どちらでもOK)
  • AppDamonインストール

AppDaemonについて

AppDaemonは、Home Assistant向けに開発されたコンテナ上のPythonサンドボックスを複数作ることができるアドオンです。
Home AssitantともAPIで連携でき、データの登録やイベントの受け取りができます。

起動時にPythonライブラリ含めてコンテナ環境のセッティングもしてくれるので、 Home Assistantのスクリプト機能で対応できない場合はこちらを利用するといいかもです。

設定

データ取得の流れ

データはNature RemoのAPIに登録されているのでデータ取得は以下の通り。
全てHome Assistantサーバ上のAppDaemonで行います。

  1. 定期的にNature RemoのAPIから電力データを取得
  2. 取得したデータをもとに瞬時値と積算値を計算
  3. Home Assistantにデータ登録

データ取得の流れ

実装

AppDaemon(GUI)

APIへのアクセスのため、requestsモジュールを使います。

設定 > アドオン > AppDaemon > 設定 よりpythonパッケージにrequestsを追加します。

今回は、関係ないですがARM環境で利用できないライブラリは ARM用にビルドされたものを自力で探して、init commandsで無理やり定義することもできます。

appdaemon設定

AppDaemon(ソースコード)

apps.yaml

AppDaemonで使用するアプリケーションの定義ファイル。

シークレット情報は、Home Assistant側のsecrets.yamlに記載して参照しています。

natureremo_appliance_idは、事前にAPIを確認して機器のIDを控えておく必要があります。

natureremo.py

処理を行うPythonソースコード

run_everyで起動後30秒後から1分毎にデータを取得するようにスケジュールしている。

get_smartmeter_infoでは、APIからデータ取得したものを積算値にするための計算を行っています。
詳細はBルート ガイドラインを参照。

Home Asssitant(GUI)

設定 > ダッシュボード > エネルギー > グリッド消費 に先ほどAppDaemonで登録したsensor.smartmeter_energyを設定する。

グリッド消費

設定すると、逐次データ蓄積されてHome Assistantのエネルギーダッシュボードでは以下の画像のように表示される。

結果

使ってみた感想

Nature Remo連携することで簡単に電力データを取得できるのですごく簡単に実装できました。

3ヶ月ほど使っていますが暑くなってくるにつれ、クーラーや機器のファン上昇で電力消費が上がっているのが可視化でき、自己嫌悪することができます。

電力消費量が上がったときになにかアクションさせることもできるので何か面白そうなことを考えついたら試してみたいと思います。

取得間隔も、1分に1回なので電子レンジ使ったときのピークも確認することができるのでそちらもなにかに活用したいなと。

瞬時値

NATでの拠点間VPN

夏休みで地元に帰ったので拠点間のVPNをルーティングプロトコルに対応するという自由研究をしてきました。

現状

  • 拠点間を192.168.x.xを分割したIPsecサブネット方式で接続
  • グローバルアドレスを持つルータを終点とせず、その配下のプライベートアドレスを持つルータ同士を終点としている
  • グローバルアドレスは非固定なのでDDNSでのピア指定

変更点

  • 192.168.x.x以外にも172.16.x.xもトンネリングさせる
  • OSPFに対応
IPsecでルーティングプロトコルに対応させるためには、VTIもしくはGREによるトンネル接続が必要になる。

今回は、ファイアーウォールでの環境制約によってGREが使えないのでVTIで設定

設定は以下の通り


interfaces {
vti vti0 {
address 172.31.x.x/30 ← OSPF用アドレス
}
}
protocols {
ospf {
area 0 {
network 192.168.x.0/24
network 172.31.x.0/30
}
}
}
vpn {
ipsec {
esp-group ESP {
mode tunnel
proposal 10 {
encryption aes128
hash sha1
}
}
ike-group IKE {
key-exchange ikev1
mode main
proposal 10 {
encryption aes128
hash sha1
}
}
ipsec-interfaces {
interface eth0 ← ゲートウェイ向きのインターフェイス
}
nat-networks {
allowed-network 192.168.y.0/24 { ← 対向ネットワーク
}
}
nat-traversal enable
site-to-site {
peer Y.Y.Y.Y { ← 対向のグローバルアドレス
authentication {
id vpnA ← 自局のID
mode rsa
remote-id vpnB ← 対向のID
rsa-key-name vpnA
}
connection-type initiate
default-esp-group ESP
ike-group IKE
local-address 192.168.x.1 ← 自局プライベートアドレス
vti {
bind vti0
}
}
}
}
rsa-keys {
rsa-key-name vpnA {
rsa-key ****************
}
}
}

NAT内部の終端なのでここで書いたとおり共通鍵認証は使えない
こうすることによって勝手にOSPFによってルーティングが更新される

今回、VTIを使った際にpeerをホスト名で指定しようとしたが設定できなかった。
今は、このままで接続できるがそのうち接続できなくなる可能性がある。
なんで、宿題でIPv6で接続できるようにしたい。

EdgeRouterでのVLAN間ルーティング

ハマった備忘


★事前知識

1. EdgeRouter(vyos)では複数のポートをあわせて一つのスイッチと見立てることができる
そのときの管理IPアドレスは通常
switch switch0 {
    address x.x.x.x/xx
}
と書く。

2. EdgeRouterのSwitch上でVLANを使う場合、
vid 設定下に管理IPアドレスを置いて
switch-portに使いたいVLANを列挙することになる。

★問題点

もともと1.で書いていた設定で新しくVLANを追加するために2.を追加しようとした場合
それぞれのVLAN間同士のホストが通信できなくなる。

★解決

1.で書いていた設定をVLANとして定義かつpvidとして設定する。
pvidはいわゆるネイティブVLANでタグつけされていないパケットを受信したらpvidで設定されているVLANとして認識される。


ということで
もともと

switch switch0 {
mtu 1500
address x.x.x.x/xx
description "LAN_A"
switch-port {
interface eth1 {
vlan {
vid 2
}
}
interface eth2 {
}
interface eth3 {
}
interface eth4 {
}
vlan-aware enable
}

vif 2 {
address y.y.y.y/yy
description "LAN_B"
}
}

だったものを

switch switch0 {
mtu 1500
switch-port {
interface eth1 {
vlan {
pvid 1
vid 2
}
}
interface eth2 {
vlan {
pvid 1
}
}
interface eth3 {
vlan {
pvid 1
}
}
interface eth4 {
vlan {
pvid 1
}
}
vlan-aware enable
}
vif 1 {
address x.x.x.x/xx
description "LAN_A"
}
vif 2 {
address y.y.y.y/yy
description "LAN_B"
}
}


ま、もともとSwitch使うときはpvid使う癖持てってことで

あと気をつけるのは設定変更したあとは、今までswtich0だったのがswitch0.xxってなるから
DNSフォワーディングの設定などを再度見直す必要がある
DHCPも再リースができなくなっていたので
clear dhcp leases
する

MariaDBで弱いパスワードを使う方法

MariaDBを使っていてテスト用とかでかんたんなパスワードを使いたいけど
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
が出てパスワードが作れないときの対処法

これは、MariaDBで弱いパスワードが使えないようにデフォルトおせっかいをしてくれているため

以前であれば、https://ameblo.jp/kz999sg/entry-12172778472.html
が書かれているように
mysqlでポリシーを決めることができたのだが
MariaDB 10.1.2からパスワードチェックをすべてcracklibにまかせることになっている
そのcracklibのパスワードチェックが融通がきかない

パスワードが通るかは以下のコマンドで
echo "test" | cracklib-check

なので、cracklibにパスワードチェックしないようにする必要がある。

環境

Fedora release 25
MariaDB 10.1.24

現象

mysqlにログインして以下のようにパスワードつきユーザを作成したときに
ERROR 1819が出る。

MariaDB [(none)]> CREATE USER hoge IDENTIFIED BY "pass";

対処法

  1. /etc/my.cnf.d/mariadb-server.cnfにある[mysqld]セクションに
    cracklib-password-check=OFF
    を追加する
  2. systemctl restart mariadb
    mariadbを再起動

これで、パスワードチェックしなくなるのでどんなパスワードでも設定できるようになる。
おそらくcracklibのパスワードチェックリストも
cracklib_password_check_dictionary
で変えることができるのでパスワードポリシーも変更できるのかもしれないので
本番環境触るようなときがあればまた調べる必要があるかも...


参考


EdgeRouter XでNATしたLAN同士を拠点間VPNさせる

東京に来てから大阪のサーバに触れてなくていち早くVPNを繋がないとと思いながら2ヶ月ぐらい立ってやっとIPsecについてわかってきたました。
もしかしたら技術的に間違ってることを書いてるかもしれないので自己責任で

前提

  • NATされたLAN同士をIPsec拠点間接続する
  • どちらも固定アドレスではないのでDDNSを使う
  • HGWで外部アドレスをNAT変換
  • HGW配下のEdgeRouter同士をVPN接続
  • GREフレッツ光で借りているHGWがポート開放対応していないのでなしで
    (PPTP用のポート開けば勝手にGREも開くらしいけどそれはセキュリティ的にどうなの?ってことでNG)

EdgeRouter

今回は以下のEdgeRouter XをA,Bネットワークに一つずつ設置


Version: v1.9.1
Build ID: 4939092
Build on: 12/14/16 07:02
Copyright: 2012-2016 Ubiquiti Networks, Inc.
HW model: EdgeRouter X 5-Port
HW S/N: xxxxxxxxxxxxx
Uptime: 21:22:22 up 11:43, 1 user, load average: 1.05, 1.06, 1.09


方法

IPsecでNATを介して通信するのはどうやら苦手らしくて非固定アドレスなのも苦手らしい
詳細については、http://www.infraexpert.com/study/ipsec14.htmlで特に言及されてるようにポートフォワーディングでレイヤ4のESPやAHにはUDPのようにポートが無いからNAPT変換できないため
なのでNATトラバーサルによって解決します

IPsecを使う上で、まずIKEでIPsecに使うトンネルを作成する
そのIKEを使う上でもフェーズが2つあって、フェーズ1の接続はじめで大体は、暗号化されていない状態でIDを交換する
このIDというのが認証素材によって変わるらしく、公開鍵認証とPKI認証ではその素材鍵によってのみ認証する
しかし、共通鍵認証ではお互いのIPアドレスを鍵としているみたいです
なので、NAT変換していく中でIPアドレスが変わってきているため認証できないみたいです
IKEアグレッシブモードにするとID認証完了するまでに次のフェーズに行くのでセキュリティ低下するがおそらくは共通鍵認証でもいけるはず
ただ、EdgeRouterでは、共通鍵認証でアグレッシブモードは許可してないみたいなのでできませんでした

設定


interfaces {
ethernet eth0 {
address 192.168.0.2/24
duplex auto
speed auto
}

protocols {
static {
route 192.168.128.0/17 {
next-hop 192.168.128.2 {
}
}
}
}

vpn {
ipsec {
auto-firewall-nat-exclude disable
esp-group ESP {
lifetime 3600
mode tunnel
proposal 10 {
encryption aes128
hash sha1
}
}
ike-group IKE {
key-exchange ikev1
lifetime 28800
mode main
proposal 10 {
dh-group 2
encryption aes128
hash sha1
}
}
ipsec-interfaces {
interface eth0
}
nat-networks {
allowed-network 192.168.128.0/17 {
}
}
nat-traversal enable
site-to-site {
peer "BネットワークFQDN" {
authentication {
id A
mode rsa
remote-id B
rsa-key-name B.pub
}
connection-type initiate
default-esp-group ESP
ike-group IKE
local-address any
tunnel 0 {
esp-group ESP
local {
prefix 192.168.128.0/17
}
remote {
prefix 192.168.0.0/17
}
}
}
}
}

とりあえずこれで最低限の拠点間接続ができる
もしダイナミックルーティングが必要ならVTIとか適用するばいいんだろうけど今のところはこれで...
というかもしかしたらVTIだとトンネルIPアドレスがIDになるならそれでもいいのかも

pythonでBLE

自宅車が今駐車場にあるかどうかをBLEタグを使って検知しようと思う
とりあえず今回はRaspberry Piに BLE環境を整えるまでを

PythonでBLE使うためには、Boost Pythonとglibが必要みたいでそれがややこしかった

apt installパッケージ


pip installするパッケージ
  • pybluez
  • pybluez[ble]
pybluez[ble]はpybluezのエクステンション

[{'end': 7, 'start': 1, 'uuid': '00001800-0000-1000-8000-00805f9b34fb'},
 {'end': 10, 'start': 8, 'uuid': '00001803-0000-1000-8000-00805f9b34fb'},
 {'end': 13, 'start': 11, 'uuid': '00001802-0000-1000-8000-00805f9b34fb'},
 {'end': 16, 'start': 14, 'uuid': '00001804-0000-1000-8000-00805f9b34fb'},
 {'end': 65535, 'start': 17, 'uuid': '0000180f-0000-1000-8000-00805f9b34fb'}]
[{'handle': 2,
  'properties': 2,
  'uuid': '00002a00-0000-1000-8000-00805f9b34fb',
  'value_handle': 3},
 {'handle': 4,
  'properties': 2,
  'uuid': '00002a01-0000-1000-8000-00805f9b34fb',
  'value_handle': 5},
 {'handle': 6,
  'properties': 2,
  'uuid': '00002a04-0000-1000-8000-00805f9b34fb',
  'value_handle': 7},
 {'handle': 9,
  'properties': 10,
  'uuid': '00002a06-0000-1000-8000-00805f9b34fb',
  'value_handle': 10},
 {'handle': 12,
  'properties': 4,
  'uuid': '00002a06-0000-1000-8000-00805f9b34fb',
  'value_handle': 13},
 {'handle': 15,
  'properties': 2,
  'uuid': '00002a07-0000-1000-8000-00805f9b34fb',
  'value_handle': 16},
 {'handle': 18,
  'properties': 2,
  'uuid': '00002a19-0000-1000-8000-00805f9b34fb',
  'value_handle': 19},
 {'handle': 20,
  'properties': 2,
  'uuid': '00002a1a-0000-1000-8000-00805f9b34fb',
  'value_handle': 21},
 {'handle': 22,
  'properties': 18,
  'uuid': '00002a1b-0000-1000-8000-00805f9b34fb',
  'value_handle': 23},
 {'handle': 25,
  'properties': 2,
  'uuid': '00002a3a-0000-1000-8000-00805f9b34fb',
  'value_handle': 26}]

00002a00-0000-1000-8000-00805f9b34fb ['BSBT4PT02BK']
00002a01-0000-1000-8000-00805f9b34fb ['\x00\x02']
00002a04-0000-1000-8000-00805f9b34fb ['\n\x00\n\x00\xc0\x00\xe8\x03']
00002a06-0000-1000-8000-00805f9b34fb ['\x00']
00002a06-0000-1000-8000-00805f9b34fb ['\x00']
00002a07-0000-1000-8000-00805f9b34fb ['\x04']
00002a19-0000-1000-8000-00805f9b34fb ['R']
00002a1a-0000-1000-8000-00805f9b34fb ['\x9f']
00002a1b-0000-1000-8000-00805f9b34fb ['R\x9f']
00002a3a-0000-1000-8000-00805f9b34fb ['\x02']

NUC6CAYHでESXi6.5インストール

4月から就職で東京に来て新しくサーバを立てねばと思い、3月発売のIntel NUC6CAYHを購入しました。

それで、ESXi6.5インストールしようと思ったが追加ドライバ入れるのに手間取ったので備忘録

NUC6CAYHはNICIntelからRealtek 8168になってるみたいで今まで見たサイトではできませんでした。

ESXI-Customizer-PSを使うのは今までと同じでvibを以下の2つ入れれば対応
下の方の「Direct Download links」からvibファイルをインストールしてvibsディレ樹取りに保存。

ESXi-Customizer-PSの使い方は
ここでだいたい書いてる通り