DayScript2101
|
// DayScript2101
// Запуск в 21:07
// Если смена в день, день рабочий и темно - включаем прожектор - встречаем и включаем комп
if (gg('TFlags.WorkFlag') == "D") {
sg('TFlags.WorkFlag',' '); //
$ip="192.168.1.100";
say('Борт 777 посадка на полосу 36 левая.',2);
if (!ping($ip)) { // если комп выключен
runScript('CompOn'); // включаем комп.
}
if (gg('Vladimir.where') == "вышел") {
if (gg('MZK.LightSensor') == "N") {callMethod('Lamp4-1.turnOn');}
}
}
|
4Muhtar1
|
// 4Muhtar1
// запуск в 21:00
// TFlags.DogIsFed // переменную подвязать по MQTT
playSound('RJD-Intro');
if (gg('TFlags.DogIsFed') == "0") { // если не накормлен
SayReply('Пора покормить Мухтара',2);
sg('TFlags.TerminalMessage',date('[Y-m-d H:i:s]').' Пора покормить Мухтара');
rs('SoundMIS',array('param1'=>'19'));
callMethod('Lamp0.blynk3');
callMethod('Lamp1.blynk');callMethod('Lamp5.blynk3');
// если темно - включаем освещение на улице
if (gg('MZK.LightSensor') == "N") {callMethod('Lamp4-1.turnOn');}
} else {rs('SoundMIS',array('param1'=>'12'));SayReply('Мухтар покормили ',2);}
// даже если был накормлен
sg('TFlags.DogIsFed',"0"); // сбрасываем что "не накормлен"
|
AboutCurrent
|
о включенных электроприборах
// AboutCurrent
// Скрипт о нагрузке. Докладывает о включенных приборах
// Шаблон: Доложи о нагрузке
$ack="На данный момент включены ";
// if (gg('')=="1") {$ack=$ack." \n ";}
if (gg('Lamp0.status')=="1") {$ack=$ack."лампа \n ";}
if (gg('Lamp1.status')=="1") {$ack=$ack." свет в зале \n ";}
if (gg('Lamp2.status')=="1") {$ack=$ack." свет на кухне \n ";}
if (gg('Lamp3.status')=="1") {$ack=$ack." свет в детской \n ";}
if (gg('Lamp5.status')=="1") {$ack=$ack." свет в котельной \n ";}
if (gg('Lamp9.status')=="1") {$ack=$ack." свет на улице \n ";}
if (gg('Lamp10.status')=="1") {$ack=$ack." прожектор \n ";}
if (gg('Socket1.status')=="1") {$ack=$ack." Розетка-1 \n ";}
if (gg('Socket2.status')=="1") {$ack=$ack." Розетка-2 \n ";}
if (gg('Boiler1.status')=="1") {$ack=$ack." Водонагреватель-1 \n ";}
if (gg('Boiler2.status')=="1") {$ack=$ack." Водонагреватель-2 \n ";}
echo $ack; sayReply($ack,2);
|
AboutTemperatures
|
// AboutTemperatures
// Скрипт о температурах. Докладывает о температурах
$ack="";
$ack=$ack."Температура на борту "; // Livingroom.Temperature
$ack=$ack.(string) round(gg('Livingroom.Temperature'));
$ack=$ack." Температура за бортом по югу "; // WSS.tempOutside
$ack=$ack.(string) gg('WSS.tempOutside');
$ack=$ack." по северу "; // WSN.tempOutside
$ack=$ack.(string) gg('WSN.tempOutside');
$ack=$ack." влажность "; // WSS.relHumOutside
$ack=$ack.(string) round(gg('WSS.relHumOutside'));
$ack=$ack." давление "; // WSS.Pressure
$ack=$ack.(string) round(gg('WSS.Pressure'));
$ack=$ack." на подаче "; // gg('MTK.OutTemp');
$ack=$ack.(string) round(gg('MTK.OutTemp'));
$ack=$ack." на обратке "; // gg('MTK.InTemp');
$ack=$ack.(string) round(gg('MTK.InTemp'));
$ack=$ack." батарея "; // gg('TFlags.BatTemp');
$ack=$ack.(string) round(gg('TFlags.BatTemp'));
echo $ack; sayReply($ack,2);
|
AboutUserFunctions
|
Выводит таблицу пользовательских встроенных функций МажорДомо
// AboutUserFunctions
// Scenarios
// Выводит таблицу пользовательских встроенных функций МажорДомо
//Запишем все доступные функции в переменную
$arr=get_defined_functions();
// Отсортируем по алфавиту для читабельности
sort($arr['internal']);
sort($arr['user']);
$i=1;
echo ('<table><tr>');
foreach ($arr['user'] as $key => $name ) {
echo ('<td>'.$key.' --> '.$name.' </td>');
if (!($i%4)) {
echo ('</tr><tr>');
}
$i++;
}
if ($i%4) {echo ('</tr>');}
echo ('</table>');
|
AckHeaterTemp
|
для ответа голосом на компьютере
// AckHeaterTemp
// для ответа голосом на компьютере
$in= gg('MTK.InTemp');
$out=gg('MTK.OutTemp');
$kt=gg('MTK.AirTemp');
$zt=gg('Livingroom.Temperature');
$msg="Подача ".$out." обратка ".$in." температура воздуха в котельной ".$kt." в зале ".$zt." градусов";
echo $msg;
|
AllLightOff
|
Выключение света везде.
// AllLightOff
// Выключение света везде
// вызывается из шаблонов поведения или скриптов.
CallMethod('Lamp1.turnOff');CallMethod('Lamp2.turnOff');
CallMethod('Lamp3.turnOff');CallMethod('Lamp5.turnOff');
CallMethod('Lamp4-1.turnOff');
|
CaseCoolerOn
|
// CaseCoolerOn
// Включает кулер охлаждения ШУ сервера MJD
$cmd='lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/30/1"';
$ack=exec($cmd);
echo "кулера включены";
|
CleanHist
|
Очистка истории
$acky=exec('/home/vladimir/scripts/CleanHist.sh');
|
CompOn
|
Включение компьютера Zeon
// CompOn
// Включение компьютера Zeon
$cmd='lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/2/1"';
$ack=exec($cmd);
sayReply($ack,2);
|
CoolerOn
|
// CoolerOn
// Включает кулер охлаждения сервера MJD
$ack=exec('/home/vladimir/scripts/coolctrl.sh 1');
echo "кулер включен";
|
CreateTaskIdeas
|
добавляет задачу в файл задач идею - в файл идей
// CreateTaskIdeas
// Создать задачу, идею - добавляет продиктованный текст в Tasks.txt или Ideas.txt
// добавляет задачу в файл задач идею - в файл идей
$outmsg=""; // очищаем сообщение
// Разбираем предложение на слова
// Надо учесть, что длинна $message_text имеет ограничения
$keywords = preg_split("/[\s,]+/",$original);
$total=count($keywords);
if ($keywords[1] == "задачу") {$fpath="/pData/Data/Tasks.txt";}
if ($keywords[1] == "идею") {$fpath="/pData/Data/Ideas.txt";}
// далее пропускаем два слова "создать задачу" или "создать идею"
for($i=2;$i<$total;$i++) { $outmsg= $outmsg.$keywords[$i]." ";}
$outmsg .= "\r\n";
// $outmsg .= $fpath; $outmsg .= "\r\n";
sayreply($outmsg);
$fd = fopen($fpath, 'a') or die("не удалось создать файл");
fwrite($fd, $outmsg);
fclose($fd);
sayReply("Записано");
|
DayScript1800
|
// DayScript1800
if (gg('TFlags.Otpusk') !='1') { // если не в отпуске
if (gg('TFlags.DayWork') !='1') {
// Если в ночь - мигаем светом в зале и выдаем сообщение
if (gg('TFlags.WorkFlag') == "N") {
callMethod('Lamp1.blynk');
SayReply('Борт три семёрки взлёт разрешаю',2);
rs('SoundMIS',array('param1'=>'12'));
callMethod('Lamp0.blynk3');
callMethod('Lamp2.turnOn');
sleep(5);
callMethod('Lamp4-1.turnOn');
}
}
}
|
DayScript525
|
// Осуществляет контроль за графиком выхода на работу и подготовительными операциями к пробуждению
// DayScript525
// Осуществляет контроль за графиком выхода на работу и подготовительными операциями к пробуждению
// Подьем в 5:25 Проверяет рабочий ли день и устанавливает переменную
// при запуске работы по команде at следующие 2 строки нужно закомментировать
// $tmp=exec('/home/vladimir/scripts/IsToday.sh');
// sg('TFlags.WorkFlag',$tmp);
if (gg('TFlags.Otpusk') !='1') { // если не в отпуске
if (gg('TFlags.DayWork') =='1') { sg('TFlags.WorkFlag','D');say("Постоянно в день :(",2);}
// Если ответ Day - день значит включаем свет в зале, компьютер, свет на кухне
if (gg('TFlags.WorkFlag') == "D") {
echo ("Работаем в день");
say('Работаем в день',2);
rs('SoundMIS',array('param1'=>'13'));
$ack=getURL('http://192.168.1.201/CtrlPinOn',0);
if ($ack == "") {say("включаем аварийный свет ",2);
$acky=exec('/usr/bin/lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/1/1"');
}
sleep(10);
getURL('http://192.168.1.202/CtrlPinOn',0); sleep(10);
sleep(10);
callMethod('RK_G210S.boil'); sleep(10);
cm('Lamp5.turnOn');cm('Lamp4-1.turnOn');
}
} // не отпуск
$today = date("d.m.y");
sg('TFlags.Today',$today);
|
DayScript600
|
// DayScript600
// Если день рабочий - мигаем светом в зале и выдаем сообщение
if (gg('TFlags.WorkFlag') == "D") {
callMethod('Lamp2.turnOn');
callMethod('Lamp1.blynk');
SayReply('Борт три семёрки взлёт разрешаю',2);
rs('SoundMIS',array('param1'=>'12'));
rs('FanOff');
callMethod('Lamp0.turnOff');
callMethod('Lamp4-1.turnOn');
callMethod('Lamp5.turnOn');
}
|
DayScript603
|
// DayScript603
// Если день рабочий - гасим свет в зале, если темно - включаем по проходу и прожектор
if (gg('TFlags.WorkFlag') == "D") {
// getURL('http://192.168.1.201/CtrlPinOff',0); sleep(10);
if (gg('MZK.LightSensor') == "N") {
// callMethod('Lamp10.turnOn');sleep(10);
// callMethod('Lamp9.turnOn');
// getURL('http://192.168.1.215/EAP',0);
// getURL('http://192.168.1.215/CAL',0);
callMethod('Lamp4-1.turnOn');
}
}
|
FanOff
|
Отключение вентилятора
// FanOff
// Отключение вентилятора
sg('TFlags.USBfanSpeed','0');
$cmd='lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/5/0"';
$ack=exec($cmd);
sayReply($ack,2);
|
FanOn
|
Включение вентилятора
// FanOn
// Включение вентилятора
$sp=intval(gg('TFlags.USBfanSpeed'));
echo $sp;
$cmd='lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/5/"'.$sp;
$ack=exec($cmd);
sayReply($ack,2);
|
GetExtIP
|
// GetExtIP
// Включает кулеры охлаждения ШУ сервера MJD
$cmd='wget -O - -q http://ip-address.ru/show';
$ack=exec($cmd);
sayReply("Внешний IP: ".$ack,2);
if (gg('MJDM.OnLine')=='0') {sayReply("Форум МажорДомо недоступен",2);} else {sayReply("Форум МажорДомо доступен",2);}
|
HeaterCtrl
|
// HeaterCtrl
// Автоматическое задание уставки для котла если включено
// Предполагается вызывать из loop2 runScript('HeaterCtrl');
// return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
// =(B5-B4) * (85 - 40) / (12 - B4) + 40 // (temp-ust) * (HeatMaxTemp - HeatMinTemp) / (RoomMinTemp - ust) + HeatMinTemp
// переменные MTK.AutoMode MTK.TempSetpoint
// Livingroom.Temperature Livingroom.TempSetpoint
$RoomMinTemp=12;
$RoomMaxTemp=32;
$HeatMinTemp=40;
$HeatMaxTemp=85;
if (gg('MTK.AutoMode') == "1") {
$ZalTemp = gg('Livingroom.Temperature');
$UstTemp = gg('Livingroom.TempSetpoint');
if ($ZalTemp<$UstTemp) {
$UstKot = round(($ZalTemp-$UstTemp )*($HeatMaxTemp-$HeatMinTemp)/($RoomMinTemp-$UstTemp) + $HeatMinTemp);
} else {$UstKot=$HeatMinTemp;} // от занижения уставки котла
if ($UstKot>$HeatMaxTemp) {$UstKot=$HeatMaxTemp;} // От превышения уставки котла
echo $UstKot;
sg('MTK.TempSetpoint', $UstKot);
}
|
KorKot
|
Световой коридор в котельную
// KorKot
// Световой коридор в котельную
// Включаем свет в коридоре и в котельной.
cm('Lamp4-1.turnOn');cm('Lamp5.turnOn');
|
loop1
|
Циклический опрос датчиков 5 сек.
// сценарий loop1 (для быстрого опроса сенсоров)
// температура и охлаждение сервера, статусы выключателей и т.п.
$temp=exec('cat /sys/class/thermal/thermal_zone0/temp')/1000;
sg('ThisComputer.cputemp', round($temp,0));
if ($temp > 65) {sayReply('Внимание, температура процессора выше 65 ',2);}
if ($temp > 72) {sayReply('Внимание, температура процессора выше 72 ',2);}
// определение статуса кулера (on/off)
$cstate=exec('/usr/local/bin/gpio read 2');
sg('ThisComputer.cooler_state', $cstate);
sg('TFlags.LoopTime', gg('ThisComputer.timeNow')); // для автоматического перезапуска в случае останова
// чтение статусов выключателей
$l1state=getURL('http://192.168.1.201/dstate',0);
if ($l1state=="") {sg('Lamp1.alive', '0'); } else {sg('Lamp1.alive', '1'); sg('Lamp1.status', $l1state);}
$l2state=getURL('http://192.168.1.202/dstate',0);
if ($l2state=="") {sg('Lamp2.alive', '0'); } else {sg('Lamp2.alive', '1'); sg('Lamp2.status', $l2state);}
/*
$l3state=getURL('http://192.168.1.203/dstate',0);
if ($l3state=="") {sg('Lamp3.alive', '0'); } else {sg('Lamp3.alive', '1'); sg('Lamp3.status', $l3state);}
*/
$l5state=getURL('http://192.168.1.205/dstate',0);
if ($l5state=="") {sg('Lamp5.alive', '0'); } else {sg('Lamp5.alive', '1'); sg('Lamp5.status', $l5state);}
callMethod('MTK.RFget');
// временный переброс значения температуры из котла.
// $tem=gg('MobiThermC1.Temperature'); sg('MTK.OutTemp', round($tem,0));
$tem=gg('MobiThermC1.Temperature'); if ($tem>0) {sg('MTK.OutTemp', $tem); }
if (gg('MobiThermC.status')=='1') {sg('MTK.PumpState','on');sg('MTK.PumpSpeed','1');}
if (gg('MobiThermC.status')=='0') {sg('MTK.PumpState','off');sg('MTK.PumpSpeed','0');}
// Включение автоматического режима
$ot=gg('MTK.OutTemp');
if ($ot >=60) {sg('MobiThermC1.Mode','1');}
callMethod('MZK.RFget');
// runScript('WhoAtHome');
callMethod('MUPV.RFget');
// Далее ставим таймер на циклический вызов
setTimeOut("loop1_timeout", "runScript('loop1');", 5); // 5 секунд
|
loop2
|
Циклический опрос медленных датчиков 60 сек.
// loop2
// рекомендуемый интервал 60 секунд.
// опрос WSS Южной погодной станции
$tmp=getURL('http://192.168.1.207/getinfo',0);
// sg('WSS.HTTP_ACK', $tmp);
sg('WSS.AckData', $tmp);
echo($tmp);
sg('ThisComputer.TempOutside', gg('WSS.tempOutside'));
// опрос WSN северной погодной станции
$tmp=getURL('http://192.168.1.208/getinfo',0);
// sg('WSN.HTTP_ACK', $tmp);
sg('WSN.AckData', $tmp);
// Цветовой индикатор температуры в зале (дома)
$zt=gg('Livingroom.Temperature');
sg('Livingroom.value',$zt); // ставим температуру для внешних устройств (Яндекс и т.п.)
$ColorTemp='mid';
if ((int)$zt<20) {$ColorTemp='lo';}
if ((int)$zt<16) {$ColorTemp='exlo';}
if ((int)$zt>22) {$ColorTemp='ok';}
if ((int)$zt>27) {$ColorTemp='hi';}
sg('TFlags.InTempColorFlg',$ColorTemp);
/*
// опрос мониторов питания
$l1pm=getURL('http://192.168.1.201/pmonitor',1);
sg('Lamp1.pmonitor', (int)!$l1pm); // 0- все ОК, 1-Внимание!
$l2pm=getURL('http://192.168.1.202/pmonitor',1);
sg('Lamp2.pmonitor', (int)!$l2pm);
// $l3pm=getURL('http://192.168.1.203/pmonitor',1); sg('Lamp3.pmonitor', (int)!$l3pm);
$l5pm=getURL('http://192.168.1.205/pmonitor',1);
sg('Lamp5.pmonitor', (int)!$l5pm);
$wsspm=getURL('http://192.168.1.207/pmonitor',1);
sg('WSS.pmonitor', (int)!$wsspm);
$wsnpm=getURL('http://192.168.1.208/pmonitor',1);
sg('WSN.pmonitor', (int)!$wsnpm);
// Определение высокой температуры за бортом
if (gg('WSS.tempOutside') !="") {
if ((gg('WSS.tempOutside') > gg('TempFlags.HighOutTempVal')) && gg('TempFlags.HighOutTempFlg') !=1 ) {sg('TempFlags.HighOutTempFlg','1'); }
if (gg('WSS.tempOutside') < (gg('TempFlags.HighOutTempVal')-5)) {sg('TempFlags.HighOutTempFlg','0');}
// Определение заморозков
if ((gg('WSS.tempOutside') < gg('TempFlags.LowOutTempVal')) && gg('TempFlags.LowOutTempFlg') !=1 ) {sg('TempFlags.LowOutTempFlg','1'); say('Я бы порекомендовала вам перекрыть кран в баню - заморозки',2); }
if (gg('WSS.tempOutside') > (gg('TempFlags.LowOutTempVal')+5)) {sg('TempFlags.LowOutTempFlg','0');}
} else { }
// получение внешнего IP адреса
$ip = file_get_contents('https://api.ipify.org');
if ($ip !="") {sg('ThisComputer.ExtIP', $ip);}
if (gg('ThisComputer.ExtIP') != gg('ThisComputer.LastExtIP') ) { say("Изменился внешний IP высылаем ",2);}
runScript('AboutWeather');
*/
runScript('HeaterCtrl');
// Моточасы (точнее мотоминуты циркуляционного насоса)
if (gg('MTK.PumpState') == 'on')
{
$mc=(int)gg('MTK.MotoCount');
$mc=$mc+1;
sg('MTK.MotoCount',$mc);
}
// временный переброс значений
$ot=gg('MTK.OutTemp');
sg('OutTemp.value',$ot);
$fs=0;
if ($ot >37) {$fs=1;}
if ($ot >48) {$fs=2;}
if ($ot >67) {$fs=3;}
sg('MTK.FireState',$fs);
$ob=gg('TFlags.BatTemp');
sg('BatTemp.value',$ob);
$ob=(int)$ob-4;
sg('MTK.InTemp',$ob);
// -------------------------------------------
// определение изменения температуры котла.
// $ot=gg('MTK.OutTemp');
// if ($ot > gg('MTK.LastOutTemp')) {sg('MTK.DirTemp','⮝');}
// if ($ot < gg('MTK.LastOutTemp')) {sg('MTK.DirTemp','⮟');}
// sg('MTK.LastOutTemp',$ot);
// Далее ставим таймер на циклический вызов - вызывается из cron ExecLoop2
// setTimeOut("loop2_timeout", "runScript('loop2');", 60); // 60 секунд
|
loop3
|
Обслуживание медленный процессов. Переходы OnLine/Offine и т.п.
// loop3
// Определение сетевых статусов, определение роста/снижения температур и т.п.
// обновление сетевого статуса Mobitherm
$lu=gg('MobiThermC.UpTime');
if ( ($lu == gg('MobiThermC.lUpTime')) && (gg('MobiThermC.IsOnline')=="1")) {sg('MobiThermC.IsOnline','0');}
if ( ($lu != gg('MobiThermC.lUpTime')) && (gg('MobiThermC.IsOnline')=="0")) {sg('MobiThermC.IsOnline','1');}
sg('MobiThermC.lUpTime',$lu);
// конец обновления сетевого статуса Mobitherm
// -------------------------------------------
// определение изменения температуры котла.
$ot=gg('MTK.OutTemp');
if (gg('MobiThermC.IsOnline')=="1")
{sg('MTK.DirTemp','─');} else {sg('MTK.DirTemp','?');} // ⮞ ► ─ ━
if ($ot > gg('MTK.LastOutTemp')) {sg('MTK.DirTemp','▲');} // ▲
if ($ot < gg('MTK.LastOutTemp')) {sg('MTK.DirTemp','▼');} // ▼
sg('MTK.LastOutTemp',$ot);
// -------------------------------------------
$ot=gg('Livingroom.Temperature');
sg('TFlags.InDoorTempDir','─'); // ► ─ ━
if ($ot > gg('TFlags.LastInDoorTemp')) {sg('TFlags.InDoorTempDir','>');} // ▲
if ($ot < gg('TFlags.LastInDoorTemp')) {sg('TFlags.InDoorTempDir','<');} // ▼
sg('TFlags.LastInDoorTemp',$ot);
// -------------------------------------------
$ot=gg('WSS.tempOutside');
sg('TFlags.OutDoorTempDir','─'); // ► ─ ━
if ($ot > gg('TFlags.LastOutDoorTemp')) {sg('TFlags.OutDoorTempDir','>');} // ▲
if ($ot < gg('TFlags.LastOutDoorTemp')) {sg('TFlags.OutDoorTempDir','<');} // ▼
sg('TFlags.LastOutDoorTemp',$ot);
// -------------------------------------------
sg('OutDoorTempSensor.value',gg('ThisComputer.TempOutside'));
// -------------------------------------------
// вычисление уровня для рисования
sg('Garage.SpeticLevel2svg', 100-gg('Garage.SepticLevel'));
|
MakeAutoBackup
|
Создание автоматического бекапа если требуется
// MakeAutoBackup
if (gg('TFlags.MakeAutoBackup') == '1') {
include(DIR_MODULES . 'backup/backup.class.php');
$backup_module = new backup();
$backup_module->create_backup();
sayReply("Создание бекапа",2);
sg('TFlags.MakeAutoBackup','0'); // обнуляем после бекапа
}
|
Memorize
|
Напоминания по дате и времени
// Memorize
// Вызывается by cron из скрипта Memorize.sh и в случае нахождения строки с датой выводит напоминание
// вместо него используется команда http://localhost/command.php?qry=сообщение
sayReply(gg('TFlags.MemorizeMessage'),2);
gg('TFlags.MemorizeMessage',"");
|
MIS-Restart
|
Сброс модуля MIS
// MIS-Restart
// Сброс модуля MIS
sayReply('Запрошен рестарт МИС...');
rs('MISElecon',array('param1'=>'30','param2'=>'1')); // включаем кулера
sleep(5);
rs('MISElecon',array('param1'=>'29','param2'=>'1')); // запрос на рестарт
|
MISElecon
|
Вызов функции Elecon модуля MIS
// MISElecon
// Вызов функции Elecon модуля MIS
// В качестве параметров сценарию нужно передать номер функии и параметр
// rs('MISElecon',array('param1'=>'205','param2'=>'12'));
$fn=$params['param1'];
$pr=$params['param2'];
// say($sn); // отладка
$cmd='lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/'.$fn.'/'.$pr.'"';
$ack=exec($cmd);
|
MorningAlarm
|
Код включения будильника
// MorningAlarm
// Будильник
// сработает по условию
// if (gg('ThisComputer.AlarmStatus') && timeIs(gg('ThisComputer.AlarmTime'))) {runScript('MorningAlarm');}
say('Будильник ');
rs('SoundMIS',array('param1'=>'13'));
|
MuhtarMorning
|
// MuhtarMorning
// запуск в 09:00
runScript('4Muhtar1');
callMethod('Lamp4-1.turnOff'); // утром свет не нужен - выключаем
// если WorkFlag в ночь - очищаем
if (gg('TFlags.WorkFlag')=='N') {sg('TFlags.WorkFlag',' ');say('Борт 777 посадка на полосу 36 левая.',2);}
|
Reboot
|
// ReBoot
// в файле /etc/sudoers должно быть добавлено www-data ALL = (root) NOPASSWD: /sbin/reboot
$filename = '/var/www/MDbackup/log/Restart-log.txt';
say(LANG_GENERAL_STARTING_REBOOT,2);
file_put_contents($filename, date('[Y-m-d H:i:s] ') . print_r('Запрошен рестарт сервера...', true) . PHP_EOL, FILE_APPEND | LOCK_EX);
echo("Начат рестарт сервера...");
cm('Lamp0.blynk3');
// включаем кулер
$ack=exec('/home/vladimir/scripts/coolctrl.sh 1');
// setTimeout("shutdownTimer","safe_exec('sudo /sbin/reboot +1');",15);
echo(safe_exec('sudo /sbin/reboot now'));
|
ResetMTK
|
// resetMTK
// Проверяем режим работы MTK и если он Heat - сбрасываем на PreHeat и
if (gg('MTK.PreHeat') == "H") {
$ack=getURL('http://192.168.1.5/BAR',0);
SetTimeOut('timeout001','resetMTK', 300);
// echo $ack; sayReply($ack,2);
} else {sayReply("MTK сброшен",2);};
|
RestartRouter1
|
Перезагрузка первого роутера (192.168.1.1)
// RestartRouter1
// Перезагрузка первого роутера Linet (192.168.1.1)
$filename = '/pData/MD/Log/Restart-log.txt';
file_put_contents($filename, date('[Y-m-d H:i:s] ') . print_r('Запрошен рестарт первого роутера', true) . PHP_EOL, FILE_APPEND | LOCK_EX);
$cmd='lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/3/1"';
$ack=exec($cmd);
sayReply($ack,2);
|
RestartRouter2
|
// Перезагрузить второй роутер ↑
$filename = 'pData/MD/Log/Restart-log.txt'; //
sayReply("Перезагружаю роутер LinetGate",2);
file_put_contents($filename, date('[Y-m-d H:i:s] ') . print_r('Запрошен рестарт 2 роутера', true) . PHP_EOL, FILE_APPEND | LOCK_EX);
callMethod('Socket1.turnOff');sleep(10);
callMethod('Socket1.turnOn');
sayReply("Включаю роутер LinetGate",2);
|
RestartServer
|
Рестарт сервера
// RestartServer
$filename = '/var/www/MDbackup/log/Restart-log.txt';
sayReply('Запрошен рестарт сервера...',2);
echo("Запрошен рестарт сервера через 30 секунд...");
file_put_contents($filename, date('[Y-m-d H:i:s] ') . print_r('Запрошен рестарт сервера...', true) . PHP_EOL, FILE_APPEND | LOCK_EX);
// паркуем БД
$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);
cm('Lamp0.blynk');
$ack=exec('/home/vladimir/scripts/coolctrl.sh 1');
setTimeOut("Restarttmr", "runScript('Reboot');", 30); // 30 секунд
|
SergSleep
|
Сереге пора спать - сигналим.
// SergSleep
// запуск переодически в 22:25
sayReply('Серёге пора спать - сигналим',2);
$url='http://192.168.1.203/blynk3';
$ack=getURL($url,0);
SetTimeOut('timeout001','callMethod("Socket1.turnOff");', 300);
file_put_contents('/pData/MD/Log/Restart-log.txt', date('[Y-m-d H:i:s] ') . print_r('Перезагрузка роутера 2 по времени ', true) . PHP_EOL, FILE_APPEND | LOCK_EX);
SetTimeOut('timeout001','callMethod("Socket1.turnOn");',10);
|
SergSleep2
|
// SergSleep2
// запуск переодически в 22:30
// Lamp3.status
if (gg('Lamp3.status') == 1 ) {
sayReply('Серёга не спит - сигналим',2);
callMethod("Socket1.turnOff");
file_put_contents('/pData/MD/Log/Restart-log.txt', date('[Y-m-d H:i:s] ') . print_r('Отключение роутера 2 по времени ', true) . PHP_EOL, FILE_APPEND | LOCK_EX);
$url='http://192.168.1.203/blynk3';
$ack=getURL($url,0);
setTimeOut("timeout002", "runScript('SergSleep2');", 300); // минута
} else {sayReply('Свет в детской выключен.',2);
file_put_contents('/pData/MD/Log/Restart-log.txt', date('[Y-m-d H:i:s] ') . print_r('Включение роутера 2 по событию ', true) . PHP_EOL, FILE_APPEND | LOCK_EX);
callMethod("Socket1.turnOn");
}
|
Shutdown
|
Отключение сервера MajorDomo
// Shutdown
// Вызывается из сценария ShutdownServer с таймаутом 30 секунд
// в файле /etc/sudoers должно быть добавлено www-data ALL = (root) NOPASSWD: /sbin/shutdown
// sayReply('Начинаю отключение сервера',2);
say(LANG_GENERAL_STARTING_SHUTDOWN,2); // GENERAL_STARTING_SHUTDOWN
cm('Lamp0.blynk3');
// включаем кулер
$ack=exec('/home/vladimir/scripts/coolctrl.sh 1');
$ack=exec('sudo /sbin/shutdown -P now'); // www-data
echo $ack;
|
ShutdownServer
|
Запрос на отключение сервера через 30 секунд. Паркует БД и вызывает скрипт Shutdown через 30 секунд
// ShutdownServer
// Запрос на отключение сервера через 30 секунд. Паркует БД и вызывает скрипт Shutdown через 30 секунд
$filename = '/var/www/MDbackup/log/Restart-log.txt';
sayReply('Запрошено отключение сервера...',2);
file_put_contents($filename, date('[Y-m-d H:i:s] ') . print_r('Запрошено отключение сервера...', true) . PHP_EOL, FILE_APPEND | LOCK_EX);
// паркуем БД
$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);
cm('Lamp0.blynk');
$ack=exec('/home/vladimir/scripts/coolctrl.sh 1');
setTimeOut("ShutDntmr", "runScript('Shutdown');", 30); // 30 секунд
|
SoundMIS
|
Воспроизводит звук посредством модуля MIS
// SoundMIS
// Воспроизводит звук посредством модуля MIS
// В качестве параметра сценарию нужно передать номер звука
// rs('SoundMIS',array('param1'=>'2'));
$sn=$params['param1'];
// say($sn); // отладка
$cmd='lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/205/'.$sn.'"';
$ack=exec($cmd);
|
StartMyLoops
|
// StartMyLoops
// Скрипт должен запускать таймерные скрипты после перезапуска системы
// в onNewMinute нужно вставить в конце строку runScript('StartMyLoops'); // автоматический рестарт скриптов если был перезапуск системы
$tme=gg('TFlags.LoopTime');
$tml=gg('TFlags.LoopLTime');
if ($tme==$tml) {
setTimeOut("loop2_timeout", "runScript('loop2');", 3); // через 3 секунды
setTimeOut("loop1_timeout", "runScript('loop1');", 7); // через 7 секунд
// SayReply('Перезапущены таймерные скрипты',2);
$tme='23:60';
}
sg('TFlags.LoopLTime',$tme);
|
SunScript
|
Установка времени восхода и заката солнца
// SunScript
// Установка времени восхода и заката солнца
// запускать в 3 часа и в 5.25
$filename = '/aData/Share/MD/Log/Sun-log.txt';
$ack=getURL('https://yandex.com/time/sync.json?geo=11251',1);
$json = json_decode($ack, true);
$sr = $json['clocks']['11251']['sunrise'];
$ss = $json['clocks']['11251']['sunset'];
sg('ThisComputer.SunSetTime', $ss);
sg('ThisComputer.SunRiseTime', $sr);
// echo $sr;
// echo $ss;
// далее нужно подсчитать длительность светового дня
$hs=substr($ss,0,2);
$ms=substr($ss,3,2);
$hr=substr($sr,0,2);
$mr=substr($sr,3,2);
// echo $hs." ".$ms." ".$hr." ".$mr;
$dl=($hs*60+$ms)-($hr*60+$mr);
$hd=floor($dl/60);
$md=$dl-$hd*60;
// echo $hd.":".$md;
sg('ThisComputer.longitude',$hd.":".$md);
$msg = ' Восход '.$sr.' Закат '.$ss.' Долгота дня '.$hd.":".$md;
file_put_contents($filename, date('[Y-m-d H:i:s] ') . print_r($msg, true) . PHP_EOL, FILE_APPEND | LOCK_EX);
|
TestHomeLighting
|
Проверка освещения в доме
// TestHomeLighting Проверка освещения в доме
// rs('SoundMIS',array('param1'=>'12'));
// $sn=$params['param1'];
sayReply("Проверяю освещение в доме",2);
// задержка
sleep(5);
// Настольная лампа
$ip="192.168.1.201";
sayReply("настольную лампу",2);
$ack=exec('/usr/bin/lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/1/1"');
if ($ack == "") {$msg="выключатель лампы недоступен"; sayReply($msg,2);} else {$msg="выключатель лампы доступен"; sayReply($msg,2);}
sleep(5);
$ack=exec('lynx -auth=root:4dragino -source "http://192.168.1.210/arduino/Elecon/1/0" ');
sleep(5);
// ==========================================================================================
// Зал
$ip="192.168.1.201";
$msgr="в зале";
$msg="включаю свет ".$msgr;
sayReply($msg,2);
$url='http://'.$ip.'/CtrlPinOn';
$ack=getURL($url,0);
if ($ack == "") {$msg="выключатель ".$msgr." недоступен"; sayReply($msg,2);} else {$msg="выключатель ".$msgr." доступен"; sayReply($msg,2);}
$url='http://'.$ip.'/CtrlPinOff';
sleep(5);
$ack=getURL($url,0);
sleep(5);
// ==========================================================================================
// Кухня
$ip="192.168.1.202";
$msgr="на кухне";
$msg="включаю свет ".$msgr;
sayReply($msg,2);
$url='http://'.$ip.'/CtrlPinOn';
$ack=getURL($url,0);
if ($ack == "") {$msg="выключатель ".$msgr." недоступен"; sayReply($msg,2);} else {$msg="выключатель ".$msgr." доступен"; sayReply($msg,2);}
$url='http://'.$ip.'/CtrlPinOff';
sleep(5);
$ack=getURL($url,0);
sleep(5);
// ==========================================================================================
// Детская
$ip="192.168.1.203";
$msgr="в детской";
$msg="включаю свет ".$msgr;
sayReply($msg,2);
$url='http://'.$ip.'/CtrlPinOn';
$ack=getURL($url,0);
if ($ack == "") {$msg="выключатель ".$msgr." недоступен"; sayReply($msg,2);} else {$msg="выключатель ".$msgr." доступен"; sayReply($msg,2);}
$url='http://'.$ip.'/CtrlPinOff';
sleep(5);
$ack=getURL($url,0);
sleep(5);
// ==========================================================================================
// Котельная
$ip="192.168.1.205";
$msgr="в котельной";
$msg="включаю свет ".$msgr;
sayReply($msg,2);
$url='http://'.$ip.'/CtrlPinOn';
$ack=getURL($url,0);
if ($ack == "") {$msg="выключатель ".$msgr." недоступен"; sayReply($msg,2);} else {$msg="выключатель ".$msgr." доступен"; sayReply($msg,2);}
$url='http://'.$ip.'/CtrlPinOff';
sleep(5);
$ack=getURL($url,0);
sleep(5);
// ==========================================================================================
// Коридор
$ip="192.168.1.204";
$msgr="в коридоре";
$msg="включаю свет ".$msgr;
sayReply($msg,2);
$url='http://'.$ip.'/CtrlPinOn1';
$ack=getURL($url,0);
if ($ack == "") {$msg="выключатель ".$msgr." недоступен"; sayReply($msg,2);} else {$msg="выключатель ".$msgr." доступен"; sayReply($msg,2);}
$url='http://'.$ip.'/CtrlPinOff1';
sleep(5);
$ack=getURL($url,0);
sleep(5);
// ==========================================================================================
// Коридор
$ip="192.168.1.204";
$msgr="на улице";
$msg="включаю свет ".$msgr;
sayReply($msg,2);
$url='http://'.$ip.'/CtrlPinOn2';
$ack=getURL($url,0);
if ($ack == "") {$msg="выключатель ".$msgr." недоступен"; sayReply($msg,2);} else {$msg="выключатель ".$msgr." доступен"; sayReply($msg,2);}
$url='http://'.$ip.'/CtrlPinOff2';
sleep(5);
$ack=getURL($url,0);
sleep(5);
// ==========================================================================================
sayReply("Проверка освещения в доме закончена",2);
sayReply("Через 30 секунд будет очищена история проверки",2);
sleep(30);
$ack=exec('/home/scripts/CleanHistLight.sh');
|
UpdateLevels
|
Каждый день инкрементирует уровень септика (для получения примерного значения)
// UpdateLevels
// каждые сутки в 00:05 добавляет к значению уровня в септике 3,33 % если уровень <100 %
// для вычисления примерного значения уровня септика
// и убавляет 0,55 из значения уровня газ-баллона
cm('Gas.ChangeLevel'); cm('Septic.ChangeLevel');
|
UpDateMD
|
// UpDateMD
// Обновление ресурсов MD
// вызывает sh-скрипт updatemd
$cmd='/home/vladimir/scripts/updatemd';
$ack=exec($cmd);
say('Updated');
|
Watching movie
|
say(LANG_GENERAL_SETTING_UP_LIGHTS,2);
// to-do
|
WhoAtHome
|
// WhoAtHome
// проверка и формирование списка присутствующих дома.
//для начала проверим не зашел ли кто без пропуска (по телефону)
if (gg('Vladimir.where') == "вышел")
{
$tmp=exec('/home/vladimir/scripts/IsOnLine 192.168.1.128');
if ($tmp == "on") { sg('Vladimir.where','дома');}
}
// --------------
if (gg('Zinaida.where') == "вышла")
{
$tmp=exec('/home/vladimir/scripts/IsOnLine 192.168.1.105');
if ($tmp == "on") { sg('Zinaida.where','дома');}
}
// --------------
if (gg('Sergey.where') == "вышел")
{
$tmp=exec('/home/vladimir/scripts/IsOnLine 192.168.1.127');
if ($tmp == "on") { sg('Sergey.where','дома');}
}
// -------------- далее формируем список в файл
$msg="на данный момент ";$us=0;
if ((gg('Vladimir.where') == "дома") && (gg('Zinaida.where') == "дома") && (gg('Sergey.where') == "дома"))
{
$msg = $msg."все дома";$us=3;
}
if ($us<1) {
$msg = $msg."дома ";
if (gg('Vladimir.where') == "дома") {$msg = $msg."Владимир ";$us+=1; }
if (gg('Zinaida.where') == "дома") {if ($us==1) {$msg = $msg."и ";} $msg = $msg."Зинаида ";$us+=1; }
if (gg('Sergey.where') == "дома") {if ($us==1) {$msg = $msg."и ";} $msg = $msg."Сергей ";$us+=1; }
}
// Отвечаем в эхе для HTML запроса и в ответах MJD
// echo $msg;
sayReply($msg,2);
/*
// далее пишем полученное сообщение в файл 192.168.1.216/html/ram/athome.txt
$fd = fopen("/var/www/html/ram/athome.txt", 'w') or die("не удалось создать файл");
fwrite($fd, $msg);
fclose($fd);
*/
|