Страница 2 из 4

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

Добавлено: Пн апр 13, 2015 6:27 pm
Geban
согласен каждый изголяется как хочет с протоколами. Но хочу заметить что в топике про modbus было оч много желающих подцепить устройства промышленного или полупромышленного типа со стандартизированным modbus rtu например. Не знаю насколько шустро будет работать его реализация на PHP, но стоит попробовать я думаю. у тех же китайцев в продаже полно модулей DIO AIO и прочих прелестей с этим протоколом связи. или тот же DCON, не сильно от модбас отличается. Вообщем я попробую сплодить что-то.. если будет работать, можно будет подумать о модуле. К сожалению я так и не постиг дзэн написания модулей для МДМ )

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

Добавлено: Пт авг 26, 2016 6:04 pm
DAP
Есть ли возможность считывать состояние кнопок С помощю этих контроллеров?

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

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

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

Добавлено: Пт окт 21, 2016 5:34 pm
DAP
Просьба помочь построить конструкцию для работы с 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

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

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

PS
Весь мозг мне этот uniel вынес - настолько не гибкие девайсы в плане настройки... больше ни в жизни не куплю.

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

Добавлено: Сб ноя 26, 2016 12:59 am
DAP
:evil: Категорически не желает работать через модуль, только в ручном режиме дает включать/выключать реле (отправляю пакет из мануала), а если привязать реле к объекту то либо не работает совсем либо включает выключает только реле номер 0 причем даже если я пытаюсь включить любое другое реде срабатывает только нулевое

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

Добавлено: Сб ноя 26, 2016 1:55 am
DAP
Ошибка в коде модуля:

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

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));
  }
 }
 

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

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

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

Далее - поле "Период автообновления: " не использует то время которое в нем указано т.е. не важно указано там 1 или 10, модуль опрашивает контроллер 1 раз в секунду.
ps
Продолжаю разбираться и вникать в php :) может позже соображу что не так.

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

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

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

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