Термостат из Sonoff S26F. Просто, понятно и полезно.

Опубликовал | 07.08.2018
Термостат из Sonoff S26F. Просто, понятно и полезно.

Дело было вечером,… Прикупил кучку обновленных железок от Sonoff. В составе: Sonoff DUAL R2, Sonoff POW R2 и Sonoff S26F (F-тип розетки). Интерес отчасти академический (на сколько стабильней стали железки на невеселом esp8266/esp8285), а отчасти практический (аквариум на Sonoff работает несколько месяцев без проблем, теперь нужно два терморегулятора, с некоторыми отличиями). О самом простом хочу сейчас рассказать. В результате получился стабильный автономный термостат, с возможностью интеграции в существующую систему автоматизации, и с огромным багажом не используемых здесь возможностей.

Начнем с краткого описания Sonoff S26. По сути это обновленная модель S20, в более симпатичном исполнении. В обновлении вся радиочастотная часть вынесена на отдельную платку, которая торцом припаяна к основной. С чем связано такое решение знает только производитель, возможно для более устойчивой работы нужно было развернуть антенну перпендикулярно, а может упрощение ремонтопригодности. Вся высокочастотная часть сидит на 6 точках припоя.

Схемотехника:

WiFi часть собрана на esp8266 + PUYA 25Q80H (1МБ)

Лучше, когда не PUYA
Сначала на тип SPI flash не обратил особо внимания, 8мб, прошивальщик тоже 1МБ показывает, вроде бы нигде подножек быть не должно. Все подходящие прошивка помещаются. Эту модель ковырял последней, до этого были перешиты и проверены другие две модели. Проблем с прошиванием не возникло. Но как позже оказалось — PUYA — плод китайского инженеростроения, и понять китайцев могут только китайцы. Скорее всего в протокол внесли незначительные изменения, которые нужно учитывать при прошивке. В результате много времени было потрачено на перепрошивки, с непонятным поведением устройства после. В результате сдул флешку, запаял первую попавшуюся, оставшуюся с какого-то роутера, объемом 4МБ, с неизвестными прошивальщикам Vendor: 0x7F Device: 0x9D46, но отлично при этом работающую. После этого любая прошивка стартовала предсказуемо. И только после полного завершения работ над термостатом увидел в скомпиленных бинарниках пометки “ESP8266PUYA_1024” и “ESP8266PUYA_1024_VCC”. Судя по всему нужно было их использовать, но при этом sonoff-tasmota отдельной такой ветки не имеет, соответственно их прошивку без перепайки флеши на текущий момент запустить не удастся.

Выбор проекта для использования.

