Страница 72 из 141

Re: Модуль "MegaD"

Добавлено: Вт июн 27, 2017 4:28 pm
ferenir
Может роутер или файрвол блокируют трафик...
Бинго! %) Как сам не додумался, ведь видел же в логах фразы про аваст... %)

Re: Модуль "MegaD"

Добавлено: Ср июн 28, 2017 8:32 am
ferenir
Работает только при полностью отключенном авасте (интернет секьюрити у меня), пробовал отдельно веб-экран отключать, играть с настройками файрволла - бесполезно. Какая такая деятельность происходит между мегой и мажором, что аваст ее блокирует? Вроде 80 порт в одной подсети...

Re: Модуль "MegaD"

Добавлено: Ср июн 28, 2017 1:07 pm
skysilver
ferenir писал(а):Работает только при полностью отключенном авасте (интернет секьюрити у меня), пробовал отдельно веб-экран отключать, играть с настройками файрволла - бесполезно. Какая такая деятельность происходит между мегой и мажором, что аваст ее блокирует? Вроде 80 порт в одной подсети...
Помнится, что-то там по броадкасту еще отправляется/принимается. Может аваст широковещательные пакеты рубит?

Re: Модуль "MegaD"

Добавлено: Вс июл 02, 2017 11:42 am
koshnv
Всем добра!
Буду рад помощи или совету где покататься с кодом, с налета не разобрался где раскладываются запросы с меги.
Требуется подключить в систему датчики DS18B20, сидящие на шине 1-wire, которая подключена к контролеру MegaD-2561-RTC.
В данном контроллере реализована возможность подключения на один порт нескольких датчиков с выбором режима 1WBUS.
С сайта ab-log.ru:
При нажатии на ссылку Device List или через запрос вида
http://192.168.0.14/sec/?pt=32&cmd=list
Можно получить в ответ примерно следующий результат: 8aad6a070000:32.43;85a56a070000:32.43;
Результат отображается по следующему принципу: [адрес датчика]:[температура];[адрес датчика]:[температура];


В данное время датчики на самом контролере отображаются корректно, но системе MajorDoMo порт отображается «31 DSen» c абстрактным значением температуры:
1wbus.jpg
1wbus.jpg (48.5 КБ) 9775 просмотров

Re: Модуль "MegaD"

Добавлено: Пн июл 03, 2017 12:53 pm
ferenir
skysilver писал(а):
ferenir писал(а):Работает только при полностью отключенном авасте (интернет секьюрити у меня), пробовал отдельно веб-экран отключать, играть с настройками файрволла - бесполезно. Какая такая деятельность происходит между мегой и мажором, что аваст ее блокирует? Вроде 80 порт в одной подсети...
Помнится, что-то там по броадкасту еще отправляется/принимается. Может аваст широковещательные пакеты рубит?
В общем веб-экран и модуль оценки сайтов аваста блокируют общение меги и мажора, настроек в них нет, не помогает даже внесение в список исключений. Техподдержка аваста молчит.

Re: Модуль "MegaD"

Добавлено: Пн июл 03, 2017 1:14 pm
ferenir
koshnv писал(а):Всем добра!
Буду рад помощи или совету где покататься с кодом, с налета не разобрался где раскладываются запросы с меги.
viewtopic.php?f=5&t=2263&start=670#p54342

Re: Модуль "MegaD"

Добавлено: Пн июл 03, 2017 10:44 pm
koshnv
Код обновления показания датчиков я написал, буду рад если поправите.
Теперь задача:
1) Отслеживать изменения по конкретному датчику с построением временной диаграммы.
2) Реагировать на определенные пороги показаний.

2-е как я понял решается через сценарии, а вот график у меня рисуется один, через свойство родительского объекта "temp".
Я зря создал датчики в самом объекте, надо было их создать в свойствах родительского класса и обновлять показания и реакцию настраивать через скрипт в них?

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

