Как лучше? Сенсоры по категориям или в каждую комнату?

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

Модератор: immortal

Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение lanket » Чт мар 17, 2016 1:31 am

olehs писал(а):Как часто Вы собираетесь создавать 250 датчиков? Если часто, создайте сценарий.
А так, забейте имена классов в массив и по нему создайте объекты.

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

$classes = array("Door", "InPir", "OutPir", "Window");

$rooms = getObjectsByClass("Rooms");
for($k=0; $k<count($rooms); $k++) {
  $room = $rooms[$k];
  for($j=0; $j<count($classes); $j++) {
    $class = $classes[$j];
    $objName = $room.$class;
    addClassObject($class, $objName);
    sg($objName.".LinkedRoom", $room);
  }
} 
Как-то так. Потом лишние проще удалить.
Будете в Питере с меня Пиво. Уж часто мне помогаете.
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение olehs » Чт мар 17, 2016 1:46 am

Все верно. LinkedRoom должно спускаться еще от Sensors. Но если бы и не было, setGlobal создало бы его у экземпляра объекта.
Уж часто мне помогаете.
Да это не сложно вовсе, помощью даже тяжело назвать. Скорее подсказываю, или делюсь опытом :geek: ))
За это сообщение автора olehs поблагодарил:
lanket (Чт мар 17, 2016 8:50 am)
Рейтинг: 1.16%
Михаил_Калуга
Сообщения: 41
Зарегистрирован: Чт дек 03, 2015 4:19 pm
Откуда: Калуга
Благодарил (а): 7 раз
Поблагодарили: 0

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение Михаил_Калуга » Чт мар 17, 2016 9:10 pm

1. Ответ на вопрос темы - как я понял из обсуждений останавливаемся на варианте датчики к датчикам, комнаты к комнатам.
2. Класс датчики.
Из приведенных выше примеров название датчика, как правило состоит из типа датчика (выключателя) и места установки TempHall, а также описание. На Вашем сайте я много датчиков не увидел, поэтому пример Relay ->Ligth -> KitchenChandelier - Люстра на Кухни, а можно R1 - Люстра на Кухни, R2 - Разделочный стол на кухне и тд. Мое мнение описание дает больше информации чем замысловатое название. Имена должны быть уникальные. Можно клонировать (свойства наследуются)
Определяемся со свойствами. Результатом работы датчика (а также и выключателя) могут быть значения вкл/выкл (или 1/0) или конкретные значения (для аналоговых и цифровых датчиков, теоретически для диммеров).
В систему заложена функция опроса объектов и запись значений в таблицу history. (Наверное значения состояния датчика правильнее считывать из таблицы???) Как точно это работает пока не разобрался, но думаю эта функция позволяет свойства объекта например кухня укрупнять (например свойства охрана, пожар, протечка, газ объединить в свойство тревога. Опрашиваем состояние датчиков, сравниваем с предыдущим состоянием и выдаем сообщение например на кухне тревога, протечка воды, в квартире никого нет, квартира находится под охраной, стояк на кухне перекрыт) Также некоторые датчики в связке с исполнительным устройством работают "самостоятельно" без МЖД. Те МЖД опрашивая систему получает информацию датчик сработал устройство включилось.
Это я к тому, что свойства датчиков жив, мертв, предыдущее состояние и тд наверное избыточно.
Хотя возможно все работает не так.
По автоматизации ввода. 500 -1000 объектов это не цифра для автоматизации. Если большие объекты - прокладка кабелей, подключение, настройка будут стоить в разы дороже оплаты 2-3 дней работы человека, который введет в МЖД несколько тысяч объектов.
Вложения
Таблица history.jpg
Таблица history.jpg (17.14 КБ) 6980 просмотров
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение ErmolenkoM » Чт мар 17, 2016 9:27 pm

А мне больше нравится у объекта спальня иметь свойство температура со значением температуры в спальне. Датчик заведен в мегад и связан через модуль со свойством температура объекта спальня.

И да, CMS позволяет не лазить в таблицы, а пользоваться оберткой gg. Это, кстати, есть на сайте, прочитайте.
aka msh555
Cubian на Cubietruck, Connect
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение olehs » Чт мар 17, 2016 10:04 pm

У меня по-началу, когда был один датчик температуры в комнате, тоже объект драйвера писал напрямую в свойство объекта комнаты.
Но когда их стало два или больше, появились промежуточные объекты - датчики.
Теперь драйверы (MySensors, BroadLink...) пишут значения в свойства объектов датчиков. Те, в свою очередь, при изменении значения, вызывают метод, который проходится по датчикам комнаты, вычисляет среднее значение и пишет его в темппературу объекта комнаты.
За это сообщение автора olehs поблагодарил:
ErmolenkoM (Пт мар 18, 2016 11:15 am)
Рейтинг: 1.16%
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение lanket » Чт мар 17, 2016 10:35 pm

А как узнать существует объект или нет?
И как добавить описание к объекту?
Из скрипта конечно..
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение olehs » Чт мар 17, 2016 10:40 pm

