Статья

Переезд с Home assistant на Spruthub

Всегда мечтал о добавлении ума своему дому. Помнится когда то давно была проводная технология X10. Это когда устройства обменивались по сетевым проводам. Девайсы стоили овердофига. Я даже один, леграндовский вроде, купил. На этом все и заглохло.Несколько раз пытался вернуться к этой теме. В конце концов остановился на системе Home assistant. И хотя я совсем не программист, разобраться в ней для меня оказалось не так уж сложно. Потом пошли девайсы на Esphome. И дом начал обрастать всякими управляемыми  штучками. При всех своих достоинствах, у HA есть и куча недостатков. И периодическая боль, когда после очередного обновления все идет наперекосяк. А недавно я приобрел Sprut.hub. Сервер умного дома, который умеет работать локально, имеет множество интеграций. Сначала конечно он был на некоторое время забыт. За это время пару обновлений прилетело. И наконец то я решил переезжать. Так исторически сложилось, что у меня нет ни одного девайса на Zigbee. На данный момент работаю над устранением этой досады. Но я не об этом. Как включить в прошивке MQTT известно. Проблем с этим не возникло. В самом хабе  нужно сначала создать и включить контроллер MQTT. Дальше идем в вики и смотрим какие шаблоны есть. В основном датчики. И есть интеграция BLE шлюза. Отлично с него и начнем. В вики написано, для того чтоб устройство определилось, нужно добавить префикс spruthub_ к имени. Esphome кстати не любит символ подчеркивания, и сразу ругается, но скомпилить даёт. (Кстати в вики этот момент исправлен, теперь там написано что префикс нужен spruthub-. Похоже скоро опять перепрошивать девайсы. В чатах кстати проскальзывало, что скоро будет HA discovery, так что надеюсь до нового года девайсы EspHome  будут залетать нативно. Вносим поправки в код: добавляем префикс к имени, кстати, так как поменялось имя, то обязательно в разделе wifi надо добавить use_address и указать старое имя, чтоб компилятор нашел. У меня все девайсы сидят на фикированных IP поэтому я указал его. Комментим раздел api, и добавляем раздел mqtt.

auto
Копировать
esphome:
  name: spruthub_bletracker
  comment: "134"
  
esp32:
  board: esp-wrover-kit
  framework:
    type: esp-idf
    version: latest
  

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  use_address: 192.168.168.167
  
  manual_ip:
    static_ip: 192.168.168.167
    gateway: 192.168.168.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Bletracker Fallback Hotspot"
    password: "123456789"

logger:

# Enable Home Assistant API
#api:
#  password: "tracker"

mqtt:
  broker: 192.168.168.168
  port: 44444  
  discovery: false
  reboot_timeout: 0s

Компилим и обновляем прошивку теркера. В логе пишется об успешном подключении к mqtt. Далее идем в спрутхаб. Заходим в настройки, и там выбираем контроллеры:

Перезапускаем контроллер нажатием желтого треугольничка. И видим что появилось новое устройство bletracker/lywsd03mmc. Далее переходим в раздел устройства, и видим что появились новые устройства.
У меня 4 таких датчика, соответственно их появилось 4 комплекта. Далее долгим тапом по плитке датчика, заходим в свойства, выбираем настройки, и указываем комнату в которой находится датчик.

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

auto
Копировать
{
  "name": "Датчик давления температуры",
  "manufacturer": "ESPHome",
  "model": "SHT20",
  "services": [
    {
      "type": "TemperatureSensor",
      "characteristics": [
        {
          "type": "CurrentTemperature",
          "link": {
			"topicSearch": "spruthub-(.*)/sensor/sht20_temperature/state",
            "topicGet": "spruthub-(1)/sensor/sht20_temperature/state"
          }
        }
      ]
    },
    {
      "type": "HumiditySensor",
      "characteristics": [
        {
          "type": "CurrentRelativeHumidity",
          "link": {
            "topicGet": "spruthub-(1)/sensor/sht20_humidity/state"
          }
        }
      ]
    },
	{
      "type": "C_AtmosphericPressureSensor",
      "characteristics": [
        {
          "type": "C_CurrentAtmosphericPressure",
          "link": {
            "topicGet": "spruthub-(1)/sensor/sht20_pressure/state"
          }
        }
      ]
    }
  ]
}

Есть маленький нюанс: датчик давления у меня bme280, и он есть в шатных шаблонах. Но тогда он в хабе будет как отдельное устройство. Поэтому я его обозвал в прошивке esphome как sht20_pressure. И вуаля, все три датчика вместе: 

С датчиками разобрались. Следующие на очереди выключатели света. И вот тут ожидал подвох: в mqtt компонент light общается с помощью json. Я не стал с этим долго разбираться, просто в прошивке исправил light на switch. Дальше написал шаблон: 

auto
Копировать
{
  "manufacturer": "Gelmer",
  "model": "ESPhome",
  "status": "Done",
  "services": [
	{
      "type": "Switch",
      "characteristics": [
        {
          "type": "On",
          "link": {
            "type": "String",
            "topicSearch": "spruthub-(.*)/switch/(.*)/state",
            "topicGet": "spruthub-(1)/switch/(2)/state",
            "topicSet": "spruthub-(1)/switch/(2)/command",
            "map": {
              "false": "OFF",
              "true": "ON"
            }
          }
        }
      ]
    }
  ]
}

Перезагрузил шаблоны, дернул контроллер, и свич появился в интерфейсе как выключатель. И вот здесь меня ждал облом. Статус девайса видит, но не управляет. MQTT explorer говорит что топик command с хаба идет. В логах esphome пусто. Очень долго я ковырялся с этим. В конце концов выработался алгоритм: нужно выключить и включить сеть wifi чтоб девайс переподключился без перезагрузки. После этого дергаем контроллер и, о чудо, можем управлять свичом из хаба. Я перепробовал множество вариантов от ресета хаба, до дергания девайса по питанию. Алгоритм стопроцентно таков как я описал выше. Забегая вперед скажу что все мои девайсы начали управлятся только после таких действий. Кстати в чатах как то были споры по поводу домофона, что в прошивке нужно включать в топиках retain, но в esphome  он по умолчанию включен. Видимо эта проблема и была. Какая то особенность в esphome видимо. Перепрошил все выключатели, и они успешно переехали в хаб. Следующим у меня был кондиционер, о нем я тоже писал статью. Опять же esphome управляется по ИК. Шаблон для него я подсмотрел у Cool.stick.

auto
Копировать
{
  "manufacturer": "Gelmer",
  "model": "ESPhome",
  "status": "Done",
  "services": [
	{
      "type": "Thermostat",
      "characteristics": [
	    {
          "type": "TargetTemperature",
          "link": {
            "type": "String",
            "topicSearch": "spruthub-(.*)/climate/(.*)/target_temperature/state",			
            "topicGet": "spruthub-(1)/climate/(2)/target_temperature/state",
			"topicSet": "spruthub-(1)/climate/(2)/target_temperature/command"
          },
          "minValue": 17,
          "maxValue": 30,
          "minStep": 1		  
        },	
	    {
          "type": "CurrentTemperature",
          "link": {
            "type": "String",
            "topicGet": "spruthub-(1)/climate/(2)/current_temperature/state"
          }
        },		
        {
          "type": "TargetHeatingCoolingState",
          "link": {
            "type": "String",
            "topicGet": "spruthub-(1)/climate/(2)/mode/state",
			"topicSet": "spruthub-(1)/climate/(2)/mode/command",      
            "map": {
              "OFF": "OFF",
              "HEAT": "HEAT",
			  "COOL": "COOL",
			  "AUTO": "AUTO",
			  "FAN_ONLY": "FAN_ONLY",
			  "DRY": "DRY"
            }			
          }
        },	
        {
          "type": "CurrentHeatingCoolingState",
          "link": {
            "type": "String",
            "topicGet": "spruthub-(1)/climate/(2)/mode/state"      
          }
        },			
        {
          "type": "C_FunSpeed",
          "link": {
            "type": "String",
            "topicGet": "spruthub-(1)/climate/(2)/fan_mode/state",
			"topicSet": "spruthub-(1)/climate/(2)/fan_mode/command", 
            "map": {
              "AUTO": "AUTO",
              "LOW": "LOW",
			  "MEDIUM": "MEDIUM",
			  "HIGH": "HIGH"
            }			
          }
        },	
        {
          "type": "SwingMode",
          "link": {
            "type": "String",
            "topicGet": "spruthub-(1)/climate/(2)/swing_mode/state",
			"topicSet": "spruthub-(1)/climate/(2)/swing_mode/command",
            "map": {
              "OFF": "OFF",
              "SWING_ENABLED": "SWING_ENABLED",
			  "SWING_HORIZONTAL": "SWING_HORIZONTAL",
			  "SWING_VERTICAL": "SWING_VERTICAL"
            }				
          }
        }		
      ]
    }
  ]
}
Перепрошиваем, гасим и включаем wifi, деграем контроллер. И кондиционер в хабе. Полностью управляем, статусы прилетают.

Ну и оставшийся девайс конечно же умный домофон, от одного известного проекта )) Я долго с ним тянул, потому как в НА у меня он оповещал в телегу с фотографией (об этом тоже есть статья). Автооткрытие включалось по местоположению через приложение, ну и диалог в Алисе на открытие домофона был.
Шаблон к нему сделан главным тестировщиком @bigmanekb. Залетел в хаб без проблем. Правда немного шаблон я доработал. У меня к плате домофона подключен датчик открытия двери (геркон) и датчик открытия замка (тоже геркон). Ещё в нём же датчик движения.

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

