Статья

Гаражные ворота на Sonoff SV + Apple HomeKit

На тему управления гаражными воротами написано достаточно много, но эта реализация, пожалуй, будет одна из самых интересных. За $15 и несколько часов времени получено нативное, без прокладок, управление из Apple HomeKit с гибкой логикой контроля полотна. Бонусом шло удовольствие. Элементная база также очень простая:

  1. Sonoff SV ~$5
  2. Me9101 ~$3, концевой переключатель (2 шт)
  3. провода ~$2
  4. Аккумулятор 18650 ($2), моток, провода соединения, монтаж на рейку привода (индивидуально)

Остальное нашлось в бездонных запасах, паяльник пришлось взять в руки целых четыре раза.

Теперь самое интересное: прошивка Sonoff SV. Идеально, на мой взгляд, прошить RavenCore aka RavenSystem aka HAA. Нам понадобится готовый fullhaaboot.bin, скачиваем по ссылке выше. Как и чем прошивать Sonoff - я описывать не стану, есть масса хороших и полезных инструкций, приведу лишь использованный мной код:

./esptool.py -b 115200 --p /dev/<вашпорт> read_flash 0x00000 0x100000 flash_1M.bin./esptool.py -p /dev/tty.usbserial-A50285BI erase_flash./esptool.py -p /dev/<вашпорт> --baud 115200 write_flash -fs 1MB -fm dout -ff 40m 0x0 fullhaaboot.bin

После прошивки, подключаем Sonoff SV к источнику питания 5V и цепляемся к WiFi точке с названием HAA-XXXXXX (где XX - хвост мас-адреса вашей железки).

Теперь необходимо выполнить два важных действия:

Замерить время открытия гаражной двери несколько раз. С секундомером открываем/закрываем дверь, замеряем время, округляем в большую сторону. Нужна цифра, покрывающая движение в одну сторону! У меня это вышло = 14 с.Здесь среди примеров берем готовый JSON и правим его под себя (описание ниже). Полученную строку вставляем в поле JSON Config, выбираем точку wifi, вводим пароль и жмем Save. Обновление занимает существенное время, минут до 10, наберитесь терпения. После добавляем в HomeKit (код как и на все HAA 021-82-017). Видим пиктограмму датчика открытия гаражных дверей.

{"c":{"l":13,"b":[{"g":0,"t":5}]},"a":[{"0":{"r":[{"g":12,"v":1,"i":0.5}]},"1":{"a":0},"2":{"r":[{"g":12,"i":1.5}, {"g":12,"v":1,"i":0.5},{"g":12,"v":1,"i":2}]},"3":{"a":2},"t":40,"d":31,"f3":[{"g":14,"t":0}],"f4": [{"g":14}],"f2":[{"g":4,"t":0}],"f5":[{"g":4}]}]}

Для любопытных: что означает каждый параметр, можно прочитать на гите в описаниях, а еще воспользоваться конфигуратором построения логики. Для ленивых достаточно заменить параметр "d":31 на полученное время (у меня "d":14).

NB: Это важный параметр! Если ошибетесь, будете потом лазить в паутине с отверткой и, как я, откручивать плату для коррекции прошивки.

Теперь немного описания той конструкции, что мы будем собирать. Слева на плате бывает в комплекте перемычка, от нее нужно избавиться. При срабатывании (импульс длительностью 0,5 секунды), в этом случае, будет замыкаться пара контактов, обозначенная ниже "сухой контакт". У меня контроллер ворот от фирмы Nice, логика Step (нажатие - открытие - нажатие - стоп - нажатие - закрытие), но в принципе, все контроллеры имеют аналогичную логику и все, что потребуется - это соединение парой проводов сухого контакта Sonoff на соответствующие клеммы гаражного контроллера.

Далее потребуется еще 2 мотка провода к датчикам открытия/закрытия. На Sonoff за открытие отвечает gpio14, закрытие - gpio4, рисунок ниже. Провода цепляем к Gpio и GND.