lanket писал(а):А как узнать существует объект или нет?

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

!!getObject('ObjectName')
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение lanket » Чт мар 17, 2016 10:50 pm

В том же файле функция addClassObject имеет только 2 аргумента Имя обекта и класс к котору принадлежит.

А если посмотреть в majordomo-master\modules\objects\objects_edit.inc.php то там описание добаляется напряму в базу без всяких ооп приблуд
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение Ivan » Ср мар 30, 2016 5:08 pm

оооо. Еле осилил ваш поток сознания. Долго отсутствовал по причине РАБОТА. И тут такая тема.
Надеюсь буду краток.

Мои объекты зашифрованы: "5588245-24bit-P1" наверно вот это имели ввиду. Мне было лень писать скрипт с обработкой ИД датчиков. Потому я просто добавил их как объекты. И делаю поиск класса по названию.

Насчёт датчиков <-> комнатах.
То что вы предлагали в начале не как не улучшает вашу структуру. Только запутывает. В принципе под конец дискуссии вы сами к этому пришли.

Насчёт LinkedRoom.
Сам сейчас решил переделать этот алгоритм из-за проблем агрегированных данных. То есть если датчиков в комнате несколько то что писать в свойство комнаты. Иногда последнее значение, иногда среднее (температуру), иногда OR (открытые окна, по алгоритму хоть одно)

Принцип такой:
В датчике остаётся LinkedRoom - в нём указан объект комната
Сохраняем пришедшее свойство в объект датчика
При изменяется свойство датчика. Скрипт вызывает метод объекта LinkedRoom, например изменение температуры TempChange
Объект комната в методе TempChange реализует сбор данных с датчиков которые на неё указаны, делает расчёт по своему алгоритму и записывает в своё свойство температуры полученный результат (Это избавит от от промежуточных суммирующих объектов)

Чтобы прописывать комнату только в датчике. В методе TempChange поиск указывающих на неё объектов делается так

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

$room='Room 1';
$objects=SQLSelect("SELECT objects.TITLE FROM pvalues LEFT JOIN objects ON pvalues.OBJECT_ID=objects.ID WHERE pvalues.PROPERTY_NAME LIKE '%.LINKED_ROOM' AND pvalues.VALUE LIKE='".$room."'"); 
Как отлажу обновлю Connect

Теперь насчёт автоматизации добавления объектов
Я давно говорил об таком механизме Сергею. Даже пытался писать такой визард. Но т.к. сам не добавлял много объектов сразу, это всё заглохло. (Тогда не было методов ядра для добавления объектов, всё делалось через базу)

Есть предложение сделать примерно по такому алгоритму:
  • В системе завести таблицу "Авто создание".
  • Модули добавляют в неё появившееся датчики и исполнители, либо добавленные в ручную (которые они обнаружили по своему протоколу). Со статусом: 0-Нужно добавить, 1-Добавлено, 2-Игнор
  • После запускаем ВИЗАРД, который берёт в этой таблице записи со статусом 0. И предлагает создать: Объект (по шаблону), привязать к комнате (выбор), создать график, Создать пункт в меню. Создать объект на сцене, ....
В общем приглашаю обсудить (покритиковать), и предложить пути реализации
За это сообщение автора Ivan поблагодарил:
lanket (Пт апр 01, 2016 9:28 am)
Рейтинг: 1.16%
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Как лучше? Сенсоры по категориям или в каждую комнату?

Сообщение lanket » Пт апр 01, 2016 9:42 am

Ivan писал(а):
Есть предложение сделать примерно по такому алгоритму:
  • В системе завести таблицу "Авто создание".
  • Модули добавляют в неё появившееся датчики и исполнители, либо добавленные в ручную (которые они обнаружили по своему протоколу). Со статусом: 0-Нужно добавить, 1-Добавлено, 2-Игнор
  • После запускаем ВИЗАРД, который берёт в этой таблице записи со статусом 0. И предлагает создать: Объект (по шаблону), привязать к комнате (выбор), создать график, Создать пункт в меню. Создать объект на сцене, ....
В общем приглашаю обсудить (покритиковать), и предложить пути реализации
Кстати это на порядок лучше решение чем я предлогал.

У своего решения мне не давало покоя одно сомнение.
Много датчиков/комнат все-равно они подключаются последовательно. И не исключают ручной работы по привязке их к св-вам объектов. Признаю что это и было слабым звеном в моем предложении об реализации, что и не давало принять сообществом мою идею. А предложенное Иваном. Как раз напоминает приблежонное к коробочному варианту и упрощает процесс добавления сенсоров в систему.

На мой взгляд идеальное решение.

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

Реализация предложенная Иваном избавило бы меня от изучения кучи тем про принцып работы мд чтобы допереть до того что и так очевидно когда уже профи. Думаю я не один такой, и такое пригодилось бы многим.

Отправлено с моего HM NOTE 1LTEW через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Ответить