Розумна хатинка – OpenHAB

Виникла в мене ідея автоматизувати квартиру. В інтернеті є безліч готових варіантівю Дуже гарний перелік ви можете знайти за цим посиланням.

У тестовому варіанті ми зробимо вмикання вимикання світлодіода, та отримання рівня температури та вологості. У якості ядра розумної хатинки будемо використовувати OpenHAB, протокол обміну – ModBus. Повна схема буде виглядати так:

 

Для повторення всього, про що піде мова далі вам необхідно мати:

Програмне забезпечення

  • AtmelStudio, WinAVR чи щось інше, що надає можливість компілювати с код для мікроконтролерів Atmel (я використовував WinAVR-20100110)
  • OpenHAB

Апаратне забезпечення

  • Будь-що з підтримкою java
  • USB to RS2485 converter
  • AVR програматор
  • AT90S8515 (ви можете використовувати будь який інший, в мене просто є купа таких)
  • кілька резисторів 4К7
  • кнопка
  • світлодіод
  • монтажна плата
  1. Встановлення та конфігурація OpenHAB

Для встановлення OpenHAB його треба скачати та розпакувати. На цьому інсталяція завершена та можна починати його конфігурувати.

Конфігурування розширення Modbus

Для цього треба створити файл conf/services/modbus.cfg

У моєму випадку AVR було підключено до порта COM3

Створюємо items.

Для цього треба створити файл  conf/items/modbus.items

Створюємо sitemap

Після цього треба сконфігорувати Classic-UI

Створюємо правило щоб обробляти команди від кнопки

 

2. Створюємо апаратну частину.

Принципова схема

Повинно вийти щось таке:

 

3. Компілюємо програму

Для компілювання вам буде потрібна бібліотека ModBus.

Після компіляції прошиваємо мікроконтролер, та запускаємо усе. Повинно вийти щось таке:

Якщо щось не працює вам може допомогти

QModBus – додаток для тестування роботи шини. Дозволяє надсилати команди пристроям та дивитись відповіді.

Після міграції всього на Raspberry Pi можна отримати таку конфігурацію:

2 пристроя на шині ModBus, OpenHAB на Rasbrerry Pi.

Один має датчик температури та вологості, лампу та кнопку. Інший має тільки кнопку та лампу.

 

Вставлення SSTP з’єдняння на OS X

Іноді буває так, що е непоганий комп’ютер з поганою операційною системою яка не підтримує SSTP з’єднання.
Щоб все-ж таки встановити це з’єднання вам треба:
1. Встановити sstp-client
2. Виконати команду:

3. Перевірити що з’єднання встановлено:

4. Додати маршрути

 

 

Windows – автоматичне додавання маршрутів при встановленні VPN з’єдняння

Нажаль не усі VPN сервери дозволяють сконфігуровати маршрути для клієнтів.  У такому разі кожного разу клієнт має додати маршрути до необхідних мереж після встановлення з’єдняння. Windows дозволяє автоматизувати цей процес. Щоб зробити це необхідно запустити powershell з дозволами адміністратора. Та виконати таку команду:

Після цього маршрут 10.78.0.00/16 буде доданий автоматично після встановлення з’єднання з іменем vpn-name

Docker containers with Vagrant – частина друга.

Щоб запустити якись додаток у контейнері, цей додаток спочатку треба створити. Створимо простий додаток, котрий буде мати підключення до бази даних MongoDB та дасть змогу щось до неї писати та читати записане. А у наступному записі ми створемо 2 контейнери – один з базою даних, інший з додатком.

Створюємо простий додаток з використанням Spring Boot.

1. Створюємо об’єкт, котрий будемо зберігати у базі даних


2. Створюємо інтерфейс для бази даних

3. Створюємо контролер

4. Створюємо клас щоб виконати додаток

5. Створюємо фай конфігурації

6. Створюємо конфігурація для maven

Тепер це можна запустити додаток за допомогою команди

Тепер можна відкрити браузер та перейти за посиланням http://localhost:8080/demo/ та побачити таку відповідь:

demo-page-1

Незважаючи на помилку, усе працює нормально. У цьому додатку немає функції, яка обробляє такий запит.

7. Наступним кроком додаємо до цього проекту документацію, яка буде сгенерована автоматично за допомогою бібліотеки Swagger

додаємо наступні рядки до файлу pom.xml

Та додаємо файл конфігурації Swagger

8. Тепер можна запустити додаток за допомогою тієї самої команди

та перейти за посиланням http://localhost:8080/swagger-ui.html та навіть за допомогою Swagger спробувати відправити запит до додатка. У відповідь через деякий час ми отримаємо помилку. Це нормально, бо бази даних в нас досі немає.

demo-page-29. Наступним кроком підготуємо наш додаток для запуску у контейнері. Для цього додаємо у конфігурацію pom.xml плагіни, котри зберуть усі бублиотеки у теку /lib та створять jar файл, котрий можна запускати.

10. Виконуємо команду

