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

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

pvvx

Активный участник сообщества
С Новым Годом, трех двоек!
Поэтому есть вариант бурения на километры вглубь, а не на 70метров с тепловым насосом.
Каждому на участок по Кольской буровой! :)
У большинства уже через пару месяцев межсезонные сдвиги сломают все трубы... :p
 

shadows

New member
Недавно брал ещё USB-BT с али.
Из новых, которых у меня не было ранее - вот эти пашут нормально:
Посмотреть вложение 11200~250 руб
приобрел такой не давно, из коробки не захотел работать в armbian на orangepi zero, пришлось пересобрать ядро до 5.15.11.
Есть 7 термометров расстояние до них не больше 4м, наблюдается такая картина приема с aioblescan
Python:
Temperature info {'mac address': 'holodilnik___', 'time': '01:03:08', 'temperature': 23.4, 'humidity': 61, 'battery': 65, 'battery_volts': 2.788, 'counter': 87, 'rssi': -80}
Temperature info {'mac address': 'spalnya______', 'time': '01:03:09', 'temperature': 23.7, 'humidity': 61, 'battery': 95, 'battery_volts': 3.06, 'counter': 211, 'rssi': -82}
Temperature info {'mac address': 'vanna_200cm_l', 'time': '01:03:10', 'temperature': 29.9, 'humidity': 37, 'battery': 100, 'battery_volts': 3.243, 'counter': 130, 'rssi': -72}
Temperature info {'mac address': 'vanna_200cm_r', 'time': '01:03:10', 'temperature': 28.6, 'humidity': 39, 'battery': 100, 'battery_volts': 3.237, 'counter': 215, 'rssi': -80}
Temperature info {'mac address': 'vanna_200cm_r', 'time': '01:03:13', 'temperature': 28.6, 'humidity': 39, 'battery': 100, 'battery_volts': 3.239, 'counter': 216, 'rssi': -80}
Temperature info {'mac address': 'holodilnik___', 'time': '01:03:13', 'temperature': 23.4, 'humidity': 61, 'battery': 65, 'battery_volts': 2.788, 'counter': 88, 'rssi': -82}
Temperature info {'mac address': 'vanna_200cm_l', 'time': '01:03:15', 'temperature': 29.9, 'humidity': 37, 'battery': 100, 'battery_volts': 3.243, 'counter': 130, 'rssi': -80}
Temperature info {'mac address': 'vanna_150cm__', 'time': '01:03:21', 'temperature': 28.7, 'humidity': 38, 'battery': 100, 'battery_volts': 3.2, 'counter': 111, 'rssi': -80}
Temperature info {'mac address': 'toilet_______', 'time': '01:03:28', 'temperature': 26.5, 'humidity': 61, 'battery': 89, 'battery_volts': 3.006, 'counter': 175, 'rssi': -78}
Temperature info {'mac address': 'toilet_______', 'time': '01:03:30', 'temperature': 26.5, 'humidity': 61, 'battery': 89, 'battery_volts': 3.006, 'counter': 175, 'rssi': -88}
Temperature info {'mac address': 'holodilnik___', 'time': '01:03:31', 'temperature': 23.4, 'humidity': 61, 'battery': 65, 'battery_volts': 2.788, 'counter': 89, 'rssi': -82}
Temperature info {'mac address': 'vanna_200cm_l', 'time': '01:03:32', 'temperature': 29.9, 'humidity': 37, 'battery': 100, 'battery_volts': 3.243, 'counter': 132, 'rssi': -74}
Temperature info {'mac address': 'vanna_200cm_r', 'time': '01:03:33', 'temperature': 28.6, 'humidity': 39, 'battery': 100, 'battery_volts': 3.237, 'counter': 218, 'rssi': -78}
Temperature info {'mac address': 'vanna_200cm_r', 'time': '01:03:35', 'temperature': 28.6, 'humidity': 39, 'battery': 100, 'battery_volts': 3.237, 'counter': 218, 'rssi': -78}
Temperature info {'mac address': 'holodilnik___', 'time': '01:03:36', 'temperature': 23.4, 'humidity': 61, 'battery': 65, 'battery_volts': 2.788, 'counter': 90, 'rssi': -80}
Temperature info {'mac address': 'vanna_150cm__', 'time': '01:03:36', 'temperature': 28.7, 'humidity': 38, 'battery': 100, 'battery_volts': 3.199, 'counter': 113, 'rssi': -80}
Temperature info {'mac address': 'spalnya______', 'time': '01:03:37', 'temperature': 23.7, 'humidity': 61, 'battery': 95, 'battery_volts': 3.059, 'counter': 214, 'rssi': -76}
Temperature info {'mac address': 'vanna_60cm___', 'time': '01:03:37', 'temperature': 32.9, 'humidity': 32, 'battery': 100, 'battery_volts': 3.25, 'counter': 182, 'rssi': -78}
Temperature info {'mac address': 'holodilnik___', 'time': '01:03:38', 'temperature': 23.4, 'humidity': 61, 'battery': 65, 'battery_volts': 2.788, 'counter': 90, 'rssi': -94}
Temperature info {'mac address': 'vanna_150cm__', 'time': '01:03:39', 'temperature': 28.7, 'humidity': 38, 'battery': 100, 'battery_volts': 3.199, 'counter': 113, 'rssi': -78}
Temperature info {'mac address': 'vanna_200cm_l', 'time': '01:03:42', 'temperature': 29.9, 'humidity': 37, 'battery': 100, 'battery_volts': 3.241, 'counter': 133, 'rssi': -78}
Temperature info {'mac address': 'vanna_200cm_r', 'time': '01:03:43', 'temperature': 28.7, 'humidity': 39, 'battery': 100, 'battery_volts': 3.239, 'counter': 219, 'rssi': -78}
Temperature info {'mac address': 'toilet_______', 'time': '01:03:43', 'temperature': 26.5, 'humidity': 61, 'battery': 89, 'battery_volts': 3.007, 'counter': 177, 'rssi': -80}
Temperature info {'mac address': 'vanna_150cm__', 'time': '01:03:44', 'temperature': 28.8, 'humidity': 38, 'battery': 100, 'battery_volts': 3.196, 'counter': 114, 'rssi': -88}
Temperature info {'mac address': 'spalnya______', 'time': '01:03:47', 'temperature': 23.8, 'humidity': 61, 'battery': 95, 'battery_volts': 3.059, 'counter': 215, 'rssi': -76}
Temperature info {'mac address': 'vanna_60cm___', 'time': '01:03:48', 'temperature': 32.9, 'humidity': 32, 'battery': 100, 'battery_volts': 3.25, 'counter': 183, 'rssi': -84}
Temperature info {'mac address': 'vanna_60cm___', 'time': '01:03:50', 'temperature': 32.9, 'humidity': 32, 'battery': 100, 'battery_volts': 3.25, 'counter': 183, 'rssi': -78}
Temperature info {'mac address': 'vanna_200cm_l', 'time': '01:03:55', 'temperature': 29.9, 'humidity': 37, 'battery': 100, 'battery_volts': 3.24, 'counter': 134, 'rssi': -96}
Temperature info {'mac address': 'spalnya______', 'time': '01:04:02', 'temperature': 23.8, 'humidity': 61, 'battery': 95, 'battery_volts': 3.058, 'counter': 216, 'rssi': -78}
Temperature info {'mac address': 'vanna_200cm_l', 'time': '01:04:03', 'temperature': 29.9, 'humidity': 37, 'battery': 100, 'battery_volts': 3.24, 'counter': 135, 'rssi': -78}
Temperature info {'mac address': 'vanna_200cm_l', 'time': '01:04:05', 'temperature': 29.9, 'humidity': 37, 'battery': 100, 'battery_volts': 3.24, 'counter': 135, 'rssi': -78}
Temperature info {'mac address': 'holodilnik___', 'time': '01:04:06', 'temperature': 23.4, 'humidity': 61, 'battery': 65, 'battery_volts': 2.787, 'counter': 93, 'rssi': -96}
Temperature info {'mac address': 'vanna_60cm___', 'time': '01:04:08', 'temperature': 32.9, 'humidity': 32, 'battery': 100, 'battery_volts': 3.251, 'counter': 185, 'rssi': -74}
Temperature info {'mac address': 'holodilnik___', 'time': '01:04:08', 'temperature': 23.4, 'humidity': 61, 'battery': 65, 'battery_volts': 2.787, 'counter': 93, 'rssi': -96}
Temperature info {'mac address': 'vanna_150cm__', 'time': '01:04:12', 'temperature': 28.7, 'humidity': 38, 'battery': 100, 'battery_volts': 3.198, 'counter': 116, 'rssi': -88}
Temperature info {'mac address': 'vanna_150cm__', 'time': '01:04:17', 'temperature': 28.8, 'humidity': 38, 'battery': 100, 'battery_volts': 3.196, 'counter': 117, 'rssi': -88}
Temperature info {'mac address': 'vanna_60cm___', 'time': '01:04:18', 'temperature': 32.9, 'humidity': 32, 'battery': 100, 'battery_volts': 3.252, 'counter': 186, 'rssi': -74}
Temperature info {'mac address': 'vanna_200cm_r', 'time': '01:04:18', 'temperature': 28.7, 'humidity': 39, 'battery': 100, 'battery_volts': 3.239, 'counter': 222, 'rssi': -80}
Temperature info {'mac address': 'vanna_150cm__', 'time': '01:04:19', 'temperature': 28.8, 'humidity': 38, 'battery': 100, 'battery_volts': 3.196, 'counter': 117, 'rssi': -78}
Temperature info {'mac address': 'toilet_______', 'time': '01:04:21', 'temperature': 26.5, 'humidity': 61, 'battery': 89, 'battery_volts': 3.006, 'counter': 180, 'rssi': -88}
Temperature info {'mac address': 'vanna_60cm___', 'time': '01:04:23', 'temperature': 32.9, 'humidity': 32, 'battery': 100, 'battery_volts': 3.252, 'counter': 186, 'rssi': -80}
Temperature info {'mac address': 'toilet_______', 'time': '01:04:26', 'temperature': 26.5, 'humidity': 61, 'battery': 89, 'battery_volts': 3.007, 'counter': 181, 'rssi': -80}
Temperature info {'mac address': 'toilet_______', 'time': '01:04:28', 'temperature': 26.5, 'humidity': 61, 'battery': 89, 'battery_volts': 3.007, 'counter': 181, 'rssi': -80}
на вид многовато вроде как пропусков измерении... или нормально? проблема с драйверами? кривой aioblescan? или надо внешний приемник делать для более стабильного приема?
 

