Как построить самую надежную и безопасную систему домашней автоматизации

1656529465 kak postroit samuyu nadezhnuyu i bezopasnuyu sistemu domashnej avtomatizaczii

автор Амир Офф

cyClBmskHC3NlboZtYPuo6nCO5I8WojWwPay
Источник изображения: ID 50165322 © Bakhtiar Zein | Dreamstime.com

В этой статье я расскажу, как я построил систему автоматизации умного дома из Angular и Node.js на Raspberry Pi, не полагаясь на какие-либо внешние облачные сервисы.

Введение

В последние несколько дней я провел несколько ночей, разрабатывая и разрабатывая систему домашней автоматизации на основе JavaScript с использованием Angular и Node.js. И, как и любой другой проект, планирование предполагало глубочайшее исследование в Интернете.

Оказалось, что в море много рыбы – много решений по поводу того, как реализовать систему домашней автоматизации. Некоторые предлагают платные услуги в облаке, а другие объясняют, как создать собственный с помощью технологии MQTT.

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

Но прежде, чем идти дальше, давайте объясним, что такое MQTT. MQTT означает Телеметрический транспорт MQ. Это очень простой и легкий протокол для публикации/подписки. MQTT разработан для ограниченных устройств и сетей с низкой пропускной способностью, высокой задержкой или ненадежными сетями.

Принципы проектирования состоят в том, чтобы минимизировать требования к пропускной способности сети и ресурсам устройства, одновременно пытаясь обеспечить надежность и определенную степень гарантии доставки. Эти принципы делают протокол идеальным для нового мира подключенных устройств «машина-машина» (M2M) или «Интернет вещей», а также для мобильных приложений, где пропускная способность и мощность аккумулятора важны.

mNpCeEZHwF1UuwYj01abd-sbVPrKW-4yy8-t
Архитектура публикации/подписки MQTT (Источник изображения: HiveMQ.com)

Почему я не убедился в использовании MQTT или каких-либо решений, которые я нашел в Интернете? Две причины:

  1. Хотя технология MQTT кажется очень удобной для устройств IoT, я все еще счел ее ненужной. Система, которую я покажу в следующем учебнике, работает в той же среде, где живут устройства IoT. Все преимущества MQTT относительно скорости и низкой пропускной способности становятся неактуальными. Кроме того, есть все хлопоты, связанные с его внедрением, и все дополнительные расходы с дополнительными пакетами npm, необходимые для работы в среде JavaScript. Вместо этого я буду использовать только общие библиотеки JavaScript и Node.js, ничего больше!
  2. А как насчет части безопасности? Ну, я не большой поклонник «облака» или облачных вычислений в целом. В некоторых случаях это может быть очень полезно, но в большинстве случаев это просто не нужно. Подумайте: зачем вам служба, необходимая для управления вашей домашней техникой, размещена где-то в облаке, а не в собственной сети?
6PYFXtvRMHaKIfhgJC68Ux7p5uJMqe5K1wE4
Комикс от Geek and Poke

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

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

Именно тогда он «щелкнул» для меня, и я подумал о размещении всей системы на Raspberry Pi и сохранении ее в моей локальной сети.

IkTlTjziky8EUtdFX8G4BCVGwMa9aijqLZh7
Raspberry Pi 3, модель B

Технология

  1. Программное обеспечение: Причина, почему я выбрал Angular и Node.js, в том, что они основаны на JavaScript, и я уже с ним знаком. В конце концов, я хотел разработать и разработать прогрессивное веб-приложение, которое связывается с моими устройствами IoT через HTTP – и JavaScript придавал всю необходимую функциональность.
  2. оборудование: Система работает с микроконтроллерами, такими как Arduino Uno/Mega/Du/MKR1000, Adafruit HUZZAH CC3000 и любым другим микроконтроллером с подключением к Wi-Fi. Я пользуюсь ESP8266 как базовый компонент моей системы домашней автоматизации. Это недорогой микрочип WiFi с возможностью микроконтроллера. В нем есть все необходимое и дешевой ценой! Наконец, нам нужно разместить систему где-то в нашей локальной сети – что лучше, чем Raspberry Pi?

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

Настройка

Я подсчитал, что для завершения всей настройки потребуется около 40 минут, а также время, затраченное в Интернете на поиск решений для ошибок установки.

