Pull to refresh
53
0
Лисаченко Александр @NightTiger

Пользователь

Send message
Можете чуть подробнее рассказать как реализовали логику и насколько это рабочее решение?

Логика простая — если уровень частиц в комнате вдруг превышает 5 на протяжении 30 минут, то запускается очиститель воздуха через HomeAssistant на среднем режиме. При нахождении показателя pm2.5 частиц в комнате меньше 5 на протяжении 30 минут и включенном очистителе воздуха — перевести его в выключенное состояние. При повышении количества частиц до уровня 10 — увеличить мощность очистки до максимума. По-факту же работает редко, только после проветривания комнаты уличным воздухом, тогда AQI подскакивает иногда до нескольких десятков. При закрытом окне обычно всегда 1 AQI и фильтр не работает совсем.

Аналогичная логика и для увлажнителя + он отправляет мне нотификации о том, что недостаточно воды в емкости (5 литров уходит где-то за 1-1.5 дня). Зимой работает почти постоянно удерживая влажность в помещении где-то на уровне 40%. При нахождении показателя влажности с датчика в комнате (не встроенного в сам прибор, он показывает всегда выше из-за локальной области испарения) больше заданного на протяжении 30 минут — отключает увлажнение. Аналогично в обратную сторону — если меньше заданного значения больше 30 минут, то запускает увлажнение. Один из самых востребованных и рабочих девайсов у меня дома, так как воздух очень сухой зимой. Рекомендую.

Какие-то данные с него получаете или просто работает?

От него приходят данные о количестве потребленной питьевой воды, текущем уровне TDS воды на входе (количество солей и грязи, условно), а также TDS на выходе. Из красивого — если вода немного застоялась, то кран воды светится оранжевым, показывая что качество не очень, после нормализации — светится синим, что выглядит очень приятно и стильно. Также собираются метрики слитой воды и жизненный ресурс каждого из четырех фильтров — в статье тут как раз, наверное, используется такой же девайс, потому что я увидел картинку со сроком службы фильтров (угольный, HEPA, итд). Девайс полезный, рекомендую, в постоянной работе.
Статья отличная, прочувствовал такую же боль при использовании OpenHab и в итоге тоже остался на Home Assistant как на более удобном варианте, но там очень много надо работать напильником. Поэтому очень интересно посмотреть ваши наработки по интерфейсу Home Assistant (может, даже опубликуете Lovelace-карточки и скрипты автоматизации).

Моя автоматизация в квартире максимально беспроводная WiFi+ZigBee+IR:
  1. полное управление освещением в помещениях: светодиодные встроенные треки в потолке + контроллеры MiLight + iBox (WiFI), в спальне светильник с 3 лампами Aqara White Tunable (ZigBee), отдельный светильник на Yeelight RGB (WiFI). Декоративная RGBW-подсветка с LimitlessLED-конттроллерами (WiFi). В каждой жилой комнате лежит по Aqara Magic Cube Controller, вращая который можно регулировать яркость освещения, а также включать/выключать свет
  2. мониторинг температуры, влажности и давления по всем помещениям: Aqara Temperature&Humidity Sensor
  3. датчики открытия дверей и окон — Aqara Door&Window Sensor. На это срабатывают уведомления о плохом качестве воздуха за окном на основании WAQI, а также возможная охранная функция
  4. по всем комнатам датчики движения и освещенности — Aqara Motion&Illuminance Sensor. Используются для автоматического включения ночного освещения в условиях движения и низкой освещенности, а также для обнаружения движения.
  5. контроль микроклимата в спальне — Xiaomi Evaporative Humidifier (увлажнение), Xiaomi Air Purifier 2S (датчик частиц 2.5pm + фильтрация). Управляются скриптами HomeAssistant для поддержания заданных границ.
  6. чистота полов в помещении — Roborock Sweeper S52. Хотелось бы сделать карту каждой комнаты, но не получилось.
  7. чистота питьевой воды — Xiaomi Water Purifier
  8. система проточного нагрева воды на время отключения горячей воды — Electrolux (без интеграции в HA)
  9. автоматическое управление приводами штор — A-Ok Smart Curtain Motor (WiFi) — не очень удачный выбор, в HA невозможно зацепить, только из приложения + шоткат Siri
  10. управление декоративным камином, а также телевизором через IR — Xiaomi IR Gateway. Тут могут быть еще устройства какие-нибудь в дальнейшем.
  11. Еще по мелочи: Hyperion для Ambilight-подсветки телевизора, Aqara & Mi Smart Controller-ы для взаимодействия с ZigBee-устройствами и функциями ночной подсветки, система Neptun для защиты от протечек (без интеграции в HA), инфракрасные теплые полы с контроллерами Devi и настроенным расписанием (не интегрируются пока в HA)


Интересно узнать, как вы собираете метрики со счетчиков — удалось ли подключиться к счетчику энергии, или же ставили свой с возможностью снятия метрик?
Да, рядом с указанием вызова методов execution() нужно будет дописать еще && within(YourInterfaceName+) — это сматчится со всеми вызовами методов определенных в классах, реализующих заданный интерфейс YourInterfaceName.

Смотрите примеры грамматики поинткатов в тесте )
Данный материал содержит не очень очевидные возможности языка. Обычно к ним относятся с насмешкой: «опять этот г… код», «повод потешить свое самолюбие» и т.д Тут нет действительно ничего нового для меня.
Однако именно из таких находок появляются иногда интересные технические решения и библиотеки. Такие как ocramius/proxy-manager, goaop/framework и другие. Поэтому иногда приходится покопаться в мусоре чтобы отыскать тот самый бриллиант что там лежит.

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

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

А что касательно самой презентации и видео насчет магии — это да, здесь был маркетинговый аспект, нацеленный на подачу именно во время конференции, поэтому прошу прощения за некоторое зазнайство — это было нужно чтобы достичь правильной подачи доклада.
Да, конечно возможно. Используйте двойную звездочку для указания любого неймспейса и одинарную для указания компонента. Например, execution(public Acme\**\Service*->*(*)) — будет совпадать со всеми вызовами публичных методов классов из неймспейса Acme на любом уровне вложенности и имя которых начинается с префикса Service.

Дополнительные примеры можно глянуть из теста: PointcutParserTest фреймворка.
FunPHP#6: Ещё немного магии в PHP7 — По мотивам доклада Александра Лисаченко на PHPRussia.

Вот тут немного обидно, в самой статье никакой ссылки на меня и мой доклад нет ( Разобрать по-отдельности способы было бы нормально, а вот подряд брать с моего доклада все и писать от своего имени — не тактично (
Оставлю ссылочку для желающих: PhpStorm IDE Integration. При установленном плагине у вас будет работать подсветка синтаксиса PHP в аннотациях контрактов
Могу удивить, но тестировать код с АОП легче. А легче потому, что не нужно мокать зависимости типа логгера, кэша и т.д. Проверяется только нужная логика.
Я все вот мечтаю, что рано или поздно они добавят shared-объекты между процессами с volatile-модификаторами для переменной, тогда в шаред-памяти можно хранить будет настоящие инстансы, например, подключений к базе или прогретые контейнеры классов и т.д.

В этом случае все остальное бы благополучно чистилось, а специальные объекты могли бы переживать несколько запросов. Но! Это должно быть обязательно с реализацией нормального IPC API, чтобы не было как mysql_pconnect и всяким шлаком в нем при повторном запросе.
Сделать-то не проблема, смотрите PHPFastCGI, этот товарищ занимается популяризацией этого подхода. Однако, там столько подводных камней с тем, чтобы процесс не умирал, например от "Mysql has gone away", "Remote connection closed" и т.д.

Если интересно играться, то у меня есть реализация сырого FastCGI-протокола для PHP lisachenko/protocol-fcgi, там можно поиграться с подключением Nginx напрямую к PHP, и да, ваш пример прекрасно будет там работать.
О, неожиданно ) Спасибо что сохранили копирайты на мою идею и на оригинальную реализацию в моем фреймворке!

fisher а почему не стали использовать готовое? Сейчас у меня версия 2.0-dev фреймворка работает как раз на PHP-Parser, поддерживает 5.6 и 7.0, имеет интеграцию с опкэшем и прозрачный механизм дебага. Вроде все что вам нужно, уже там есть для тестов )
Да тут вроде все понятно: в прошлом году были доклады на DevConf, спикеры выступили, а видео с докладами организаторы припрятали для маркетинга на будущий год. Ну вот и пошел, этот самый маркетинг ) Все по фэн-шую.

Но только вот по отношению к спикерам получилось крайне неприятно — мало того, что видео опубликовали только через год, так еще и рекламы туда насовали. И видео с Vimeo можно посмотреть только с этого древнего сайта, написанным лет 6 назад на коленке. В общем у меня накопился негатив и я не стал подавать на этот год заявку, как и многие другие те, которым было что рассказать. Надеюсь, организаторы прочтут этот комментарий и попробуют исправиться, сделав конференцию престижной, хотя бы на уровне Highload++ c приглашенными специалистами в областях, а не абы первых отправивших свои заявки…
Ох, ё-мае, спустя почти целый год я увидел видео своего доклада )
Статья сделала мое утро ) Тем не менее, хочу отметить, что фреймворк действительно весьма непростой, на изучение его принципов работы требуется весьма немалое количество времени. Но если вы постигли DI-контейнер, то это открывает колоссальные возможности по построению сложного и управляемого кода, что как нельзя лучше подходит для Enterprise-решений.

У меня имеется на руках колоссальный позитивный опыт использования этого фреймоврка для построения распределенной SOA-архитектуры в рамках компании — и можете мне поверить, что модульная архитектура и гибкость фреймворка являются важными критериями успеха не только IT-подразделений, но и бизнеса. Но за эту гибкость надо платить временем и нервами, потому что эффект от внедрения Symfony2 можно будет получить через несколько лет, когда вся команда выйдет на профессиональный уровень разработки.

P.S. Если у кого-то имеется желание разобраться в премудростях этого фреймворка — приглашаю в User-группу, а также на наши митапы, которые проходят раз в месяц в неформальной обстановке с пиццей и чаем )
Кажется, вы разобрались как это работает ) И это как раз и есть АОП, все происходит прозрачно, классы и методы декорируются без единой правки в исходном коде. Но все это заточено под максимальную производительность — никаких runtime-проверок и рефлексии в коде, поддержка опкод-кэшеров в боевом режиме (когда весь код отдается сразу из памяти, без ненужных eval-ов и прочей ерунды).

Специально для тех, кто не любит аннотации, есть возможность писать советы с помощью замыканий. Так что выбор за разработчиком. Аннотация — это только возможность удобной конфигурации. Можно также скрестить с symfony/config и грузить хоть из YAML, хоть из PHP, хоть из XML.
Если вы внимательно посмотрели данную статью, то должны были заметить, почему прокси не решает вопрос с кэшированием правильно: нарушается принцип LSP, так как прокси не является потомком исходного класса. Если же делать правильный прокси или декоратор чтобы его можно было подсунуть вместо оригинального класса, то это потребует генерацию однотипного кода для каждого кэшируемого метода, а в случае с прокси, еще и для всех методов.

Также остается вопрос с тем, что такие прокси надо обновлять при добавлении новых методов и т.д. а это можно делать с помощью спец. софта, например ProxyManager. Надеюсь, вы с этим фактом согласны? Если да, то обрадую вас — АОП в данном случае ничем не отличается, и генерит те же самые прокси, но оптимизированные. И они точно такие же явные классы прокси, как прокси сгенерированные любым другим способом.

Более того, делать кэширование и логирование правильно с помощью АОП, так как это специальный инструмент для решения проблем с сквозной функциональностью.
Если кто вдруг заинтересуется, как это делается с помощью АОП в PHP, оставлю ссылочку на мою статью: Caching Like a PRO — Go! Aspect-Oriented Framework
Возможно, для некоторых проектов, но я знаю об анализе данных с БАК — там точно ActiveMQ
Насчет IronMQ — это же вроде SaaS-решение? Если да, то я таким решениям доверяю только частично, свое железо с сервисами приятней и надежнее. В целом, заслуживают внимания: RabbitMQ — для больших нагрузок (частично и Enterprise), ZeroMQ — для быстрых обсчетов и ActiveMQ — суровый Enterprise (используется в ЦЕРН-е для коллайдера, и будет в РФ электронное правительство.)

Остальные — либо облачные, либо еще в активной разработке.
Да, мсье знает толк в извращениях ) Сдается мне этот пост всплыл после мысли товарища chEbba в прошлом топике.

Решение в ActiveMQ
Хочу замолвить слово за ActiveMQ — в нем эта проблема отсутствует как класс, так как там есть отдельный JMS-шедулер, которому можно спокойно скормить задержку, количество повторов и интервал — все остальное будет сделано самим брокером.

За деталями можно обратиться к мануалу ActiveMQ: Delay and Schedule Message Delivery

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity