Управление освещением на lutron

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

vova5049
Сообщения: 64
Зарегистрирован: Пт фев 21, 2014 10:56 am
Откуда: Днепропетровск
Благодарил (а): 1 раз
Поблагодарили: 5 раз

Управление освещением на lutron

Сообщение vova5049 » Пт мар 21, 2014 1:51 pm

  • Здравствуйте, может рановато задаю вопросы, еще не уверенно себя чувствую в этой теме,
но без Вашей помощи никак.
  • Есть сеть контроллеров lutron, которые по интерфейсу DALI управляют балластами ламп,
все лампы объединены в группы. Собственно этими группами и нужно управлять.
  • Есть шлюз, одной стороной подключенный в lutron-овскую сеть, а с другой стороны
принимающий команды либо по rs232, либо по telnet. Поискав по форуму нашел только
одну реализацию работы с telnet : http://smartliving.ru/forum/viewtopic.p ... lnet#p5427
Попробовал отсылать команды - в общем все срабатывает, но, мягко говоря, это немного не то.
В этой реализации скрипт просто отправляет команды, не "слушая" ответа на них. Первым делом мне нужно
научится слушать ответы телнет-сервера. Кроме того мне нужно не просто запустить скрипт, а передать в него
значения, т.к. зон у меня больше сотни.
  • Вот так выглядит команда :
#DEVICE,0x007ABC1E,302,14,0,00
где:0x007ABC1E - серийный номер контроллера
302 - номер зоны освещения
14 - команда установки яркости
0 - значение яркости
00 - задержка в сек. после которой яркость изменится

Если я правильно понимаю, мне для этих значений нужно завести переменные в системе.
Примерно, я себе это так представляю :
  1. Создать обьекты в классе ????? на каждую зону управления
например: zal1bl1ceil1; zal3bl3case3

со свойствами:

enabled - переключаем свойство в 0, когда выключаем зону и присваиваем значение
из свойства level объекта, когда включаем (если контроллер без диммирования, то в level
нужно поставить 100). Таким образом enabled будет от 0 до 100.
level - уровень освещения установленный в зоне во включенном состоянии.
Мне не нужны слайдеры и в процессе эксплуатации я не буду регулировать яркость,
я во время настройки определю каждому объекту необходимый уровень яркости,
а при необходимости его можно будет поправить в админке.
level2
level3
level4
- пока не знаю как правильно сделать, но иногда нужно одномоментно
изменить состояние всех зон на предварительно настроенные уровни для каждого
объекта - например вечером выключить свет
number - S/N устройства к которому подключена зона.
zone - номер зоны ( не уникальный номер, на некоторых контроллерах от 301 до 332, на некоторых от 1 до 8 )

методами :

switchLevel
switchOff
toggleSwitch - если enabled == 0, то устанавливаем яркость в зоне равной свойству level этой зоны
и присваиваем свойству enabled значение level, в противном случае запускаем
switchOff присваиваем свойству enabled значение 0.

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

А вообще, у меня, пока еще, каша в голове со всеми этими свойствами, методами, наследованиями.
Все мои навыки в программировании заканчивались на ZX Spectrum со своим встроенным Baisic,
поэтому, помогайте, дорогие друзья, без Вашей помощи в моей голове порядок не настанет.
Подскажите, я хоть в правильном направлении мыслю, или я вообще неправильно это все представляю ?

PS. Извините за многабукв.
2*MegaD328, Система на Raspberry Pi 2
dimitrystd
Сообщения: 80
Зарегистрирован: Пн апр 01, 2013 10:20 pm
Откуда: Днепропетровск
Благодарил (а): 7 раз
Поблагодарили: 3 раза

Re: Управление освещением на lutron

Сообщение dimitrystd » Пн мар 24, 2014 11:43 pm

Поскольку вы ещё в самом начале пути и можете выбирать, то я бы вам предложил подумать над двумя вариантами.
1) Сделать полностью автономную систему с возможностью кастомизировать логику через МД. Это чтото вроде того как MegaD умеет работать автономно
2) Реализовать полностью программно через МД

