Скрипт для подключения к весам Xiaomi MiScale 2 и парсинга данных

Давно хотел подключиться к весам напрямую и обрабатывать новости о своем похудении минуя жадных до данных ксяомцев

Намедни, с помощью Дипсика (пришлось ему помочь, предоставив данные о том, как закодированы данные в ответе весов) за 15 минут накарябал следующее:

import asyncio
from bleak import BleakClient, BleakScanner
from bleak.exc import BleakError

SCALE_MAC = "00:00:00:00:00:00" # MAC адрес весов из приложения Zepp Life

SERVICE_UUID = "0000181b-0000-1000-8000-00805f9b34fb" # Оставить как есть
CHARACTERISTIC_UUID = "00002a9c-0000-1000-8000-00805f9b34fb" # Оставить как есть

def parse_scale_data(data):

    if len(data) < 13:
        return None
    
    status_byte = data[1]
    is_fixed = status_byte & 0x02
    has_impedance = status_byte & 0x04
    
    raw_weight = int.from_bytes(data[11:13], byteorder='little')
    weight_kg = raw_weight * 0.005
    
    return {
        'weight': weight_kg,
        'is_final': is_fixed,
        'is_stabilized': is_fixed,
        'raw_weight': raw_weight,
        'has_impedance': has_impedance,
        'impedance': int.from_bytes(data[9:11], byteorder='little') if has_impedance else None
    }

def notification_handler(sender, data):
    """Обработчик уведомлений"""
    if len(data) < 13 or data[0] != 0x02:
        return
    
    parsed = parse_scale_data(data)
    if not parsed:
        return
    
    if parsed['is_final']:
        print(f"\nФинальный вес: {parsed['weight']:.2f} кг")
        if parsed['has_impedance']:
            print(f"Импеданс: {parsed['impedance']} Ом")
    else:
        print(f"Измерение: {parsed['weight']:.2f} кг", end='\r')

async def monitor_scale():
    """Постоянный мониторинг весов"""
    while True:
        print("\n--- Начинаю сканирование ---")
        try:
            # Сканируем устройство
            device = await BleakScanner.find_device_by_address(SCALE_MAC, timeout=10)
            if not device:
                print("Весы не найдены, повторяю через 5 секунд...")
                await asyncio.sleep(5)
                continue

            print(f"Найдены весы {device.name}, подключаюсь...")
            
            async with BleakClient(device) as client:
                print("Подключено. Встаньте на весы...")
                await client.start_notify(CHARACTERISTIC_UUID, notification_handler)
                
                # Ждем отключения или 5 минут бездействия
                try:
                    while True:
                        await asyncio.sleep(1)
                        if not client.is_connected:
                            print("\nСоединение потеряно")
                            break
                except Exception as e:
                    print(f"\nОшибка соединения: {e}")
                finally:
                    try:
                        await client.stop_notify(CHARACTERISTIC_UUID)
                    except:
      0                  pass
                    print("Отключено")
                    
        except Exception as e:
            print(f"\nОшибка: {e}")
            await asyncio.sleep(5)

# Для Jupyter Notebook
try:
    await monitor_scale()
except KeyboardInterrupt:
    print("\nМониторинг остановлен")

Код рабочий, с чем себя и поздравляю.

Очень хочется разобраться с добычей всех данных из Zepp Life, но с этим пока непросто.

Сплошная польза

https://www.thingiverse.com/thing:6417673

Некоторое время назад, в третий раз за 2.5 гола обладания 3д принтером, а напечатал полезную вещь - разделитель для дверной полки в холодильнике.

Что удивило - норот на сингиверс внезапно оценил поделку и в течение месяца активно скачивал и лайкал, загнав модельку аж в топ в разделе Kitchen und Dining.

Я, было, вдохновился и подумал, что вот, щас как начну моделировать, но потом попустило, конечно же.

технические характеристики

Продолжение сайенс-космооперы…

.... про цифровую мультиличность Боба, которой свезло после смерти спасать человечество (и не только) попутно колонизируя галактику, оказалось бодрее начала.

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

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

Сильно раздражает только суперковергентность эволюций в разных звездных системах. Как в Стартреке каком-нибудь, тьфу ))

З.Ы. Вторая часть нашлась только в машинном (или почти-машинном) переводе (прошлый раз такое было с "Проектом Ave Мария"). Так вот, хочу отметить, что такой, прямо скажем, говно-перевод практически не раздражал. Получилось настроится на восприятие криво или буквально переведенного выражения сразу в форму, "которую хотел сказать автор".

Мы – Легион, Мы – Боб

Небезынтересная фантастика автора Д.Э. Тейлора про человека, который волею судеб в 22 веке был оцифрован и направлен в качестве зонда фон Неймана в соседнюю звездную систему.

Читать далее

n-й блин комом

Облака - зло. Это аксиома. Как и любое другое зло, оно удобное, но от этого еще более опасное. Это мне мой внутренний параноик говорит. Он, конечно, часто ошибается, но кто без греха?