На сегодня есть несколько проектов с esp8266, которые можно так или иначе использовать.
Это:

  1. 1. WiFi-ioT, с большим конструктором, где можно скомпилировать только то, что нужно. Прошивка стоит $2 (единоразово, вне зависимости от числа пересборок и перепрошивок на одном модуле, поскольку привязывается к ChipID модуля). В целом достаточно неплохой инструмент для тех, кто программировать не умеет, но что нужно получить — точно знает.
  2. 2. Sonoff-Tasmota, ставший для многих нарицательным именем альтернативных прошивок для модулей от Sonoff. Построен на базе Arduno, с подтягиванием множества библиотек. Можно использовать их готовые бинарники, можно самому собрать среду и делать то, что посчитаете нужным. Именно открытость проекта привлекла многих. Прошивка достаточно стабильна, имеет интерфейсы на разных языках (русский присутствует, в последних ревизиях добавили украинский, правда обозвали его UK :) ). После заливки бинарника, внутри можно выбрать какой именно Sonoff используется — и автоматом подтянется распиновка именно этого модуля. POW R2 уже там есть. Из особенностей — больше подойдет тем, кто внутри дополнительно паяльником работать не собирается, поскольку переназначить GPIO в существующем выбранном модуле достаточно нетривиальная задача.
  3. 3. 1М смартфон. В целом идея здравая, и если смотреть глобально — это попытка сделать локального Sonoff-а. Тоесть принцип — похожий на тот, который используют ребята из ITEAD, но со своими плюшками и отличиями. После прошивки модуля их бинарником становится возможным управлять модулем со смартфона (WEB интерфейс не предусмотрен), имеют свой сервер, для возможности управлять через интернет, который можно отключить. И есть возможность, подключившись к одному модулю (даже без WiFi роутера, т.е. напрямую) видеть остальные устройства, поскольку развертывается mesh сеть. Кстати, этот тип сети есть и в некоторых других прошивках. Большим минусом для себя отметил то, что при установке приложения — оно очень активно хочет знать мое местоположение, а я очень активно не хочу его предлагать :). Производитель заявляет, что на текущий момент местоположение нужно для корректного определения восхода — заката, плюс есть функцианал реагирования на геолокацию любого из смартфонов, связанных с приложением (ребенок в учебное время вышел за 200м зону от школы — прилетает аларм “загулял” и т.д.). Т.е. такое себе смешивание функциональности sonoff и детских часов с GPS. Есть платные подписки на использование их серверов с сохранением логов и т.д. В целом — съедобно, но не для параноиков. Но еще и закрытый код ставит минус на использовании.
  4. 4. ESP8266 MegaD api. Для тех, кто знаком с достаточно сильным в рунете проектом ab-log.ru будет интересна прошивка, поддерживающая этот api. Т.е. по сути — это пересобранная под esp8266 прошивка мегадевайса, с урезаниями и легкими дополнениями, связанными с отличающейся архитектурой. Но в целом — отличная реализация, и для тех, у кого автоматика и так собрана на мегадевайсах — будет отличным выбором. Прошивка работает стабильно, аквариум работает именно на ней, проблем нет. Но опять-же код закрытый, и автор достаточно давно перестал обновлять ее. Дата последних мелких правок с отключением MQTT — 03.06.2017.
  5. 5. MyHome IoT — прошивка под Blink, со всеми плюсами и минусами. Особо не вникал, мне не интересен этот подход.
  6. 6. ESPurna — в общем “урна” в названии, наверное не случайна, но есть исходники на гите, проект живет, но в чем его изюм — не понял. Хоть и заявлена частичная поддержка SSL/TLS в MQTT. Поддерживается небольшое количество датчиков. Хоть обновляется часто, но поддержки POW R2 нет. В общем — на любителя.
  7. 7. Sonoff_WiFi_Switch от Третякова, в целом очень интересный проект, код открыт, но собирается с бубном, поскольку нужны определенные библиотеки, определенных версий. Может организовываться в mesh сеть, очень лаконичный и симпатичный дизайн, есть управление удаленными устройствами с аналогичной прошивкой. Но как-то энтузиазм у ребят угасает, а многого так еще и не добавили. Последние готовые бинарники годовалой давности, в исходниках какое-то движение идет, но видно, что на проект автор понемног забивает. Жаль. Выглядит достаточно современно.
  8. 8. ESPEasy — лично для меня стал открытием, в хорошем смысле этого слова. Код открытый, Используется последнее ядро Arduino 2.4.1 с критическими исправлениями. Используемые либы лежат в исходниках и обновляются синхронно, в случае необходимости. Разворачивается очень быстро на PlatformIO (Кто не в курсе, что это такое — посмотрите хотя бы это видео, если коротко — это удобная замена среды Arduino, с возможностью как портировать свои проекты из Arduino, так и использовать любое существующее ядро, и писать на том языке, который привычен. Нужные библиотеки подтягиваются в один клик, поддержка оборудования во второй, может использовать как Atom, так и Visual Studio Code для своего развертывания). Еще у автора(ов) мне понравился системный подход, четкий дедлайн по выходу версий. В целом, в подходе чувствуется богатый опыт. Значит будет закинут не скоро. Ключевой особенностью данного проекта так-же является поддержка большого количества датчиков (POW R2 уже поддерживается). В этом проекте уже добавлена поддержка той злосчастной PUYA, правда работоспособность так и не проверил, поскольку заметил гораздо позже того, как заменил микросхему. Достаточно грамотно организована работа с spi, ограничивает количество ежедневных сохранений изменений. Сбросить счетчик можно только сняв питание с устройства, иначе всплывают красные флаги и отказываются сохранять, пока не передернешь питание. Т.е. тем самым ограничивают количество записей на spi. На любой GPIO можно повесить любой датчик. Вся логика взаимодействия описывается отдельно. Плохо, что недостаточно готовых примеров, некоторые моменты приходится использовать методом проб и ошибок. Но в целом, когда вникаешь в логику взаимодействий — оказывается все достаточно понятно.
  9. Этот проект можно сравнить с первым из этого списка, но с открытым исходным кодом (правда на Arduino, в отличии от первого, где чистый C, и SDK от pvvx, что правильней). И поскольку здесь можно легко сделать полностью автономный термостат, с управлением как по HTTP, так и по MQTT (а так-же еще многими путями), именно на базе этого проекта было принято решение расширять возможности стандартного железа Sonoff.

