есть особенность 1-wire ключей (status)

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

denis
Сообщения: 284
Зарегистрирован: Сб ноя 24, 2012 11:47 am
Благодарил (а): 32 раза
Поблагодарили: 28 раз

Re: есть особенность 1-wire ключей (status)

Сообщение denis » Ср дек 24, 2014 10:16 pm

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

Re: есть особенность 1-wire ключей (status)

Сообщение sergejey » Чт дек 25, 2014 9:56 pm

denis писал(а):Странно как-то работает, если менять свойство через админку, выключатели обновляются, если щелкать одним из них, то второй не обновляется(
Сейчас сделано так, что после обновления связанной переменной её новое значение не передаётся в модуль, вызвавший это обновление. Если говорить проще, то при изменении свойства через один пункт меню, другой пункт меню не изменится до перезагрузки страницы. Хотя, я думаю, это ограничение можно будет исправить. Помечу себе.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край
Благодарил (а): 32 раза
Поблагодарили: 68 раз

Re: есть особенность 1-wire ключей (status)

Сообщение zelevova » Пт дек 26, 2014 11:41 am

Сергей, еще вдогонку о выключателях с одним свойством.
Если создать в Меню управления элемент и в нем указать "использовать элемент" на существующую кнопку (или ползунок или радио бутон и т.д.). То при использовании этого элемента подтверждение в виде "-ОК" появляется у исходного элемента а не у того который переключаешь и данные не обновляются ни в объектах, ни в интерфейсе.
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: есть особенность 1-wire ключей (status)

Сообщение Victor_S » Пт дек 26, 2014 2:39 pm

Я тоже долго не мог понять всяческих фокусов MD и DS2408...:) Так же наблюдал все описанные выше непонятки...
Пока наконец не поудалял все и не начал исследовать поведение данного модуля в различных состояниях(канал вкл/выкл кнопкой и вкл/выкл программно плюс разные их комбинации), и составил себе табличку состояний sensed и pio для каждого случая. При этом собрал себе тестовый стенд и подключил к каждому каналу DS2408 по лампочке. Оказалось, что включению/выключению лампочки соответствует не один бит sensed на канал, а их комбинация(множество комбинаций, и если считывать только один бит - будут те самые непонятки...:)). Вообще для DS2408(и 2406 я полагаю тоже) класс реле не подходит, нужно создавать свой, с другими свойствами и методами. Сейчас, разобравшись, у меня нормально работает модуль от радиосетей 2 лампы на 2 выключателя(2408, дополнительные каналы пока не использую).
Без дополнительных каналов(которые собственно к лампочкам и не относятся в данном модуле) для определения статуса канала(лампочка вкл-1 или выкл-0) нужно анализировать комбинацию следующих свойств: pio.4, pio.5, sensed.2, sensed.3, sensed.4, sensed.5 и сохранять в свойствах ch1_status и ch2_status, которыми в дальнейшем и оперировать для определения статуса объекта, а изменять статус - соответствующим свойством pio.
Я в свойствах устройства 1ware привязал все эти свойства к своему объекту и там же каждый раз вызываю метод опроса состояния, который анализируя все выше указанные pio и sensed присваивает соответствующие статусы моим ch*_status.
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: есть особенность 1-wire ключей (status)

Сообщение Victor_S » Пт дек 26, 2014 2:50 pm

Забыл добавить одно пожелание к Сергею...
Касается оно интерфейса в настройках привязки действия при клике на элементе сцены.
Если выбрать действие - реакция на Объект.Свойство - то появляется следующая картинка(словами т.к. MJ у меня на другой машине без инета):
label: Запускать Объект.Метод ->дальше справа большое поле ввода.
Во второй строке - под label пусто, а под полем ввода еще одно такое же поле ввода.
Я потратил очень много времени пока не догадался, что нужно вводить Объект в верхнее поле, а Метод - в нижнее...:( т.к. на экране это выглядит так что нужно вводить в верхнее поле сразу значение Объект.Метод, а второе поле еще для одного метода...:)
Думаю стоит поставить по одному label перед каждым полем ввода:
Объект - > поле
Метод - > поле.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: есть особенность 1-wire ключей (status)