pvvx

Активный участник сообщества
приобрел такой не давно, из коробки не захотел работать в armbian на orangepi zero, пришлось пересобрать ядро до 5.15.11.
Есть 7 термометров расстояние до них не больше 4м, наблюдается такая картина приема с aioblescan
...
на вид многовато вроде как пропусков измерении... или нормально? проблема с драйверами? кривой aioblescan? или надо внешний приемник делать для более стабильного приема?
При настройках по умолчанию термометр Xiaomi LYWSD03MMC меняет передаваемые данные раз в 10 секунд. За эти 10 секунд он передает одинаковые данные 4-ре раза с одинаковым счетчиком 'counter' для уверенного стороннего приема.
CGG1 и прочие, с E-Inc, т.к. эти экраны потребляют значительно больше вопреки уверениям рекламщиков, меняет передаваемые данные реже и реже опрашивает датчик чтобы не менять отображение.
Принимающие программы отбрасывают идентичные данные...
На кол-ве приема сказывается производительность обрабатывающего ПО (скриптов), установок драйвера, качества ПО самого адаптера, т.к. это всё в комплексе может не успевать обрабатывать все принятые данные из радио эфира...
 

pvvx

Активный участник сообщества
Вот тестовый HA c
1641258345200.png
на примерно таком BT5.0 адаптере NanoPi Neo Core2 с мамкой для SSD и т.д.
На вид выпадений нет, но и данные интеграция собирает усредненные за 1 минуту.
1641258326498.png
Плата отслеживает ещё пару десятков других устройств.
Нагрузка:
1641258797361.png
И в таком кол-ве HA пишет на диск (счет с рестарта OS):
1641258956472.png
Ступени - это перезаписи текущей полной базы у него по расписанию. Т.е. несколько Гигабайт в сутки при недавно начатой заново базе...
 

