Давненько ничего не писал в блог, надо б исправляться. Что поделаешь, я не копирайтер, рекламы у меня нет, нейронки посты тоже не пишут — все руками, потому и не часто. А сегодня выдался повод интересный. Попался мне в руки чудный девайс — датчик протечки ujin aqua. Их теперь многие застройщики раздают, как ту самую «первую дозу бесплатно». Вот и решил я его исследовать на предмет: подружить с Home Assistant/открутить от облака и насколько оно вообще применимо в эпоху победившего киберпанка.

Собственно, корпус и конструктив
На вид обычный квадратик. На верхнюю часть можно жмакать, чтобы запарить с контроллером протечки, тут все без особых странностей. Снизу подпружиненные ножки, на которых он немного возвышается над миром.

И первое что бросается в глаза — никакой влагозащиты. Корпус очень просто разбирается и никаких уплотнительных резинок там нет (!)

Сама плата не имеет иммерсионного золочения контактных площадок (обычный HASL) и лакировки, потому подвержена коррозии во влажной среде, особенно в таком корпусе.
Ну а вот так вот и выглядит сама печатная плата. В глаза бросается большая батарея и обилие конденсаторов и даже выводной электролит, что намекает нам, что с потреблением тут явно все очень и очень хитро.

А теперь давайте сравним конструкцию с главным конкурентом (по моему мнению) — Aqara Water Leak Sensor. У меня он еще старый.


Как видно, корпус запрессован герметично, батарейный отсек на винте, а внутри уплотнительная резинка. Такая конструкция позволяет его даже кинуть в ведро с водой, и потом он выживет до тех самых пор, пока уплотнительная резинка жива. А уж винты на пузе позволяют подключить сенсорный кабель протечки и проложить там, где надо.
Итак, самый главный и неприятный вердикт:
Сей девайс, в виду полной незащищенности от влаги во влажном помещении может крайне быстро сдохнуть от коррозии.
Да и если будет конденсат внутри — может быть ложное срабатывание.
Железо
Закончив ругаться на корпус и отсутствие хоть какой-то защиты от влаги, я разобрал девайс и, подивившись на жирнейшую батарейку, положил под микроскоп. Фоточки привожу ниже.





Вот тут я немного впал в ступор, а потом офигел. Неужели «родной» нордик? Уж с ними то я долго мучался в свое время, и даже в блоге писал про проблемы некоторых модулей тут и тут, и бутлоадер под него писал даже еще раньше, в далеком 2014м. Хотя основная проблема у меня была в качестве печатных плат готовых модулей и антенного тракта в них. Тут же все на одной плате.
Даже я, учитывая обилие своих поделок на nRF24L01 (которых наплодил кучу между 2012 и 2016 годами) потихоньку сначала все перевел на mysensors в 2020м с самописного решения а теперь вообще все перевожу на WiFi или Zigbee. Во многом из-за неудовлетворительного приема.

В общем неожиданно тут было видеть такую архаику, да в серьезном продакшне.
Клон нордика под именем SI24R1 отличается от оригинала тем, что у него повышенная мощность передатчика и некоторые особенности в работе, что намекает, что разработчики датчиков тоже столкнулись с тем, что мощность сигнала у обычных nRF24L01 была далеко не всегда достаточная. Вот что пишет даташит SI24R1 на этот счет.