Сообщение sergejey » Пт дек 26, 2014 8:12 pm

Victor_S писал(а):Забыл добавить одно пожелание к Сергею...
Касается оно интерфейса в настройках привязки действия при клике на элементе сцены.
Если выбрать действие - реакция на Объект.Свойство - то появляется следующая картинка(словами т.к. MJ у меня на другой машине без инета):
label: Запускать Объект.Метод ->дальше справа большое поле ввода.
Во второй строке - под label пусто, а под полем ввода еще одно такое же поле ввода.
Я потратил очень много времени пока не догадался, что нужно вводить Объект в верхнее поле, а Метод - в нижнее...:( т.к. на экране это выглядит так что нужно вводить в верхнее поле сразу значение Объект.Метод, а второе поле еще для одного метода...:)
Думаю стоит поставить по одному label перед каждым полем ввода:
Объект - > поле
Метод - > поле.
Сейчас, на сколько я помню, выбор связанных объектов, свойств и методов идёт через выбор из списка, так что ошибиться будет сложно.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: есть особенность 1-wire ключей (status)

Сообщение Victor_S » Вт янв 13, 2015 9:19 am

sergejey писал(а): Сейчас, на сколько я помню, выбор связанных объектов, свойств и методов идёт через выбор из списка, так что ошибиться будет сложно.
Сейчас это где? :)
Ставил систему с сайта за несколько дней до своего поста... Комп с MD пока без выхода в инет, поэтому сам не обновляется. Хорошо бы все же какие-то апдейты для таких случаев выкладывать.

Появился вопрос по управлению многоканальными 1-wire ключами:
Как можно одним вызовом setProperty передать несколько параметров в устройство? Или может как-то по другому, например, включить/выключить несколько каналов сразу, а не по очереди?
Тот же вопрос по функции getProperty(). Каким образом за один вызов можно прочитать и присвоить переменным несколько параметров?
У меня статус 2-х канального ключа определяестя постоянно вот таким кодом:
$p4=$this->getProperty("pio4");
$p5=$this->getProperty("pio5");
$s2=$this->getProperty("sens2");
$s3=$this->getProperty("sens3");
$s4=$this->getProperty("sens4");
$s5=$this->getProperty("sens5");
if(((!$p4 or $p4==0) and (!$p5 or $p5==0) and (!$s2 or $s2==0) and (!$s3 or $s3==0) and $s4==1 and $s5==1)
or ($p4==1 and (!$p5 or $p5==0) and (!$s2 or $s2==0) and (!$s3 or $s3==0) and (!$s4 or $s4==0) and $s5==1)
or ((!$p4 or $p4==0) and $p5==1 and (!$s2 or $s2==0) and (!$s3 or $s3==0) and $s4==1 and (!$s5 or $s5==0))
or ($p4==1 and $p5==1 and (!$s2 or $s2==0) and (!$s3 or $s3==0) and (!$s4 or $s4==0) and (!$s5 or $s5==0))
)
{
$this->setProperty("ch1_status", 0);
$this->setProperty("ch2_status", 0);
}
if(
((!$p4 or $p4==0) and (!$p5 or $p5==0) and $s2==1 and $s3==1 and $s4==1 and $s5==1)
or ($p4==1 and $p5==1 and $s2==1 and $s3==1 and (!$s4 or $s4==0) and (!$s5 or $s5==0))
)
{
$this->setProperty("ch1_status", 1);
$this->setProperty("ch2_status", 1);
}
if(
($p4==1 and (!$p5 or $p5==0) and (!$s2 or $s2==0) and $s3==1 and (!$s4 or $s4==0) and $s5==1)
or ((!$p4 or $p4==0) and (!$p5 or $p5==0) and (!$s2 or $s2==0) and $s3==1 and $s4==1 and $s5==1)
)
{
$this->setProperty("ch1_status", 0);
$this->setProperty("ch2_status", 1);
}
if(
((!$p4 or $p4==0) and $p5==1 and $s2==1 and (!$s3 or $s3==0) and $s4==1 and (!$s5 or $s5==0))
or ((!$p4 or $p4==0) and (!$p5 or $p5==0) and $s2==1 and (!$s3 or $s3==0) and $s4==1 and $s5==1)
)
{
$this->setProperty("ch1_status", 1);
$this->setProperty("ch2_status", 0);
}

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

