Сообщество - Home Assistant

Home Assistant

21 пост 901 подписчик

Получаем погоду в Home Assistant c WS2032 с помощью rtl_433

Алоха, красноглазые! в этом посте я расскажу, как затащить данные с погодной станции на WS2032 в Home Assistant. данная статья не для новичков, подразумевается, что вы немного знакомы с linux (делать будем на нем) ну и docker надо, куда ж без него

Получаем погоду в Home Assistant c WS2032 с помощью rtl_433 Home Assistant, Погода, Длиннопост, Linux, Docker, 433mhz

а вот и эта продукция сумрачного китайского гения WS2302

История такова, что мне подарили эту погодную станцию и я ее в загородном доме долго использовал, но у нее только экран с цифрами есть, а как объединить ее и HA - понятных инструкций не было. ну поковыряв интернеты пару вечеров, я придумал как сделать. Вообще данный способ подходит для кучи устройств которые разговаривают по открытому протоколу на частоте 433 мгц, rtl_433 поддерживает дофига всякого

TL;DR

связка работает так - ws2032>usb radio >утилита rtl_433> очередь mqtt> home assistant

Погнали:

  1. покупаем на али погодную станцию на базе WS2032 их там довольно много, и вроде как они самые недорогие, есть варианты с со сбором воды и просто ветер и температура, так же потребуется usb радиоприемник типа soap-sdr (их великое множество, все немного качеством различаются я брал на RTL2838 DVB-T, самые дешманские работают не очень) и usb хаб с питанием.

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

    1. для работы rtl_433 потребуется конфиг файл, в нем очень важный момент - нужно будет указать окно девиаций частоты, поскольку станция дешманская и частота передатчика довольно заметно плавает, у меня заработало стабильно вот с таким конфигом (/etc/rtl_433/rtl_433.conf)

      device 0

      gain 0

      # default is "433.92M", other resonable values are 315M, 345M, 915M and 868M

      frequency 433.69M

      frequency 433.72M

      frequency 433.752M

      # default is "600" seconds, only used when multiple frequencies are given

      hop_interval 10

      ppm_error 0

      sample_rate 250k

      samples_to_read 0

      analyze_pulses false

      report_meta level

      report_meta stats

      report_meta time:usec

      report_meta protocol

      signal_grabber none

      output json

      convert si

      stop_after_successful_events false

      protocol 145 # WS2032 weather station

  3. запустить проверить можно вот таким способом

    /usr/bin/rtl_433 -F mqtt://127.0.0.1 1883 retain 1 events rtl_433/rtlsdr/event/21770 states rtl_433/rtlsdr/state/21770 -c /etc/rtl_433/rtl_433.conf

    в ответ должно получиться что то такое

Получаем погоду в Home Assistant c WS2032 с помощью rtl_433 Home Assistant, Погода, Длиннопост, Linux, Docker, 433mhz

как видно из выхлопа - приемник уcлышал погодную станцию, она передает раз в минуту и вывод в формате json

rlt_433 и контейнер с mqtt в моем случае на 1 хосте живут

4. далее нам нужен сервер очередей mqtt - проще всего использовать docker compose

вот их репозиторий со всей нужной обвязкой

services:

mosquitto:

image: eclipse-mosquitto:latest

restart: unless-stopped

volumes:

- ./config/:/mosquitto/config/:rw

- ./log/:/mosquitto/log/

- ./data:/mosquitto/data/

ports:

- 1883:1883

- 9001:9001

запускаем композ и смотрим что он начал слушать на порту 1883, рядом в соседнем терминале запускаем rtl_433 (потом можно будет написать systemd unit) - проверить что в mqtt что то пишется нам поможет утилита mqtt explorer - цепляемся к нашей очереди и смотрим события в ней

Получаем погоду в Home Assistant c WS2032 с помощью rtl_433 Home Assistant, Погода, Длиннопост, Linux, Docker, 433mhz

тут видно что используется 2 очереди event и state (остальные очереди в моем случае всякое остальное типа zigbee устройств) в очереди event можно понаблюдать как меняются данные,

5. раз данные обновляются стабильно, можно переходить к настройке Home Assistant - нам потребуется плагин для mqtt и немного допилить конфиг для того что бы направление ветра показывало не в градусах а в виде букв (N,S,W,E и тд)

сам плагин настраиваем что бы он слушал нашу очередь

Получаем погоду в Home Assistant c WS2032 с помощью rtl_433 Home Assistant, Погода, Длиннопост, Linux, Docker, 433mhz

тут надо указать ип адрес машины с mqtt

