Страница 22 из 124

Re: Простые устройства / Simple Devices

Добавлено: Ср окт 04, 2017 8:45 pm
xor
to nick7zmail:
А что мешает сделать виртуальный выключатель на группу?
Добавить свойство - Группа для выключателей
у него турнон/еурнофф для его группы -для всех объектов,
а статус - сумма статусов группы?

Re: Простые устройства / Simple Devices

Добавлено: Ср окт 04, 2017 8:56 pm
nick7zmail
Мне то ничего не мешает))) Я как раз и сделал...но для этого вписал код как в методы каждого из объектов, так и в метод группового объекта...надо отследить все зависимости, при этом чтоб ничего не сломалось...так что было бы неплохо, если бы это средствами простых устройств без дополнительного кода делать можно бы было...

Re: Простые устройства / Simple Devices

Добавлено: Ср окт 04, 2017 9:04 pm
xor
Устройства уж и так не такие простые...viewtopic.php?f=7&t=1871&p=61184#p61184

Re: Простые устройства / Simple Devices

Добавлено: Ср окт 04, 2017 9:14 pm
nick7zmail
Мне кажется группы реле сделать куда проще, чем запилить, например, камеру в простые устройства))) Тем более у простых устройств есть привязка к помещениям...можно на основе этой привязки и сделать группы...то есть даже дописывать в таблицы ничего не надо. Просто добавить тип устройства - группа реле - в нем выбор помещения, и прописать для него правила. Группа будет врубать/вырубать весь свет в помещении вне зависимости от его количества...
Единственное, что надо хорошо продумать - это кросс-вызов методов...это единственная проблема, способная поставить в ступор новичка, если он начнет делать подобный функционал...

Например: Групповой выключатель должен включать и выключать все группы света...при этом если одна из групп включается - групповой тоже должен включаться. А так как меняется его статус - он подтягивает за собой метод, который вызывает процедуру включения всей группы...
Лично я решил эту проблему просто не привязывая статус к методу, и вызываю методы, которые уже меняют статус. Но это не до каждого новичка дойдет, и это опять же не совсем правильно, как мне кажется. Должно быть всё завязано на свойстве.

Re: Простые устройства / Simple Devices

Добавлено: Чт окт 05, 2017 10:19 pm
aleksejs
Подскажите как в Простые устройства интегрировать направление изменения показаний датчиков.
Как в этой теме viewtopic.php?f=18&t=2100
делаю свойство direction в SSensors.
Делаю метод valueUpdated с кодом (не совсем понимая данный код) :
СпойлерПоказать
* begin injection of {SDevices} */
require(DIR_MODULES.'devices/SSensors_valueUpdated.php');
/* end injection of {SDevices} */
// Получение среднего значения из истории
//Получить id свойства
$prop_id=$this->getPropertyByName('status', $this->class_id, $this->id);
//Получаем VALUE_ID для следующей таблицы
$pvalue=SQLSelectOne("SELECT * FROM pvalues WHERE PROPERTY_ID='".$prop_id."' AND OBJECT_ID='".$this->id."'");
//Получаем средние значения температуры за последние 30 минут
$start_time=time()-30*60; // 30 минут
$arr_s = SQLSelectOne("SELECT avg(VALUE) as AVG_V FROM phistory WHERE VALUE_ID='".$pvalue['ID']."' AND ADDED>='".date('Y-m-d H:i:s', $start_time)."'");
$avg_s=round($arr_s[AVG_V], 1);

$s=$params['status'];
if (isset($s)) {
// Если некорректные данные
if (($s > 50) || ($s < -50)) { return; }
// Записать в свойство объекта
$this->setProperty('status',$s);
} else {
// Для слинкованных свойств и запуска этого метода без передачи данных, взять их из свойства.
$s = $this->getProperty('status');
}

$s=round($s, 1);

// Сравнение
if ($s-$avg_s > 0.5) {
$d=1;
} elseif ($s-$avg_s < -0.5) {
$d=-1;
} else {
$d=0;
}

$this->setProperty('direction',$d);
И не работает, не пишет в direction.

Re: Простые устройства / Simple Devices

Добавлено: Пт окт 06, 2017 12:14 am
xor
А зачем вы температуру в свойство статус пишете?
Вроде, валюе содержит значение датчика и там температура должна отражаться?
и посмотрите функции работы с историей
getHistoryAvg($varname, $start_time, $stop_time) Возвращает среднее значений за период
getHistoryValue($varname, $time, $nerest) Возвращает среднее значение за период
и в ключевых местах своего кода напихайте debmes'ов отладочных

Re: Простые устройства / Simple Devices

Добавлено: Вс окт 08, 2017 8:43 pm
nightwind
Господа, то ли баг, то ли я не шарю, гуру - растолкуйте.
1. Есть майсенсорc нода с кнопкой, и есть реле с лампочкой по mqtt.
2. В модуле Mysensors создаю простое устройство "Кнопка".
3. В дереве устройств ( Начало SDevices SButtons ), нахожу эту кнопку, и пишу ,

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

 debmes("Кнопка  gw нажата");
 $lamphalls = gg("lamp-hall.status");
 if ($lamphalls == 1) {
      callMethod('lamp-hall.TurnOff');
 }
 else
      On4time("lamp-hall",5*60);
Все просто, при нажатии кнопки включается свет на 5 минут. Если был уже включен - выключается. Такая логика. И все работает.
НО! Если это устройство-кнопку нарисовать на сцене, (через интерфейс простых устройств) или просто тыкнуть по кнопке в модуле простых устройств - она срабатывает 2 раза!!!

Раскопал - дело в том, что вызом метода pressed вызывает еще и родительский обработчик - SButtons_pressed.php, который вызывает $this->callMethod('statusUpdated');, а его обработчик снова вызывает pressed. бесконечного цикла нет, потому что SButtons_pressed.php, проверяет if (!isset($params['statusUpdated'])) и во второй раз не обновляет статус. Но срабатывает 2 раза.
Пока отключил вызов родительского метода у pressed , но это же говнокостыль и неправильно.
Как быть?

Re: Простые устройства / Simple Devices

Добавлено: Пн окт 09, 2017 2:18 am
xor
Подтверждаю
в родительском SDevices_statusUpdated.php для
SMotions/SButtons снова вызываются их боевые методы

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

if ($this->class_title == 'SMotions' && $params['NEW_VALUE']) {
    $this->callMethodSafe('motionDetected',array('statusUpdated'=>1));
} elseif ($this->class_title == 'SButtons' && $params['NEW_VALUE']) {
    $this->callMethodSafe('pressed',array('statusUpdated'=>1));

Re: Простые устройства / Simple Devices

Добавлено: Вт окт 10, 2017 11:42 am
sergejey
DimSun75 писал(а):Видно, что для это типа предполагалось не связывать свойство status, а вызывать метод motionDetected. Это для большинства железа честно говоря неудобно.
Изначально да, но сейчас работает и через привязку к свойству status без вызова метода motionDetected. Т.е. работает и так и так.

Re: Простые устройства / Simple Devices

Добавлено: Вт окт 10, 2017 1:27 pm
nick7zmail
Сергей, глянь предложение viewtopic.php?p=61168#p61168