pvvx

Активный участник сообщества
@shadows C ESPHome на разных платках c ESP32 было всё значительно хуже уже при 4-х датчиках и замучался... Но это было пол года назад - может что поправили с BT дровами у ESP32 (распределили обработку на ядра и сделали правильное постоянное сканирование)?
Лучше всего принимает аппаратный сниффер - там выпадений до 7% при окружении к сотне BLE/WiFi/ZigBee устройств...
 

pvvx

Активный участник сообщества
Если тупо взять первую попавшуюся выборку 1 секунды со сниффера nRF825xx в радиоэфире на рекламных каналах в Wireshark, в пригороде, в мастерской, вокруг на сотни метров нет более ничего, а на пол-километре пара домов :)
1641261135236.png
То видим, что рекламки идут в среднем с паузами в 200 us...
 

gorec2005

Member
Заказал 10шт LYWSD03MMC - а они пришли hw ver 2.0 :-( - внешне изменился драйвер ЖК... :-(
готов замучить девайс на предмет подпаивания / прошивке / экспериментов...... подскажите в какую сторону двигаться...
 

Вложения

gorec2005

Member
прошил в термометр прошивку 35a - вроде все работает...
и, интересно - признал другую версию HW
21:53:02: Hardware Revision String: B1.7
21:53:02: Detected custom Firmware
21:53:03: Hardware Version: LYWSD03MMC B1.7, Software Version: 3.5, Sensor: SHT4x
 

pvvx

Активный участник сообщества
прошил в термометр прошивку 35a - вроде все работает...
и, интересно - признал другую версию HW
21:53:02: Hardware Revision String: B1.7
21:53:02: Detected custom Firmware
21:53:03: Hardware Version: LYWSD03MMC B1.7, Software Version: 3.5, Sensor: SHT4x
C HW B2.0 только один вопрос - аппаратного определения что это версия 2.0, а не 1.7.
Запись в flash от оригинальной прошивки строки "B2.0" не устраивает, т.к. в процессе может быть стерта вся flash.
 

gorec2005

Member
C HW B2.0 только один вопрос - аппаратного определения что это версия 2.0, а не 1.7.
не уверен, что после стирания всего flash это будет возможно...
но после перепрошивки - он работает ок, и в дальнейшем определяется уже как 1.7 (подозреваю из-за "sensor SHT4x or ?" - из исходников...)
но, в общем-то пофиг... оно работает нормально! и сенсор посвежее :)
 

pvvx

Активный участник сообщества
не уверен, что после стирания всего flash это будет возможно...
но после перепрошивки - он работает ок, и в дальнейшем определяется уже как 1.7 (подозреваю из-за "sensor SHT4x or ?" - из исходников...)
но, в общем-то пофиг... оно работает нормально! и сенсор посвежее :)
Авто-определение версии строится на вариантах микросхемы датчика и дисплея. Комбинация их вариантов и дает B1.7.
У B1.7 вроде другой вид чипа контроллера дисплея, а у 2.0 видимо кристалл чипа поставили на плату, но у меня нет B1.7 и B2.0 для точного сравнения.
 