В этом сообщении опишу свои мысли про первый вариант. Он конечно сложнее, требует паяльника, но он гарантирует что ваш свет будет работать всегда. МД ещё не стабилен, может повиснуть в любой момент. Т.е. когда перестаёт включатся свет когда вы в командировке, то это легко решить, можно подключится к серверу или попросить жену перегрузить. Но вот если в 4 ночи вы просыпаетесь от звука датчика протечки, выходите в коридор а свет сам не включился, вы добираетесь в потёмках до кухни и свет всё равно не включается, то в этот момент хочется решить проблему с протечкой, а не тратить 20мин на восстановление сервера.

Поскольку lutron имеет интерфейс с которым MegaD не может работать (да и нам не очень удобен телнет), было бы хорошо сделать адаптер. Точнее могут быть 2 варианта адаптера
1) HTML -> Telnet -> DALI
2) HTML -> RS232 -> DALI
Т.е. нужно сделать переходник на основе ардуино. Лучше в картинках покажу

Первый вариант
Lutrom1.png
Lutrom1.png (39.85 КБ) 12995 просмотров
Нужно сделать всего один девайс который будет проксировать (конвертировать) все запросы из http протокола в telnet.

Второй вариант
Lutrom2.png
Lutrom2.png (39.23 КБ) 12995 просмотров
Нужно сделать по одному девайсу на каждый lutron деайс. Зато реализация должна быть проще (RS232)

Завести http протокол на ардуино легко, есть примеры в соседней теме.
vova5049
Сообщения: 64
Зарегистрирован: Пт фев 21, 2014 10:56 am
Откуда: Днепропетровск
Благодарил (а): 1 раз
Поблагодарили: 5 раз

Re: Управление освещением на lutron

Сообщение vova5049 » Вт мар 25, 2014 1:33 pm

Дело в том, что отказоустойчивость, о которой вы говорите, при использовании дополнительного адаптера интерфейсов из HTML -> Telnet или из HTML -> RS232,
имеет смысл, если реализовать еще какой либо человеко-интерфейс, кроме МДМ, через который и подавать команды на управление светом в обход МДМ.
А если вы имеете ввиду автономную реакцию на железные кнопки, то в данном проекте их просто нет. Вашу идею я реализовал бы (скорее даже реализую) дома,
а проект со 100 зонами освещения - это на работе, и включаю - выключаю свет только я и мой начальник и это реализовано у меня уже двумя способами:
1. Стоит панель управления Crestron, которая по rs232 подключена к шлюзу освещения lutron, и, в общем то, безотказно работает и еще управляет видеосервером и двумя
десятками медиаплееров popcorn. Но у меня нет ни знаний, ни доступа для программирования Crestron, а свет с панели управляется двумя кнопками: ВКЛ всё и ВЫКЛ всё.

2. Скрипты, которые управляют по telnet. Пробовал и на Perl (который вызывается кнопочками на веб-интерфейсе), и на VBscript, который просто запускал на Windows-машинке в той же локалке.

Так что для моего варианта на работе, наверное, нет смысла в дополнительном адаптере. И с МДМ я завелся, только для того, чтоб дать возможность сотрудникам
локального управления зонами, так что если МДМ зависнет, а мне нужно будет аварийно все включить, то я или запущу скрипт, или тыркну на Crestron.
А telnet я побороть все же хочу, т.к. те же рабочие медиапроигрыватели popcorn могут управляться по telnet.

Поэтому, на данный момент озабочен написанием класса controllerlutron, который будет слать команды по телнету
2*MegaD328, Система на Raspberry Pi 2
vova5049
Сообщения: 64
Зарегистрирован: Пт фев 21, 2014 10:56 am
Откуда: Днепропетровск
Благодарил (а): 1 раз
Поблагодарили: 5 раз

Re: Управление освещением на lutron

Сообщение vova5049 » Вт мар 25, 2014 4:12 pm

dimitrystd,не подскажете в чем засада?
Пытаюсь сформировать переменную, по образу и подобию того, как это сделано у Вас в классе Megadevice,
для контроля вывожу содержимое переменных:

Код: Выделить всё

say ('controllerlutron начал выполняться');
  say ($params['number']);
  say ($params['zone']);
  say ($params['level']);
$msg = sprintf("#DEVICE,%d,%d,14,%d,00/x0D\r\n",$params['number'],$params['zone'],$params['level']);
say ($msg);
И вот, что получаю в ответ:
14:43 Alice: #DEVICE,0,5,14,100,00/x0D