и указываем топик откуда получать данные

Получаем погоду в Home Assistant c WS2032 с помощью rtl_433 Home Assistant, Погода, Длиннопост, Linux, Docker, 433mhz

а тут надо указать топик который будем слушать

далее настраиваем configuration.yaml от HA (не забываем рестатануть HA и внимательно следим за идетнацией ямла - блоки sensor ws2032_extras и mqtt должны вроде как быть без отступов, но в вашем конфиге может быть иначе)

mqtt:

sensor:

- name: "village_outside_temp"

state_topic: "rtl_433/rtlsdr/event/21770"

unit_of_measurement: "°C"

value_template: "{{ value_json.temperature_C }}"

unique_id: village_outside_temp_id

- name: "village_outside_humidity"

state_topic: "rtl_433/rtlsdr/event/21770"

unit_of_measurement: "%"

value_template: "{{ value_json.humidity }}"

unique_id: village_outside_humidity_id

- name: "village_outside_wind_direction"

state_topic: "rtl_433/rtlsdr/event/21770"

unit_of_measurement: "deg"

value_template: "{{ value_json.wind_dir_deg }}"

unique_id: village_outside_wind_dir_deg

- name: "village_outside_wind_avg_spd"

state_topic: "rtl_433/rtlsdr/event/21770"

unit_of_measurement: "km/h"

value_template: "{{ value_json.wind_avg_km_h }}"

unique_id: village_outside_wind_avg_spd

- name: "village_outside_wind_max_spd"

state_topic: "rtl_433/rtlsdr/event/21770"

unit_of_measurement: "km/h"

value_template: "{{ value_json.wind_max_km_h }}"

unique_id: village_outside_wind_max_spd

- name: "village_outside_battery_ok"

state_topic: "rtl_433/rtlsdr/event/21770"

unit_of_measurement: "state"

value_template: "{{ value_json.battery_ok }}"

unique_id: village_outside_battery_ok

sensor ws2032_extras:

- platform: template

sensors:

ws2032_wdc:

unique_id: ws2032_wdc

friendly_name: "Wind: Direction (Cardinal)"

icon_template: mdi:weather-cloudy-arrow-right

value_template: >

{% set direction = ['N','NNE','NE','ENE','E','ESE','SE','SSE','S','SSW','SW','WSW','W','WNW','NW','NNW','N'] %}

{% set degree = states('sensor.village_outside_wind_direction')|float %}

{{ direction[((degree+11.25)/22.5)|int] }}

ws2032_ws_kmh:

unique_id: ws2032_ws_kmh

friendly_name: "Wind: Speed (km/h)"

icon_template: mdi:windsock

device_class: wind_speed

unit_of_measurement: "km/h"

value_template: "{{ states('sensor.village_outside_wind_avg_spd')}}"

ws2032_gs_kmh:

unique_id: ws2032_gs_kmh

friendly_name: "Wind: Gust Speed (km/h)"

icon_template: mdi:pinwheel-outline

device_class: wind_speed

unit_of_measurement: "km/h"

value_template: "{{ states('sensor.village_outside_wind_max_spd') }}"

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

Получаем погоду в Home Assistant c WS2032 с помощью rtl_433 Home Assistant, Погода, Длиннопост, Linux, Docker, 433mhz
Получаем погоду в Home Assistant c WS2032 с помощью rtl_433 Home Assistant, Погода, Длиннопост, Linux, Docker, 433mhz
Получаем погоду в Home Assistant c WS2032 с помощью rtl_433 Home Assistant, Погода, Длиннопост, Linux, Docker, 433mhz

Все, осталось только накинуть системд юнит в /etc/systemd/system/rtl_433.service примерно такой

[Unit]

Description=RTL_433 service script

StartLimitIntervalSec=5

Documentation=https://github.com/merbanan/rtl_433/README.md

After=syslog.target network.target

[Service]

Type=exec

ExecStart=/usr/bin/rtl_433 -F 'mqtt://127.0.0.1:1883,retain=1,events=rtl_433/rtlsdr/event/21770,states=rtl_433/rtlsdr/state/21770' -c /etc/rtl_433/rtl_433.conf

# Restart script if stopped

Restart=always

# Wait 30s before restart

RestartSec=30s

# Tag things in the log

# View with: sudo journalctl -f -u rtl_433 -o cat

SyslogIdentifier=rtl_433

StandardOutput=syslog

StandardError=syslog

[Install]

WantedBy=multi-user.target

не забываем сделать релоад системд и сказать нашему юниту enable ну и ребутнуть разок что бы проверить что все это хозяйство переживает рестарт

