• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

TLSR8251 + LCD + термометр = LYWSD03MMC XIAOMI Bluetooth термометр

udavst

New member
Сейчас залез в BTHome, и о чудо - датчик открытия тоже там, и работает даже. У почему его раньше небыло, не знаю, перенастраивал все реакции с бинарного датчика на счётчик, когда перешёл с Passive BLE Monitor на BTHome. Вобщем двойная польза )
 

udavst

New member
Я вроде где-то читал, что с home assistant можно передать что-то на экран термометра, или мне приснилось? Поиском не ищется (
 

pvvx

Активный участник сообщества
Сейчас залез в BTHome, и о чудо - датчик открытия тоже там, и работает даже. У почему его раньше небыло, не знаю, перенастраивал все реакции с бинарного датчика на счётчик, когда перешёл с Passive BLE Monitor на BTHome. Вобщем двойная польза )
Пока HA не примет новое событие или значение - оно не будет отображаться в списке свойств датчика/устройтсва.
 

pvvx

Активный участник сообщества
Я вроде где-то читал, что с home assistant можно передать что-то на экран термометра, или мне приснилось? Поиском не ищется (
Нужна какая-то интеграция или сами пишите...
Передача на LCD во все термометры с алт.прошивкой существует с первой версии. И два варианта - в виде передачи отображения чисел с доп.значками или в битовой карте сегментов LCD/E-ink. Команды вывода на LCD/E-ink передаются при соединении...
Использование буфера с битами сегментов LCD/E-ink не универсально - на разных термометрах стоят разные LCD/E-ink и длина буфера у каждого разная.
А в формате "чисел с доп.значками" - подходит ко всем вариантам.
 

udavst

New member
Нужна какая-то интеграция или сами пишите...
Передача на LCD во все термометры с алт.прошивкой существует с первой версии.
да нет, сам не умею. конечно хотелось бы интеграцию, например на термометр у двери вывести погоду с уличного.

pS только в ha очень нестабильный bluetooth, поменял 2 компа, и 3 сетевухи с bt и 2 стика, то работает, то нет, сейчас работает, но плохо ловит. всё хорошо работает через esp-home bt proxy, но он в одну сторону, так что затея с передачей из ha туманна
 

udavst

New member
А, нашёл пример, на сайте esphome, там homeasistant и не обязателен, esp32 примет с уличного и передаст на экран другого.
Только там везде протокол pvvx, а у меня на термометрах BTHome, ну надёюсь заработает. Сейчас буду пробовать.
 

udavst

New member
Добавил код, теперь и прокси перестал работать, и показания не передаются на второй термометр, и в логе ничего.
Наверное вместе с ble proxy не будет (
substitutions:
name: esp32-ble-proxy-73fc78
packages:
esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic.yaml@main
esphome:
name: ${name}
name_add_mac_suffix: false
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: ${name}
password: !secret wifi_password
# Enable Home Assistant API
api:
logger:
time:
- platform: homeassistant
id: homeassistant_time
esp32_ble_tracker:
scan_parameters:
active: False
interval: 300ms
window: 300ms

ble_client:
- mac_address: "A4:C1:38:5F:B3:FB"
id: BLE_Kuhna_display
sensor:
- platform: pvvx_mithermometer
mac_address: "A4:C1:38:6D:C2:39"
temperature:
name: "PVVX Temperature"
id: ulica_temperature
humidity:
name: "PVVX Humidity"
id: ulica_humidity
battery_level:
name: "PVVX Battery-Level"
battery_voltage:
name: "PVVX Battery-Voltage"

display:
- platform: pvvx_mithermometer
ble_client_id: BLE_Kuhna_display
update_interval: 10min
validity_period: 15min
time_id: homeassistant_time
lambda: |-
double temp = id(ulica_temperature).state;
double humidity = id(ulica_humidity).state;
it.print_bignum(temp);
it.print_unit(pvvx_mithermometer::UNIT_DEG_C);
it.print_smallnum(humidity);

bluetooth_proxy:
 

udavst

New member
Получилось передавать из HA через ESPHome, но не совсем, не понимаю, как преобразовать, чтобы она правильно отправилась на термометр.
sensor:
- platform: homeassistant
id: hatemp
entity_id: sensor.ble_ulica_temperature
- platform: homeassistant
id: hahumidity
entity_id: sensor.ble_ulica_humidity

display:
- platform: pvvx_mithermometer
update_interval: 10min
validity_period: 15min
ble_client_id: pvvx_ble_display
lambda: |-
double temp = id(hatemp).state;
double hum = id(hahumidity).state;
it.print_bignum(temp);
it.print_unit(pvvx_mithermometer::UNIT_DEG_C);
it.print_smallnum(hum);


[22:26:01][D][homeassistant.sensor:024]: 'sensor.ble_ulica_temperature': Got state -17.97
[22:26:01][D][sensor:127]: 'hatemp': Sending state -17.97000 with 1 decimals of accuracy
[22:26:01][D][homeassistant.sensor:024]: 'sensor.ble_ulica_humidity': Got state 81.97
[22:26:01][D][sensor:127]: 'hahumidity': Sending state 81.97000 with 1 decimals of accuracy
[22:26:21][esp32_ble_client:154]: [0] [a4:c1:38:5f:b3:fb] Service UUID: 0x1800
[22:26:21][esp32_ble_client:156]: [0] [a4:c1:38:5f:b3:fb] start_handle: 0x1 end_handle: 0x7
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A00, handle 0x3, properties 0x12
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A01, handle 0x5, properties 0x2
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A04, handle 0x7, properties 0x2
[22:26:21][esp32_ble_client:154]: [0] [a4:c1:38:5f:b3:fb] Service UUID: 0x1801
[22:26:21][esp32_ble_client:156]: [0] [a4:c1:38:5f:b3:fb] start_handle: 0x8 end_handle: 0xb
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A05, handle 0xa, properties 0x20
[22:26:21][esp32_ble_client:154]: [0] [a4:c1:38:5f:b3:fb] Service UUID: 0x180A
[22:26:21][esp32_ble_client:156]: [0] [a4:c1:38:5f:b3:fb] start_handle: 0xc end_handle: 0x18
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A24, handle 0xe, properties 0x2
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A25, handle 0x10, properties 0x2
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A26, handle 0x12, properties 0x2
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A27, handle 0x14, properties 0x2
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A29, handle 0x18, properties 0x2
[22:26:21][esp32_ble_client:154]: [0] [a4:c1:38:5f:b3:fb] Service UUID: 0x180F
[22:26:21][esp32_ble_client:156]: [0] [a4:c1:38:5f:b3:fb] start_handle: 0x19 end_handle: 0x1c
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A19, handle 0x1b, properties 0x12
[22:26:21][esp32_ble_client:154]: [0] [a4:c1:38:5f:b3:fb] Service UUID: 0x181A
[22:26:21][esp32_ble_client:156]: [0] [a4:c1:38:5f:b3:fb] start_handle: 0x1d end_handle: 0x26
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A1F, handle 0x1f, properties 0x12
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A6E, handle 0x22, properties 0x12
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x2A6F, handle 0x25, properties 0x12
[22:26:21][esp32_ble_client:154]: [0] [a4:c1:38:5f:b3:fb] Service UUID: 00010203-0405-0607-0809-0A0B0C0D1912
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 00010203-0405-0607-0809-0A0B0C0D2B12, handle 0x29, properties 0x6
[22:26:21][esp32_ble_client:154]: [0] [a4:c1:38:5f:b3:fb] Service UUID: 0x1F10
[22:26:21][esp32_ble_client:156]: [0] [a4:c1:38:5f:b3:fb] start_handle: 0x2b end_handle: 0x2e
[22:26:21][esp32_ble_client:059]: [0] [a4:c1:38:5f:b3:fb] characteristic 0x1F1F, handle 0x2d, properties 0x16
[22:26:21][esp32_ble_client:154]: [0] [a4:c1:38:5f:b3:fb] Service UUID: 0xFE95
[22:26:21][esp32_ble_client:156]: [0] [a4:c1:38:5f:b3:fb] start_handle: 0x2f end_handle: 0x30
[22:26:21][D][display.pvvx_mithermometer:078]: [a4:c1:38:5f:b3:fb] Send to display: bignum 65535, smallnum: 65535, cfg: 0xa0, validity period: 900.
[22:26:21][D][esp32_ble_tracker:264]: Starting scan...



К стати работает в режиме BTHome тоже.
 

udavst

New member
Прям не термометр а песня с Вашей прошивкой, мечта )
И сенсор, и дисплей, и управление, и датчик (ну только управлять на 'reset' нельзя из HA, но и не надо).
А показаниям обязательно меняться с внутренней температуры на ту, что прислали и обратно? Можно какой-то настройкой это остановить, и внутреннюю не выводить?
 

pvvx

Активный участник сообщества
Прям не термометр а песня с Вашей прошивкой, мечта )
И сенсор, и дисплей, и управление, и датчик (ну только управлять на 'reset' нельзя из HA, но и не надо).
А показаниям обязательно меняться с внутренней температуры на ту, что прислали и обратно? Можно какой-то настройкой это остановить, и внутреннюю не выводить?
Только если работать с буфером экрана. При передаче буфера экрана он выводится всё время соединения.
Для большинства Xiaomi LYWSD03MMC биты буфера описаны тут github.com/pvvx/ATC_MiThermometer/blob/master/BoardPinout/Mi_LCD_Segments.jpeg
Для B1.9 версии биты в байтах обратные.
Команда get/set lcd buf: 0x60. Set { 0x60, байты буфера }
 

pvvx

Активный участник сообщества
Передача команды 0x60 без данных буфера отключит вывод. Длина данных может быть любой - заменит только те, что лезут в реальный буфер экрана.
 

pvvx

Активный участник сообщества
А показаниям обязательно меняться с внутренней температуры на ту, что прислали и обратно?
Это был термометр и это главная функция. По этому другого не предусматривал - есть исходные тексты чтобы собрать спец. версию...
 

udavst

New member
И почему-то часто
[01:49:03][D][display.pvvx_mithermometer:063]: [a4:c1:38:5f:b3:fb] BLE client not enabled. Init connection.
[01:49:22][D][esp32_ble_client:039]: [0] [a4:c1:38:5f:b3:fb] Found device
[01:49:22][esp32_ble_client:054]: [0] [a4:c1:38:5f:b3:fb] Attempting BLE connection
[01:49:52][W][esp32_ble_client:106]: [0] [a4:c1:38:5f:b3:fb] Connection failed, status=133
... и ждём следующие 15 минут...
то нормально, то так. Датчик в прямой видимости, чем он занят - не понятно.


Это был термометр и это главная функция. По этому другого не предусматривал - есть исходные тексты чтобы собрать спец. версию... .
Ну это не реально )
 

udavst

New member
Я думал время обновления экрана в 0 поставить, тогда изнутри данные не полезут, а оно не ставится. Значит нет (.
Это был термометр и это главная функция.
Теперь он может заменить собой железяку на стене, которая просто погоду на улице отображала, и заменил, а ещё это датчик открытия двери, а в ванной вентилятор сам включает, это стало must have устройство благодаря Вам. Думаю ещё датчик протечки сделать, на полевике, с питанием от его же батарейки, закрывается уверенно, пока не протечёт и батарея в норме
 

pvvx

Активный участник сообщества
то нормально, то так. Датчик в прямой видимости, чем он занят - не понятно.
Или батарея подсажена (в LYWSD03MMC Xiaomi пожадничала рекомендованными конденсаторами в питании и не впаяли на плату - там пустые позиции)
или это ESP. В ESP BLE тормоз и не успевает ничего, а время ожидания ответов в BLE составляют несколько мкс. Из-за ESP у термометров садятся батарейки, т.к. им приходится неоднократно дублировать пакеты передачи и длительно ожидать приема с работающим RF и CPU вместо сна.
Прием 50 замеров на ESP (ток у термометра):
1670102685471.png
Наблюдаем гормадное кол-во дублей передач и сплошное ожидание ответов от ESP. Термометру "спать" некогда

Прием того-же на типовой адаптер BT или чип BLE:
1670102737404.png
шкала mA/ms
 

pvvx

Активный участник сообщества
Вместо 150 us ESP требует от термометра выжирать батарейку 12 ms. Соотношение почти 1 к 10. Т.е. при связи с ESP в 10 раз больше сажаются батарейки у всех автономных устройств BLE. И плюс нестабильности.
На git все вопросы с "кривостями" в основном от пользователей применяющих ESP.
Или думаете я просто так "злой" на ESP?
 

udavst

New member
1670103486919.png
Да, вот так было, до экспирементов вывода на экран, и в конце - когда BT с ESP подключается. Попробую средствами ESPHome временем ожидания поиграться. Я бы свисток прилепил к компу на удлиннителе, он бы может и ловил, но без esphome я и показания не передам на термомтер, средствами HA невозможно же.

>>>Или думаете я просто так "злой" на ESP?
Не сомневаюсь, но nrf сложнее.
 

udavst

New member
-del- (ну что за форум, в чат превращает любую беседу, даже не удалить)
 

pvvx

Активный участник сообщества
Ещё есть толпа бед с адаптерами USB-BT в Windows - некоторые не закрывают соединение, а бросают связь на произвол. В итоге термометр или любое другое устройство BLE начинает истошно передавать пакет запроса о связи и ожидать подтверждения. И это происходит установленное время таймаута соединения. И это время обычно исчисляется в секундах. Т.е. это составляет достаточно большой расход энергии CR2032.
А некоторые адаптеры успешно завершают соединение послав команду окончания соединения.
Что уж говорить о ESP? - это худший из всех случай и не рекомендую использовать для BLE пока не исправят. Но этого не приходится ожидать даже в новых чипах ESP...
 
Сверху Снизу