EconomModePeriod
|
/* Данные истории находятся в таблице phistory. Чтобы их от туда взять, нужно знать VALUE_ID нашего Объект.Свойства
Получить его можно разными путями в зависимости от ситуации. Приведу общий способ, который будет работать в любом месте.
Например из сценария, где нет такого указателя как $this. Еще этот код немного расскажет про связь между таблицами в базе данных.
*/
$start_time=date("Y-m-d").' 00:00:00';
$tmr_start = strtotime($start_time);
$tmr_now = time();
$tmr_mem = 0; //накопитель времени в секундах
// Мы знаем имя объекта и имя свойства.
// Имена объектов находятся в таблице objects и они должны быть уникальными
// Для начала нам нужно получить id нашего объекта и id класса которому принадлежит объект
$obj_title = 'EconomMode'; //имя объекта (поменять на свой !!!!!!!!!!!!!!!!!)
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$class_id = $arr_s['CLASS_ID'];
/* Имена свойств находятся в таблице properties
с указанием id класса если свойство заданно на уровне класса,
или id объекта если свойство принадлежит объекту лично.
*/
// Получим id свойства по его имени И (id класса ИЛИ id объекта)
$prop_title = 'active'; //имя свойства (поменять на свое!!!!!!!!!!!!!)
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."' AND (CLASS_ID='".$class_id."' OR OBJECT_ID='".$obj_id."')");
$prop_id = $arr_s['ID'];
// значения свойств находятся в таблице pvalues
// Нам нужен id. (уточнить необходимость сортировки по UPDATED)
$arr_s = SQLSelectOne("SELECT * FROM pvalues WHERE OBJECT_ID='".$obj_id."' AND PROPERTY_ID='".$prop_id."'");
$pvalue = $arr_s['ID'];
/* Зная $pvalue можно слазать за данными истории в таблицу phistory
Для нашей задачи нужно получить все записи по времени >= началу суток + 1 запись
*/
// Получить количество записей за нужный период времени
$arr_s = SQLSelectOne("SELECT COUNT(ID) as COUNT_ID FROM phistory WHERE VALUE_ID=".$pvalue." AND ADDED>='".date('Y-m-d H:i:s', $tmr_start)."'");
// Взять это количество записей +1
$arr_s = SQLSelect("SELECT * FROM phistory WHERE VALUE_ID=".$pvalue." ORDER BY ADDED DESC LIMIT 0 , ".(1+$arr_s['COUNT_ID']));
$tmr2 = $tmr_now;
// Переберем весь массив
foreach($arr_s as $s) {
$tmr1 = $tmr2;
$tmr2 = strtotime($s['ADDED']);
// Ограничить началом суток
if ($tmr2<$tmr_start) { $tmr2=$tmr_start; }
// Двигаясь вниз по массиву времени складывать отрезки если режим включен
if ($s['VALUE']) { $tmr_mem = $tmr_mem + $tmr1 - $tmr2; }
}
$period = round( $tmr_mem * 100 / ($tmr_now - $tmr_start) );
setGlobal("EconomMode.period",$period); //запись значения в свойство объекта (поменять на свое!!!!!!!!!!!!!!)
|
rebootSystem
|
Перезапуск системы
$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 -r now');",15);
|
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);
|
Closing the curtains
|
Закрытие рулонной шторы
if (gg("Openclose02.status") && gg("XiOpenclose03.status")) {
setGlobal("Relay15.status", 0);
callMethod("Relay15.turnOff");
say('Закрываю штору',3);
}else{
say("Не могу закрыть штору! Закройте окно!",3);
}
|
turnONSRelays
|
Включи все SRelays
//$objects=array('Relay09','Relay10','Relay11');
//foreach($objects as $o) {//
//callMethod($o.'.turnon');
//}//
$objects=getObjectsByClass("SRelays");
foreach($objects as $obj) {
callMethod($obj ['TITLE'].'.turnon');
}
|
Вкл. всех вытяжек
|
$objects=array('Relay04','Relay05','Relay06');
foreach($objects as $o) {
callMethod($o.'.turnon');
}
|
Включение малого света в гостиной
|
$objects=array('Relay08');
foreach($objects as $o) {
callMethod($o.'.turnon');
}
|
Включение основного света в гостиной
|
$objects=array('Relay07');
foreach($objects as $o) {
callMethod($o.'.turnon');
}
|
Включение саба и ресивера
|
$objects=array('Relay17');
foreach($objects as $o) {
callMethod($o.'.turnon');
}
$objects=array('Button01');
foreach($objects as $o) {
callMethod($o.'.pressed');
}
|
Включение телевизора у Влада
|
sg("webOSTVLG.command", "powerOn");
|
Open the curtains
|
Открытие рулонной шторы
if (gg("Openclose02.status") && gg("XiOpenclose03.status")) {
setGlobal("Relay15.status", 1);
callMethod("Relay15.turnOn");
say('Открываю штору',2);
}else{
say("Не могу Открыть штору! Закройте окно!",2);
}
|
turnOffSRelays
|
Выключить все SRelays
//$objects=array('Relay09','Relay10','Relay11');
//foreach($objects as $o) {//
//callMethod($o.'.turnoff');
//}//
$objects=getObjectsByClass("SRelays");
foreach($objects as $obj) {
callMethod($obj ['TITLE'].'.turnoff');
}
|
Выкл всех вытяжек
|
$objects=array('Relay04','Relay05','Relay06');
foreach($objects as $o) {
callMethod($o.'.turnOff');
}
|
Выключение малого света в гостиной
|
$objects=array('Relay08');
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
|
Выключение основного света в гостиной
|
$objects=array('Relay07');
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
|
Выключение саба и ресивера
|
$objects=array('Relay17');
foreach($objects as $o) {
callMethod($o.'.turnoff');
}
$objects=array('Button02');
foreach($objects as $o) {
callMethod($o.'.pressed');
}
|
Выключение телевизора у Влада
|
sg("webOSTVLG.command", "powerOff");
|
(В|в)адима
|
Местонахождение
$location=gg("VAD.Location");
$updatedText=gg("VAD.updatedText");
$Name=gg("VAD.Name");
$BattLevel=gg("VAD.BattLevel");
say("$Name находится в локации $location, последний раз точка была отмечена $updatedText, заряд телефона состовляет $BattLevel %",2);
|
(В|в)лада
|
Местонахождение
$location=gg("Vladislav.Location");
$updatedText=gg("Vladislav.updatedText");
$Name=gg("Vladislav.Name");
$BattLevel=gg("Vladislav.BattLevel");
say("$Name находится в локации $location, последний раз точка была отмечена $updatedText, заряд телефона составляет $BattLevel % ",2);
|
(М|м)аш(и|е)
|
Местонахождение
$location=gg("Mariya.Location");
$updatedText=gg("Mariya.updatedText");
$Name=gg("Mariya.Name");
$BattLevel=gg("Mariya.BattLevel");
say("$Name находится в локации $location, последний раз точка была отмечена $updatedText, заряд телефона составляет $BattLevel % ",2);
|
Alarm
|
Нет напряжения сети
say("Нет напряжения на вводном автомате!!!",1);
|
birthday
|
Проверка дней рождений
//say('Проверим, есть ли сегодня дни рождения у кого-нибудь из пользователей.');
$TCd = gg('Date.DateD');
$TCm = gg('Date.DateM');
$Name = 'unknown';
$objects = getObjectsByClass('Users');
foreach ($objects as $obj)
{
$user = $obj['TITLE'];
list($USd, $USm, $USy) = explode('.', gg($user . '.birthday'));
if (($USd == $TCd)&($USm == $TCm))
{
$Name = gg($user . '.Name');
$bodytext = $Name . ': ';
$bodytext .= getRandomLine(birthday);
$bodytext .= ' С днем рождения! (Алиса)';
say($bodytext, 1);
runScript('send_mes', array('to'=>$Name, 'subj'=>'- HappyBirthday -', 'msg'=>$bodytext, 'what'=>'Email'));
}
}
/*
if ($Name == 'unknown')
{
say('На сегодня я дней рождения не обнаружила.');
}
*/
|
Hourly
|
Выполняется каждый час
|
morningRoutine
|
Доброе утро
say("Доброе утро!" , 2);
callmethod('yw_mycity.sayweather');
|
NobodyHome
|
Срабатывает, когда никого дома нет
say('Включаю режим экономии', 1);
callMethod('EconomMode'.'.'.'activate');
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
runScript('manageWebCamMotion', array('start'=>'1'));
}
|
SomebodyHome
|
Срабатывает в том случае, когда кто-то появился дома
callMethod('EconomMode'.'.'.'deactivate');
say('Здравствуйте! Рада Вас снова видеть', 1);
runScript('reportStatus', array());
if (getGlobal('ThisComputer'.'.'.'WebCamMotionAuto')) {
setTimeOut('stopWebCamDetection', " runScript('manageWebCamMotion', array('stop'=>'1'));", (int)('60'));
}
|
startUp
|
Система загружена
say('Система загружена', 1);
runScript('tellIPAddress', array());
|
Проверка цветка
|
Проверка влажности почвы цветка
if (getGlobal('Mi-flora.moisture') < '38'){
$S=gg("Mi-flora.moisture");
$F=gg("Mi-flora.fertility");
Say ("Я проверила влажность и количество удобрений в почве Василия! Влажность почвы $S %, количество удобрений в почве $F. Пора полить либо подкормить цветок. Смотрите сами уж. Я только проверяю",2);
}
|
Стучалка от пылесоса в телеграм
|
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$luts=gg("MiVacuumCleaner.timestamp");
$diff=(gmdate('i',trim(time()-$luts)));
$pattern = "|\b[0]+([1-9][\d]*)|is";
$diff2= preg_replace($pattern, "\\1", $diff);
$status .= "Информация о пылесосе была обновлена " .$diff2 . " минут назад.";
if (gg('MiVacuumCleaner.online')=='1') {$status =$status." Пылесос на связи, "; }
else {$status=$status." Связь с пылесосом отсутсвует,";}
if (gg("MiVacuumCleaner.state_text")=='Charging') {$status =$status." заряжается, установлен на базе, "; }
if (gg("MiVacuumCleaner.state_text")=='Cleaning') {$status =$status." производит уборку, "; }
if (gg("MiVacuumCleaner.state_text")=='Back to home') {$status =$status." едет на базу, "; }
if (gg("MiVacuumCleaner.state_text")=='Sleeping') {$status =$status." отдыхает от трудовых будней, "; }
if (gg("MiVacuumCleaner.state_text")=='Pause') {$status =$status." установлен на паузу, "; }
//$status .= " температура двигателя ".round(gg("kia ceed.etemp"))." градусов, температура в салоне ".round(gg("kia ceed.ctemp"))." градусов.";
$status .= " Заряд аккумуляторной батареи ".gg("MiVacuumCleaner.battery")." процентов. ";
if (gg("MiVacuumCleaner.battery")<10) {$status = $status." Внимание, аккумулятор сильно разряжен, рекомендуется зарядить как можно скорее!";}
$status .= " Последняя уборка заняла ".round(gg("MiVacuumCleaner.clean_time")/60)." минут, ";
$status .= " убрано ".round(gg("MiVacuumCleaner.clean_area")/1000000,1)." метров. ";
if (gg("MiVacuumCleaner.error_text")=='No error') {$status =$status." Ошибок не зафиксировано. "; }
if (gg("MiVacuumCleaner.error_text")=='Clean main brush') {$status =$status." Необходимо очистить нижнюю щетку."; }
//////////////////////////////////
$resurs=1800;
$resursp=100-round((gg("MiVacuumCleaner.sensor_dirty_time")/60*100)/$resurs);
$resursh=round(($resurs-(gg("MiVacuumCleaner.sensor_dirty_time")/60))/60);
$status .= " Очистка боковых сенсоров необходима через $resursh часов.";
$resurs=18000;
$resursp=100-round((gg("MiVacuumCleaner.main_brush_work_time")/60*100)/$resurs);
$resursh=round(($resurs-((gg("MiVacuumCleaner.main_brush_work_time")/60)))/60);
if ($resursp<30) {$replacemain=1; }else{ $replacemain=0;}
$status .= " Ресурс нижней щетки ".$resursp." процентов ($resursh часов).";
$resurs=12000;
//$resurs=120;
$resursp=100-round((gg("MiVacuumCleaner.side_brush_work_time")/60*100)/$resurs);
$resursh=round(($resurs-((gg("MiVacuumCleaner.side_brush_work_time")/60)))/60);
if ($resursp<30){ $replaceside=1;} else {$replaceside=0;}
$status .= " Ресурс боковой щетки ".$resursp." процентов ($resursh часов).";
$resurs=9000;
//$resurs=90;
$resursp=100-round((gg("MiVacuumCleaner.filter_work_time")/60*100)/$resurs);
$resursh=round(($resurs-((gg("MiVacuumCleaner.filter_work_time")/60)))/60);
if ($resursp<30) {$replacefilter=1;} else {$replacefilter=0;}
$status .= " Ресурс фильтра ".$resursp." процентов ($resursh часов).";
if (($replacefiler=='1')or
($replaceside=='1') or
($replacemian=='1'))
{$status .= " Необходимо преобрести расходники: ";
if ($replaceside==1) $status .= "боковую щетку " ;
if ($replacefiler==1) $status .= "фильтр ";
if ($replacemain==1) $status .= "главную щетку " ;
$status .= ".";
}
$telegram_module->sendMessageToAll($status);
|