ВСЕ, ПОБЕДА!

Данный способ ни на что не претендует, но возможно, этот путь кому-либо пригодится, поскольку позволяет дальше домашнюю автоматизацию развивать - например, многие почвенные датчики для садоводов точно так же общаются на 433 и их точно также можно загнать в HA и настроить автоматический полив ну и прочее такое. Этот гайд подойдет далеко не всем, но поскольку у меня очень давно поставлен HA (помните эту проблему про разные регионы для устройств от Xiaomi?) то хотелось использовать именно его. Всем спасибо и удачных данных из радиоэфира!

Показать полностью 8

Home Assistant, modbus и водосчётчик VALTEC ПРОТЕЙ 15 RS485

Всем здравствуйте! Прошу сильно не пинать. я лишь только пока новичок. В общем такая проблема: Решил я в HA интегрировать водосчётчик VALTEC ПРОТЕЙ 15 RS485, по Modbus. Приоблёл USB-RS485 адаптер, вставил онный в сервер, нашел его в оборудовании, в configuration. yaml прописал modbus устройство,
modbus:
- name: modbus_hub
type: serial
port: /dev/ttyUSB0
baudrate: 9600
bytesize: 8
method: rtu
parity: E
stopbits: 1
sensors:
- name: Water meter
unit_of_measurement: "m³/h"
slave: 1
address: 89
count: 2
swap: word
input_type: holding
scale: 0.001
offset: 0
precision: 1
data_type: int32
device_class: volume
delay: 0
message_wait_milliseconds: 30
timeout: 5

ииии получил ошибку:
Регистратор: homeassistant. config
Источник: config. py: 1335
Первое сообщение: 14:00:11 (1 сообщений)
Последнее сообщение: 14:00:11

Invalid config for 'modbus' at configuration. yaml, line 24: Water meter: `count` illegal with `data_type: int32` 'modbus->0->sensors->0', got {'name': 'Water meter', 'unit_of_measurement': 'm³/h', 'slave': 1, 'address': 89, 'count': 2, 'swap': 'word', 'input_type': 'holding', 'scale': 0.001, 'offset': 0, 'precision': 1, 'data_type': 'int32', 'device_class': 'volume'}, please check the docs at https://www.home-assistant.io/integrations/modbus
Помогите пожалуйста!

Показать полностью

Помогите настроить modbus