Но этого было мало, потому на выходе антенны SI24R1 стоит еще один чип, чтобы решить проблему максимально брутально. CB2401 от некоего chipbetter. Гугл выдал даташит по первой же ссылке.
Из него я узнал, что эта махарайка может дуть в антенну с мощностью +22dBm. При разрешенных в моих краях +20dBm, а жрет при этом во время передачи аж 100mA во время передачи (а в пике аж 350mA).
Вот и разгадка зачем конденсаторы. Так как батарейки таблетного типа не могут отдавать много тока, разработчики напаяли много конденсаторов. А заложили в проект еще больше чтобы перестраховаться, и в итоге даже не все запаяли. К сожалению, электролиты имеют тенденцию сохнуть и течь (в смысле через них идет ток утечки небольшой, а не электролит вытечет), потому это также может негативно сказаться на времени жизни батарейки.
Видимо и этого было разработчикам мало, потому туда воткнули не PCB антенну, что ожидалось, а напаяли металлическую и достаточно здоровую. Понятно, что PCB антенна может давать не очень равномерную диаграмму направленности, а вот почему не поставили керамическую — был явно большой повод или не было — история умалчивает.
Сама же плата выполнена на первый взгляд в 4 слоя, так что если повезло — там даже был контроль импеданса на антенный тракт, и вся это мощность не уходит в помехи всем вокруг. А вот на иммерсионное золочение они пожадничали. А зря. Это хоть немного помогло бы защитить девайс от коррозии (если еще все, кроме пятаков залакировать). Хотя кого я обманываю? Тут нужно просто другой, нормальный корпус.
В общем, с одной стороны брутально и явно похоже на поиск приключений для себя на ровном месте (Зачем все это городить, когда можно было взять одночипное решение с Zigbee трансивером или тотже nordic, но с интегрированным трансивером?), с другой стороны ведь работает же ж! Если не брать мою старческую ругань на древнюю элементную базу и странные решения, то единственное что могли бы сделать — нормальный корпус. Либо иммерсионное золочение и лакировку всего, кроме контактных площадок для ножек. Это бы хоть немного спасло бы от влаги, хотя батарейный отсек все равно бы бодренько корродировал.
Программное обеспечение
nRF24L01, да и SI24R01 это НЕ bluetooth, потому наклейка меня несколько засмущала. Либо они соврали, либо… Кто-то вдруг прочитал про древний хак на хабре, и вот это вот нестандартное решение и протащил в серьезный продакшн. Per rectum ad astra, хех.
По сути хак состоит в том, что мы можем правильно сформированным пакетиком имитировать bluetooth le advertisement message, и к нему пришпандоривать немного vendor defined data. Что собственно они и делают. А это значит одно: связь между датчиком и контроллером протечки всегда будет однонаправленная, а все данные которые только могут быть — будут в le advertisement message в секции vendor data.
Достал телефон, закоротил датчик линейкой, получил данные. Устройство видится как LD-S. Как оно часто шлет advertisement в режиме, когда протечки нет — пока неизвестно. По сути это и будет определять время жизни батарейки, ибо жрет во время передачи оно знатно — аж светодиод на корпусе в моменты передачи тускнеет (если конечно не заложено в прошивке)
Проверяем концепт
Покопавшись в хламе, я добыл платку на esp32 и закинул в нее совершенно тупой конфиг esphome, который бы выводил дамп вендорных данных, благо шифрования тут никакого нет, быть не может да и не нужно:
esphome:
name: $devicename
build_path: build/$devicename
esp32:
# framework:
# type: esp-idf
# version: recommended
board: esp32doit-devkit-v1
api:
substitutions:
devicename: "leaktest"
logger:
level: DEBUG
baud_rate: 0
wifi:
networks:
- ssid: !secret wifi_ssid
password: !secret wifi_pwd
ota:
- platform: esphome
password: updateme
esp32_ble_tracker:
on_ble_advertise:
- mac_address:
- XX:XX:XX:XX:XX:XX
then:
- lambda: |-
ESP_LOGD("ble_adv", "New BLE device");
ESP_LOGD("ble_adv", " address: %s", x.address_str().c_str());
ESP_LOGD("ble_adv", " name: %s", x.get_name().c_str());
ESP_LOGD("ble_adv", " Advertised service UUIDs:");
for (auto uuid : x.get_service_uuids()) {
ESP_LOGD("ble_adv", " - %s", uuid.to_string().c_str());
}
ESP_LOGD("ble_adv", " Advertised service data:");
for (auto data : x.get_service_datas()) {
ESP_LOGD("ble_adv", " - %s: (length %i)", data.uuid.to_string().c_str(), data.data.size());
}
ESP_LOGD("ble_adv", " Advertised manufacturer data:");
for (auto data : x.get_manufacturer_datas()) {
ESP_LOGD("ble_adv", " - %s: (length %i)", data.uuid.to_string().c_str(), data.data.size());
ESP_LOGD("ble_adv", " %x %x %x %x %x ", data.data[0], data.data[1], data.data[2], data.data[3], data.data[4]);
}
web_server:
После попробовал понажимать на датчик и закоротить его, и в ответ увидел что-то такое:
[22:50:07][D][ble_adv:040]: New BLE device
[22:50:07][D][ble_adv:041]: address: XXXXXXXXXXXXXXXX
[22:50:07][D][ble_adv:042]: name: LD-S
[22:50:07][D][ble_adv:043]: Advertised service UUIDs:
[22:50:07][D][ble_adv:047]: Advertised service data:
[22:50:07][D][ble_adv:051]: Advertised manufacturer data:
[22:50:07][D][ble_adv:053]: - 0xFFFF: (length 5)
[22:50:07][D][ble_adv:054]: 3 7 64 0 4c
Первые 3 байта вендорных данных у меня не менялись, так и остались на 3 7 64. Последний байт был, судя по всему, счетчиком посылки и инкрементировался лишь тогда, когда данные в других байтах хоть как-то менялись. А вот 3й байт судя по всему и был битовым полем с интересными данными. Там точно было закодировано состояние кнопки (с дифференциацией долгое-короткое нажатие) и состояние самого датчика: протечка или нет.
В теории должно быть и состояние батарейки где-то, но без подключения к лаб. источнику питания и пайки мне его не удалось найти. На этом я и остановил эксперимент, понимая что дальнейшее написание компонента для esphome дело уже больше механическое. Работать датчики c другой экосистемой будут без проблем. Вопрос только в том, насколько надежным будет такое решение, учитывая конструктивные недостатки устройства и стоит ли вообще заморачиваться? Цена-то у него при этом выше аналогов раза в два: 1200р за Aqara vs 2850р за ujin. Т.е. докупать такие датчики будет совершенно нерационально. (Только если ими внезапно массово завалят авито и прочие барахолки те, кто получили такие в подарок от застройщиков)
Сухой остаток
Датчик скорее всего сгниет за год-два при большой влажности, а подпружиненные ножки после первого залития заклинят (фиг знает, насколько это будет критично и будет ли нарушен контакт с пятаком на плате). В тех pogo-пинах, что я видел внутри была стальная пружинка, которая очень любит кородировать. Тут только эксперимент покажет.
От коррозии можно немного защититься промазав герметиком по периметру корпуса (только так, чтобы потом можно было счистить во время замены батарейки), чтобы потом с диагнозом «сойдет для сельской местности» использовать, но покупать такое спецом учитывая явно завышенную на момент написания этого поста стоимость и намного более качественные и продуманные альтернативы — я бы не стал.
На очереди на исследование (через несколько месяцев, как дойдут руки) контроллера протечек от этих же ребят. А то уж больно много ругани на него от знакомых, и информации что греется оно как-то сильно. Даже такую фотографию скинули (не то, чтобы прямо вот очень критично на мой взгляд, но кого-то напрягает):