Что нужно?

Требуется Raspberry Pi. В моем примере я использую Raspberry Pi 3, но он должен работать с большинством версий. Необходимые компоненты:

  1. Плата Raspberry Pi
  2. Карта MicroSD (рекомендуется класс A 10 с 16 ГБ или выше)
  3. Считыватель карт USB MicroSD или адаптер для SD-карты
  4. HDMI-монитор и USB-клавиатура (требуются только временно для первой загрузки Raspberry Pi)
  5. Кабель Ethernet (не нужен Raspberry Pi 3, поскольку он имеет встроенный Wi-Fi)

Установка ОС Raspbian на Raspberry Pi

Raspbian – это бесплатная операционная система на базе Debian Linux, оптимизированная для Raspberry Pi.

я рекомендую безголовая версия «LITE». Он не имеет среды рабочего стола или какого-либо графического пользовательского интерфейса, и он удаленно доступен с компьютера или устройства в той же сети через SSH. Мы делаем все просто, поскольку это единственный способ получить доступ к Raspberry Pi. Версия LITE имеет все функции, которые мы ищем.

  1. Загрузить последний Изображение Raspbian с официального сайта Raspberry Pi.
  2. Загрузите образ ОС Raspbian на SD-карту с помощью Гравильщик или любое другое программное обеспечение для записи образов ОС по вашему выбору.

Настройки Raspberry Pi

Чтобы подготовить Raspberry Pi к загрузке, нам нужно:

  1. Вставьте карту MicroSD в Raspberry Pi
  2. Подключите USB-клавиатуру и кабель HDMI
  3. Подключите кабель Ethernet или если у вас есть Raspberry Pi 3 и вы хотите использовать WiFi, вам следует настроить сеть в следующем разделе

Когда Raspberry Pi завершит загрузку, войдите, используя имя пользователя pi и пароль raspberry

Включение Wi-Fi и подключение к сети

Пропустите этот шаг если вы решили подключиться с помощью кабеля Ethernet.

  1. Откройте файл конфигурации wpa-suplicant.
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

2. Добавьте следующее в нижней части файла, добавляя имя и пароль Wi-Fi:

network={
   ssid="your_networks_name"   psk="your_networks_password"
}

3. Нажмите Ctrl+X чтобы сохранить код. Подтвердите с помощью Y потом Enter

4. Перезагрузите Raspberry Pi с помощью такой команды:

$ sudo reboot

Включение SSH и изменение имени пользователя и пароля

Теперь, когда Raspberry Pi подключен к Интернету, рекомендуется изменить пароль по умолчанию.

  1. Откройте инструмент настройки Raspberry Pi и нажмите второй параметр «Изменить пароль пользователя» и следуйте инструкциям
$ sudo raspi-config
dtaG9lRXQkYqmnIqANMtcZOb0IoxB9sfhDmz

2. Выберите опцию 5 «Параметры интерфейса», затем активируйте SSH

3. Перезагрузите Raspberry Pi. Когда он запущен, у вас включен SSH, и вы готовы к удаленному доступу с вашего настольного компьютера

$ sudo reboot

Настройка удаленного доступа к Raspberry Pi

Теперь, наконец, часть, когда мы устанавливаем требуемое программное обеспечение на Raspberry Pi. Эту часть можно выполнить непосредственно на Pi через терминал с помощью монитора HDMI и клавиатуры USB. Для удобства – и поскольку мы включаем удаленное соединение SSH – мы собираемся подключаться из другой среды рабочего стола. Это лучший и самый простой способ удаленного доступа к Pi и управление им, когда требуются изменения и конфигурации.

Таким образом, в основном вы можете получить доступ к интерфейсу командной строки Raspberry Pi удаленно с другого компьютера или любого устройства в той же сети с помощью SSH. Это можно сделать двумя способами:

  1. С помощью командной строки или PowerShell (я использую Windows на настольном компьютере) замените свое имя пользователя и IP-адрес
$ ssh username@ipaddress

Если ты Не знаю IP-адрес, введите «hostname -I" в командной строке Raspberry Pi.

p9TrkcLo-EaANTz2-5xivbif9p3RXm5wIGYA

2. Второй способ – это использование клиентской программы, например PuTTY или любой другой функционирующее клиентское программное обеспечение SSH. Вот легкий гид для использования PuTTY.

