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);
|
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);
|