惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
C
Check Point Blog
GbyAI
GbyAI
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 司徒正美
Hacker News - Newest:
Hacker News - Newest: "LLM"
V2EX - 技术
V2EX - 技术
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
F
Full Disclosure
S
Secure Thoughts
WordPress大学
WordPress大学
博客园 - Franky
N
News and Events Feed by Topic
雷峰网
雷峰网
www.infosecurity-magazine.com
www.infosecurity-magazine.com
H
Hacker News: Front Page
N
Netflix TechBlog - Medium
Forbes - Security
Forbes - Security
TaoSecurity Blog
TaoSecurity Blog
C
CERT Recently Published Vulnerability Notes
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
Security Latest
Security Latest
Attack and Defense Labs
Attack and Defense Labs
The Register - Security
The Register - Security
Spread Privacy
Spread Privacy
H
Help Net Security
宝玉的分享
宝玉的分享
L
LangChain Blog
MongoDB | Blog
MongoDB | Blog
I
Intezer
Schneier on Security
Schneier on Security
Latest news
Latest news
Y
Y Combinator Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
InfoQ
A
About on SuperTechFans
T
Tor Project blog
Microsoft Security Blog
Microsoft Security Blog
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
T
Threat Research - Cisco Blogs
S
Schneier on Security
Cisco Talos Blog
Cisco Talos Blog
H
Heimdal Security Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Я устал гадать, мне лучше или хуже, и сделал систему непрерывного измерения температуры
Александр · 2026-05-22 · via Все публикации подряд на Хабре

В очередной раз я заболел.

В прошлый раз это был ковид: тогда я плохо понимал, что со мной происходит, и ситуация едва не закончилась совсем плохо. В этот раз всё выглядело банальнее — высокая температура, которая долго не сбивалась.

Обычный градусник показывал 38–39 °C. И вроде бы все мы понимаем: если температура высокая, долго держится и стандартные средства не помогают, это уже повод как минимум связываться с врачом. Но есть нюанс: чтобы принимать решения не на ощущениях, а на данных, температуру нужно измерять регулярно.

А вот тут начинается бытовая инженерия.

Проблема обычного градусника

На бумаге всё просто: взял градусник, измерил температуру, записал результат, повторил через час.

В реальности, особенно ночью, это выглядит иначе.

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

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

А потом надо не забыть повторить всё это через час.

Когда у тебя температура под 39, это уже не очень удобный пользовательский интерфейс.

Техническое задание от человека с температурой 39

Мне хотелось сделать систему, которая:

  • сама регулярно измеряет температуру;

  • не требует включать свет ночью;

  • не заставляет читать мелкие цифры на дисплее;

  • умеет отправлять данные в систему умного дома;

  • может озвучить текущую температуру через колонку;

  • уведомляет, если температура достигает опасного порога;

  • позволяет вручную запросить текущее значение.

То есть задача была не просто «измерить температуру», а убрать из процесса больного человека как слабое звено.

Версия 0.1: киберпанк под мышкой

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

В качестве контроллера использовал миниатюрную плату на ESP32-C3. В качестве прошивки — ESPHome, потому что она отлично интегрируется с Home Assistant, позволяет быстро описать устройство YAML‑конфигурацией и не требует каждый раз писать прошивку вручную.

Для измерения температуры взял герметичный датчик DS18B20. Это цифровой температурный датчик, который часто используют в DIY‑проектах: он недорогой, простой, работает по 1-Wire и продаётся в герметичном исполнении на проводе.

Идея выглядела так:

На уровне идеи всё выглядело почти как медицинский wearables‑девайс.

На уровне реальности — как человек, подключённый проводом к плате разработки.

Ожидание и реальность

В голове это выглядело примерно так:

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

А в реальности получилось немного иначе:

ESP32-C3, провод питания, провод датчика, датчик под мышкой, попытки удобно лечь и не выдернуть всё это во сне.

С эстетикой медицинского прибора было плохо. С инженерной точки зрения — уже гораздо лучше: температура действительно измерялась, данные попадали в Home Assistant, а автоматизации могли реагировать на значения.

