Ещё немного обновлений

Новые релизы, обновления и т.п.

Модератор: immortal

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

Re: Ещё немного обновлений

Сообщение Vovix » Пт фев 13, 2015 8:17 pm

sergejey писал(а):
Vit писал(а):Сереж и как его подключить и попробовать в системе?
Он сам по себе подключен, а попробовать наверное только в коде страниц можно. Там просто появляются классы для элементов типа ссылок, кнопок и т.п.
Например, ссылку можно в коде прописать как <a href="#">Ссылка</a>, а можно как <a href="#" class="btn btn-default">Ссылка</a> и последняя будет выглядеть лучше.
Короче, это больше для разработки новых модулей полезно.

Сергей, а "стандартные" части интерфейса стали выглядеть, скажем так - "не очень!"
(например выбор терминала справа в верху)
Скриншот 2015-02-13 21.13.14.png
Скриншот 2015-02-13 21.13.14.png (18.55 КБ) 15525 просмотров
или так только у меня?
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Ещё немного обновлений

Сообщение sergejey » Пт фев 13, 2015 10:16 pm

Наверное так у всех. Со временем доработаю стандартные элементы.
За это сообщение автора sergejey поблагодарил:
Amarok (Сб фев 14, 2015 9:18 am)
Рейтинг: 1.16%

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

Re: Ещё немного обновлений

Сообщение Vovix » Сб фев 14, 2015 4:39 pm

sergejey писал(а):
Victor_S писал(а):Еще бы теперь по первому вопросу разобраться бы...;)
Victor_S писал(а):Где-то в 20-х числах декабря скачал и установил установочную версию под Windows с сайта. Худо-бедно настроил необходимый мне в данный момент функционал. Сегодня решил обновить систему вручную(инета на компе с МД нету). Скачал архив, распаковал, заменил все файлы в папке htdocs и поудалял все файлы installtd в подпапках modules. Перезапустил комп и получил две проблемы:
1. У свойств объектов есть необязательное поле позволяющее запускать некий метод при изменении значения данного свойства. Я использовал данную возможность следующим образом. Свойство было связано с параметром 1-wire объекта, и при изменении его значения вызывался метод, устанавливающий статус входа(геркон) и сообщавший голосом об открытии/закрытии ворот. Все работало нормально, т.е. метод вызывался именно при изменении значения свойства(параметра 1-wire объекта). После обновления данный метод вызывается при каждом опросе 1-wire объекта, даже если значение свойства не меняется.:(
Была как раз "жалоба" на то, что свойство 1-wire не обновляется, если оно одинаковое, так что пришлось обновлять каждый раз и от этого такой побочный эффект. Но он легко лечится. Достаточно в самом методе в начале добавить такой код:

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

if ($params['NEW_VALUE']==$params['OLD_VALUE']) return;
эти параметры передаются при вызове связанного метода и по ним можно определить действительно ли изменялось значение. если не изменялось, то ничего не делаем и выходим из метода
Сергей, этот неприятный момент этим похоже не лечиться!!! Во всяком случае у меня!

И Вот почему:

Как я и писал ранее у меня 1-wire ключи управляются не просто подачей 1 или 0 в соответствующий PIO (например PIO.A), а подачей двух значений: сначала 0 потом 1, т.е. нужен фронт, для смены состояний на противоположное.
Дак вот, теперь при программном включении или выключении света, после последних обновлений происходит следующее:

1) метод переключения света передает в PIO.A, через привязанное свойство trigOnOff, состояние "0" ( но внимание не забываем, что при проверке значение реально становиться "" - пустая строка)
2) поскольку установлено правило запускать метод statusChanged при изменении свойства status (которое связанно с Sensed.B), метод успешно и запускается, хотя изменения значения не было
3) метод переключения света, заканчивая свою работу, передает в PIO.A, через привязанное свойство trigOnOff, состояние "1"
4) поскольку установлено правило запускать метод statusChanged при изменении свойства status (которое связанно с Sensed.B), метод успешно и запускается, т.к. происходит изменение
5) включается или выключаться свет, но ползунок выключателя может и не переключиться или только побегать туда-сюда и свет тоже только мигнуть!

И всё бы хорошо, но

сеть 1-wire крайне не надежна, и возникает следующая ситуация:
если в текущий момент свет был выключен, т.е. status = ""(пустая строка), то при каждом циклическом опросе сети в любом случае приходит значение "" и запущенный метод
statusChanged (который похоже теперь запускается постоянно т.е. практически ежесекундно), при сравнении старого и нового значений отрабатывает всё как надо!

но если в текущий момент свет был ВКЛЮЧЕН, т.е. status = "1", то при каждом циклическом опросе сети могут быть два варианта: "1" - что соответствует реальному положению вещей,.... и ""(пустая строка), что связанно похоже с тем, что в данный конкретный момент не удалось получить значения при считывании (например из-за помех или "расположения луны")
В результате строчка if ($params['NEW_VALUE']==$params['OLD_VALUE']) return; дает сбой!!!

Переключать свет программно стало очень трудно....

Я конечно понимаю, что мне надо работать над улучшением прокладки сети 1-wire, хотя не понимаю куда еще лучше (провод менее 50 метров, 5 или 6 ключей, хорошее питание, и провод UTP 4 категории), но до этого у меня хоть как-то всё работало.... теперь грустно все!!!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: Ещё немного обновлений

Сообщение Vovix » Сб фев 14, 2015 4:51 pm

Возможно, как-то поработать с внутренней функцией опроса элементов сети 1-wire (опроса сервера OWFS), и возвращать в MDM именно "0" и "1" при удачном получении значений и значение "" (пустая строка) только если считать устройство не поучилось!!!???
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Ещё немного обновлений