14:43 Alice: 100
14:43 Alice: 5
14:43 Alice: 0x00bd768d
14:43 Alice: controllerlutron начал выполняться
Т.е. вместо переменной $params['number'] = 0x00bd768d, в переменной $msg я получаю 0
2*MegaD328, Система на Raspberry Pi 2
dimitrystd
Сообщения: 80
Зарегистрирован: Пн апр 01, 2013 10:20 pm
Откуда: Днепропетровск
Благодарил (а): 7 раз
Поблагодарили: 3 раза

Re: Управление освещением на lutron

Сообщение dimitrystd » Вт мар 25, 2014 5:00 pm

Посмотрел нелп для sprintf
%d - the argument is treated as an integer
Инересно как вы присваеваете значение 0x00bd768d масиву $params['number']. Если прям так в коде

Код: Выделить всё

$params['number'] = 0x00bd768d;
то тогда должно было правильно сконвертировать шестнадцатеричное число в десятиричное. Но если где то в интерфейсе МД, то я уверен оно хранится как строка.
Итак %d означает показать целое число, оно пытается сконвертировать строку "0x00bd768d" в число и получает 0. Я думаю лучше написать так

Код: Выделить всё

$msg = sprintf("#DEVICE,%s,%d,14,%d,00/x0D\r\n",$params['number'],$params['zone'],$params['level']);
dimitrystd
Сообщения: 80
Зарегистрирован: Пн апр 01, 2013 10:20 pm
Откуда: Днепропетровск
Благодарил (а): 7 раз
Поблагодарили: 3 раза

Re: Управление освещением на lutron

Сообщение dimitrystd » Вт мар 25, 2014 5:10 pm

А если вы имеете ввиду автономную реакцию на железные кнопки, то в данном проекте их просто нет.
Теперь всё ясно, то я сделал неправильное заключение из вашего сообщения из другой темы.
Я бы предложил вам так же разделить логику работы с железом и сами светильники на 2 класса. Как вы видели в другой теме, я сделал классы MegaD и Light. В вашем случае это могут быть controllerlutron и Light.
controllerlutron
Ответственность:
- генерирует валидные команды и отсылает их через телнет
- парсит ответы
Свойства:
- deviceId
- zone
Методы:
- sendCommand (ну или как-то так)

Касательно свойства zone у меня вопросы
- Это логическая зона? т.е. к одному девайсу присоединено скажем 5 контуров освещения и у каждого контура своя зона?
- Или каждый девайс идентифицируется не только своим номером, но ещё и зоной? Т.е у вас сотни таких девайсов по офису

Если первый вариант, то я бы отправил зону в класс Light, потому что именно он описывает где находится освещение, какое у него поведение и т.д.
vova5049
Сообщения: 64
Зарегистрирован: Пт фев 21, 2014 10:56 am
Откуда: Днепропетровск
Благодарил (а): 1 раз
Поблагодарили: 5 раз

Re: Управление освещением на lutron

Сообщение vova5049 » Вт мар 25, 2014 6:42 pm

Большое спасибо dimitrystd за ответы. Понимаю, что по хорошему нужно сначала было изучить синтаксис PHP,
но отсутствие опыта программирования дает о себе знать - просто не знаешь с какой стороны подойти к изучению.
то тогда должно было правильно сконвертировать шестнадцатеричное число в десятиричное. Но если где то в интерфейсе МД, то я уверен оно хранится как строка.
Итак %d означает показать целое число, оно пытается сконвертировать строку "0x00bd768d" в число и получает 0. Я думаю лучше написать так

Код: Выделить всё

$msg = sprintf("#DEVICE,%s,%d,14,%d,00/x0D\r\n",$params['number'],$params['zone'],$params['level']); 
отлично, так, конечно же, заработало, пока ждал ответа, решил вопрос так:

Код: Выделить всё

$SN = $params['number']
$msg = sprintf("#DEVICE,$SN,%d,14,%d,00/x0D\r\n",$params['zone'],$params['level']); 
но уже сделал, как Вы написали, а то феншуй совсем испугается и никогда ко мне не придет ))).
Касательно свойства zone у меня вопросы
От инсталляторов у меня осталась вот такая бумажечка:
Включение зоны на определенный уровень яркости (на примере группы
контроллера QSNE-2DAL-D)
#DEVICE,0x007ABC1A,301,14,75,05/x0
301 - номер группы на устройстве 007ABC1A;
14 - команда установления определенной яркости;
75 - значение яркости в процентах, где 0 - выключено, 100 - включено на макс
яркость;
05 - время перехода от текущего значения яркости к устанавливаемому данной
командой.
Включение зоны на определенный уровень яркости (на примере группы
контроллера реле QSNE-4S10-D)
#DEVICE,0x007b03bf,5,14,0/x0 или #DEVICE,0x007b03bf,301,14,100/x0
5 - номер 1-й группы на устройстве 007b03bf;
14 - команда установления определенной яркости;
0 или 100 - крайние значения яркости в процентах, где 0 - выключено, 100 -
включено на макс яркость, так как группа не диммируемая, то допустимы только
значения 0 и 100;
время перехода задать невозможно.
Включение зоны на определенный уровень яркости (на примере группы
контроллера QSGR-6P)
#DEVICE,0x006d6f84,1,14,75,05/x0
1 - номер 1-й группы на устройстве 006d6f84;
14 - команда установления определенной яркости;
75 - значение яркости в процентах, где 0 - выключено, 100 - включено на макс
яркость;
05 - время перехода от текущего значения яркости к устанавливаемому данной
командой.
И табличка с планом помещения на котором обозначены лампочки, объединенные в зоны
и помеченные, как 1-301; 1-302 ;1-303.............15-6
1 - 007ABC1A - 301-332 (от 1-й до 32-х)
2 - 007ABC1B - 301-332 (от 1-й до 32-х)
3 - 007ABC14 - 301-332 (от 1-й до 32-х)
4 - 007ABC13 - 301-332 (от 1-й до 32-х)
5 - 007ABC1E - 301-332 (от 1-й до 32-х)
6 - 007ABC19 - 301-332 (от 1-й до 32-х)
7 - 007ABC1D - 301-332 (от 1-й до 32-х)
8 - 007ABC16 - 301-332 (от 1-й до 32-х)
9 - 007ABC17 - 301-332 (от 1-й до 32-х)
10- 007b03bf - 5-8 (от 1-й до 4-х)
11- 007b03Ae - 5-8 (от 1-й до 4-х)
12- 007b03c5 - 5-8 (от 1-й до 4-х)
13- 007b03cb - 5-8 (от 1-й до 4-х)
14- 006d6f84 - 1-6 (от 1-й до 6-ти)
15- 006d6304 - 1-6 (от 1-й до 6-ти)

получается зоны, вроде как и не виртуальные, а соответствуют контроллерам, но
сами лампочки, входящие в зону могут быть подключены и к другому контроллеру.
с 1 по 9 - это контроллеры с двумя каналами DALI, на каждый канал которых можно
подключать до 64 устройств (в моем случае - это балласты для светодиодных светильников)


В общем, заработал класс, может, конечно из-за недостатка опыта(или мозгов))) имена методам и
свойствам дал нелогичные - обозвал их еще до вашей рекомендации.

1. Создал класс lightlutron со свойствами:
enabled - текущее состояние(0 или 1)
level
level2
number - s/n контроллера
zone - номер зоны на этом контроллере

и методами
switchLevel

Код: Выделить всё

say ('вызван switchLevel');
$params['number'] = $this-> getProperty('number');
$params['zone'] = $this-> getProperty('zone');
$params['level'] = $this-> getProperty('level');
$params['propertyName'] = $this->object_title.'.enabled';
say ('установили enabled будем вызывать controllerlutron');
callMethod ("controllerlutron1.output",$params);
say ('вернулись из controllerlutron');
switchOff

Код: Выделить всё

say ('вызван switchOff');
$params['number'] = $this-> getProperty('number');
$params['zone'] = $this-> getProperty('zone');
$params['level'] = 0;
$params['propertyName'] = $this->object_title.'.enabled';
callMethod ("controllerlutron1.output",$params);
toggleSwitch

Код: Выделить всё

say ('вызван toggleSwitсh');
   if ($this->getProperty('enabled') == 1)
  {
  say ('вызов switchLevel из toggleSwith');
  $this->callMethod('switchLevel');}