Вроде бы всё. Но выключатели вместо лампочек не давали покоя. Решил разбираться с json. Перепрошил один из выключателей с компонентом light. С помощью MQTT explorer стал разбираться со структурой топика. Причем компонент лампочки может быть представлен в нескольких разных типах. Собрал топики в табличку по типам компонента:

auto
Копировать
RGB
{
  "color_mode": "rgb",
  "state": "OFF",
  "brightness": 255,
  "color": {
    "r": 255,
    "g": 255,
    "b": 255
  }
}

Monochromatic

{
  "color_mode": "brightness",
  "state": "OFF",
  "brightness": 255,
  "color": {}
}

Binary

{
  "color_mode": "onoff",
  "state": "OFF",
  "color": {}
}

Color temperature

{
  "color_mode": "color_temp",
  "state": "OFF",
  "brightness": 255,
  "color": {},
  "color_temp": 152
}

cold White warm white

{
  "color_mode": "cwww",
  "state": "OFF",
  "brightness": 255,
  "color": {
    "c": 255,
    "w": 255
  }
}

Начал изучать тему, и писать шаблон. Здесь конечно случился казус, я как то случайно умудрился в процессе исправления шаблона сохранить его содержимое в шаблон датчиков. И, блин, меняю что нибудь в шаблоне, а в хабе ничего не меняется, весь мозг сломал. Ребят в каналах дергал. Пока не обратил внимание что один из датчиков отвалился. Получается применялся другой шаблон )) Потом снова казус: topicGet сделал с тире, а topicSet с символом подчеркивания. Косяк который в глаза не бросается но нервы портит). В общем в результате долгих разборок получился такой шаблон: 

