#navi RIGHT:&rsslink(../); #boxdate * SwitchBot 温湿度計を ESP32 でモニタリング [#hefa2313] RIGHT:&tag(SwitchBot,Meter,温湿度計,HomeAssistant,ESP32,ESPHome,BLE); [[SwitchBot の温湿度計:https://www.switchbot.jp/meter]]は、リーズナブルで家庭で使うには問題のない精度があるので、なかなか便利です。 この温湿度計は、公式の [[API (Meter BLE open API):https://github.com/OpenWonderLabs/python-host/wiki/Meter-BLE-open-API]] が公開されていて、BLE Advertisement パケットをリッスンすることで、温湿度データを取得できます。 これを、ESP32 を使い HomeAssistant で利用できるようにしました。ESP32 のファームには ESPHome を使用しています。 &ref(210317-224349.png,mw:480,mh:360);&ref(210317-224648.png,mw:480,mh:360); ** ESPHome 用 yaml の該当部分の抜粋 [#xdf548e2] #code(yaml){{ substitutions: devicename: switchbot_meter sensor: - platform: template name: "$devicename Humidity" id: humidity0 unit_of_measurement: '%' accuracy_decimals: 0 icon: "mdi:water-percent" - platform: template name: "$devicename Temperature" id: temperature0 unit_of_measurement: '°C' accuracy_decimals: 1 icon: "mdi:thermometer" - platform: template name: "$devicename BT RSSI" id: rssi0 unit_of_measurement: 'dB' accuracy_decimals: 0 icon: "mdi:bluetooth" - platform: template name: "$devicename Battery" id: battery0 unit_of_measurement: '%' accuracy_decimals: 0 icon: "mdi:battery" esp32_ble_tracker: scan_parameters: duration: 60s on_ble_advertise: - mac_address: f4:42:fa:b4:72:2a then: - lambda: |- for (auto data : x.get_service_datas()) { if(data.data.size() == 6) { float temperature = (float)(data.data[4] & 0b01111111) + ((float)(data.data[3] & 0b00001111) / 10); if (!(data.data[4] & 0b10000000)) { temperature = -temperature; } int8_t humidity= data.data[5] & 0b01111111; int8_t battery = data.data[2] & 0b01111111; int8_t rssi=x.get_rssi(); id(humidity0).publish_state(humidity); id(temperature0).publish_state(temperature); id(rssi0).publish_state(rssi); id(battery0).publish_state(battery); } } }} シンプルですね。カスタムコンポーネントを作るまでもないので、lambda を使いました。 RIGHT:&font(90%){&page_comments;}; #navi
(This host) = https://xoops.hypweb.net