вівторок, 20 вересня 2022 р.

[Home Assistant] Розумний дім без програмування або як я знайомився із Home Assistant.

Колись я зацікавився Home Assistant. Навіть встановив його на Raspberri Pi 2. Але на цьому спроба завершилась. Нещодавно вирішив спробувати знову, а також знайти корисну задачу для Raspberry Pi 2, який майже не використовувався. На зустрічі однієї із техноспільнот послухав розповідь про Home Assistant, які плагіни варто зразу встановити після його запуску. Додатково спитав, чи він працює на Raspberry Pi 2 і отримав стверджуючу відповідь. 

На сайті HomeAssistant відсутні образи під Raspberry Pi 2. То ж я вдався до так званого  методу supervised installation. Цей підхід також хороший тим, що з його допомогою можна встановити Home Assistant практично на будь-який комп'ютер із Debian-подібним Linux. Детальний опис знаходиться тут. Також він описаний у цьому блозі. Весь процес зводиться до попереднього встановлення потрібних бібліотек та Doker. 

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install jq wget curl avahi-daemon udisks2 libglib2.0-bin network-manager dbus apparmor -y
sudo reboot
curl -fsSL https://get.docker.com -o get-docker.sh
sudo usermod -aG docker pi

Далі необхідно завантажити і встановити агента для  Home Assistant OS

wget https://github.com/home-assistant/os-agent/releases/download/1.2.2/os-agent_1.2.2_linux_armv7.deb
sudo dpkg -i os-agent_1.2.2_linux_armv7.deb

Перевірити чи правильно агент встановився можна за допомогою команди

gdbus introspect --system --dest io.hass.os --object-path /io/hass/os

Нарешті можна перейти до завантаження безпосереднього скрипта інсталляції Home Assistant Supervised

wget https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
sudo dpkg -i homeassistant-supervised.deb

В процесі інсталяції він просить вибрати тип вашого комп'ютера. Raspberry Pi 2 підтримується. Після завершення інсталяції, відбувається перший запуск Home Assistant. Наберіться терпіння. він досить тривалий - до 20 хв. 

Далі вказуєте IP комп'ютера, на якому встановлено Home Assistant, та порт 8123 у браузері. Після появи повідомлення про підготовку запуску Home Assistant знову треба зачекати хвилин 20-30 хв. Тоді з'являється довгоочікуване запрошення для створення нового користувача, встановлення локації та відбудеться спроба пошуку уже існуюючих пристроїв у вашій мережі.

Для перших експериментів у мене були приготовані плати на esp8266 - Wemos D1 mini, а також шилди розширення до нього із давачем DHT11 та OLED дисплеєм. Вони доволі маленькі та легко збираються у "сендвічі" в залежності від потрібних вам давачів, актуаторів та засобів відображення. Я зібрав два таких "сендвічі". Один мінімальний, що складався із D1 mini та DHT 11 давача. Він отримав ім'я "temp-1". До другого "сендвіча" я додав ще й OLED дисплей для відображення даних і назвав його "temp-2".




На згаданій уже зустрічі техноспільноти для роботи із ESP рекомендували використовувати додаток (плагін) ESPHome та розширення HACKS. Перед експериментами із підлюченням щойно зібраних "сендвічів" потрібно їх встановити. 

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



Для встановлення додатків вибираємо меню "Конфігурація" та натискаємо на "Додатки". 



У новому ще чистому вікні тиснемо кнопочку "Магазин доповнень" Вибираємо ESPHome та встановлюємо.




При налаштуванні додатку бажано встановити запуск при старті та відображення на бічній панелі для зручності доступу.




HACS не додаток, а інтеграція і встановлюється із командної стрічки. Для цього потрібно мати SSH доступ до Home Assistant. Серед пропонованих додатків такий функціонал мають два: "Terminal & SSH" та "SSH & Web Terminal". Я спробував встановити обидва додатки. Другий у мене не запустився. Тому раджу користуватись першим "Terminal & SSH"



Після встановлення додатка та його запуску вводимо у командному рядку 

wget -O - https://get.hacs.xyz | bash -

Чекаємо завершення процесу встановлення.

Далі треба налаштувати інтеграцію. Вибираємо "Конфігурація", "Пристрої та сервіси" та тиснемо кнопку "Додати інтреграцію". У доволі великому меню, яке з'являється, скроленням щось знайти важко. Просто набираємо HACS у рядку пошуку і тиснемо на знайдений компонент. Далі треба виставити галочки. Хочете користуватись HACS - треба вибрати їх усі.
Після того, HACS захоче інтегруватись із вашим GihHub профілем
 