auto
Копировать
{
  "manufacturer": "Gelmer",
  "model": "ESPhome",
  "status": "Done",
  "services": [
    {	
	  "type": "Lightbulb",
      "characteristics": [
        {
          "type": "On",
          "link": {
            "type": "String",
            "topicSearch": "spruthub-(.*)/light/(.*)/state",
            "topicGet": "spruthub-(1)/light/(2)/state",	
            "topicSet": "spruthub-(1)/light/(2)/command",
			"inFunc": "JSON.parse(value).state === 'ON'",
			"outFunc": "value ? JSON.stringify({state: 'ON'}) : JSON.stringify({state: 'OFF'})" 
          }
        },
		{
          "type": "Hue",
          "link": {
            "type": "Color",
            "topicGet": "spruthub-(1)/light/(2)/state",
            "topicSet": "spruthub-(1)/light/(2)/command",
            "inFunc": "JSON.parse(value).color",
			"outFunc": "JSON.stringify({color: value})"
          }
        },
		{
		  "type": "Brightness",
		  "link": {
			"type": "String",
			"topicGet": "spruthub-(1)/light/(2)/state",	
            "topicSet": "spruthub-(1)/light/(2)/command",
		    "inFunc": "JSON.parse(value).brightness",
            "outFunc": "JSON.stringify({brightness: value})",
            "maxValue": 255
          }
        },
        {
			"type": "Saturation"
        }			
      ]
	}
  ]
}

