BathroomHeat
|
Включение теплого пола на несколько часов
// Включаем теплый пол
sg("TH_bathHF.state",1);
sg("TH_bathHF.power",75);
if ($params[0]!='') {
$hours=$params[0];
} else {
$hours=2;
}
$timeout=$hours*60*60;
//Говорим, что включили теплый пол на сколько-то часов
say ("Включаю теплый пол в ванной на ".$hours." часа(ов)",2);
//Устанавливаем таймер на отключение
clearTimeOut("BathroomHeat");
setTimeOut("BathroomHeat","sg('TH_bathHF.state',0);",$timeout);
|
CalcSunSetRise
|
Вычисляет время восхода и заката
$lat=gg('ThisComputer.latitude'); // широта
$long=gg('ThisComputer.longitude'); // долгота
if ($lat=='') $lat=52; //Kursk
if ($long=='') $long=36; //Kursk
$sun_info = date_sun_info(time(), $lat, $long);
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.Transit',date("H:i", $val));
}
if ($key == 'civil_twilight_begin') {
//echo 'Начало утренних сумерек: '.date("H:i", $val).'<br>';
//setGlobal('ThisComputer.civil_begin',date("H:i:s", $val));
}
if ($key == 'civil_twilight_end') {
//echo 'Конец вечерних сумерек: '.date("H:i", $val).'<br>';
//setGlobal('ThisComputer.civil_end',date("H:i", $val));
}
}
|
CreateGlobalProperty
|
Создает и заполняет набор глобальных свойств
sg("PowerTreshold",1200);
sg("TempHighTreshold",27);
sg("TempLowTreshold",20);
sg("IdleDelay",15);
sg("LastMovementTimestamp","");
sg("LastMovementTime","");
sg("LastMovement","");
sg("TimeNightModeON","22:30");
sg("TimeNightModeOFF","09:00");
//sg("SunriseTime","");
//sg("SunsetTime","");
sg("PushbulletNotify",0);
sg("NobodyHomeAuto",1);
// Для Курска
sg("Latitude","51,73");
sg("Longitude","36,19");
RunScript("CalcSunSetRise");
|
goodMorning
|
$message="";
$message.="Доброе утро! \n";
if (gg("tempNight")<15) $message.="Этой ночью температура воздуха опускалась до ".gg("tempNight")." \n";
$message.="Сейчас за окном ".gg("TempOut.value")." \n";
$message.=" ------------ \n";
$message.="Сегодня в Курске ".gg("weatherFull")." \n";
runScript('message',array('type'=>'tlg','name'=>'all','mes'=>$message));
|
queryDoza
|
Запрос дозировки препарата
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$option = array( array($telegram_module->buildInlineKeyboardButton($text="12.5%","","Callback_doza12",""),
$telegram_module->buildInlineKeyboardButton($text="25%","","Callback_doza25",""),
$telegram_module->buildInlineKeyboardButton($text="50%","","Callback_doza50",""),
$telegram_module->buildInlineKeyboardButton($text="75%","","Callback_doza75",""),
$telegram_module->buildInlineKeyboardButton($text="100%","","Callback_doza100","") ) );
$keyb = $telegram_module->buildInlineKeyBoard($option);
$chat_id=420546406;
$content = array('chat_id' => $chat_id, 'text' => "Выберите дозу препарата: (сейчас ".gg("doza")."%) ", 'reply_markup' => $keyb);
$telegram_module->sendContent($content);
|
WOL_Alina
|
//work on linux
//need "apt-get install wakeonlan"
$mac = '1C:1B:0D:E6:EF:16';
safe_exec("wakeonlan $mac");
|
WOL_Favorit
|
//work on linux
//need "apt-get install wakeonlan"
$mac = '74:D4:35:E6:63:CF';
safe_exec("wakeonlan $mac");
|
Core
|
Выполняется каждую минуту
//Скрипт запускается каждую минуту,
//а также при изменении важных параметров
//Скрипт запускает другие скрипты, например, управление светом
$h=(int)date('G',time());
$m=date('i',time());
//Проверка на предмет есть ли кто-то дома
$nobody=0;
$objects=getObjectsByClass("Rooms");
//Для каждого объекта класса Rooms проводим проверку свойства SomebodyHere
foreach($objects as $obj) {
if (gg($obj['TITLE'].".SomebodyHere")==1) $nobody=$nobody+1;
}
// Проверяем что никого нет дома и есть разрешен автоматический переход в режим "Никого нет дома" - активируем его
$LastMovement=gg("LastMovementTimestamp");
$IdleDelay=gg("IdleDelay")*60;
//if (time()>$LastMovement+$IdleDelay)&&(!gg("NightMode.active"))&&(gg("NobodyHomeAuto"))&&(!gg("NobodyHomeMode.active")) {
if (($nobody==0)&&(!gg("NightMode.active"))&&(gg("NobodyHomeAuto"))&&(!gg("NobodyHomeMode.active"))&&(gg("LastMovement")=="Door")) {
say("Никого нет дома",2);
callMethod("NobodyHomeMode.activate");
}
$objects=getObjectsByClass("Sensors");
foreach($objects as $obj) {
callMethod($obj['TITLE'].".Periodic");
}
$objects=getObjectsByClass("Thermostats");
foreach($objects as $obj) {
callMethod($obj['TITLE'].".Periodic");
}
if ((!gg("NightMode.active"))&&(!gg("NobodyHomeMode.active"))&&($m=="00")) sg("smartLedHall.prog","random");
if ((!gg("NightMode.active"))&&(!gg("NobodyHomeMode.active"))&&(($m=="30")||($m=="00"))) sg("smartLed2.prog","random");
if (timeIs("23:15")) sg("smartLed2.prog","night");
if (timeIs("01:00")) sg("TH_bathHF.state",0);
// Уведомления о приеме лекарств
if (timeIs("16:55")) {
$doza=gg('doza');
$d=date("w");
$priem=false;
// 1 - понедельник
// 2 - вторник
// 3 - среда
// 4 - четверг
// 5 - пятница
// 6 - суббота
// 0 - воскресенье
switch ($doza) {
case "12.5":
if (($d==1)||($d==4))
{
$priem=true;
$size="1/4";
}
break;
case "25":
if (($d==1)||($d==4))
{
$priem=true;
$size="1/2";
}
break;
case "50":
if (($d>=1)||($d<=3)||($d<=5))
{
$priem=true;
$size="1/2";
}
if ($d==0)
{
$priem=true;
$size="1/4";
}
break;
case "75":
if (($d>=1)||($d<=6))
{
$priem=true;
$size="1/2";
}
if ($d==0)
{
$priem=true;
$size="1/4";
}
break;
case "100":
if (($d>=1)||($d<=4))
{
$priem=true;
$size="1";
}
if ($d==5)
{
$priem=true;
$size="1/2";
}
break;
}
if ($priem) {
$text="Дать ребенку $size таблетки";
//runScript('message',array('type'=>'tlg','name'=>'Alina','mes'=>$text));
say($text,5);
}
}
|
LightOffAll
|
Выключает весь свет в квартире / доме
//say("Выключаю свет во всех комнатах",0);
$objects=getObjectsByClass("Rooms");
foreach($objects as $obj) {
callMethod($obj['TITLE'].".LightOff");
//$obj['TITLE']->callMethod("LightOff");
usleep(250000);
}
$objects=getObjectsByClass("WS2812");
foreach($objects as $obj) {
callMethod($obj['TITLE'].".off");
usleep(250000);
}
//В классе Rooms должен быть метод LightOff следующего содержания:
/*
$delay=1; // Количество секунд между выключением групп света
//Определяем массив групп света
$lightgroups = array('Light1', 'Light2', 'Light3', 'Light4');
foreach ($lightgroups as $group) {
if ($this->getProperty($group)) {
$this->setProperty($group,0);
sleep($delay);
}
}
*/
|
SecurityAlarm
|
Сработка охранной системы
// Если режим охраны выключен - прерываем выполнение
if (!gg("SecurityArmedMode.active")) return;
//Если с момента последней сработки сигнализации прошло менее 5 минут - прерываем выполнение
$LastAlarm=gg("SecurityAlarmTimestamp");
if ((time()-$LastAlarm)<300) return;
//Обновляем время сработки сигнализации
sg("SecurityAlarmTimestamp",time());
sg("SecurityAlarmTime",date('Y-m-d H:i'));
say('Тревога! Сработка сигнализации',2);
sg("smartLedHall.prog","alarm");
runScript('message',array('name'=>'Pavel','type'=>'sms','mes'=>'Тревога! Проникновение в дом!'));
sleep(1);
runScript('message',array('name'=>'Alina','type'=>'sms','mes'=>'Тревога! Проникновение в дом!'));
//sleep(1);
//runScript('message',array('name'=>'Anatol','type'=>'sms','mes'=>'Тревога! Проникновение в дом!'));
|
backupData
|
Бэкап базы данных
chdir(dirname(__FILE__) . '/../../');
include_once("./config.php");
include_once("./lib/loader.php");
include_once("./lib/threads.php");
// connecting to database
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);
include_once("./load_settings.php");
include_once(DIR_MODULES . "saverestore/saverestore.class.php");
$sv=new saverestore();
global $design;
global $code;
global $data;
global $save_files;
$design=0;
$code=0;
$data=1;
$save_files=0;
$res=$sv->dump($out, 1);
$sv->removeTree(ROOT.'cms/saverestore/temp');
|
backupFull
|
Полный бэкап системы
chdir(dirname(__FILE__) . '/../../');
include_once("./config.php");
include_once("./lib/loader.php");
include_once("./lib/threads.php");
// connecting to database
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);
include_once("./load_settings.php");
include_once(DIR_MODULES . "saverestore/saverestore.class.php");
$sv=new saverestore();
global $design;
global $code;
global $data;
global $save_files;
$design=1;
$code=1;
$data=1;
$save_files=1;
$res=$sv->dump($out, 1);
$sv->removeTree(ROOT.'cms/saverestore/temp');
|
ntpRestart
|
safe_exec("sudo service ntp restart");
|
objTransfer
|
$from = '"SensOld"';
$to = '"Sensors"';
$rec = SQLSelectOne("SELECT * FROM `classes` WHERE `TITLE`=$from");
$oldID = $rec["ID"];
$rec = SQLSelectOne("SELECT * FROM `classes` WHERE `TITLE`=$to");
$newID = $rec["ID"];
SQLExec("UPDATE `objects` SET CLASS_ID = $newID WHERE CLASS_ID = $oldID");
|
syncFavorit
|
Синхронизация с github
$url = 'https://github.com/Fav0rit/MajorDomo/raw/master/favorit.tar.gz';
if (!is_dir(ROOT . 'cms/saverestore')) {
@umask(0);
@mkdir(ROOT . 'cms/saverestore', 0777);
}
$filename = ROOT . 'cms/saverestore/favorit.tar.gz';
@unlink(ROOT . 'cms/saverestore/favorit.tar.gz');
$f = fopen($filename, 'wb');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FILE, $f);
$incoming = curl_exec($ch);
curl_close($ch);
fclose($f);
// unpack archive
//@mkdir(ROOT . 'cms/saverestore/temp', 0777);
//@chdir(ROOT . 'cms/saverestore/temp');
@chdir(ROOT);
exec('tar xzvf ./cms/saverestore/favorit.tar.gz --overwrite-dir', $output, $res);
|
CreateMenu
|
$commands = array ( "title" => array ("СМС оповещения", "Расчет восхода/захода", "Ежедневный бэкап БД", "Ежедневная синхронизация", "Ежедневная очистка истории", "Авто очистка старых файлов", "Проверка свободного места"),
"property" => array ("smsNotify", "calcSunsetSunrise", "everydayBackupDB", "everydaySyncFavorit", "everydayClearHistory", "autoClearDebmesBackup", "autoCheckFreeSpace")
);
$parrent_name='<#LANG_GENERAL_SERVICE#>';
//echo "Родительский пункт меню: ".$parrent_name;
$Record=SQLSelectOne("SELECT * FROM commands WHERE TITLE='$parrent_name'");
$parrent_id=$Record["ID"];
//echo " его ID: ".$parrent_id."\n";
//Добавляем пункты меню
$num=count($commands["property"]);
echo $num;
for ($i = 0; $i <$num; $i++) {
$property=$commands['property'][$i];
$Record=SQLSelectOne("SELECT * FROM commands WHERE LINKED_OBJECT='ThisComputer' AND LINKED_PROPERTY='$property'");
$Record['TYPE']='switch';
$Record['LINKED_OBJECT']='ThisComputer';
$Record['LINKED_PROPERTY']=$property;
$Record['TITLE']=$commands['title'][$i];
$Record['PARENT_ID']=$parrent_id;
$Record['PRIORITY']=400-$i;
SQLUpdateInsert('commands', $Record);
}
//Создаем кнопку синхронизации скриптов
$Record=SQLSelectOne("SELECT * FROM commands WHERE TITLE='Синхронизировать скрипты'");
$Record['TYPE']='button';
$Record['LINKED_OBJECT']='';
$Record['LINKED_PROPERTY']='';
$Record['TITLE']='Синхронизировать скрипты';
$Record['PARENT_ID']=$parrent_id;
$Record['PRIORITY']=10000;
$Record['CODE']='sync_favorit();';
SQLUpdateInsert('commands', $Record);
|
dailyIPinfo
|
//считываем файл
$text=file_get_contents('/var/log/apache2/access.log');
//задаем шаблон регулярного выражения
$pattern='#(([0-9]{1,3}\.){3}[0-9]{1,3}).{1,}GET ([0-9a-z/\_\.\-]{1,})#i';
//вытаскиваем данные в массив matches
preg_match_all($pattern,$text,$matches);
$ip=array_count_values($matches[1]);
//сортируем по убыванию
arsort($ip);
foreach($ip as $key=>$value)
{
if (($key!='127.0.0.1')&&(strpos($key,'192.168')===false)) $text.= $key.' '.$value."\n";
}
$text = iconv("UTF-8", "WINDOWS-1251", $text);
SendMail ("majordomo.kursk@yandex.ru","pfavorit@gmail.com",gg("homeName")." IP connections",$text);
|
mqtt_test
|
|
test
|
$answer=ask("Что делаешь?","FavoritComp");
sayTo("Ответ был: $answer",0,"FavoritComp");
|
testmail
|
SendMail ("majordomo.kursk@yandex.ru","pfavorit@gmail.com","MajorDoMo","Hello world");
|