умные bluetooth весы

Подключение исполнительных устройств, датчиков, контроллеров.

Модераторы: Bagir, Ivan, Vit, immortal

smart_g
Сообщения: 219
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 11 раз
Поблагодарили: 24 раза

Re: умные bluetooth весы

Сообщение smart_g » Пт май 11, 2018 10:10 pm

Вот еще ссылочка, может будет полезна https://github.com/zewelor/bt-mqtt-gateway
За это сообщение автора smart_g поблагодарил:
fandaymon (Пт май 11, 2018 10:12 pm)
Рейтинг: 1.47%
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
smart_g
Сообщения: 219
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 11 раз
Поблагодарили: 24 раза

Re: умные bluetooth весы

Сообщение smart_g » Пт май 18, 2018 1:12 pm

Подключение "умных" весов Yunmai SE.


Это младшая модель в линейке, выдает только вес.
Данная инструкция годится для всей линейки Yunmai.
Самая полезная ссылка: https://gist.github.com/conoro/f0c1d96c ... 846c3686c4
Описан протокол, главные команды.
Для связи с весами использовался USB 4.0BT dongle.

Для настройки понадобится пакет BlueZ, утилиты hcitool и gatttool.
https://github.com/pcborenstein/bluezDo ... ol-example
Определяем mac адрес весов:
$ sudo hcitool lescan
LE Scan ...

0C:B2:B7:02:3C:3F YUNMAI-ISSE-US
Это mac адрес моих весов. У вас будет другой.

Далее надо согласно протокола добавить пользователей.
$ gatttool -I
[ ][LE]>
Вводим команду connect 0C:B2:B7:02:3C:3F
Attempting to connect to 0C:B2:B7:02:3C:3F
Connection successful
[0C:B2:B7:02:3C:3F][LE]>
конект произошел.
Можно проверить что выдают весы
[0C:B2:B7:02:3C:3F][LE]> characteristics
handle: 0x0002, char properties: 0x02, char value handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb
handle: 0x0006, char properties: 0x0a, char value handle: 0x0007, uuid: 00002a02-0000-1000-8000-00805f9b34fb
handle: 0x0008, char properties: 0x08, char value handle: 0x0009, uuid: 00002a03-0000-1000-8000-00805f9b34fb
handle: 0x000a, char properties: 0x02, char value handle: 0x000b, uuid: 00002a04-0000-1000-8000-00805f9b34fb
handle: 0x000d, char properties: 0x20, char value handle: 0x000e, uuid: 00002a05-0000-1000-8000-00805f9b34fb
handle: 0x0011, char properties: 0x10, char value handle: 0x0012, uuid: 0000ffe4-0000-1000-8000-00805f9b34fb
handle: 0x0016, char properties: 0x08, char value handle: 0x0017, uuid: 0000ffe9-0000-1000-8000-00805f9b34fb
[0C:B2:B7:02:3C:3F][LE]> primary
attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0010, end grp handle: 0x0014 uuid: 0000ffe0-0000-1000-8000-00805f9b34fb
attr handle: 0x0015, end grp handle: 0xffff uuid: 0000ffe5-0000-1000-8000-00805f9b34fb

Видим, что uuid ffe9 (упоминается в протоколе) соответствует handle 0x0017
По этому handle и будем писать команды.
вводим команды добавления пользователя
первого char-write-req 0x0017 0d12100100000001a50235555a17fa010370

второго char-write-req 0x0017 0d12100100000002b80136555a21020103a0
Корректируем команды под свой вес, рост, пол согласно описанию в протоколе.
Вес берем как можно ближе к истинному. Далее по этому весу весы будут отличать пользователя и передавать его ID.
Отключаемся от весов. Вводим команду disconnect.

