... через какое то время
Код
$rnumber = 1;
while (1) {
$rname = "Reminder_$rnumber";
if (!timeOutExists($rname)) break;
$rnumber++;
}
// Заменить все цифры прописью
$s = word_to_number($matches[2]);
// привести к виду +1 day 2 hour 15 min 10 sec
$replaces = [
'часа' => 'hour', 'часов' => 'hour', 'час' => 'hour',
'минута' => 'min', 'минуты' => 'min', 'минуту' => 'min', 'минут' => 'min',
'секунда' => 'sec','секунды' => 'sec', 'секунду' => 'sec', 'секунд' => 'sec'
];
$s = '+'.strtr($s, $replaces);
$s = strtotime($s) - time();
$msgs=array('Задание создано', 'Сделаем', 'Постараюсь не забыть', 'Хорошо', 'Конечно');
say($msgs[array_rand($msgs)], 1); //через $s сек
setTimeOut($rname,"say('Задание: " . trim($matches[1]) . "', -1, $from_user_id);", $s);
function word_to_number(string $text)
{
$replaces = [
'один' => 1,
'одну' => 1,
'одна' => 1,
'два' => 2,
'две' => 2,
'три' => 3,
'четыре' => 4,
'пять' => 5,
'шесть' => 6,
'семь' => 7,
'восемь' => 8,
'девять' => 9,
'десять' => 10,
'одиннадцать' => 11,
'двенадцать' => 12,
'тринадцать' => 13,
'четырнадцать' => 14,
'пятнадцать' => 15,
'шестнадцать' => 16,
'семнадцать' => 17,
'восемнадцать' => 18,
'девятнадцать' => 19,
'двадцать' => 20,
'тридцать' => 30,
'сорок' => 40,
'пятьдесят' => 50,
'шестьдесят' => 60,
'семьдесят' => 70,
'восемьдесят' => 80,
'девяносто' => 90,
'сто' => 100,
'двести' => 200,
'триста' => 300,
'четыреста' => 400,
'пятьсот' => 500,
'шестьсот' => 600,
'семьсот' => 700,
'восемьсот' => 800,
'девятьсот' => 900
];
//return preg_replace('/0(?(?=0\s\d{2,})0)\s/', '', strtr($text, $replaces));
return preg_replace('/0(?(?=0\s\d{2,})0)\s(?=\d)/', '', strtr($text, $replaces));
}
|
Вентиляция
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
saveToCache('VAR:original'.$from_user_id, $ss);
// массив связей id пользователя и id шаблона комнаты (устройства)
$a = array(5=>11, 99=>99);
// Выполнить код шаблона сразу если не сказали где, или спросить место
if (array_key_exists($from_user_id, $a)) {
include_once(DIR_MODULES . 'patterns/patterns.class.php');
//context_activate(31,0,'',$from_user_id); возможно в будущем заменит инклайд модуля
//https://mjdm.ru/forum/viewtopic.php?f=24&t=1511&p=131450#p131464
$pt = new patterns();
$pt->runPatternAction($a[$from_user_id], 0, '', $from_user_id);
context_clear($from_user_id);
clearTimeOut('user_' . $from_user_id . '_contexttimeout');
} else {
say('Какое устройство?');
}
|
мотор вытяжки
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
if (preg_match('/включи/isu',$ss)) {
cm('RelayVentilation7.turnOn');
say('Включаю мотор вытяжки');
} elseif (preg_match('/выключи/isu',$ss)) {
cm('RelayVentilation7.turnOff');
say('Выключаю мотор вытяжки');
} else {
say("Непонятно: $ss");
}
saveToCache('VAR:original'.$from_user_id, '');
|
мотор притока
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
if (preg_match('/включи/isu',$ss)) {
cm('RelayVentilation2.turnOn');
say('Включаю мотор притока');
} elseif (preg_match('/выключи/isu',$ss)) {
cm('RelayVentilation2.turnOff');
say('Выключаю мотор притока');
} else {
say("Непонятно: $ss");
}
saveToCache('VAR:original'.$from_user_id, '');
|
турбина вытяжки
Шаблон: турбин(а|у) вытяжки
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
if (preg_match('/включи/isu',$ss)) {
cm('RelayVentilation6.turnOn');
say('Включаю турбину вытяжки');
} elseif (preg_match('/выключи/isu',$ss)) {
cm('RelayVentilation6.turnOff');
say('Выключаю турбину вытяжки');
} else {
say("Непонятно: $ss");
}
saveToCache('VAR:original'.$from_user_id, '');
|
турбина притока
Шаблон: турбин(а|у) притока
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
if (preg_match('/включи/isu',$ss)) {
cm('RelayVentilation1.turnOn');
say('Включаю турбину притока');
} elseif (preg_match('/выключи/isu',$ss)) {
cm('RelayVentilation1.turnOff');
say('Выключаю турбину притока');
} else {
say("Непонятно: $ss");
}
saveToCache('VAR:original'.$from_user_id, '');
|
|
Насос
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
// ToDo варианты уточнения в доме и на кухне в зависимости от начала фразы
if ($from_user_id == 5) { $ss.=' в доме'; }
if ($from_user_id == 8) { $ss.=' в бане'; }
saveToCache('VAR:original'.$from_user_id, $ss);
// массив связей id пользователя и id шаблона комнаты (устройства)
$a = array(5=>51, 8=>51);
// Выполнить код шаблона сразу если не сказали где, или спросить место
if (array_key_exists($from_user_id, $a)) {
include_once(DIR_MODULES . 'patterns/patterns.class.php');
//context_activate(31,0,'',$from_user_id); возможно в будущем заменит инклайд модуля
//https://mjdm.ru/forum/viewtopic.php?f=24&t=1511&p=131450#p131464
$pt = new patterns();
$pt->runPatternAction($a[$from_user_id], 0, '', $from_user_id);
context_clear($from_user_id);
clearTimeOut('user_' . $from_user_id . '_contexttimeout');
} else {
say('Где именно?');
}
|
место
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
/*
Работа с одним конкретным реле
Команды управления автоматического режима
в результате будет либо изменен status реле лмбо режим modeSwitch
*/
// ToDo уйти на описание объекта реле, или просклонять отдельным сценарием
$rooms=[];
if (preg_match('/дом/isu',$ss) && preg_match('/рециркуляц/isu',$ss) && preg_match('/воды/isu',$ss)) { $rooms += [ 'RelayHomeRecirculationGWS' => 'рециркуляции воды в доме' ]; }
if (preg_match('/бан/isu',$ss) && preg_match('/рециркуляц/isu',$ss) && preg_match('/воды/isu',$ss)) { $rooms += [ 'RelayBhRecirculationGWS' => 'рециркуляции воды в бане' ]; }
// if (preg_match('/кухн/isu',$ss) && preg_match('/отоплен/isu',$ss) && preg_match('/пол/isu',$ss)) { $rooms += [ 'XXX' => 'отопления теплых полов на кухне' ]; }
if (preg_match('/бан/isu',$ss) && preg_match('/пол/isu',$ss)) { $rooms += [ 'RelayBhPumpFloor' => 'отопления теплых полов в бане' ]; }
if (preg_match('/бан/isu',$ss) && preg_match('/радиатор/isu',$ss)) { $rooms += [ 'RelayBhPumpRadiator' => 'отопления радиаторов в бане' ]; }
$t=array('насос','насосом');
foreach( $rooms as $n => $w) {
// закончить если modeSwitch для реле не указан
if (preg_match('/авто/isu',$ss)) {
if (!is_numeric(gg("$n.modeSwitch"))) {
say("Авторежим управления $t[1] $w не настроен");
continue;
}
}
if (preg_match('/включи/isu',$ss)) {
if (preg_match('/авто/isu',$ss)) {
sg("$n.modeSwitch",2);
cm("$n.logic");
say("Выбрано автоматическое управление $t[1] $w");
say("$t[0] сейчас ".(gg("$n.status") ? 'включен' : 'выключен'));
} else {
cm("$n.turnOn");
say("Включаю $t[0] $w");
}
} elseif (preg_match('/выключи/isu',$ss)) {
if (preg_match('/авто/isu',$ss)) {
sg("$n.modeSwitch",gg("$n.status"));
say("Автоматическое управление $t[1] $w отключено");
say("$t[0] сейчас ".(gg("$n.status") ? 'включен' : 'выключен'));
// насос сейчас выключен
} else {
cm("$n.turnOff");
say("Выключаю $t[0] $w");
}
} else {
say("Непонятно: $ss");
}
}
saveToCache('VAR:original'.$from_user_id, '');
|
|
Свет Освещение
Шаблон: ((с|ц)вет|освещение)
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
if ($from_user_id == 5) { $ss.=' на кухне'; }
if ($from_user_id == 8) { $ss.=' в зале'; }
saveToCache('VAR:original'.$from_user_id, $ss);
// массив связей id пользователя и id шаблона комнаты (устройства)
$a = array(5=>31, 8=>48);
// Выполнить код шаблона сразу если не сказали где, или спросить место
if (array_key_exists($from_user_id, $a)) {
include_once(DIR_MODULES . 'patterns/patterns.class.php');
//context_activate(31,0,'',$from_user_id); возможно в будущем заменит инклайд модуля
//https://mjdm.ru/forum/viewtopic.php?f=24&t=1511&p=131450#p131464
$pt = new patterns();
$pt->runPatternAction($a[$from_user_id], 0, '', $from_user_id);
context_clear($from_user_id);
clearTimeOut('user_' . $from_user_id . '_contexttimeout');
} else {
say('Где именно?');
}
|
зал
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
/*
управление группой реле в конкретной комнате
автоматическое управление реле ToDo морф
ver Group 3.0
*/
// определение вкл/выкл. Указания имя метода
if (preg_match('/включи/isu',$ss)) { $m='turnOn'; $t='Включаю'; }
elseif (preg_match('/выключи/isu',$ss)) { $m='turnOff'; $t='Выключаю';}
else { say("Непонятно: $ss"); return; } //случиться если совпадение в шаблоне есть, а в коде нет
// команда авто управления
if (preg_match('/авто/isu',$ss)) { $m='logic'; $t.=' авторежим'; } //автоматическое управление
$a=[]; $f='';
// сбор признаков объектов
if (preg_match('/перв/isu',$ss)) { array_push($a, 'первый'); $f.='1'; }
if (preg_match('/втор/isu',$ss)) { array_push($a, 'второй'); $f.='2'; }
if (preg_match('/трет/isu',$ss)) { array_push($a, 'третий'); $f.='3'; }
// ключевое слово "весь" отменяет конкретные признаки объектов
if (preg_match('/(весь|всем|полный)/isu',$ss) || count($a)==3) { $t.=' весь'; $a=[]; $f='123'; }
if (count($a)==0 && !$f ) {
// если не был указан признак объекта. Раздельно для вкл/выкл
// можно добавить текст вначале или в конце признаком объекта
if (preg_match('/включи/isu',$ss)) { $f='1'; } //array_push($a, 'первый');
elseif (preg_match('/выключи/isu',$ss)) { $t.=' весь'; $f='123'; }
}
// включаю в зале бани первый и третий свет
// сборка в строку с текстом нескольких признаков объектов
if (count($a)) {
$t.=' ';
for($t.=$a[0], $i = 1; $i < count($a); ++$i) {
if ($i < count($a)-1) {$t.=', ';} else {$t.=' и ';}
$t.=$a[$i];
}
}
// что и где для финальной фразы
$t.=' свет в зале бани';
// выполнение методов
$a=[1=>'RelayBhZalLight1',2=>'RelayBhZalLight2',3=>'RelayBhZalLight3'];
foreach($a as $k=>$v) {
if (preg_match("/$k/isu",$f)) {
if (preg_match('/авто/isu',$ss)) {
if (preg_match('/включи/isu',$ss)) {
sg("$v.modeSwitch",2);
} elseif (preg_match('/выключи/isu',$ss)) {
sg("$v.modeSwitch",gg("$v.status"));
}
}
if (preg_match('/включи/isu',$ss)) { clearTimeOut($v.'_nowork'); }
if (preg_match('/выключи/isu',$ss)) { setTimeOut($v.'_nowork', '', 5*60); }
cm("$v.$m");
}
}
// финальная фраза
say($t);
saveToCache('VAR:original'.$from_user_id, '');
|
комната
Шаблон: (ванной|туалет|подъезд|лестниц|парн|парил|мыльн|мывочн|беседк)
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
/*
Работа с одним конкретным реле
Команды управления автоматического режима
в результате будет либо изменен status реле лмбо режим modeSwitch
*/
// ToDo уйти на описание объекта реле, или просклонять отдельным сценарием
$rooms=[];
if (preg_match('/подъезд/isu',$ss)) { $rooms += [ 'RelayDrivewayLight' => 'у подъезда' ]; }
if (preg_match('/лестниц/isu',$ss)) { $rooms += [ 'RelayStairsLight2' => 'на лестнице' ]; } //возможно поделится на баню и дом
if (preg_match('/ванной/isu',$ss)) { $rooms += [ 'RelayBathLight' => 'в ванной комнате' ]; }
//if (preg_match('/холл/isu',$ss)) { $rooms += [ 'xxxxx' => 'в холле' ]; } //холл только в доме
if (preg_match('/туалет/isu',$ss)) {
if (preg_match('/дом/isu',$ss)) { $rooms += [ 'RelayHomeWCLight' => 'в туалете' ];} //дома
if (preg_match('/бан/isu',$ss)) { $rooms += [ 'RelayBhWCLight' => 'в туалете бани' ]; } //бани
if (preg_match( "/^(?!.*дом|.*бан).*$/", $ss )) {
if ($from_user_id==8) { $rooms += [ 'RelayBhWCLight' => 'в туалете бани' ]; } //бани
elseif ($from_user_id==5) { $rooms += [ 'RelayHomeWCLight' => 'в туалете' ]; }
else { $rooms += [ 'RelayHomeWCLight' => 'в туалете дома' ]; } //либо сказать, что таких комнат у нас несколько
}
}
if (preg_match('/(парн|парил)/isu',$ss)) { $rooms += [ 'RelayBhLightSteamroom' => 'в парной' ]; }
if (preg_match('/(мыльн|мывочн)/isu',$ss)) { $rooms += [ 'RelayBhLightWashing' => 'в помывочной' ]; }
if (preg_match('/(беседк)/isu',$ss)) { $rooms += [ 'RelayBhLightArbor' => 'в беседке' ]; }
$t=array('свет','светом');
foreach( $rooms as $n => $w) {
// закончить если modeSwitch для реле не указан
if (preg_match('/авто/isu',$ss)) {
if (!is_numeric(gg("$n.modeSwitch"))) {
say("Авторежим управления $t[1] $w не настроен");
continue;
}
}
if (preg_match('/включи/isu',$ss)) {
if (preg_match('/авто/isu',$ss)) {
sg("$n.modeSwitch",2);
cm("$n.logic");
say("Выбрано автоматическое управление $t[1] $w");
} else {
clearTimeOut($v.'_nowork');
cm("$n.turnOn");
say("Включаю $t[0] $w");
}
} elseif (preg_match('/выключи/isu',$ss)) {
if (preg_match('/авто/isu',$ss)) {
sg("$n.modeSwitch",gg("$n.status"));
say("Автоматическое управление $t[1] $w отключено");
} else {
setTimeOut($v.'_nowork', '', 5*60);
cm("$n.turnOff");
say("Выключаю $t[0] $w");
}
} else {
say("Непонятно: $ss");
}
}
saveToCache('VAR:original'.$from_user_id, '');
|
комната отдыха
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
/*
управление группой реле в конкретной комнате
автоматическое управление реле ToDo морф
ver Group 3.0
*/
// определение вкл/выкл. Указания имя метода
if (preg_match('/включи/isu',$ss)) { $m='turnOn'; $t='Включаю'; }
elseif (preg_match('/выключи/isu',$ss)) { $m='turnOff'; $t='Выключаю';}
else { say("Непонятно: $ss"); return; } //случиться если совпадение в шаблоне есть, а в коде нет
// команда авто управления
if (preg_match('/авто/isu',$ss)) { $m='logic'; $t.=' авторежим'; } //автоматическое управление
$a=[]; $f='';
// сбор признаков объектов
if (preg_match('/перв/isu',$ss)) { array_push($a, 'первый'); $f.='1'; }
if (preg_match('/втор/isu',$ss)) { array_push($a, 'второй'); $f.='2'; }
// ключевое слово "весь" отменяет конкретные признаки объектов
if (preg_match('/(весь|всем|полный)/isu',$ss) || count($a)==3) { $t.=' весь'; $a=[]; $f='123'; }
if (count($a)==0 && !$f ) {
// если не был указан признак объекта. Раздельно для вкл/выкл
// можно добавить текст вначале или в конце признаком объекта
if (preg_match('/включи/isu',$ss)) { $f='1'; } //array_push($a,'второй');
elseif (preg_match('/выключи/isu',$ss)) { $t.=' весь'; $f='12'; }
}
// включаю в зале бани первый и третий свет
// сборка в строку с текстом нескольких признаков объектов
if (count($a)) {
$t.=' ';
for($t.=$a[0], $i = 1; $i < count($a); ++$i) {
if ($i < count($a)-1) {$t.=', ';} else {$t.=' и ';}
$t.=$a[$i];
}
}
// что и где для финальной фразы
$t.=' свет в комнате отдыха';
// выполнение методов
$a=[1=>'RelayBhLightRestroom1',2=>'RelayBhLightRestroom2'];
foreach($a as $k=>$v) {
if (preg_match("/$k/isu",$f)) {
if (preg_match('/авто/isu',$ss)) {
if (preg_match('/включи/isu',$ss)) {
sg("$v.modeSwitch",2);
} elseif (preg_match('/выключи/isu',$ss)) {
sg("$v.modeSwitch",gg("$v.status"));
}
}
if (preg_match('/включи/isu',$ss)) { clearTimeOut($v.'_nowork'); }
if (preg_match('/выключи/isu',$ss)) { setTimeOut($v.'_nowork', '', 5*60); }
cm("$v.$m");
}
}
// финальная фраза
say($t);
saveToCache('VAR:original'.$from_user_id, '');
|
кухня
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
/*
управление группой реле в конкретной комнате
автоматическое управление реле ToDo морф
ver Group 3.0
*/
// определение вкл/выкл. Указания имя метода
if (preg_match('/включи/isu',$ss)) { $m='turnOn'; $t='Включаю'; }
elseif (preg_match('/выключи/isu',$ss)) { $m='turnOff'; $t='Выключаю';}
else { say("Непонятно: $ss"); return; } //случиться если совпадение в шаблоне есть, а в коде нет
// команда авто управления
if (preg_match('/авто/isu',$ss)) { $m='logic'; $t.=' авторежим'; } //автоматическое управление
$a=[]; $f='';
// сбор признаков объектов
if (preg_match('/(перв|вход|начал|зад)/isu',$ss)) { array_push($a, 'первый'); $f.='1'; }
if (preg_match('/(втор|левый|слева)/isu',$ss)) { array_push($a, 'второй'); $f.='2';}
if (preg_match('/(трет|правый|справа)/isu',$ss)) { array_push($a, 'третий'); $f.='3';}
// ключевое слово "весь" отменяет конкретные признаки объектов
if (preg_match('/(весь|всем|полный)/isu',$ss) || count($a)==3) { $t.=' весь'; $a=[]; $f='123'; }
if (count($a)==0 && !$f ) {
// если не был указан признак объекта. Раздельно для вкл/выкл
// можно добавить текст вначале или в конце признаком объекта
if (preg_match('/включи/isu',$ss)) { $f='23'; } //array_push($a,'второй'); array_push($a,'третий');
elseif (preg_match('/выключи/isu',$ss)) { $t.=' весь'; $f='123'; }
}
// включаю в зале бани первый и третий свет
// сборка в строку с текстом нескольких признаков объектов
if (count($a)) {
$t.=' ';
for($t.=$a[0], $i = 1; $i < count($a); ++$i) {
if ($i < count($a)-1) {$t.=', ';} else {$t.=' и ';}
$t.=$a[$i];
}
}
// что и где для финальной фразы
$t.=' свет на кухне';
// выполнение методов
$a=[2=>'RelayKitchenLight2',3=>'RelayKitchenLight3']; //1=>'RelayKitchenLight1',
foreach($a as $k=>$v) {
if (preg_match("/$k/isu",$f)) {
if (preg_match('/авто/isu',$ss)) {
if (preg_match('/включи/isu',$ss)) {
sg("$v.modeSwitch",2);
} elseif (preg_match('/выключи/isu',$ss)) {
sg("$v.modeSwitch",gg("$v.status"));
}
}
if (preg_match('/включи/isu',$ss)) { clearTimeOut($v.'_nowork'); }
if (preg_match('/выключи/isu',$ss)) { setTimeOut($v.'_nowork', '', 5*60); }
cm("$v.$m");
}
}
// финальная фраза
say($t);
saveToCache('VAR:original'.$from_user_id, '');
|
строение
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
/*
Выключает реле определенной локации "location_id" (Дом, Баня ...)
Имя реле управления светом должно содержать "Light"
*/
$locations=[];
if (preg_match('/дом/isu',$ss)) { $locations += [ 1 => 'в доме' ]; }
if (preg_match('/бан/isu',$ss)) { $locations += [ 2 => 'в бане' ]; }
foreach( $locations as $n => $w) {
if (preg_match('/включи/isu',$ss)) {
say('Я могу только выключить весь свет '.$w);
} elseif (preg_match('/выключи/isu',$ss)) {
// перебор объектов локации, выключение при совпадении, сбор описаний
$a=[];
$objects=getObjectsByClass('Relays');
foreach($objects as $obj) {
$obj=getObject($obj['TITLE']);
if ($obj->location_id==$n && stripos($obj->object_title, 'Light') !== false) {
if ($obj->getProperty('status')) {
array_push($a, $obj->description);
setTimeOut($obj->object_title.'_nowork', '', 5*60);
$obj->callMethod('turnOff');
}}
}
// сборка в строку с текстом нескольких признаков объектов
if (count($a)) {
$t='Выключаю ';
for($t.=$a[0], $i = 1; $i < count($a); ++$i) {
if ($i < count($a)-1) {$t.=', ';} else {$t.=' и ';}
$t.=$a[$i];
}
} else {
$t="Всё $w уже выключено";
}
// финальная фраза
say($t);
} else {
say("Непонятно: $ss");
}
}
saveToCache('VAR:original'.$from_user_id, '');
|
|
Телевизор
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
saveToCache('VAR:original'.$from_user_id, $ss);
// массив связей id пользователя и id шаблона комнаты (устройства)
$a = array(5=>24, 99=>99);
// Выполнить код шаблона сразу если не сказали где, или спросить место
if (array_key_exists($from_user_id, $a)) {
include_once(DIR_MODULES . 'patterns/patterns.class.php');
//context_activate(31,0,'',$from_user_id); возможно в будущем заменит инклайд модуля
//https://mjdm.ru/forum/viewtopic.php?f=24&t=1511&p=131450#p131464
$pt = new patterns();
$pt->runPatternAction($a[$from_user_id], 0, '', $from_user_id);
context_clear($from_user_id);
clearTimeOut('user_' . $from_user_id . '_contexttimeout');
} else {
say('Какой телевизор?');
}
|
кабинет
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
if (preg_match('/включи/isu',$ss)) {
setGlobal('IRtransOfficeRoom.code',getGlobal('TVLG.powerOn'));
say('Включаю телевизор');
} elseif (preg_match('/выключи/isu',$ss)) {
setGlobal('IRtransOfficeRoom.code',getGlobal('TVLG.powerOff'));
say('Выключаю телевизор');
} else {
say("Непонятно: $ss");
}
saveToCache('VAR:original'.$from_user_id, '');
|
кухня
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
if (preg_match('/включи/isu',$ss)) {
setGlobal('IRtransOfficeRoom.code',getGlobal('TVerisson.powerOn'));
setGlobal('IRtransOfficeRoom.code',getGlobal('playerRTC.powerOn'));
say('Включаю телевизор');
} elseif (preg_match('/выключи/isu',$ss)) {
setGlobal('IRtransOfficeRoom.code',getGlobal('TVerisson.powerOff'));
setGlobal('IRtransOfficeRoom.code',getGlobal('playerRTC.powerOff'));
say('Выключаю телевизор');
} else {
say("Непонятно: $ss");
}
saveToCache('VAR:original'.$from_user_id, '');
|
|
|
Статус, Состояние
Шаблон: (статус|состояние)
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
$ots=[];
if (preg_match('/насос(|а|ов) рециркуляци(и|я) (воды|гвс)/isu',$ss) ||
preg_match('/рециркуляционн(ого|ых) насос(а|ов) (воды|гвс)/isu',$ss)) {
$f=false;
if (preg_match('/бан/isu',$ss)) { $f=true; $ots[] = 'RelayBhRecirculationGWS'; }
if (preg_match('/дом/isu',$ss)) { $f=true; $ots[] = 'RelayHomeRecirculationGWS'; }
if (!$f) { $ots[] = 'RelayHomeRecirculationGWS'; $ots[] = 'RelayBhRecirculationGWS'; }
}
if (preg_match('/(общего|центрального) увлажнителя/isu',$ss)) { $ots[] = 'RelayZsocket1'; }
$locationName=[1=>'в доме', 2=>'в бане'];
foreach( $ots as $ot ) {
// моя функция получения времени изменения свойства. Ссылка на форум есть в блоге
$rec = mygetGlobalWithUpd("$ot.status");
$obj=getObject($ot);
$t = $obj->description. ' ' . $locationName[$obj->location_id];
if (is_array($rec)) {
$t .= ($rec['VALUE'] ? ' работает' : ' отключен');
$t.=' ' . round((time()-$rec['UPDATED'])/60) . ' мин';
if (!$rec['VALUE']) { $t.=' назад'; }
$ms= $obj->getProperty(modeSwitch);
if (is_numeric($ms)) {
$t .= ($ms<2 ? '. Автоматическое управление отключено' : '. Включено автоматическое управление');
}
} else {
$t = "Статус объекта $t не задан";
}
say(ucfirst($t));
}
if (!count($ots)) { say('Непонятно: '.$ss); }
saveToCache('VAR:original'.$from_user_id, '');
|
Температура, Влажность
Шаблон: (температур|влажност)
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
if ($from_user_id == 5) { $ss.=' на кухне'; }
saveToCache('VAR:original'.$from_user_id, $ss);
// массив связей id пользователя и id шаблона комнаты (устройства)
$a = array(5=>43, 99=>99);
// Выполнить код шаблона сразу если не сказали где, или спросить место
if (array_key_exists($from_user_id, $a)) {
include_once(DIR_MODULES . 'patterns/patterns.class.php');
//context_activate(31,0,'',$from_user_id); возможно в будущем заменит инклайд модуля
//https://mjdm.ru/forum/viewtopic.php?f=24&t=1511&p=131450#p131464
$pt = new patterns();
$pt->runPatternAction($a[$from_user_id], 0, '', $from_user_id);
context_clear($from_user_id);
clearTimeOut('user_' . $from_user_id . '_contexttimeout');
} else {
say('Где именно?');
}
|
комната
Шаблон: (кухн|гостин|спальн|кабинет|холл|зал|парн|мывочн|мыльн|предбан|подвал|гараж)
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
// Home
if (preg_match('/кухн/isu',$ss)) { $rooms[] = 'KitchenArea'; }
if (preg_match('/спальн/isu',$ss)) { $rooms[] = 'Bedroom'; }
if (preg_match('/гостин/isu',$ss)) { $rooms[] = 'Livingroom'; }
if (preg_match('/кабинет/isu',$ss)) { $rooms[] = 'OfficeRoom'; }
if (preg_match('/холл/isu',$ss)) { $rooms[] = 'HallArea'; }
// Bathhouse
if (preg_match('/зал/isu',$ss)) { $rooms[] = 'ZalRoom'; }
if (preg_match('/отдых/isu',$ss)) { $rooms[] = 'Restroom'; }
if (preg_match('/парн/isu',$ss)) { $rooms[] = 'SteamRoom'; }
if (preg_match('/(мывочн|мыльн)/isu',$ss)) { $rooms[] = 'WashingRoom'; }
if (preg_match('/предбан/isu',$ss)) { $rooms[] = 'Anteroom'; }
// Utility
if (preg_match('/подвал/isu',$ss)) { $rooms[] = 'UndergroundArea'; }
if (preg_match('/гараж/isu',$ss)) { $rooms[] = 'GarageArea'; }
$prop=[];
if (preg_match('/температур/isu',$ss)) { $prop += [ 'Temperature' => ['Температура','°'] ]; }
if (preg_match('/влажност/isu',$ss)) { $prop += [ 'Humidity' => ['Влажность','%'] ]; }
foreach( $rooms as $room ){
$obj=getObject($room);
foreach( $prop as $key => $value ){
// моя функция получения времени изменения свойства. Ссылка на форум есть в блоге
$rec = mygetGlobalWithUpd($obj->object_title . '.' . $key);
if ($rec['VALUE']) {
$t = $value[0].' '.$obj->getProperty('inRoomText').' '.str_replace('.',',',$rec['VALUE']).$value[1];
$i=time()-$rec['UPDATED'];
echo 'updated '.round($i/60).' min ';
if ($i > 60*60*5) { $t .= '. Данные давно не обновлялись, проверьте датчик'; }
elseif ($i > 60*60*2) { $t .= ', но данные уже не актуальны'; }
//else { $t .= ', данные обновлены '. round($i/60) .' мин назад'; }
} else {
$t = $value[0].' '.$obj->getProperty('inRoomText').' не указана. Данные отсутствуют';
}
say($t); //echo $t.' ';
}
}
saveToCache('VAR:original'.$from_user_id, '');
|
строение
Код
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
$otps=[];
if (preg_match('/дом/isu',$ss)) {
if (preg_match('/температур/isu',$ss)) { $otps += [ 'thrm_alpha.airCurrentTemp' => ['температура в доме','°'] ]; }
if (preg_match('/влажност/isu',$ss)) { $otps += [ 'ThisComputer.homeHumidity' => ['влажность в доме','%'] ]; }
}
if (preg_match('/бан/isu',$ss)) {
if (preg_match('/температур/isu',$ss)) {$otps += [ 'thrm_bathhouse.airCurrentTemp' => ['температура в бане','°'] ]; }
if (preg_match('/влажност/isu',$ss)) { $otps += [ 'ThisComputer.bhHumidity' => ['влажность в бане','%'] ]; }
}
foreach( $otps as $otp => $v ) {
// моя функция получения времени изменения свойства. Ссылка на форум есть в блоге
$rec = mygetGlobalWithUpd($otp);
if ($rec['VALUE']) {
$t = 'Средняя '.$v[0].' '.str_replace('.',',',$rec['VALUE']).$v[1];
$i=time()-$rec['UPDATED'];
if ($i > 60*60*5) { $t .= '. Данные давно не обновлялись, проверьте датчик'; }
elseif ($i > 60*60*2) { $t .= ', но данные уже не актуальны'; }
else { $t .= ', данные обновлены '. round($i/60) .' мин назад'; }
} else {
$t = $v[0].' не указана';
}
say($t);
}
saveToCache('VAR:original'.$from_user_id, '');
|
|
|