Клацаєм лінк. Якщо ви не авторизувались на GitHub, необхідно ввести логін та пароль


Лише після цього можна ввести код авторизації 


Далі авторизуємо HACS 


І насолоджуємось результатом

Тепер можна натиснути тут кнопку "submit"  чи її еквівалент
 

Та додати HACS у вашу кімнату 


Про цей довгий та нудний процес також можна прочитати також тут

Налаштовувати інтеграції навчились. Далі треба налаштувати інтеграцію для ESPHome. Це значно легше, бо не треба авторизуватись на GitHub. Знову вибираємо "Конфігурація", "Пристрої та сервіси" та тиснемо кнопку "Додати інтреграцію". У рядку пошуку тепер набираємо ESPHome і тиснемо на знайдений компонент. Далі ви вже маєте досвід.

Нарешті добрались до найцікавішого - конфігурації та прошиванню пристроїв. Натискаємо "ESPHome" та  "New Device".
 
 
При першому запуску можливо прийдеться ввести SSID та пароль до вашої WiFi мережі. Потім буде попередження про необхідність першої прошивки пристрою за допомогою USB кабеля.



Далі вводимо ім'я пристрою. Мій перший "сендвіч" називається "temp-1".


Далі необхідно правильно вибрати тип вашого пристрою (Wemos D1 & Wemos Di mini у моєму випадку)



Мінімальна конфігурація пристрою готова і вас просять її прошити (Install). Поки нічого не прошиваємо, просто натискаємо кнопку skip, адже треба ще налаштувати давачі.


Для цього натискаємо кнопку Edit біля об'єкта temp-1 та редагуємо текст. Детально конфігурація сенсора  DHT11 описана тут Мій конфігураційний файл виглядає ось так

esphome:
  name: "temp-1"
esp8266:
  board: d1_mini
# Enable logging
logger:
# Enable Home Assistant API
api:
  encryption:
    key: !secret temp_1_key
ota:
  password: !secret temp_1_ota_password
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: !secret temp_1_hotspot_ssid
    password: !secret temp_1_hotspot_password
captive_portal:
# Time from Home Assistant 
time:
  - platform: homeassistant
    id: esptime
    timezone: "Europe/Kyiv"
# Example configuration entry
sensor:
  - platform: dht
    pin: D4
    temperature:
      name: "Living Room Temperature"
      filters:
        - offset: -4.1
    humidity:
      name: "Living Room Humidity"
      filters:
        - offset: 13.0
    update_interval: 60s

Зверніть увагу на те, що уся чутлива інформація (логіни, паролі) зберігається окремо у файлі secrets. Його можна редагувати за допомогою кнопки SECRETS у правому верхньому кутку сторінки. Необхідна інформація підключається до конфігурації за допомогою директиви !<file_name> <variable_name>. 

Для роботи із сенсором DHT11 вказано тип  його платформи, пін, до якого він підключений та інтервал зчитування. Також надано імена давачам температури та вологості. Конструкція 

filters:
    -offset:

потрібна для калібрування давача.

Тиснемо у вікні кнопку "save", а потім "install". Підключаємо D1 mini до порта USB на Raspberry Pi та обираємо "Plug into the computer running ESPHome Dashboard".


Наступним обираємо запропонований порт


У вікні з'являються логи. При першому прошиванні конфігурації, генеруються файли вихідного коду, копіюються у окрему директорію. Туди також копіюються вихідні коди використаних бібліотек. Лише після цього починається процес компіляції, а згодом - прошивки. Після вже з'являються логи із прошитого пристрою, що намагається приєднатись до WiFi та передати покази термометра та гігрометра. Процес на Raspberry Pi 2 також доволі повільний. Необхідно запастись терпінням. 

Після прошивки та отримання нових даних від сенсорів у вас з'являються нові сповіщення


Якщо на них клікнути, можна прочитати повідомлення про знайдені нові пристрої.


 Клік на посиланні "Check it out" відкриває сторінку із наявними інтеграціями, на якій присутній об'єкт ESPHome із кнопкою "Налаштувати"


При натисканні на цю кнопку, ESPHome попросить ввести ключ шифрування для доступу до вашого давача. Це той самий, що вказаний у параметрі api:  encryption:    key: файла конфігурації давача.



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


Після цього я повторив конфігурацію\ прошивання для другого "сендвіча". Мій файл конфігурації для нього виглядає наступним чином.

esphome:
  name: temp-2