Теперь весы при взвешивании будут отдавать вместе с ID пользователя в зависимости от модели его вес, % жира, проводимость тела.
Данные о взвешивании передаются при спаривании весов и донгла и когда кто-то находится на весах.
Помните, что зона конекта небольшая. Нет конекта нет данных.
Пока нет информации, что удалось вычитать с весов раннее полученные данные. Протокол описан кратко и возможно есть команды,
которые позволяют это делать.
Для автоматического получения данных включаем полинг весов:
$gatttool --device=0C:B2:B7:02:3C:3F --char-write-req --handle=0x0017 --value=0d05130016 --adapter=hci0 --listen >> /var/www/yunmai.log &
Подставляем свой mac адрес весов. Теперь при каждом взвешивании в файл yunmai.log будет записываться приблизительно следующее:

Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 10 13 86 85
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 10 20 1c 2c
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 11 1f d2 dc
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 11 20 ad 9c
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 11 20 d7 e6
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 11 21 19 29
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 11 21 01 31
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 12 20 f5 c7
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 12 20 f6 c4
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 12 20 ee dc
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 12 20 f9 cb
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 12 20 f9 cb
Notification handle = 0x0012 value: 0d 1e 0b 01 5a f1 bf 13 21 01 33
Notification handle = 0x0012 value: 0d 1e 14 02 00 5a f1 bf 13 00 00 00 02 20 f4 00 00 00 00 d9
Notification handle = 0x0012 value: 0d 1e 14 02 00 5a f1 bf 13 00 00 00 02 20 f4 00 00 00 00 d9

Видим, что ответ приходит по handle = 0x0012 соответствует uuid: ffe4, как и упоминалось в описании протокола.

Короткие строки - вес не застабилизирован. 0b - длина посылки. 01 - вес не стабилен, 5af1bf12 Unix-время взвешивания,
20f5 20f6 20ee 20f9 меняющийся вес.

Длинные строки - вес застабилизировался. 14 - длина посылки. 02 - вес стабилен, 5af1bf13 Unix-время взвешивания,
00000002 ID-пользователя, 20f4 - вес, остальные нули - проводимость и жир. В данной модели весов не измеряются.
Ввод данных в Majordomo.
В MDM создаем класс Yunmai_scale со свойтвами weight, fat, resistance и объектами соответствующими ID-пользователя.
Для обработки данных из файла yunmai.log в MDM создан скрипт, который парсит файл и заносит данные по ID в соответствующие
свойства объекта. Данный скрипт добавляем в цикл OneMinute.
СпойлерПоказать
if (file_exists("/var/www/yunmai.log"))
{
echo 'Файл существует<br>';
$fp = fopen("/var/www/yunmai.log", 'rt'); // Текстовый режим
$ffp = file ("/var/www/yunmai.log");
$num = count($ffp);
$your_text = $ffp[$num-1];
$form = substr($your_text, 46, 1); // стабильны показания или нет

if ($form == "2")
{echo 'Есть стабильные показания: '.$form.'<br>';


$form1 = substr($your_text, 75, 5); // показания веса
echo $form1.'<br>';
$weight = hexdec($form1)/100;
echo 'Вес: '.$weight.' кг '.'<br>';
$form12 = substr($your_text, 81, 5); // показания проводимости
echo $form12.'<br>';
$resistance = hexdec($form12);
echo 'Проводимость: '.$resistance.'<br>';
$form13 = substr($your_text, 87, 5); // показания жира
echo $form13.'<br>';
$fat = hexdec($form13)/100;
echo 'Жир: '.$fat.' % '.'<br>';


$form3 = substr($your_text, 63, 11); // индекс профиля
echo $form3.'<br>';
$w2 = hexdec($form3);
echo 'Индекс профиля: '.$w2.'<br>';




sg($w2.".weight",$weight); //вносим показания в базу
sg($w2.".resistance",$resistance); //вносим показания в базу
sg($w2.".fat",$fat); //вносим показания в базу

fclose($fp); // Закрытие файла

if (file_exists("var/www/yunmai.log"))
{
$deleted = unlink("var/www/yunmai.log"); // Удаление файла

if ($deleted)
{
echo "The file has been successfully deleted";
}
else
{
echo "The file has not been successfully deleted";
}
}
else
{
echo "The original file that you want to delete doesn't exist";
}

}
else
{
fclose($fp); // Закрытие файла
}

}






else
{echo "Файла с данными пользователя не существует ";

}
Дальнейшая автоматизация и обработка данных делается через методы класса Yunmai_scale. Тут уж, кто во что гаразд.
Вложения
yunmai_se.jpeg
yunmai_se.jpeg (3.2 КБ) 498 просмотров
За это сообщение автора smart_g поблагодарили (всего 3):
skysilver (Пт май 18, 2018 1:25 pm) • fandaymon (Пт май 18, 2018 1:33 pm) • directman66 (Пт май 18, 2018 3:03 pm)
Рейтинг: 4.41%
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
directman66
Сообщения: 1668
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 249 раз
Поблагодарили: 291 раз

