Простые устройства / Simple Devices
Модератор: immortal
- xor
- Сообщения: 2038
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 284 раза
- Поблагодарили: 629 раз
Re: Простые устройства / Simple Devices
to nick7zmail:
А что мешает сделать виртуальный выключатель на группу?
Добавить свойство - Группа для выключателей
у него турнон/еурнофф для его группы -для всех объектов,
а статус - сумма статусов группы?
А что мешает сделать виртуальный выключатель на группу?
Добавить свойство - Группа для выключателей
у него турнон/еурнофф для его группы -для всех объектов,
а статус - сумма статусов группы?
win10 connect https://connect.smartliving.ru/profile/303
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Простые устройства / Simple Devices
Мне то ничего не мешает))) Я как раз и сделал...но для этого вписал код как в методы каждого из объектов, так и в метод группового объекта...надо отследить все зависимости, при этом чтоб ничего не сломалось...так что было бы неплохо, если бы это средствами простых устройств без дополнительного кода делать можно бы было...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- xor
- Сообщения: 2038
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 284 раза
- Поблагодарили: 629 раз
Re: Простые устройства / Simple Devices
Устройства уж и так не такие простые...viewtopic.php?f=7&t=1871&p=61184#p61184
win10 connect https://connect.smartliving.ru/profile/303
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Простые устройства / Simple Devices
Мне кажется группы реле сделать куда проще, чем запилить, например, камеру в простые устройства))) Тем более у простых устройств есть привязка к помещениям...можно на основе этой привязки и сделать группы...то есть даже дописывать в таблицы ничего не надо. Просто добавить тип устройства - группа реле - в нем выбор помещения, и прописать для него правила. Группа будет врубать/вырубать весь свет в помещении вне зависимости от его количества...
Единственное, что надо хорошо продумать - это кросс-вызов методов...это единственная проблема, способная поставить в ступор новичка, если он начнет делать подобный функционал...
Например: Групповой выключатель должен включать и выключать все группы света...при этом если одна из групп включается - групповой тоже должен включаться. А так как меняется его статус - он подтягивает за собой метод, который вызывает процедуру включения всей группы...
Лично я решил эту проблему просто не привязывая статус к методу, и вызываю методы, которые уже меняют статус. Но это не до каждого новичка дойдет, и это опять же не совсем правильно, как мне кажется. Должно быть всё завязано на свойстве.
Единственное, что надо хорошо продумать - это кросс-вызов методов...это единственная проблема, способная поставить в ступор новичка, если он начнет делать подобный функционал...
Например: Групповой выключатель должен включать и выключать все группы света...при этом если одна из групп включается - групповой тоже должен включаться. А так как меняется его статус - он подтягивает за собой метод, который вызывает процедуру включения всей группы...
Лично я решил эту проблему просто не привязывая статус к методу, и вызываю методы, которые уже меняют статус. Но это не до каждого новичка дойдет, и это опять же не совсем правильно, как мне кажется. Должно быть всё завязано на свойстве.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
-
- Сообщения: 20
- Зарегистрирован: Чт окт 05, 2017 9:22 pm
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: Простые устройства / Simple Devices
Подскажите как в Простые устройства интегрировать направление изменения показаний датчиков.
Как в этой теме viewtopic.php?f=18&t=2100
делаю свойство direction в SSensors.
Делаю метод valueUpdated с кодом (не совсем понимая данный код) :
И не работает, не пишет в direction.
Как в этой теме 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);
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);
- xor
- Сообщения: 2038
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 284 раза
- Поблагодарили: 629 раз
Re: Простые устройства / Simple Devices
А зачем вы температуру в свойство статус пишете?
Вроде, валюе содержит значение датчика и там температура должна отражаться?
и посмотрите функции работы с историей
getHistoryAvg($varname, $start_time, $stop_time) Возвращает среднее значений за период
getHistoryValue($varname, $time, $nerest) Возвращает среднее значение за период
и в ключевых местах своего кода напихайте debmes'ов отладочных
Вроде, валюе содержит значение датчика и там температура должна отражаться?
и посмотрите функции работы с историей
getHistoryAvg($varname, $start_time, $stop_time) Возвращает среднее значений за период
getHistoryValue($varname, $time, $nerest) Возвращает среднее значение за период
и в ключевых местах своего кода напихайте debmes'ов отладочных
win10 connect https://connect.smartliving.ru/profile/303
- nightwind
- Сообщения: 333
- Зарегистрирован: Вс июн 26, 2016 4:42 pm
- Откуда: Барановичи
- Благодарил (а): 28 раз
- Поблагодарили: 52 раза
- Контактная информация:
Re: Простые устройства / Simple Devices
Господа, то ли баг, то ли я не шарю, гуру - растолкуйте.
1. Есть майсенсорc нода с кнопкой, и есть реле с лампочкой по mqtt.
2. В модуле Mysensors создаю простое устройство "Кнопка".
3. В дереве устройств ( Начало SDevices SButtons ), нахожу эту кнопку, и пишу ,
Все просто, при нажатии кнопки включается свет на 5 минут. Если был уже включен - выключается. Такая логика. И все работает.
НО! Если это устройство-кнопку нарисовать на сцене, (через интерфейс простых устройств) или просто тыкнуть по кнопке в модуле простых устройств - она срабатывает 2 раза!!!
Раскопал - дело в том, что вызом метода pressed вызывает еще и родительский обработчик - SButtons_pressed.php, который вызывает $this->callMethod('statusUpdated');, а его обработчик снова вызывает pressed. бесконечного цикла нет, потому что SButtons_pressed.php, проверяет if (!isset($params['statusUpdated'])) и во второй раз не обновляет статус. Но срабатывает 2 раза.
Пока отключил вызов родительского метода у pressed , но это же говнокостыль и неправильно.
Как быть?
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);
НО! Если это устройство-кнопку нарисовать на сцене, (через интерфейс простых устройств) или просто тыкнуть по кнопке в модуле простых устройств - она срабатывает 2 раза!!!
Раскопал - дело в том, что вызом метода pressed вызывает еще и родительский обработчик - SButtons_pressed.php, который вызывает $this->callMethod('statusUpdated');, а его обработчик снова вызывает pressed. бесконечного цикла нет, потому что SButtons_pressed.php, проверяет if (!isset($params['statusUpdated'])) и во второй раз не обновляет статус. Но срабатывает 2 раза.
Пока отключил вызов родительского метода у pressed , но это же говнокостыль и неправильно.
Как быть?
- xor
- Сообщения: 2038
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 284 раза
- Поблагодарили: 629 раз
Re: Простые устройства / Simple Devices
Подтверждаю
в родительском SDevices_statusUpdated.php для
SMotions/SButtons снова вызываются их боевые методы
в родительском 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));
win10 connect https://connect.smartliving.ru/profile/303
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Простые устройства / Simple Devices
Изначально да, но сейчас работает и через привязку к свойству status без вызова метода motionDetected. Т.е. работает и так и так.DimSun75 писал(а):Видно, что для это типа предполагалось не связывать свойство status, а вызывать метод motionDetected. Это для большинства железа честно говоря неудобно.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Простые устройства / Simple Devices
Сергей, глянь предложение viewtopic.php?p=61168#p61168
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<