Здравствуйте. Прошу помощи.
Пытаюсь настроить работу по Modbus: raspberry pi через платку RS485 CAN HAT (https://www.waveshare.com/wiki/RS485_CAN_HAT) должна общаться с платой реле Modbus RTU Relay 16CH (https://www.waveshare.…/Modbus_RTU_Relay_16CH). Файл на питоне работает, реле включаются и выключаются. А Home Assisistant Supervised ( ver 1.7.0) напрочь не хочет работать с modbus. Везде примеры только для USB-RS485 преобразователей .
Может есть какой-то секрет для активации GPIO-RS485 преобразователя в Home Assistant?


modbus:
- name: modbus_hub
type: serial
port: /dev/ttyS0
baudrate: 9600
bytesize: 8
method: rtu
parity: E
stopbits: 2

switches:
- name: Rele_1
scan_interval: 5
slave: 1
address: 1
command_on: 255
command_off: 0
unique_id: rele_WSH_switch_1
- name: Rele_2
scan_interval: 5
slave: 1
address: 2
command_on: 65280
command_off: 0
unique_id: rele_WSH_switch_2
- name: Rele_3
scan_interval: 5
slave: 1
address: 3
command_on: 0xFF00
command_off: 0
unique_id: rele_WSH_switch_3
- name: Rele_4
scan_interval: 5
slave: 1
address: 4
command_on: 1
command_off: 0
unique_id: rele_WSH_switch_4
- name: Rele_5
scan_interval: 5
slave: 1
address: 5
command_on: 255
command_off: 0
unique_id: rele_WSH_switch_5
- name: Rele_6
scan_interval: 5
slave: 1
address: 6
command_on: 0xFF
command_off: 0
unique_id: rele_WSH_switch_6


все эти варианты описани реле не работают

parity: ставил и E и N
stopbits: пробовал 1 и 2
baudrate: 9600 и 19200
port: /dev/ttyS0 правильный - в терминальном режиме без HA реле через него работает.

самый логичный вариант (по описанию hex -кодов реле) : address: 2 command_on: 65280
но и он не работает

Для включения первого реле должна отправляться команда 01 05 00 01 FF 00 DD FA, где 01 - номер релейного блока в линии, 05 - тип команды (запись в регистр управления реле), 0001 - номер реле, FF00 - команда включения реле. По журналу событий видно, что в любой ситуации вместо 05 отправляется 06, а это означает изменение скорости передачи. Как заставить home assistant правильно указывать команду 05?

Показать полностью

Пожалуйста, расскажите о правилах безопасности в интернете, которые вы соблюдаете

Запускаем приложения в android из Home Assistant

Запускаем приложения в android из Home Assistant Home Assistant, Android, Android TV, Длиннопост

Бывает что сели батарейки в пульте управления , хочется создать свой пульт для управления устройствами или вообще задействовать запуск приложений в своих автоматизациях на anandroid или android Tv, тогда можно для этого использовать данную инструкцию.

Во первых нам нужно подключить управление устройством к home assistant:

открываем в настройках устройства параметры разработчика и включаем "Отладка ADB"


  • Далее перейдите к своему экземпляру Home Assistant.

  • Откройте «Настройки» > «Устройства и службы» .

  • В правом нижнем углу выберите значок Кнопка «Добавить интеграцию» .

  • В списке выберите Android Debug Bridge .

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

В результате у Вас появится интеграция Android Debug Bridge с устройством к примеру media_player.bedroomtvconsole

На данном этапе Вы уже можете управлять устройством но действий довольно мало вкл/выкл, звук и т.д.

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

Или запустите приложение сами и в статусе объекта вашего ADB устройства в hass появится его название типа: org.xbmc.kodi

Или на самом устройстве откройте с помощью файлового менеджера папку Android>data там папки с установленными приложениями вот имя соответствующей папки и будет название приложения.

Далее в hass открываем панель разработчика>службы и вызываем службу, не забывая заменить имя приложения (в 3 местах) и объект вашего ADB устройства :


service: androidtv.adb_command

data:

command: >-

adb shell pm dump org.xbmc.kodi | grep -A 1 "MAIN" | grep

org.xbmc.kodi | awk '{print $2}' | grep org.xbmc.kodi

target:

entity_id: media_player.bedroomtvconsole


Переходим в панель разработчика>состояния и находим media_player.bedroomtvconsole

и в первой строке будет запись примерно такого вида: adb_response: org.xbmc.kodi/.Splash

вот "org.xbmc.kodi/.Splash" и искомые нами данные для запуска.

Используем их для запуска приложения:


service: androidtv.adb_command

data:

command: ' am start -a android.intent.action.VIEW -n org.xbmc.kodi/.Splash'

target:

entity_id: media_player.bedroomtvconsole

Если Вы все сделали верно то приложение запустится.

Ну и для создания пульта рекомендую интеграцию Android TV Remote Card

в ней добавляете свою кнопку таким путем:

custom_actions:

kodi:

icon: mdi:kodi

tap_action:

action: call-service

service: androidtv.adb_command

data:

command: ' am start -a android.intent.action.VIEW -n org.xbmc.kodi/.Splash'

target:

entity_id:

- media_player.bedroomtvconsole

Более подробная информация по использованию ADB

Показать полностью 1

Управление водяным теплым полом

Недавно делал управление водяным теплым полом через Home Assistant в своем доме, информация возможно пригодится таким же новичкам как и я.

В доме стоит гребенка примерно такого вида:

Управление водяным теплым полом Hass, Умный дом, Home Assistant, Отопление, Длиннопост

Цель была сделать регулировку всех зон без установки комнатных термостатов, т.е. без штробления стен ну и немаловажный фактор дешевизна конструктива)

по тому что мне понадобилось:

  1. Сервопривод с али 300-500 р.

    По приводам есть NC (Нормально закрытый) и соответственно NO (нормально открытый)

    отличаются поведением при подаче/отсутствии питания, к примеру я выбрал вариант NO - т.е. если на него не подавать питание то он будет открытым.

  2. Управляемое реле на 220 в. Можно wifi или ZigBee реле. Нужно столько, сколько у Вас будет зон для регулирования. на Али много вариантов по количеству реле в одном модуле но в документации Zigbee2Mqtt встречал что без проблемная поддержка до 12 реле. Я лично взял 1 4 канальное реле + 1 одноканальное. Цены от 300 до 2000 р.

  3. Ну и комнатные датчики температуры. Тут кто на что горазд хоть с датчиков движения снимайте температуру (Юмор, там очень не точно:-)

    Я в большинстве комнат стал использовать LYWSD03MMC прошитые в ZigBee. 200-600 р.

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