Re: умные bluetooth весы

Сообщение directman66 » Пт май 18, 2018 3:06 pm

Круто. Добавляй в конект новое устройство со ссылкой на эту тему.

Какое расстояние между долглом и весами в итоге фиксируется?
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
smart_g
Сообщения: 219
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 11 раз
Поблагодарили: 24 раза

Re: умные bluetooth весы

Сообщение smart_g » Пт май 18, 2018 3:19 pm

directman66 писал(а):
Пт май 18, 2018 3:06 pm
Какое расстояние между долглом и весами в итоге фиксируется?
Точно не замерял. Но уже писал, что меньше чем у датчика miflower. Проведу опыты и отпишусь.
Еще заметил, что при потере связи надо перезапустить gatttool.
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
directman66
Сообщения: 1668
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 249 раз
Поблагодарили: 291 раз

Re: умные bluetooth весы

Сообщение directman66 » Пт май 18, 2018 3:26 pm

А одновременно gatttool может работать с весами и mi band?
Или несколько экземпляров приложения?
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
smart_g
Сообщения: 219
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 11 раз
Поблагодарили: 24 раза

Re: умные bluetooth весы

Сообщение smart_g » Пт май 18, 2018 6:31 pm

directman66 писал(а):
Пт май 18, 2018 3:26 pm
А одновременно gatttool может работать с весами и mi band?
Или несколько экземпляров приложения?
Судя по всему вызывается несколько экземпляров. Постоянно работает полинг весов( gatttool запущен) а питоновский скрипт, который опрашивает датчики miflora запускает свой процесс gatttool (видно в скрипте). Все это работает через один донгл и друг другу не мешает.
За это сообщение автора smart_g поблагодарил:
directman66 (Пн май 21, 2018 6:45 am)
Рейтинг: 1.47%
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
directman66
Сообщения: 1668
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 249 раз
Поблагодарили: 291 раз

Re: умные bluetooth весы

Сообщение directman66 » Вт май 22, 2018 10:26 pm

это на убунте

Код: Выделить всё

A4:C1:38:C7:0C:A3: команда не найдена
pi@dmsserver:~$ gatttool -I
[                 ][LE]> connect A4:C1:38:C7:0C:A3
Attempting to connect to A4:C1:38:C7:0C:A3
Error: connect error: Connection refused (111)
[A4:C1:38:C7:0C:A3][LE]> connect A4:C1:38:C7:0C:A3
Attempting to connect to A4:C1:38:C7:0C:A3
Error: connect error: Function not implemented (38)
[A4:C1:38:C7:0C:A3][LE]>
это на orange pi plus 2 (armbian)

Код: Выделить всё

[A4:C1:38:C7:0C:A3][LE]> connect A4:C1:38:C7:0C:A3
Attempting to connect to A4:C1:38:C7:0C:A3
Connection successful
[A4:C1:38:C7:0C:A3][LE]>
(gatttool:4831): GLib-WARNING **: Invalid file descriptor.

[A4:C1:38:C7:0C:A3][LE]> primary
Command Failed: Disconnected
[A4:C1:38:C7:0C:A3][LE]> (gatttool:4831): GLib-WARNING **: Invalid file descriptor.
Error: (gatttool:4831):: command not found
[A4:C1:38:C7:0C:A3][LE]>
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 1668
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 249 раз
Поблагодарили: 291 раз

Re: умные bluetooth весы

Сообщение directman66 » Ср май 23, 2018 12:10 am

Похоже нужно ставить библиотеку https://github.com/labapart/gattlib/
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
smart_g
Сообщения: 219
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 11 раз
Поблагодарили: 24 раза

Re: умные bluetooth весы

Сообщение smart_g » Ср май 23, 2018 9:52 am

На сколько я помню в пакете BlueZ gatttool не шел. Я его доустанавливал потом, но вроде стандартно sudo apt-get install gatttool
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
Аватара пользователя
Eraser
Сообщения: 604
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 12 раз
Поблагодарили: 413 раз
Контактная информация:

Re: умные bluetooth весы

Сообщение Eraser » Пт май 25, 2018 9:00 am

У меня работает скрипт отсюда
https://github.com/UCSD-SEELab/YunmaiDataCapture
Скрипт передает данные по MQTT
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Ответить