gorec2005

Member
а у 2.0 видимо кристалл чипа поставили на плату,
скорее всего - просто капля... тем более, что на контроллер дисплея у 1.7 pdf-а не нашлось - т.е. он какой-то заказной...
поработает день-два напишу результат... в интернете не нашел ничего про HW v2.0... если все будет ок - можно на гит добавить, что 2.0 достаточно просто перешить первый раз и потом он становится 1.7...
 

pvvx

Активный участник сообщества
в интернете не нашел ничего про HW v2.0... если все будет ок - можно на гит добавить, что 2.0 достаточно просто перешить первый раз и потом он становится 1.7...
 

pvvx

Активный участник сообщества
@gorec2005 Для датчиков STH4x, если не учитывать задержку показаний, то для снижения потребления лучше установить флаг <Датчик в «режиме пониженного энергопотребления»>:
1641672480059.png
Показания будут запаздывать на 2.5 сек, но общее потребление снизится, т.к. процессор не будет ожидать паузу измерения и дополнительно просыпаться только для считывания данных с датчика, а просто считает данные в следующий цикл просыпания для передачи в RF рекламы.
 

pvvx

Активный участник сообщества
Надо как-то разобраться, зачем испортили BLE в Linux:
Это приводит к тому, что если установлен PIN код, то Linux не соединяется с устройством Bluetooch LE, т.к. интервал рекламы устройства 2.5 сек (а некоторые ставят и более).
В спецификации для BLE указан максимальный advertising interval в 10 сек, а рекомендуемое ожидание соединения в 20 сек.
И не понятно, зачем Johan Hedberg и Marcel Holtmann испортили Linux?
 