По указанным прошивкам есть темы на 4pda и на ab-log

Ставим цель для термостата:

  1. 1. Возможность поддержания заданной температуры в полностью автономном режиме. С использованием дельты температур.
  2. 2. Старт автоматического поддержания температуры либо автоматически, либо нажатием единственной кнопки.
  3. 3. Минимальное изменение внешнего вида при добавлении датчика температуры (минимальный внешний колхозинг, другими словами).
  4. 4. Возможность легкой интеграции в существующую систему автоматизации.

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

На стандартной прошивке я его даже не включал, по сему, что там было от производителя — не знаю, да и не хочу знать :) Думаю те, кто использует сервера Sonoff уже и так в курсе, либо уже развернули свой сервер, а может уже научились добавлять свои сертификаты в новую родную прошивку.

Вскрываем.


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

Сопоставление маркировки с реальными выводами:
J1 — VPP (+3.3В)
J2 — GND
J3 — GPIO12 (реле и красный светодиод)
J4 — GPIO0 (внешняя кнопка, перевод в режим прошивки)
J5 — GPIO13 (синий светодиод, может управляться отдельно, инверсная логика)
J10 — GPIO3 (RX, его вывод на эту колодку для меня остался загадкой, возможно задел под другие устройства, где внешний микроконтроллер по UART будет что-то передавать ESP-шке). В ESPEasy, как и в 99% остальных прошивок задействовать GPIO3 и GPIO1 (RX, TX) не получится, а по TX еще и мусор сыпется при загрузке модуля.

Как принято в Sonoff и почему в DUAL R2 не так
Здесь сделаю небольшую ремарку по модулям Sonoff. Все модули пытаются придерживаться одинакового использования GPIO, т.е. на всех (почти) модулях GPIO12 это реле с прямой логикой и одновременно светодиод (красный), который работает вместе с реле. GPIO13 — это синий светодиод, управляется отдельно, подключен к отдельной линии питания. Но может мешать нормальной загрузке устройства, если его дергать во время старта. На ESPEasy на GPIO13 нельзя ставить галку дефолтного светодиода для WiFi (она снята по умолчанию). Сам же пин в процессе работы можно дергать как угодно. GPIO0 во всех модулях (опять же почти) используется для внешней кнопки. Эта же кнопка используется для перевода модуля в режим загрузки прошивки. Для внешних термодатчиков используется (TH10/TH16) GPIO4.

Но в обновленных Sonoff Dual R2 они отошли от принятого ими же использования GPIO, и именно по-этому многие жалуются на неработоспособность кнопки включения второго канала (обе находятся внутри корпуса). А причина проста — производитель перешел на esp8285, под кнопку отдал GPIO9 (SDIO_DATA2) а включить внутреннюю подтяжку, которая появилась в esp8285 забыл, а внешнюю не допаял :) Те, у кого не работает вторая внутренняя кнопка (button1) на R2 — подтяните этот вывод через 10к резистор к питанию — и будет вам счастье. Это касается родной прошивки, на альтернативах — все делается программно. Может и itead-овцы когда то починят внутреннюю подтяжку :)

Сейчас рассмотрим, что нам оставили на самой платке, и к чему можем подпаяться даже не особо ровными руками.

Здесь все отлично, на одной стороне два питания, rx, tx — уже прошьем, а GPIO2 можно под любимый многими DS18B20 использовать. Т.е. три контакта (два питания и GPIO2) находятся рядом, тоесть термодатчик будет здесь жить. Что с другой стороны?