//Задаем массив датчиков: [матка => [номер свойства, доступность, показание]]
    $tempSensors = [
        "fff7b0b31603" => [1, false, -1],
        "ff2790c11604" => [2, false, -1],
        "ff2790c00000" => [3, false, -1],
    ];
//не зарегистрированный датчики на шине
    $notRegSensors = "";
//Получаем строку с меги и делим ее по датчикам в массив
    //$listTemps = "ff2790c11604:24.18;fff7b0b31603:23.81";
    $listTemps = file_get_contents("http://192.168.1.10/sec/?pt=31&cmd=list");
    $temps = explode( ';', $listTemps);
    //print_r ($temps);
//Сравнивая метки пишем показания, меняя доступность
    foreach($temps as $temp){
        $temp = explode( ':', $temp);
        if(array_key_exists($temp[0], $tempSensors)){
            $tempSensors[$temp[0]][1] = true;
             $tempSensors[$temp[0]][2] = $temp[1];
        }else{//пишем не найденные датчики в свойство
            $notRegSensors = $notRegSensors."$temp[0]; ";
        }
    }
//обновляем свойства
    foreach($tempSensors as $key => $sensor){
     $this->setProperty($sensor[0], $sensor[2]);
    }
    $this->setProperty("notRegSensors", $notRegSensors);
 

Re: Модуль "MegaD"

Добавлено: Вт июл 04, 2017 2:10 am
ferenir
Все решается средствами мажора, не нужно никакого лишнего кода. Есть встроенный класс Rooms, в котором уже есть свойства температуры и влажности с настроенной историей хранения. Настраиваете как вам нужно забирать показатели с датчиков (кнопка, таймер, вручную и т.д.), устанавливаете значения свойств и по ним же строите график (pChart или модуль Chart).
Как-то так.
http://majordomo.smartliving.ru/Main/Basics
Для реакции на пороги также можно сделать скрипты (сценарии) и запускать их при достижении условия.

Re: Модуль "MegaD"

Добавлено: Вт июл 04, 2017 6:54 pm
majkl84
А кто подскажет. Подключил к MegaD я датчики BME280 и HTU21D оба i2c и висят соответственно на одном интерфейсе, а теперь вопрос как majordomo заставить это все выводить? У BME280 вообще 3 параметра, а в настройках модуля MegaD только 2 соответственно можно привязать.

Re: Модуль "MegaD"

Добавлено: Вт июл 04, 2017 8:19 pm
Chainik
Насколько я понимаю, модуль MegaD создавался для отслеживания срабатывания входов Меги и инициации сервером выполнения тех или иных действий.
Что касается датчиков, то изменение их значений не воспринимаются модулем как срабатывание входа. Соответственно, модуль для ваших задач, видимо, вам не нужен.
Для запроса значения датчиков можно, например, в сценарии (периодически запускающемся) опрашивать ваши датчики командами как предлагает Андрей в своей статье (код примерно такой):

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

//Отображение влажности (HTU21D/Si7021)
file_get_contents("http://192.168.0.14/sec/?pt=35&scl=34&i2c_dev=htu21d");
//Отображение температуры (HTU21D)
file_get_contents("http://192.168.0.14/sec/?pt=35&scl=34&i2c_dev=htu21d&i2c_par=1");

//Отображение атмосферного давления (BMP280/BME280)
file_get_contents("http://192.168.0.14/sec/?pt=30&scl=31&i2c_dev=bmx280");
//Отображение температуры (BMP280/BME280)
file_get_contents("http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=bmx280&i2c_par=1");
//Отображение влажности (BME280)
file_get_contents("http://192.168.0.14/sec/?pt=31&scl=30&i2c_dev=bmx280&i2c_par=2");

setTimeOut('myTimer_opros','runScript("opros");',60*5);
Этот скрипт, который я назвал "opros", должен опрашивать датчики раз в 5 минут. Ну свои Объект.свойства для записи значений с датчиков сами допишите. Типа

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

$hum = file_get_contents("http://192.168.0.14/sec/?pt=35&scl=34&i2c_dev=htu21d");
sg('HTU21D.Hum',$hum);