Сообщение sergejey » Сб фев 14, 2015 8:20 pm

Честно говоря, не очень понимаю проблемы. С точки зрения логики работы модуля всё отрабатывает верно. Более того, если по каким-то причинам не удалось считать значение, то оно не будет присвоено пустое -- в коде стоит проверка, если значение от сервиса 1-wire пришло пустое (т.е. не пустая строка, а именно null), то игнорировать его. Возможно, это глюк сервиса 1-wire и он сам возвращает пустые строки и тогда это может быть в самом деле проблема. Но в любом случае, эту проблему можно обойти программно через код метода, а именно вставив небольшую задержку на выключение. Т.е. код метода приблизительно такой:

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

if ($params['NEW_VALUE']==$params['OLD_VALUE']) return; // оставляем отсекание одинаковых значений
if ($params['NEW_VALUE']=="1") {
 clearTimeout('turnofftimer');
 //код включения света
} else {
 setTimeout('turnofftimer','код выключения света',5); //выключаем свет с задержкой в 5 секунд (на случай если это ошибочные данные)
} 
Как-то так.
За это сообщение автора sergejey поблагодарил:
Bagir (Сб фев 14, 2015 10:41 pm)
Рейтинг: 1.16%

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

Re: Ещё немного обновлений

Сообщение Victor_S » Пн фев 16, 2015 8:23 am

В моем случае строчка
if ($params['NEW_VALUE']==$params['OLD_VALUE']) return;
отрабатывает как нужно каждый раз, но сеть пока на столе, как будет в реальных условиях - посмотрим...
С 1-wire осталась одна проблема, как уже писал:
- не всегда корректно отрабатывает галочка избранное на свойствах ключа. Т.е. у меня на одном входе висит геркон. Когда я его размыкаю(в этом случае устанавливается значение sensed=1) majordomo замечает это сразу(т.е. галочка избранное срабатывает в каждом цикле). Когда же геркон замыкается(sensed=0 или скорее пусто) majordomo замечает это только после опроса всего устройства через время установленное для опроса всего устройства, а не в каждом цикле. Из-за этого приходится отказываться от избранных свойств и выставлять минимальное время опроса всего устройства.
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: Ещё немного обновлений

Сообщение Vovix » Пн фев 16, 2015 9:43 am

Может у меня в методе что-то не так?

Вот он: (statusChanged)

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

//say ("New= ".$params['NEW_VALUE']);
//say ("Old= ".$params['OLD_VALUE']);
//$status = $this->getProperty('status');
//say ("Status= ".$status);

if ($params['NEW_VALUE']==$params['OLD_VALUE']) return;
$status = $this->getProperty('status');


// определение настройки по проговариванию
$saylights = gg('Sets.saylights');
$saylights = $saylights - 1;


// узнаем прежнее состояние
$statusOld = $this->getProperty('statusOld');

// далее выполнять всё если состояние реально изменилось
if ($statusOld<>$status) {

$this->setProperty('updatedTimestamp',time());
$this->setProperty('alive',1);
$ot=$this->object_title;

// проверка заданно ли время жизни для ключа
$alive_timeout=(int)$this->getProperty('aliveTimeOut');
if (!$alive_timeout) {
 $alive_timeout=8*60*60; // если не было заданно, то берем 8 часов
}
    if ($status) {
    $this->setProperty('statusText', "включен");
    }
    else     {
    $this->setProperty('statusText', "выключен");
    }
say("Свет. ".str_replace("_"," ",$ot)." ".$this->getProperty('statusText'),$saylights);

clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout);
}
$this->setProperty('statusOld',$status);
но если "раскомментировать" верхние строчки, то видим, что метод запускается очень часто
(а он установлен на авто запуск при изменении status)
и значение Status (связанно с Sensed.B) постоянно прыгает (1 и "пусто"), если было включено!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Ещё немного обновлений

Сообщение sergejey » Чт фев 19, 2015 5:58 pm

Ещё небольшой пакет обновлений.
Из того, что стоит упомянуть -- набор функций по созданию классов, свойств, методов и объектов. Может быть полезным при разработке новых модулей для автоматического создания недостающих объектов при установке.

Новые функции:
addClass('MyClass'); -- создаёт корневой класс заданного имени
addClass('MyClass','ParentClass'); -- создаёт класс заданного имени дочерним от ParentClass
addClassMethod('MyClass', 'MyMethod1'); -- создаёт метод класса
addClassMethod('MyClass', 'MyMethod2', 'say("Hi!");'); -- создаёт метод класса и заполняет его код
addClassProperty('MyClass', 'MyProperty1'); -- создаёт свойство класса
addClassProperty('MyClass', 'MyProperty2', 5); -- создаёт свойство класса и указывает, что необходимо хранить историю значений 5 дней
addClassObject('MyClass', 'MyObject'); -- создаёт объект заданного класса

В том случае, если указанные классы/методы/свойства/объекты уже существуют, то просто ничего не произойдёт (дубли не создадутся), так что данный код можно вызывать сколько угодно раз.
За это сообщение автора sergejey поблагодарили (всего 2):
Amarok (Пт фев 20, 2015 11:10 am) • Bagir (Пт фев 20, 2015 4:06 pm)
Рейтинг: 2.33%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Amarok
Сообщения: 1427
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Ещё немного обновлений

Сообщение Amarok » Пт фев 20, 2015 6:45 am

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

Re: Ещё немного обновлений

Сообщение sergejey » Пт фев 20, 2015 10:53 am

Уже есть. Извиняюсь, вчера забыл нажать кнопку синхронизации, что б загрузить изменения :)

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Закрыто