В результате все выглядит примерно вот так, корпус появится через недельку-другую эксплуатации, не люблю неучтенных косяков, хотя, в данном случае, все повело себя идеально буквально с первой попытки. Кстати, справа от Sonoff расположен бюджетный бесперебойник, что позволит видеть состояние датчика в случае отключения электричества, но можно обойтись и без него. Ну и самое веселое - навеска датчиков открытия. Я не стал возиться с магнитными самоделками (хотя герконы магнитик обойдутся существенно дешевле потраченных $6) и приколхозил к рейке пару ME9101. Они хороши тем, что имеют пару NO/NC и ход гибкого штока во все стороны, отклонение более, чем на половину от видимого на фото, приводит к замыканию пары NO. В общем их удобно цеплять в любой конфигурации, они не требовательны к углам и имеют большой допуск. Затем наступает фаза калибровки: датчик НЕ должен цеплять за полотно (у меня это было, так как сперва зацепил его за серединку и ниже) и должен срабатывать практически в момент касания полотна пола.

Собственно, вот и все хитрости. Соединяем кто как любит и умеет все провода, подключаем питание и наслаждаемся. Конфигурация логики (задается JSON'ом) такова, что дверь "норовит закрыться" при встрече препятствия и четко отдает крайние положения, таким образом, если вдруг захотите открыть гараж, находясь в Турции, вам не придется ломать голову о положении дверей и давить на пиктограмму 50 раз в ожидании заветного "трынь!! закрыто!" :)

Есть еще один финт, не относящийся к конструкции. С помощью Shortcuts ("Команды" по-нашему, появились с iOS 12.x) можно создать простейший скрипт, который спросит 2-3-х значный код при нажатии на экранный шорткат. Останавливаться на этом не буду, там все просто и нет никакого кода, все собирается из элементарных кирпичиков. Метод будет полезный тем, кто не любит случайных нажатий или регулярно дает телефон поиграть детям.





https://sprut.ai/static/media/cache/00/22/38/5/4793348/64966/1000x_image.jpg?1598205939" alt="1000x_image.jpg?1598205939" />

Если использовать таким образом реле как сухой контакт то при подключении DC 5-24V производитель пишет что нужно удалить резисторы по сторонам от перемычки.
Ну и придется использовать свой блок питания конечно, потому что не на всех приводах ворот есть DC24V например.

Сам использую SV, только прошил Tasmota, c ней удобно всю логику прописать в Nodered


Конечно свой блок питания и UPS на 18650, как иначе. Tasmota хорошая, но я не люблю работу через прокладки.



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

https://sprut.ai/static/media/cache/00/18/86/5/4779996/65443/1000x_image.png?1598991893" alt="1000x_image.png?1598991893" />

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

а разве эта схема по датчику открытия закрытия не наоборот сделана? 14 - закрыто 4 открыто ... и что такое 3V3 на вашей схеме 

14 или 4 не принципиально, это элементарно JSON-конфигом перекинуть. Пин 3V3 не используется, чисто информационно на рисунке.

В любом случае читатель получил несколько вариантов реализации

господа, может кто-то знает способ автоматизировать уличные распашные ворота таким образом, чтобы они открывались больше, чем на 90°? хотя бы 110-120

не могу найти привод подходящий, который стоил бы не как крыло от боинга

Так ходом штока регулируется же, разве не так? Стоимость разная, если "калитка" то за 200 евро (на алике дешевле) можно комплект найти, а большие тяжелые ворота... Ну это KRON'ы от 700.

У меня логика ворот такая же (ОТРКРЫТЬ-СТОП-ЗАКРЫТЬ-СТОП), я пока не подцепил герконы, но в HomeKit два положения кнопки (открыть-закрыть) пока идет открытие остановить нельзя, как реализовать СТОП?

Просто давим на кнопку еще раз, sonoff посылает короткий импульс и - стоп... Не могу понять в чем подвох :)

видимо делов датчиках (еще не подключил), видимо не видит что процес пошел, и не дает такой опции ... 

датчики подцепил состояния с них приходят ... но у меня хоть хомките, хоть в EVE только два состояния кнопки ОТКРЫТО - ЗАКРЫТО и она как тумблер ... и ворота пытаются находиться в одном из этих состояний 

JSON свой скиньте, посмотрим, что там нет то :)

Json копипаст из данного мануала, меняю только время открытия/закрытия ворот и все. Помимо отсутствия оставновки еще очень сильно напрягает, то что при выключении/включении элекричества ворота открываются автоматически ))) 

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


GPIO12 это реле. Залить новый просто: 8 раз кликаем по кнопке, а потом заходим по адресу http://haa-xxxxxx.local, где xxxxxx последние 4 цифры мас-адреса вашего соноффа. В последних прошивка после .local надо еще порт добавлять 4567. В соот окне увидите json, там и меняйте