Re: есть особенность 1-wire ключей (status)

Сообщение sergejey » Вт янв 13, 2015 10:46 am

Victor_S писал(а):
sergejey писал(а): Сейчас, на сколько я помню, выбор связанных объектов, свойств и методов идёт через выбор из списка, так что ошибиться будет сложно.
Сейчас это где? :)
Ставил систему с сайта за несколько дней до своего поста... Комп с MD пока без выхода в инет, поэтому сам не обновляется. Хорошо бы все же какие-то апдейты для таких случаев выкладывать.
Система обновляется практически ежедневно и последняя установленная версия устаревает уже на следующий день -- где-то в мелочах, где-то в чём-то серьёзном. Аноный обновлений можно смотреть на форуме, а можно на главной странице сайта -- там выкладываются комментарии обновления исходников через GitHub. Да и самостоятельно система не обновляется -- такой функции не заложено.
Victor_S писал(а): Появился вопрос по управлению многоканальными 1-wire ключами:
Как можно одним вызовом setProperty передать несколько параметров в устройство? Или может как-то по другому, например, включить/выключить несколько каналов сразу, а не по очереди?
Тот же вопрос по функции getProperty(). Каким образом за один вызов можно прочитать и присвоить переменным несколько параметров?
У меня статус 2-х канального ключа определяестя постоянно вот таким кодом:
Как его оптимизировать?
Если кратко, то такой возможности нет. Честно говоря, такой необходимости не возникало никогда. А в чём экономия вызова getProperty несколько раз или один? Чем проще функция, тем нагляднее код, даже если это в ущерб его размеру. Указанный код наверное можно как-то оптимизировать, но в первую очередь на уровне логики, т.к. мне не очень понятны все эти условия.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: есть особенность 1-wire ключей (status)

Сообщение Vovix » Вт янв 13, 2015 2:19 pm

Victor_S писал(а):
sergejey писал(а): Сейчас, на сколько я помню, выбор связанных объектов, свойств и методов идёт через выбор из списка, так что ошибиться будет сложно.
Сейчас это где? :)
Ставил систему с сайта за несколько дней до своего поста... Комп с MD пока без выхода в инет, поэтому сам не обновляется. Хорошо бы все же какие-то апдейты для таких случаев выкладывать.

