2ip
|
Рассказывает про интернет к которому подключена.
say ('Про интернет к которому я подключена.');
$url="http://2ip.ru.json"; //http://api.2ip.com.ua/provider.json
//Работаем со строкой JSON
$data = json_decode(file_get_contents($url), true);
$ip=$data["ip"]; // что искали
$name_ripe=$data["name_ripe"];
$name_rus=$data["name_rus"];
$site=$data["site"];
//echo $ip;
$msgtxt = "IP адрес ".$ip;
say ("Провайдер ".$name_rus,5);
say ("Сайт провайдера ".$site,5);
say($msgtxt,9);
rs(SendSticker_v, array('stickerbody' => $msgtxt));
$url2="http://2ip.ru/geo.json?ip=".$ip; //http://api.2ip.com.ua/geo.json?ip=".$ip
echo $url2;
//Работаем со строкой JSON
$data = json_decode(file_get_contents($url2), true);
$country_rus=$data["country_rus"]; // что искали
$region_rus=$data["region_rus"];
$city_rus=$data["city_rus"];
say ("Мое местонахождение по мнению других:",5);
say ($country_rus,5);
say ($region_rus,5);
say ($city_rus,5);
|
Greeting
|
Говорит "Доброе утро" и запускает "reportStatus" и "readWeatherToday"
if (gg('DebugMode.active') == 1) {
DebMes('Скрипт Greeting');
}
//Если не на охране
if (gg('SecurityArmedMode.active') == 0) {
//Шлем в телеграм
rs('SendTelegram',array('message'=>"Похоже, проснулись и зашевелились."));
//Отправим стикер
rs('SendSticker',array('Sticker'=>'good_morning'));
//say("Доброе утро.",9);
say(getRandomLine('good_morning'),11);
setTimeOut("reportStatusTimer","rs('reportStatus', array());",60);
setTimeOut("StickerToDoTimer","rs('StickerToDo');",120);
setTimeOut("sayToDoTimer","rs('sayToDo');",140);
rs("readWeatherToday", array());
}
|
morningGreeting
|
Утреннее приветствие
if (gg('DebugMode.active') == 1) {
DebMes('Скрипт morningGreeting');
}
//напишем в телеграм
rs('SendTelegram',array('message'=>"Дома какая-то движуха!"));
//Отправим стикер
rs('SendSticker',array('Sticker'=>'good_morning2'));
say(getRandomLine('good_morning'),11);
rs("sayTime");
clearTimeOut('AlarmTimer');
if (gg('ThisComputer.AlarmWaiting')) {
setGlobal('ThisComputer.AlarmWaiting',0);
}
if (gg("ThisComputer.WeHaveGuests")!=1) {
if (gg("isDark")) {
//setGlobal('Corridor.light1', '1');
//setGlobal('Bedroom2.light1', '1');
}
// rs("LightAll");
rs('sayTodayAgenda');//Запускаем озвучку задач
rs('sayToDo');//Запускаем озвучку sayToDo
//runScript("playFavoriteMusic");
}
|
readHandSwitchLightMode
|
Проговаривает где свет в ручном режиме
$Rooms=getObjectsByClass("Rooms");
$total=count($Rooms);
for($i=0;$i<$total;$i++) {
if (gg($Rooms[$i]['TITLE'].'.HandSwitchLightMode')=='1') {
$res_room[]=gg($Rooms[$i]['TITLE'].'.title');
}
}
if ($res_room){
$Text=implode(", ",$res_room)." освещение в ручном режиме.";
}else{
$Text="Освещение управляется автоматически.";
}
say ($Text,2);
|
RebootRouter
|
Перезагружает роутер если нет интернета
if (gg('ManualMode.active') == 1) {
if (gg('SecurityArmedMode.active') == 0) {
if (gg('Router.AutoReboot') == 1) {
if (gg('Router.statuscolor') == "red") {
say("Похоже что проблема с устройством ".gg('Router.statusText'),5);
say("Устройство ".gg('Router.statusText')." ".gg('Router.status'),5);
}else{
if (gg('Router.AutoRebootTriger') < gg('Router.AutoRebootTrigerMax')) {
$AutoRebootTriger=gg('Router.AutoRebootTriger') + 1;
if (gg('Router.AutoRebootTriger') == 1)say("Попытаемся перезагрузить.",5);
if (gg('Router.AutoRebootTriger') == 2)say("Попробуем еще раз.",5);
if (gg('Router.AutoRebootTriger') == 3)say("Возможно с третьей попытки.",5);
if (gg('Router.AutoRebootTriger') == 4)say("Похоже перезапуск не помогает. Еще раз, для верности.",5);
say('Перезагружаю основной роутер.',5);
sg('Router.AutoRebootTriger', $AutoRebootTriger);
getURL(gg('Router.CommandComp'), 0);
}
}
} else {
say('Если бы Вы включили автоматический перезапуск роутера, я бы могла попробовать решить проблему.',5);
say('Могу посоветовать проверить балланс у провайдера и перезагрузить роутер вручную.',5);
say("Устройство ".gg('Router.statusText')." ".gg('Router.status'),5);
}
}
} else {
say('Не могу перегрузить роутер.Система работает в ручном режиме.',5);
}
|
RunCommandComp
|
выполнение команды на удалённом windows-компьютере
if (is_array($params)) {
$cmd=($params['cmd']);
} else {
$cmd=$params;
}
//$cmd=utf2win($cmd);
//$cmd='"c:\windows\notepad.exe"';
$app='C:\\_majordomo\\apps\PSTools\\PsExec '.gg('Comp2.ip').' '.$cmd;
safe_Exec($app);
|
WakeOnLAN
|
отправка "магического" пакета Wake-On-LAN
$comp_name = $params['comp_name'];
$hw_comp = $params['hw_comp'];
say('Пытаюсь включить '.$comp_name,5);
//magicPacket($hw_comp);
//if (!function_exists('magicPacket')) {
//function magicPacket($mac,$addr='255.255.255.255',$socket_number=7) {
$mac=$hw_comp;
$addr='255.255.255.255';
$socket_number=7;
//split up the mac address based upon the colons in the string
$addr_byte = explode(':', $mac);
$hw_addr = '';
for ($a=0; $a <6; $a++)
$hw_addr .=chr(hexdec($addr_byte[$a])); //convert the hex to its decimal equivalent, encode as a character, and repeat 16 times
$msg = str_repeat(chr(255),6); //FF in decimal is 255, which is then encoded as a char as with our mac address
for ($a = 1; $a <= 16; $a++)
$msg .= $hw_addr;
$s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); //create our socket
if ($s == false) {
say('У меня не получается включить, ошибка создания сокета',1);
echo "Error creating socket!\n";
echo "Error code is '".socket_last_error($s)."'- " . socket_strerror(socket_last_error($s));
return false;
}
else {
// setting a broadcast option to socket:
//$opt_ret = socket_set_option($s, 1, 6, TRUE);
$opt_ret = socket_set_option($s,SOL_SOCKET,SO_BROADCAST,true);
if($opt_ret <0) {
echo "setsockopt() failed, error: " . strerror($opt_ret) ."\n";
return false;
}
if(socket_sendto($s, $msg, strlen($msg), 0, $addr,$socket_number)) {
socket_close($s);
return true;
}
else {
return false;
}
}
// }
//}
|
WinShutdown
|
Выключает WIN компьютер
say("Пытаюсь выключить компьютер",9);
shell_exec("shutdown -s -f -m \\\\".$params['comp']." -t 60 -d up:125:1");
|
Demo01
|
Здравствуйте, меня зовут Алиса. Я представляю систему умного дома Мажордомо и сейчас расскажу о том, что я знаю и умею.
$say.='Привет! Меня зовут Алиса.
Я представляю систему умного дома, Мажордомо.
И сейчас расскажу о том, что я знаю, и умею.';
say($say,2);
sleep(1);
setTimeOut('DemoTimer','runScript("Demo02");',1);
|
Demo01_copy
|
Здравствуйте, меня зовут Алиса. Я представляю систему умного дома Мажордомо и сейчас расскажу о том, что я знаю и умею.
say('Привет! Меня зовут Алиса.',2);
say('Я представляю систему умного дома Мажордомо.',2);
say('И сейчас расскажу о том, что я знаю, и умею.',2);
sleep(1);
setTimeOut('DemoTimer','runScript("Demo02");',1);
|
Demo02
|
Во-первых, я в курсе того, какая температура и влажность в разных комнатах. Например, сейчас в Зале ХХ градусов цельсия -- это оптимальная температура. Влажность воздуха ХХ процентов. Если дома будет сухо, то я включу увлажнитель воздуха. Так же я знаю, что на улице сегодня ХХ дождь,снег, а завтра будет ХХ ясно. Я обязательно предупрежу об этом утром.
$tkitchin=gg('Kitchen.Temperature');
$tout=gg('Teplica.Temperature');
$h=gg('Detskaya.Humidity');
say("Во-первых, я в курсе того, какая температура и влажность в разных помещениях.
Например, сейчас в Кухне ".$tkitchin." градусов Цельсия, -- это оптимальная температура.
Когда температура поднимается выше 28 градусов Цельсия, я включаю вытяжку.
Влажность в детской составляет: ".$h." %.
Также я знаю, что температура на улице: ".$tout." градусов Цельсия. ",2);
sleep(2);
setTimeOut('DemoTimer',"rs('Demo03')",1);
|
Demo02_copy
|
Во-первых, я в курсе того, какая температура и влажность в разных комнатах. Например, сейчас в Зале ХХ градусов цельсия -- это оптимальная температура. Влажность воздуха ХХ процентов. Если дома будет сухо, то я включу увлажнитель воздуха. Так же я знаю, что на улице сегодня ХХ дождь,снег, а завтра будет ХХ ясно. Я обязательно предупрежу об этом утром.
say('Во-первых, я в курсе того, какая температура и влажность в разных комнатах.',15);
$t=gg('Kitchen.Temperature');
say('Посмотрите на график в Кухне.',15);
runScript('runCommandHP',array('cmd'=>'explorer "http://192.168.1.213/module/charts.html?id=2"'));
say('Например, сейчас в Кухне '.$t.' градусов цельсия -- это оптимальная температура',2);
$h=gg('sensorHumidityRemote3.humidity');
say('Влажность составляет '.$h.' %.',2);
say('Когда воздух становится сухим, я включаю увлажнитель воздуха.',2);
$t=gg('ws.tempOutside');
$forecast=gg('WeatherTomorrow');
$forecast=str_replace('°','',$forecast);
$forecast=str_replace('...',' ',$forecast);
runScript('runCommandHP',array('cmd'=>'explorer http://pogoda.by/'));
say('Также я знаю, что температура снаружи '.$t.' градусов цельсия.',2);
say('Прогноз на завтра такой '.$forecast.'.',2);
say('Взгляните на подробный прогноз на экране.',2);
say('Я напомню об этом утром.',2);
sleep(2);
setTimeOut('DemoTimer',"rs('Demo03')",1);
|
Demo03
|
В мои обязанности входит наблюдение за тем, где находятся мои хозяева. Я знаю, что Сергей сейчас …, а Алеся … Уровень заряда телефона Сергея ХХ процентов, а телефона Алеси ХХ процентов. Если телефон будет разряжен, то я об этом предупрежу. Так же я знаю, когда дома никого нет и когда кто-то приходит домой, чтобы рационально управлять домашними системами.
rs('DemoSay','One of my duties is locaiton tracking of family members.');
rs('DemoSay','I can show you where they have been for past 24 hours.');
runScript('runCommandHP',array('cmd'=>'explorer http://192.168.0.17/popup/app_gpstrack.html'));
$sergei_location=gg('Serge.seenAt');
$sergei_steps=gg('Serge.moves_walk_distance');
$sergei_level=gg('Serge.BattLevel');
$alesya_location=gg('Alesya.seenAt');
$alesya_level=gg('Alesya.BattLevel');
$alesya_steps=gg('Alesya.moves_walk_distance');
$sergei_location='home';
if ($sergei_location!='') {
rs('DemoSay','I do know that Sergei is in the place called '.$sergei_location);
}
/*
if ($sergei_location==$alesya_location) {
rs('DemoSay','Alice is in the same place');
} elseif ($alesya_location!='') {
rs('DemoSay','Alice is in the place called '.$alesya_location);
}
*/
//rs('DemoSay','Сергей прошёл вчера пешком '.$sergei_steps.' километров.');
rs('DemoSay','Battery level of his smartphone is at '.$sergei_level.' %.');
rs('DemoSay','I will notify when the phone\'s batter level will be running out.');
rs('DemoSay','Also I do know when nobody\'s home so I can set some appliences in a green mode.');
sleep(2);
setTimeOut('DemoTimer',"rs('Demo04')",1);
|
Demo04
|
Кстати, об управлении. Я могу управлять различными приборами или, например, светом. Вот смотрите, я сейчас немного поиграю с освещением. (переключает свет cветильников, меняет освещение) У меня записано несколько световых сцен под различные обстоятельства. Ещё по утрам я поднимаю шторы и закрываю их вечером, посмотрите как это происходит (в спальне поднимаются/опускаются шторы). Ко мне можно обратиться и через Интернет, так что вы можете меня попросить открыть ворота, даже если никого нет дома и с помощью системы видео-наблюдения контролировать, что происходит. (открывает ворота, выводит на компьютер картинку с камеры)
rs('DemoSay','Talking about control...');
rs('DemoSay','I can control different appliences and lights.');
rs('DemoSay','This is how I can play with lights.');
sleep(4);
cm('lcw1.switch');
sleep(1);
cm('lcw7.switch');
sleep(1);
cm('lcw8.switch');
sleep(1);
cm('lcw1.switch');
sleep(1);
cm('lcw2.switch');
sleep(1);
cm('lcw3.switch');
sleep(1);
cm('lcw4.switch');
callMethod("MiLamp2.setRandomColor");
rs('DemoSay','I have several scenarios for the lights and can run them autmatically.');
rs('DemoSay','Also I can close down the curtains in the evening and open them up in the morning.');
rs('DemoSay','This is how I do it.');
sleep(2);
callMethod('BedroomCurtains.open');
sleep(10);
rs('DemoSay','You can talk to me by the Internet so I can open the entry gates remotely.');
cm('EntryGates.open');
sleep(20);
cm('EntryGates.Close');
setTimeOut('DemoTimer',"rs('Demo05')",1);
|
Demo05
|
Кроме управления механизмами, я могу помочь и с развлечением. Например, сейчас включу какую-нибудь музыку из вашей коллекции. (включает музыку) Или, например, радио (включает радио). Ну или даже поставить мультфильм для ребёнка. (включает фильм на мониторе)
rs('DemoSay','Beside that I can help with entertainment.');
rs('DemoSay','For example, I can turn on some music from the list of your favorites.');
runScript('playFavoriteMusic');
sleep(15);
runScript('playPause');
sleep(2);
rs('DemoSay','Or I can play radio');
runScript('playSomethingCool');
sleep(16);
runScript('playPause');
sleep(2);
rs('DemoSay','And I can start some movie for the kids.');
runScript('runCommandHP',array('cmd'=>'explorer d:\001.avi'));
sleep(21);
runScript('runCommandHP',array('cmd'=>'cmd.exe /c taskkill /F /IM vlc.exe'));
sleep(2);
setTimeOut('DemoTimer',"rs('Demo07')",1);
|
Demo06
|
Ну как, понравилось? А ещё вы можете у меня что-нибудь спросить. Я могу найти ответы на вопросы “что такое” или “кто такой”. Попробуйте, спросите!
rs('DemoSay','How do you like it?');
rs('DemoSay','Also you can ask me about something');
rs('DemoSay','I can find answers to the questions "what is" or "who is"');
sleep(8);
context_activate(42);
|
Demo07
|
Спасибо за внимание и всегда к вашим услугам
rs('DemoSay','Thank you for attention. Always at your service!');
setTimeOut('DemoTimer',"rs('DemoEnd');",1);
|
DemoEnd
|
|
DemoSay
|
if (gg('DemoCancel')) {
return;
}
$ph='';
if (!is_array($params)) {
$ph=$params;
}
if (!$ph) {
$ph="Hello, world!";
}
/*
$path=ROOT.'cached/voice/sapi_'.md5($ph).'.mp3';
if (file_exists($path) && 0) {
echo str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$path);
exec(str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$path));
} else {
exec(('cscript '.DOC_ROOT.'/rc/sapi_cached.js '.utf2win($ph)));
}
*/
$google_file=GoogleTTS($ph, 'en');
//echo $google_file;
if ($google_file) {
@touch($google_file);
//echo(str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$google_file));
safe_exec(str_replace('/','\\',DOC_ROOT.'/rc/madplay.exe '.$google_file));
/*
$tmp=explode(' ',$ph);
$total=count($tmp);
$word_delay=2;
$total_delay=$total*$word_delay;
sleep($word_delay);
*/
}
|
DemoStart
|
setGlobal('DemoMode',1);
set_time_limit(180);
setTimeOut('DemoStart','runScript("Demo01");',1);
|
Выключение кондея если никого нет
|
if (gg('NobodyHomeMode.active') != '') {
// Логируем, что значение свойства не пустое
debmes('Значение свойства NobodyHomeMode.active не пустое', 'Проверка');
// Запускаем скрипт Управление кондиционером по температуре
runScript('Управление кондиционером по температуре');
} else {
// Логируем, что значение свойства пустое
debmes('Значение свойства NobodyHomeMode.active пустое', 'Проверка');
}
|
Если регистр выключен включить боллер
|
if (getGlobal('Thermostat01.relay_status') !== '') { // Проверка, что свойство не пустое
if (getGlobal('Thermostat01.relay_status') == 1) { // Если статус термостата равен 1
setGlobal('YaRelay35.status', 0); // Установить YaRelay35.status в 0
} else {
setGlobal('YaRelay35.status', 1); // В противном случае установить YaRelay35.status в 1
}
}
|
Климат в гараже
|
Этот сценарий управляет отоплением в гараже на основе температуры на улице. Если значение температуры не пустое, код выполняет следующие действия:
Проверка температуры:
Если температура на улице ниже порога (15°C), включается отопление в гараже, если оно ещё не включено.
Если температура на улице выше порога (15°C), отопление в гараже выключается, если оно было включено.
if (gg("mqttSensor_temp16.value") !== "") {
// Устанавливаем порог температуры для включения отопления в гараже
$temperatureThreshold = 5;
// Получаем значение температуры на улице и статус отопления в гараже
$outdoorTemperature = gg("mqttSensor_temp16.value"); // Температура на улице
$garageHeatingStatus = gg("Relay32.status"); // Статус отопления в гараже
debmes("Температура на улице: $outdoorTemperature", "Проверка");
debmes("Статус отопления в гараже: $garageHeatingStatus", "Проверка");
// Если температура на улице ниже порога, включаем отопление
if ($outdoorTemperature < $temperatureThreshold) {
// Включаем отопление в гараже, если оно еще не включено
if ($garageHeatingStatus == 0) {
sg("Relay32.status", 1); // Включаем отопление
debmes("Температура на улице ниже $temperatureThreshold градусов. Включаю отопление в гараже.", "Проверка");
} else {
debmes("Температура на улице ниже $temperatureThreshold градусов, но отопление в гараже уже включено.", "Проверка");
}
}
// Если температура на улице выше порога, выключаем отопление
elseif ($outdoorTemperature >= $temperatureThreshold) {
// Отключаем отопление в гараже, если оно включено
if ($garageHeatingStatus == 1) {
sg("Relay32.status", 0); // Выключаем отопление
debmes("Температура на улице $temperatureThreshold градусов и выше. Выключаю отопление в гараже.", "Проверка");
} else {
debmes("Температура на улице $temperatureThreshold градусов и выше, но отопление в гараже уже выключено.", "Проверка");
}
}
}
/*
if (gg("Thermostat01.relay_status") != "") {
// Устанавливаем порог температуры для включения отопления в гараже
$temperatureThreshold = 15;
// Получаем значение температуры на улице и статус отопления в гараже
$outdoorTemperature = gg("mqttSensor_temp16.value"); // Температура на улице
$thermostatStatus = gg("Thermostat01.relay_status"); // Статус термостата
$garageHeatingStatus = gg("Relay34.status"); // Статус отопления в гараже
debmes("Температура на улице: $outdoorTemperature", "Проверка");
debmes("Статус термостата: $thermostatStatus", "Проверка");
debmes("Статус отопления в гараже: $garageHeatingStatus", "Проверка");
// Если термостат включен и температура на улице ниже порога
if ($thermostatStatus == 1 && $outdoorTemperature < $temperatureThreshold) {
// Включаем отопление в гараже, если оно еще не включено
if ($garageHeatingStatus == 0) {
sg("Relay34.status", 1); // Включаем отопление
debmes("Термостат включен, температура на улице ниже $temperatureThreshold градусов. Включаю отопление в гараже.", "Проверка");
} else {
debmes("Термостат включен, температура на улице ниже $temperatureThreshold градусов, но отопление в гараже уже включено.", "Проверка");
}
}
// Если термостат выключен или температура на улице выше порога
elseif ($thermostatStatus == 0 || $outdoorTemperature >= $temperatureThreshold) {
// Отключаем отопление в гараже, если оно включено
if ($garageHeatingStatus == 1) {
sg("Relay34.status", 0); // Выключаем отопление
debmes("Термостат выключен или температура на улице $temperatureThreshold градусов и выше. Выключаю отопление в гараже.", "Проверка");
} else {
debmes("Термостат выключен или температура на улице $temperatureThreshold градусов и выше, но отопление в гараже уже выключено.", "Проверка");
}
}
}
*/
|
Климат в гараже включение реле
|
Этот сценарий управляет реле Relay34 в зависимости от статуса термостата `Thermostat01.reThermostat01.relay_status. Если значение статуса термостата не пустое, код выполняет следующие действия:
Если термостат включен (status == 1): Включает реле Relay34, если оно не включено.
Если термостат выключен (status == 0): Выключает реле Relay34, если оно не выключено.
Логирование используется для отслеживания состояния термостата и реле, а также для отладки действий.
if (gg("Thermostat01.relay_status") !== "") {
// Получаем текущий статус термостата
$thermostatStatus = gg("Thermostat01.relay_status"); // Статус термостата
$currentRelayStatus = gg("Relay34.status"); // Текущий статус реле Relay34
debmes("Статус термостата: $thermostatStatus", "Проверка");
debmes("Текущий статус Relay34: $currentRelayStatus", "Проверка");
// Если термостат включен, включаем Relay34, если он не включен
if ($thermostatStatus == 1) {
if ($currentRelayStatus == 0) {
debmes("Вызов Relay34.turnOn", "Проверка");
callMethod("Relay34.turnOn"); // Включаем Relay34
debmes("Термостат включен. Включаю Relay34.", "Проверка после вызова");
} else {
debmes("Relay34 уже включен.", "Проверка");
}
}
// Если термостат выключен, выключаем Relay34, если он не выключен
elseif ($thermostatStatus == 0) {
if ($currentRelayStatus == 1) {
debmes("Вызов Relay34.turnOff", "Проверка");
callMethod("Relay34.turnOff"); // Выключаем Relay34
debmes("Термостат выключен. Выключаю Relay34.", "Проверка после вызова");
} else {
debmes("Relay34 уже выключен.", "Проверка");
}
}
}
|
Климат в гараже если включен, отключить боллер
|
Этот сценарий управляет реле YaRelay35 в зависимостиRelay34. Если значение стRelay34 не пустое, код выполняет следующие д
Проверка статуса реле:
Если статус реле Relay34 равен 1 (включен), выполняется команда для выключения реле YaRelay35.
Если статус реле Relay34 равен 0 (выключен), выполняется команда для включения реле YaRelay35.
if (gg("Relay34.status") != "") {
// Получаем статус реле
$thermostatStatus = gg("Relay34.status");
debmes("Статус термостата: $thermostatStatus", "Проверка");
// Если термостат включен (status == 1), выключаем реле YaRelay35
if ($thermostatStatus == 1) {
debmes("Вызов YaRelay35.turnOff", "Проверка");
callMethod("YaRelay35.turnOff"); // Выполняем выключение
debmes("Термостат включен. Выключаю YaRelay35.", "Проверка после вызова");
} else {
// Если термостат выключен (status == 0), включаем реле YaRelay35
debmes("Вызов YaRelay35.turnOn", "Проверка");
callMethod("YaRelay35.turnOn"); // Выполняем включение
debmes("Термостат выключен. Включаю YaRelay35.", "Проверка после вызова");
}
}
|
Критическая температура в гараже
|
if (gg('Sensor_temp09.value') !== '') {
// Проверка условий для Sensor_temp09 и mqttSensor_temp16
if (gg('Sensor_temp09.value') < 5 && gg('mqttSensor_temp16.value') < 5) {
// Включение реле Relay34
callMethod('Relay34.turnOn');
}
}
|
Текущая температура для кондиционера
|
Этот сценарий обновляет значение свойства Ac01.value на основе значениTuSensor_temphum04.value, если активен режимNobodyHomeMode. Если значениеTuSensor_temphum04.value не пустое,
Проверка режима: Если NobodyHomeMode.active не равен 1, продолжается выполнение сценария.
Обработка значений:
Округляется текущее значение TuSensor_temphum04.value.
Сравнивается с предыдущим значением Ac01.value.
Обновление значения: Если текущее значение TuSensor_temphum04.value отличается от предыдущего значения Ac01.value, обновляется значение Ac01.value.
if (gg("TuSensor_temphum04.value") != "") {
debmes("Значение свойства TuSensor_temphum04.value не пустое", "Проверка");
// Проверяем значение NobodyHomeMode.active
if (gg("NobodyHomeMode.active") != 1) {
debmes("NobodyHomeMode.active не равен 1", "Проверка");
// Получаем текущее значение свойства TuSensor_temphum04.value и округляем его до целого
$currentValue = round(gg("TuSensor_temphum04.value"));
debmes("Текущее значение свойства TuSensor_temphum04.value: " . $currentValue, "Проверка");
// Получаем предыдущее значение свойства Ac01.value
$previousValue = gg("Ac01.value");
debmes("Предыдущее значение свойства Ac01.value: " . $previousValue, "Проверка");
// Проверяем, изменилось ли значение
if ($currentValue != $previousValue) {
// Копируем значение из TuSensor_temphum04.value в Ac01.value
setGlobal("Ac01.value", $currentValue);
debmes("Значение свойства TuSensor_temphum04.value скопировано в Ac01.value", "Проверка");
} else {
debmes("Значение свойства TuSensor_temphum04.value не изменилось", "Проверка");
}
} else {
debmes("NobodyHomeMode.active равен 1, скрипт не будет выполняться", "Проверка");
}
}
|
Управление вентиляцией GPT
|
Проверка режима:
Если активен режим NobodyHomeMode (nobodyHomeMode == 1), вентиляция не включается, и соответствующее сообщение записывается в лог.
Управление вентиляцией:
Если режим NobodyHomeMode не активен, сравнивается текущий уровень влажности с порогом ($maxHumidityThreshold = 60%):
Если уровень влажности выше порога и вентиляция выключена, включается вентиляция.
Если уровень влажности ниже порога и вентиляция включена, выключается вентиляция.
if (gg("TuSensor_temphum04.valueHumidity") != "") {
debmes("Значение свойства TuSensor_temphum04.valueHumidity не пустое", "Проверка");
// Получаем значения влажности и статус вентиляции
$humidityLevel = gg("TuSensor_temphum04.valueHumidity");
$ventilationStatus = gg("Relay24.status");
$nobodyHomeMode = gg("NobodyHomeMode.active");
debmes("Уровень влажности: $humidityLevel", "Проверка");
debmes("Статус вентиляции: $ventilationStatus", "Проверка");
debmes("Режим никого нет дома активирован: $nobodyHomeMode", "Проверка");
// Управление вентиляцией
$maxHumidityThreshold = 60;
if ($nobodyHomeMode == 1) {
debmes("Режим никого нет дома активирован. Вентиляция не включается.", "Проверка");
//say('Режим никого нет дома активирован. Вентиляция не включается.');
} else {
if ($humidityLevel > $maxHumidityThreshold) {
if ($ventilationStatus == 0) {
callMethod('Relay24.turnOn');
debmes("Уровень влажности выше $maxHumidityThreshold%. Вентиляция включена.", "Проверка");
say('Уровень влажности выше ' . $maxHumidityThreshold . '%. Включаю вентиляцию.');
} else {
debmes("Уровень влажности выше $maxHumidityThreshold%, но вентиляция уже включена.", "Проверка");
}
} else {
if ($ventilationStatus == 1) {
callMethod('Relay24.turnOff');
debmes("Уровень влажности ниже $maxHumidityThreshold%. Вентиляция выключена.", "Проверка");
say('Уровень влажности ниже ' . $maxHumidityThreshold . '%. Выключаю вентиляцию.');
} else {
debmes("Уровень влажности ниже $maxHumidityThreshold%, но вентиляция уже выключена.", "Проверка");
}
}
}
}
|
Управление вытяжкой по температуре
|
if (gg("Sensor_temp15.value") != "") {
debmes("Значение свойства Sensor_temp15.value не пустое", "Проверка");
// Получаем значение температуры из Sensor_temp15.value
$temperature = gg("Sensor_temp15.value");
// Получаем состояние режима NobodyHomeMode
$nobodyHomeMode = gg("NobodyHomeMode.active");
// Логируем текущее значение температуры и режим NobodyHomeMode
debmes("Текущая температура: $temperature", "Проверка");
debmes("Режим NobodyHomeMode: $nobodyHomeMode", "Проверка");
// Проверяем температуру и состояние режима дома
if ($temperature > 28) {
// Если температура выше 28 градусов
if ($nobodyHomeMode == 0) {
// Если режим NobodyHomeMode не активен
callMethod('Relay24.turnOn'); // Включаем Relay24
debmes("Температура выше 28 градусов, NobodyHomeMode не активен. Включаем Relay24.", "Проверка");
} else {
// Если режим NobodyHomeMode активен
callMethod('Relay24.turnOff'); // Отключаем Relay24
debmes("Температура выше 28 градусов, но NobodyHomeMode активен. Отключаем Relay24.", "Проверка");
}
} else {
// Если температура ниже 28 градусов
callMethod('Relay24.turnOff'); // Отключаем Relay24
debmes("Температура ниже 28 градусов. Отключаем Relay24.", "Проверка");
}
}
|
Управление климатом общий бардак по температуре
|
if (gg("TuSensor_temphum04.value") != "") {
debmes("Значение свойства TuSensor_temphum04.value не пустое", "Проверка");
// Получаем значения температуры и другие параметры
$indoorTemperature = gg("TuSensor_temphum04.value");
$outdoorTemperature = gg("mqttSensor_temp16.value");
$nobodyHomeMode = gg("NobodyHomeMode.active");
$acStatus = gg("Ac01.status");
$humidityLevel = gg("TuSensor_temphum04.valueHumidity");
$ventilationStatus = gg("Relay24.status");
// Целевая температура и допустимое отклонение
$targetTemperature = gg("Ac01.currentTargetValue");
$tolerance = 1;
// Температура радиаторов
$livingRoomRadiatorTemperature = gg("TuSensor_temp18.value");
$kitchenRadiatorTemperature = gg("TuSensor_temp19.value");
debmes("Текущая температура в помещении: $indoorTemperature", "Проверка");
debmes("Текущая температура на улице: $outdoorTemperature", "Проверка");
debmes("Режим NobodyHomeMode: $nobodyHomeMode", "Проверка");
debmes("Статус кондиционера: $acStatus", "Проверка");
debmes("Уровень влажности: $humidityLevel", "Проверка");
debmes("Статус вентиляции: $ventilationStatus", "Проверка");
debmes("Целевая температура: $targetTemperature", "Проверка");
debmes("Температура радиатора в гостиной: $livingRoomRadiatorTemperature", "Проверка");
debmes("Температура радиатора на кухне: $kitchenRadiatorTemperature", "Проверка");
// Проверка NobodyHomeMode.active
if ($nobodyHomeMode == 1) {
// Если режим NobodyHomeMode активен, выключаем кондиционер
if ($acStatus == 1) {
TuyaIR('bf828aa718de7d8066bebo', 'power off');
callMethod('Ac01.turnOff');
debmes("NobodyHomeMode активен. Кондиционер выключен.", "Проверка");
say('Выключаю кондиционер');
} else {
debmes("NobodyHomeMode активен, но кондиционер уже выключен.", "Проверка");
}
} else {
// Проверка температуры
if ($indoorTemperature > $targetTemperature + $tolerance) {
// Если температура выше целевой, включаем кондиционер
if ($acStatus == 0) {
TuyaIR('bf828aa718de7d8066bebo', 'power on');
callMethod('Ac01.turnOn');
debmes("Температура выше $targetTemperature градусов. Кондиционер включен.", "Проверка");
say('Температура выше' . $targetTemperature . ' градусов. Включаю кондиционер');
} else {
debmes("Температура выше $targetTemperature градусов, но кондиционер уже включен.", "Проверка");
}
} else {
// Если температура ниже целевой, выключаем кондиционер
if ($acStatus == 1) {
TuyaIR('bf828aa718de7d8066bebo', 'power off');
callMethod('Ac01.turnOff');
debmes("Температура ниже $targetTemperature градусов. Кондиционер выключен.", "Проверка");
say('Температура ниже ' . $targetTemperature . ' градусов. Выключаю кондиционер');
} else {
debmes("Температура ниже $targetTemperature градусов, но кондиционер уже выключен.", "Проверка");
}
}
// Управление радиаторами
if ($outdoorTemperature < 15 && $indoorTemperature < 16) {
if ($indoorTemperature < $targetTemperature - $tolerance) {
setGlobal('TuSensor_temp18.value', $targetTemperature + 3);
setGlobal('TuSensor_temp19.value', $targetTemperature + 3);
debmes("Температура ниже $targetTemperature градусов. Радиаторы включены.", "Проверка");
say('Температура ниже ' . $targetTemperature . ' градусов. Включаю радиаторы в гостиной и на кухне.');
} else {
setGlobal('TuSensor_temp18.value', 5);
setGlobal('TuSensor_temp19.value', 5);
debmes("Температура выше $targetTemperature градусов. Радиаторы выключены.", "Проверка");
say('Температура выше ' . $targetTemperature . ' градусов. Выключаю радиаторы в гостиной и на кухне.');
}
} else {
debmes("Температура на улице выше 15 градусов или в доме выше 16 градусов. Радиаторы не управляются.", "Проверка");
}
}
// Управление вентиляцией
$maxHumidityThreshold = 60;
if ($humidityLevel > $maxHumidityThreshold) {
if ($ventilationStatus == 0) {
callMethod('Relay24.turnOn');
debmes("Уровень влажности выше $maxHumidityThreshold%. Вентиляция включена.", "Проверка");
say("Уровень влажности выше $maxHumidityThreshold%. Включаю вентиляцию.");
} else {
debmes("Уровень влажности выше $maxHumidityThreshold%, но вентиляция уже включена.", "Проверка");
}
} else {
if ($ventilationStatus == 1) {
callMethod('Relay24.turnOff');
debmes("Уровень влажности ниже $maxHumidityThreshold%. Вентиляция выключена.", "Проверка");
say("Уровень влажности ниже $maxHumidityThreshold%. Выключаю вентиляцию.");
} else {
debmes("Уровень влажности ниже $maxHumidityThreshold%, но вентиляция уже выключена.", "Проверка");
}
}
}
|
Управление кондиционером
|
Этот сценарий управляет состоянием кондиционера на основе температуры на улице и статуса кондиционера (Ac01.status). Если значение статуса не пустое, код выполняет следующие действия:
Получение данных:
Считывается текущее состояние кондиционера (Ac01.status).
Получается температура на улице с датчика mqttSensor_temp16.value.
Устанавливается порог температуры для управления кондиционером — 15 градусов.
Логика управления:
Если температура на улице 15 градусов и выше, проверяется текущее состояние кондиционера:
Если кондиционер выключен (acStatus == 0), он выключается с помощью команды power off.
Если кондиционер включен (acStatus == 1), он включается командойpower on.
Удобство изменения:
Порог температуры вынесен в отдельную переменную $temperatureThreshold, что упрощает настройку и изменение условий активации кондиционера.
if (gg("Ac01.status") != "") {
$acStatus = gg("Ac01.status");
$currentTemp = gg("mqttSensor_temp16.value"); // Получаем температуру на улице
// Устанавливаем порог температуры
$temperatureThreshold = 0;
// Если температура на улице 15 градусов и выше
if ($currentTemp >= $temperatureThreshold) {
// Выполняем команду включения или выключения
if ($acStatus == 0) {
TuyaIR('bf828aa718de7d8066bebo', 'power off');
} elseif ($acStatus == 1) {
TuyaIR('bf828aa718de7d8066bebo', 'power on');
}
}
}
/*
if (gg("Ac01.status") != "") {
$acStatus = gg("Ac01.status");
// Выполняем команду включения или выключения
if ($acStatus == 0) {
TuyaIR('bf828aa718de7d8066bebo', 'power off');
} elseif ($acStatus == 1) {
TuyaIR('bf828aa718de7d8066bebo', 'power on');
}
}
*/
|
Управление кондиционером gpt
|
Этот сценарий управляет кондиционером на основе показателей температуры в помещении, на улице и статуса режима "никого нет дома":
Проверка температуры в помещении: Если температура выше целевой (с учетом допустимого отклонения), кондиционер включается. Если ниже — выключается.
Проверка температуры на улице: Кондиционер включается только если температура на улице выше 15°C.
Режим "никого нет дома": При его активации кондиционер автоматически выключается, если он был включен.
if (gg("TuSensor_temphum04.value") != "") {
debmes("Значение свойства TuSensor_temphum04.value не пустое", "Проверка");
// Получаем значения температуры и другие параметры
$indoorTemperature = gg("TuSensor_temphum04.value");
$acStatus = gg("Ac01.status");
$targetTemperature = gg("Ac01.currentTargetValue");
$tolerance = 1;
$nobodyHomeMode = gg("NobodyHomeMode.active");
$outdoorTemperature = gg("mqttSensor_temp16.value"); // Температура на улице
$outdoorTempThreshold = 5; // Порог температуры на улице
debmes("Текущая температура в помещении: $indoorTemperature", "Проверка");
debmes("Режим никого нет дома активирован: $nobodyHomeMode", "Проверка");
debmes("Статус кондиционера: $acStatus", "Проверка");
debmes("Целевая температура: $targetTemperature", "Проверка");
debmes("Температура на улице: $outdoorTemperature", "Проверка");
// Проверка NobodyHomeMode.active
if ($nobodyHomeMode == 1) {
// Если режим NobodyHomeMode активен, выключаем кондиционер
if ($acStatus == 1) {
TuyaIR('bf828aa718de7d8066bebo', 'power off');
callMethod('Ac01.turnOff');
debmes("Режим никого нет дома активирован. Кондиционер выключен.", "Проверка");
} else {
debmes("Режим никого нет дома активирован, но кондиционер уже выключен.", "Проверка");
}
} else {
// Проверка температуры
if ($indoorTemperature > $targetTemperature + $tolerance) {
// Проверяем температуру на улице перед включением
if ($outdoorTemperature >= $outdoorTempThreshold) {
// Если температура выше целевой и на улице не холодно, включаем кондиционер
if ($acStatus == 0) {
TuyaIR('bf828aa718de7d8066bebo', 'power on');
callMethod('Ac01.turnOn');
debmes("Температура в помещении выше $targetTemperature градусов. Кондиционер включен.", "Проверка");
} else {
debmes("Температура в помещении выше $targetTemperature градусов, но кондиционер уже включен.", "Проверка");
}
} else {
debmes("Температура на улице ниже $outdoorTempThreshold градусов. Кондиционер не включен.", "Проверка");
}
} else {
// Если температура ниже целевой, выключаем кондиционер
if ($acStatus == 1) {
TuyaIR('bf828aa718de7d8066bebo', 'power off');
callMethod('Ac01.turnOff');
debmes("Температура в помещении ниже $targetTemperature градусов. Кондиционер выключен.", "Проверка");
} else {
debmes("Температура в помещении ниже $targetTemperature градусов, но кондиционер уже выключен.", "Проверка");
}
}
}
}
/*
if (gg("TuSensor_temphum04.value") != "") {
debmes("Значение свойства TuSensor_temphum04.value не пустое", "Проверка");
// Получаем значения температуры и другие параметры
$indoorTemperature = gg("TuSensor_temphum04.value");
$acStatus = gg("Ac01.status");
$targetTemperature = gg("Ac01.currentTargetValue");
$tolerance = 1;
$nobodyHomeMode = gg("NobodyHomeMode.active");
debmes("Текущая температура в помещении: $indoorTemperature", "Проверка");
debmes("Режим никого нет дома активирован: $nobodyHomeMode", "Проверка");
debmes("Статус кондиционера: $acStatus", "Проверка");
debmes("Целевая температура: $targetTemperature", "Проверка");
// Проверка NobodyHomeMode.active
if ($nobodyHomeMode == 1) {
// Если режим NobodyHomeMode активен, выключаем кондиционер
if ($acStatus == 1) {
TuyaIR('bf828aa718de7d8066bebo', 'power off');
callMethod('Ac01.turnOff');
debmes("Режим никого нет дома активирован. Кондиционер выключен.", "Проверка");
say('Режим никого нет дома активирован. Выключаю кондиционер.');
} else {
debmes("Режим никого нет дома активирован, но кондиционер уже выключен.", "Проверка");
}
} else {
// Проверка температуры
if ($indoorTemperature > $targetTemperature + $tolerance) {
// Если температура выше целевой, включаем кондиционер
if ($acStatus == 0) {
TuyaIR('bf828aa718de7d8066bebo', 'power on');
callMethod('Ac01.turnOn');
debmes("Температура в помещении выше $targetTemperature градусов. Кондиционер включен.", "Проверка");
say('Температура в помещении выше ' . $targetTemperature . ' градусов. Включаю кондиционер.');
} else {
debmes("Температура в помещении выше $targetTemperature градусов, но кондиционер уже включен.", "Проверка");
}
} else {
// Если температура ниже целевой, выключаем кондиционер
if ($acStatus == 1) {
TuyaIR('bf828aa718de7d8066bebo', 'power off');
callMethod('Ac01.turnOff');
debmes("Температура в помещении ниже $targetTemperature градусов. Кондиционер выключен.", "Проверка");
say('Температура в помещении ниже ' . $targetTemperature . ' градусов. Выключаю кондиционер.');
} else {
debmes("Температура в помещении ниже $targetTemperature градусов, но кондиционер уже выключен.", "Проверка");
}
}
}
}
*/
|
Управление радиаторами (гостиная) gpt
|
if (gg("TuSensor_temphum04.value") != "") {
debmes("Значение свойства TuSensor_temphum04.value не пустое", "Проверка");
$indoorTemperature = gg("TuSensor_temphum04.value");
$targetTemperature = gg("Ac01.currentTargetValue");
$tolerance = 1;
$acStatus = gg("Ac01.status"); // Статус кондиционера
$outdoorTemperature = gg("mqttSensor_temp16.value"); // Температура на улице
debmes("Текущая температура в помещении: $indoorTemperature", "Проверка");
debmes("Целевая температура: $targetTemperature", "Проверка");
debmes("Статус кондиционера: $acStatus", "Проверка");
debmes("Текущая температура на улице: $outdoorTemperature", "Проверка");
if ($outdoorTemperature < 15 && $indoorTemperature < 16) {
if ($acStatus == 0) { // Проверяем, что кондиционер выключен
if ($indoorTemperature < $targetTemperature - $tolerance) {
setGlobal('TuSensor_temp18.value', $targetTemperature + 3);
debmes("Температура ниже $targetTemperature градусов. Радиатор в гостиной включен.", "Проверка");
say('Температура ниже ' . $targetTemperature . ' градусов. Включаю радиатор в гостиной.');
} else {
setGlobal('TuSensor_temp18.value', 5);
debmes("Температура выше $targetTemperature градусов. Радиатор в гостиной выключен.", "Проверка");
say('Температура выше ' . $targetTemperature . ' градусов. Выключаю радиатор в гостиной.');
}
} else {
debmes("Кондиционер включен. Радиатор в гостиной не будет включен.", "Проверка");
say('Кондиционер включен. Радиатор в гостиной не будет включен.');
}
} else {
debmes("Температура на улице выше 15 градусов или в доме выше 16 градусов. Радиатор в гостиной не управляется.", "Проверка");
say('Температура на улице выше 15 градусов или в доме выше 16 градусов. Радиатор в гостиной не управляется.');
}
}
|
Управление радиаторами (кухня) gpt
|
if (gg("mqttSensor_temp16.value") != "") {
debmes("Значение свойства mqttSensor_temp16.value не пустое", "Проверка");
$outdoorTemperature = gg("mqttSensor_temp16.value");
$indoorTemperature = gg("TuSensor_temphum04.value");
$targetTemperature = gg("Ac01.currentTargetValue");
$tolerance = 1;
$acStatus = gg("Ac01.status"); // Статус кондиционера
debmes("Текущая температура на улице: $outdoorTemperature", "Проверка");
debmes("Текущая температура в помещении: $indoorTemperature", "Проверка");
debmes("Целевая температура: $targetTemperature", "Проверка");
debmes("Статус кондиционера: $acStatus", "Проверка");
if ($outdoorTemperature < 15 && $indoorTemperature < 16) {
if ($acStatus == 0) { // Проверяем, что кондиционер выключен
if ($indoorTemperature < $targetTemperature - $tolerance) {
setGlobal('TuSensor_temp19.value', $targetTemperature + 3);
debmes("Температура ниже $targetTemperature градусов. Радиатор в кухне включен.", "Проверка");
say('Температура ниже ' . $targetTemperature . ' градусов. Включаю радиатор в кухне.');
} else {
setGlobal('TuSensor_temp19.value', 5);
debmes("Температура выше $targetTemperature градусов. Радиатор в кухне выключен.", "Проверка");
say('Температура выше ' . $targetTemperature . ' градусов. Выключаю радиатор в кухне.');
}
} else {
debmes("Кондиционер включен. Радиатор в кухне не будет включен.", "Проверка");
say('Кондиционер включен. Радиатор в кухне не будет включен.');
}
} else {
debmes("Температура на улице выше 15 градусов или в доме выше 16 градусов. Радиатор в кухне не управляется.", "Проверка");
say('Температура на улице выше 15 градусов или в доме выше 16 градусов. Радиатор в кухне не управляется.');
}
}
|
Управление радиаторами в кухне gpt
|
if (gg("mqttSensor_temp16.value") != "") {
debmes("Значение свойства mqttSensor_temp16.value не пустое", "Проверка");
// Получаем значения температуры и другие параметры
$indoorTemperature = gg("Sensor_temp15.value");
$outdoorTemperature = gg("mqttSensor_temp16.value");
$targetTemperature = gg("Ac01.currentTargetValue");
$tolerance = 1;
debmes("Текущая температура на улице: $outdoorTemperature", "Проверка");
debmes("Текущая температура над плитой: $indoorTemperature", "Проверка");
debmes("Целевая температура: $targetTemperature", "Проверка");
// Управление радиаторами
if ($outdoorTemperature < 15 && $indoorTemperature < 16) {
if ($indoorTemperature < $targetTemperature - $tolerance) {
setGlobal('TuSensor_temp18.value', $targetTemperature + 3);
setGlobal('TuSensor_temp19.value', $targetTemperature + 3);
debmes("Температура над плитой ниже $targetTemperature градусов. Радиаторы включены.", "Проверка");
say('Температура над плитой ниже ' . $targetTemperature . ' градусов. Включаю радиаторы в гостиной и на кухне.');
} else {
setGlobal('TuSensor_temp18.value', 5);
setGlobal('TuSensor_temp19.value', 5);
debmes("Температура над плитой выше $targetTemperature градусов. Радиаторы выключены.", "Проверка");
say('Температура над плитой выше ' . $targetTemperature . ' градусов. Выключаю радиаторы в гостиной и на кухне.');
}
} else {
debmes("Температура на улице выше 15 градусов или над плитой выше 16 градусов. Радиаторы не управляются.", "Проверка");
}
}
|
000001
|
Приветствую, дамы и господа! Меня зовут Алиса, и я представляю вам умный дом системы МажорДоМо - вашего надежного помощника во всех делах! Сегодня я с радостью расскажу вам о том, что я знаю и умею. Наша первая демонстрация будет посвящена управлению освещением. Я могу управлять различными приборами и освещением в разных комнатах. Обратите внимание, как я это делаю. Вы когда-нибудь забывали выключить свет перед уходом из комнаты? Не волнуйтесь, я здесь, чтобы помочь! Если постояльцы забывают выключить свет, я, как истинная 'Спасительница света', беру инициативу в свои виртуальные руки и выключаю его самостоятельно. Ведь экономия энергии - это наша общая цель!
// 1. Воспроизводим длинный текст по частям
$speechParts = [
"Приветствую, дамы и господа! Меня зовут Алиса,",
"и я представляю вам умный дом системы МажорДоМо -",
"вашего надежного помощника во всех делах! Сегодня",
"я с радостью расскажу вам о том, что я знаю и умею.",
"Наша первая демонстрация будет посвящена управлению",
"освещением. Я могу управлять различными приборами",
"и освещением в разных комнатах. Обратите внимание,",
"как я это делаю. Вы когда-нибудь забывали выключить свет",
"перед уходом из комнаты? Не волнуйтесь, я здесь, чтобы",
"помочь! Если постояльцы забывают выключить свет, я,",
"как истинная 'Спасительница света', беру инициативу в",
"свои виртуальные руки и выключаю его самостоятельно.",
"Ведь экономия энергии - это наша общая цель!"
];
foreach ($speechParts as $part) {
sayReply($part, 2);
// Пауза перед следующей частью
sleep(1);
}
sleep(1);
// 2. Узнаем, какое реле в данный момент включено и переключаем его.
$relayNames = ['Relay04', 'Relay07', 'Relay05', 'Relay11', 'Relay09']; // Список реле
$pauseDuration = 2; // Длительность паузы в секундах
foreach ($relayNames as $relayName) {
$relayStatus = gg($relayName . '.status');
if ($relayStatus == 1) {
//sayReply("Выключаю $relayName.", 2);
callMethod($relayName . '.turnOff');
// Ждем 5 секунд
sleep($pauseDuration);
//sayReply("Включаю $relayName.", 2);
callMethod($relayName . '.turnOn');
}
}
sleep(10);
// 3. Включаем все реле
foreach ($relayNames as $relayName) {
//sayReply("Включаю $relayName.", 2);
callMethod($relayName . '.turnOn');
// Пауза перед следующим реле
sleep($pauseDuration);
}
// 3. Выключаем все реле
foreach ($relayNames as $relayName) {
//say("Включаю $relayName.", 2);
callMethod($relayName . '.turnOff');
// Пауза перед следующим реле
sleep($pauseDuration);
}
sleep(5);
callMethod("Relay05.turnOn");
setTimeout('potolok', 'callMethod("Relay05.turnOff");', 60*5);
setTimeout('000001', 'runScript("000002");', 5);
|
000002
|
// 1. Воспроизводим длинный текст по частям
$speechParts = [
"Кстати, говоря о температуре, я также могу быть полезной.",
"Я знаю какая температура в каждой комнате, например:"
];
foreach ($speechParts as $part) {
sayReply($part, 2);
// Пауза перед следующей частью
sleep(1);
}
setTimeout('000002', 'runScript("000003");', 5);
|
000003
|
// Список комнат и их склонения
$roomList = array(
'Кухня' => 'кухне',
'Ванная' => 'ванной',
'Гараж' => 'гараже',
'Гостиная' => 'гостиной',
'Детская' => 'детской',
'Кабинет' => 'кабинете',
'Коридор' => 'коридоре',
'Крыльцо' => 'крыльце',
'Приус' => 'Приусе',
'Прихожая' => 'прихожей',
'Спальня' => 'спальне',
'Теплица' => 'теплице',
'Туалет' => 'туалете',
'Элеватор' => 'элеваторе'
);
// Получим список всех объектов
$objects = getObjectsByClass('rooms');
// Выберем 4 случайные комнаты
$randomRooms = array_rand($objects, 4);
foreach ($randomRooms as $roomIndex) {
$object = $objects[$roomIndex];
// Получим название комнаты из свойства .Title
$roomTitle = gg($object['TITLE'] . '.Title');
// Получим правильное склонение названия комнаты
$roomName = getRoomName($roomTitle, $roomList);
// Проверим наличие свойства .Temperature
if (gg($object['TITLE'] . '.Temperature')) {
$temperature = gg($object['TITLE'] . '.Temperature');
// Проверим, если это крыльцо, то обязательно озвучим его температуру
if ($roomTitle === 'Крыльцо') {
sayReply('Температура на ' . $roomName . ' ' . $temperature . ' градусов', 2);
} else {
sayReply('Температура в ' . $roomName . ' ' . $temperature . ' градусов', 2);
}
}
}
function getRoomName($title, $roomList) {
// Ищем склонение в списке комнат
return isset($roomList[$title]) ? $roomList[$title] : $title;
}
setTimeout('000003', 'runScript("000004");', 5);
|
000004
|
// 1. Воспроизводим длинный текст по частям
$speechParts = [
"Если в кухне становится жарко и температура",
"поднимается выше 26 градусов, я автоматически включаю",
"вытяжку. Это помогает поддерживать комфортный климат",
"и избежать 'плавления' от жары."
];
foreach ($speechParts as $part) {
sayReply($part, 2);
// Пауза перед следующей частью
sleep(1);
}
setTimeout('000004', 'runScript("000005");', 5);
|
000005
|
// 1. Воспроизводим длинный текст по частям
$speechParts = [
"Благодаря моим наблюдениям и анализу данных, я могу",
"сообщить вам, средняя температуру в доме по всем комнатам.",
];
foreach ($speechParts as $part) {
sayReply($part, 2);
// Пауза перед следующей частью
sleep(1);
}
// Список комнат и их склонения
$roomList = array(
'Кухня' => 'кухне',
'Ванная' => 'ванной',
'Гостиная' => 'гостиной',
'Детская' => 'детской',
'Кабинет' => 'кабинете',
'Коридор' => 'коридоре',
'Приус' => 'Приусе',
'Прихожая' => 'прихожей',
'Спальня' => 'спальне',
'Туалет' => 'туалете'
);
// Получим список всех объектов
$objects = getObjectsByClass('rooms');
$totalTemperature = 0;
$roomCount = 0;
foreach ($objects as $object) {
// Получим название комнаты из свойства .Title
$roomTitle = gg($object['TITLE'] . '.Title');
// Проверим, исключена ли комната
if (isset($roomList[$roomTitle])) {
// Получим правильное склонение названия комнаты
$roomName = $roomList[$roomTitle];
// Проверим наличие свойства .Temperature
if (gg($object['TITLE'] . '.Temperature')) {
$temperature = gg($object['TITLE'] . '.Temperature');
// Добавим температуру к общей сумме
$totalTemperature += $temperature;
$roomCount++;
}
}
}
// Рассчитаем среднюю температуру и округлим до целого числа
if ($roomCount > 0) {
$averageTemperature = round($totalTemperature / $roomCount);
say('Таким образом температура по дому составляет ' . $averageTemperature . ' градусов', 2);
} else {
say('В выбранных комнатах нет данных о температуре', 2);
}
setTimeout('000005', 'runScript("000006");', 5);
|
000006
|
// 1. Воспроизводим длинный текст по частям
$speechParts = [
"Так же я слежу за температурой в гараже,",
" управляя включением и отключением регистра",
" для поддержания установленной заранее температуры",
"и экономии электроэнергии.",
];
foreach ($speechParts as $part) {
sayReply($part, 2);
// Пауза перед следующей частью
sleep(1);
}
// Получим среднюю температуру в гараже за месяц
$startTime = strtotime("-1 month"); // Начало месяца назад
$stopTime = time();
$roomName = 'Garazh';
$roomTitle = gg("rooms.$roomName.Title"); // Новая переменная для русского названия
$temperature = getHistoryValue("rooms.$roomName.Temperature", $startTime, $stopTime);
if ($temperature !== false) {
$roundedTemperature = round($temperature); // Округляем температуру до целого числа
sayReply("Средняя температура в гараже за месяц составляет $roundedTemperature °C", 2);
} else {
sayReply("Нет данных о температуре в гараже за последний месяц", 2);
}
setTimeout('000006', 'runScript("000007");', 5);
|
000007
|
// 1. Воспроизводим длинный текст по частям
$speechParts = [
"Я, Алиса, ваш верный помощник, и всегда готова к",
"шуткам и юмору, ведь хорошее настроение - это важная",
"составляющая нашей жизни! Так что давайте веселиться",
"вместе и создавать комфорт в нашем умном доме",
];
foreach ($speechParts as $part) {
sayReply($part, 2);
// Пауза перед следующей частью
sleep(1);
}
setTimeout('000007', 'runScript("000008");', 5);
|
001
|
// Приветствие
say("Привет! Меня зовут Алиса. Я ваш персональный помощник в управлении умным домом системы МаджорДоМо.", 2);
say("Сейчас я расскажу вам о том, что я знаю и умею.", 2);
// Управление освещением
say("Я могу управлять различными приборами и освещением. Посмотрите, как я это делаю:", 2);
say("Когда дело касается экономии энергии, я - незаменимый помощник!", 2);
say("Я не только отвечаю на вопросы и выполняю задачи, но и следя за постояльцами,", 2);
say("которые, оказывается, иногда забывают выключить свет перед уходом. В таких случаях", 2);
say("я беру инициативу в свои 'руки' и сама выключаю свет, устанавливая дом в режим экономии.", 2);
say("Наверное, мне пора получить звание 'Спасительницы света'! Хотя, возможно, немного преувеличиваю,", 2);
say("но кто сказал, что юмор не помогает нам в легких ситуациях? Я готова быть юмористическим помощником,", 2);
say("ведь смех - лучшее лекарство для сердца!", 2);
// Управление температурой
say("Еще я знаю какая температура в каждой комнате и могу на нее повлиять.", 2);
say("Если в кухне поднимается температура выше 26 градусов, я включаю вытяжку.", 2);
// Средняя температура
$roundedTemperature = 31; // Подставьте фактическое значение средней температуры
say("Таким образом средняя температура по дому составляет:", 2);
say("Средняя температура в гараже за месяц составляет $roundedTemperature °C", 2);
|
11
|
$relayStatus = gg('Relay06.status');
if ($relayStatus == 0) {
say('Включаю свет', 2);
callMethod('Relay06.turnOn');
} elseif ($relayStatus == 1) {
say('Выключаю свет', 2);
callMethod('Relay06.turnOff');
}
|
continue_intro
|
Привет! Меня зовут Алиса. Я ваш персональный помощник в управлении умным домом системы МаджорДоМо
sayReply('Приветствую, дамы и господа!', 2);
sayReply('Меня зовут Алиса. Я ваш персональный помощник в управлении умным домом системы МаджорДоМо', 2);
//sayReply('Меня зовут Алиса, и я представляю вам умный дом системы МажорДоМо -', 2);
sayReply('Вашего надежного помощника во всех делах!', 2);
sayReply('Я с радостью расскажу вам о том, что я знаю и умею.', 2);
sayReply('Наша первая демонстрация будет посвящена управлению освещением.', 2);
setTimeout('continue_intro', 'runScript("continue_intro_001");', 5);
|
continue_intro_001
|
Сейчас я расскажу вам о том, что я знаю и умею
sayReply('Сейчас я расскажу вам о том, что я знаю и умею.', 2);
setTimeout('continue_intro_001', 'runScript("continue_intro_002");', 5);
|
continue_intro_002
|
Я могу управлять различными приборами и освещением. Посмотрите, как я это делаю:
sayReply('Во первых, Я умею управлять различными приборами и освещением. Посмотрите, как я это делаю:', 2);
setTimeout('continue_intro_002', 'runScript("continue_intro_004");', 5);
|
continue_intro_003
|
Включаю Выключаю весь свет!
// 1 Бра
$relayStatus = gg('Relay04.status');
if ($relayStatus == 0) {
sayReply('Включаю Бра.', 2);
callMethod('Relay04.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю Бра.', 2);
callMethod('Relay04.turnOff');
}
sleep(5);
// 2 Бра
$relayStatus = gg('Relay04.status');
if ($relayStatus == 0) {
sayReply('Включаю Бра.', 2);
callMethod('Relay04.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю Бра.', 2);
callMethod('Relay04.turnOff');
}
sleep(5);
// 1 Свет над столом
$relayStatus = gg('Relay07.status');
if ($relayStatus == 0) {
sayReply('Включаю свет над столом', 2);
callMethod('Relay07.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет над столом', 2);
callMethod('Relay07.turnOff');
}
sleep(5);
// 2 Свет над столом
$relayStatus = gg('Relay07.status');
if ($relayStatus == 0) {
sayReply('Включаю свет над столом', 2);
callMethod('Relay07.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет над столом', 2);
callMethod('Relay07.turnOff');
}
sleep(5);
// 1 Верхняя подсветка
$relayStatus = gg('Relay05.status');
if ($relayStatus == 0) {
sayReply('Включаю верхнюю подсветку.', 2);
callMethod('Relay05.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю верхнюю подсветку.', 2);
callMethod('Relay05.turnOff');
}
sleep(5);
// 2 Верхняя подсветка
$relayStatus = gg('Relay05.status');
if ($relayStatus == 0) {
sayReply('Включаю верхнюю подсветку.', 2);
callMethod('Relay05.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю верхнюю подсветку.', 2);
callMethod('Relay05.turnOff');
}
sleep(5);
// 1 Свет в прихожей
$relayStatus = gg('Relay11.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в прихожей.', 2);
callMethod('Relay11.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в прихожей.', 2);
callMethod('Relay11.turnOff');
}
sleep(5);
// 2 Свет в прихожей
$relayStatus = gg('Relay11.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в прихожей.', 2);
callMethod('Relay11.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в прихожей.', 2);
callMethod('Relay11.turnOff');
}
sleep(5);
// 1 Свет в ванной
$relayStatus = gg('Relay09.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в ванной.', 2);
callMethod('Relay09.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в ванной.', 2);
callMethod('Relay09.turnOff');
}
sleep(5);
// 2 Свет в ванной
$relayStatus = gg('Relay09.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в ванной.', 2);
callMethod('Relay09.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в ванной.', 2);
callMethod('Relay09.turnOff');
}
setTimeout('continue_intro_003', 'runScript("continue_intro_013");', 5);
|
continue_intro_004
|
Включаю свет над столом.
$relayStatus = gg('Relay07.status');
if ($relayStatus == 0) {
sayReply('Включаю свет над столом', 2);
callMethod('Relay07.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет над столом', 2);
callMethod('Relay07.turnOff');
}
sleep(5);
$relayStatus = gg('Relay07.status');
if ($relayStatus == 0) {
sayReply('Включаю свет над столом', 2);
callMethod('Relay07.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет над столом', 2);
callMethod('Relay07.turnOff');
}
setTimeout('continue_intro_004', 'runScript("continue_intro_005");', 5);
|
continue_intro_005
|
Включаю верхнюю подсветку.
$relayStatus = gg('Relay05.status');
if ($relayStatus == 0) {
sayReply('Включаю верхнюю подсветку.', 2);
callMethod('Relay05.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю верхнюю подсветку.', 2);
callMethod('Relay05.turnOff');
}
sleep(5);
$relayStatus = gg('Relay05.status');
if ($relayStatus == 0) {
sayReply('Включаю верхнюю подсветку.', 2);
callMethod('Relay05.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю верхнюю подсветку.', 2);
callMethod('Relay05.turnOff');
}
setTimeout('continue_intro_005', 'runScript("continue_intro_006");', 5);
|
continue_intro_006
|
Включаю свет в прихожей.
$relayStatus = gg('Relay11.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в прихожей.', 2);
callMethod('Relay11.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в прихожей.', 2);
callMethod('Relay11.turnOff');
}
sleep(5);
$relayStatus = gg('Relay11.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в прихожей.', 2);
callMethod('Relay11.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в прихожей.', 2);
callMethod('Relay11.turnOff');
}
setTimeout('continue_intro_006', 'runScript("continue_intro_007");', 5);
|
continue_intro_007
|
Включаю свет в ванной.
$relayStatus = gg('Relay09.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в ванной.', 2);
callMethod('Relay09.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в ванной.', 2);
callMethod('Relay09.turnOff');
}
sleep(5);
$relayStatus = gg('Relay09.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в ванной.', 2);
callMethod('Relay09.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в ванной.', 2);
callMethod('Relay09.turnOff');
}
setTimeout('continue_intro_007', 'runScript("continue_intro_008");', 5);
|
continue_intro_008
|
Выключаю Бра.
$relayStatus = gg('Relay04.status');
if ($relayStatus == 0) {
sayReply('Включаю Бра.', 2);
callMethod('Relay04.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю Бра.', 2);
callMethod('Relay04.turnOff');
}
sleep(5);
$relayStatus = gg('Relay04.status');
if ($relayStatus == 0) {
sayReply('Включаю Бра.', 2);
callMethod('Relay04.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю Бра.', 2);
callMethod('Relay04.turnOff');
}
setTimeout('continue_intro_008', 'runScript("continue_intro_013");', 5);
|
continue_intro_009
|
Выключаю свет над столом.
$relayStatus = gg('Relay07.status');
if ($relayStatus == 0) {
sayReply('Включаю свет над столом.', 2);
callMethod('Relay07.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет над столом.', 2);
callMethod('Relay07.turnOff');
}
setTimeout('continue_intro_009', 'runScript("continue_intro_010");', 5);
|
continue_intro_010
|
Выключаю вытяжку.
$relayStatus = gg('Relay05.status');
if ($relayStatus == 0) {
sayReply('Включаю вытяжку.', 2);
callMethod('Relay05.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю вытяжку.', 2);
callMethod('Relay05.turnOff');
}
setTimeout('continue_intro_010', 'runScript("continue_intro_011");', 5);
|
continue_intro_011
|
Выключаю свет в прихожей.
$relayStatus = gg('Relay11.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в прихожей.', 2);
callMethod('Relay11.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в прихожей.', 2);
callMethod('Relay11.turnOff');
}
//setTimeout('continue_intro_011', 'runScript("continue_intro_012");', 5);
|
continue_intro_012
|
Выключаю свет в ванной.
$relayStatus = gg('Relay09.status');
if ($relayStatus == 0) {
sayReply('Включаю свет в ванной.', 2);
callMethod('Relay09.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю свет в ванной.', 2);
callMethod('Relay09.turnOff');
}
//setTimeout('continue_intro_012', 'runScript("continue_intro_013");', 5);
|
continue_intro_013
|
Еще я знаю какая температура в каждой комнате и могу на нее повлиять, например если в кухне температура поднимется выше 26 градусов, я включаю вытяжку.
sayReply('Так же, я знаю какая температура в каждой комнате и могу на нее повлиять,', 2);
sleep(5);
sayReply('например если в кухне температура поднимется выше 27 градусов, я включаю вытяжку.', 2);
sleep(5);
$relayStatus = gg('Relay24.status');
if ($relayStatus == 0) {
sayReply('Включаю вытяжку.', 2);
callMethod('Relay24.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю вытяжку.', 2);
callMethod('Relay24.turnOff');
}
sleep(5);
$relayStatus = gg('Relay24.status');
if ($relayStatus == 0) {
sayReply('Включаю вытяжку.', 2);
callMethod('Relay24.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю вытяжку.', 2);
callMethod('Relay24.turnOff');
}
sleep(5);
sayReply('Для примера температура в других комнатах следующая:', 2);
setTimeout('continue_intro_013', 'runScript("continue_intro_014");', 5);
|
continue_intro_014
|
Температура в комнатах
// Список комнат и их склонения
$roomList = array(
'Кухня' => 'кухне',
'Ванная' => 'ванной',
'Гараж' => 'гараже',
'Гостиная' => 'гостиной',
'Детская' => 'детской',
'Кабинет' => 'кабинете',
'Коридор' => 'коридоре',
'Крыльцо' => 'крыльце',
'Приус' => 'Приусе',
'Прихожая' => 'прихожей',
'Спальня' => 'спальне',
'Теплица' => 'теплице',
'Туалет' => 'туалете',
'Элеватор' => 'элеваторе'
);
// Получим список всех объектов
$objects = getObjectsByClass('rooms');
// Выберем 4 случайные комнаты
$randomRooms = array_rand($objects, 4);
foreach ($randomRooms as $roomIndex) {
$object = $objects[$roomIndex];
// Получим название комнаты из свойства .Title
$roomTitle = gg($object['TITLE'] . '.Title');
// Получим правильное склонение названия комнаты
$roomName = getRoomName($roomTitle, $roomList);
// Проверим наличие свойства .Temperature
if (gg($object['TITLE'] . '.Temperature')) {
$temperature = gg($object['TITLE'] . '.Temperature');
// Проверим, если это крыльцо, то обязательно озвучим его температуру
if ($roomTitle === 'Крыльцо') {
sayReply('Температура на ' . $roomName . ' ' . $temperature . ' °C', 2);
} else {
sayReply('Температура в ' . $roomName . ' ' . $temperature . ' °C', 2);
}
}
}
function getRoomName($title, $roomList) {
// Ищем склонение в списке комнат
return isset($roomList[$title]) ? $roomList[$title] : $title;
}
setTimeout('continue_intro_014', 'runScript("continue_intro_015");', 5);
|
continue_intro_015
|
Температура в комнате
say('Если в кухне поднимается температура выше Включаю вытяжку.', 2);
$relayStatus = gg('Relay24.status');
if ($relayStatus == 0) {
sayReply('Включаю вытяжку.', 2);
callMethod('Relay24.turnOn');
} elseif ($relayStatus == 1) {
sayReply('Выключаю вытяжку.', 2);
callMethod('Relay24.turnOff');
}
setTimeout('continue_intro_015', 'runScript("continue_intro_016");', 5);
|
continue_intro_016
|
Средняя температура по дому
// Список комнат и их склонения
$roomList = array(
'Кухня' => 'кухне',
'Ванная' => 'ванной',
'Гостиная' => 'гостиной',
'Детская' => 'детской',
'Кабинет' => 'кабинете',
'Коридор' => 'коридоре',
'Приус' => 'Приусе',
'Прихожая' => 'прихожей',
'Спальня' => 'спальне',
'Туалет' => 'туалете'
);
// Получим список всех объектов
$objects = getObjectsByClass('rooms');
$totalTemperature = 0;
$roomCount = 0;
foreach ($objects as $object) {
// Получим название комнаты из свойства .Title
$roomTitle = gg($object['TITLE'] . '.Title');
// Проверим, исключена ли комната
if (isset($roomList[$roomTitle])) {
// Получим правильное склонение названия комнаты
$roomName = $roomList[$roomTitle];
// Проверим наличие свойства .Temperature
if (gg($object['TITLE'] . '.Temperature')) {
$temperature = gg($object['TITLE'] . '.Temperature');
// Добавим температуру к общей сумме
$totalTemperature += $temperature;
$roomCount++;
}
}
}
// Рассчитаем среднюю температуру и округлим до целого числа
if ($roomCount > 0) {
$averageTemperature = round($totalTemperature / $roomCount);
sayReply('Таким образом средняя температура по дому составляет ' . $averageTemperature . ' °C', 2);
} else {
sayReply('В выбранных комнатах нет данных о температуре', 2);
}
setTimeout('continue_intro_016', 'runScript("continue_intro_017");', 5);
|
continue_intro_017
|
Так же я слежу за температурой в гараже, управляя включением и отключением регистра для поддержания установленной заранее температуры и экономии электроэнергии. Средняя температура в гараже за месяц составляет $roundedTemperature °C
say("Так же я слежу за температурой в гараже, управляя включением и отключением регистра для поддержания установленной заранее температуры и экономии электроэнергии.", 2);
// Получим среднюю температуру в гараже за месяц
$startTime = strtotime("-1 month"); // Начало месяца назад
$stopTime = time();
$roomName = 'Garazh';
$roomTitle = gg("rooms.$roomName.Title"); // Новая переменная для русского названия
$temperature = getHistoryValue("rooms.$roomName.Temperature", $startTime, $stopTime);
if ($temperature !== false) {
$roundedTemperature = round($temperature); // Округляем температуру до целого числа
sayReply("Средняя температура в гараже за месяц составляет $roundedTemperature °C", 2);
} else {
sayReply("Нет данных о температуре в гараже за последний месяц", 2);
}
setTimeout('continue_intro_017', 'runScript("continue_intro_018");', 5);
|
continue_intro_018
|
Спасибо за внимание!
sayReply("Спасибо за внимание!", 2);
|
vffg
|
// Определим переменные с возможностями умного дома
$osv = "Я могу включить свет, регулировать температуру и следить за безопасностью!";
$security = "А еще я умею распознавать лица. Если кто-то посторонний, я тут же оповещу!";
$entertainment = "Кроме того, я мастер по подбору музыки. Вам нужно настроение? Я знаю, что вам нужно!";
$humor = "И, конечно, я не против пошутить. Нажмите на кнопку 'Шутка' и я вас подниму настроением!";
// Генерация случайного юмористического ответа
$humor_responses = [
"Почему дома умный дом? Потому что он всегда знает, где ваш ключи!",
"Как умный дом проводит вечер? За просмотром своих любимых сериалов!",
"Если бы я был кофеваркой, я бы включилась утром и говорила: 'Доброе утро, хозяин!'",
];
$random_humor = $humor_responses[array_rand($humor_responses)];
// Выводим ответ с использованием команды sayReply
sayReply("$osv\n$security\n$entertainment\n$humor\n$random_humor");
|
Демонстрация
|
setTimeout('continue_intro', 'runScript("continue_intro");', 5);
|
Погода старт
|
setTimeout('Погода', 'runScript("Погода01");', 2);
|
Погода01
|
//$weather .= "Сейчас на улице " . getGlobal('ow_fact.temperature') . '.'; sayReply($weather, 2);
// Создаем переменную для температуры
$temperature = getGlobal('ow_fact.temperature');
// Определяем склонение для слова "градус Цельсия" в зависимости от значения температуры
if ($temperature % 10 == 1 && $temperature % 100 != 11) {
$degrees_word = 'градус Цельсия';
} elseif (in_array($temperature % 10, [2, 3, 4]) && !in_array($temperature % 100, [12, 13, 14])) {
$degrees_word = 'градуса Цельсия';
} else {
$degrees_word = 'градусов Цельсия';
}
// Формируем предложение с учетом склонения слова "градус Цельсия"
$weather .= "Сейчас на улице " . $temperature . ' ' . $degrees_word . '.';
sayReply($weather, 2);
setTimeout('Погода01', 'runScript("Погода02");', 2);
|
Погода02
|
if (getGlobal('ow_fact.temperature') != getGlobal('ow_fact.temp_feels_like')) {
$weather = "Ощущается как " . getGlobal('ow_fact.temp_feels_like') . '.'; sayReply($weather, 2);
}
setTimeout('Погода02', 'runScript("Погода03");', 2);
|
Погода03
|
$weather = "Влажность " . getGlobal('ow_fact.humidity') . '%.'; sayReply($weather, 2);
setTimeout('Погода03', 'runScript("Погода04");', 2);
|
Погода04
|
//$weather = "Ветер " . getGlobal('ow_fact.wind_direction_full') . '.'; sayReply($weather, 2);
// Функция для склонения направления ветра на русский язык
function declineWindDirection($direction) {
$directions = array(
"Север" => "Северный",
"Северо-северо-восток" => "Северо-северо-восточный",
"Северо-восток" => "Северо-восточный",
"Востоко-северо-восток" => "Востоко-северо-восточный",
"Восток" => "Восточный",
"Востоко-юго-восток" => "Востоко-юго-восточный",
"Юго-восток" => "Юго-восточный",
"Юго-юго-восток" => "Юго-юго-восточный",
"Юг" => "Южный",
"Юго-юго-запад" => "Юго-юго-западный",
"Юго-запад" => "Юго-западный",
"Западо-юго-запад" => "Западо-юго-западный",
"Запад" => "Западный",
"Западо-северо-запад" => "Западо-северо-западный",
"Северо-запад" => "Северо-западный",
"Северо-северо-запад" => "Северо-северо-западный"
);
if (array_key_exists($direction, $directions)) {
return $directions[$direction];
} else {
return $direction; // Если направление не найдено в списке, возвращаем как есть
}
}
// Получаем направление ветра
$wind_direction = getGlobal('ow_fact.wind_direction_full');
// Склоняем направление ветра
$declined_direction = declineWindDirection($wind_direction);
// Формируем сообщение
$weather = "Ветер: " . $declined_direction . '.';
say($weather, 2);
setTimeout('Погода04', 'runScript("Погода05");', 2);
|
Погода05
|
$weather = getGlobal('ow_fact.wind_speed') . ' метр в секунду.'; sayReply($weather, 2);
setTimeout('Погода05', 'runScript("Погода06");', 2);
|
Погода06
|
$weather = getGlobal('ow_fact.weather_type') . '.'; sayReply($weather, 2);
setTimeout('Погода06', 'runScript("Погода07");', 2);
|
Погода07
|
$weather = "Облачность: " . getGlobal('ow_fact.clouds') . '%.'; sayReply($weather, 2);
setTimeout('Погода07', 'runScript("Погода08");', 2);
|
Погода08
|
$weather = "Давление: " . getGlobal('ow_fact.pressure_mmhg') . ' миллиметров ртутного столба.'; sayReply($weather, 2);
setTimeout('Погода08', 'runScript("Погода09");', 2);
|
Погода09
|
$weather = "Восход солнца: " . getGlobal('ow_fact.sunrise') . ' .'; sayReply($weather, 2);
setTimeout('Погода09', 'runScript("Погода10");', 2);
|
Погода10
|
$weather = "Закат: " . getGlobal('ow_fact.sunset') . ' .'; sayReply($weather, 2);
setTimeout('Погода10', 'runScript("Погода11");', 2);
|
Погода11
|
$weather = "Продолжительность дня: " . getGlobal('ow_fact.day_length') . '.'; sayReply($weather, 2);
setTimeout('Погода11', 'runScript("Погода12");', 2);
|
Погода12
|
$weather = "Спасибо за внимание. "; sayReply($weather, 2);
|
onNewDay
|
Создает в ThisComputer свойство день недели Понедельник - Воскресенье
$h=(int)date('G',time());
$m=date('i',time());
sg('ThisComputer.DayOfMonthNum',date('d'));
sg('ThisComputer.DayOfWeekTXT',date('l'));
sg('ThisComputer.MonthTXTalt',date('F'));
sg('ThisComputer.DateD',date('d'));
sg('ThisComputer.DateM',date('m'));
sg('ThisComputer.DateY',date('Y'));
setGlobal('Date',date('d.m.Y'));
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Monday') {
setGlobal('Day.Понедельник', '1');
setGlobal('ThisComputer.Day', 'Понедельник');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Monday') {
setGlobal('Day.Понедельник', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Tuesday') {
setGlobal('Day.Вторник', '1');
setGlobal('ThisComputer.Day', 'Вторник');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Tuesday') {
setGlobal('Day.Вторник', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Wednesday') {
setGlobal('Day.Среда', '1');
setGlobal('ThisComputer.Day', 'Среда');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Wednesday') {
setGlobal('Day.Среда', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Thursday') {
setGlobal('Day.Четверг', '1');
setGlobal('ThisComputer.Day', 'Четверг');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Thursday') {
setGlobal('Day.Четверг', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Friday') {
setGlobal('Day.Пятница', '1');
setGlobal('ThisComputer.Day', 'Пятница');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Friday') {
setGlobal('Day.Пятница', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Saturday') {
setGlobal('Day.Суббота', '1');
setGlobal('ThisComputer.Day', 'Суббота');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Saturday') {
setGlobal('Day.Суббота', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Sunday') {
setGlobal('Day.Воскресенье', '1');
setGlobal('ThisComputer.Day', 'Воскресенье');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Sunday') {
setGlobal('Day.Воскресенье', '0');
}
|
onNewMonth
|
Создает в ThisComputer свойство день месяца Январь - Декабрь
if (getGlobal('ThisComputer.MonthTXTalt') == 'January') {
setGlobal('Month.Январь', '1');
sg('ThisComputer.Month','Январь');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'January') {
setGlobal('Month.Январь', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'February') {
setGlobal('Month.Февраль', '1');
sg('ThisComputer.Month','Февраль');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'February') {
setGlobal('Month.Февраль', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'March') {
setGlobal('Month.Март', '1');
sg('ThisComputer.Month','Март');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'March') {
setGlobal('Month.Март', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'April') {
setGlobal('Month.Апрель', '1');
sg('ThisComputer.Month','Апрель');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'April') {
setGlobal('Month.Апрель', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'May') {
setGlobal('Month.Май', '1');
sg('ThisComputer.Month','Май');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'May') {
setGlobal('Month.Май', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'June') {
setGlobal('Month.Июнь', '1');
sg('ThisComputer.Month','Июнь');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'June') {
setGlobal('Month.Июнь', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'July') {
setGlobal('Month.Июль', '1');
sg('ThisComputer.Month','Июль');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'July') {
setGlobal('Month.Июль', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'August') {
setGlobal('Month.Август', '1');
sg('ThisComputer.Month','Август');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'August') {
setGlobal('Month.Август', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'September') {
setGlobal('Month.Сентябрь', '1');
sg('ThisComputer.Month','Сентябрь');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'September') {
setGlobal('Month.Сентябрь', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'October') {
setGlobal('Month.Октябрь', '1');
sg('ThisComputer.Month','Октябрь');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'October') {
setGlobal('Month.Октябрь', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'November') {
setGlobal('Month.Ноябрь', '1');
sg('ThisComputer.Month','Ноябрь');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'November') {
setGlobal('Month.Ноябрь', '0');
}
if (getGlobal('ThisComputer.MonthTXTalt') == 'December') {
setGlobal('Month.Декабрь', '1');
sg('ThisComputer.Month','Декабрь');
} else if (getGlobal('ThisComputer.MonthTXTalt') != 'December') {
setGlobal('Month.Декабрь', '0');
}
|
Активация сцены Пурпур
|
Активировать сцену Пурпур
if (getGlobal('Activate.ScenePurple') == '') {
runScript('onNewDay', array());
runScript('onNewMonth', array());
runScript('Вычисляем фазу луны', array());
runScript('Выставляем настройку луна или солнце', array());
runScript('Вычисляем восход и заход солнца', array());
runScript('Активировать системные иконки', array());
runScript('Стандартные настройки темы Пурпур - кнопки на левой стороне', array());
runScript('Стандартные настройки темы Пурпур - кнопки на правой стороне', array());
runScript('Стандартные настройки темы Пурпур - Название служебных кнопок справа', array());
runScript('Стандартные настройки темы Пурпур - присвоить ссылку для кнопки админ', array());
runScript('Стандартные настройки темы Пурпур - часы', array());
runScript('Стандартные настройки темы Пурпур - погода', array());
runScript('Стандартные настройки темы Пурпур - календарь', array());
runScript('Пин код', array());
setGlobal('SysInfo.EventHistoryHide', '0');
setGlobal('Activate.ScenePurple', '1');
say('Тема "Пурпур" установлена', 2);
}
|
Активировать системные иконки
|
setGlobal('SysInfo'.'.'.'SystemColor', 'red');
setGlobal('SysInfo'.'.'.'CommunicationColor', 'red');
setGlobal('SysInfo'.'.'.'SecurityColor', 'red');
|
Выставляем настройку луна или солнце
|
Если сумеречный режим активен, то установится луна
if (getGlobal('DarknessMode'.'.'.'active') == 0) {
setGlobal('SysInfo'.'.'.'TimeDay', 'sun');
} else if (getGlobal('DarknessMode'.'.'.'active') == 1) {
setGlobal('SysInfo'.'.'.'TimeDay', 'moon');
}
|
Вычисляем восход и заход солнца
|
Вычисление восхода и захода солнца определяется исходя моего места проживания
$h=(int)date('G',time());
$sun_info = date_sun_info(time(), 55.70, 37.91); //Координаты моего места проживания
setGlobal('SunRiseTime',date("H:i", $sun_info['sunrise'])); //Восход
setGlobal('SunSetTime',date("H:i", $sun_info['sunset'])); //Закат
|
Вычисляем фазу луны
|
Вычисление фазы луны
include("./MoonPhase.php");
// create an instance of the class, and use the current time
$moon = new MoonPhase();
//$age = round( $moon->age(), 1 );
$age = round( $moon->age(), 0 );
$stage = $moon->phase() < 0.5 ? 'растущая' : 'убывающая';
$distance = round( $moon->distance(), 2 );
$nextnewtime = gmdate( 'G:i:s', $moon->next_new_moon() );
$nextnewdate = gmdate( 'd.m.Y', $moon->next_new_moon() );
$nextfulltime = gmdate( 'G:i:s', $moon->next_full_moon() );
$nextfulldate = gmdate( 'd.m.Y', $moon->next_full_moon() );
$phasename = $moon->phase_name();
sg('MoonAge',$age); //Возраст луны (лунный день)
sg('MoonStage',$stage); //Стадия луны
sg('MoonDistance',$distance); //Дистанция до луны
sg('MoonNextNewTime',$nextnewtime); //Время следующего полнолуния
sg('MoonNextNewDate',$nextnewdate); //Новолуние
sg('MoonNextFullTime',$nextfulltime); //Длительность лунного дня
sg('MoonNextFullDate',$nextfulldate); //Дата следующего полнолуния
sg('MoonPhaseName',$phasename); //Фаза луны
sg('SysInfo.MoonPhaseName',$phasename);//Передача значении в класс ScenePurple
|
Пин код
|
sg('PinCode.pincode','123456');
sg('PinCode.pincode_mask',"");
sg('PinCode.pincode_text',"");
sg('PinCode.pincode_visible',"0");
sg('PinCode.pincode_url_copy',"");
sg('PinCode.pincode_url',"");
sg('PinCode.pincode_text_final',"");
|
Стандартные настройки темы Пурпур - календарь
|
setGlobal('SettingСalendar.fontFamily', 'Candara');
setGlobal('SettingСalendar.fontSize', '28');
setGlobal('SettingСalendar.fontStyle', 'italic');
setGlobal('SettingСalendar.fontWeight', 'normal');
setGlobal('SettingСalendar.colorRGB', 'ffffff');
setGlobal('SettingСalendar.fontFamilyDateD', 'Candara');
setGlobal('SettingСalendar.fontSizeDateD', '80');
setGlobal('SettingСalendar.fontStyleDateD', 'italic');
setGlobal('SettingСalendar.fontWeightDateD', 'normal');
setGlobal('SettingСalendar.colorDateD', 'ffffff');
|
Стандартные настройки темы Пурпур - кнопки на левой стороне
|
setGlobal('SetupButton.FontTitleButton', 'Candara');
setGlobal('SetupButton.FontSizeTitleButton', '30');
setGlobal('SetupButton.FontStyleTitleButton', 'italic');
setGlobal('SetupButton.FontWeightTitleButton', 'normal');
setGlobal('SetupButton.FontColorTitleButton', 'ffffff');
setGlobal('SetupButton.FontInfoButton', 'Candara');
setGlobal('SetupButton.FontSizeInfoButton', '22');
setGlobal('SetupButton.FontStyleInfoButton', 'normal');
setGlobal('SetupButton.FontWeightInfoButton', 'normal');
setGlobal('SetupButton.FontColorInfoButton', 'ffffff');
setGlobal('SetupButton.backgroundButton', '0,0,0');
setGlobal('SetupButton.backgroundTransparency', '0.3');
setGlobal('SetupButton.IndicatorColorActive', '00FF00');
setGlobal('SetupButton.IndicatorColorNoActive', '9400D3');
setGlobal('Button01.SomebodyHere', '1');
setGlobal('Button02.SomebodyHere', '1');
setGlobal('Button03.SomebodyHere', '1');
setGlobal('Button04.SomebodyHere', '1');
setGlobal('Button05.SomebodyHere', '1');
setGlobal('Button06.SomebodyHere', '1');
setGlobal('Button07.SomebodyHere', '1');
setGlobal('Button01.Hiddenbutton', '0');
setGlobal('Button02.Hiddenbutton', '0');
setGlobal('Button03.Hiddenbutton', '0');
setGlobal('Button04.Hiddenbutton', '0');
setGlobal('Button05.Hiddenbutton', '0');
setGlobal('Button06.Hiddenbutton', '0');
setGlobal('Button07.Hiddenbutton', '0');
$timerCode=<<<EOT
setGlobal('Button01.SomebodyHere', '0');
setGlobal('Button02.SomebodyHere', '0');
setGlobal('Button03.SomebodyHere', '0');
setGlobal('Button04.SomebodyHere', '0');
setGlobal('Button05.SomebodyHere', '0');
setGlobal('Button06.SomebodyHere', '0');
setGlobal('Button07.SomebodyHere', '0');
EOT;
setTimeOut('SomebodyHereOff', $timerCode, (int)('5'));
|
Стандартные настройки темы Пурпур - кнопки на правой стороне
|
setGlobal('SetupRightButton.backgroundBand', '148, 0, 211');
setGlobal('SetupRightButton.backgroundBandTransparency', '0.9');
setGlobal('SetupRightButton.backgroundButton', '0,0,0');
setGlobal('SetupRightButton.backgroundTransparency', '0.5');
setGlobal('SetupRightButton.FontTitleButton', 'Candara');
setGlobal('SetupRightButton.FontSizeTitleButton', '20');
setGlobal('SetupRightButton.FontStyleTitleButton', 'italic');
setGlobal('SetupRightButton.FontWeightTitleButton', 'normal');
setGlobal('SetupRightButton.FontColorTitleButton', 'ffffff');
|
Стандартные настройки темы Пурпур - Название служебных кнопок справа
|
setGlobal('Button08.NameButton', 'Инфо');
setGlobal('Button09.NameButton', 'Меню');
setGlobal('Button10.NameButton', 'Админ');
|
Стандартные настройки темы Пурпур - погода
|
setGlobal('SettingWeather.fontFamilyCity', 'Candara');
setGlobal('SettingWeather.fontSizeCity', '30');
setGlobal('SettingWeather.fontStyleCity', 'italic');
setGlobal('SettingWeather.fontWeightCity', 'normal');
setGlobal('SettingWeather.colorCity', 'ffffff');
setGlobal('SettingWeather.fontFamilyTemperature', 'Candara');
setGlobal('SettingWeather.fontSizeTemperature', '40');
setGlobal('SettingWeather.fontStyleTemperature', 'italic');
setGlobal('SettingWeather.fontWeightTemperature', 'normal');
setGlobal('SettingWeather.colorTemperature', 'ffffff');
setGlobal('SettingWeather.fontFamilyCondition', 'Candara');
setGlobal('SettingWeather.fontSizeCondition', '17');
setGlobal('SettingWeather.fontStyleCondition', 'italic');
setGlobal('SettingWeather.fontWeightCondition', 'normal');
setGlobal('SettingWeather.colorCondition', 'ffffff');
setGlobal('SettingWeather.fontFamilySunsetandSunrise', 'Candara');
setGlobal('SettingWeather.fontSizeSunsetandSunrise', '22');
setGlobal('SettingWeather.fontStyleSunsetandSunrise', 'italic');
setGlobal('SettingWeather.fontWeightSunsetandSunrise', 'normal');
setGlobal('SettingWeather.colorSunsetandSunrise', 'ffffff');
|
Стандартные настройки темы Пурпур - часы
|
setGlobal('SettingClock.fontFamily', 'Segoe-Print');
setGlobal('SettingClock.fontSize', '100');
setGlobal('SettingClock.fontStyle', 'normal');
setGlobal('SettingClock.fontWeight', 'normal');
setGlobal('SettingClock.colorRGB', 'ffffff');
|
Блокировать/разблокировать датчик движения в кухне по шторе
|
if (gg("Openable01.status") != "") {
$status = getGlobal("Openable01.status");
if ($status == 0) {
callMethod('Motion02.blockSensor');
say("Датчик движения в кухне заблокирован.", 2);
debmes("Датчик Motion02 заблокирован, так как Openable01.status равно 0.", "Проверка");
} else {
callMethod('Motion02.unblockSensor');
say("Датчик движения в кухне разблокирован.", 2);
debmes("Датчик Motion02 разблокирован, так как Openable01.status равно 1.", "Проверка");
}
}
|
Если включился Бра в кухне закрыть штору
|
if (gg("Relay04.status") != "") {
$relayStatus = getGlobal("Relay04.status");
if ($relayStatus == 1) {
$openableStatus = getGlobal("Openable01.status");
if ($openableStatus == 0) {
callMethod('Openable01.close');
callMethod('Relay06.turnOn');
debmes("Relay04.status равно 1, Openable01.status равно 0. Запускаем методы Openable01.close и Relay06.turnOn.", "Проверка");
} else {
debmes("Relay04.status равно 1, но Openable01.status равно 1. Действия не выполнены.", "Проверка");
}
}
}
|
Если включился Свет над столом в кухне закрыть штору
|
if (gg("Relay07.status") != "") {
$relayStatus = getGlobal("Relay07.status");
if ($relayStatus == 1) {
$openableStatus = getGlobal("Openable01.status");
if ($openableStatus == 0) {
callMethod('Openable01.close');
callMethod('Relay06.turnOn');
debmes("Relay07.status равно 1, Openable01.status равно 0. Запускаем методы Openable01.close и Relay06.turnOn.", "Проверка");
} else {
debmes("Relay07.status равно 1, но Openable01.status равно 1. Действия не выполнены.", "Проверка");
}
}
}
|
Открыть/Закрыть шторы
|
if (gg("DarknessMode.active") != "") {
// Проверяем активацию режима темноты
if (getGlobal('DarknessMode.active') == 1) {
// Если режим темноты активен, закрываем шторы
// Проверяем статус шторы в кухне
$kitchenCurtainStatus = getGlobal('Openable01.status');
$kitchenWindowStatus = getGlobal('TuOpenclose04.status');
// Если штора открыта, проверяем статус окна
if ($kitchenCurtainStatus == 0) {
if ($kitchenWindowStatus == 1) {
// Если окно открыто, выводим предупреждение и ставим таймер
say("Окно в кухне открыто. Штору не закроем, пока окно не будет закрыто.", 2);
setTimeout('close_curtains', 'runScript("Открыть/Закрыть шторы");', 60*30);
} else {
// Если окно закрыто, закрываем штору
callMethod('Openable01.close'); // штора в кухне
sleep(3);
}
}
// Проверяем статус шторы в гостиной
$livingRoomCurtainStatus = getGlobal('Openable02.status');
$livingRoomWindowStatus = getGlobal('TuOpenclose03.status');
// Если штора открыта, проверяем статус окна
if ($livingRoomCurtainStatus == 0) {
if ($livingRoomWindowStatus == 1) {
// Если окно открыто, выводим предупреждение и ставим таймер
say("Окно в гостиной открыто. Штору не закроем, пока окно не будет закрыто.", 2);
setTimeout('close_curtains', 'runScript("Открыть/Закрыть шторы");', 60*30);
} else {
// Если окно закрыто, закрываем штору
callMethod('Openable02.close'); // штора в гостиной
sleep(3);
}
}
// Проверяем статус шторы в детской
$nurseryCurtainStatus = getGlobal('Openable03.status');
$nurseryWindowStatus = getGlobal('TuOpenclose06.status');
// Проверяем, активен ли режим темноты (то есть, если еще не наступил восход солнца)
$isDarknessModeActive = getGlobal('DarknessMode.active');
// Время 7:00 утра в формате hh:mm
$time_7am = '07:00';
$time_7am_timestamp = timeConvert($time_7am);
// Текущее время в формате timestamp
$current_time = time();
// Логика открытия штор
if ($nurseryCurtainStatus == 0) {
if ($nurseryWindowStatus == 1) {
// Если окно открыто, выводим предупреждение и ставим таймер
say("Окно в детской открыто. Штору не закроем, пока окно не будет закрыто.", 2);
setTimeout('close_curtains', 'runScript("Открыть/Закрыть шторы");', 60 * 30);
} else {
// Если окно закрыто, закрываем штору
callMethod('Openable03.close'); // штора в детской
sleep(3);
}
} else {
// Логика открытия штор в зависимости от восхода солнца и времени 7:00
if ($isDarknessModeActive == 1) {
// Если еще темно (режим DarknessMode активен), открываем шторы в 7:00
$delay = $time_7am_timestamp - $current_time;
setTimeOut("open_curtains", "cmdExec('open_curtains')", $delay);
} else {
// Если уже светло (режим DarknessMode не активен), открываем шторы сразу
cmdExec('open_curtains');
}
}
// Проверяем статус шторы в кабинете
$officeCurtainStatus = getGlobal('Openable04.status');
$officeWindowStatus = getGlobal('TuOpenclose05.status');
// Если штора открыта, проверяем статус окна
if ($officeCurtainStatus == 0) {
if ($officeWindowStatus == 1) {
// Если окно открыто, выводим предупреждение и ставим таймер
say("Окно в кабинете открыто. Штору не закроем, пока окно не будет закрыто.", 2);
setTimeout('close_curtains', 'runScript("Открыть/Закрыть шторы");', 60*30);
} else {
// Если окно закрыто, закрываем штору
callMethod('Openable04.close'); // штора в кабинете
sleep(3);
}
}
} else {
// Если режим темноты не активен, открываем шторы
// Проверяем состояние шторы в кухне перед открытием
if (getGlobal('Openable01.status') == 1) {
callMethod('Openable01.open'); // Открываем штору в кухне, если она закрыта
sleep(3);
}
// Проверяем состояние шторы в гостиной перед открытием
if (getGlobal('Openable02.status') == 1) {
callMethod('Openable02.open'); // Открываем штору в гостиной, если она закрыта
sleep(3);
}
// Проверяем состояние шторы в детской перед открытием
if (getGlobal('Openable03.status') == 1) {
callMethod('Openable03.open'); // Открываем штору в детской, если она закрыта
sleep(3);
}
// Проверяем состояние шторы в кабинете перед открытием
if (getGlobal('Openable04.status') == 1) {
callMethod('Openable04.open'); // Открываем штору в кабинете, если она закрыта
}
}
callMethod('TuOpenclose05.keepAlive');
callMethod('TuOpenclose06.keepAlive');
callMethod('TuLeak01.keepAlive');
callMethod('Openclose07.keepAlive');
}
|
Открыть/Закрыть шторы NightMode
|
if (getGlobal("NightMode.active") != "") {
// Проверяем состояние DarknessMode и NightMode
if (getGlobal("NightMode.active") == 0) {
runScript('Открыть/Закрыть шторы_copy');
}
}
|
Открыть/Закрыть шторы_copy
|
if (gg("DarknessMode.active") != "") {
// Проверяем состояние DarknessMode и NightMode
if (getGlobal('DarknessMode.active') == 1) {
// DarknessMode активен, закрываем шторы
if (getGlobal('Openable01.status') == 0) {
if (getGlobal('TuOpenclose04.status') == 1) {
say('Окно в кухне открыто. Штору не закроем, пока окно не будет закрыто.', 2);
setTimeout('close_Openable01', 'runScript("Открыть/Закрыть шторы");', 60 * 30);
} else {
callMethod('Openable01.close');
sleep(3);
}
}
if (getGlobal('Openable02.status') == 0) {
if (getGlobal('TuOpenclose03.status') == 1) {
say('Окно в гостиной открыто. Штору не закроем, пока окно не будет закрыто.', 2);
setTimeout('close_Openable02', 'runScript("Открыть/Закрыть шторы");', 60 * 30);
} else {
callMethod('Openable02.close');
sleep(3);
}
}
if (getGlobal('Openable03.status') == 0) {
if (getGlobal('TuOpenclose06.status') == 1) {
say('Окно в детской открыто. Штору не закроем, пока окно не будет закрыто.', 2);
setTimeout('close_Openable03', 'runScript("Открыть/Закрыть шторы");', 60 * 30);
} else {
callMethod('Openable03.close');
sleep(3);
}
}
if (getGlobal('Openable04.status') == 0) {
if (getGlobal('TuOpenclose05.status') == 1) {
say('Окно в кабинете открыто. Штору не закроем, пока окно не будет закрыто.', 2);
setTimeout('close_Openable04', 'runScript("Открыть/Закрыть шторы");', 60 * 30);
} else {
callMethod('Openable04.close');
sleep(3);
}
}
} elseif (getGlobal('NightMode.active') != 1) {
// DarknessMode не активен и NightMode не активен — открываем шторы
if (getGlobal('Openable01.status') == 1) {
callMethod('Openable01.open');
sleep(3);
}
if (getGlobal('Openable02.status') == 1) {
callMethod('Openable02.open');
sleep(3);
}
if (getGlobal('Openable03.status') == 1) {
callMethod('Openable03.open');
sleep(3);
}
if (getGlobal('Openable04.status') == 1) {
callMethod('Openable04.open');
sleep(3);
}
}
// Поддерживаем датчики активными
callMethod('TuOpenclose05.keepAlive');
callMethod('TuOpenclose06.keepAlive');
callMethod('TuLeak01.keepAlive');
callMethod('Openclose07.keepAlive');
}
|