Лампочка включается и управляется яркость. Цвет пока не победил. И то что есть в шаблоне это один из множества вариантов, и к сожалению не работает. И на том спасибо. Лампочки теперь в интерфейсе лампочки. На будущее конечно хочется использовать параметр color_mode и включать отображение нужных параметров в интерфейсе. Думаю в конце концов допилим совместными усилиями.Вердикт таков: Esphome прекрасно залетает в хаб. Вполне можно юзать. В чатах часто просят поддержку WiFi в хабе, вот она пожалуйста!
Надо сказать что есть и другие прошивки под Esp:  Espeasy, Tasmota, HAA Ravencore. Из них первые два работают с MQTT, а последняя нативно залетает в Хоум кит. Так что такие девайсы можно подтянуть обратным ХК. Но это уже другая тема.

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


Поздравляю! Это хорошо, что вы используете не так много различных устройств в ХА, отсюда судя по статье и переход проще. Я бы тоже хотел так, но слишком много не поддерживаемых устройств ещё, и самое главное, мне нравится как приложение ХА может вытянуть данные из любого гаджета на андроиде
Автор пишет что не умеет программировать. Но как назвать его скилл судя по статье? Любой другой человек не умеющий программировать ничего в ней не поймет. ¯\_(ツ)_/¯
отож))
а что за трекер и чего он делает вообще ? :)) можно про него подробнее? И кстати шаблон то свой засвети под домофон :)) вдруг интереснее штатного будет? :))
Это скорее не трекер а шлюз, через него блютузные сяомишные девайсы залетают. https://esphome.io/components/esp32_ble_tracker.html
Кстати он видит miband как бинарный датчик, и его можно добавить в шаблон, и использовать в автоматизациях.
А в шаблоне отличие только в добавленном lightbulb. Вечером скину в группу шаблоны
на самом деле вы бы там прошивку подновили чтобы настройки задавались integer и чтобы не было этого срама с кучей нулей в настройках СХ :)))
Получается шаг в сторону по списку устройств = шаманство для интеграции железки в систему.
Ну это если у тебя нештатные железки. С выключателями и кнопками никаких проблем.
Надо учитывать что я жуткий DIY-щик, и у меня нет штатных железок.)) Поэтому практически все мои железки это шаг в сторону.
Крутая статья, в клубе ХА потеряли бойца! + 1 в Клубе SH
Ильмир, а почему именно СХ? Чем он лучше?
Поднимать ХА после обновлений замаялся? Так у EspHome тоже, бывает, апдейты рушатъ многое...
ХА конечно хорош, много возможностей даёт, но про обновления это да, есть такое. Мало того даже было пару раз когда обновлял линукс на сервере и всё рушилось. С esphome то же самое. Поэтому буду постепенно переходить на зигби.
А Спрутхаб выбрал, за то что это законченное коробочное решение. После обновлений системы становится удобнее и лучше в работе.
Это ж чего курить надо что бы за коробочку стоимостью 1500р отдать 17000, не ну я понимаю думали думали , но не так же .
и откуда вы берете только эту стоимость 1500 рублей за коробку? :)))
А это ему с дивана виднее. Если бы он умел что-то делать, то он бы сделал коробку, написал бы систему управления УД, и продавал бы её за 1500 🤣🤣🤣
вононоче :))))
Вопрос, ответ на который не увидел: кондиционер после переезда в/на спрут работает с ним на прямую или же через ха? Мам хочу поменять умный пульт на wi-fi модуль для кондиционера и подключить к спруту
ХА я сразу снёс. ХК у меня нет.)
А кондиционер управляется.
И через спрутхаб и через алису

Вернуться назад
Вернуться назад