вроде мал мало разобрался с конфигурационым файлом и конфигуратором, и нету там логики открывать-стоп-закрывать-стоп ... пытался наколхозить, но получается коряво, потому что для каждого действия нужно кнопку два раза нажимать ))) 


по умолчанию вот этот кусок, как раз стопит ворота и сразу переключает на обратное направление. 


"2":{"r":[{"g":12,"i":1.5},
{"g":12,"v":1,"i":0.5},{"g":12,"v":1,"i":2}

если кто подробно опишет как реализовать логику "открывать-стоп-закрывать-стоп" буду очень благодарен, но формат кнопки в хомекит должен измениться как минимум.  


Второй ключевой момент, это то что после ребута, всегда идет команда на открытие ворот, какое бы значение для параметра S не было выбрано. Подали питание на Sonoff SV он открывать ворота ((( 


Initial State


Initial state is defined by the "s" key contained within the accessory object.


KeyStateDescription
"s"0Open 
1Closed (default)
5Last state before restart
6Opposite to last state before restart

The initial state that an accessory enters on boot can be set using the "s" option.


Check each accessory for details on whether Initial State is supported.


https://github.com/RavenSystem/esp-homekit-devices/wiki/Accessory-Configuration#execution-of-actions-on-boot">



Пробовал все варианты, все равно открывает ворота ... не очень логично, заходи кто хочешь после возобновления подачии электричества. 
Если кто подскажет как исправить не считая варианта с UPS буду очень благодарен. 

Все это справедливо для контролера ворот CAME

Вот мой конфиг:

{


  "c":{


    "l":13,


    "b":[{"g":0,"t":5}],


    "ct":4,


    "0":{"r":[{"g":12}]},


    "n":"garazhd"


  },


  "a":[{


    "t":40,


    "d":16,


    "b":[{"g":0}],


    "s":5,


    "0":{"r":[{"g":12,"v":1,"i":0.5}]},


    "1":{"a":0},


    "2":{"r":[{"g":12,"i":1.5},{"g":12,"v":1,"i":0.5},{"g":12,"v":1,"i":2}]},


    "3":{"a":2},


    "f3":[{"g":14,"t":0}],


    "f4":[{"g":14}],


    "f2":[{"g":4,"t":0}],


    "f5":[{"g":4}]


  }]


}


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

"2":{"r":[{"g":12,"i":1.5},{"g":12,"v":1,"i":0.5},{"g":12,"v":1,"i":2}]}, ->

"2":{"r":[{"g":12,"i":1.5},{"g":12,"v":1,"i":0.5}]},

Но надо проверять/тестировать, я не вникал особо.

пробовал так сделать, но тогда нужно два раза кнопку нажимать ... У меня кнопка не имеете логики Push, у меня состояние кнопки 0 (открыто) и 1 (закрыто), то во время открытия нужно 1 раз нажать и она переключится в ноль, но ворота продолжат открывание, а второй раз при переводе снова в еденицу, ворота остановятся, чтобы запустить в обратную сторону опять надо два нажатия ... к кому бы обратится с вопросом кто хорошо знает эту прошивку и конфиги 

Здравствуйте! Интересует зачем два переключателя что бы опредилить состояние открыты ли ворота? Я думаю установить один геркон на ворота внизу у самого пола. Этого не будет достаточно? Тоесть геркон замкнут - гараж закрыт, и наооборот. 


И еще у меня есть идея автоматизировать открытие ворот. Как ее лучше реализировать, не подскажите? Первый вариант который я думал - когда я включаю зажигание в машине, телефон сразу же соединяется по блютусу. Это событие можно и использовать. И добавить еще обязательно проверку GPS, что бы это работало только дома. Тоесть получается, что как только я заведу машину - ворота сами начнут открываться. Вроде бы все как надо, но еще жена на машине иногда ездит. От тут и проблемма будет. Телефон ее уже не будет автоматом подключатся. А если она свой подключит вручную, то тогда у меня будет тоже самое.

Второй вариант - датчик движения. Не совсем то, да и мы в гараже часто ходим.


Третий вариант - поставить какой-то микрофон. И сделать какой-то умный анализатор звука. Что бы определять по звуку что машина завелась. Этот вариант мне кажется надежней, но не знаю как правильно его сделать.


Может кто стыкался с такой задачей и предложит еще какие нибудь варианты?

Все верно, концевиками я ловлю крайние состояния и тогда Apple HomeKit корректно отображает статус.

Что касается идей, то есть 2 подхода: реализовывать на стороннем железе с любой фантастической логикой и передвать команду на открытие, хоть звук, хоть датчик дыма. Второй - открыть на телефоне программу автоматизаций (HomeKit Shortcuts в моем случае), посмотреть доступные варианты событий и исходить их них. Этот способ проще и реалистичней.

Ну и проверка. Доступ в дом - критическая автоматизация с точки зрения безопасности. Всегда представляем: меня нет дома. что произойдет при ложном срабатывании? какие есть варианты кросс-проверки? как я защищу систему от злоумышленника (кто-то под воротами газанул на мотоцикле - датчик звука поймал выхлоп и открыл ворота)? как с телефона я буду исправлять ситуацию если произошло несанкционированное открытие?

Вот когда решите для себя эти вопросы, могу помочь с чем-то практическом плане :)

На счет безопасности вы правы. Сегодня еще пришла идея установить под капотом какой-то автономный датчик и что бы он через RF или Zigbee отслылал сигнал контроллеру что машина завелась. Ложного срабатывания так не должно бы быть

У RF безопасность стремится к 0, лучше зигби. Подскажу хинт. Можно взять какой-то датчик (типа датчика открытия дверей xiaomi), вскрыть его и подпаяться к сигнальным контактам. Тогда датчик сможет сигнализировать о старте движка, к примеру.

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

Подпаяться надо к датчику, машину курочить не надо, пару тонких пинов в релейный блок отлавливать старт, вот и все. Поедете на ТО - снимите ))

Хорошо, соединюсь я например к реле топливного насоса. Мне тогда нужно будет поставить параллельно еще одно реле для замыкания моих контактов (вместо геркона) на датчике. Потому что не факт, что датчик от 12В работает. Все верно?

Датчик работает на замыкание конечно же. Я не сильно разьираюсь в электронике авто, если бы придумал себе такую штуку замутить, то наверное поехал бы пообщаться с мастерами

Все же, я не до конца понял логики концевиков-переключателей. Ворота закрыты, переключатель в первом положении, система знает что в этом положении их статус "Закрыто". Как только они начнут открываться - переключатель изменит значение и система об этом узнает и поменяет статус на "Открыто" и такое состояние будет до того момента пока ворота не закроются и переключатель сново не изменит значение. Я так вижу логику, и не могу понять зачем второй переключатель. 

Что если полотно ворот "залипло" приподнявшись на 10см? Как отловить с помощью одного датчика?

Ну если я устновлю геркон в самом низу у пола, то он разомкнется когда ворота немного приоткроются и "залипнут"

Привет!
появилась необходимость добавить в настройки еще одну плюшку в виде экстренной остановки ворот на GPIO05, мож кто реализовал да есть готовый конфиг?

с помощью инструментов HAA добавил возможность экстренной остановки но пока нет возможности фактически проверить

{"c":{"0":{"r":[{"g":12 }]},"l":13,"b":[{"g":0,"t":5 }]},"a":[{"0":{"r":[{"g":12,"v":1,"i":0.5 }]},"1":{"a":0 },"2":{"r":[{"g":12,"i":1.5 },{"g":12,"v":1,"i":0.5 },{"g":12,"v":1,"i":2 }]},"3":{"a":2 },"10":{"r":[{"g":5,"t":1,"i":1 }]},"t":40,"d":18,"f3":[{"g":14,"t":0 }],"f4":[{"g":14,"t":1 }],"f8":[],"s":0,"b":[]}]}

так я и не смог нормально настроить логику ворот, на базе ворот CAME ... основные проблемы:

  1. После отключения электричества ворота автоматически открываются, после их не возможно закрыть штатным брелком, только из HomeKit и после нескольких итераций 
  2. Ворота нельзя остановить во время открывания и "заморозить", они либо открываются либо закрываются 
  3. Если их остановить штатным брелком, то потом нельзя закрыть или открыть через HomeKit ... они открываются пару секунд и замирают, либо наоборот закрываются пару секунд и замирают

как победить это все не знаю (((


Вернуться назад
Вернуться назад