esp8266:
  board: d1_mini
# Enable logging
logger:
# Enable Home Assistant API
api:
  encryption:
    key: !secret temp_2_key
ota:
  password: !secret temp_2_ota_password
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: !secret temp_2_hotspot_ssid
    password: !secret temp_2_hotspot_password
captive_portal:
# Example configuration entry
sensor:
  - platform: dht
    pin: D4
    temperature:
      name: "Badroom Temperature"
      id: badroom_temperature
    humidity:
      id: badroom_humidity
      name: "Badroom Humidity"
    update_interval: 60s
# Time from Home Assistant 
time:
  - platform: homeassistant
    id: esptime
    timezone: "Europe/Kyiv"    
font:
  - file: 'gfonts://Roboto'
    id: font1
    size: 10
  - file: 'gfonts://Roboto'
    id: font2
    size: 20
  - file: 'gfonts://Roboto'
    id: font3
    size: 10
i2c:
  sda: D2
  scl: D1
  scan: true
display:
  - platform: ssd1306_i2c
    model: "SSD1306 64x48"
    reset_pin: D0
    address: 0x3C
    lambda: |-
      it.rectangle(0, 0, 64, 48);
      it.printf(10, 0, id(font1), "Badroom");
      // Print time in HH:MM format
      it.strftime(8, 10, id(font2), "%H:%M", id(esptime).now());
      // Print temperature
      if (id(badroom_temperature).has_state()) {
        it.printf(4, 32, id(font3),"%.1f°", id(badroom_temperature).state);
      }
      // Print humidity
      if (id(badroom_humidity).has_state()) {
        it.printf(32, 32, id(font3), "%.1f%%", id(badroom_humidity).state);
      }

Для роботи із OLED дисплеєм додано секцію display. Оскільки він підключений до плати за допомогою шини i2c, у файлі конфігурації присутня секція i2c, яка активує підтримку цієї шини на виводах D1 та D2. Для створення написів, описані необхідні шрифти у секції font. У прикладах зазвичай там вказують ttf шрифти. Але при завантаженні та застосуванні таких шрифтів, я постійно отримував помилку читання відповідних *.ttf файлів. То ж вирішив скористатись шрифтами від Google, які також підтримуються у цій ESPHome бібліотеках. Зверніть увагу, що давачі температури та вологості у цьому файлі конфігурації мають крім імені ще й ідентифікатор. Ідентифікатор дозволяє використовувати значення змінної при її відображенні на дисплеї, як це описано у секції конфігурації lambda. Після прошивання програмного забезпечення, OLED на другому "сендвічі" виглядає так


Джерело інформації по налаштуванню виведення інформації на дисплей, яким я користувався, знаходиться тут

Для перегляду графіків температури та вологості слід вибрати у бічній парені меню "Історія", вказати сенсори, якими цікавитесь та задати необхідний період часу.

 

Ну ось і закінчилось перше знайомство із Home Assistant. Вдалось налаштувати два давачі температури і вологості, не застосовуючи програмування. Тільки чистий DevOps.


вівторок, 20 жовтня 2015 р.

1.PSOC. Hello World.

З легкої руки Деніса Рітчі та Браяна Кернігана, усі програмісти починають свій шлях із програми, яка виводить на екран комп'ютера слова "Hello, world". Інженери, які починають працювати із мікроконтролерами, замість цього запалюють світлодіод. Я вирішив не ламати цю традицію і завантажив перший проект, який так і називається називається - Blinking Led.

четвер, 27 серпня 2015 р.

0.Пролог

Виникла в мене необхідність написати курс лекцій та лабораторних по PSoC4. Вирішив почати із перегляду 100 проектів. Для цієї платформи вони знаходяться тут. Перед тим, як завантажити їх звідти, я зайшов на сторінку Pioneer Kit , завантажив PSoc Creator та різні цікаві описи. 

Інсталяція софта пройшла без проблем, але довелось замовляти безоплатні ліцензії. Тобто, готуйтесь придумувати логіни та паролі і перевіряти пошту, щоб отримати серійники.

Наступного дня планував почати із проекту номер один, але життя внесло свої корективи - довелось трохи помордуватись побавитись із Arduino та різними графічними дисплеями . І тут я зрозумів, що цей блог буде не тільки про PSoC4, але й інші платформи, які зустрічатимуться мені на шляху. Добре, що не назвав його "100 проектів"...

Наступного разу почнемо із першого проекту - так званого "HELLO WORLD"  в світі ембедщини, електроніки та програмування...