Девайс выглядел примерно так:

Не переживайте что блок питания на 120W, просто под боком не было менее мощного. Технически можно и на батарейку повесить, но там надо играть было с энергопотреблением, а при 39 - тяжеловато.

Не переживайте что блок питания на 120W, просто под боком не было менее мощного. Технически можно и на батарейку повесить, но там надо играть было с энергопотреблением, а при 39 — тяжеловато.

Конфигурация ESPHome

Конфигурация ESPHome получилась довольно короткой. ESP32-C3 подключается к Wi‑Fi, поднимает API для Home Assistant, а DS18B20 опрашивается через GPIO по 1-Wire.

Пример конфигурации:

Скрытый текст
esphome:
  name: body-thermometer
  friendly_name: body-thermometer

esp32:
  board: esp32-c3-devkitm-1
  framework:
    type: esp-idf

# Enable logging
logger:

# Enable Home Assistant API
api:


ota:
  - platform: esphome


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Body-Thermometer"
    password: "PoSMCx1mm"

captive_portal:
    
one_wire:
  - platform: gpio
    pin: GPIO4

sensor:
  - platform: dallas_temp
    name: "Body Temperature"
    id: body_temperature
    update_interval: 1min
    accuracy_decimals: 1
    filters:
      - sliding_window_moving_average:
          window_size: 5
          send_every: 1

  - platform: wifi_signal
    name: "Thermometer WiFi Signal"
    update_interval: 60s

binary_sensor:
  - platform: gpio
    name: "Thermometer Physical Button"
    id: measure_button
    pin:
      number: GPIO9
      mode: INPUT_PULLUP
      inverted: true
    filters:
      - delayed_on: 30ms
      - delayed_off: 30ms
    on_press:
      then:
        - component.update: body_temperature

button:
  - platform: template
    name: "Measure Body Temperature"
    id: measure_body_temperature
    on_press:
      then:
        - component.update: body_temperature

Я специально добавил сглаживание через sliding_window_moving_average, потому что при таком способе крепления датчика показания могут немного гулять. Особенно в первые минуты, пока датчик, провод и окружающая среда приходят к более‑менее стабильному состоянию.

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

Автоматизация в Home Assistant

Дальше всё завязано на Home Assistant.

Нажал на устройстве кнопку. Команда улетелоа в HA. Там запустилась автоматизация:

  • Колонка говорит «Измеряю темературу»

  • Ждет 5 секунд (к этом моменту пользователь уже должен держать градусник правильно некоторое время достаточное для корректного его нагревания).

  • Сообщает результаты измерения

Код

Скрытый текст
alias: Озвучить температуру по нажатию кнопки
description: При нажатии кнопки ждёт 5 секунд, читает температуру с датчика и произносит её
triggers:
  - type: turned_on
    device_id: f1c5a51417eb27d4e3791a13d371391b
    entity_id: a87a16acb3ad54aa3b026a59a8ebbd15
    domain: binary_sensor
    trigger: device
actions:
  - action: tts.speak
    target:
      entity_id: tts.google_translate_en_com
    data:
      cache: true
      media_player_entity_id: media_player.yandex_station_u00pty100m5svc
      message: Измеряю температуру
  - delay:
      seconds: 5
  - variables:
      temperature: >-
        {{ states('sensor.body_thermometer_body_temperature') | float | round(1)
        }}
  - action: tts.speak
    target:
      entity_id: tts.google_translate_en_com
    data:
      cache: true
      media_player_entity_id: media_player.yandex_station_u00pty100m5svc
      message: Температура сейчас {{ temperature }} градусов
mode: single

Так же есть простая автоматизация: при изменении значения сенсора проверяем, что значение валидное, приводим его к числу и дальше смотрим на пороги.

Если температура выше 38 °C — колонка может озвучить текущее значение.

Если выше 39 °C — сообщение становится более настойчивым. Это уже не просто «температура такая‑то», а предупреждение, что значение перешло в опасную зону и пора принимать решение: будить близкого человека, связываться с врачом или вызывать скорую.

