[Модуль] Uniel Controllers (uniel)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Geban
Сообщения: 136
Зарегистрирован: Вс июл 14, 2013 2:42 pm
Благодарил (а): 6 раз
Поблагодарили: 26 раз

Re: Модуль работы с контроллерами Uniel

Сообщение Geban » Пн апр 13, 2015 6:27 pm

согласен каждый изголяется как хочет с протоколами. Но хочу заметить что в топике про modbus было оч много желающих подцепить устройства промышленного или полупромышленного типа со стандартизированным modbus rtu например. Не знаю насколько шустро будет работать его реализация на PHP, но стоит попробовать я думаю. у тех же китайцев в продаже полно модулей DIO AIO и прочих прелестей с этим протоколом связи. или тот же DCON, не сильно от модбас отличается. Вообщем я попробую сплодить что-то.. если будет работать, можно будет подумать о модуле. К сожалению я так и не постиг дзэн написания модулей для МДМ )
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Модуль работы с контроллерами Uniel

Сообщение DAP » Пт авг 26, 2016 6:04 pm

Есть ли возможность считывать состояние кнопок С помощю этих контроллеров?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Модуль работы с контроллерами Uniel

Сообщение sergejey » Пн авг 29, 2016 1:22 pm

DAP писал(а):Есть ли возможность считывать состояние кнопок С помощю этих контроллеров?
Честно говоря, надо разбираться. Думаю, что через модуль автоматики можно, но уже столько времени прошло с тех пор, как я этот контроллер в руках держал, так что наверняка и не подскажу. События от контроллера в системе читались без проблем.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Модуль работы с контроллерами Uniel

Сообщение DAP » Пт окт 21, 2016 5:34 pm

Просьба помочь построить конструкцию для работы с serial из php напрямую без шлюза в TCP для работы на raspberry pi.

Моя попытка пока уперлась отсутствие опыта
Вот измененный мной кусок кода uniel.class.php отвечающий за передачу пакета модулю:

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

  //echo "Sending ".$this->binaryToString($payload)."<br/>";exit;
   if ($device['CONNECTION_TYPE']==0) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
     echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "<br/>\n";
     return 0;
    }
    $result = socket_connect($socket, $device['IP'], $device['PORT']);
    if ($result === false) {
     echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
     return 0;
    }
    $len=socket_write($socket, $payload, 8);
    $out = socket_read($socket, 8, PHP_BINARY_READ);
    //echo "Reply ".$this->binaryToString($out)."<br/>";
    return ($this->HexStringToArray($this->binaryToString($out)));
   } elseif ($device['CONNECTION_TYPE']==1) {  //нас интересует то что ниже:
    $serial = /dev/ttyAMA0; // порт с которым будем работать
    safe_exec(stty -F $serial 9600); // настраиваем порт
    safe_exec(echo $payload > $serial); // шлем пакет данных в  SERIAL  $len=socket_write($socket, $payload, 8);
    $out = ?? //присвоим в $out прочитанный из serial ответ (пока не заю как реализовать)//$out = socket_read($socket, 8, PHP_BINARY_READ);
    echo "Reply ".$this->binaryToString($out)."<br/>";
    return ($this->HexStringToArray($this->binaryToString($out)));

 
и он конечно не работает потому что я не знаю php
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Модуль работы с контроллерами Uniel

Сообщение DAP » Пт ноя 25, 2016 9:00 pm

Подключил через преобразователь и столкнулся с непонятным поведением модуля автоматики при этом диммер работает нормально.
Непонятность в следующем: модуль автоматики не исполняет команд если в в поле Тип свыбрть Automation, если выбрать dimmer то реле срабатывает если интервал автообновления выбрать отличным от 0 то реле включается и отщелкивается обратно.

PS
Весь мозг мне этот uniel вынес - настолько не гибкие девайсы в плане настройки... больше ни в жизни не куплю.
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Модуль работы с контроллерами Uniel

Сообщение DAP » Сб ноя 26, 2016 12:59 am

:evil: Категорически не желает работать через модуль, только в ручном режиме дает включать/выключать реле (отправляю пакет из мануала), а если привязать реле к объекту то либо не работает совсем либо включает выключает только реле номер 0 причем даже если я пытаюсь включить любое другое реде срабатывает только нулевое
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Модуль работы с контроллерами Uniel

Сообщение DAP » Сб ноя 26, 2016 1:55 am

Ошибка в коде модуля:

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

if ($device['TYPE']=='light' || $device['TYPE']=='automation') {
   if ($value>0) {
    //FF FF 06 01 FF 12 00 18
    $this->sendDeviceCommand($prop['DEVICE_ID'], 0x06, array(0xff, 0x12+(int)$prop['NUM'], 0x00));
   } else {
    //FF FF 06 01 00 12 00 19
    $this->sendDeviceCommand($prop['DEVICE_ID'], 0x06, array(0x00, 0x12+(int)$prop['NUM'], 0x00));
   }
  } elseif ($device['TYPE']=='dimmer') {
   //FF FF 0A 01 11 00 00 1C
   $this->sendDeviceCommand($prop['DEVICE_ID'], 0x0a, array((int)$value, 0x00+(int)$prop['NUM'], 0x00));
  }
 }
0x12+(int)$prop['NUM'], подходит только для модуля освещения, для модуля автоматики нужно использовать 0x1a+(int)$prop['NUM'],

Исправил так (скобки может не ровно стоят но работает - делал в блокноте):

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

 function setProperty($property_id, $value) {
  $prop=SQLSelectOne("SELECT * FROM unielproperties WHERE ID='".$property_id."'");
  $prop['CURRENT_VALUE']=$value;
  SQLUpdate('unielproperties', $prop);

  $channel=$prop['NUM'];
  $device=SQLSelectOne("SELECT TYPE FROM unieldevices WHERE ID='".$prop['DEVICE_ID']."'");

  if ($device['TYPE']=='light') {
   if ($value>0) {
    //FF FF 06 01 FF 12 00 18
    $this->sendDeviceCommand($prop['DEVICE_ID'], 0x06, array(0xff, 0x12+(int)$prop['NUM'], 0x00));
   } else {
    //FF FF 06 01 00 12 00 19
    $this->sendDeviceCommand($prop['DEVICE_ID'], 0x06, array(0x00, 0x12+(int)$prop['NUM'], 0x00));
   }
   } elseif ($device['TYPE']=='automation') {
   if ($value>0) {
    //FF FF 06 01 FF 1a 00 18
    $this->sendDeviceCommand($prop['DEVICE_ID'], 0x06, array(0xff, 0x1a+(int)$prop['NUM'], 0x00));
   } else {
    //FF FF 06 01 00 1a 00 19
    $this->sendDeviceCommand($prop['DEVICE_ID'], 0x06, array(0x00, 0x1a+(int)$prop['NUM'], 0x00));
   }
   } elseif ($device['TYPE']=='dimmer') {

   //FF FF 0A 01 11 00 00 1C
   $this->sendDeviceCommand($prop['DEVICE_ID'], 0x0a, array((int)$value, 0x00+(int)$prop['NUM'], 0x00));
  }
 }
 
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Модуль работы с контроллерами Uniel

Сообщение DAP » Вс ноя 27, 2016 1:44 pm

sergejey писал(а):
DAP писал(а):Есть ли возможность считывать состояние кнопок С помощю этих контроллеров?
Честно говоря, надо разбираться. Думаю, что через модуль автоматики можно, но уже столько времени прошло с тех пор, как я этот контроллер в руках держал, так что наверняка и не подскажу. События от контроллера в системе читались без проблем.
Отвечу сам - состояние нефиксируемых кнопок считать можно, но не через модуль Majordomo. Проблема в том что модули автоматики не могут "оповещать" систему о событии ( изменение уровня на входе или выходе), а могут только отвечать на запрос. В результате чтобы считать нажатие нефиксируемой кнопки нужно опрашивать модуль безостановочно, а штатный модуль в Majordomo позволяет опрашивать модули не чаще секунды. Можно конечно сделать опрос бесконечно цикличным, но ИМХО - извращение, меня учили что для обработки кнопок используют прерывания, а не цикл.

Баг который меня довольно сильно раздражает и я не понимаю как его убрать :
https://www.youtube.com/watch?v=HsHD2Zo7Eas
Он заключается в том что если для контроллера задать период автообновления отличный от 0, то слайдер связанный с свойством яркость канала диммера "пляшет при переключении" а выключатель может либо аналогично плясать либо показывать что сработал но по факту может не сработать.

Далее - поле "Период автообновления: " не использует то время которое в нем указано т.е. не важно указано там 1 или 10, модуль опрашивает контроллер 1 раз в секунду.
ps
Продолжаю разбираться и вникать в php :) может позже соображу что не так.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Модуль работы с контроллерами Uniel

Сообщение sergejey » Пн ноя 28, 2016 12:56 pm

Внёс предложенные изменения, спасибо. По глюкам -- если будет возможность самостоятельно разобраться и исправить, то буду только рад ) У меня сейчас нет этого оборудования в наличии, чтобы проверить.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Модуль работы с контроллерами Uniel

Сообщение DAP » Пн ноя 28, 2016 10:18 pm

У меня маловато знаний в php для этого, поэтому как вариант могу предложить стенд для теста онлайн - сам контроллер я подключу через преобразаватель к USR-TCP232-310 и проброшу порт в интернет на белый IP, к контроллеру подключу светодиоды для индикации и понимания того что с ним происходит, всё это вы сможете наблюдать через 4мегапиксельную камеру по сети. Это даст возможность допилить модуль.
Как вам такое решение?
Ответить