getTempOutside
|
Данные с датчика Т (на улице), вывод в ТЛГ, голосом, в лог
$pass = "sec"; $ip = "10.1.3.6"; $port = "14";
$newvalue=file_get_contents("http://".$ip."/".$pass."/?pt=".$port."&cmd=get");
$position = strpos($newvalue, "temp:");
$newvalue = round( substr($newvalue,$position+5,5) , 0);
$VoiceMsg = "Тепература на улице: ".$newvalue." градусов.";
$TlgMsg = "#Метео #Info getTempOutside \nТемпература на улице ".$newvalue." градусов.";
$DayTempMin = round( getHistoryMin("SF0R2F1_Temp.value", -24*60*60), 1);
$DayTempMax = round( getHistoryMax("SF0R2F1_Temp.value", -24*60*60), 1);
$DayTempAvg = round( getHistoryValue("SF0R2F1_Temp.value",-24*60*60), 1);
$NightTempMin = round( getHistoryMin("SF0R2F1_Temp.value", strtotime("00:01")), 1);
$NightTempAvg = round( getHistoryValue("SF0R2F1_Temp.value",strtotime("00:01")), 1);
//$VoiceMsg .= "Минимальная температура за последние сутки:".$DayTempMin." градусов. Максимальная:" .$DayTempMax;
$TlgMsg .= "\n\nТемпература за последние сутки:\n Минимальная ".$DayTempMin." \n Максимальная " .$DayTempMax."\n Средняя " .$DayTempAvg;
$TlgMsg .= "\n\nТемпература с полуночи:\n Минимальная ".$NightTempMin."\n Средняя " .$NightTempAvg;
if ( $NightTempMin <0 and $NightTempAvg >1 ) {
$TlgMsg .= "\n\nНочью температура опускалась ниже нуля!";
$VoiceMsg.= "Ночью температура опускалась ниже нуля!";
}
Say($VoiceMsg, 1);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin($TlgMsg, null, '', false);// со звуком
$telegram_module->sendMessageToUser(178955684, $text, null, '', true); // без звука Жанна
$telegram_module->sendMessageToUser(765243719, $text, null, '', true); // без звука Настя
|
getWaterHistory
|
$WaterMin = round( getHistoryMin("SF0R2F1_Hum.value ", -7*24*60*60), 1);
$WaterMax = round( getHistoryMax("SF0R2F1_Hum.value ", -7*24*60*60), 1);
$WaterAvg = round( getHistoryValue("SF0R2F1_Hum.value ",-7*24*60*60), 1);
$WaterHist = getHistoryCount("SF0R2F1_Hum.value",-7*24*60*60);
$TlgMsg = $WaterMin." | ".$WaterMax." | ".$WaterAvg." | ".$WaterHist;
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin($TlgMsg, null, '', false);// со звуком
|
Job_Read_Gerkon_v1
|
Снимаем показания счетчика воды (геркон), записываем в переменные, отправляем в ТЛГ
// скрипт чтения данных датчика-геркона (вода, счетчик)
// v.2 (2023-05-07, 2022-02-27)
// алгоритм: отсчитываем ДЕЛЬТУ еженедельно, прибавляем к initial_v = 549
// необходимо записать показания на начало отсчета, Объекты -> SDevices -> SCounters -> SF1R2F1_water
// заполняем:
// - SF1R2F1_water.meter_initial_value - значение на счетике
// - SF1R2F1_water.initial_value - значение на контроллере АБ-ЛОГ 10.1.3.7 порт 2
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$Message = "Запустили цикл опроса датчиков класса SCounters \n ";
$telegram_module = new telegram();
$objects=getObjectsByClass("SCounters");
$i = 0;
$position = null;
foreach($objects as $obj) {
$i = $i+1;
$objtitlex = $obj['TITLE'];
$timex = getGlobal($obj['TITLE'].".updatedText");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$pass = getGlobal($obj['TITLE'].".Password");
$port = getGlobal($obj['TITLE'].".Port");
$min = getGlobal($obj['TITLE'].".minValue");
$max = getGlobal($obj['TITLE'].".maxValue");
$meter_initial_value = getGlobal($obj['TITLE'].".meter_initial_value"); // начальное значение со счетчика
$initial_value = getGlobal($obj['TITLE'].".initial_value"); // начальное значение с датчика счетчика
$stored_value_before = getGlobal($obj['TITLE'].".value");
$meter_value_2change = getGlobal($obj['TITLE'].".meter_value_2changefilter");
// читаем значение датчика с порта Ab-Log по URL
// Пример: OFF/614
$newvalue=file_get_contents("http://".$ip."/".$pass."/?pt=".$port."&cmd=get");
// ищем срочку ON/ но по факту N/
$position = strpos($newvalue, "N/");
if ($position != '') {
// $Message .= " НАШЛИ подстроку ON";
// обрезаем строчку, начиная с 4-го символа и до конца строки
$newvalue = substr($newvalue,$position+2);
}
$position = strpos($newvalue, "FF/");
if ($position!= '') {
// $Message .= "| НАШЛИ подстроку OFF";
// обрезаем строчку, начиная с 4-го символа и до конца строки
$newvalue = substr($newvalue,$position+3);
}
//округляем значение до целых значений
$newvalue = round($newvalue, 0);
//отладочное сообщение в лог X-RAY
$Message .= "№".$i." | ".$objtitlex." | New = ".$newvalue." | Old = ".$stored_value_before." | Old value stored at = ".$timex." | ";
// ФОРМАТО-ЛОГИЧЕСКИЙ КОНТРОЛЬ
if ($newvalue > $max || $newvalue < $min) {
$Message .= "Warning! Превышен диапазон ГЕРКОН-датчика ".$name." | значение=".$newvalue." \n ";
$text = "#Water #Warning \n Счетчик холодной воды \n ";
$text .= "Какая-то херня: превышен диапазон ГЕРКОН-датчика ".$name." | значение=".$newvalue." \n ";
$telegram_module->sendMessageToAdmin($text, null, '', false);// со звуком
// $telegram_module->sendMessageToUser(178955684, $text, null, '', true); // без звука
}
elseif ($newvalue < $stored_value_before) {
$Message .= "Warning! Значение в диапазоне, но МЕНЬШЕ сохраненного ранее (".$newvalue." < ".$stored_value_before.") \n ";
$text = "#Water #Warning \n Счетчик холодной воды \n ";
$text .= "Значение в диапазоне, но МЕНЬШЕ сохраненного ранее New=".$newvalue." | Текущее=".$stored_value_before." \n ";
$text .= "Установите значения meter_initial_value, initial_value и сбросьте SF1R2F1_water.value в ноль";
$telegram_module->sendMessageToAdmin($text, null, '', false);// со звуком
// $telegram_module->sendMessageToUser(178955684, $text, null, '', true); // без звука
}
else {
// all above conditions are false; newvalue -> value
$meter_delta = ($newvalue - $initial_value)/100;
$meter_new_value = $meter_initial_value + $meter_delta;
$Message .= "дельта по счетчику = ".$meter_delta." | значение счетчика воды (рассчитали) = ".$meter_new_value." \n ";
setGlobal($obj['TITLE'].".meter_value",$meter_new_value);
setGlobal($obj['TITLE'].".value",$newvalue);
$text = "#Water \n Счетчик холодной воды \n ";
$text .= "Расчетное значение <b> ".$meter_new_value."</b> кубо-метров \n ";
// если пора менять фильтр воды
if ($meter_new_value > $meter_value_2change) {
$text .= "\n <b>Пора менять магистральный фильтр воды </b> \n";
$text .= "Рекомендованный интервал превышен на <b> ".round(($meter_new_value-$meter_value_2change),2)." </b> куб.";
$telegram_module->sendMessageToUser(178955684, $text, null, '', true); // без звука
}
else $text .= "До замены фильтра осталось: <b> ".round(($meter_value_2change-$meter_new_value),2)." </b> куб.";
$telegram_module->sendMessageToAdmin($text, null, '', false);// со звуком
}
}
$Message .= "ИТОГО опрошено ".$i." датчиков класса SDevices \n";
DebMes($Message);
|
Job_Read_Hum_Sensors_v1.2
|
// скрипт обновления I2C датчиков (скрипт про влажность)
// 2019-09-21 начальная версия
// 2020-02-09 оптимизация записи в журнал (лог)
$Message = "запускаем цикл опроса датчиков класса SHumSensors \n";
// DebMes($Message); **
$objects=getObjectsByClass("SHumSensors");
$i = 0;
foreach($objects as $obj) {
$i = $i+1;
$objtitle = $obj['TITLE'];
$name = getGlobal($obj['TITLE'].".Name");
$port = getGlobal($obj['TITLE'].".Port");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$pass = getGlobal($obj['TITLE'].".Password");
$min = getGlobal($obj['TITLE'].".minValue");
$max = getGlobal($obj['TITLE'].".maxValue");
// читаем значение датчика с порта Ab-Log по URL
$newvalue=file_get_contents("http://".$ip."/".$pass."/?pt=".$port."&cmd=get");
// ищем срочку "hum:"
$position = strpos($newvalue, "hum:");
// обрезаем строчку, начиная с пятого символа
$newvalue = substr($newvalue,$position+4,6);
//округляем значение до одной десятой
$newvalue = round($newvalue, 1);
// если значение не корректное, то не обновляем значение объекта и выводим предупреждение
// если значение в пределах диапазона, то устанавливаем свойство объекта
if ($newvalue > $max || $newvalue < $min) {
$Message .= "Warning! Превышен диапазон для датчика ".$name." | значение=".$newvalue;
$Message .= " \n ";
// DebMes($Message); **
}
else setGlobal($obj['TITLE'].".value",$newvalue);
//отладочное сообщение в лог X-RAY
$Message .= "i=".$i." | object=".$objtitle." | Name=".$name." | IP= ".$ip." | Port=".$port." | Pas=".$pass." | value=".$newvalue;
$Message .= " \n ";
// DebMes($Message); **
}
$Message .= "опрошено ".$i." датчиков \n";
DebMes($Message);
setTimeOut('Title3: Скрипт опроса датчиков Влажности','runScript("Job_Read_Hum_Sensors_v1.2");',2*60*60);
|
Job_Read_LightOn_v.1_Silent
|
// скрипт чтения включенного света - объектов класса Light
// 2020-01-08 начальная версия
// 2020-01-12 добавлены IF "всё выключено"
$Message = " \n !!! перечень включенного света !!! \n ";
$VoiceMsg = " Озвучиваю перечень включенного света. ";
$objects=getObjectsByClass("Light");
$i = 0; // счетчик общего кол-ва найденных объектов. Находит 5 раз!
$n = 0; // счетчик общего кол-ва ВКЛЮЧЕННЫХ объектов
$v = 0; // счетчик кол-ва включенных на КАЖДОМ этаже
$f = 0; // счетчик этажей, включая улицу "0"
for ($f=0; $f<5; $f++)
{
$i = 0;
$v = 0;
foreach($objects as $obj) {
$i = $i+1;
$objtitle = $obj['TITLE'];
$port = getGlobal($obj['TITLE'].".Port");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$status = getGlobal($obj['TITLE'].".Status");
$floor = substr($objtitle,2,1);
// вывод списка всех объектов класса Light по условию ЭТАЖ и СТАТУС=включено
if ($floor == $f and $status) {
$n = $n+1;
$v = $v+1;
$Message .= "f=".$f." | i=".$i." | object=".$objtitle." | floor=".$floor." | IP= ".$ip." | Port=".$port." | status=".$status." \n ";
}
} // foreach
if (0 == $f) {
$Message .= "Улица. Включено " .$v." \n ";
if (0 == $v) $VoiceMsg .= "Улица: всё выключено. ";
else $VoiceMsg .= "Улица: включено " .$v." . ";
}
else {
$Message .= " Этаж ".$f. ". Включено " .$v." \n ";
if (0 == $v) $VoiceMsg .= " Этаж ".$f. ": всё выключено. ";
else $VoiceMsg .= " Этаж ".$f. ": включено " .$v." . ";
}
} // цикл по 0<=f<5
$Message .= " !!! ОПРОШЕНО ".$i." ОБЪЕКТОВ КЛАССА Light. Из них включено: " .$n. " объектов !!! ";
$VoiceMsg .= " Итого включено ".$n." объектов освещения из ".$i." опрошенных. Спасибо за внимание.";
DebMes($Message);
//Say($VoiceMsg, 2);
|
Job_Read_Motion_v1
|
// скрипт чтения данных датчиков ДВИЖЕНИЯ
// v.1 (2021-11-14)
$Message = "запускаем цикл опроса датчиков класса SMotions";
$Message .= " \n ";
//DebMes($Message);
$objects=getObjectsByClass("SMotions");
$i = 0;
foreach($objects as $obj) {
$i = $i+1;
$objtitlex = $obj['TITLE'];
$timex = getGlobal($obj['TITLE'].".updatedText");
$namex = getGlobal($obj['TITLE'].".name");
//отладочное сообщение в лог X-RAY
$Message .= "| ".$i." | ".$objtitlex." | ".$namex." | ".$timex;
$Message .= " \n ";
}
$Message .= "опрошено ".$i." датчиков";
$Message .= " \n ";
DebMes($Message);
//setTimeOut('Title1: скрипт опроса датчиков Т','runScript("Job_Read_Motion_v1");',60*60);
|
Job_Read_Press_Sensors_v1.2
|
// скрипт обновления I2C датчиков (скрипт про давление)
// 2019-09-21 начальная версия
// 2020-02-09 оптимизация записи в журнал (лог)
$Message = "запускаем цикл опроса датчиков класса SPressureSensors";
$Message .= " \n ";
// DebMes($Message);
$objects=getObjectsByClass("SPressureSensors");
$i = 0;
foreach($objects as $obj) {
$i = $i+1;
$objtitle = $obj['TITLE'];
$name = getGlobal($obj['TITLE'].".Name");
$port = getGlobal($obj['TITLE'].".Port");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$pass = getGlobal($obj['TITLE'].".Password");
$min = getGlobal($obj['TITLE'].".minValue");
$max = getGlobal($obj['TITLE'].".maxValue");
// читаем значение датчика с порта Ab-Log по URL
$newvalue=file_get_contents("http://".$ip."/".$pass."/?pt=".$port."&cmd=get");
// ищем срочку "press:"
$position = strpos($newvalue, "press:");
// обрезаем строчку, начиная с шестого символа
$newvalue = substr($newvalue,$position+6,6);
//округляем значение до целых значений
$newvalue = round($newvalue, 0);
// если значение не корректное, то не обновляем значение объекта и выводим предупреждение
// если значение в пределах диапазона, то устанавливаем свойство объекта
if ($newvalue > $max || $newvalue < $min) {
$Message .= "Warning! Превышен диапазон для датчика ".$name." | значение=".$newvalue;
$Message .= " \n ";
// DebMes($Message);
}
else setGlobal($obj['TITLE'].".value",$newvalue);
//отладочное сообщение в лог X-RAY
$Message .= "i=".$i." | object=".$objtitle." | Name=".$name." | IP= ".$ip." | Port=".$port." | Pas=".$pass." | value=".$newvalue;
$Message .= " \n ";
//DebMes($Message);
}
$Message .= "опрошено ".$i." датчиков";
DebMes($Message);
setTimeOut('Title2: скрипт опроса датчиков Давления','runScript("Job_Read_Press_Sensors_v1.2");',3*60*60);
|
Job_Read_Temp_ABLOG_v1.2
|
// скрипт обновления датчиков (Температуры) в AB-LOG
// копия от Job_Read_Temp v.1.2 (сделана 2021-11-07)
$Message = "запускаем цикл опроса датчиков класса STempAbLog";
$Message .= " \n ";
//DebMes($Message);
$objects=getObjectsByClass("STempAbLog");
$i = 0;
foreach($objects as $obj) {
$i = $i+1;
$objtitle = $obj['TITLE'];
$name = getGlobal($obj['TITLE'].".Name");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$pass = getGlobal($obj['TITLE'].".Password");
$min = getGlobal($obj['TITLE'].".minValue");
$max = getGlobal($obj['TITLE'].".maxValue");
// читаем значение датчика с порта Ab-Log по URL
$newvalue=file_get_contents("http://".$ip."/".$pass."/?tget=1");
//берем 5 последних цифр
//$newvalue = substr($newvalue,-5);
// ищем срочку "temp:"
// $position = strpos($newvalue, "temp:");
// обрезаем строчку, начиная с шестого символа
// $newvalue = substr($newvalue,$position+5,5);
//округлим Т до одной десятой
$newvalue = round($newvalue, 1);
// если значение не корректное, то не обновляем значение объекта и выводим предупреждение
// если значение в пределах диапазона, то устанавливаем свойство объекта
if ($newvalue > $max || $newvalue < $min) {
$Message .= "Warning! Превышен диапазон температуры для датчика ".$name." | значение=".$newvalue;
$Message .= " \n ";
// DebMes($Message);
}
else setGlobal($obj['TITLE'].".value",$newvalue);
//отладочное сообщение в лог X-RAY
// $Message .= "i=".$i." | object=".$objtitle." | Name=".$name." | IP= ".$ip." | Pas=".$pass." | value=".$newvalue;
// $Message .= " \n ";
// DebMes($Message);
}
$Message .= "опрошено ".$i." датчиков\n";
DebMes($Message);
setTimeOut('Title1: скрипт опроса датчиков Т','runScript("Job_Read_Temp_ABLOG_v1.2");',60*60);
|
Job_Read_Temp_Sensors_v1.2
|
// скрипт обновления 1Wire датчиков (Температуры)
// 2019-09-21 добавлен цикл для чтения датчиков
// 2020-02-09 оптимизация записи в журнал (лог)
$Message = "запускаем цикл опроса датчиков класса STempSensors";
$Message .= " \n ";
//DebMes($Message);
$objects=getObjectsByClass("STempSensors");
$i = 0;
foreach($objects as $obj) {
$i = $i+1;
$objtitle = $obj['TITLE'];
$name = getGlobal($obj['TITLE'].".Name");
$port = getGlobal($obj['TITLE'].".Port");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$pass = getGlobal($obj['TITLE'].".Password");
$min = getGlobal($obj['TITLE'].".minValue");
$max = getGlobal($obj['TITLE'].".maxValue");
// читаем значение датчика с порта Ab-Log по URL
$newvalue=file_get_contents("http://".$ip."/".$pass."/?pt=".$port."&cmd=get");
//берем 5 последних цифр
//$newvalue = substr($newvalue,-5);
// ищем срочку "temp:"
$position = strpos($newvalue, "temp:");
// обрезаем строчку, начиная с шестого символа
$newvalue = substr($newvalue,$position+5,5);
//округлим Т до одной десятой
$newvalue = round($newvalue, 1);
// если значение не корректное, то не обновляем значение объекта и выводим предупреждение
// если значение в пределах диапазона, то устанавливаем свойство объекта
if ($newvalue > $max || $newvalue < $min) {
$Message .= "Warning! Превышен диапазон температуры для датчика ".$name." | значение=".$newvalue;
$Message .= " \n ";
// DebMes($Message);
}
else setGlobal($obj['TITLE'].".value",$newvalue);
//отладочное сообщение в лог X-RAY
$Message .= "i=".$i." | object=".$objtitle." | Name=".$name." | IP= ".$ip." | Port=".$port." | Pas=".$pass." | value=".$newvalue;
$Message .= " \n ";
// DebMes($Message);
}
$Message .= "опрошено ".$i." датчиков";
$Message .= " \n ";
DebMes($Message);
setTimeOut('Title1: скрипт опроса датчиков Т','runScript("Job_Read_Temp_Sensors_v1.2");',60*60);
|
Prg_ReadInCycles_v.20190921
|
//вывод значений свойств объектов требуемого класса. Проверка что все заполнено корректно.
$Message = "запускаем цикл опроса датчиков класса STempSensors";
DebMes($Message);
$objects=getObjectsByClass("STempSensors");
$i = 0;
foreach($objects as $obj) {
$i = $i+1;
$objtitle = $obj['TITLE'];
$name = getGlobal($obj['TITLE'].".Name");
$port = getGlobal($obj['TITLE'].".Port");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$pass = getGlobal($obj['TITLE'].".Password");
$min = getGlobal($obj['TITLE'].".minValue");
$max = getGlobal($obj['TITLE'].".maxValue");
$Message = "i=".$i." | object=".$objtitle." | Name=".$name." | IP= ".$ip." | Port=".$port." | Pas=".$pass." | Min=".$min." | Max=".$max;
DebMes($Message);
}
$Message = "опрошено ".$i." датчиков";
DebMes($Message);
|
Test_Write_Deb
|
$Message = "Тест | нажатие ";
//$Message .= " это <[1500]> машина \n";
//$Message .= " Спасибо за внимание";
//say($Message, 2);
DebMes($Message);
|
0F_Stairs_1-2
|
Свет лестницы этажей 1-2
$DarkValue=getGlobal('ThisComputer.isDark');
if ($DarkValue) {
$Message = "MotionDetectedAndLightStairs1-2. Движение. Сейчас ТЕМНО, включим свет. DarkValue=" . $DarkValue;
$ch = curl_init();
сurl_setopt($ch, CURLOPT_URL, "http://10.1.3.8/sec/&cmd=11:1;p300;11:0");
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 500);
curl_exec($ch);
curl_close($ch);
}
else {
$Message = "MotionDetectedAndLightStairs1-2. Движение. Сейчас СВЕТЛО, свет не нужен. DarkValue=" . $DarkValue;
}
// записать в основной лог MJD
//DebMes($Message);
|
0F_Stairs_1-3
|
Свет лестницы этажей 1-2 и 2-3
//require(DIR_MODULES.'devices/SDevices_statusUpdated.php');
$DarkValue=getGlobal('ThisComputer.isDark');
$SleepMode=getGlobal('ThisComputer.SleepOn2ndFloor');
//DarkValue==1 если темно
if ($DarkValue and $SleepMode==0) {
$Message = "MotionDetectedAndLightStairs1-3. Движение. Сейчас ТЕМНО, включим свет. DarkValue=" . $DarkValue;
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "10.1.3.6/sec/&cmd=25:1;p260;25:0"); // лестница 2-3
curl_setopt($ch2, CURLOPT_TIMEOUT_MS, 500);
curl_exec($ch2);
}
//если светло, то DarkValue==0
else {
$Message = "MotionDetectedAndLightStairs1-3. Движение. Сейчас СВЕТЛО, свет не нужен. DarkValue=" . $DarkValue;
}
//свет на лестнице 1-2 включаем всегда, независимо от кол-ва света
$ch4 = curl_init();
curl_setopt($ch4, CURLOPT_URL, "10.1.3.8/sec/&cmd=11:1;p300;11:0"); // лестница 1-2
curl_setopt($ch4, CURLOPT_TIMEOUT_MS, 500);
curl_exec($ch4);
sleep(1);
curl_close($ch4);
curl_close($ch2);
// записать в основной лог MJD
// DebMes($Message);
|
0F_Stairs_2-4
|
Свет лестницы этажей 2-3 и 3-4
$DarkValue=getGlobal('ThisComputer.isDark');
$SleepMode=getGlobal('ThisComputer.SleepOn2ndFloor');
//если темно, то DarkValue==1
if ($DarkValue) {
$Message = "Stairs_2-4. Движение. ТЕМНО, включим свет. DarkValue=" . $DarkValue;
$ch4 = curl_init();
curl_setopt($ch4, CURLOPT_URL, "10.1.3.2/sec/&cmd=26:1;p250;26:0"); // лестница 3-4
curl_setopt($ch4, CURLOPT_TIMEOUT_MS, 500);
$result4 = curl_exec($ch4);
sleep(1);
if (!$result4) $Message .= "\n Negative Result_4 of Curl_exec Stairs 3-4 = [".$result4."] (1-TRUE\OK, 0-FALSE\NOT OK) \n";
curl_close($ch4);
if ( $SleepMode == 0) {
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "10.1.3.6/sec/&cmd=25:1;p260;25:0"); // лестница 2-3
curl_setopt($ch2, CURLOPT_TIMEOUT_MS, 500);
$result2 = curl_exec($ch2);
sleep(1);
if (!$result2) $Message .= "\n Negative Result_2 of Curl_exec Stairs 2-3 = [".$result2."] (1-TRUE\OK, 0-FALSE\NOT OK) \n";
curl_close($ch2);
}
}
//если светло, то DarkValue==0
else {
//$Message = "Stairs_2-4. Движение. СВЕТЛО, свет не нужен";
}
// записать в основной лог MJD если пошли по ветке ТЕМНО
if ($DarkValue) {
if (!$result1 or !$result2) DebMes($Message);
}
|
0F_Stairs_3-4
|
Свет лестницы этажей 3-4
// ИЗМЕНЕНИЕ 01.10.2023 - отключил вызов этого скрипта т.к. не передается вызывавший данный скрипт объект
//Скрипт вызываемый из http://10.1.3.19/admin.php?pd=cGFuZWw6e2FjdGlvbj1tZWdhZH0%3Dpz_&md=megad&inst=adm&view_mode=edit_megaddevices&id=7&tab=data&property_id=654
$DarkValue=getGlobal('ThisComputer.isDark');
//если темно DarkValue==1
if ($DarkValue) {
// $Message = "0F_Stairs_3-4. Движение. ТЕМНО, включаем свет. DarkValue=".$DarkValue;
$ch5 = curl_init();
curl_setopt($ch5, CURLOPT_URL, "10.1.3.2/sec/&cmd=26:1;p250;26:0"); // лестница 3-4
curl_setopt($ch5, CURLOPT_TIMEOUT_MS, 500);
$result1 = curl_exec($ch5);
sleep(1);
curl_close($ch5);
if (!$result1) {
$Message = "#Warning #Light \nОшибка вызова сurl_exec в методе 0F_Stairs_3-4 \nрезультат = [".$result1."] (1-TRUE\OK, 0-FALSE\NOT OK) \n";
//сообщить в ТЛГ, в ЛОГ не пишем
}
// file_get_contents("http://10.1.3.19/objects/?object=LF4R1C01&op=m&m=turnOn");
// sleep(15);
// file_get_contents("http://10.1.3.19/objects/?object=LF4R1C01&op=m&m=turnOff");
}
//если светло, то DarkValue==0
else {
// $Message = "0F_Stairs_3-4. Движение. СВЕТЛО, свет не нужен. DarkValue=" . $DarkValue;
}
|
0F_Stairs_3-4_BRA
|
Свет лестницы этажей 3-4
$DarkValue=getGlobal('ThisComputer.isDark');
//если темно, то DarkValue==1
if ($DarkValue) {
$Message = "0F_Stairs_3-4_BRA. Движение. ТЕМНО, включаем свет. DarkValue=".$DarkValue;
$ch3 = curl_init();
curl_setopt($ch3, CURLOPT_URL, "10.1.3.2/sec/&cmd=17:1;p190;17:0"); // бра Щит 3-4
curl_setopt($ch3, CURLOPT_TIMEOUT_MS, 500);
$result2 = curl_exec($ch3);
sleep(1);
if (!$result2) $Message .= "\n Negative Result_2 of Curl_exec Stairs 2-3 = [".$result2."] (1-TRUE\OK, 0-FALSE\NOT OK) \n";
curl_close($ch3);
}
//если светло, то DarkValue==0
else {
$Message = "0F_Stairs_3-4_BRA. Движение. СВЕТЛО, свет не нужен. DarkValue=" . $DarkValue;
}
//записать в основной лог MJD
DebMes($Message);
|
1F_3WallLamp_MasterSwitch
|
Выключатель справа, одинарный
// скрипт мастер-включатель\выключатель ТРЕХ бра в прихожей этажа 1
// если горит хотя бы один, то выключить свет
// если нигде НЕ горит свет, то ключить все контура света
$obj=getObject(LF1R1C02); // бра на стене у картины и зеркала
$st1 = $obj->getProperty('Status');
$obj=getObject(LF1R1C05); // бра под лестницей
$st2 = $obj->getProperty('Status');
$resume = $st1 + $st2;
// $Message = "| ".$st1." | ".$st2." | sum=".$resume;
if (0 == $resume) {
// свет выключен, включим его
// $Message .= "\n свет был выключен, включим его";
file_get_contents("http://10.1.3.19/objects/?object=LF1R1C02&op=m&m=turnOn"); usleep(400000);
file_get_contents("http://10.1.3.19/objects/?object=LF1R1C05&op=m&m=turnOn");
}
else {
// свет включен, выключим его
// $Message .= "\n свет был включен, выключим ";
if ($st1=1) { file_get_contents("http://10.1.3.19/objects/?object=LF1R1C02&op=m&m=turnOff"); usleep(500000); }
if ($st2=1) { file_get_contents("http://10.1.3.19/objects/?object=LF1R1C05&op=m&m=turnOff"); usleep(500000); }
}
// DebMes($Message);
|
1F_Wardrobe_MasterSwitch
|
Выключатель справа, одинарный
// скрипт мастер-включатель\выключатель света в гардеробе этажа 1
// если горит хотя бы один контур в гардеробе, то выключить свет
// если нигде НЕ горит свет, то ключить все контура света
$obj=getObject(LF1R2C02); // левое крыло гардероба
$st1 = $obj->getProperty('Status');
$obj=getObject(LF1R2C03); // правое крыло гардероба
$st2 = $obj->getProperty('Status');
$obj=getObject(LF1R2C05); // подсветка вешалок для одежды - правое крыло
$st3 = $obj->getProperty('Status');
$obj=getObject(LF1R2C04); // подсветка серверов - левое крыло
$st4= $obj->getProperty('Status');
$resume = $st1 + $st2 + $st3 + $st4;
// $Message = "| ".$st1." | ".$st2." | ".$st3." | ".$st4." | sum=".$resume;
if (0 == $resume) {
// свет был выключен, включим его в гардеробе
// $Message .= "\n свет был выключен, включим его в гардеробе ";
file_get_contents("http://10.1.3.19/objects/?object=LF1R2C03&op=m&m=turnOn"); usleep(400000);
file_get_contents("http://10.1.3.19/objects/?object=LF1R2C02&op=m&m=turnOn"); usleep(400000);
file_get_contents("http://10.1.3.19/objects/?object=LF1R2C05&op=m&m=turnOn");
}
else {
// свет включен, выключим его в гардеробе
// $Message .= "\n свет в гардеробе был включен, выключим ";
if ($st4=1) { file_get_contents("http://10.1.3.19/objects/?object=LF1R2C04&op=m&m=turnOff"); usleep(500000); }
if ($st3=1) { file_get_contents("http://10.1.3.19/objects/?object=LF1R2C05&op=m&m=turnOff"); usleep(500000); }
if ($st1=1) { file_get_contents("http://10.1.3.19/objects/?object=LF1R2C02&op=m&m=turnOff"); usleep(500000); }
if ($st2=1) { file_get_contents("http://10.1.3.19/objects/?object=LF1R2C03&op=m&m=turnOff"); }
}
// DebMes($Message);
|
3F_Coridor
|
Включение света в коридоре этажа 3 после захода солнца
// изменение статуса объекта датчик движения
//require(DIR_MODULES.'devices/SDevices_statusUpdated.php');
// читаем глобальную переменную isDark
$DarkValue=getGlobal('ThisComputer.isDark');
//$obj=getObject(LF3R6C01);
//$status = $obj->getProperty('Status');
//если темно, то DarkValue==1
if ($DarkValue) {
//$Message = "Коридор, движение. Темно, включаем свет. ";
$ch6 = curl_init();
curl_setopt($ch6, CURLOPT_URL, "10.1.3.4/sec/&cmd=15:1;p450;15:0"); // коридор этажа 3
curl_setopt($ch6, CURLOPT_TIMEOUT_MS, 500);
$result = curl_exec($ch6);
sleep(1);
if (!$result) $Message .= "Negative Result of Curl_exec = ".$result." (1-TRUE\OK, 0-FALSE\NOT OK) \n";
curl_close($ch6);
}
//если светло, то DarkValue==0
else {
//$Message = "Коридор, движение. СВЕТЛО, свет не нужен";
//ничего не выводим в лог, если пошли по ветке СВЕТЛО
$result = TRUE;
}
// записать в основной лог MJD, если пошли по ветке "ТЕМНО" и возникла ошибка
if (!$result) DebMes($Message);
|
3F_Nasya_LightOFF
|
Мастер-выключатель света в комнате Насти
$ch1 = curl_init();
$ch2 = curl_init();
$ch3 = curl_init();
$ch4 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "http://10.1.3.19:80/objects/?object=LF3R4C02&op=m&m=turnOff&"); //свет у окна
curl_setopt($ch2, CURLOPT_URL, "http://10.1.3.19:80/objects/?object=LF3R4C01&op=m&m=turnOff&"); //свет основной
curl_setopt($ch3, CURLOPT_URL, "http://10.1.3.19:80/objects/?object=LF3R4C04&op=m&m=turnOff&"); //лампа настольная
curl_setopt($ch4, CURLOPT_URL, "http://10.1.3.19:80/objects/?object=LF3R4C03&op=m&m=turnOff&"); //бра у кровати
curl_setopt($ch1, CURLOPT_TIMEOUT_MS, 500);
curl_setopt($ch2, CURLOPT_TIMEOUT_MS, 500);
curl_setopt($ch3, CURLOPT_TIMEOUT_MS, 500);
curl_setopt($ch4, CURLOPT_TIMEOUT_MS, 500);
curl_exec($ch1);
curl_exec($ch2);
curl_exec($ch3);
curl_exec($ch4);
curl_close($ch1);
curl_close($ch2);
curl_close($ch3);
curl_close($ch4);
say("Сообщение. Свет в комнате Насти выключен.",2);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$text = "Свет в комнате Насти выключен";
$telegram_module->sendMessageToAdmin($text, null, '', false);// со звуком
$telegram_module->sendMessageToUser(178955684, $text, null, '', true); // без звука Жанна
$telegram_module->sendMessageToUser(765243719, $text, null, '', true); // без звука Настя
|
3F_Tanya_LightOFF
|
Мастер-выключатель света в комнате Тани
$ch1 = curl_init();
$ch2 = curl_init();
$ch3 = curl_init();
$ch4 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "http://10.1.3.19:80/objects/?object=LF3R5C01&op=m&m=turnOff&"); // свет основной
curl_setopt($ch2, CURLOPT_URL, "http://10.1.3.19:80/objects/?object=LF3R5C02&op=m&m=turnOff&"); // свет у окна
curl_setopt($ch3, CURLOPT_URL, "http://10.1.3.19:80/objects/?object=LF3R5C03&op=m&m=turnOff&"); // бра
curl_setopt($ch4, CURLOPT_URL, "http://10.1.3.19:80/objects/?object=LF3R5C04&op=m&m=turnOff&"); // лампа настольная
curl_setopt($ch1, CURLOPT_TIMEOUT_MS, 500);
curl_setopt($ch2, CURLOPT_TIMEOUT_MS, 500);
curl_setopt($ch3, CURLOPT_TIMEOUT_MS, 500);
curl_setopt($ch4, CURLOPT_TIMEOUT_MS, 500);
curl_exec($ch1);
curl_exec($ch2);
curl_exec($ch3);
curl_exec($ch4);
curl_close($ch1);
curl_close($ch2);
curl_close($ch3);
curl_close($ch4);
say("Сообщение. Свет в комнате Саши и Тани выключен.",2);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$text = "Свет в комнате Саши\Тани выключен";
$telegram_module->sendMessageToAdmin($text, null, '', false);// со звуком
$telegram_module->sendMessageToUser(178955684, $text, null, '', true); // без звука Жанна
$telegram_module->sendMessageToUser(765243719, $text, null, '', true); // без звука Настя
|
4F_Light_Off_GoOut
|
Мастер-выключатель света в комнате этажа 4. ВЫХОДИМ ИЗ КОМНАТЫ.
// 20231029 - оптимизация переменных, добавлена запись времени выключения
// скрипт мастер-включатель света "УХОДИМ" (выключает весь свет, не включает БРА на лестнице)
// если горит хотя бы один контур, то выключить его
// если нигде НЕ горит свет, то ничего не делать
$st1 = getObject(LF4R2C03)->getProperty('Status'); // Закарнизная подсветка балки
$st2 = getObject(LF4R2C12)->getProperty('Status'); // Подсветка за доской над кроватью
$st3 = getObject(LF4R2C13)->getProperty('Status'); // Подсветка в полу
$st4 = getObject(LF4R2C14)->getProperty('Status'); // Витражи
$st5 = getObject(LF4R2C05)->getProperty('Status'); // Два бра у экрана
$st6 = getObject(LF4R2C07)->getProperty('Status'); // Бра у окна
$st7 = getObject(LF4R2C09)->getProperty('Status'); // Торшер
$st8 = getObject(LF4R2C06)->getProperty('Status'); // Бра у камина
$st9 = getObject(LF4R2C01)->getProperty('Status'); // Прикроватный светильник (М)
$st10= getObject(LF4R2C02)->getProperty('Status'); // Прикроватный светильник (Ж)
$st11= getObject(LF4R2C10)->getProperty('Status'); // Настольная лампа - стол
$resume = $st1 + $st2 + $st3 + $st4 + $st5 + $st6 + $st7 + $st8 + $st9 + $st10 + $st11;
// $Message = "| ".$st1." | ".$st2." | ".$st3." | ".$st4." | sum=".$resume;
if ($resume > 0) { // свет где-то включен, выключим его
$url = "http://10.1.3.19/objects/?object=LF4R2";
if ($st1) { file_get_contents($url."C03&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C03)->setProperty('timeOff', time()); }
if ($st2) { file_get_contents($url."C12&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C12)->setProperty('timeOff', time()); }
if ($st3) { file_get_contents($url."C13&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C13)->setProperty('timeOff', time()); }
if ($st4) { file_get_contents($url."C14&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C14)->setProperty('timeOff', time()); }
if ($st5) { file_get_contents($url."C05&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C05)->setProperty('timeOff', time()); }
if ($st6) { file_get_contents($url."C07&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C07)->setProperty('timeOff', time()); }
if ($st7) { file_get_contents($url."C09&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C09)->setProperty('timeOff', time()); }
if ($st8) { file_get_contents($url."C06&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C06)->setProperty('timeOff', time()); }
if ($st9) { file_get_contents($url."C01&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C01)->setProperty('timeOff', time()); }
if ($st10){ file_get_contents($url."C02&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C02)->setProperty('timeOff', time()); }
if ($st11){ file_get_contents($url."C10&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C10)->setProperty('timeOff', time()); }
}
|
4F_Light_Off_Movie
|
Мастер-выключатель света в комнате этажа 4. КИНО.
// 20231029 - оптимизация переменных, добавлена запись времени выключения
// скрипт мастер-включатель света "КИНО" (не выключает свет в полу)
// если горит хотя бы один контур, то выключить его
// если нигде НЕ горит свет, то ВКЛЮЧАЕМ свет в полу и ЛАМПУ прикроватную "Максим"
$st1 = getObject(LF4R2C03)->getProperty('Status'); // Закарнизная подсветка балки
$st2 = getObject(LF4R2C12)->getProperty('Status'); // Подсветка за доской над кроватью
$st3 = getObject(LF4R2C13)->getProperty('Status'); // Подсветка в полу
$st4 = getObject(LF4R2C14)->getProperty('Status'); // Витражи
$st5 = getObject(LF4R2C05)->getProperty('Status'); // Два бра у экрана
$st6 = getObject(LF4R2C07)->getProperty('Status'); // Бра у окна
$st7 = getObject(LF4R2C09)->getProperty('Status'); // Торшер
$st8 = getObject(LF4R2C06)->getProperty('Status'); // Бра у камина
$st9 = getObject(LF4R2C01)->getProperty('Status'); // Прикроватный светильник (М)
$st10= getObject(LF4R2C02)->getProperty('Status'); // Прикроватный светильник (Ж)
$st11= getObject(LF4R2C10)->getProperty('Status'); // Настольная лампа - стол
$st12= getObject(LF4R1C01)->getProperty('Status'); // Бра лестницы ЩИТ
$st13= getObject(LF4R1C02)->getProperty('Status'); // Бра лестницы БАЛКОН
$resume = $st1 + $st2 + $st4 + $st5 + $st6 + $st7 + $st8 + $st12 + $st10 + $st11 + $st13;
//$Message = "| ".$st1." | ".$st2." | ".$st3." | ".$st4." | sum=".$resume;
// важно: ST3 и ST9 пропущены. Их включим, если они выключены. И не выключаем, если уже ВКЛ.
// если подсветка в полу ВЫКЛЮЧЕНА, то включаем.
if (0 == $st3) {
file_get_contents("http://10.1.3.19/objects/?object=LF4R2C13&op=m&m=turnOn");
usleep(150000); getObject(LF4R2C03)->setProperty('timeOn', time());
}
// если светильник прикроватный "М" ВЫКЛЮЧЕН, то включаем.
if (0 == $st9) {
file_get_contents("http://10.1.3.19/objects/?object=LF4R2C01&op=m&m=turnOn");
usleep(150000); getObject(LF4R2C03)->setProperty('timeOn', time());
}
if ($resume > 0) { // свет где-то включен, то выключим его
$url = "http://10.1.3.19/objects/?object=LF4";
if ($st1) { file_get_contents($url."R2C03&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C03)->setProperty('timeOff', time()); }
if ($st2) { file_get_contents($url."R2C12&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C12)->setProperty('timeOff', time()); }
if ($st4) { file_get_contents($url."R2C14&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C14)->setProperty('timeOff', time()); }
if ($st5) { file_get_contents($url."R2C05&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C05)->setProperty('timeOff', time()); }
if ($st6) { file_get_contents($url."R2C07&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C07)->setProperty('timeOff', time()); }
if ($st7) { file_get_contents($url."R2C09&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C09)->setProperty('timeOff', time()); }
if ($st8) { file_get_contents($url."R2C06&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C06)->setProperty('timeOff', time()); }
if ($st10){ file_get_contents($url."R2C02&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C02)->setProperty('timeOff', time()); }
if ($st11){ file_get_contents($url."R2C10&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C10)->setProperty('timeOff', time()); }
if ($st12) { file_get_contents($url."R1C01&op=m&m=turnOff"); usleep(150000); getObject(LF4R1C01)->setProperty('timeOff', time()); }
if ($st13) { file_get_contents($url."R1C02&op=m&m=turnOff"); usleep(150000); getObject(LF4R1C02)->setProperty('timeOff', time()); }
}
callAPI('/api/module/yadevices','GET',array('station'=>5,'say'=>'Выполнено. Приятного Вам просмотра кино!'));
//callAPI('/api/module/yadevices','GET',array('station'=>5,'command'=>'Включи мою любимую музыку'));
//записать в основной лог MJD
//DebMes($Message);
|
4F_Light_Off_Sleep
|
Мастер-выключатель света в комнате этажа 4. ИДЕМ СПАТЬ.
// 20231029 - оптимизация переменных, добавлена запись времени выключения
// скрипт мастер-включатель света "У КРОВАТИ" (не выключает светильники у кровати)
// если горит хотя бы один контур, то выключить его
// если нигде НЕ горит свет, то ничего не делать
callAPI('/api/module/yadevices','GET',array('station'=>5,'command'=>'громкость 5'));
$st1 = getObject(LF4R2C03)->getProperty('Status'); // Закарнизная подсветка балки
$st2 = getObject(LF4R2C12)->getProperty('Status'); // Подсветка за доской над кроватью
$st3 = getObject(LF4R2C13)->getProperty('Status'); // Подсветка в полу
$st4 = getObject(LF4R2C14)->getProperty('Status'); // Витражи
$st5 = getObject(LF4R2C05)->getProperty('Status'); // Два бра у экрана
$st6 = getObject(LF4R2C07)->getProperty('Status'); // Бра у окна
$st7 = getObject(LF4R2C09)->getProperty('Status'); // Торшер
$st8 = getObject(LF4R2C06)->getProperty('Status'); // Бра у камина
//$st9 = getObject(LF4R2C01)->getProperty('Status'); // Прикроватный светильник (М)
//$st10= getObject(LF4R2C02)->getProperty('Status'); // Прикроватный светильник (Ж)
$st11= getObject(LF4R2C10)->getProperty('Status'); // Настольная лампа - стол
$st12= getObject(LF4R1C01)->getProperty('Status'); // Бра лестницы ЩИТ
$st13= getObject(LF4R1C02)->getProperty('Status'); // Бра лестницы БАЛКОН
$resume = $st1 + $st2 + $st3 + $st4 + $st5 + $st6 + $st7 + $st8 + $st11+ $st12 + $st13;
if ($resume > 0) { // свет где-то включен, выключим его
$url = "http://10.1.3.19/objects/?object=LF4";
if ($st1) { file_get_contents($url."R2C03&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C03)->setProperty('timeOff', time()); }
if ($st2) { file_get_contents($url."R2C12&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C12)->setProperty('timeOff', time()); }
if ($st3) { file_get_contents($url."R2C13&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C13)->setProperty('timeOff', time()); }
if ($st4) { file_get_contents($url."R2C14&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C14)->setProperty('timeOff', time()); }
if ($st5) { file_get_contents($url."R2C05&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C05)->setProperty('timeOff', time()); }
if ($st6) { file_get_contents($url."R2C07&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C07)->setProperty('timeOff', time()); }
if ($st7) { file_get_contents($url."R2C09&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C09)->setProperty('timeOff', time()); }
if ($st8) { file_get_contents($url."R2C06&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C06)->setProperty('timeOff', time()); }
if ($st11){ file_get_contents($url."R2C10&op=m&m=turnOff"); usleep(150000); getObject(LF4R2C10)->setProperty('timeOff', time()); }
if ($st12) { file_get_contents($url."R1C01&op=m&m=turnOff"); usleep(150000); getObject(LF4R1C01)->setProperty('timeOff', time()); }
if ($st13) { file_get_contents($url."R1C02&op=m&m=turnOff"); usleep(150000); getObject(LF4R1C02)->setProperty('timeOff', time()); }
callAPI('/api/module/yadevices','GET',array('station'=>5,'say'=>'Свет выключен. Приятного Вам сна! И отключите Ваш телефон от интернета.'));
//callAPI('/api/module/yadevices','GET',array('station'=>5,'command'=>'setVolume','volume'=>3));
}
|
Job_AllLight_OFF
|
Выключение света во всей кв. и сообщить в ТЛГ
// скрипт: мастер-выключатель света везде
// скрипт-клон скрипта синхронизации света с модификацией на выключение света
//
// 2020-02-09 начальная версия (скопирован со скрипта Job_Sync_Light_v.1)
// 2023-10-01 добавлены ТЛГ, отлючена озвучка ночью, оптимизации вывода в ТЛГ
$Message = "\n <b>Выключаем свет всей кв.</b> \n \n";
$i = 0; // счетчик кол-ва опрошенных объектов
$s1 = 0; // счетчик рассинхронизаций MJDM=1 , ABLOG=0
$s2 = 0; // счетчик рассинхронизаций MJDM=0 , ABLOG=1
$s3 = 0; // счетчик отсутствия рассинхронизаций MJDM и ABLOG при ВКЛЮЧЕННОМ свете
$s4 = 0; // счетчик отсутствия рассинхронизаций MJDM и ABLOG при выключенном свете
$objects=getObjectsByClass("Light");
foreach($objects as $obj) {
$i++;
$objtitle = $obj['TITLE']; // например LF0R2C05 - свет фасада
$port = getGlobal($obj['TITLE'].".Port");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$pass = getGlobal($obj['TITLE'].".Password");
$name = getGlobal($obj['TITLE'].".shortName");
$statusMjdm = getGlobal($obj['TITLE'].".Status");
$stateAbLog = file_get_contents("http://".$ip."/".$pass."/?pt=".$port."&cmd=get");
usleep(50000);
if ($statusMjdm and $stateAbLog == "OFF") {
$s1++;
// MJDM=ВКЛ, ABLOG=ВЫКЛ
// вывод списка всех объектов класса Light, у которых statusMjdm = 1, но stateAbLog = 0
// действие: меняем статус в MJDM на OFF
$Message .= $name." | ".$objtitle." \n";
file_get_contents("http://10.1.3.19/objects/?object=".$objtitle."&op=m&m=statusMjdOff");
// пример http://10.1.3.19/objects/?object=LF0R2C05&op=m&m=statusMjdOff
// Статус в Mjdm изменен на OFF
}
elseif ( !$statusMjdm and $stateAbLog == "ON") {
$s2++;
// MJDM=ВЫКЛ, ABLOG=ВКЛ
// вывод списка всех объектов класса Light, у которых statusMjdm = 0, но stateAbLog = 1
// помимо ошибок синхронизации сюда попадает все что включается по датчику на время Т
// действие: ВЫКЛЮЧАЕМ СВЕТ через MJDM
$Message .= $name." | ".$objtitle." \n";
file_get_contents("http://10.1.3.19/objects/?object=".$objtitle."&op=m&m=turnOff");
// пример: http://10.1.3.19/objects/?object=LF1R1C05&op=m&m=turnOff
}
elseif ( $statusMjdm and $stateAbLog == "ON") {
$s3++;
// MJDM=ВКЛ, ABLOG=ВКЛ
// вывод списка всех ВКЛЮЧЕННЫХ объектов класса Light
// действие: ВЫКЛЮЧАЕМ СВЕТ через MJDM
if ($objtitle != "LF0R2C05" or $objtitle != "OFOR2C01") {
$Message .= $name." | ".$objtitle." \n";
file_get_contents("http://10.1.3.19/objects/?object=".$objtitle."&op=m&m=turnOff");
// пример: http://10.1.3.19/objects/?object=LF1R1C05&op=m&m=turnOff
}
}
else $s4++;
} // foreach
$Message .= "\nИтого \nОпрошено ".$i." объеков Light:\n" ;
if ($s1>0) $Message .= " ".$s1." (Mjdm=1 , Ablog=0) \n" ;
if ($s2>0) $Message .= " ".$s2." (Mjdm=0 , Ablog=1) \n" ;
if ($s3>0) $Message .= " ".$s3." (выключили свет) \n" ;
if ($s4>0) $Message .= " ".$s4." (не было вкл. света) \n" ;
DebMes($Message);
//озвучиваем только если дневное время
if ( timeBetween("08:00", "23:00") ) {
if ( $s3>0 ) $VoiceMsg = "Сообщение: свет в квартире выключен! Он был включен в " .$s3. " местах из ".$i." ";
else $VoiceMsg = "Сообщение: свет не требовал выключения так как везде был выключен!";
Say($VoiceMsg, 2);
}
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin($Message, null, '', false);// со звуком
$telegram_module->sendMessageToUser(178955684, $Message, null, '', true); // без звука Жанна
$telegram_module->sendMessageToUser(765243719, $Message, null, '', true); // без звука Настя
|
Job_Read_LightOn_v.1
|
Чтение статуса света , со звуком
// скрипт чтения включенного света - объектов класса Light
// 2020-01-08 начальная версия
// 2020-01-12 добавлены IF "всё выключено"
$Message = " \n !!! перечень включенного света !!! \n ";
$VoiceMsg = " Озвучиваю перечень включенного света. ";
$objects=getObjectsByClass("Light");
$i = 0; // счетчик общего кол-ва найденных объектов. Находит 5 раз!
$n = 0; // счетчик общего кол-ва ВКЛЮЧЕННЫХ объектов
$v = 0; // счетчик кол-ва включенных на КАЖДОМ этаже
$f = 0; // счетчик этажей, включая улицу "0"
for ($f=0; $f<5; $f++)
{
$i = 0;
$v = 0;
foreach($objects as $obj) {
$i = $i+1;
$objtitle = $obj['TITLE'];
$port = getGlobal($obj['TITLE'].".Port");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$status = getGlobal($obj['TITLE'].".Status");
$floor = substr($objtitle,2,1);
// вывод списка всех объектов класса Light по условию ЭТАЖ и СТАТУС=включено
if ($floor == $f and $status) {
$n = $n+1;
$v = $v+1;
$Message .= "f=".$f." | i=".$i." | object=".$objtitle." | floor=".$floor." | IP= ".$ip." | Port=".$port." | status=".$status." \n ";
}
} // foreach
if (0 == $f) {
$Message .= "Улица. Включено " .$v." \n ";
if (0 == $v) $VoiceMsg .= "Улица: всё выключено. ";
else $VoiceMsg .= "Улица: включено " .$v." . ";
}
else {
$Message .= " Этаж ".$f. ". Включено " .$v." \n ";
if (0 == $v) $VoiceMsg .= " Этаж ".$f. ": всё выключено. ";
else $VoiceMsg .= " Этаж ".$f. ": включено " .$v." . ";
}
} // цикл по 0<=f<5
$Message .= " !!! ОПРОШЕНО ".$i." ОБЪЕКТОВ КЛАССА Light. Из них включено: " .$n. " объектов !!! ";
$VoiceMsg .= " Итого включено ".$n." объектов освещения из ".$i." опрошенных. Спасибо за внимание.";
DebMes($Message);
Say($VoiceMsg, 2);
|
Job_Sync_Light_v.1
|
Синхронизации света по контроллерам с MJDM
// скрипт синхронизации света по контроллерам с MJDM
// читаем статус с контроллера, проверяем статус в MJDM, устанавливаем реальный статус в MJDM
// статус лестницы, вентиляторов обрабатываем отдельно: пропускаем
// 2020-01-12 начальная версия
// 2020-02-09 оптимизация: введен метод "изменить состояние в MJDM"
$Message = " \n !!! Поиск рассинхронизации статуса света на контроллерах и в MJDM !!! \n ";
$i = 0; // счетчик кол-ва опрошенных объектов
$s1 = 0; // счетчик рассинхронизаций MJDM=1 , ABLOG=0
$s2 = 0; // счетчик рассинхронизаций MJDM=0 , ABLOG=1
$s3 = 0; // счетчик отсутствия рассинхронизаций MJDM и ABLOG
$objects=getObjectsByClass("Light");
foreach($objects as $obj) {
$i++;
$objtitle = $obj['TITLE'];
$port = getGlobal($obj['TITLE'].".Port");
$ip = getGlobal($obj['TITLE'].".ipAddress");
$pass = getGlobal($obj['TITLE'].".Password");
$statusMjdm = getGlobal($obj['TITLE'].".Status");
$stateAbLog = file_get_contents("http://".$ip."/".$pass."/?pt=".$port."&cmd=get");
usleep(50000);
if ($statusMjdm and $stateAbLog == "OFF") {
$s1++;
// вывод списка всех объектов класса Light, у которых statusMjdm = 1, но stateAbLog = 0
$Message .= " MJDM=ВКЛ, ABLOG=ВЫКЛ S1++ | object=".$objtitle." | IP= ".$ip." | Port=".$port." | Pass=".$pass." | statusMJDM=".$statusMjdm." | stateAbLog =".$stateAbLog." ";
file_get_contents("http://10.1.3.19/objects/?object=".$objtitle."&op=m&m=statusMjdOff");
// было: http://10.1.3.19/objects/?object=LF1R1C05&op=m&m=turnOff
// стало: http://10.1.3.19/objects/?object=LF0R2C05&op=m&m=statusMjdOff
$Message .= " | Статус в MJDM изменен на OFF! \n ";
}
elseif ( !$statusMjdm and $stateAbLog == "ON") {
$s2++;
// вывод списка всех объектов класса Light, у которых statusMjdm = 0, но stateAbLog = 1
// помимо ошибок синхронизации сюда попадает все что включается по датчику на время Т:
// лестницы, проходные помещения, туалет этажа 1, фасад при вкл. по кнопке у входной двери
// установим для всех объектов правило - показать в MJDM статус = ON, включая лестницы
$Message .= " MJDM=ВЫКЛ, ABLOG=ВКЛ S2++ | object=".$objtitle." | IP= ".$ip." | Port=".$port." | Pass=".$pass." | statusMJDM=".$statusMjdm." | stateAbLog =".$stateAbLog." ";
file_get_contents("http://10.1.3.19/objects/?object=".$objtitle."&op=m&m=statusMjdOn");
// пример: http://10.1.3.19/objects/?object=LF0R2C05&op=m&m=statusMjdOn
$Message .= " | Статус в MJDM изменен на ON! \n ";
}
else $s3++;
} // foreach
$Message .= " !!! ОПРОШЕНО ".$i." ОБЪЕКТОВ КЛАССА Light !!! \n " ;
$Message .= " s1=".$s1." (MJDM=1 , ABLOG=0)" ;
$Message .= " s2=".$s2." (MJDM=0 , ABLOG=1)" ;
$Message .= " s3=".$s3." (нет рассинхронизации, все хорошо)" ;
DebMes($Message);
|
Read_Status_Obj_Test
|
ТЕСТИРОВАНИЕ
$obj=getObject(LF0R2C05);
$status = $obj->getProperty('Status');
$Message = " \n status LF0R2C05 = " .$status. " \n";
$ta = timeAfter("22:10");
$tb = timeBefore("22:10");
$tt = timeBetween("20:00", "23:00");
if (!$ta) $ta = 0;
if (!$tb) $tb = 0;
if (!$tt) $tt = 0;
$Message .= " timeAfter = " .$ta. " ";
$Message .= " | timeBefore = " .$tb. " ";
$Message .= " | timeBetween = " .$tt. " \n ";
DebMes($Message);
|
Wall_Inside_2F_NYLight
|
Включение\выключение новогодней гирлянды на втором этаже
// Скрипт включает свет на стене дома
// Проверяется несколько условий: зашло солнце, интервал времени
// 13.12.2020 добавил OF2R1C07L - розетка у перил слева, этаж 2.
$DarkValue=getGlobal('ThisComputer.isDark');
$Message = " Запущен сценарий Wall_Inside_2F_NYLight";
$obj3=getObject(OF2R1C07R);
$status = $obj3->getProperty('Status');
// если время в данных диапазонах, то $tb = 1. Если вне диапазонов, то 0
$t1 = timeBetween("16:00", "23:55"); if (!$t1) $t1 = 0;
$t2 = timeBetween("07:00", "08:55"); if (!$t2) $t2 = 0;
if ($t1 or $t2) $tb = 1;
else $tb = 0;
$Message .= " переменная tb = ".$tb." ";
//Включим свет, если темно (DarkValue==1) + свет выключен (status==0) + в диапазоне времени
if ($DarkValue and !$status and $tb) {
file_get_contents("http://10.1.3.19/objects/?object=OF2R1C07R&op=m&m=turnOn");
$Message .= " Включили новогоднюю гирлянду на втором этаже (OF2R1C07L) \n";
if ($t1) Say("Сообщение! Я включила новогоднюю гирлянду на втором этаже.",2);
}
//ВЫКЛЮЧИМ свет если светло (DarkValue=0) и свет включен (status=1)
// если не время (tb=0) and свет включен (status=1)
elseif ((!$DarkValue and $status) or (!$tb and $status)) {
file_get_contents("http://10.1.3.19/objects/?object=OF2R1C07R&op=m&m=turnOff");
$Message .= " Выключили свет гирлянды (OF2R1C07R) \n";
}
// Ничего не делаем в остальных случаях (СВЕТЛО и СВЕТ ВЫКЛЮЧЕН, ТЕМНО В ДИАПАЗОНЕ И СВЕТ ВКЛЮЧЕН, и т.д.)
else $Message .= " Действий с (OF2R1C07R) не требуется. Статус освещения = ".$status." \n";
DebMes($Message);
//setTimeOut('Запуск Wall_Inside_2F_NYLight','runScript("Wall_Inside_2F_NYLight");',60*30);
|
Wall_Light
|
Включение\выключение освещения на стене дома
// Скрипт включает свет на стене дома
// Проверяется несколько условий: зашло солнце, интервал времени
$DarkValue=getGlobal('ThisComputer.isDark');
$Message = " Запущен сценарий Wall_Light ";
$obj=getObject(LF0R2C05);
$status = $obj->getProperty('Status');
// если время в данных диапазонах, то $tb = 1. Если вне диапазонов, то 0
$t1 = timeBetween("16:00", "02:00"); if (!$t1) $t1 = 0;
$t2 = timeBetween("06:00", "09:00"); if (!$t2) $t2 = 0;
if ($t1 or $t2) $tb = 1;
else $tb = 0;
$Message .= " переменная tb = ".$tb." ";
//Включим свет, если темно (DarkValue==1) + свет выключен (status==0) + в диапазоне времени
if ($DarkValue and !$status and $tb) {
file_get_contents("http://10.1.3.19/objects/?object=LF0R2C05&op=m&m=turnOn");
$Message .= " Включили свет на улице (LF0R2C05) \n";
if ($t1) Say("Сообщение. На улице темно. Я включила свет фасада.",2);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$text = "#Info #Light \n На улице темно \n <b>Свет фасада включен</b>";
$telegram_module->sendMessageToAdmin($text, null, '', false);// со звуком
$telegram_module->sendMessageToUser(178955684, $text, null, '', true); // без звука Жанна
$telegram_module->sendMessageToUser(765243719, $text, null, '', true); // без звука Настя
}
//ВЫКЛЮЧИМ свет если светло (DarkValue=0) и свет включен (status=1)
// если не время (tb=0) and свет включен (status=1)
elseif ((!$DarkValue and $status) or (!$tb and $status)) {
file_get_contents("http://10.1.3.19/objects/?object=LF0R2C05&op=m&m=turnOff");
$Message .= " Выключили свет на улице (LF0R2C05) \n";
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$text = "#Info #Light \n <b>Свет фасада выключен</b>";
$telegram_module->sendMessageToAdmin($text, null, '', false);// со звуком
$telegram_module->sendMessageToUser(178955684, $text, null, '', true); // без звука Жанна
$telegram_module->sendMessageToUser(765243719, $text, null, '', true); // без звука Настя
}
// Ничего не делаем в остальных случаях (СВЕТЛО и СВЕТ ВЫКЛЮЧЕН + ТЕМНО В ДИАПАЗОНЕ И СВЕТ ВКЛЮЧЕН, и т.д.)
else $Message .= " Действий с (LF0R2C05) не требуется. Статус освещения = ".$status." \n";
DebMes($Message);
setTimeOut('Запуск Wall_Light','runScript("Wall_Light");',60*30);
|
Wall_NY_Light
|
Включение\выключение иллюминации крыльца. ГИРЛЯНДА\РОЗЕТКА
// Скрипт включает ГИРЛЯДНУ\РОЗЕТКУ
// Проверяется несколько условий: зашло солнце, интервал времени
// 13.12.2020 добавил OFOR2C01 - розетка на улице у входа в кв.
$DarkValue=getGlobal('ThisComputer.isDark');
$Message = " Запущен сценарий Wall_NY_Light ";
$obj2=getObject(OFOR2C01);
$status = $obj2->getProperty('Status');
// если время в данных диапазонах, то $tb = 1. Если вне диапазонов, то 0
$t1 = timeBetween("16:00", "01:55"); if (!$t1) $t1 = 0;
$t2 = timeBetween("06:00", "09:00"); if (!$t2) $t2 = 0;
if ($t1 or $t2) $tb = 1;
else $tb = 0;
$Message .= " переменная tb = ".$tb." ";
//Включим свет, если темно (DarkValue==1) + свет выключен (status==0) + в диапазоне времени
if ($DarkValue and !$status and $tb) {
file_get_contents("http://10.1.3.19/objects/?object=OFOR2C01&op=m&m=turnOn");
$Message .= " Включили иллюминацию крыльца на улице (OFOR2C01) \n";
if ($t1) Say("Сообщение! На улице темно. Я включила новогоднюю гирлянду на крыльце.",1);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$text = "#Info #Light \n <b>Новогодняя гирлянда на улице включена</b>";
$telegram_module->sendMessageToAdmin($text, null, '', false);// со звуком
$telegram_module->sendMessageToUser(178955684, $text, null, '', true); // без звука Жанна
$telegram_module->sendMessageToUser(765243719, $text, null, '', true); // без звука Настя
}
//ВЫКЛЮЧИМ свет если светло (DarkValue=0) и свет включен (status=1)
// если не время (tb=0) and свет включен (status=1)
elseif ((!$DarkValue and $status) or (!$tb and $status)) {
file_get_contents("http://10.1.3.19/objects/?object=OFOR2C01&op=m&m=turnOff");
$Message .= "Выключили новогоднюю гирлянду на улице (OFOR2C01) \n";
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$text = "#Info #Light \n <b>Новогоднюю гирлянду выключили</b> \nулица (OFOR2C01)";
$telegram_module->sendMessageToAdmin($text, null, '', false);// со звуком
}
// Ничего не делаем в остальных случаях (СВЕТЛО и СВЕТ ВЫКЛЮЧЕН, ТЕМНО В ДИАПАЗОНЕ И СВЕТ ВКЛЮЧЕН, и т.д.)
else $Message .= " Действий с (OFOR2C01) не требуется. Статус освещения = ".$status." \n";
DebMes($Message);
setTimeOut('Запуск Wall_NY_Light','runScript("Wall_NY_Light");',60*30);
|
xF_Light_Off
|
Выключение света на любом этаже
// скрипт чтения и выключения света - объектов класса Light
$x = 3; //этаж выключения света
$Message = "!!! Cкрипт выключения света на этаже ".$x." !!! \n ";
$Message .= " список выключенного света: \n ";
$objects=getObjectsByClass("Light");
foreach($objects as $obj) {
$objtitle = $obj['TITLE'];
$status = getGlobal($obj['TITLE'].".Status");
$descr = getGlobal($obj['TITLE'].".shortName");
$floor = substr($objtitle,2,1);
// вывод списка всех объектов класса Light по условию ЭТАЖ и СТАТУС=включено
if ($floor == $x and $status) {
file_get_contents("http://10.1.3.19/objects/?object=".$objtitle."&op=m&m=turnOff");
$Message .= " | ".$objtitle." | ".$descr." \n";
usleep(50000);
}
} // foreach
$Message .= "!!! скрипт выключения света на этаже ".$x." выполнен !!! ";
DebMes($Message);
|