Время пути до работы

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Время пути до работы

Сообщение webms » Пт фев 02, 2018 3:54 pm

Было бы здорово утром пока чищу зубы услышать сколько мне ехать на работу.
Например сценарий:
Открываю дверь ванны, срабатывает датчик и Алиса говорит: Доброе утро Максим, сегодня путь до работы займет дольше обычного на 15 мин. Время пути приблизительно 58 минут. На улице гололед, погода минус 16 и....."

Мб у кого-то уже так реализовано?
Если нет, давайте попробуем вместе, здорово же будет :)

PS: Где то в коннекте я видел скрипт, но он не заработал у меня =( автор не ответил на сообщение.

UPDATE: Готовый код https://majordomo.smartliving.ru/forum/ ... =10#p71161
Последний раз редактировалось webms Чт фев 08, 2018 3:07 pm, всего редактировалось 1 раз.
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Время пути до работы

Сообщение webms » Пт фев 02, 2018 3:59 pm

Нашел

Код: Выделить всё

$from = gg('home.adress');
$to = gg('work.adress');;
$route = getDurationInGoogle($from, $to);

$res = '';
$duration = $route['in_traffic'] - $route['duration'];
if ($duration > 0) {
    $res .= 'Путь от дома до работы, c учетом пробок займет примерно ' . chti($route['in_traffic'], 'минута', 'минуты', 'минут') . '. ';
     $res .= 'Что на ' . chti($duration, 'минута', 'минуты', 'минут') . ' дольше обычного.';
     if ($duration > 10) {
        $res .= ' Лучше пойти пешком!';
    }
} else {
    $res .= 'Путь от дома до работы займет примерно ' . chti($route['duration'], 'минута', 'минуты', 'минут') . '.';
}

say($res); 
Пользователь: https://majordomo.smartliving.ru/forum/ ... file&u=506
Аватара пользователя
slgeo
Сообщения: 551
Зарегистрирован: Чт фев 05, 2015 2:35 pm
Откуда: РнД
Благодарил (а): 139 раз
Поблагодарили: 74 раза

Re: Время пути до работы

Сообщение slgeo » Пт фев 02, 2018 7:23 pm

В идеале, конечно, лучше Яндекс-пробки учитывать, но там по словам nickmail затык и так просто не выдернуть.

Ну, и самое главное по коду выше - не хватает функции getDurationInGoogle
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
igoryan
Сообщения: 18
Зарегистрирован: Вт сен 15, 2015 11:37 am
Благодарил (а): 9 раз
Поблагодарили: 12 раз

Re: Время пути до работы

Сообщение igoryan » Пт фев 02, 2018 11:49 pm

Немного переделанный скрипт геокодер от directman66, за что ему спасибо.
Гугл карты

Код: Выделить всё

$from="";//Откуда, можно координаты или название улицы 
$to="";//Куда, можно координаты или название улицы 
$start_time="now";// Время отправления, можно использовать now, время как целое число в секундах с полуночи 1 января 1970 г. по UTC
//$api_key=""; апи ключ гугл
$URL = "https://maps.googleapis.com/maps/api/directions/json?origin=".$from."&destination=".$to."&departure_time=".$start_time."&trafficmodel=bestguess&mode=driving&language=ru&key=".$api_key;
$data = getUrl( $URL );
$json = json_decode( $data );
$distance = $json->routes[0]->legs[0]->distance->text;// Расстояние
$duration = $json->routes[0]->legs[0]->duration->text;// Продолжительность маршрута
//$duration_in_traffic=$json->routes[0]->legs[0]->duration_in_traffic->text; Продолжительность маршрута с учетом дорожной обстановки
sayReply($distance);
sayReply($duration);
//sayReply($duration_in_traffic);
 
$url привести к виду одной строки

Получить ключ можно : https://developers.google.com/maps/docu ... -key?hl=ru

Продолжительность маршрута с учетом дорожной обстановки (duration_in_traffic) будет отображаться только если есть валидный апи ключ.

Если ключа нету, тогда удалите "&key=".$api_key".
Ссылка будет : $URL = "https://maps.googleapis.com/maps/api/di ... anguage=ru";

Подробнее о параметрах можно почитаться тут: https://developers.google.com/maps/docu ... ntro?hl=ru
За это сообщение автора igoryan поблагодарили (всего 3):
slgeo (Сб фев 03, 2018 1:29 am) • webms (Пн фев 05, 2018 8:11 am) • directman66 (Чт фев 08, 2018 11:50 am)
Рейтинг: 3.49%
Аватара пользователя
slgeo
Сообщения: 551
Зарегистрирован: Чт фев 05, 2015 2:35 pm
Откуда: РнД
Благодарил (а): 139 раз
Поблагодарили: 74 раза

Re: Время пути до работы

Сообщение slgeo » Сб фев 03, 2018 1:47 am

Подскажите, как достать значение summary из такого ответа:
СпойлерПоказать

Код: Выделить всё

{
  "routes" : [
    {
      "bounds" : {
        "northeast" : {
          "lat" : 55.79283659999999,
          "lng" : 49.2216592
        },
        "southwest" : {
          "lat" : 55.73007759999999,
          "lng" : 49.1309371
        }
      },
      "copyrights" : "Картографические данные © 2014 Google",
      "legs" : [ ],
      "overview_polyline" : {
        "points" : "qffsIk{zjHEwKpKcAvGo@bFk@bGg@vFg@hEIxFQHcTL{a@FkCF_AFm@L_@Zs@Pa@f@cB|@gDb@aBbAuDrByIrAqIhB{LTaDFoA?uAK_B]gEe@oEKk@]]}@u@AGCIEEkEsCgAy@o@o@mBwBmCyCyAaBSQiAg@iBq@aAWmGaA_AKUFm@MiACU@i@Jj@sAVW^YbAs@T_@Nq@?_@Eu@g@iCuBcHq@yCIy@Aq@Fq@He@nCmGhC{FnGcNbA}BNa@TeAPqAZmDzBiWJ}@Da@cA_CiFmLc@aAkBkEqBiEcP__@oHmPaE}IgD}HaCiFcGyM}H{PcFeLyKqV_BuDyA}CaCqF{HgQsCuGyAiDsAoCk@cAe@u@iAmAq@k@m@]aA_@oA]m@IuCK_C@yMGwUO_M@{B?yUSuEAqG?aD@cM@qFDoFEs@?iPGiDEgA?yAEoFAoDCo@?mGEmGE_JEsGAq@BaCHsAJKqAHcBn@HEsDBADEJ]FIPEZ?LJTB"
      },
      "summary" : "пр.  Победы",
      "warnings" : [],
      "waypoint_order" : []
    }
  ],
  "status" : "OK"
}
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
igoryan
Сообщения: 18
Зарегистрирован: Вт сен 15, 2015 11:37 am
Благодарил (а): 9 раз
Поблагодарили: 12 раз

Re: Время пути до работы

Сообщение igoryan » Сб фев 03, 2018 11:06 am

Если из кода выше, то :

Код: Выделить всё

$summary=$json->routes[0]->summary;
 
За это сообщение автора igoryan поблагодарил:
slgeo (Сб фев 03, 2018 12:14 pm)
Рейтинг: 1.16%
Аватара пользователя
slgeo
Сообщения: 551
Зарегистрирован: Чт фев 05, 2015 2:35 pm
Откуда: РнД
Благодарил (а): 139 раз
Поблагодарили: 74 раза

Re: Время пути до работы

Сообщение slgeo » Сб фев 03, 2018 12:09 pm

igoryan писал(а):Если из кода выше, то :

Код: Выделить всё

$summary=$json->routes[0]->summary;
 
Спасибо, точно утро вечера мудренее.
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
Аватара пользователя
slgeo
Сообщения: 551
Зарегистрирован: Чт фев 05, 2015 2:35 pm
Откуда: РнД
Благодарил (а): 139 раз
Поблагодарили: 74 раза

Re: Время пути до работы

Сообщение slgeo » Сб фев 03, 2018 1:27 pm

Чуть допилил скрипт для работы с шаблонами:
Создаем скрипт GetRouteToAddress с кодом:

Код: Выделить всё

$from=<сюда вбиваем адрес дома или постоянное место отправления>; //координаты или название улицы, вместо пробелов ставим %20                                                                                                                                                              
$to=gg("admin.GEO_toAddress"); // в свойство объекта будем сохранять адрес куда едем
if ($to == "работы") {
   $to=<сюда вбиваем адрес работы>;//Куда, вместо пробелов ставим %20   
}
else
{ 
$to = $to."<желательно дополнить названием города и области/края>";
// подменяем пробелы, иначе не обрабатывается
$to = str_replace(' ','%20',$to);
}
$start_time="now";// Время отправления, можно использовать now, время как целое число в секундах с полуночи 1 января 1970 г. по UTC
$api_key=gg("admin.GEO_api_key"); //апи ключ гугл желательно хранить в свойстве объекта, а не в коде
$URL = "https://maps.googleapis.com/maps/api/directions/json?origin=".$from."&destination=".$to."&departure_time=".$start_time."&trafficmodel=bestguess&mode=driving&language=ru&key=".$api_key;
$data = getUrl( $URL );
$json = json_decode( $data );
$distance = $json->routes[0]->legs[0]->distance->text;// Расстояние
sg("admin.GEO_distance",$distance);
$duration = $json->routes[0]->legs[0]->duration->text;// Продолжительность маршрута
sg("admin.GEO_duration",$duration);
$duration_in_traffic=$json->routes[0]->legs[0]->duration_in_traffic->text; //Продолжительность маршрута с учетом дорожной обстановки
sg("admin.GEO_duration_in_traffic",$duration_in_traffic);
//$summary = $json->routes[0]->summary[0]->text;// Ключевая точка маршрута
$summary=$json->routes[0]->summary;
DebMes("Маршрут до ".gg("admin.GEO_toAddress"));
DebMes("Расстояние ".$distance);
DebMes("Конечный адрес ".$json->routes[0]->legs[0]->end_address);
DebMes("Через - ".$summary); // все DebMes после отладки можно закомментировать
say("Маршрут с учетом пробок до ".gg("admin.GEO_toAddress")." займет ".$duration_in_traffic." через ".$summary,1);
 
Ну, и сам код шаблона
Маршрут до(.+)|Поехали на(.+)

Код: Выделить всё

sg("admin.GEO_toAddress",trim($matches[1]));
RunScript("GetRouteToAddress");
За это сообщение автора slgeo поблагодарили (всего 3):
TrDA (Вс фев 04, 2018 4:23 pm) • webms (Пн фев 05, 2018 8:13 am) • igoryan (Пн фев 05, 2018 4:39 pm)
Рейтинг: 3.49%
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Время пути до работы

Сообщение webms » Пн фев 05, 2018 8:13 am

igoryan, slgeo спасибо вам ОГРОМНОЕ
Последний раз редактировалось webms Вт фев 06, 2018 9:14 am, всего редактировалось 1 раз.
EvgenyG
Сообщения: 217
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 56 раз
Поблагодарили: 1 раз

Re: Время пути до работы

Сообщение EvgenyG » Пн фев 05, 2018 9:43 am

хотел что-то подобное
причём в виде графика
Например, если выехать в 6-30, то время до работы будет составлять столько-то
потом в 6-35 и так далее
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ответить