Страница 3 из 4
Re: Обновления датчика движения
Добавлено: Пн окт 30, 2017 9:32 pm
ингвар
Jager писал(а):
Как то так
Код: Выделить всё
$state = file_get_contents('http://IP/sensors');
$value = explode('/',$state);
sg('объект.temp',substr($value[23],4));
sg('объект.humidity',substr($value[7],4));
спасибо, дошло как и что
только для строки
hostname:Ira_BDR;dhtt1:27.2;dhth1:65.8; код получился
Код: Выделить всё
$state = file_get_contents('http://IP/sensors');
$value = explode(';',$state);
sg('BDR.temp',substr($value[1],6));
sg('BDR.humidity',substr($value[2],6));
но теперь вопрос если вдруг подключу еще датчики этот код надо менять будет?
Re: Обновления датчика движения
Добавлено: Вт окт 31, 2017 8:57 am
Jager
ингвар писал(а):но теперь вопрос если вдруг подключу еще датчики этот код надо менять будет?
Раз принцип поняли то и проблем не будет
все датчики будут выводиться в одной строке.
Re: Обновления датчика движения
Добавлено: Ср ноя 08, 2017 7:33 pm
lupsik
ингвар писал(а):подскажите куда копать
есть два датчика движения один на esp (wifi-iot) другой xiaomi , все работает нормально, но вот в обновлении свойства updatedText у Xiaomi датчика пишет все нормально когда датчик был активен (то что в X-ray пишет ошибку это я пропущу ) а на ESP каждые 10 сек скидывает на "только что"
думаю может метод как то влияет , просто xiaomi добавляться из модуля, а ESP в ручную привязую через модуль esp8266_wifiot
Кстати, если информацию с датчика отправлять по MQTT то все работает как нужно. Именно поэтому привязал датчик именно через MQTT модуль. Отправка данных в настройка ESP8266 "Работа с прерываниями". В этом случае отправка в MQTT брокер идет только при изменении состояния датчика.
Re: Обновления датчика движения
Добавлено: Пт дек 15, 2017 11:26 am
PAV
Мои методы для датчиков движения - общий для всех и для примера датчик на самом входе около двери
Общий
Код: Выделить всё
$this->setProperty('status',$params['status']); // выставляем статус сенсора
$this->setProperty('updatedTime',date("y-m-d H:i")); // выставляем время срабатывания сенсора
$h=(int)date('G',time());
$m=date('i',time());
$tm=$h+$m/100;
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
$alive_timeout=24*60*60;
}
$this->setProperty("alive",1);
clearTimeOut($ot."_alive");
SetTimeOut($ot."_alive","callmethod('".$ot.".AliveCheck');", $alive_timeout); // назначаем новый таймер. срабатывает через час
if ($params['status']) { // если статус = 1
if (gg('SecurityArmedMode.status') == 1) {
say('Внимание, нарушение режима безопасности');
}
sg('somebodyHome',1); // ставим глобальный флаг на то что кто-то дома
sg('somebodyHomeText','Дома кто-то есть'); // так же ставим свойства глобальной переменной для текстового статуса
sg('sensorMovementSUM.status', 1);
sg('sensorMovementSUM.alive', 1);
sg('sensorMovementSUM.updated', time());
sg('sensorMovementSUM.updatedTime', date("y-m-d H:i"));
clearTimeOut("sensorMovementSUM");
setTimeOut("sensorMovementSUM","sg('sensorMovementSUM.status',0);",60);
ClearTimeOut("nobodyHome"); // очищаем таймер события "никого нет дома"
SetTimeOut("nobodyHome","callmethod('NobodyHomeMode.activateCheck');", 1*90*60); // назначаем новый таймер. срабатывает через час после последнего срабатывания датчика.
$last_register=registeredEventTime('inhouseMovement'); // проверяем когда в последний раз срабатывало событие "движение внутри дома"
if ((!$last_register) || ((time()-$last_register)>1*60*60)) { // срабатывало более 2х часов назад (либо никогда не срабатывало ранее)
if (gg("NobodyHomeMode.status") == 0) { // если все дома
if ( gg("NightMode.status")==1 ) {
}
if ( gg("NightMode.status")==0 ) {
if (timeBetween('07:00', '12:00')) { // движение замечено утром
}
if (timeBetween('17:00', '23:00')) { // движение замечено утром
}
}
} else { // если только пришли, никого не было доклад
}
}
if ( gg("NightMode.status")==0 ) {
registerEvent('inhouseMovement',$this->name,7); // регистрируем событие "движение внутри дома"
}
if (gg("NobodyHomeMode.status") == 1) {
setGlobal('somebodyHome',1); // ставим глобальный флаг на то что кто-то дома
setGlobal('somebodyHomeText','Дома кто-то есть');
say("кто-то появился");
sg("NobodyHomeMode.status",0);
callmethod("NobodyHomeMode.deactivate");
}
}
StatusChanged датчика ближайшего к двери
Код: Выделить всё
if ($params['status']) {
$last_register=registeredEventTime('inhouseMovement'); // проверяем когда в последний раз срабатывало событие "движение внутри дома"
if ((!$last_register) || ((time()-$last_register)>1*60*60)) { // срабатывало более 1х часов назад (либо никогда не срабатывало ранее)
if (gg("NobodyHomeMode.status") == 0) { // если все дома
if ( gg("NightMode.status")==1 ) {
}
if ( gg("NightMode.status")==0 ) {
if (timeBetween('07:30', '12:00')) { // движение замечено утром
//runScript('morningGreeting'); // запускаем скрипт "доброе утро"
callMethod("доброе утро доклад.action");
}
//if (timeBetween('17:00', '23:00')) { // движение замечено утром
//runScript('eveningGreeting'); // запускаем скрипт "
//}
}
} else { // если только пришли, никого не было доклад
say("Ура! Наконец кто-то появился дома!");
callmethod("NobodyHomeMode.deactivate");
if (gg("Yulia.status") > 0 && time() - gg("Yulia.updated") < 25*60){
say("Здравствуйте Юлия",1);
}
if (gg("Andrey.status") > 0 && time() - gg("Andrey.updated") < 25*60){
say("Здравствуйте Андрей",1);
callMethod("доклад.action");
}
}//если только пришли
}//срабатывал более часа назад
if (gg("доклад.done") == 0) {
if ((gg("Andrey.status") > 0) && (time() - gg("Andrey.updated") < 25*60) ) {
say("Здравствуйте Андрей",1);
callMethod("доклад.action");
}}
if (isWeekDay()) {
if (gg("доброе утро доклад.done") == 0) {
if ((gg("Andrey.status") > 0) && (timeBetween('10:30', '12:00') )) {
sg("доброе утро доклад.done",1);
say("Доброе утро Андрей",1);
callMethod("доброе утро доклад.action");
}}}
}
Проверка работоспособности датчика
[code]
// 2017-10-31 если все дома- если ночь откладываем - если день и нет движений, значит сдох / если нет дома то откладываем
$ot=$this->object_title;
if (gg("NobodyHomeMode.status") == 0) { // если все дома
if ( gg("NightMode.status")==1 ) { //если ночь откладываем
clearTimeOut($ot."_alive");
SetTimeOut($ot."_alive","callmethod('".$ot.".AliveCheck');", 3*60*60); // назначаем новый таймер. срабатывает через час
}
if ( gg("NightMode.status")==0 ) { //если день и нет движений, значит сдох
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",60);
}
} else { // если нет дома то откладываем
clearTimeOut($ot."_alive");
SetTimeOut($ot."_alive","callmethod('".$ot.".AliveCheck');", 8*60*60); // назначаем новый таймер. срабатывает через час
}
[/code]
Re: Обновления датчика движения
Добавлено: Пн дек 18, 2017 8:00 pm
Gelezako
вопрос по коду: вы перезаписываете значение свойства "somebodyHomeText", но простые устройства тоже автоматически обновляют это свойство. Они более информативно дописывают через запятую название комнаты где замечена активность, вот пример "Кто-то есть. Активность: Гостиная, Коридор". Но вашем примере вы просто затираете текстом "Дома кто-то есть".
И ещё почему вот тут вы не указываете имя объекта?
Код: Выделить всё
sg('somebodyHome',1); // ставим глобальный флаг на то что кто-то дома
sg('somebodyHomeText','Дома кто-то есть');
Я так подозреваю что это объект "ThisComputer" из класса "Computer". Свойство "somebodyHomeText" у меня есть, но вот "somebodyHome" у меня нет у объекта "ThisComputer". Вы его сами добавляли?
Re: Обновления датчика движения
Добавлено: Вт дек 19, 2017 11:07 am
Vovix
Gelezako писал(а):....
Я так подозреваю что это объект "ThisComputer" из класса "Computer". Свойство "somebodyHomeText" у меня есть, но вот "somebodyHome" у меня нет у объекта "ThisComputer". Вы его сами добавляли?
запись без наименования объекта, всегда указывает на
ThisComputer
при записи значения в отсутствующее у вас свойство, но в имеющемся объекте, по сути запись создает его
(правда оно немного по другому будет отображаться в Объектах -
например его не будет видно в списке свойств класса и оно будет отображаться не жирным шрифтом в свойствах объекта )
Re: Обновления датчика движения
Добавлено: Пт дек 22, 2017 1:57 am
sigment
Подскажите пожалуйста. Как добавить, что бы мои датчики виделись в свойстве somebodyHomeText? Что бы они стали отображаться в "кто дома". Не корректно написал, но смысл думаю уловить можно.
Re: Обновления датчика движения
Добавлено: Пт дек 22, 2017 5:53 pm
dr.pavlov.alex
sigment писал(а):Подскажите пожалуйста. Как добавить, что бы мои датчики виделись в свойстве somebodyHomeText? Что бы они стали отображаться в "кто дома". Не корректно написал, но смысл думаю уловить можно.
Второе сообщение посмотрите
https://majordomo.smartliving.ru/forum/ ... hp?p=60090. Мне помогла только замена кода как на той странице. Сейчас все отрабатывает без проблем.
Re: Обновления датчика движения
Добавлено: Вт янв 02, 2018 6:17 pm
ei922
Простите, не совсем в тему, но близко.
Хочу кач-ве датчиков движения для управления светом использовать охранные датчики движения (через МегаД они дают 0 при движении и 1 - при отсутствии движения).
Добавил датчики через Простые устройства, но работает кривенько, вероятно из-за нестыковки 0-motionDetected в охранных датчиках, и 1-motionDetected в обычных.
Похоже, что изменять нужно файлы:
c:\_majordomo\htdocs\modules\devices\SMotions_motionDetected.php
c:\_majordomo\htdocs\modules\devices\SDevices_statusUpdated.php
?
Или написать свои объекты?
Или есть еще какие-то более легкие способы?
Re: Обновления датчика движения
Добавлено: Ср янв 03, 2018 1:58 pm
Gelezako
ei922 писал(а):Простите, не совсем в тему, но близко.
Хочу кач-ве датчиков движения для управления светом использовать охранные датчики движения (через МегаД они дают 0 при движении и 1 - при отсутствии движения).
Добавил датчики через Простые устройства, но работает кривенько, вероятно из-за нестыковки 0-motionDetected в охранных датчиках, и 1-motionDetected в обычных.
Похоже, что изменять нужно файлы:
c:\_majordomo\htdocs\modules\devices\SMotions_motionDetected.php
c:\_majordomo\htdocs\modules\devices\SDevices_statusUpdated.php
?
Или написать свои объекты?
Или есть еще какие-то более легкие способы?
Я бы не использовал простые устройства для добавления такого нестандартного датчика. Создавайте сами свой класс, свой объект, свойства и методы и сами описывайте логику исходя из ваших значений состояний. Иначе вы запутаетесь используя логику простых устройств. Редактировать "системные" файлы тоже не советовалбй , потому что при следующем обновлению у вас всё затрётся.