SmartLiving.ru

Обсуждение проекта
 
Текущее время: Пн дек 18, 2017 10:10 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 308 ]  На страницу 1, 2, 3, 4, 5 ... 31  След.
Автор Сообщение
СообщениеДобавлено: Вс ноя 22, 2015 6:59 pm 
Не в сети

Зарегистрирован: Вс июн 14, 2015 11:08 am
Сообщения: 657
Благодарил (а): 49 раз.
Поблагодарили: 156 раз.
MegaLight позволяет настроить автономное управление освещением с заранее определенной логикой реакции на события кнопок (выключателей), а также внешнее управление по HTTP и отсылку событий в формате, совместимом с MajorDoMo

Для компиляции используйте Arduino IDE v1.6.5 от arduino.cc


UPD. Сейчас более актуальна и лучше поддерживается версия с конфигурированием с SD-карты (вместо веб-конфигурирования): MegaLight2


Перед заливкой рекомендую задать статический IP (и, возможно, сменить MAC) для самого контроллера в файле MegaWeb.ino. По-умолчанию адрес 192.168.21.210 (позже его можно сменить в конфигурации)
Для связи с МЖД нужно указать его IP в файле MegaLight.ino. Если в МЖД используется авторизация, ее base64-код нужно указать в переменной mdAuth.


Описание.
Архитектурно MegaLight построен на 3-х понятиях:
1. Buttons - кнопки (выключатели, логические датчики).
2. Relays - реле. Это управляемые логическим уровнем устройства. Позже появилась возможность управления ШИМ, но название я уже не менял.
3. JointPoints - соединения. Эта абстрактная сущность позволяет связать между собой любую комбинацию Buttons и Relays, добавив условия, параметры и т.д.

Для конфигурирования нужно зайти браузером на адрес MegaLight по стандартному 80 порту.

Buttons
Вложение:
buttons.png
buttons.png [ 39.15 КБ | Просмотров: 12340 ]

ID - уникальный числовой идентификатор кнопки. Будет использоваться при настройке соединений (можно задавать просто по порядку)
Pin - номер пина (цифрового или аналогового), куда подключена кнопка. Не используйте пины 4, 10, 50-53, они используются Ethernet-шилдом. Аналоговые пины A* также имеют свое цифровое представление (см. таблицу)
Pullup type - тип подтяжки:
  • EXTERNAL_PULLDOWN - подтяжка внешним резистором к Gnd
  • INTERNAL_PULLUP - подтяжка внутренним резистором к Vcc (вход инвертирован)
  • EXTERNAL_PULLUP - подтяжка внешним резистором к Vcc (вход инвертирован)
Bounce interval (ms) - интервал подавления дребезга контактов (мс). Обычно 40мс достаточно.
Hold interval (ms) - время в мс, которое нужно удерживать кнопку, чтобы она перешла в состояние Hold (удержание).
Repeat - 1 или 0 - включить или выключить автоповтор нажатия в режиме удержания.
Repeat interval (ms) - интервал в мс, с которым повторять нажатия в режиме удержания (Repeat должно быть 1). Я обычно использую 150мс.
Double-click interval (ms) - интервал в мс, в течение которого два последовательных нажатия кнопки сгенерируют событие DoubleClick. 0 - не отслеживать двойное нажатие. Я обычно использую 800мс.
Prevent Click - 1 или 0 - предотвращать(1) генерацию события Click при первом нажатии, если за ним последовал DoubleClick. Имеет смысл только если Double-click interval больше нуля.
!DELETE! - удалить кнопку. Если ни одно Соединение не ссылается на эту кнопку, здесь будет галочка, иначе - к-во ссылающихся Соединений.

Для сохранения изменений нужно нажать кнопку Save Config.

Relays
Вложение:
relays.png
relays.png [ 37.91 КБ | Просмотров: 12340 ]

ID - уникальный числовой идентификатор реле. Будет использоваться при настройке соединений (можно задавать просто по порядку)
Pin - номер пина, к которому подключено управляемое устройство
PWM frequency (Hz) - частота ШИМ в герцах. Если 0 - то ШИМ не используется. У Mega 2560 порты с ШИМ 2 по 13 и 44 по 46.
On - состояние выхода - 1-вкл, 0-выкл.
Invert State - инверсия порта (Выкл - на выходе логическая 1, вкл - 0).
Dimmer value - если используется ШИМ - его скважность (0-255)
PowerOn Restore - какие параметры нужно сохранять при изменении и восстановить при включении контроллера
  • None - ничего не сохранять, при включении состояние и значение равны установленным при конфигурировании
  • State - восстанавливать последнее установленное состояние параметра On
  • Value - восстанавливать последнее установленное значение диммера (ШИМ)
  • State&Value - восстанавливать состояние и значение.