Установка необходимого программного обеспечения на Raspberry Pi

Перед установкой рекомендуется обновить операционную систему и пакеты Raspberry Pi. Если это делать регулярно, он будет обновляться.

  1. Обновите список системных пакетов с помощью такой команды:
$ sudo apt-get update

2. Обновите все установленные пакеты до последней версии:

$ sudo apt-get dist-upgrade

3. Загрузите и установите последнюю версию Node.js:

// To download$ curl -sL  | sudo -E bash -
// To install$ sudo apt-get install -y nodejs
// Check if the installation was successful:$ node -v

4. Установите Angular CLI глобально:

$ npm install -g @angular/cli

5. Установите систему контроля версий Git:

$ sudo apt-get install git

Установка базы данных (MongoDB)

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

  1. Установите MongoDB
$ sudo apt-get install mongodb

2. Запустите процесс MongoDB

$ sudo service mongodb start

3. Запустите mongo Shell

$ mongo

3. Создайте базу данных под названием smarthaus

$ use smarthaus

У MongoDB базой данных по умолчанию является тестовая. Если вы не создавали базы данных, коллекции будут храниться в тестовой базе данных.

Установка Smart Haus

1. Проверьте текущий рабочий каталог с помощью этой команды:

$ pwd
/* It will probably print "/home/pi"   where "pi" is the current user directory */

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

2. Клонируйте хранилище из:

$ git clone https://github.com/ameer157/smarthaus.git

Обязательно перемещайтесь внутри каталога с помощью:

$ cd smarthaus

Перед установкой любых пакетов npm с помощью «npm install», пожалуйста, обратитесь в раздел npm руководство для исправления разрешений чтобы узнать, как исправить любойДОСТУП ”ошибки, с которыми вы можете столкнуться при установке. Это есть очень важно поскольку это предотвратит любые ошибки разрешения npm и позволит вам устанавливать пакеты глобально без использования sudo. Использование sudo с npm не рекомендуется и следует избегать.

3. Установите все пакеты для проекта:

$ npm install
iCw2rJLK34PWv0B-UGGeoWcwO8i10-mgY2FI

Запуск сервера Node.js

Перед запуском сервера необходимо создать проект с помощью инструмента Angular CLI. И, наконец, мы настраиваем Raspberry Pi так, чтобы он запускал сервер каждый раз, когда он загружается.

  1. Постройте проект, используя:
$ ng build --prod

2. Редактировать rc.local файл с помощью nano:

$ sudo nano /etc/rc.local

3. Добавьте следующее в строку перед exit 0 затем выйдите и сохраните файл:

su pi -c 'cd /home/pi/smarthaus/backend && sudo node server.js > log.txt &'
jHBDN5kBPqJ6oiWY269MJ1o0dAe7TlEPrL7X

Теперь сервер Node.js готов! Он будет запускаться при каждой загрузке системы и сохранять журналы в одном каталоге в файле «log.txt».

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

$ sudo node server

Теперь система доступна с любого устройства в вашей сети через IP-адрес Raspberry Pi.

Пожалуйста, вперед и вилка проекта и принять участие в разработке отсутствующих частей?

бросить

Мы получили работающую систему домашней автоматизации, которая безопасно работает на Raspberry Pi в нашей локальной сети без использования облака или чужого сервера.

3JIKPjo9dQos9Ua-10JPxsJnQPVt4PvH1EJF
BdA31vbNfgwI0goItUDCZLdNlAv7XF5akvsu
Синхронизация состояния устройства в режиме реального времени
TAQatUFW1P3nbEaFN5v3Lm495VfROtRNnkKo
tULxNb2WIueLALx-z-A5D6AMPMtw8h0hJ2Tw
Добавление нового устройства для синхронизации данных по требованию

Мой Raspberry Pi сидит рядом Fingbox и роутер в гостиной?

UbJPvVTIOvQXwBXNclgpBCxqWVFnUqtbocMZ
Рик и Морти оказывают техническую поддержку ??

Надеюсь, вам понравилось читать,
пожалуста следовать и поделитесь для дополнительных технических вещей?

dc-iMjp94vVUVYzJKTYxFuVd8UYPENjRMPTH

Добавить комментарий

Ваш адрес email не будет опубликован.