DiyУмный дом

Как управлять дешевыми розетками RF от OpenHAB

Как управлять дешевыми розетками RF от OpenHAB

Интеллектуальные розетки — это самый простой способ автоматизации дома, но по цене около 40 долларов США за розетку на основе Wi-Fi или ZWave вы вряд ли купите больше, чем несколько.

Возможно, у вас уже есть несколько дешевых РЧ-разъемов, которые поставляются с собственным пультом дистанционного управления и имеют некоторые переключатели каналов и идентификаторов на задней панели. К сожалению, на рынке нет умных домашних центров. умных домашних центров которые работают с теми. Разве не было бы замечательно, если бы вы могли как-то связать их со своей домашней системой умного дома? Ну, вы можете — довольно легко на самом деле — с около $ 10 по частям.

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

Что вам нужно:

  • ESP8266 NodeMCU v12E dev board (точная модель не имеет значения, v1 или v3 тоже подойдут ). Причина, по которой мы используем плату NodeMCU, заключается в том, что позже мы хотим получить простое соединение Wi-Fi. Ссылка для пакета из 2, который стоит по 7 долларов каждый.
  • Пакет 433 МГц передатчик и приемник (около $ 3).
  • Библиотеки RCSwitch и MQTT и наш код — все это можно загрузить с Github .
  • Сервер MQTT, локальный или удаленный.
  • Некоторые РЧ-разъемы работают в диапазоне 433 МГц (это следует сказать на пульте дистанционного управления). Я купил свой у Maplin как пакет из 3 штук примерно за £ 20 ($ 25,89).

Если вы впервые программируете плату NodeMCU, вам необходимо загрузить для нее плагины Arduino: следуйте первой части нашего вводного руководства о чипе NodeMCU / ESP8266. Вам также понадобятся драйверы CH430 . Вы можете найти подписанные драйверы macOS CH430 здесь или Windows здесь .

Я использовал v1.6.5 Arduino, потому что все, что выше, создает больше проблем, чем решает. Понизьте рейтинг, если вы еще этого не сделали.

Прежде чем продолжить, я собираюсь принять базовый уровень знаний о программировании , и что у вас есть настройки NodeMCU в менеджере конференции, и вы можете правильно загрузить некоторый демонстрационный код. Вы также должны были добавить библиотеки, включенные в нашу загрузку, в папку Arduino / библиотеки .

Если у вас есть библиотека PubSubClient или MQTT , создайте ее резервную копию и удалите — единственная, которую я включил в загрузку, — это единственная, где я могу надежно получать сообщения на NodeMCU, и я много пробовал!

RF нюхает (опционально)

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

Если у вас есть другие радиочастотные пульты, которые вы хотели бы попробовать добавить, вам сначала нужно «понюхать» передаваемые радиочастотные коды. Для этого загрузите эскиз ReceiveDemo_Advanced из папки « Меню -> Примеры -> RCSwitch » и измените следующую строку с 0

mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2 

до 2.

 mySwitch.enableReceive(2); // Receiver on GPIO 2 / D4. 

Подключите модуль приемника следующим образом. Глядя на переднюю часть платы приемника (она длиннее двух, передатчик квадратный) — сторона с компонентами:

  • Далеко справа — земля. Подключитесь к GND на плате NodeMCU.
  • Крайний левый VCC. Подключитесь к VIN на плате NodeMCU.
  • Средние два пина являются сигналом. Подключите любой из них к D4 на NodeMCU (они соединены вместе, поэтому не важно, какой именно).

433 проводка-1

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

RF RF сниффинг

После этого я обнаружил, что экран моего проектора

  • ЭКРАН ВВЕРХ: Получено 8694273/24 бита; Длина импульса: 355 или 356; Протокол: 1
  • ЭКРАН ВНИЗ: получен 8694276 / 24бит; Длина импульса: 355 или 356; Протокол: 1

Продолжайте столько кнопок, сколько вам нужно.

Тестирование передатчика

Далее мы попробуем отправить коды с помощью передатчика. Подключите модуль передатчика (квадратный) следующим образом. Будьте осторожны: маркировка на этих штифтах ужасна .

Вывод VCC на самом деле посередине, а не на левой стороне. Я уничтожил один модуль в процессе выяснения этого. То, что говорит «ATAD», на самом деле — «ДАННЫЕ», записанные в обратном направлении. Опять же, данные поступают на D4, VCC на VIN и GND на GND (удалите модуль приемника, он вам больше не нужен).

433 проводка-2

Загрузите Примеры -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches и снова измените вывод данных:

 mySwitch.enableTransmit(10); 

в

 mySwitch.enableTransmit(2); 