JointPoints
Вложение:
jointpoints.png
jointpoints.png [ 27.89 КБ | Просмотров: 12340 ]

ID - уникальный числовой идентификатор соединения (можно задавать просто по порядку)
Buttons - соединяемые кнопки
Events - события, см. далее (для редактирования нажать на Edit)
Relays - соединяемые реле
Order - последовательность проверки соединений (от меньшего числа к большему)
Final - 1 или 0. Если 1 - остановить дальнейшую проверку соединений при срабатывании события.

Events
Вложение:
events.png
events.png [ 47.07 КБ | Просмотров: 12340 ]

Здесь задаются действия над присоединенными реле в зависимости от событий, произошедших с привязанными кнопками.
Event
  • StateChanged - изменение состояние (кнопка нажата или отпущена)
  • Pressed - нажатие кнопки
  • Released - отпускание кнопки
  • Repeat - при каждом автоповторе
  • Hold - удержание кнопки
  • LongClick - длинное нажатие. Срабатывает по факту отпускания после удержания
  • Click - клик (короткое нажатие и отпускание)
  • DoubleClick - двойной клик
Action
  • Unassigned - события не обрабатывается
  • No action - ничего не делать. При этом событие считается сработавшим и при Final=1 последующие соединения обрабатываться не будут
  • On - включить
  • Off - выключить
  • Toggle - изменить состояние на противоположное
  • Value - установить значение диммера в определенное значение(только для ШИМ-каналов)
  • IncValue - увеличить или уменьшить значение диммера на фиксированное значение
Parameter - значение для событий, связанных с диммером. Для Value - значение диммера (от 0 до 255), для IncValue - шаг изменения (от -255 до 255).
Timeout (ms) - длительность действия.
Для действий, управляющих состоянием (No action, On, Off, Toggle) - время, через которое нужно изменить состояние на противоположное. Например: событие On с таймаутом 10000 включит реле, а через 10сек выключит. В общем случае выполняется действие [Action], а через [Timeout] мсек выполнится Toggle. Если в это время произойдет другое событие, изменяющее состояние конкретного реле, таймер останавливается.
Для действий, управляющих ШИМ-каналом (Value, IncValue) - время, в течение которого значение будет плавно переходить от текущего значения до заданного.
Condition - дополнительное условие срабатывания действия.
Здесь можно указать выражение с условием.
в зависимости от состояния реле, например:
R1 - реле с ID 1 включено
!R2 - реле с ID 2 выключено
в зависимости от значения ШИМ реле, например:
RV1>0 - значение диммера с ID 1 больше нуля
RV2<200 - значение диммера с ID 2 меньше 200
RV1=255 - значение диммера с ID 1 равно 255
RV1g100 - значение диммера с ID 1 больше или равно 100
RV1l100 - значение диммера с ID 1 меньше или равно 100 (это там прописная буква L)
в зависимости от состояния кнопки, например:
B10 - кнопка с ID 10 нажата
!B10 или BU10 - кнопка с ID 10 не нажата
BH10 - кнопка с ID 10 удерживается

Условия могут состоять из нескольких, объединенных операторами или заключенных в скобки.
Операторы:
! - НЕ
| - ИЛИ (вертикальная палка)
& - И
( ) - скобки
= - равно
> - больше
< - меньше
g - больше или равно
l - меньше или равно

Пример сложного выражения:
BH1|(R1&!R2)|(RV5=255)
условие сработает, если удерживается кнопка 1, либо если включено реле 1, а реле 2 выключено, либо диммер 5 на максимуме.

Config
Здесь можно сменить MAC и IP контроллера.

P.S. К сожалению, маленький объем оперативки у Ардуины не позволяет при данной структуре скетча завести больше десятка кнопок/реле/правил (каждого). В ближайшее время постараюсь что-то придумать.

Github


Вложения:
MegaLight_0_2_1.zip [229.15 КБ]
Скачиваний: 346


Последний раз редактировалось olehs Пн окт 30, 2017 11:43 am, всего редактировалось 12 раз(а).
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вс ноя 22, 2015 7:00 pm 
Не в сети