Ну а далее включаем питание на реле, сопрягаем с Z2M или ZHA. Идем в файл configuration.yamlи в нем добавляем термостат для каждого реле к которому подключен сервопривод:

Но тут сделаем небольшое отступление. Если Вы так же как и я выберете сервопривод нормально открытый, то в интерфейсе у вас будет все наоборот: включите реле - пойдет питание - сервопривод закроется а термостат будет показывать что отопление включится. Чтобы этого не происходило нужно сделать реверс выключателя, а потом именно на этот реверсный выключатель прописать термостат. Пример (так же в пишется в configuration.yaml)

(Если у Вас сервопривод NC то пропускайте раздел switch и пропишите только climate)

switch:

- platform: template

switches:

switch_heatbathroom_reversed:

value_template: "{{ is_state('switch.otoplenie_vannaia', 'off') }}"

turn_on:

service: switch.turn_off

data:

entity_id: switch.otoplenie_vannaia

turn_off:

service: switch.turn_on

data:

entity_id: switch.otoplenie_vannaia

climate:

- platform: generic_thermostat

name: ValveВанная (это название будет в HASS)

heater: switch.switch_heatbathroom_reversed (это объект выключателя реле)

target_sensor: sensor.temp_1_temperature (это объект температуры в комнате)

это практически минимальная конфигурация но вариантов настройки много (например по умолчанию поведение термостата такое: если Вы установите 22 гр. то он включится на обогрев когда будет 21,7 гр. и выключится при 22,3, это используется чтобы реле не слишком часто щелкало) подробнее тут:

https://www.home-assistant.io/integrations/generic_thermosta...

или гуглите Generic thermostat.

Перезагружайте HASS и добавляйте в интерфейсе термостат

type: thermostat

entity: climate.valvevannaia

show_current_as_primary: false

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

Показать полностью 1

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

Всем привет!
Подскажите, пожалуйста, установлен HA и подключен датчик расстояния.
Как можно сделать автоматизацию, точнее забирать информацию о расстоянии из HA в таблицу либо ещё куда?
Есть ли программы какие ? Или код на python?
Я просто не очень разбираюсь как можно забрать значения.
HA находится в одной сети, можно конечно и удаленно.

Автоматизация по будильнику на телефоне

Автоматизация по будильнику на телефоне Hass, Home Assistant, Умный дом

Если интересно, могу публиковать автоматизации и другие решения которые применяю в своем home assistant, к примеру:

В мобильном приложении включаем сенсор будильник, автоматизация будет работать по установленному у Вас времени будильника (если поменяете время или отключите будильник совсем то автоматизация и это отработает).

создаем автоматизацию с триггером:

trigger:

- platform: template

value_template: >-

{% set x = states('sensor.yurtaevalex_next_alarm') %} {% if x not in

['unavailable', 'none', 'unknown'] %} {{ now() >= x | as_datetime |

as_local - timedelta(seconds=10) }} {%else%} False {% endif %}

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

- service: tts.google_say

data:

entity_id: media_player.kodi_5613f38a9c916e6cfd078d90faeabb62

message: >-

" ., Доброе утро. Сегодня {% set day_num =

["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота",

"Воскресенье"] %}{% set day_of_week = day_num[now().weekday()] %}{{

day_of_week }}. Текущее Время "{{ states('sensor.time')

}}". Температура на улице ощущается как {{

states('sensor.yandex_weather_feels_like_temperature')

}}Градусов. Хорошего дня"

enabled: true

Показать полностью

Освещение с датчиком движения

Приглашаю обсудить такую вещь

Поиском в интернете находится куча примеров, но они все по сути однотипные

При сработке датчика - включить свет
при отсутствии движения подождать, у кого то 3 минуты, у кого то 15 и выключить свет

Есть ещё вариант включить на час, потом уже ожидать отсутствия движения.

Как по мне все это не то - завязка на какое либо деление время, которое иногда не подходит, или часто не подходит.

Пока вижу такой вариант:
Если выключатель включён - ничего не делать.
Если выключатель выключен, то при сработке включить свет / При отсутствии движения - выключить. (Где-то здесь возможен таймер)

Таким образом при кратковременных посещениях свет будет по датчику, если же планируется долгое пребывание - реакции на датчик нет.

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

Вопрос
1. Можно ли получать именно состояние входа реле, а не состояние "выхода", если да, это могут все или какие либо отдельные модели отдельных производителей
2. Возможно кто-то предложит иное решение с аналогичным функционалом.

Показать полностью
Отличная работа, все прочитано!