Скрытый текст
alias: Непрерывное измерение температуры
description: Озвучить температуру и предупредить при превышении порога
triggers:
  - trigger: state
    entity_id: sensor.body_thermometer_body_temperature
    not_to:
      - unknown
      - unavailable
      - none
    not_from:
      - unknown
      - unavailable
      - none
conditions:
  - condition: template
    value_template: "{{ trigger.to_state.state | float(default=0) > 0 }}"
actions:
  - variables:
      temperature: >-
        {{ states('sensor.body_thermometer_body_temperature') | float | round(1)
        }}
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ temperature | float > 39 }}"
        sequence:
          - target:
              entity_id: tts.google_translate_en_com
            data:
              media_player_entity_id: media_player.yandex_station_u00pty100m5svc
              message: >-
                Внимание. Температура {{ temperature }} градусов. Температура
                выше тридцати девяти.
            action: tts.speak
      - conditions:
          - condition: template
            value_template: "{{ temperature | float > 38 }}"
        sequence:
          - target:
              entity_id: tts.google_translate_en_com
            data:
              media_player_entity_id: media_player.yandex_station_u00pty100m5svc
              message: Температура {{ temperature }} градусов.
            action: tts.speak
    default: []
mode: single

Почему это не медицинский прибор

Здесь важно сделать оговорку.

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

Поэтому такой прототип нельзя считать медицинским прибором.

Это скорее домашний мониторинг тренда: температура растёт, падает, стабилизировалась или ушла в опасную зону.

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

Версия 0.2: нормальный градусник вместо провода под мышкой

Когда мне стало немного полегче, я решил перейти от «ESP32, провод и датчик под мышкой» к более аккуратному варианту.

Под рукой был медицинский Bluetooth‑градусник RELSIB WT50. Это не реклама, а просто устройство, которое оказалось у меня дома (друзья подарили, когда я занимался IOT платформой) и хорошо легло в задачу: нормальный медицинский термометр (производитель заявляет, что нет никаких отклонений при сравнении с ртутными градусниками в отличии от цифровых, продаваемых в аптеках), Bluetooth, приложение для телефона и возможность получать температуру не глазами с маленького дисплея, а в цифровом виде.

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

Идеальный сценарий был таким:

  1. градусник измеряет температуру;

  2. данные попадают в Home Assistant;

  3. Home Assistant строит график и хранит историю;

  4. колонка может озвучить текущую температуру;

  5. при превышении порога срабатывает уведомление;

  6. при необходимости можно запустить заранее подготовленную автоматизацию.

Немного BLE: что именно я начал изучать

Для начала я накидал небольшой Python‑инструмент с GUI, который искал BLE‑устройства рядом и показывал данные, которые удавалось получить от термометра.

Тут важно не перепутать термины.

В BLE есть широковещательные пакеты — advertising packets. Именно по ним устройство можно обнаружить при сканировании. В бытовом смысле это и есть «градусник вещает в эфир: я здесь».

Но сами показания температуры в нормальной BLE‑модели обычно живут не просто в «каких‑то широковещательных данных», а в структуре GATT: сервисы, характеристики, уведомления/индикации.

В случае медицинских термометров есть стандартный профиль Health Thermometer Profile. Он описывает взаимодействие между термометром и устройством‑сборщиком данных.

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

Python GUI для разведки

Чтобы не писать сразу полноценную интеграцию, я начал с разведочного инструмента на Python.

Задачи у него были простые:

  • сканировать BLE‑устройства рядом;

  • находить градусник RELSIB WT50;

  • показывать advertising‑данные;

  • подключаться к устройству;

  • смотреть доступные GATT‑сервисы и характеристики;

  • получать температуру в итеративном режиме;

  • пробрасывать полученные значения дальше в Home Assistant.

Получился небольшой GUI‑инструмент для экспериментов: включаешь градусник, видишь его среди BLE‑устройств, подключаешься, смотришь, что приходит, и проверяешь, как эти данные можно превратить в нормальный сенсор Home Assistant.

Сканируем устройства

Сканируем устройства

Подключаемся к градуснику

Подключаемся к градуснику