Обратите внимание, что в библиотеку включены различные примеры, и то, какой из них вам подходит, будет зависеть от того, какой именно тип коммутатора у вас есть. Тип A (DIP-переключатели) и B (диски или ползунки) являются наиболее распространенными — см. Рисунки на странице RCSwitch . Для типа B включить и выключить сокет так же просто, как:

 mySwitch.switchOn(1, 4); mySwitch.switchOff(1, 4); 

где 1 — идентификатор канала (верхний диск), а 4 — идентификатор сокета (нижний диск). Они были написаны римскими цифрами на моих розетках. Поэтому можно адресовать максимум 16 отдельных сокетов, хотя несколько сокетов могут использовать один и тот же адрес, если у вас есть несколько устройств для одновременного включения.

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

 // Note that my screen actually requires TWO button presses (not a long press, but two physical presses), so I'm delaying a bit then sending the same signal again void screenUp(){ mySwitch.setPulseLength(358); mySwitch.send(8694273,24); // (decimal code, number of bits) delay(2000); mySwitch.send(8694273,24); } void screenDown(){ mySwitch.setPulseLength(358); mySwitch.send(8694276,24); delay(2000); mySwitch.send(8694276,24); } 

Прежде чем переходить к следующему шагу, проверьте все ваши коды.

Управление через MQTT

Откройте эскиз, который вы скачали с Github с именем mqtt_rcswitch.ino , и начните с изменения сетевого SSID и пароля для своего дома. Затем измените имя канала, если хотите, и установите сервер MQTT. Если на вашей установке OpenHAB еще не запущен сервер MQTT, прочитайте часть 2 нашего руководства для начинающих OpenHAB Руководство Обратите внимание, что мой код предназначен для розеток типа B (поворотный переключатель), хотя вы можете легко изменить его и для DIP-переключателей.

Наиболее важной частью кода является функция messageReceived () , которая отвечает на входящие команды MQTT. В этой функции мы сначала проверяем основное ключевое слово — я выбрал «switch» и «screen». В случае «переключателя» мы затем анализируем канал и идентификатор разъема; затем проверьте тело полезной нагрузки для команды.

 void messageReceived(String topic, String payload, char * bytes, unsigned int length) { if (topic.indexOf("switch") >=0){ //switch control, parse out the channel and plug id int channel = getValue(topic,'/',3).toInt(); int plug = getValue(topic,'/',4).toInt(); if(payload == "on"){ mySwitch.switchOn(channel, plug); } else{ mySwitch.switchOff(channel, plug); } } else if (topic.indexOf("screen") >=0){ //screen control if(payload == "up"){ screenUp(); } else if(payload == "down"){ screenDown(); } } /* add another else if here to listen for more commands (or just modify the one above if you dont want screen) */ } 

Тогда по умолчанию работают следующие команды MQTT:

  гостиная / управление / коммутатор / X / Y (где X - канал, а Y - идентификатор штекера; тело сообщения включено или выключено) 
  гостиная / контроль / экран (с телом сообщения вверх или вниз) 

Используйте командную строку или MQTT-клиент с графическим интерфейсом для проверки устройств перед добавлением в OpenHAB.

Добавление в OpenHAB

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

  / * Устройства RF433mHz * /
 Переключить CinemaScreen «Экран» (Cinema) {mqtt = "> [посредник: гостиная / управление / экран: команда: ВКЛ: вниз],> [посредник: гостиная / управление / экран: команда: ВЫКЛ: вверх]"}
 Switch Switch41 "Switch41" (Cinema) {mqtt = "> [брокер: гостиная / управление / переключатель / 4/1: команда: ON: on],> [брокер: гостиная / управление / переключатель / 4/1: команда: OFF : выкл] "}
 Switch Switch42 "Switch42" (Cinema) {mqtt = "> [брокер: гостиная / управление / переключатель / 4/2: команда: ON: on],> [брокер: гостиная / управление / переключатель / 4/2: команда: OFF : выкл] "}

Теперь вы должны иметь возможность управлять своими RF устройствами из OpenHAB! Одной вещью, которую я был приятно удивлен, был диапазон — единственный узел мог покрыть большую часть моего дома. Конечно, вы можете добавить другой узел, прослушивая тот же канал, который просто повторяет те же команды, если вам нужно дополнительное покрытие.

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

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

Похожие посты
Умный дом

Что такое «Эхо Амазонки Авто»?

Умный дом

Что такое умный туалет и стоит ли его покупать?

Как сделатьУмный дом

Как добавить Alexa в ваше умное зеркало

Tech новостиКак сделатьУмный дом

Как контролировать свои потолочные вентиляторы в SmartHome