Читать далее

В связи с идущей технологической революцией решил изменить порядок целеполагания.

Если раньше я довольствовался написанием тезисного плана (сделать то-то, проверить то-то, не забыть про и тд), то теперь планирую писать ТЗ для "воображаемого" робота. Даже если задание заведомо "роботом" невыполнимо в силу его воображаемости ))

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

Начну с искоренения порочной практики написания кода "акын-стайл", кода пишу, что думается.

Мое мнение про ChatGPT

Написано с применением chatGPT3.5.  ))

ChatGPT – текущее состояние:

На мой взгляд, сейчас ChatGPT 3.5  соответствует ребенку 10-12 лет с эйдетической памятью,  с энциклопедическими знаниями, но склонного к галлюцинациям и ни разу не выходившим за пределы комнаты.

Полноценно и продуктивно общаться с ним ПОКА может только специалист специально обученный человек (если цель - не развлечение, конечно же)

При этом  по состоянию на начало этого года я бы оценил  «возраст» в 5-7 лет, то есть имеет место значительный прогресс за короткое время

Возможности:

  1. успешно генерирует связный и чаще всего логически непротиворечивый текст на заданную тему в заданном объеме. Тема может быть довольно сложной и включать в себя необходимые элементы и ограничения
  2. обладает «знаниями» в широком спектре областей (по умолчанию – по состоянию на 21 год, но появился  режим «поиска в интернете», а также сеть учитывает ранее поданные в нее материалы в качестве контекста)
  3. в ряде случаев может строить логические связи между объектами
  4. успешно  пишет  код на любых языках на уровне junior-разработчика.  Чем точнее ТЗ, тем лучше код. Т.е. сочинить сложную систему пока еще не может, но написать класс или функцию – без проблем.
  5. учитывает контекст, т.е. можно отправить ей какие либо материалы и следующие ответы сеть будет отдавать с учетом этих материалов
  6. может  создавать  авторефераты по предложенному тексту, выделять главное (с переменным успехом)
  7. может  трансформировать тезисы в связный текст. В т.ч. поданные в виде таблиц.
  8. Идет активное развитие – в течение двух недель было добавлено несколько принципиально новых возможностей
  9. Очень дешево (в моем случае всестороннего тестирования в течение трех недель – я еще не вышел за лимит 50 руб.)
  10. ЕСТЬ ВОЗМОЖНОСТЬ ДООБУЧАТЬ МОДЕЛЬ ПОД СВОИ НУЖДЫ  - как в nocode варианте, задавая контекст, так и фактически дообучая нейросеть на своих датасетах (требуются датасеты  и хорошее железо (немного выходящее за рамки даже топового потребительского компьютера))

Ограничения

  1. Нейросеть в текущем состоянии не имеет критического мышления (пытается дать ответ в любом случае, даже если ответа нет – частично исправлено в версии 3.5)
  2. Слишком общие знания системы, отсутствие  специализации  (ответ дается на основании среднестатистического ожидаемого ответа, в то время как пользователи ожидают ответ специалиста)
  3. Ограничения по объему вводимого обращения
  4. Время ответа – от нескольких секунд до нескольких минут
  5. Один провайдер – возможны ограничения с его стороны, вплоть до бана, т.к. пока монополист
  6. Требует регистрации (формально невозможна из РФ)
  7. Сильно цензурирована и максимально толерантна. Прям бесит.
  8. Требует понимания КАК с ней работать, нужно понимать, как и в какой последовательности задавать вопросы  (возможно появление в будущем профессии «специалист по постановке ТЗ нейросети» ))
  9. Может производить расчеты исходя из логики ответа, но часто ошибается даже в применении даже простейших формул  (корректный ответ по задачам на скорость, например, выдается только раза с третьего)
  10. Отсутствует возможность действий в реальном мире

Варианты использования:

Прямо сейчас

  1. Замена junior-разработчиков  (постановка ТЗ требуется и боту,  и джуниору, но  результат ChatGPT выдает через несколько секунд-минут (даже с учетом повторных запросов с уточнениями, а человек – через несколько десятков минут-часов). Стоимость выполнения простого задания – несколько копеек. При этом стек/язык значения не имеет.
  2. Замена (или обесценение) труда копирайтеров. На входе – набор тезисов и стандартная  инструкция, на выходе – готовый текст. Описания товаров, SEO-статьи для интернет-ресурсов.  Также сейчас ChatGPT используют для рерайтинга (система переписывает тексты с высоким уровнем уникальности)
  3. Замена (или обесценение) труда переводчиков. Система делает качественный связный перевод, на основные языки, включая китайский
  4. Написание новостей. Как по заданной теме, так и по тезисам. В версии ChatGPT4 может даже описать, что происходит на фото. Сейчас точно  используется для развлекательных и желтых изданий. Можно даже задавать тональность, от успокаивающей до алармистской )))
  5. Написание шаблонных и околошаблонных писем
  6. Генерация изображений (сеть может использовать примеры, описания стилей и пр., а также четко выполнять инструкции, что нарисовать)
  7. Обучение (вместо  гуглинга можно получить базовую информацию о чем либо сразу в чате, далее последовательно в форме диалога запрашивать интересующие данные). Требуется только критически относится к выдаваемому результату
  8. Подготовка черновиков документов для последующей доработки (это письмо было сделано именно так)
  9. Написание сценариев к фильмам/мероприятиям (да и генерация видеоряда – уже есть, на твиче некотрое время крутилась серия из Губки Боба, сценарий и видеоряд которой генерируется онлайн)
  10. Дополнение (в антиутопичном варианте – замена)  результатов поиска в интернете  мнением ИИ
  11. Появление  альтернативных моделей (MS, Google, Baidu, Adept, Yandex + некоторое количество опенсорсных и некоммерческих  проектов) – на основании этого можно надеяться на доступность и дешевизну

В этом или следующем году (требует доработки/ усилий со стороны пользователя):

  1. Частичная замена работы колл-центров (на вход – обращение клиента + инструкция) – на выходе – живой ответ. Ресепшн, столы информации, клиентские чаты,  реакция на отзывы клиентов (негатив и позитив)
  2. Появление специфически обученных моделей (обученных решать задачи, свойственные направлению, конкретному виду бизнеса)
  3. Автоматическое формирование  коммерческих предложений (в т.ч.  клиентских писем) на основе кратких описаний, а также с учетом специфики клиента.
  4. Сбор информации из множества источников с последующей обработкой и формированием выводов
  5. Автореферирование больших объемов текстовой информации
  6. Кратное увеличение качества работы голосовых ассистентов (умные дома, автомобили, автоответчики)
  7. Формирование  обращений (на основе предоставленной информации в свободной форме)  в организации и инстанции по несложным кейсам
  8. Формирование отписок на предыдущий пункт
  9. Редактирование/причесывание/стилизация готовых текстов  (литература, редакторы в пресс-отделах)
  10. Появится компетенция  «взаимодействие  с искусственным интеллектом»
  11. Появятся виртуальные «медийные персоны»  (замена говорящих голов из телевизора/ютуба и др)
  12. Выход нейросети в реальный мир (способность управлять техникой, информационными системами) – шлюз, который превращает верифицированный ответ нейросети в действие (допустим, пользователь описывает проблему, нейросеть генерирует последовательность необходимых действий, и производит их (предоставляет права к Базе Данных,  заказывает товары/такси, включает/ выключает свет, обогреватель, инициирует подготовку отчета, запрашивает данные и пр, и др)

На горизонте два-пять лет:

  1. Замена людей в колл-центрах практически в полном объеме
  2. То же самое – с продавцами массовых товаров
  3. Появление успешных диагностических систем (как технических, так и медицинских), которые по набору симптомов  ставят достоверный диагноз
  4. Подготовка достоверных и непротиворечивых справок/аналитических записок/отчетов  по  заданной теме в т.ч. прогнозы (на основании  ранее разработанной методики)
  5. Частичная замена  сотрудников, занимающихся рутинной обработкой информации.
  6. Подготовка  прогнозов
  7. Генератор идей (автоматизированный брейнсторминг)
  8. Как сумма предыдущих трех пунктов -  качественно новый уровень экспертных систем, сравнимых с человеком.
  9. Автоматизация всей рутинной работы офисной работы (подготовка как регулярных, так ad-hoc отчетов, регулярных документов)
  10. Появление искусственных репетиторов/учителей
  11. Замена техподдержки (как в компаниях, так и клиентская техподдержка, как в информационном плане, так и в плане действий (например – раздать права пользователю в системе))
  12. Появление цифровых копий/имитаций живых или умерших людей (на основе переписок/действий/итд), как минимум умеющих виртуально общаться аналогично образцу.

Планирование – основа всего или Сам себе продакт-менеджер.

Когда я строил каное (на котором в итоге вылез на воду один раз), мне очень помогла практика ежедневного отчета о том, что сделал и что планирую сделать. Мотивирует и бодрит, а самое главное - не дает сбиться с мысли в ворохе возникающих задач.

Попробую и с этим экземпляром робота сделать то же самое.

План на ближайшие дни:

Читать далее

В свободное от работы время…

... озадачился давеча организацией интерфейса управления роботом.

Поскольку, если у человека в руках молоток, то все вокруг ему напоминает гвоздь, решил остановиться на реализации оного интерфейса посредством flask. Поднимаем на Raspberry flask-server, получаем от процесса управления роботом данные, посылаем из фласка роботу команды. Все просто. Казалось бы.

Однако ж, оказалось не все.

Читать далее

Вторые 40 лет в жизни мальчика тоже непросты

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

Читать далее