Самопальный градусник, градусник WT50 и для сравнения коробок спичек.

Самопальный градусник, градусник WT50 и для сравнения коробок спичек.

Код пока не выкладываю — связался с производителем устройства, получил их локальный протокол не только Health Thermometer Profile, как только получу разрешение — добавлю ссылку на github.

На этом этапе мне было важно не «сразу сделать красиво», а понять главное:

  • как устройство называется в BLE‑сканировании;

  • какие сервисы и характеристики оно отдаёт;

  • нужно ли подключение;

  • приходят ли промежуточные значения температуры;

  • как часто обновляются данные;

  • можно ли стабильно прокидывать их в Home Assistant.

Прокидывание данных в Home Assistant через MQTT

Первые рабочие данные из Python‑приложения я прокидывал в Home Assistant через MQTT.

Мне не хотелось каждый раз вручную создавать сенсор в Home Assistant, прописывать configuration.yaml, перезапускать HA и потом проверять, правильно ли подтянулись значения. Поэтому я сделал self‑provisioning устройства: приложение само публиковало в MQTT не только значения температуры, но и конфигурацию для Home Assistant MQTT Discovery.

В итоге схема получилась такой:

В HA устройство отображается так

В HA устройство отображается так

То есть после запуска приложения Home Assistant сам видел новое устройство и создавал нужную сущность температуры.

Это оказалось очень удобно на этапе экспериментов: можно менять код, формат данных, имя устройства, топики и не тратить время на ручную настройку сенсоров.

В состояние можно отправлять не только температуру, но и дополнительные диагностические поля, которые полезны при отладке:

  • battery — если удаётся получить заряд;

  • rssi — уровень сигнала BLE;

  • updated_at — время последнего обновления;

  • служебные признаки подключения или ошибки чтения.

Для Home Assistant главным полем была температура. Но при разработке интеграции дополнительные поля очень помогают понять, что именно сломалось: градусник далеко, BLE‑соединение отвалилось, приложение не получает данные или MQTT не доставляет сообщения.

Почему MQTT

MQTT оказался удобным по нескольким причинам.

Во‑первых, Home Assistant хорошо умеет работать с MQTT Discovery. Это позволяет не городить отдельную интеграцию на первом этапе.

Во‑вторых, MQTT хорошо ложится на модель «есть внешний сборщик данных, который периодически публикует состояние».

В‑третьих, это удобно отлаживать. Можно отдельно смотреть:

  • видит ли приложение градусник;

  • публикует ли оно сообщения;

  • доходят ли сообщения до брокера;

  • создаётся ли сущность в Home Assistant;

  • обновляется ли температура в интерфейсе.

Для первого рабочего прототипа это сильно быстрее, чем сразу писать полноценную HACS‑интеграцию.

Что дальше: HACS и Bluetooth Proxy

Дома у меня уже есть несколько Bluetooth‑устройств, а также ESPHome Bluetooth Proxy на базе ESP32. Поэтому следующий логичный шаг — уйти от Python‑скрипта на рабочей машине и сделать нормальную интеграцию для Home Assistant.

План такой:

  • выпустить нативную интеграцию через HACS;

  • добавить поддержку RELSIB WT50;

  • сделать набор готовых пресетов автоматизаций;

  • поддержать сценарии голосового оповещения;

  • добавить пороговые уведомления;

  • по возможности использовать существующие ESPHome Bluetooth Proxy в качестве BLE‑шлюзов.

Отдельно я веду переговоры с производителем градусника о возможности получить полную спецификацию протокола. Если получится договориться, интеграция может стать не просто «мы посмотрели, что летит по BLE», а полноценной поддержкой устройства с нормальным описанием всех сценариев работы.

Почему это не только мой больничный pet‑проект

Чем дальше я это делал, тем больше убеждался, что задача шире, чем «один человек заболел и решил поиграться с ESP32».

У многих дома уже есть голосовые ассистенты: Алиса, Салют, Маруся и другие устройства. Они умеют ставить таймеры, включать свет, рассказывать погоду и управлять розетками. Но при этом сценарий «у ребёнка или взрослого высокая температура, надо удобно и безопасно её контролировать ночью» до сих пор часто решается стеклянным градусником и фонариком телефона.