Не густо, но…… но именно GPIO4 и GPIO5 нам SPEasy предлагает использовать по умолчанию для I2C шины, на которую можно навесить огромное количество разных датчиков параллельно. Т.е. для тех, кто захочет использовать BMP280, BME280 и иже с ними, для контроля не только температуры — удобно использовать эти два пина, и питание с обратной стороны. Меня же вполне устроит использование DS18B20 в герметичном исполнении. Т.е. вся “квадратная” шина останется пустой, и может быть задействована для расширителей портов, или еще как-то.

Перепрошивка. (Опустим момент с заменой SPI flash, и начнем)

  1. 1. Модуль в розетку НЕ ВКЛЮЧАЕМ, КАТЕГОРИЧЕСКИ. Для прошивки хватит 3.3В питания, полученного с USB-UART переходника. Я использую CP2104. Подключаем стандартно — питание модуля к выводу 3,3В, RX модуля к TX переходника, TX модуля к RX переходника, земли соединяем тоже. Т.е. всего 4 проводка.
  2. 2. Зажимаем кнопку на Sonoff и подаем питание на esp8266. (Можно отдельно отрывать 3.3В, можно вытаскивать переходник из USB порта).
  3. 3. Заливаем пустую прошивку, размером с используемую spi flash (в оригинале 1МБ=8мб, если используете другую — сделайте файл, размером точно в вашу spi flash, заполненную FF-ми).
  4. 4. Снимаем питание (сейчас флеш очищена, но модуль НЕ в режиме прошивальщика). Повторяем п.2
  5. 5. Берем подходящий бинарник отсюда (там по названию понятно, для каких модулей что использовать). Рекомендую заливать сразу девелоперскую версию, там уже включены все последние изменения и дополнения. Т.е. для 1МБ версии нужен файл: ESP_Easy_mega-20180804_dev_ESP8266_1024.bin Прошиваем.
  6. 6. Снимаем питание, и подаем его снова.
  7. 7. Через десяток секунд должна появиться открытая точка доступа ESP_Easy_0 — подключаемся к ней. Здесь либо откроется всплывающее окно, либо просто идем на 192.168.4.1 и вводим SSID/пароль своей WiFi точки доступа. Нажимаем применить, и ждем 20 сек перезагрузки.
  8. 8. Все, во всплывающем окне видим, какой IP получил модуль, подключаемся к своей WiFi сети и идем по указанному адресу. Если не увидели — зайдите на свой роутер, и посмотрите, какой IP выдал роутер модулю.
  9. Прошивать нужно с 0x000000 в режиме dout. С начала — потому, что fullflash, в dout — потому, что используется минимальное количество data линий (2шт) к spi flash. Это самый медленный режим работы, но он гарантированно работает на всех схемотехниках. А в Sonoff DUAL R2 еще и не получится по-другому. Там 2 линии отдали под кнопку и реле.

    Распространенная CP2104 шьет на 921600
    Давно перешел на прошивку через esptool.py, который ставится с ардуиной, на любую, отличную от винды платформу. Далее создается файл скрипта, в котором указаны все параметры. Потом он дублируется с изменением имени файла прошивки. В таком раскладе прошивка занимает 5-6 секунд. Пример скриптов, два варианта бинарников (для 1МБ и 4МБ) и два пустых файла лежат здесь в архиве.

Дальше начинается магия :)

На самом деле — сложно только до момента прихода понимания логики работы, а дальше все просто. :)
В первую очередь рекомендую зайти в раздел Tools-Advanced. Поставить галку на Rules, галку на Use NTP, ввести удобный NTP сервер, галку DST, ввести часовой пояс :)))

Здесь я час не мог понять как. Но все оказалось просто и понятно — в поле Timezone Offset (UTC +): вводим коррекцию в минутах. Т.е. для пояса +2 нужно ввести 120, для пояса -7 нужно ввести -420. Внизу нажимаем Submit.

Здесь хочу обратить ваше внимание на то, что все изменения в любом из разделов применяются только по кнопке Submit. И это правильно.
Идем в закладочку Main — и видим правильное время, если нажмем More info, то и остальные параметры системы.
Дальше — закладка Config, обзываем модуль, и ставим его номер (от 0, по порядку). У меня это Rozetka. Модуль работает с UTF-8 кодировкой, поэтому кириллица поддерживается нормально.

Дальше закладка Hardware, спускаемся вниз и назначаем входами/выходами наши пины. Смотрим скрин, думаю понятно почему именно так. Если нет — задавайте вопросы в комментах.

Дальше — важный момент. Суть всей логики работы в этом проекте — объектная ориентация. Т.е. в предыдущем пункте вы просто подключили подтягивающие резисторы, либо настроили GPIO как выход, и все. Сейчас заходим в закладку Devices, и добавляем устройства.
Думаем, что нам нужно — нужна кнопка, нужен DS18B20 (или тот, который вы используете). Все. Выходы это просто выходы, мы будем их дергать без лишних посредников.
Нажимаем Edit в первом пункте и выбираем из списка Switch input — Switch.

Подтверждаем, и настраиваем дальше. Name — то имя, по которому мы будем общаться с объектом. У меня это key. Ставим галку Enabled. Т.е. активируем объект. Internal PullUp: — включаем внутреннюю подтяжку.

Inversed Logic: — ставим галку, поскольку при нажатии на кнопке появляется 0. Т.е. используем инверсную логику. Дальше в скриптах =1 это включенное состояние, =0 выключенное. А инверсию указываем здесь.1st GPIO: — указываем, какой GPIO использовать под кнопку. Это GPIO0, кнопка туда припаяна. Switch Type: — Switch, поскольку просто кнопка. Switch Button Type: — Push Button Active Low. Т.е. момент переключения вылавливаем по переходу с высокого уровня в низкий. Внизу #Name можно не менять, в скриптах тоже используется это имя.
Кнопка Submit :)

Почти аналогично добавляем второй объект — датчик температуры. Ищем его в списке и добавляем.

Присваиваем имя, ставим галку активации, назначаем GPIO, выставляем период опроса (у меня 1с. для 12бит разрешения и одного датчика — это норма, поскольку максимальное время преобразования 0,75с. Если датчиков несколько, то нужно либо уменьшать разрядность, либо увеличивать период опроса). Device Address: сейчас у вас будет пустой, поскольку датчик еще не припаян. Когда припаяете — в выпадающем списке он появится. Или несколько, если несколько датчиков используется. Вводим поле #Name и указываем количество знаков после запятой, которое будем отображать.

Кстати, если до сюда дочитали, то уже половину пути прошли :)

В закладке Controllers можно добавить протоколы, по которым будем общаться с внешним миром.

Я добавил OpenHUB MQTT, как наиболее удобный в текущей ситуации. Если выбрать
Standalone — не будет использовать ничего для внешних коммуникаций. Можно добавить 3 внешних протокола.
В закладке Notifications можно выбрать тип оповещения (email / buzzer / ничего). Т.е. по событию можете поспамить, либо припаять пищалку с дополнительным транзистором и попиликать локально.

Основная закладка — Rules, т.е. скрипты, по которым все будет работать. Пока их не трогаем — у нас же еще термодатчик не впаян, корпус не собран, проводки от UARTа не отключены.
Занимаемся этими вопросами. Здесь есть нюанс, поскольку GPIO2 вывели, но в текущей схемотехнике датчиков не предусматривалось (наверное) — DS18B20 нужно подключать с подтягивающим резистором на 3,3k-4,7k. У меня в шнурке датчика красный — плюс питания, черный — минус питания, желтый — дата. Нужно между желтым и красным впаять резистор. На платке отлично вмещается smd резистор типоразмера 0805. Его и запаиваем. Отпаиваем USB-UART. Дальше в нижней части одной из половинок проделываем полукруглую прорезь под шнур. В другой половинке срезаем бортик. Прокладываем датчик через получившееся отверстие, скручиваем корпус.
Вот теперь втыкаем полностью собранное устройство в розетку, и идем по уже знакомому адресу в браузере. Открываем вкладку Rules, и копипастим туда мои правила:

Rules set 1
on DS#Температура>30.15 do    if [key#switch]=1    gpio,12,1    else    gpio,12,0    endif  endon    on DS#Температура<25.4 do    if [key#switch]=1    gpio,12,0    else    gpio,12,0    endif  endon    on key#switch do      if [key#switch]=1      gpio,13,0      else      gpio,13,1      gpio,12,0      endif  endon  

Жмем Submit. Открываем Rules set 2 и копипастим туда другие правила.

Rules set 2
On System#Boot do  Publish %sysname%/Терморегулятор/Время,%systime%  Publish %sysname%/Терморегулятор/Температура,[DS#Температура]    timerSet,1,30  endon    On Rules#Timer=1 do  Publish %sysname%/Терморегулятор/Время,%systime%  Publish %sysname%/Терморегулятор/Температура,[DS#Температура]    timerSet,1,30  endon

Жмем Submit.

Возвращаемся на Rules set 1 и правим имена, если они отличаются от моих.

Здесь опишу логику, как это все работает, и покажу где в скриптах это указано.

  1. При нажатии кнопки — включается синий светодиод, который активирует автоматический режим. Если кнопку нажать еще раз — вся автоматика и нагрузка отключаются. Т.е. горит синий — работает автоматика, не горит — все отключено.
  2. В режиме автоматики задаем один порог и второй порог, по которому включаем / выключаем нагрузку. (термостат или холодильник не важно, есть четкие две границы, а что и когда делать решаем сами)
  3. Каждые 30сек шлем по MQTT текущую температуру.

Сейчас самое сложное (а может и нет) для понимания, особенно для тех, кто привык к многовложенной логике. Здесь такой нет. Здесь принцип проще и сложней одновременно. Есть событие, на которое реагируем ( on | endon ) и есть одноуровневое условие( if | else | endif ). Это правильней с точки зрения автоматики, но немного сложнее с точки зрения построения алгоритмов.

Порядок следования условий on|endon не имеет значения, грубо говоря они проверяются все одновременно, и если событие наступило — оно обрабатывается.
В этом кусочке:

on key#switch do      if [key#switch]=1      gpio,13,0      else      gpio,13,1      gpio,12,0      endif  endon

Событие — изменение состояния кнопки, имена key@switch взяты с закладки, где мы их задавали. Switch лучше не менять, кнопку можно обозвать по-русски.
Дальше условие — если кнопка включилась (изменила состояние с выкл на вкл) — то на gpio13 (синий светодиод) подаем низкий уровень (0, поскольку там инверсная логика). Иначе (кнопка изменила состояние с вкл на выкл) — тушим синий светодиод и ВЫКЛЮЧАЕМ реле (gpio12 управляется прямой логикой).
Т.е. здесь кнопкой мы включаем/выключаем светодиод, подсказывая автономное управление включено или выключено. В случае выключенного — еще и дополнительно отключаем нагрузку.

on DS#Температура>30.15 do    if [key#switch]=1    gpio,12,1    else    gpio,12,0    endif  endon

Событие — температура на указанном датчике превысила указанную. Здесь есть нюанс — если вы в настройках датчика указали обновлять значение каждую секунду, то и реагирование на изменение будет каждую секунду. Если поставили опрос датчика 60сек, то и реагирование будет раз в 60сек (когда прилетят данные). Если за 60 сек температура уйдет на 200 градусов, то и увидим это через 200 градусов. Здесь просто нужно понимать как часто идет реагирование на событие — как только оно изменится, а изменится — как только переопросим датчик. Дальше проверяем условие — включен ли автоматический режим. И только если включен — подключаем нагрузку. Если не включен — отключаем нагрузку.

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

Вторая закладка правил (Rules set 2):
Активируемся при спервом тарте системы (On System#Boot do)
Пушим MQTT сообщения и взводим таймер-1 на 30 секунд (timerSet,1,30). Таймеров может быть до 8, каждый можно использовать откуда угодно.
Дальше ловим событие срабатывания таймера-1 (On Rules#Timer=1 do). Пушим MQTT сообщения и перевзводим таймер-1 на 30 сек ( timerSet,1,30). И дальше каждые 30 сек повторяем последнее действие.

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

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

Покупалось за свои и ковырялось тоже :)

Если есть интерес — распишу отдельно нюансы по двум другим железкам от Sonoff. И жду другую подобную компактную проходную розетку.

Посмотрю на чем основана, если будет смысл поковырять — напишу еще чего-нить. Со старта она тоже алексу и разные IFTTT поддерживает, но это же не наш путь ;)

Добавить в избранное 0

(c) 2017 Источник материала

Рекламные ссылки