Привязываем датчик движения HC-SR501 к Majordomo

Я уже писал про говорящие датчики дыма, а в этой статье я хотел бы описать похожую реализацию, но уже с датчиком движения. На алиекспрес я купил датчик SR501 HC-SR501 вот тут всего за $2.22. Это самая дешёвая цена, которую я смог найти на момент покупки. Так же для реализации своего проекта говорящего датчика движения вам необходимо купить микроконтроллер Arduino Nano, купил я его вот тут за $2.80. Что удобно, продавец за эту цену прилагает и USB кабель для подключения к компьютеру для заливки прошивки и питания одновременно. И Ethernet шилд для передачи данных с самого датчика в сеть. Я его купил вот тут за $3.84. Итого выходит $8.86. Вы скажите, что зачем мне городить весь этот конструктор если я могу купить за те же $10 датчик движения Xiaomi. Я купил и собрал оба варианта и вот вам моя сравнительная характеристика плюсов и минусов.

Кастомный датчик своими руками.

датчик движения

Плюсы:
– работоспособность не зависит от китайского сервера
– нет жёсткой привязки по софту к экосистеме от Xiaomi
– не требует дополнительный шлюз (+$28) и полностью автономен
– данные передаются не по воздуху, а по кабелю
– возможность разобрать комплектующие и применять в других проектах
– возможность переписывать прошивку под новые проекты
– прокачка в сборке умных вещей и создание прошивок 

Минусы:
– стоимость соизмерима с готовым коммерческим решением
– нет красивого дизайна и коробки
– занимает больше места
– сложность в сборке для новичка

Датчик от Xiaomi

Плюсы:
– красивый дизайн
– соизмеримая стоимость с кастомной реализацией
– возможность быстро добавить в сценарии экосистемы Xiaomi
– лёгкость в настройке и подключение

Минусы:
– работа зависит от китайского сервера
– для работы необходим шлюз (+$28)
– если не заставили работать плагин Majordomo то датчик можно использовать исключительно в экосистеме Xiaomi (как у меня 

Если несмотря на все трудности вы всё таки решили собрать свой датчик, то читаем дальше.
Как подключать сами провода к микроконтроллеру я описывать не буду, в сети множество статей и видео на эту тему. Я же просто предложу использовать мою версию прошивки. Как она работает? Когда датчик зафиксирует движение, то значение 1 будет передано по протоколу MQTT в брокер. В своём примере я использую бесплатный сервис cloudmqtt.com, но вам настоятельно рекомендую использовать свой сервер. Например Mosquitto. В скетче, вот в этой строке

if (client.connect("Client", "login", "password"))

вам нужно будет указать свой логин и пароль к брокеру. В Majordomo у вас должен быть установлен модуль MQTT.

Его так же нужно настроить на ваш брокер указав все настройки. После этого в Majordomo будет приходит значение 1 всякий раз когда ваш датчик зафиксирует движение. В настройках модуля MQTT Majordomo, нужно приязать значение в какому-нибуть свойству, после чего вы сможете использовать его в своих сценариях. Либо вы можете сразу указать что бысрабатывал метод, как только значение измениться. А в самом методе написатьчто-то в роде:

if(gg("Kitchen.HCSR501")=='1'){
say("Зафиксировано движение",2);}
sg("Kitchen.HCSR501","0");

где Kitchen.HCSR501 имя свойства указанное в модуле MQTT куда приходит значение с датчика.
Вот и всё, если у вас возникли какие-нибудь вопросы, то задавайте в комментариях, я постараюсь ответить. Так же рекомендую посмотреть видео, ссылку на которое я оставил в самом начале поста. В нём я детально показываю всё тоже самое, но с датчиками дыма.

Как программно перезагрузить ардуино через каждый час

Всем привет, столкнулся с проблемой что из-за зависаний по не известным мне пока причинам перестаёт выполняться определённый код на ардуино. Кнопка ресет на микроконтроллере сразу приводит его в чувство. Я много времени потратил на поиск фикса, но низкий скил в программировании ардуино не позволил мне это сделать. Поэтому на данном этапе я решил перегружать каждый час арудину. Для всех кто ищет готовое простое решение:

unsigned long time;

void setup() {
Serial.begin(9600);
time = millis();
}

void loop() {
if(millis() - time > 3600000){
Serial.print("reboot");
asm volatile("jmp 0x00");
}
}

Есть множество других решений программной перезагрузки, но они более сложные. Конечно будут случаи когда этот способ вам не подойдёт, тогда вам необходимо гуглить про watchdog.

Голосовое управление телевизором Samsung, LG или любого другого

Устройство Xiaomi 360 IR (аналог Broadlink) даёт возможность управлять с мобильного приложения телевизором, кондиционером, вентилятором, словом любым устройством, которое управляется инфракрасными сигналами. Да, именно такие сигналы используются в вашем пульте от телевизора. Итак, для начала вам необходимо добавить Xiaomi 360 IR в стандартное Mi Home приложение, выбрать из обширной базы устройств свой телевизор и уже сейчас вы сможете управлять им используя виртуальный пульт на телефоне. В редких случаях телека не будет, но ничего страшного, используя режим обучения вы можете обучить своё устройство новым кнопкам используя оригинальный пульт. Устройство запомнить все коды кнопок и сохранит в телефоне. После этого вам необходимо вытащить из телефона коды этих кнопок. Сделать это можно двумя способами:

  • если у вас есть рут, то просто открыть файл из файловой системы
  • если нет рута, но через USB кабель сделать бекап всего приложения, в нём и будет файл с кодами.

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