У моего друга за последний год дети разбили два ртутных градусника. После этого, конечно, жизнь чему‑то научила: они купили уже не ртутный, а аналоговый градусник с безопасным наполнением. Но сама проблема никуда не делась.

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

А если устройство умеет передавать температуру в экосистему умного дома, сценарий становится совсем другим:

Мне кажется, крупным компаниям, которые развивают экосистемы умного дома и голосовых помощников — Яндекс, Сбер, VK и другим — стоило бы посмотреть в эту сторону.

Это не «ещё один гаджет ради гаджета». Это вполне практичный сценарий, который решает проблемы аналоговых устройств:

  • не нужно включать свет ночью;

  • не нужно читать мелкий дисплей;

  • не нужно помнить, когда было последнее измерение;

  • можно строить график температуры;

  • можно получать голосовые уведомления;

  • можно заранее настроить критические пороги;

  • можно снизить риск историй с разбитыми стеклянными градусниками;

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

Да, это не отменяет врача. Да, это не превращает умный дом в медицинскую систему. Но как бытовой инструмент контроля состояния — это очень понятный и полезный сценарий.

Эх где все это было, когда мы повально болели ковидом и лично у меня в больнице температуру мерили бесконтактным градусом, который говорил что у меня 36, хотя электронный термометр показывал больше 38...

Что получилось

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

Первый — совсем DIY:

ESP32-C3 + ESPHome + DS18B20 + Home Assistant

Он был быстрым, рабочим, но не очень удобным физически.

Второй — более правильный:

RELSIB WT50 + BLE + Python GUI + MQTT + Home Assistant

Он уже ближе к тому, как подобная система должна выглядеть для обычного пользователя.

И третий, пока планируемый:

RELSIB WT50 + Home Assistant HACS-интеграция + Bluetooth Proxy + автоматизации в HA

Вот это уже похоже на нормальный продуктовый сценарий.

Что я мог упустить

Я понимаю, что, возможно, уже существуют готовые решения, о которых я не знаю.

Возможно, кто‑то уже интегрировал подобные BLE‑градусники в Home Assistant. Возможно, есть более удобные устройства. Возможно, есть готовые медицинские термометры с открытым протоколом, нормальной интеграцией и поддержкой голосовых ассистентов. Возможно, я просто не нашёл их в момент, когда лежал с температурой и пытался соображать.

Поэтому буду рад комментариям.

Особенно интересно:

  • есть ли у вас опыт с подобными BLE‑градусниками;

  • какие устройства нормально интегрируются в Home Assistant;

  • есть ли открытые спецификации у медицинских термометров;

  • насколько вообще востребован сценарий голосового контроля температуры;

  • нужны ли готовые пресеты автоматизаций;

  • какие пороги и сценарии уведомлений вы бы считали разумными;

  • стоит ли делать отдельную HACS‑интеграцию или достаточно MQTT‑прокладки.

Важный дисклеймер

Всё описанное выше — не медицинская рекомендация и не замена врачу.

Автоматизация может помочь не забыть измерение, увидеть динамику и вовремя обратить внимание на опасный порог. Но решение о лечении, вызове врача или скорой помощи должно приниматься не Home Assistant, не ESP32 и не колонкой, а человеком с учётом медицинских рекомендаций.

Примечание об использовании ИИ

Черновик и редактура этой статьи частично готовились с использованием ИИ‑инструментов. Техническая реализация, факты, выводы, кодовые примеры и описанный опыт проверены автором.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

31.71%Да, я бы купил такое готовое устройство.13

36.59%Да, но только если оно работает без облака и с Home Assistant.15

17.07%Да, особенно для детей или пожилых родственников.7

12.2%Возможно, но мне хватит обычного электронного градусника.5

29.27%Нет, не вижу смысла.12

0%Уже использую похожее решение — расскажу в комментариях.0

Проголосовал 41 пользователь. Воздержались 8 пользователей.