після цього у теці /target можна буде побачити файл docker-demo-0.0.1-SNAPSHOT.jar та теку /lib з усіма бібліотеками, які необхідні цьому додатку.

 У наступній частині ми створимо контейнер до docker та запустимо додаток у образі, котрий було зроблено у частині першій.

Docker containers with Vagrant – частина перша.

Vagrant це додаток, який дозволяє автоматизувати створення якогось, заздалегідь сконфігурованного середовища.

vagrant-image-1Наприклад за допомогою команди

Vagrant знайде образ операційної системи, зробить нову віртуальну машину, встановить в неї Docker та запустить 2 Docker контейнера. Система для тестування готова

У ціїй статті буде розказано як створити контейнер Vagrant, як зробити простий додаток на Java та помістити його у docker контейнер та як запустити віртуальну машину та 2 докер контейнера у неї за допомогою однії єдиної команди.

 Вимоги

  • OS Windows 10 PRO з ввімкненим Hyper-V. (Можна використати також virtualbox чи Ubuntu з virtualbox, навіть айХрень можна, алл усі приклади наведені саме для Windows 10 + Hyper-V).
  • Java 8 + Maven
  • Vagrant (https://www.vagrantup.com/ на момент строрення цього запису актуальним був 1.8.5)
  • Остання версія Ubuntu у вигляді iso образу
  • трохи інтернету
  • Базові знання у створенні віртуальних машин за допомогою Hyper-V manager, робота з ними у Virtual Machine Connection tool
  • Базові знання у роботі з bash, sh чи іншою командною оболонкою
  • Базові знання програмування на Java

Створення контейнера до Vagrant

Vagrant контейнер  це образ операційної системи у якої буде запускатись docker та усі докер контейнери. Основні ідеї для створення контейнера було узято тут

1. Створюємо нову віртуальну машину та встановлюємо Ubuntu

  • Type: generation 1
  • RAM: 1024 Mb
  • HDD: 30-50 Gb
  • user: vagrant
  • password: vagrant

2. Відкриваємо консоль встановленої системи за допомогою Virtual Machine Connection tool

3. Встановлюємо пароль користувача root as vagrant:

4. Дозволяємо користувачу vagrant використовівати sudo без пароля:

додаємо рядки –

5. Тестуємо чи може користувач vagrant використовувати sudo без паролю:

система  не повинна спитати пароль при виконанні цієї команди.

6. Оновлюємо операційну систему

7. Встановлюємо ключ Vagrant

8. Встановлюємо ssh сервер, якщо це не було зроблено під час встановлення ОС

9. Редагуємо файл конфігураціі ssh

Додаємо чи знаходимо та знимаємо коментарій з рядку:

10. Перезавантажуємо ssh сервер

11. Встановлюємо hyper-v integration services. Деталі можна знайти за посиланням

Після цього перезапускаємо віртуальну машину.

У Hyper-V management console ви повинні побачити ip адресу, яка була надана цієї віртуальній машині. Якщо це не так, то  можливо щось змінилося та треба шукати як виправити проблему. Поки ця проблема не вирішена продовжувати не можна, бо Vagrant не буде знати куди підключатися.

12. Редагуємо файл /root/.profile

Змінюємо рядок mesg n || true на tt y-s && mesg n || true

Зміна рядка актуальнф на момент написання цієї статті, можливо у подальшому це буде виправлено у Ubuntu чи у Vagrant. Навіть якщо виправлять, нічого поганого від цього не станеться.

13. Вимикаємо віртуальну машину

14. Експортуємо віртуальну машину до будь-якої теки.  У цієї теці буде створена наступна структура:

Теку SnapShots одразу видаляємо.

15. Готуємо вміст контейнера до Vagrant

Windows 10 має формат файлу віртуальної машини, котрий не підтримується Vagrant на час написання запису, тому такий файл треба зробити для Vagrant

У будь-яку теку кладемо файл generate_vm_xml_config.ps1 та запускаємо у powershell консолі

vagrant-dev-source – ім’я віртуальної машини у hyper-v

e:\box.xml – файл конфігурації віртуальної машини, його треба буде покласти до теці Virtual Machines

Також у теку в котрій знаходиться папка Virtual Machines покладемо файл metadata.json з наступним вмістом:

16. Створюємо Vagrant контейнер Запускаємо Ubuntu shell (чи будь-який shell котрий підтримує команду tar) у теці з віртуальногю машиной (у прикладу це тека E:\HashiCorp\boxes\image-source\image) та виконуємо команду:

Буде створено файл vagrant-hyper-v.box який й є контейнер для Vagrant.

17. Тестуємо контейнер

При виконанні цих команд у Hyper-V manager ви повинні побачити нову віртуальну машину. З останньою командою ви повинні потрапити на цю віртуальну машину. Якщо це так – усе працює.

Ви можете залишити цей образ локально чи навіть викласти до публічного доступу. Для цього треба буде завести обліковий запис тут