Появился вопрос по управлению многоканальными 1-wire ключами:
Как можно одним вызовом setProperty передать несколько параметров в устройство? Или может как-то по другому, например, включить/выключить несколько каналов сразу, а не по очереди?
Тот же вопрос по функции getProperty(). Каким образом за один вызов можно прочитать и присвоить переменным несколько параметров?
У меня статус 2-х канального ключа определяестя постоянно вот таким кодом:
$p4=$this->getProperty("pio4");
$p5=$this->getProperty("pio5");
$s2=$this->getProperty("sens2");
$s3=$this->getProperty("sens3");
$s4=$this->getProperty("sens4");
$s5=$this->getProperty("sens5");
if(((!$p4 or $p4==0) and (!$p5 or $p5==0) and (!$s2 or $s2==0) and (!$s3 or $s3==0) and $s4==1 and $s5==1)
or ($p4==1 and (!$p5 or $p5==0) and (!$s2 or $s2==0) and (!$s3 or $s3==0) and (!$s4 or $s4==0) and $s5==1)
or ((!$p4 or $p4==0) and $p5==1 and (!$s2 or $s2==0) and (!$s3 or $s3==0) and $s4==1 and (!$s5 or $s5==0))
or ($p4==1 and $p5==1 and (!$s2 or $s2==0) and (!$s3 or $s3==0) and (!$s4 or $s4==0) and (!$s5 or $s5==0))
)
{
$this->setProperty("ch1_status", 0);
$this->setProperty("ch2_status", 0);
}
if(
((!$p4 or $p4==0) and (!$p5 or $p5==0) and $s2==1 and $s3==1 and $s4==1 and $s5==1)
or ($p4==1 and $p5==1 and $s2==1 and $s3==1 and (!$s4 or $s4==0) and (!$s5 or $s5==0))
)
{
$this->setProperty("ch1_status", 1);
$this->setProperty("ch2_status", 1);
}
if(
($p4==1 and (!$p5 or $p5==0) and (!$s2 or $s2==0) and $s3==1 and (!$s4 or $s4==0) and $s5==1)
or ((!$p4 or $p4==0) and (!$p5 or $p5==0) and (!$s2 or $s2==0) and $s3==1 and $s4==1 and $s5==1)
)
{
$this->setProperty("ch1_status", 0);
$this->setProperty("ch2_status", 1);
}
if(
((!$p4 or $p4==0) and $p5==1 and $s2==1 and (!$s3 or $s3==0) and $s4==1 and (!$s5 or $s5==0))
or ((!$p4 or $p4==0) and (!$p5 or $p5==0) and $s2==1 and (!$s3 or $s3==0) and $s4==1 and $s5==1)
)
{
$this->setProperty("ch1_status", 1);
$this->setProperty("ch2_status", 0);
}

Как его оптимизировать?

Чего-то не лишнего ли Вы наворотили? :-)

У меня тоже 1-wire
Ключи от http://radioseti.ru/index.php?route=pro ... uct_id=138
там и двухканальные есть!

на сколько я смог разобраться там всё просто:

1) переключение состояния происходит при передаче в соответствующий pio - "фронта" (перехода) с "0" на "1"
т.е. надо туда выдать последовательно "0" потом "1" и не важно, что там было до этого!

2) состояние определяется через запрос соответствующего канала sensed
при чем, если, например, pio.1 управляет состоянием, то "слушать" состояние нужно у sensed.2
(это применимо для двухканального элемента 1-wire - который используется для управления одной лампой)

но есть особенности, как я и писал ранее:

именно "0" с приклеплённых каналов ключа НЕ СЧИТЫВАЕТСЯ, вместо "0" значение "пустая строка" (или NULL возможно)
поэтому как в Вашем примере сравнение с "0" видимо не корректно!

хотя, если у Вас другие модули (другой производитель), то может у Вас и по другому.... но тогда довольно странно и не логично!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Victor_S
Сообщения: 265
Зарегистрирован: Пт дек 26, 2014 1:58 pm
Благодарил (а): 33 раза
Поблагодарили: 24 раза

Re: есть особенность 1-wire ключей (status)

Сообщение Victor_S » Вт янв 13, 2015 4:55 pm

Да, логика там что называется "в лоб"...:) В предновогодней суете все делалось...:) Когда сел за 4-х канальные переключатели - понял, что это тупиковый подход.
Однако не все там так просто.
Дело в том что каждый канал может переключаться как программно(по pio), так и аппаратно(состояние pio при этом не меняется). Поэтому нужно отслеживать по 2 sensed на канал и корректировать pio при аппаратном переключении. Сейчас все переделал.
То что нельзя за раз прочитать/записать несколько параметров - это печально, здорово замедляет выполнение кода в целом(это можно наблюдать в реальном времени, например включение/выключение всех 4-х каналов идет последовательно с секундной задержкой).
И еще я не очень понял "объектный подход" в MD...
Свойства класса объекты наследуют(появляются свойства ИМЯ_ОБЪЕКТА.СВОЙСТВО) и их можно расширять и удалять, а методы только от класса, т.е. ИМЯ_КЛАССА.МЕТОД. Кстати именно с этим и были связаны ошибки работы переключателей в управлении.
Ответить