pdf-icon

Unit VMeter Home Assistant 統合

Unit VMeter はリアルタイムの電圧監視用センサです。内部には 16 ビット ADC コンバータ ADS1115 を搭載し、I2C (0x49) 経由で通信します。

注意
Unit VMeter は単体のセンサプラットフォームであるため、Home Assistant に統合するには Atom 系列、Stamp系列、Stick 系列、Core/Basic 系列などのホストデバイスが別途必要です

ESPHome から ADS1115 の最新設定を入手してください

センサーの設定

ESPHome の設定で I²C コンポーネントを有効にする必要があります:

yaml
1 2 3 4 5
# Example configuration entry for ESP32
i2c:
  sda: GPIOXX
  scl: GPIOXX
  scan: true

ここで指定する GPIO ピンは使用するホストデバイスによって異なります。例えば Atom Lite をホストとする場合:

yaml
1 2 3 4
# I2C Bus on Grove Port (HY2.0-4P)
i2c:
  sda: GPIO26
  scl: GPIO32

Unit VMeter の設定例

  • まず基本コンポーネント ADS1115 を設定します
yaml
1 2 3 4 5 6 7 8 9 10 11
ads1115:
  - address: 0x49

sensor:
  - platform: ads1115
    multiplexer: "A0_A1"
    gain: 1.024
    sample_rate: 128
    name: "Unit VMeter A0_A1 Ref"
    id: diff
    update_interval: 10s
ヒント
Unit VMeter は AIN0AIN1 のチャネルのみを使用するため、multiplexer は最大で 3 つのオプション("A0_A1""A0_GND""A1_GND")が使用可能です。電圧測定では A0_A1 のみが使用されます。
  • EEPROM からキャリブレーションパラメータを読み取り、Template センサーを用いてカスタムデータを作成します
yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
i2c_device:
  id: eeprom
  address: 0x53

sensor:
  # Previous ads1115 declarations
  ...
  - platform: template
    name: "Input Voltage"
    id: input_volt
    unit_of_measurement: "V"
    icon: "mdi:flash"
    accuracy_decimals: 2
    update_interval: 10s
    lambda: |-

      float d = id(diff).state;

      if (isnan(d)) return NAN;

      const float PRESSURE_COEFF = 0.015918958f;

      // Remember to change the 'EEPROM_REG' if you changed the 'gain'
      const uint8_t EEPROM_REG = 0xE8;

      uint8_t calib[8];
      uint16_t hope, actual;

      // Read EEPROM
      if ( id(eeprom).read_register(EEPROM_REG, calib, 8) != i2c::ERROR_OK ) {
        ESP_LOGD("vmeter.sensor", "Failed to read from EEPROM..");
        return NAN;
      }

      uint8_t xor_result = 0x00;

      for (uint8_t i = 0; i < 5; i++) {
          xor_result ^= calib[i];
      }

      if (xor_result != calib[5]) {
          return NAN;
      }

      hope   = (calib[1] << 8) | calib[2];
      actual = (calib[3] << 8) | calib[4];

      float calibration_ratio = (float)hope / actual;

      ESP_LOGD("vmeter.sensor", "Factory calibration factor: %f", calibration_ratio);
      
      float vin = - d / PRESSURE_COEFF;
      vin = vin * calibration_ratio;

      return vin;

EEPROM を読み取る際には、ADS1115 の gain 値に応じて、lambda 内の EEPROM_REG 読み出しアドレスを変更する必要があります:

c++
1 2 3 4
// In lambda expression
// remember to change the 'EEPROM_REG' if you changed the 'gain'
// for an example, when 'gain' is 1.024
const uint8_t EEPROM_REG = 0xE8;
ADS1115 Gain EEPROM Data Register Max Input Voltage (theory)
6.144 0xD0 -
4.096 0xD8 -
2.048 0xE0 -
1.024 0xE8 64 V
0.512 0xF0 32 V
0.256 0xF8 16 V

推奨される gain 値は 0.256, 0.512 および 1.024 です。16V 以下の電圧では分解能が 1mV、16V 以上では 7.9mV になります。測定対象の電圧に応じて適切な gain 値と EEPROM から読み出すキャリブレーションパラメータを選択してください。測定精度のため、**AIN0 または AIN1 のいずれか一方のみを測定してください**。両方を同時に接続しないでください。

警告
製品の設計上の最適測定範囲は ±36V です。この範囲外の電圧を入力しないでください。EEPROM (0x53) には出荷時の校正パラメータが保存されているため、EEPROM への書き込みは行わないでください。校正データが上書きされると測定結果に影響を与える可能性があります。

Home Assistant へのセンサー追加

ダッシュボードに追加すると、Home Assistant でセンサーデータを確認できます

On This Page