|
GetSutki
|
определяем день ночь утро вечер
if (timeBetween("00:00", "06:00")) {
$s='ночь';
} elseif (timeBetween("06:00", "11:00")) {
$s='утро';
} elseif (timeBetween("11:00", "16:00")) {
$s='день';
} else {
$s='вечер';
}
if (gg('sutki')==$s )
{echo "не изменились";} else
{sg('sutki',$s);echo $s; }
|
|
AlarmAllOff
|
clearTimeOut('AlarmTimer');
sg('AlarmClock03.AlarmOn',0);
sg('AlarmClock04.AlarmOn',0);
sg('AlarmClock05.AlarmOn',0);
say("Все будильники отключены",2);
|
|
AlarmAllOn
|
sg('AlarmClock03.AlarmOn',1);
sg('AlarmClock04.AlarmOn',1);
sg('AlarmClock05.AlarmOn',1);
say("Все будильники включены",2);
|
|
backupAll
|
sayReply("Сделана плановая резервная копия умного дома",2);
|
|
camImagesProcess
|
Сортировка изображений с веб-камеры
$src='/var/www/media/webcam'; // откуда брать фотографии
clearTimeout('camImagesTimer');
$base_path='/var/www/dvr/unsorted';
$dst='/var/www/dvr/sorted';
safe_exec('chown pi:pi -Rf '.$base_path.'/*');
safe_exec('chmod 0777 -f '.$base_path.'/*');
setTimeout('camImagesTimer','runScript("camImagesProcess");',10*60);
if (is_dir($base_path)) {
if ($dir = @opendir($base_path)) {
while (($file = readdir($dir)) !== false) {
if ($file!='.' && $file!='..' && is_dir($base_path.'/'.$file)) {
$src=$base_path.'/'.$file;
echo $src.'<br/>';
processLine($src." -> ".$dst."/%Y/%m - %F/%d/".$file);
}
}
closedir($dir);
}
} else {
echo "Cannot open $base_path";
}
processLine("CLEAR ".$dst." 30 DAYS OLD");
|
|
checkFreeSpace
|
Проверка свободного места на диске
$max_usage=90; //%
$output=array();
exec('df',$output);
//var_dump($output);
$problems=0;
$problems_details='';
foreach($output as $line) {
if (preg_match('/(\d+)% (\/.+)/',$line,$m))
$proc=$m[1];
$path=$m[2];
if ($proc>$max_usage) {
$problems++;
$problems_details.="$path: $proc; ";
}
//echo "$path: $proc%<br/>";
}
sg("ThisComputer.SpaceProblems",$problems);
sg("ThisComputer.SpaceProblems_Details",$problems_details);
setTimeOut('checkFreeSpace','runScript("checkFreeSpace");',5*60);
|
|
ClockKuranty
|
|
|
rebootMJD
|
sayReply('Внимание, перегружаюсь!', 2);
sleep(5);
safe_exec('c:\_majordomo\apps\nircmd\nircmd.exe script "c:\_majordomo\reboot_mjd.ncl"');
|
|
rebootSystem
|
Перезапуск системы
sayReply('Перезагрузка машины!', 2);
sleep(5);
safe_exec('c:\_majordomo\apps\nircmd\nircmd.exe script "c:\_majordomo\reboot_sys.ncl"');
|
|
shutDown
|
Выключение системы
$filename = ROOT . '/database_backup/db.sql';
$mysqlDumpPath = "/usr/bin/mysqldump";
$mysqlDumpParam = " --user=" . DB_USER . " --password=" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
say("Подготовка к выключению",2);
setTimeout("shutdownTimer","safe_exec('shutdown -h now');",15);
//$filename = ROOT . '/database_backup/db.sql';
//$mysqlDumpPath = "/usr/bin/mysqldump";
//$mysqlDumpParam = " --user=" . DB_USER . " --password=" . DB_PASSWORD;
//$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
//if (file_exists($filename)) rename($filename, $filename . '.prev');
//exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
//sayReply("Подготовка к выключению",2);
//setTimeout("shutdownTimer","safe_exec('shutdown -h now');",15);
|
|
Travel_1
|
Запускать когда уезжаем из дома!
callMethod("Relay07.turnOn");
setTimeOut('one',"callMethod('Relay07.turnOff');",29*60);
setTimeOut('two',"callMethod('Relay04.turnOn');",30*60);
setTimeOut('three',"callMethod('Relay04.turnOff');",57*60);
|
|
Travel_2
|
Запускать когда уезжаем из дома!
callMethod("Relay08.turnOn");
setTimeOut('one',"callMethod('Relay08.turnOff');",30*60);
setTimeOut('two',"callMethod('Relay04.turnOn');",31*60);
setTimeOut('three',"callMethod('Relay04.turnOff');",50*60);
|
|
Travel_3
|
Запускать когда уезжаем из дома!
callMethod("Relay08.turnOn");
setTimeOut('one',"callMethod('Relay08.turnOff');",50*60);
setTimeOut('two',"callMethod('Relay04.turnOn');",30*60);
setTimeOut('three',"callMethod('Relay04.turnOff');",55*60);
|
|
vol_cube
|
$ugol=getGlobal('dd.ugol_h');
$volumeLevel=getGlobal('ThisComputer.volumeLevel');
$corrective=1.8;//подстройка под себя насколько чуствительно будет
$volumeNew = (int)($volumeLevel + round($ugol/$corrective));
if ($volumeNew == 0) {
if ($ugol < 0 ) $volumeNew = -1;
else $volumeNew = 1;
}
if($volumeNew < 100 && $volumeNew > 0 ) {
setGlobal('ThisComputer.volumeLevel',$volumeNew);
}
else if ($volumeNew < 0){
setGlobal('ThisComputer.volumeLevel',0);
}
else if ($volumeNew > 100){
setGlobal('ThisComputer.volumeLevel',100);
}
callMethod('ThisComputer.VolumeLevelChanged',array('VALUE'=>$volumeNew));
|
|
CheckBattLevelDevice
|
Проверка напряжения питания устройств
if((int)gg("MotionSensor1.voltage")<2.800 and (int)gg("MotionSensor1.voltage")!="")say("Необходимо заменить батарейку в датчике движения коридора",2);
if((int)gg("Motion02.voltage")<2.800 and (int)gg("Motion02.voltage")!="")say("Необходимо заменить батарейку в датчике движения гардеробной",2);
if((int)gg("Openclose02.voltage")<2.800 and (int)gg("Openclose02.voltage")!="")say("Необходимо заменить батарейку в датчике входной двери",2);
if((int)gg("Button01.voltage")<2.800 and (int)gg("Button01.voltage")!="")say("Необходимо заменить батарейку в беспроводной кнопке управления",2);
if((int)gg("Relay04.voltage")<3.000 and (int)gg("Relay04.voltage")!="")say("Есть проблемы с питанием выключателя света на кухне, напряжение питания платы управления ниже трех вольт",2);
if((int)gg("Relay05.voltage")<3.000 and (int)gg("Relay05.voltage")!="")say("Есть проблемы с питанием выключателя света в ванной и туалета, напряжение питания платы управления ниже трех вольт",2);
if((int)gg("Relay07.voltage")<3.000 and (int)gg("Relay07.voltage")!="")say("Есть проблемы с питанием выключателя света в спальне, напряжение питания платы управления ниже трех вольт",2);
if((int)gg("Relay08.voltage")<3.000 and (int)gg("Relay08.voltage")!="")say("Есть проблемы с питанием выключателя света в гостиной, напряжение питания платы управления ниже трех вольт",2);
if((int)gg("Button02.voltage")<2.800 and (int)gg("Button02.voltage")!="")say("Необходимо заменить батарейку в дублирующем выключателе света на кухне",2);
if((int)gg("Relay10.voltage")<3.000 and (int)gg("Relay10.voltage")!="")say("Есть проблемы с питанием управляемой розетки, напряжение питания платы управления ниже трех вольт",2);
if((int)gg("Relay11.voltage")<3.000 and (int)gg("Relay11.voltage")!="")say("Есть проблемы с питанием выключателя света в прихожей, напряжение питания платы управления ниже трех вольт",2);
if((int)gg("Relay12.voltage")<3.000 and (int)gg("Relay12.voltage")!="")say("Есть проблемы с питанием выключателя света в коридоре, напряжение питания платы управления ниже трех вольт",2);
if((int)gg("TempSensor01.voltage")<2.800 and (int)gg("TempSensor01.voltage")!="")say("Необходимо заменить батарейку в датчике температуры и влажности",2);
if((int)gg("Openclose01.voltage")<2.800 and (int)gg("Openclose01.voltage")!="")say("Необходимо заменить батарейку в датчике дверного замка",2);
if((int)gg("Counter01.voltage")<3000 and (int)gg("Counter01.voltage")!="")say("Есть проблемы с питанием счетчика горячей воды, напряжение питания платы управления ниже трех вольт",2);
|
|
ColdWaterMeter
|
Счетчик холодной воды
$x_x=gg("Counter02.value");
$m_x=($x_x/1); //переводим в m3 если надо поделить на 100 - ($m_x=($x_x/100)
sayreply('Показания счетчика холодной воды '.$m_x.' метров кубических',2);
//sayreply("Показания счетчика холодной воды",2);
//sayreply($m_x,2);
//sayreply("метров кубических",2);
|
|
HotWaterMeter
|
Показания счетчика горячей воды
$x_x=gg("Counter03.value");
$m_x=($x_x/1); //переводим в m3 если надо поделить на 100 - ($m_x=($x_x/100)
sayreply('Показания счетчика горячей воды '.$m_x.' метров кубических',2);
//sayreply("Показания счетчика горячей воды",2);
//sayreply($m_x,2);
//sayreply("метров кубических",2);
|
|
klimatDoma
|
Произносит показания датчика температуры и влажности
sayReply('Температура в помещении '.gg('TempSensor01.value').' градусов цельсия, влажность '.gg('HumSensor01.value').' процентов.',2);
|
|
Openhardmonitor
|
open hardware monitor
//-----------------------Данные с ohm сценарий
$ch = curl_init('http://192.168.1.50:8085/data.json');//здесь заменить IP на свой http://*:8085/data.json
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ohm = curl_exec($ch);
$json = json_decode($ohm);
//----------------------- Вытягиваем данные
$CpuLoad = $json -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[2] ->{'Children'}[0] -> {'Value'};
$CpuTemp = $json -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[1] ->{'Children'}[0] -> {'Value'};
$Memory = $json -> {'Children'}[0] -> {'Children'}[1] -> {'Children'}[0] ->{'Children'}[0] -> {'Value'};
//----------------------- Просматриваем данные
echo "<br \>";
echo "Загрузка процессора";echo "  ";print_r("$CpuLoad");
echo "<br \>";
echo "температура процессора";echo "  ";print_r("$CpuTemp");
echo "<br \>";
echo "Занято оперативки";echo "  ";print_r("$Memory");
//----------------------- Присваеваем данные
setGlobal('ThisComputer.CpuLoad',intval($CpuLoad));
setGlobal('ThisComputer.CpuTemp',intval($CpuTemp));
setGlobal('ThisComputer.Memory',intval($Memory));
//-----------------------Выполнение скрипта раз в 2 сек. (timer_2s)
//clearTimeout("timer_2s_timeout");
//выполняемый скрипт
//setTimeOut("timer_2s_timeout", "runScript('timer_2s');", 2);
//-----------------------Поместить в минутный цикл
//runScript('timer_2s');
|
|
Pushover
|
curl_setopt_array($ch = curl_init(), array(
CURLOPT_URL => "https://api.pushover.net/1/messages.json",
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_POSTFIELDS => array(
"token" => "ab1qcoibatb2y9qa6j379fxddmicsi",
"user" => "uzdhpyj1qjmtvd6t2ekwqkmxbpaxti",
"message" => "Внимание! Сработал датчик протечки!",
"sound" => "bike",
)));
$res=curl_exec($ch);
curl_close($ch);
|
|
timer_2s
|
таймер для Openhardmonitor, без него не будет работать
clearTimeout("timer_2s_timeout");
runScript('Openhardmonitor');
setTimeOut("timer_2s_timeout", "runScript('timer_2s');", 2);
|
|
Входная дверь (отк/зак)
|
// для Сяоми
$ot = $this->object_title;
$status = $this->getProperty('status');
$updatedTime = $this->getProperty('updated');
$passed = time() - $updatedTime;
$newTimeout = 0;
if ($status)
{
say('Входная дверь закрыта', 2);
//сбросить таймер
ClearTimeOut($ot . '_passed');
//в режим
setTimeOut($ot . '_presence', "cm('Rooms.Check');", 600);
//проверяем когда в последний раз срабатывало событие "Входная дверь"
$last_register = registeredEventTime('entranceClosed');
//регистрируем событие "Входная дверь"
registerEvent('entranceClosed', $this->description, 7);
if ($last_register == '-1' || (time() - $last_register) > 7200)
{
if (round(getHistoryValue('NobodyHomeMode.active', time() - 600, true)) == 1)
{
runScriptSafe('Greeting');
}
}
}
elseif ($passed < 60 && !$status)
{
$newTimeout = 60;
say('Входная дверь открыта', 2);
//добавить камеру
}
elseif ($passed < 90 && !$status)
{
$newTimeout = 120;
say('Входная дверь открыта одну минуту', 2);
}
elseif ($passed < 240 && !$status)
{
$newTimeout = 120;
say('Входная дверь открыта три минуты', 2);
}
elseif ($passed < 1800 && !$status)
{
$newTimeout = 300;
say('Входная дверь открыта ' . round($passed/60) . ' минут', 2);
}
else
{
//если больше аларм (ну смс, астериск отправить)
say('Аларм!', 2);
}
if ($newTimeout > 0)
{
setTimeOut($ot . '_passed', 'cm("' . $ot . '.logicAction");', $newTimeout);
}
|
|
color change RGB LightRibbon
|
Изменение цвета RGB ленты по нажатию кнопки (карусель).
include_once(DIR_MODULES . 'magichome/magichome.class.php');
$mh = new magichome();
$mh->changecolordevice(1);
//где $deviceid -номер устройства модуля
//(у меня это цифра 1)
|
|
SmoothBrightness
|
Небольшой сценарий для плавного нарастания яркости в течении часа
$r=getGlobal('Rgb04.r');
$g=getGlobal('Rgb04.g');
$b=getGlobal('Rgb04.b');
if (($r<'255') && ($g<'255') && ($b<'255')) {
clearTimeout("rgb_timer");
if ($r<'255') {
sg('Rgb04.r',$r+1);
}
if ($g<'180') {
sg('Rgb04.g',$g+1);
}
if ($b<'50') {
sg('Rgb04.b',$b+1);
}
setTimeOut("rgb_timer","runScript('rgb');",14);
}
$color = sprintf("#%02x%02x%02x", $r, $g, $b); //преобразование RGB в HEX
sg('Rgb04.color',$color); //запись цвета в HEX
|
|
CallShablon
|
Код шаблона можно вызвать через имитацию команды пользователем.
$url='http://localhost/command.php?qry='.urlencode("привет");
getURL($url,0);
|
|
ChangeBrightness
|
Изменение яркости подсветки кровати
include_once(DIR_MODULES . 'magichome/magichome.class.php');
$mh = new magichome();
$mh->brightness(1,50);
//$mh->brightness($deviceid,$brightness);
//где:
//$deviceid -номер устройства модуля.
//$brightness - уровень яркости, от 0 до 100.
|
|
ChangeBrightness_2
|
Изменение яркости в гардеробной
//include_once(DIR_MODULES . 'magichome/magichome.class.php');
//$mh = new magichome();
//$mh->brightness(2,20);
//say(getRandomLine(DONE),1);
//sg('ThisComputer.volumeLevel', $matches[1]);
//callMethod('ThisComputer.VolumeLevelChanged',array('VALUE'=>$matches[1]));
$id = 2;
$brig = 20;
include_once(DIR_MODULES . 'magichome/magichome.class.php');
$mh = new magichome();
$mh->brightness($id,$brig);
|
|
checkGmail
|
Возвращает (показывает) количество не прочитанных писем.
$user = gg('Grigoriy.GmailAddress'); //имя пользователя
$pass = gg('Grigoriy.GmailPassword'); //пароль
$data_file = "https://".$user.":".$pass."@mail.google.com/mail/feed/atom";
$xml = simplexml_load_file($data_file); //раскладываем xml на массив
$unread = $xml->fullcount;
if ($unread == "") {$unread = "0";}
echo ('unread '.(int)$unread);
sg('Grigoriy.GMailUnread',(int)$unread);
|
|
clearCached
|
Очищает папку cms\cached, первая строка удаляет все файлы старше 2 дней, вторая удалит все папки в которых ничего нету.
Есть еще один скрипт, удалит все файлы кроме папок:
$files = getFilesTree('C:\_majordomo\htdocs\cms\cached');
foreach ($files as $file) {
@unlink(realpath($file));
}
remove_old_files('C:\_majordomo\htdocs\cms\cached', 2);
remove_old_files('C:\_majordomo\htdocs\cms\cached\voice', 1);
removeEmptySubFolders('C:\_majordomo\htdocs\cms\cached');
say('Удален кэш накопившийся за семь дней!', 2);
|
|
Clock
|
ЭТО НЕ СКРИПТ!!! МЕЛОДИИ В ПАПКЕ MUSIK/SOUND на сервере SMARTHOUSE, их надо загрузить мажордом если реализовывать эти часы!
Реализация часов с боем (с четвертями). Может, кому надо.
Объект: ClockChime
Метод: onNewMinute
$h=(int)date('G',time());
$m=date('i',time());
//часы
//if (($h>=0)) {
if ($m=="00") {
//say(timeNow(),1);
$hh=$h;
if ($hh>12) {$hh=$hh-12;}
if ($hh==0) {$hh=12;}
playSound($hh.'h');
}
//}
//четверти
//if ($m=='15') {playSound('15min');}
if ($m=='30') {playSound('30min');}
//if ($m=='45') {playSound('45min');}
//
|
|
cycle_xiaomihomeRestart
|
Используется для голосовой команды перезагрузки цикла сяоми
say('Внимание! Инициирован перезапуск цикла михоум. Ближайшие пару минут не будут функционировать все устройства сяоми', 2);
rs('cycle_xiaomihomeRestart', 'restart');
|
|
EffectLightRibbon
|
Предуставленные эффекты можно включить из метода или сценария
include_once(DIR_MODULES . 'magichome/magichome.class.php');
$mh = new magichome();
$mh->set_command(1,01,'03');
//$mh->set_command($deviceid,$value, '01');
//где:
//$deviceid -номер устройства модуля.
//$value - номер эффекта
//01 - скорость изменения эффекта.
|
|
EntranceDoor
|
Входная дверь, предупреждение об открытой входной двери...
$ot = $this->object_title;
$status = $this->getProperty('status');
$updatedTime = $this->getProperty('updated');
$passed = time() - $updatedTime;
$newTimeout = 0;
if ($status)
{
say('Входная дверь закрыта', 2);
//сбросить таймер
ClearTimeOut($ot . '_passed');
//в режим
setTimeOut($ot . '_presence', "cm('Rooms.Check');", 600);
//проверяем когда в последний раз срабатывало событие "Входная дверь"
$last_register = registeredEventTime('entranceClosed');
//регистрируем событие "Входная дверь"
registerEvent('entranceClosed', $this->description, 7);
if ($last_register == '-1' || (time() - $last_register) > 7200)
{
if (round(getHistoryValue('NobodyHomeMode.active', time() - 600, true)) == 1)
{
runScriptSafe('Greeting');
}
}
}
elseif ($passed < 60 && !$status)
{
$newTimeout = 60;
say('Входная дверь открыта', 2);
//добавить камеру
}
elseif ($passed < 90 && !$status)
{
$newTimeout = 120;
say('Входная дверь открыта одну минуту', 2);
}
elseif ($passed < 240 && !$status)
{
$newTimeout = 120;
say('Входная дверь открыта три минуты', 2);
}
elseif ($passed < 1800 && !$status)
{
$newTimeout = 300;
say('Входная дверь открыта ' . round($passed/60) . ' минут', 2);
}
else
{
//если больше аларм (ну смс, астериск отправить)
say('Аларм!', 2);
}
if ($newTimeout > 0)
{
setTimeOut($ot . '_passed', 'cm("' . $ot . '.logicAction");', $newTimeout);
}
|
|
exitFromHome
|
Напоминание при включении света в прихожей о вещах которые необходимо взять уходя в город
Дополнительно в onNewMinute кинул строку RunScript('exitFromHome');
if (timeBetween('06:15', '06:35')){
if((gg('Openclose01.status')==1) and (gg('Relay11.status')==1)) {
sayTo("Григорий. Прошу обратить внимание.Если вы собрались в город, не забудьте пожалуйста, кошелек, телефон, очки, и зонт если ожидается дождь",2,'WindowsPad32');
}
}
if (timeBetween('06:36', '07:15')){
if((gg('Openclose01.status')==1) and (gg('Relay11.status')==1)) {
sayTo("Антонина. Прошу обратить внимание.Если вы собрались в город, не забудьте пожалуйста, кошелек, телефон, очки, и зонт если ожидается дождь",2,'WindowsPad32');
}
}
if (timeBetween('08:00', '22:00')){
if((gg('Openclose01.status')==1) and (gg('Relay11.status')==1)) {
sayTo("Прошу обратить внимание. Если вы собрались в город, не забудьте пожалуйста, кошелек, телефон, очки, и зонт если ожидается дождь",2,'WindowsPad32');
}
}
//у меня в ответах такой код, отвечает туда, откуда пришел запрос
//global $session; //Обращаемся к глобальной переменной
//sayTo("Включаю проектор", 2, $session->data['TERMINAL']);
|
|
Greeting
|
Приветствие и отчет, при возвращении домой
say('Приветствую, добро пожаловать домой!', 2);
sleep (3);
runScript('reportStatus');
|
|
InFile
|
Используется для голосовой команды записи в файл голосовой инофрмации
//InFile
//runScript("InFile",array("subject"=>$subj, "body"=>$body, "filename"=>$filename ));
$date = gg("ThisComputer.DateNow");
$timeNow = gg("ThisComputer.timeNow");
$subject = $params['subject'];
$body = $params['body'];
$filename = $params['filename'];
$fp = fopen($filename , "a"); // Открываем файл
$test = fwrite($fp, $date." ".$timeNow." ");
$test = fwrite($fp, $subject." ");
$test = fwrite($fp, $body."\r\n");
fclose($fp); //Закрытие файла
|
|
openDoorLock
|
Предупреждение о не закрытом дверном замке и не только.
$ot = $this->object_title;
$status = $this->getProperty('status');
$updatedTime = $this->getProperty('updated');
$passed = time() - $updatedTime;
$newTimeout = 0;
if ($status)
{
say('Дверной замо-к закрыт', 2);
//сбросить таймер
ClearTimeOut($ot . '_passed');
//в режим
setTimeOut($ot . '_presence', "cm('Rooms.Check');", 600);
//проверяем когда в последний раз срабатывало событие "Входная дверь"
$last_register = registeredEventTime('entranceClosed');
//регистрируем событие "Входная дверь"
registerEvent('entranceClosed', $this->description, 7);
if ($last_register == '-1' || (time() - $last_register) > 7200)
{
if (round(getHistoryValue('NobodyHomeMode.active', time() - 600, true)) == 1)
{
runScriptSafe('Greeting');
}
}
}
elseif ($passed < 60 && !$status)
{
$newTimeout = 60;
say('Дверной замо-к открыт', 2);
//добавить камеру
}
elseif ($passed < 90 && !$status)
{
$newTimeout = 120;
say('Дверной замо-к открыт одну минуту', 2);
}
elseif ($passed < 240 && !$status)
{
$newTimeout = 120;
say('Дверной замо-к открыт три минуты', 2);
playSound("alarm.mp3");
}
elseif ($passed < 1800 && !$status)
{
$newTimeout = 300;
say('Дверной замо-к открыт ' . round($passed/60) . ' минут', 2);
}
else
{
//если больше аларм (ну смс, астериск отправить)
say('Последнее предупреждение! Замо-к открыт! Срочно закройте дверь на ключ!', 2);
playSound("sirena_vozdushnoy_trevogi.mp3");
}
if ($newTimeout > 0)
{
setTimeOut($ot . '_passed', 'cm("' . $ot . '.logicAction");', $newTimeout);
}
|
|
playClose_VLC
|
запуск плеера
//Для Windows
getURL('http://localhost/rc/?command=vlc_play',0);
|
|
ResetActiveContecst
|
По какому-то стечению обстоятельств мог для пользователя установиться контекст некорректный и не сброcиться по истечению времени. Этот код сбрасывает активный контекст для всех пользователей.
SQLExec("UPDATE users SET ACTIVE_CONTEXT_ID=0 WHERE 1");
|
|
ringtone door open
|
возможность инициировать проигрывание рингтона на хабе
пример
sg('rgbgt02.ringtone','12');
Вообще доступны следующие рингтоны:
* сирена [номера 0-8]
* дверной звонок [10-13]
* будильники [20-29]
* пользовательские рингтоны (загруженные через приложение) начинаются с номера 10001
Для того, чтобы остановить проигрываемый рингтон надо послать пустую строку или stop:
sg('rgbgt02.ringtone','stop');
Кроме того, есть возможность указать громкость, с которой проиграется рингтон (от 0 до 99):
sg('rgbgt02.ringtone','12,50'); // проиграть рингтон 12 с громкостью 50
sg('Shluz.ringtone','10,5');
|
|
runApp
|
Пример для запуска программ из MJD
$shell = new COM("WScript.Shell");
//$shell->Stop-Process -processname ContaCam
$shell->run("\"C:\\Program Files (x86)\\ContaCam\\ContaCam.exe\"", 1, false);
//$shell = new COM("WScript.Shell");
//$shell->run("\"C:\\Program Files (x86)\\Google\\Picasa3\\Picasa3.exe\"", 0, false);
|
|
runVCL
|
safe_exec("c:\_majordomo\apps\vlc\vlc.exe");
|
|
sayweather
|
Говорит про облачность, текущую температуру, влажность, давление и скорость ветра
callMethod('yw_mycity.sayweather',$params);
|
|
sendMessageForTonya
|
include_once(DIR_MODULES . 'idevices/idevices.class.php');
$idevices_module = new idevices();
$idevices_module->sendMessage("iPhone (Tonya)", "Я тебя люблю", 1);
|
|
setMemo
|
Для шаблона Напомни разбор времени и установки напоминания
Для шаблона напомни вызываем скрипт, куда передаем $original(ну, или хвост от шаблона без напомни)
Понимает такие фразы и устанавливает напоминания:
'в 7:30 вечера в следующий вторник проверить кое-что';
'проверить кое-что через четверть часа';
'вечером в выходные проверить кое-что';
'проверить в полдень послезавтра кое-что';
//для шаблона Напомни
if(!$params['txt']) return;
$cmd = $params['txt'];
//https://regexr.com/
//$cmd = 'в 6:30 дня в следующий вторник проверить кое-что';
//$cmd = 'проверить кое-что через четверть часа';
//$cmd = 'вечером в выходные проверить кое-что';
//$cmd = 'проверить кое-что в полдень послезавтра';
//$cmd = 'через два с половиной часа сделать кое-что';
//$cmd = 'сделать кое-что через два с половиной часа';
//$cmd = 'сегодня сделать кое-что';
debmes('setMemo - '.$cmd);
$cmd = mb_strtolower($cmd);
$newtime = 0;
$newdate = 0;
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd); //уберём лишние пробелы
$chislo = array('один'=> '1','одну'=> '1','одни'=> '1','полтора' => '1.5','полторы' =>'1.5','два'=> '2','две'=> '2','двое'=> '2','три'=> '3','трое'=> '3','четыре'=> '4','четверо'=> '4','пять'=> '5','шесть'=> '6','семь'=> '7','восемь'=> '8','девять'=> '9');
$tim1 = array('минуту'=>'m','минуты'=>'m','минут'=>'m','часов'=>'H','часа'=>'H','час'=>'H','день'=>'D','дня'=>'D','дней'=>'D','сутки'=>'D','суток'=>'D');
$MonthNames = array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");
//через?
if(preg_match('/через /isu', $cmd1)){
if(preg_match('/через полчаса/isu', $cmd1, $m)){
$cmd1 = str_replace('через полчаса','через 30 минут',$cmd1); //через полчаса -> через 30 минут
}
if(preg_match('/через четверть часа/isu', $cmd1, $m)){
$cmd1 = str_replace('через четверть часа','через 15 минут',$cmd1); //через полчаса -> через 30 минут
}
if(preg_match('/через (час|минуту|день|сутки)/isu', $cmd1, $m)){
$cmd1 = str_replace('через','через 1',$cmd1); //через час -> через 1 час
}
$half = 0;
if(preg_match('/(часов|часа|час) с половиной /isu', $cmd1, $m)){
$half = 0.5;
$cmd1 = str_replace('с половиной','',$cmd1);
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
}
if(preg_match('/с половиной (часов|часа|час)/isu',$cmd1,$m)){
$half = 0.5;
$cmd1 = str_replace('с половиной','',$cmd1);
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
}
if(preg_match('/через (.+) (часов|часа|час|минуты|минуту|минут|день|дня|дней|сутки|суток)/isu', $cmd1, $m)){
//print_r($m);
$cmd1 = str_replace($m[0],'',$cmd1);
foreach($chislo as $key => $value) {$m[1] = str_replace($key,$value,$m[1]);} //'один'=> '1'
foreach($tim1 as $key => $value) {$m[2] = str_replace($key,$value,$m[2]);} //'минуту'=>'m','минуты'=>'m'...
//вычислим новое время
$delta = (float)$m[1];
if($delta<=0){
echo('wrong interval '.$delta);
say('Непонятно! Попробуйте задать время по другому',2);
return;
}
switch ($m[2]){
case 'm':
$newtime = time() + $delta*60;//minutes
break;
case 'H':
$newtime = time() + $delta*60*60 + $half*60*60;//hours
break;
case 'D':
$newtime = time() + $delta*60*60*24;//days ToDo - add to calendar?
break;
default:
say('Непонятно! Попробуйте переформулировать задание',2);
return;
}
AddScheduledJob($cmd1,"playSound('r2d2',1); say('Вы просили напомнить ".$cmd1."',5);",$newtime, 60);
$nmes=date( "n" , $newtime)-1;
$nmonth=$MonthNames[$nmes];
debmes("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth);
say("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth,2);
return;
}
}
////////////////////////////////////////////////////////////////////
$newtime = time();
if(preg_match('/(сегодня|завтра|послезавтра)/isu', $cmd1, $m)){
switch($m[0]){
case 'завтра':
$newtime = strtotime("+1 day");
break;
case 'послезавтра':
$newtime = strtotime("+2 days");
break;
case 'сегодня':
$newtime = strtotime("+2 minute");
}
$cmd1 = str_replace($m[0],'',$cmd1);
}
if(preg_match('/в (следующий|следующую|следующее|следующие) /isu', $cmd1, $m)){
$cmd1 = str_replace($m[1],'',$cmd1);
}
if(preg_match('/в (этот|эту|это|эти) /isu', $cmd1, $m)){
$cmd1 = str_replace($m[1],'',$cmd1);
}
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
if(preg_match('/(в|во) (понедельник|вторник|среду|четверг|пятницу|субботу|воскресенье|выходные) /isu', $cmd1, $m)){
switch($m[2]){
case 'понедельник':
$newtime = strtotime("next Monday");
break;
case 'вторник':
$newtime = strtotime("next Tuesday");
break;
case 'среду':
$newtime = strtotime("next Wednesday");
break;
case 'четверг':
$newtime = strtotime("next Thursday");
break;
case 'пятницу':
$newtime = strtotime("next Friday");
break;
case 'субботу':
$newtime = strtotime("next Saturday");
break;
case 'воскресенье':
$newtime = strtotime("next Sunday");
break;
case 'выходные':
$newtime = strtotime("next Saturday");
break;
}
$cmd1 = str_replace($m[0],'',$cmd1);
}
//проверим время
if(preg_match('/в (полдень|полночь)/isu', $cmd1)){
$cmd1 = str_replace('в полдень','в 12:00',$cmd1);
$cmd1 = str_replace('в полночь','в 23:59',$cmd1);
}
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
if(preg_match('/(утром|вечером|днём|днем|ночью)/isu', $cmd1, $m)){ //напомни утром
$cmd2 = $m[0]; //для удаления
if(!preg_match('/в (\d+):(\d+)/isu', $cmd1)){ //
switch($cmd2){
case 'утром':
$newtimes = 'в 8:00';
break;
case 'вечером':
$newtimes = 'в 20:00';
break;
case 'днём':
$newtimes = 'в 13:00';
break;
case 'днем':
$newtimes = 'в 13:00';
break;
case 'ночью':
$newtimes = 'в 23:00';
break;
}
}
$cmd1 = str_replace($cmd2,$newtimes,$cmd1);
}
if(preg_match('/в (\d+):(\d+)/isu', $cmd1, $m)){
$hour = $m[1];
$minute = $m[2];
$cmd2 = $m[0]; //для удаления
if(preg_match('/в (\d+):(\d+) (ночи|дня|утра|вечера)/isu', $cmd1, $m)){
switch ($m[3]){
case 'дня':
if((int)$hour<12){$hour = $hour +12;} // в 3 часа дня = в 15:00
break;
case 'вечера':
if((int)$hour<12){$hour = $hour +12;} // в 6 часов вечера = в 18:00
break;
}
$cmd1 = str_replace($m[0],'',$cmd1);
}
$cmd1 = str_replace($cmd2,'',$cmd1);
$newtime = mktime( (int)$hour,(int)$minute,0,date("n",$newtime),date("j",$newtime), date("Y",$newtime));
if($newtime<time()){$newtime = strtotime(date('Y-m-d H:i',$newtime)."+ 1 days");}
}
AddScheduledJob($cmd1,"playSound('opoveshenie.mp3',1);sleep(2); say('Вы просили напомнить - ".$cmd1."',5);",$newtime, 60);
$nmes = date( "n" , $newtime)-1;
$nmonth = $MonthNames[$nmes];
debmes("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth);
say("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth,2);
//return;
|
|
Uptime
|
Определение времени работы
$s = getGlobal('ThisComputer.uptime');
$d = floor($s/86400 );
$h = floor(($s % 86400)/3600 );
$m = floor(($s % 3600)/60 );
$uptime = "$d дней. $h часов. $m минут.";
echo "Время работы: $uptime";
sg('ThisComputer.System_uptime',$uptime);
sayReply("Время работы: $uptime",2);
|
|
gateColorAction
|
управления подсветкой по режимам для хаба Gateway
if (isset($params['color'])) {
//sg('Rgb01.color', $params['color']);
cm('Rgb01.setColor', array('color'=> $params['color'])); //Устанавливаем цвет по требованию
setTimeout('xiColorReset', 'runScript(\'gateColorAction\');', 5); //Устанавливаем вызов скрипта через 5 сек.
return;
} elseif (gg('NobodyHomeMode.active') == 1) { //Никого нет дома
$color = '000000';
//sg('Rgb01.color', $color);
cm('Rgb01.setColor', array('color'=> $color)); //Выключаем подсветку
} elseif (gg('NobodyHomeMode.active') == 2) { //Все спят
$color = 'ff8c00';
//sg('Rgb01.color', $color);
cm('Rgb01.setColor', array('color'=> $color));
if (gg('Rgb01.brightness') != 25) {
sg('Rgb01.brightness', 25); //Яркость
}
} else {
$color = '00ff00';
$redFound = 0;
$systemColor = gg('System.stateColor');
if ($systemColor == 'red') {
$color = 'ff0000';
$redFound = 1;
}
}
if (!$redFound) {
$states = array('System', 'Communication');
foreach($states as $state) {
if (gg($state . '.stateColor') == 'yellow') {
$color = 'ffaa00';
}
}
//sg('Rgb01.color', $color);
cm('Rgb01.setColor', array('color'=> $color)); //Устанавливаем цвет в соответствии с условиями выше
if (gg('Rgb01.brightness') != 50) {
sg('Rgb01.brightness', 50); //Яркость
}
}
setTimeout('xiColorReset', 'runScript(\'gateColorAction\');', 60); //Устанавливаем вызов скрипта через 60 сек.
|
|
AlarmXiaomiGateway
|
/**
* Сценарий для Majordomo
* Световой индикатор для режима "Внимание" для Xiaomi Gateway
* @author Alex Sokolov <admin@gelezako.com>
* @copyright Alex Sokolov http://blog.gelezako.com (c)
**/
sg("XiRgb06.brightness","0");
sg("XiRgb06.color","");
sg("XiRgb06.color","ff000e");
sleep(3);
for($j = 1; $j <= 3; $j++){
for ($i = 2; ; $i=$i+5) {
sg("XiRgb06.brightness",$i);
usleep(50000);
if ($i >= 100)break;
}
for ($i = 100; ; $i=$i-5) {
sg("XiRgb06.brightness",$i);
usleep(50000);
if ($i <= 0)break;
}
}
|
|
AlarmXiaomiYeelightLamp
|
// Лампочка
sg("color_0x00000000034853c5.rgb","");
sg("color_0x00000000034853c5.bright","1");
sg("color_0x00000000034853c5.status","1");
sg("color_0x00000000034853c5.rgb","ff000e");
sg("color_0x00000000034853c5.status","1");
for($j = 1; $j <= 3; $j++){
for ($i = 0; ; $i=$i+10) {
sg("color_0x00000000034853c5.bright",$i);
sg("color_0x00000000034853c5.status","1");
usleep(50000);
if ($i >= 100)break;
}
sleep(1);
for ($i = 100; ; $i=$i-10) {
sg("color_0x00000000034853c5.bright",$i);
sg("color_0x00000000034853c5.status","1");
usleep(50000);
if ($i <= 0)break;
}
sleep(1);
}
usleep(50000);
sg("color_0x00000000034853c5.status","0");
sleep(5);
usleep(50000);
sg("color_0x00000000034853c5.status","0");
|
|
AlarmXiaomiYeelightStripe
|
// Лента
sg("stripe_0x0000000003618b90.rgb","");
sg("stripe_0x0000000003618b90.bright","1");
sg("stripe_0x0000000003618b90.status","1");
sg("stripe_0x0000000003618b90.rgb","ff000e");
sg("stripe_0x0000000003618b90.status","1");
//sleep(4);
for($j = 1; $j <= 3; $j++){
for ($i = 1; ; $i=$i+10) {
sg("stripe_0x0000000003618b90.bright",$i);
sg("stripe_0x0000000003618b90.status","1");
usleep(50000);
if ($i >= 100)break;
}
sleep(1);
for ($i = 100; ; $i=$i-10) {
sg("stripe_0x0000000003618b90.bright",$i);
sg("stripe_0x0000000003618b90.status","1");
usleep(50000);
if ($i <= 0)break;
}
sleep(1);
}
usleep(50000);
sg("stripe_0x0000000003618b90.status","0");
sleep(5);
sg("stripe_0x0000000003618b90.status","0");
|
|
ContaCamRun
|
запускает программу ContaCam, работа с вебкамерой. этот скрипт запихнул через в метод режима охраны
callMethod("Relay10.turnOn");
say("Запускаю процедуру включения камеры",2);
setTimeOut('mytimer','safe_exec("C:\_majordomo\apps\autoitv3\AutoIt3.exe ContaCamRun.au3");',60);
setTimeOut('mytimer1','say("Камера включена",2);',60);
//callMethod('Relay10.turnOn',array("value"=>1));
//safe_exec("C:\_majordomo\apps\autoitv3\AutoIt3.exe ContaCamRun.au3");
//say('Запускаю процедуру включения камеры',2);
//safe_exec("C:\Program Files (x86)\ContaCam\ContaCam.exe "); // так тоже можно запустить
//say('Камера включена',2);
//скрипт contacam.au3 должен лежать в C:\_majordomo\htdocs , иначе пишет что не видит файла скрипта...
// второй вариант просто запускать скопилированный exe - пример: safe_exec("C:\_majordomo\apps\autoitv3\WiFi_audio_START.exe");
// для компиляции используется SciTE - есть в папке с программой AutoIt3
|
|
ContaCamStop
|
выключает программу ContaCam, работа с вебкамерой. этот скрипт запихнул в метод режима охраны
say("Запускаю процедуру выключения камеры",2);
safe_exec("C:\_majordomo\apps\autoitv3\AutoIt3.exe ContaCamStop.au3");
callMethod("Relay10.turnOff");
setTimeOut('mytimer3','say("камера выключена",2);',20);
//say('Камера выключена',2);
//скрипт contacam.au3 должен лежать в C:\_majordomo\htdocs , иначе пишет что не видит файла скрипта...
// второй вариант просто запускать скомпилированный exe - пример: safe_exec("C:\_majordomo\app\autoitv3\WiFi_audio_START.exe");
// для компиляции используется SciTE - есть в папке с программой AutoIt3
|
|
disco
|
/**
* Сценарий для Majordomo
* Xiaomi gateway disco mode
* @author Alex Sokolov <admin@gelezako.com>
* @copyright Alex Sokolov http://blog.gelezako.com (c)
* @version 0.1
**/
sg("XiRgb06.brightness","0");
for($j = 1; $j <= 3; $j++){
sg("XiRgb06.color","ff000e");
usleep(1000000);
sg("XiRgb06.color","fffff3");
usleep(1000000);
sg("XiRgb06.color","ffff2d");
usleep(1000000);
sg("XiRgb06.color","ff00f3");
usleep(1000000);
sg("XiRgb06.color","00ff25");
usleep(1000000);
sg("XiRgb06.color","0010ff");
}
sg("XiRgb06.brightness","0");
|
|
disco2
|
/**
* Сценарий для Majordomo
* Xiaomi gateway disco mode
* @author Alex Sokolov <admin@gelezako.com>
* @copyright Alex Sokolov http://blog.gelezako.com (c)
* @version 0.1
**/
sg("Gateway.brightness","0");
for($j = 1; $j <= 3; $j++){
sg("Gateway.rgb","ff000e");
usleep(1000000);
sg("Gateway.rgb","fffff3");
usleep(1000000);
sg("Gateway.rgb","ffff2d");
usleep(1000000);
sg("Gateway.rgb","ff00f3");
usleep(1000000);
sg("Gateway.rgb","00ff25");
usleep(1000000);
sg("Gateway.rgb","0010ff");
}
sg("Gateway.brightness","0");
|
|
disco_Lamp
|
sg("color_0x00000000034853c5.status","0");
sleep(1);
sg("color_0x00000000034853c5.rgb","");
sleep(1);
for($j = 1; $j <= 3; $j++){
sg("color_0x00000000034853c5.rgb","ff000e");
sg("color_0x00000000034853c5.status","1");
usleep(1000000);
sg("color_0x00000000034853c5.rgb","fffff3");
sg("color_0x00000000034853c5.status","1");
usleep(1000000);
sg("color_0x00000000034853c5.rgb","ffff2d");
sg("color_0x00000000034853c5.status","1");
usleep(1000000);
sg("color_0x00000000034853c5.rgb","ff00f3");
sg("color_0x00000000034853c5.status","1");
usleep(1000000);
sg("color_0x00000000034853c5.rgb","00ff25");
sg("color_0x00000000034853c5.status","1");
usleep(1000000);
sg("color_0x00000000034853c5.rgb","0010ff");
sg("color_0x00000000034853c5.status","1");
}
sg("color_0x00000000034853c5.status","0");
|
|
disco_Stripe
|
sg("stripe_0x0000000003618b90.status","0");
sleep(1);
sg("stripe_0x0000000003618b90.rgb","");
sleep(1);
for($j = 1; $j <= 3; $j++){
sg("stripe_0x0000000003618b90.rgb","ff000e");
sg("stripe_0x0000000003618b90.status","1");
usleep(1000000);
sg("stripe_0x0000000003618b90.rgb","fffff3");
sg("stripe_0x0000000003618b90.status","1");
usleep(1000000);
sg("stripe_0x0000000003618b90.rgb","ffff2d");
sg("stripe_0x0000000003618b90.status","1");
usleep(1000000);
sg("stripe_0x0000000003618b90.rgb","ff00f3");
sg("stripe_0x0000000003618b90.status","1");
usleep(1000000);
sg("stripe_0x0000000003618b90.rgb","00ff25");
sg("stripe_0x0000000003618b90.status","1");
usleep(1000000);
sg("stripe_0x0000000003618b90.rgb","0010ff");
sg("stripe_0x0000000003618b90.status","1");
}
sg("stripe_0x0000000003618b90.status","0");
|
|
LampWhite
|
sg("color_0x00000000034853c51.rgb","");
sg("color_0x00000000034853c51.bright","100");
sg("color_0x00000000034853c51.status","1");
sg("color_0x00000000034853c51.rgb","ffffff");
sg("color_0x00000000034853c51.status","1");
|
|
manageConnectService
|
Включение/выключение сервиса синхронизации через облако
include_once(DIR_MODULES.'connect/connect.class.php');
$cn=new connect();
$cn->getConfig();
if ($params['start']) {
$cn->config['CONNECT_SYNC']='1';
$cn->saveConfig();
}
if ($params['stop']) {
$cn->config['CONNECT_SYNC']='0';
$cn->saveConfig();
}
echo $cn->config['CONNECT_SYNC'];
|
|
manageWebCamMotion
|
Включение/выключение детектора движений на камере
if ($params['start']) {
DebMes("Starting web-cam motion detection");
getURL('http://localhost:8080/0/detection/start',0);
}
if ($params['stop']) {
DebMes("Stopping web-cam motion detection");
getURL('http://localhost:8080/0/detection/pause',0);
}
|
|
manageWebCamService
|
Включение/выключение вебкамеры
if ($params['start']) {
safe_exec('cp /etc/motion/motion_enabled /etc/default/motion');
safe_exec('service motion start');
}
if ($params['stop']) {
safe_exec('cp /etc/motion/motion_disabled /etc/default/motion');
safe_exec('service motion stop');
}
|
|
RingtoneGatewayInCar
|
sg('Shluz.ringtone','12,30');
sleep(8);
sg('Shluz.ringtone','stop');
sayReply('Ваша машина въехала во двор! С вероятностью 99 процентов в ней ваш муж!', 2);
//Вообще доступны следующие рингтоны:
//* сирена [номера 0-8] 7опасность оповещен 2) сирена для охраны 1 скорая
//* дверной звонок [10-13]
//* будильники [20-29]
//* пользовательские рингтоны (загруженные через приложение) начинаются с номера 10001
//Для того, чтобы остановить проигрываемый рингтон надо послать пустую строку или stop:
//XiRgb06
//Кроме того, есть возможность указать громкость, с которой проиграется рингтон (от 0 до 99):
//sg('rgb01.ringtone','12,50'); // проиграть рингтон 12 с громкостью 50
|
|
RingtoneGatewayOutCar
|
sg('Shluz.ringtone','12,30');
sleep(8);
sg('Shluz.ringtone','stop');
sayReply('Ваша машина уехала со двора! Возможно с ней ваш муж, но лучше проверить, может муж спит рядом!', 2);
//Вообще доступны следующие рингтоны:
//* сирена [номера 0-8] 7опасность оповещен 2) сирена для охраны 1 скорая
//* дверной звонок [10-13]
//* будильники [20-29]
//* пользовательские рингтоны (загруженные через приложение) начинаются с номера 10001
//Для того, чтобы остановить проигрываемый рингтон надо послать пустую строку или stop:
//XiRgb06
//Кроме того, есть возможность указать громкость, с которой проиграется рингтон (от 0 до 99):
//sg('rgb01.ringtone','12,50'); // проиграть рингтон 12 с громкостью 50
|
|
ringtone_oxrana
|
сработала охрана
sg('Shluz.ringtone','2,50');
setGlobal('Rgbgt06.brightness', '100');
sg('Rgbgt06.color','#ff0000');
sleep(2);
setGlobal('Rgbgt06.brightness', '5');
sleep(1);
setGlobal('Rgbgt06.brightness', '100');
sleep(1);
setGlobal('Rgbgt06.brightness', '5');
sleep(1);
setGlobal('Rgbgt06.brightness', '100');
sleep(1);
setGlobal('Rgbgt06.brightness', '5');
sleep(1);
setGlobal('Rgbgt06.brightness', '80');
sleep(20);
sg('Shluz.ringtone','stop');
//Вообще доступны следующие рингтоны:
//* сирена [номера 0-8] 7опасность оповещен 2) сирена для охраны 1 скорая
//* дверной звонок [10-13]
//* будильники [20-29]
//* пользовательские рингтоны (загруженные через приложение) начинаются с номера 10001
//Для того, чтобы остановить проигрываемый рингтон надо послать пустую строку или stop:
//Кроме того, есть возможность указать громкость, с которой проиграется рингтон (от 0 до 99):
|
|
RunSecurityArmedMode
|
Скрипт для голосового запуска режима охраны (пока только включение камеры (ContaCam)
sayReply('Понятно. Все свалили с квартиры. Через минуту будет включен режим охраны', 2);
setTimeOut('mytimer5',"callMethod('SecurityArmedMode.activate');",60);
//callMethod('SecurityArmedMode.activate');
|
|
StopSecurityArmedMode
|
Голосовое выключение режима охраны
callMethod('SecurityArmedMode.deactivate');
sayReply('Ну наконец-то хоть кто-то появился дома. Добрый вечер!', 2);
sayReply('Выключаю режим охраны.', 2);
|
|
Timer
|
правильное использование пауз в скриптах. Пример:
setTimeOut('mytimer','say("Привет!");',10);
//clearTimeOut('mytimer');//вручную отменить запланированное действие можно так
|
|
CalcSunSetRise
|
Вычисление восхода и захода солнца
$sun_info = date_sun_info(time(), 60.034380, 30.450278);
foreach ($sun_info as $key => $val) {
if ($key == 'sunrise') {
$sunrise = $val;
echo 'Восход: '.date("H:i", $sunrise).'<br>';
setGlobal('ThisComputer.SunRiseTime',date("H:i", $sunrise));
}
if ($key == 'sunset') {
$sunset = $val;
$day_length = $sunset - $sunrise;
echo 'Заход: '.date("H:i", $sunset).'<br>';
echo 'Долгота дня: '.gmdate("H:i", $day_length).'<br>';
setGlobal('ThisComputer.SunSetTime',date("H:i", $sunset));
setGlobal('ThisComputer.LongTag',gmdate("H:i", $day_length));
}
if ($key == 'transit') {
echo 'В зените: '.date("H:i", $val).'<br>';
setGlobal('ThisComputer.TransitTime',date("H:i", $val));
}
if ($key == 'civil_twilight_begin') {
echo 'Начало утренних сумерек: '.date("H:i:s", $val).'<br>';
setGlobal('ThisComputer.Chicivil_beginTime',date("H:i", $val));
}
if ($key == 'civil_twilight_end') {
echo 'Конец вечерних сумерек: '.date("H:i:s", $val).'<br>';
setGlobal('ThisComputer.civil_endTime',date("H:i", $val));
}
}
|
|
CalendarTalkAlisa
|
Озвучка Алисой событий по календарю
if (file_exists('./modules/app_calendar/app_calendar.class.php'))
{
Define('TEMP_APP_CALENDAR_SOONLIMIT', '5'); //лимит дней которые проговаривает
include_once('./modules/app_calendar/app_calendar.class.php');
$calendar = new app_calendar();
$calendar -> usual($out);
$events = $out['EVENTS_TODAY'];
$say_phrase = '';
if ($events)
{
$tasks = '';
$cals = '';
$i = 0;
$j = 0;
foreach($events as $ev)
{
if ($ev['IS_TASK'] == 1 and $ev['IS_DONE'] == 0)
{
$i++;
$tasks.= $i.'. '.$ev['TITLE'].'. ';
} else {
$j++;
$cals.= $j.'. '.$ev['TITLE'].'. ';
}
}
if ($i != 0) $say_phrase.= "У вас на сегодня запланированы задачи, ".$tasks;
if ($j != 0) $say_phrase.= "Сегодняшние события, ".$cals;
}
$events = $out['CALENDAR_CATEGORIES'];
$i = 0;
$tasks = '';
if ($events)
{
foreach($events as $category)
{
$events_past = $category['EVENTS_PAST'];
if ($events_past)
{
$tasks.= 'из категории: '.$category['TITLE'].'. '; //Если нужно перед пропущенными задачами указывать категорию
foreach($events_past as $ev)
{
$i++;
$tasks.= $i.'. '.$ev['TITLE'].'. ';
}
}
}
if ($i != 0) $say_phrase.= " Напоминаю пропущенные задачи, ".$tasks;
}
$events = $out['CALENDAR_CATEGORIES'];
$tasks = '';
$i = 0;
if ($events)
{
foreach($events as $category)
{
$events_soon = $category['EVENTS_SOON'];
if ($events_soon)
{
//$say_phrase.= ' в категории: '.$category['TITLE'].'. ';
foreach($events_soon as $ev)
{
$i++;
$tasks.= " ".$ev['DAYS']." ".$ev['TITLE'].". ";
}
}
}
if ($i != 0) $say_phrase.= "Напоминаю что".$tasks;
}
if ($say_phrase)
{
//echo $say_phrase;
say($say_phrase,3);
}
}
|
|
ExchangeRates
|
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));
if (!$file){
DebMes('CBR error');
exit;
}
$xml = $file->xpath("//Valute[@ID='R01235']");
$valute = strval($xml[0]->Value);
$val = round(str_replace(",",".",$valute),2);
sg('usd.value',$val);
$xml = $file->xpath("//Valute[@ID='R01239']");
$valute = strval($xml[0]->Value);
$val = round(str_replace(",",".",$valute),2);
sg('eur.value',$val);
|
|
Hourly
|
Выполняется каждый час
|
|
joke
|
include_once(DIR_MODULES . 'sayjokes/sayjokes.class.php');
$sj = new sayjokes();
$sj->getjoke(11);
|
|
motionDetected
|
Сработал детектор движения на веб-камере
DebMes("Motion detected: ".serialize($params));
callMethod('MotionSensorCam.motionDetected');
setTimeOut('motionDetectedTimer','runScript("camImagesProcess");',10);
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
setTimeOut('stopWebCamDetection', " runScript('manageWebCamMotion', array('stop'=>'1'));", (int)('60'));
}
|
|
NobodyHome
|
Срабатывает, когда никого дома нет
say('Включаю режим экономии', 2);
callMethod('EconomMode'.'.'.'activate');
//if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
//runScript('manageWebCamMotion', array('start'=>'1'));
//}
|
|
OnlineUsers
|
$users = "";
$objects=getObjectsByClass("Users");
foreach($objects as $obj) {
$host = getGlobal($obj['TITLE'].".deviceip"); //прописать ИП телефона для всех пользователей
$fullname = getGlobal($obj['TITLE'].".fullName");
$online=ping( $host );
if ($online){
if ($users != ""){ $users .= ", "; }
$users .= $fullname;
sg($obj['TITLE'].".atHome","1");
}
else sg($obj['TITLE'].".atHome","0");
}
|
|
products
|
|
|
sayTodayAgenda
|
if (file_exists('./modules/app_calendar/app_calendar.class.php'))
{
Define('TEMP_APP_CALENDAR_SOONLIMIT', '5'); //лимит дней которые проговаривает
include_once('./modules/app_calendar/app_calendar.class.php');
$calendar = new app_calendar();
$calendar -> usual($out);
$events = $out['EVENTS_TODAY'];
$say_phrase = '';
if ($events)
{
$tasks = '';
$cals = '';
$i = 0;
$j = 0;
foreach($events as $ev)
{
if ($ev['IS_TASK'] == 1 and $ev['IS_DONE'] == 0)
{
$i++;
$tasks.= $i.'. '.$ev['TITLE'].'. ';
} else {
$j++;
$cals.= $j.'. '.$ev['TITLE'].'. ';
}
}
if ($i != 0) $say_phrase.= "У вас на сегодня запланированы задачи, ".$tasks;
if ($j != 0) $say_phrase.= "Сегодняшние события, ".$cals;
}
$events = $out['CALENDAR_CATEGORIES'];
$i = 0;
$tasks = '';
if ($events)
{
foreach($events as $category)
{
$events_past = $category['EVENTS_PAST'];
if ($events_past)
{
$tasks.= 'из категории: '.$category['TITLE'].'. '; //Если нужно перед пропущенными задачами указывать категорию
foreach($events_past as $ev)
{
$i++;
$tasks.= $i.'. '.$ev['TITLE'].'. ';
}
}
}
if ($i != 0) $say_phrase.= " Напоминаю пропущенные задачи, ".$tasks;
}
$events = $out['CALENDAR_CATEGORIES'];
$tasks = '';
$i = 0;
if ($events)
{
foreach($events as $category)
{
$events_soon = $category['EVENTS_SOON'];
if ($events_soon)
{
//$say_phrase.= ' в категории: '.$category['TITLE'].'. ';
foreach($events_soon as $ev)
{
$i++;
$tasks.= " через ".$ev['AGE']." ".$ev['DAYS']." ".$ev['TITLE'].". ";
}
}
}
if ($i != 0) $say_phrase.= "Напоминаю что".$tasks;
}
if ($say_phrase)
{
//echo $say_phrase;
say($say_phrase,3);
}
}
|
|
send_mes
|
Универсальный скрипт - отправляет сообщения: SMS, Email, iPhone, Телеграмм
runScript('send_mes', array('to'=>$хххх,'subj'=>$yyyy,'msg'=>$zzzz,'what'=>$qqqq));
/*
* Сценарий 'send_mes' для MajorDoMo
* автор: Владимир Попов, на форуме - Vovix
* дата последнего изменения: 15.02.2018
* runScript('send_mes', array('to'=>$хххх,'subj'=>$yyyy,'msg'=>$zzzz,'what'=>$qqqq))
* возможные значения what:
* для СМС - 'SMS','sms','СМС','смс'
* для E-mail - 'Email','E-mail','еmail','e-mail','письмо'
* для iPhone - 'iPhone','Iphone','IPhone','iphone','телефон'
* для telegram - 'Telegram','telegram','Телеграм','Телеграмм','телеграм','телеграмм'
*/
// кому отправить, просто имя или адрес e-mail включающий знак "@" (при пустом = "admin")
$user_to = ($params['to'] == '') ? "admin" : $params['to'];
// тема сообщения (при пустом = "Alice! Smart Home system")
$subject = ($params['subj'] == '') ? "Alice! Smart Home system" : $params['subj'];
// текст сообщения (при пустом = "проверка связи")
$msg = ($params['msg'] == '') ? "проверка связи" : $params['msg'];
// что будем отправлять (через что): SMS, Email, iPhone, Telegram
$what = ($params['what'] == '') ? "iPhone" : $params['what'];
// константы для e-mail отправок
$from = "admin@mdm.vovix";
$sms2email = '';
// присваеваем первоначальные НЕИЗВЕСТНЫЕ значения, на всякий случай
$fullName = 'unknown';
$user = 'unknown';
$gender = 'unknown';
$TelegramID = 'unknown';
// вариант №1
// проверим встречается ли символ '@' в кому отправить, т.е. указан ли конкретный e-mail??
// если не встретилось или это первый символ, то будем определять среди своих пользователей
// $podstr1=strpos($user_to, '@');
// if (($podstr1===false)||($podstr1=='0')) {
// вариант №2
// проверим НЕ указан ли именно e-mail
if (!preg_match("/^[a-zA-Z0-9\-\._]+@[-a-zA-Z0-9\-]+\.[-a-zA-Z0-9\-\.]+$/i", $user_to)) {
// определяем массив значений альтернативных имен
$altNameArray = array();
// переберем всех пользователей
$objects = getObjectsByClass("Users");
foreach($objects as $obj) {
// проверим, может это главное имя и перебирать альтернативы тогда не надо?
if (gg($obj['TITLE'].".fullName") == $user_to) {
$fullName = gg($obj['TITLE'].'.fullName');
$sms2email = gg($obj['TITLE'].'.sms2email');
$user = $obj['TITLE'];
$TelegramID = gg($obj['TITLE'].'.TelegramID');
} else {
// присвоим
$altName = gg($obj['TITLE'].".altName");
// имена разделены запятой
$altNameArray = explode(",",$altName);
$len=count($altNameArray);
// в цикле проверяем вхождение альтернативных имён
for($j = 0; $j < $len; $j++) {
$podstr2 = strpos($user_to, $altNameArray[$j]);
if ($podstr2 === false) {
// тут нет таких
} else {
// вот нашли
$fullName = gg($obj['TITLE'].'.fullName');
$sms2email = gg($obj['TITLE'].'.sms2email');
$user = $obj['TITLE'];
$TelegramID = gg($obj['TITLE'].'.TelegramID');
}
}
}
}
}
// проверим ЧТО будем отправлять
switch ($what):
// SMS
case 'SMS':
case 'sms':
case 'СМС':
case 'смс':
if (($user != 'unknown') && (gg($user.'.sms2email') != '')) {
//say ("Отправляю SMS сообщение. Кому: ".$user_to.". Текст сообщения: ".$msg.". Получатель мне известен как: ".$fullName, 1);
say ("Отправляю SMS сообщение. Получатель мне известен как ".$fullName, 1);
$message = iconv("UTF-8", "WINDOWS-1251", $msg);
$subject = iconv("UTF-8", "WINDOWS-1251", $subject);
debmes('### Send Mail -> from:'.$from.' # sms2email:'.$sms2email.' # subject:'.$subject.' # message:'.$message);
SendMail($from, $sms2email, $subject, $message);
} else if (($user != 'unknown') && (gg($user.'.sms2email') == '')) {
$fullName = gg($user.'.fullName');
$gender = gg($user.'.gender');
$ending1 = ($gender != 'ж') ? 'ен' : 'на';
$pronoun1 = ($gender != 'ж') ? 'его' : 'её';
say("Отправить СМС не получилось!", 1);
say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." электронном адресе для передачи СМС.",1);
} else {
say ("Увы, отправить СМС не получиться, такого адресата: ".$user_to." я ,видимо, не знаю.", 1);
}
break;
// Email
case 'Email':
case 'E-mail':
case 'еmail':
case 'e-mail':
case 'письмо':
if (($user != 'unknown') && (gg($user.'.Email') != '')) {
// say ("Отправляю e-mail. Кому: ".$user_to.". Текст письма: ".$msg.". Получатель мне известен как: ".$fullName, 1);
say ("Отправляю электронное письмо. Получатель мне известен как ".$fullName, 1);
$message = iconv("UTF-8", "WINDOWS-1251", $msg);
$subject = iconv("UTF-8", "WINDOWS-1251", $subject);
debmes('### Send Mail -> from:'.$from.' # e-mail:'.gg($user.'.Email').' # subject:'.$subject.' # message:'.$message);
SendMail($from, gg($user.'.Email'), $subject, $message);
} elseif (($user != 'unknown') && (gg($user.'.Email') == '')) {
$fullName = gg($user.'.fullName');
$gender = gg($user.'.gender');
$ending1 = ($gender != 'ж') ? 'ен' : 'на';
$pronoun1 = ($gender != 'ж') ? 'его' : 'её';
say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." электронном адресе.",1);
} else {
//say ("Я попытаюсь отправляю e-mail на адрес: ".$user_to.". Текст письма: ".$msg.". Но с получателем я видимо не знакома и не уверена в представленом вами e-mail адресе.", 1);
say ("Я попытаюсь отправляю e-mail на адрес: ".$user_to.". Но с получателем я видимо не знакома и не уверена в представленом вами e-mail адресе.", 1);
$message = iconv("UTF-8", "WINDOWS-1251", $msg);
$subject = iconv("UTF-8", "WINDOWS-1251", $subject);
debmes('### Send Mail -> from:'.$from.' # e-mail:'.$user_to.' # subject:'.$subject.' # message:'.$message);
SendMail($from, $user_to, $subject, $message);
}
break;
// iPhone
case 'iPhone':
case 'Iphone':
case 'IPhone':
case 'iphone':
case 'телефон':
if (($user != 'unknown') && (gg($user.'.AppleID') != '')) {
$fullName = gg($user.'.fullName');
$AppleID = gg($user.'.AppleID');
$ApplePass = dsCryptV(gg($user.'.ApplePass'),true);
$gender = gg($user.'.gender');
$AppleDevNum = (gg($user.'.AppleDevNum')=='') ? 0 : gg($user.'.AppleDevNum');
$subject = $msg; // и тема и сообщение пусть будет одно и тоже
//soundToMyiPhone($AppleID, $ApplePass, $subject, $AppleDevNum);
debmes('### messageToMyiPhone -> AppleID:'.$AppleID.' # message:'.$msg.' # subject:'.$subject.' # AppleDevNum:'.$AppleDevNum);
messageToMyiPhone($AppleID, $ApplePass, $msg, $subject, 1, $AppleDevNum);
say ("На iPhone, пользователя: ".$fullName.", отправлен сигнал и текст на экран.", 1);
} elseif (($user != 'unknown') && (gg($user.'.AppleID') == '')) {
$fullName = gg($user.'.fullName');
$gender = gg($user.'.gender');
$ending1 = ($gender != 'ж') ? 'ен' : 'на';
$pronoun1=($gender != 'ж') ? 'его' : 'её';
say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." Ай Фон Ай Ди.", 1);
} else {
say ("Не понятно на чей Ай Фон нужно отправить сигнал. Видимо я такого как ".$user_to." пока не знаю!", 1);
}
break;
// Telegram
case 'Telegram':
case 'telegram':
case 'Телеграм':
case 'Телеграмм':
case 'телеграм':
case 'телеграмм':
if (($user != 'unknown') && ($TelegramID != '')) {
// say ("Отправляю сообщение Телеграм. Кому: ".$user_to.". Текст сообщения: ".$msg.". Получатель мне известен как: ".$fullName, 1);
say ("Отправляю сообщение Телеграм. Получатель мне известен как ".$fullName, 1);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
debmes('### sendMessageToUser -> TelegramID:'.$TelegramID.' # message:'.$msg);
$telegram_module -> sendMessageToUser($TelegramID,$msg);
} else if (($user != 'unknown') && ($TelegramID == '')) {
say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." номере АйДи в приложении Телеграм.", 1);
} else {
say ("Увы, отправить сообщение Телеграм не получиться, такого адресата как: ".$user_to." я ,видимо, не знаю.",1);
}
break;
// не понятно что
default:
say ("Тут какая-то ошибка с каналом отправки сообщения. Указанный вариант отправки как: ".$what.", мне не известен.", 1);
endswitch;
|
|
SomebodyHome
|
Срабатывает в том случае, когда кто-то появился дома
callMethod('EconomMode'.'.'.'deactivate');
say('Здравствуйте!', 2);
runScript('reportStatus', array());
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
setTimeOut('stopWebCamDetection', " runScript('manageWebCamMotion', array('stop'=>'1'));", (int)('60'));
}
|
|
startUp
|
Система загружена
say('Система загружена', 2);
//runScript('tellIPAddress', array());
|
|
talkTraffic
|
Проговаривает пробки
//CallMethod('yt_settings.update');// принудительное обновление пробок.
$traffic_jam.=".Пробки по дороге домой, ".getGlobal('v_sankt_peterburge.level')." балла, ";
say($traffic_jam,2); //проговаривает пробки.
//.getGlobal('yt_info.val')
|
|
Time
|
Проговаривает время
say(date( "H:i", time()),0);
|
|
TurnOff
|
$objects=getObjectsByProperty('allOffGroup','=','1');
if (is_array($objects)) {
foreach($objects as $obj) {
callMethod($obj.'.turnOff');
}
}
|
|
turnOffEverything
|
Выключить все приборы
$objects=array('Switch1','Switch2','Switch3');
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
sayReply("Все обесточено..........., переключаюсь на режим ........все свалили из квартиры",2);
|
|
TurnOnDoor
|
Включение света при открытии входной двери (в коридоре и прихожей на две минуты).
if (getGlobal("Openclose02.status") == 0) {
callMethod("Relay11.turnOn");
setTimeOut('door1',"callMethod('Relay11.turnOff');",180);
setTimeOut('door2',"callMethod('Relay12.turnOn');",60);
setTimeOut('door3',"callMethod('Relay12.turnOff');",181);
}
// SetTimeOut('door1','sg("Relay12.status",1);',60);
//callMethod("Relay12.turnOn");
//if (getGlobal("Openclose02.status") == 0) {
// callMethod("Relay11.turnOn");
//SetTimeOut('door','sg("Relay11.status",0);',120);
//}
//setTimeOut('door1',"callMethod('Relay12.turnOn');",60);
//SetTimeOut('door2','sg("Relay12.status",0);',120);
|
|
UpdateCalendar_forNewYear
|
Обновление событий в календаре
// Добавить в какой-нибудь сценарий либо вызывать его вручную
include_once('./modules/app_calendar/app_calendar.class.php');
$calendar = new app_calendar();
$calendar->calendar_getholidays();
|
|
Weather
|
//Получаем данные от Яндекса, region= указывает на код региона
$getYandexPogoda = simplexml_load_string(file_get_contents('https://export.yandex.ru/bar/reginfo.xml?region=2'));
$getYandexPogoda = json_decode(json_encode($getYandexPogoda), TRUE);
//Меняем некрасивые картинки на красивые, анимированные
$arrayIcon = [
'bkn_d.png' => 'assets/icons/meteoIcon/cloudy-day-3.svg',
'bkn_n.png' => 'assets/icons/meteoIcon/cloudy-night-3.svg',
'ovc.png' => 'assets/icons/meteoIcon/cloudy.svg',
'ovc_-sn.png' => 'assets/icons/meteoIcon/snowy-4.svg',
'ovc_sn.png' => 'assets/icons/meteoIcon/snowy-5.svg',
'ovc_-ra.png' => 'assets/icons/meteoIcon/rainy-4.svg',
'ovc_ra.png' => 'assets/icons/meteoIcon/rainy-5.svg',
'ovc_ts_ra.png' => 'assets/icons/meteoIcon/thunder.svg',
'skc_d.png' => 'assets/icons/meteoIcon/day.svg',
'skc_n.png' => 'assets/icons/meteoIcon/night.svg',
'fg_d.png' => 'assets/icons/meteoIcon/cloudy.svg',
'bl.png' => 'assets/icons/meteoIcon/snowy-6.svg',
'bkn_-ra_d.png' => 'assets/icons/meteoIcon/rainy-2.svg',
'bkn_-ra_n.png' => 'assets/icons/meteoIcon/cloudy-night-3.svg',
'bkn_-sn_d.png' => 'assets/icons/meteoIcon/snowy-2.svg',
'bkn_-sn_n.png' => 'assets/icons/meteoIcon/cloudy-night-3.svg',
'bkn_ra_d.png' => 'assets/icons/meteoIcon/rainy-1.svg',
'bkn_ra_n.png' => 'assets/icons/meteoIcon/rainy-1.svg',
'bkn_sn_d.png' => 'assets/icons/meteoIcon/snowy-1.svg',
'bkn_sn_n.png' => 'assets/icons/meteoIcon/snowy-1.svg',
'ovc_ra_sn.png' => 'assets/icons/meteoIcon/rainy-5.svg',
];
//Цикл для перебора данных
foreach($getYandexPogoda['weather']['day']['day_part'] as $key => $array) {
//Самый первый массив - в нем данные о текущей погоде
if($key == 0) {
//Текущая температура
sg('System_YandexWeather.nowTemp', $array["temperature"]);
//Иконка
$searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);
sg('System_YandexWeather.nowWeatherIcon', $arrayIcon[$searchIcon[8]]);
//Скорость ветра
sg('System_YandexWeather.nowWindSpeed', $array["wind_speed"]);
//Направление ветра
sg('System_YandexWeather.nowWindDirection', $array["wind_direction"]);
continue;
}
if(isset($getYandexPogoda["weather"]["day"]["day_part"][$key]["temperature"])) {
$searchTemp = $getYandexPogoda["weather"]["day"]["day_part"][$key]["temperature"];
} else {
$searchTemp = $getYandexPogoda["weather"]["day"]["day_part"][$key]["temperature_from"];
}
//Раскидываем данные по принципу temp_1, temp_2, temp_3, temp_4 это утро, день, вечер, ночь
sg('System_YandexWeather.name_'.$key, $getYandexPogoda["weather"]["day"]["day_part"][$key]["@attributes"]["type"]);
sg('System_YandexWeather.temp_'.$key, $searchTemp);
$searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);
sg('System_YandexWeather.WeatherIcon_'.$key, $arrayIcon[$searchIcon[8]]);
}
//Время обновления
sg('System_YandexWeather.update', date('d.m.Y H:i', time()));
echo 'ok';
|