else
  {say ('вызов switchOff из toggleSwith');
  $this->callMethod('switchOff');
  }
И в этом классе, пока, два объекта для тестов:
zal1bl8ceil1 со свойствами level=100; number=0x00bd768d; zone=5
zal1bl8ceil2 со свойствами level=100; number=0x00bd768d; zone=6

2. Создал класс controllerlutron со свойствами:
ipAddress
login
и один объект controllerlutron1 со свойствами ipAddress=192.168.0.3; login=nwk
Но использовать эти свойства в коде пока не стал, т.к. в отличие от мегадевайса
я отправляю данные не на каждый контроллер по отдельности, а в шлюз.

Метод пока один:
output

Код: Выделить всё

$address = '192.168.0.3';
$port = 23;
  say ('controllerlutron начал выполняться');
  say ($params['number']);
  say ($params['zone']);
  say ($params['level']);
  if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {return 0;}
  else {}
  $result = socket_connect($socket, $address, $port);
  if ($result === false) {return 0;} else {}
  $out = socket_read($socket, 7); //Читаем сообщение от сервера
  say ($out);
  $msg = "nwk\r\n";
  socket_write($socket, $msg, strlen($msg)); //Отправляем серверу сообщение
   say ($msg);
  $out = socket_read($socket, 24); //Читаем сообщение от сервера
  //$msg = "#DEVICE,0x00bd768d,5,14,0,00/x0D\r\n"; //Команда отключения
  $msg = sprintf("#DEVICE,%s,%d,14,%d,00/x0D\r\n",$params['number'], $params['zone'],$params['level']);
  say ($msg);
  socket_write($socket, $msg, strlen($msg));
  socket_close($socket);
  
  $level = $params['level'];
  if ($level == 0) {setGlobal($params['propertyName'], 0);}
  else {setGlobal($params['propertyName'], 1);}
Сразу хотел еще считывать статус, но есть несколько проблем:
1. Как считать в переменную то, что ответил шлюз, я понял, но еще не научился выделять из этой строки нужную мне информацию,
но это ладно - вопрос пары часов.
2. Два контроллера, почему-то упорно не хотят отвечать, команды исполняют, но на запросы не отвечают
3. Система и так работает тормознуто - 100 зон включаются больше минуты, боюсь предположить, что будет,
если я перед включением-выключением буду слать еще и запрос состояния.

И в конце концов, при отправке команды, я сохраняю статус. И если я буду управлять из МДМ, по состояния сходятся.
2*MegaD328, Система на Raspberry Pi 2
Podvoh1
Сообщения: 8
Зарегистрирован: Вт сен 29, 2015 10:58 am
Благодарил (а): 0
Поблагодарили: 0

Re: Управление освещением на lutron

Сообщение Podvoh1 » Вт сен 29, 2015 11:21 am

Не могу найти приложение для программирования управляющего устройства Lutron Energi Savr Node Dali ( QSNE-2DAL-D) , которое устанавливается на Ipad или Iphone. В доках говориться ,что оно на Apple Story, но там не нашёл, видимо не правильно ищу, а ищу поиском..,но точного названия этого приложения не знаю, помогите,пл..!
http://www.lutron.kiev.ua/products/ESN/ESN.html
vova5049
Сообщения: 64
Зарегистрирован: Пт фев 21, 2014 10:56 am
Откуда: Днепропетровск
Благодарил (а): 1 раз
Поблагодарили: 5 раз

Re: Управление освещением на lutron

Сообщение vova5049 » Вт сен 29, 2015 11:46 am

Energi Savr, так и называется. сейчас в аппсторе версия 8.2.2.1. Но только для iPad-а версии нет, выбери при поиске в appStore - поиск "только для iPhone"
2*MegaD328, Система на Raspberry Pi 2
Podvoh1
Сообщения: 8
Зарегистрирован: Вт сен 29, 2015 10:58 am
Благодарил (а): 0
Поблагодарили: 0

Re: Управление освещением на lutron

Сообщение Podvoh1 » Вт сен 29, 2015 12:28 pm

vova5049 писал(а):Energi Savr, так и называется. сейчас в аппсторе версия 8.2.2.1. Но только для iPad-а версии нет, выбери при поиске в appStore - поиск "только для iPhone"
СП.., Нашёл!!! а то я только для IPad искал..))
Ответить