Зарегистрирован: Вс июн 14, 2015 11:08 am
Сообщения: 657
Благодарил (а): 49 раз.
Поблагодарили: 156 раз.
Протокол взаимодействия по HTTP
Получение состояния реле
HTTP-GET запрос вида
http://megalight/state?c=get&n=1
n - ID нужного реле (обязательный)
Ответ: text/plain в виде
1;255
где первое число - состояние (1 - вкл), второе - значение диммера

Установка состояния реле
HTTP-GET запрос вида
http://megalight/state?c=set&n=1&o=1&v=200&t=30000
http://megalight/state?c=set&n=1&i=10
n - ID нужного реле (обязательный)
o - состояние (1 - вкл, 0 - выкл)
v - значение диммера (0-255)
i - инкремент/декремент значения диммера (-255 по 255)
t - таймаут в миллисекундах
Ответ: пусто

Получение состояния кнопки
HTTP-GET запрос вида
http://megalight/state?c=button&n=1
n - ID нужной кнопки/выключателя (обязательный)
Ответ: text/plain в виде
1
состояние (1 - нажата, 0 - не нажата)

Взаимодействие с МЖД
1. В объект ThisComputer нужно добавить свойство MegaLightURL c адресом MegaLight в виде
http://192.168.21.210
2. Импортировать класс MegaLight из файла MegaLight.txt и сделать его родителем класс Relays
Вложение:
class.png
class.png [ 63.37 КБ | Просмотров: 12203 ]

3. Добавить в объект ThisComputer метод setRelayState с кодом
Код:
$objects=getObjectsByClass("MegaLight");
foreach(
$objects as $obj) {
 if(gg($obj['TITLE'].".ID") == $params["id"])
 {
   sg($obj['TITLE'].".status", $params["on"]);
   sg($obj['TITLE'].".value", $params["v"]);
   break;
 }
}
 

Вложение:
setRelayState.png
setRelayState.png [ 17.89 КБ | Просмотров: 12203 ]

4. Создать объекты класса MegaLight для каждого реле, указав его ID в соответствующем свойстве
5. Подвязать свойства status или value нужных реле к соответствующим элементам сцен. Для изменения привязать к методам turnOn, turnOff или switch


Вложения:
MegaLight.zip [662 байт]
Скачиваний: 224


Последний раз редактировалось olehs Пн ноя 23, 2015 3:49 pm, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вс ноя 22, 2015 9:12 pm 
Не в сети

Зарегистрирован: Чт ноя 12, 2015 3:43 pm
Сообщения: 52
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Проверил. Поменял айпишники. Залил. Но зайти не могу на сайт по айпи.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вс ноя 22, 2015 9:17 pm 
Не в сети

Зарегистрирован: Вс июн 14, 2015 11:08 am
Сообщения: 657
Благодарил (а): 49 раз.
Поблагодарили: 156 раз.
а ping идет?
в arp -a видно?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вс ноя 22, 2015 9:21 pm 
Не в сети

Зарегистрирован: Чт ноя 12, 2015 3:43 pm
Сообщения: 52
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Да пингую


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вс ноя 22, 2015 9:21 pm 
Не в сети

Зарегистрирован: Чт ноя 12, 2015 3:43 pm
Сообщения: 52
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
В монитор порта смотрю а там
Config loaded (78 bytes).
Server started at 192.168.1.5
Started


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вс ноя 22, 2015 9:23 pm 
Не в сети

Зарегистрирован: Чт ноя 12, 2015 3:43 pm
Сообщения: 52
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
пытаюсь зайти на 192.168.1.5 пишет веб страница не доступна. А командную строку открываю и этот же айпи без проблем пингую.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вс ноя 22, 2015 9:28 pm 
Не в сети

Зарегистрирован: Чт ноя 12, 2015 3:43 pm
Сообщения: 52
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
А не может быть такого что на 80 порту уже роутер сидит? конфликт. Поправьте если ошибаюсь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вс ноя 22, 2015 9:29 pm 
Не в сети

Зарегистрирован: Чт ноя 12, 2015 3:43 pm
Сообщения: 52
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Что такое arp -a?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вс ноя 22, 2015 9:34 pm 
Не в сети

Зарегистрирован: Вс июн 14, 2015 11:08 am
Сообщения: 657
Благодарил (а): 49 раз.
Поблагодарили: 156 раз.
в командой строке ввести arp -a
выведет таблицу соответствий мак-адресов айпишникам. там рядом с 192.168.1.5 должен отобразиться тот же мак, что и в MegaWeb.ino


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 308 ]  На страницу 1, 2, 3, 4, 5 ... 31  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB