• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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...
 
Сверху Снизу