pvvx

Активный участник сообщества
Уточнено - понаехавшие Ардуинщики в Linux убили его в kernel для всех Bluetooch LE.
Пока держится только Android и Windows.
 

gorec2005

Member
@gorec2005 Для датчиков STH4x, если не учитывать задержку показаний, то для снижения потребления лучше установить флаг <Датчик в «режиме пониженного энергопотребления»>:
1641672480059.png

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

gorec2005

Member
и еще вопрос:
если RF TX Power установить в максимум 3.01dbm то дальность увеличится (на сколько? нет примерных, хотя бы, данных?) и потребление увеличится в (около 100) раз?
 

pvvx

Активный участник сообщества
а для SHTC3 это справедливо? или там алгоритм работы с датчиком другой?
Другой. Там он переводится в режим низкого разрешения и экономия минимальна, точнее не стоит того, как падает точность.
и еще вопрос:
если RF TX Power установить в максимум 3.01dbm то дальность увеличится (на сколько? нет примерных, хотя бы, данных?) и потребление увеличится в (около 100) раз?
Максимум у TLSR825x +10 Дб, но такой ток батарейка CR2032 не тянет и при установке выйдет реальная мощность меньше, чем 0 Дб. Переключается питание RF части и ток RF больше...
Для включения повышенной отдачи - скачать TelinkMiFlasher.html, в нем найти const MAX_RF_TX_Power = false; и поменять на = true - будет меню до +10 Дб.
И примотать батарейку :)

А +3.01 Дб сильно не помогут, т.к. та-же проблема - хилый источник.
 

pvvx

Активный участник сообщества
SHTC3 на время измерения выводится командой из спящего режима, потом другой командой запускается измерение, далее ожидание измерения, MCU уходит спать на 10 мс и просыпается для считывание измерения с датчика, затем команду датчику обратно в сон. Иначе датчик жрет просто так...
SHT4x всегда сам спит, и его не надо пробуждать и загонять обратно в сон для малого потребления. На команду измерения он сам пробуждается, измеряет и засыпает (но значения измерения сохраняет и они доступны в любой момент).
 
Сверху Снизу