Есть один нюанс - вряд ли возможно спрогнозировать пробки через 5-10 и более минут.EvgenyG писал(а):хотел что-то подобное
причём в виде графика
Например, если выехать в 6-30, то время до работы будет составлять столько-то
потом в 6-35 и так далее
Время пути до работы
Модератор: immortal
- slgeo
- Сообщения: 551
- Зарегистрирован: Чт фев 05, 2015 2:35 pm
- Откуда: РнД
- Благодарил (а): 139 раз
- Поблагодарили: 74 раза
Re: Время пути до работы
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
CONNECT
-
- Сообщения: 217
- Зарегистрирован: Вт июл 21, 2015 4:59 pm
- Откуда: Москва
- Благодарил (а): 56 раз
- Поблагодарили: 1 раз
Re: Время пути до работы
Это не для прогнозаslgeo писал(а):Есть один нюанс - вряд ли возможно спрогнозировать пробки через 5-10 и более минут.EvgenyG писал(а):хотел что-то подобное
причём в виде графика
Например, если выехать в 6-30, то время до работы будет составлять столько-то
потом в 6-35 и так далее
Для выбора оптимального времени выхода из дома
За пару недель или месяцев понимание будет
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
- slgeo
- Сообщения: 551
- Зарегистрирован: Чт фев 05, 2015 2:35 pm
- Откуда: РнД
- Благодарил (а): 139 раз
- Поблагодарили: 74 раза
Re: Время пути до работы
Так дорожная обстановка постоянно меняется, смысл в этих графиках? Сегодня вышел в 6-30 - опоздал, завтра вышел в 6-30
- успел. Сегодня завалило снегом и заторов больше, завтра - ясная погода, лето и многие уехали в отпуск.
Оптимальное время вырабатывается всё равно самостоятельно и достаточно быстро.
Можно сохранять свойство со значением времени в историю и подбивать среднее за какой либо промежуток, сообщая при следующей возможности.
Например, "Маршрут с учетом пробок до работы займет 25 мин. Среднее время за последнюю неделю 20 мин"
- успел. Сегодня завалило снегом и заторов больше, завтра - ясная погода, лето и многие уехали в отпуск.
Оптимальное время вырабатывается всё равно самостоятельно и достаточно быстро.
Можно сохранять свойство со значением времени в историю и подбивать среднее за какой либо промежуток, сообщая при следующей возможности.
Например, "Маршрут с учетом пробок до работы займет 25 мин. Среднее время за последнюю неделю 20 мин"
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
CONNECT
-
- Сообщения: 217
- Зарегистрирован: Вт июл 21, 2015 4:59 pm
- Откуда: Москва
- Благодарил (а): 56 раз
- Поблагодарили: 1 раз
Re: Время пути до работы
slgeo писал(а):Так дорожная обстановка постоянно меняется, смысл в этих графиках? Сегодня вышел в 6-30 - опоздал, завтра вышел в 6-30
- успел. Сегодня завалило снегом и заторов больше, завтра - ясная погода, лето и многие уехали в отпуск.
Оптимальное время вырабатывается всё равно самостоятельно и достаточно быстро.
Можно сохранять свойство со значением времени в историю и подбивать среднее за какой либо промежуток, сообщая при следующей возможности.
Например, "Маршрут с учетом пробок до работы займет 25 мин. Среднее время за последнюю неделю 20 мин"
Всё субъективно. У меня стаж почти 20 лет, в месяц проезжаю по 3000 с лишним километров.
Для меня было бы полезно иметь под рукой такие данные.
Переехал из Москвы в Подмосковье уже почти как 3 года каждый день как лотерея. +-15 минут могут стоить минут 30 в пробке.
А иногда за 30 минут до начал рабочего дня приезжаю.
Иногда яндекс предлагает по платной объезжать, а это +50км, но экономия по времени минут 40.
В таком случае проще на электричке поехать. Или вообще спать лечь))
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Время пути до работы
Мой готовый код. Всем спасибо за помощь.
Код: Выделить всё
function chti($n, $form1, $form2, $form5)
{
$n = abs($n) % 100;
$n1 = $n % 10;
if ($n > 10 && $n < 20) return $form5;
if ($n1 > 1 && $n1 < 5) return $form2;
if ($n1 == 1) return $form1;
return $form5;
}
$from = "55.706152,37.123456"; //Откуда, можно координаты или название улицы
$to = "55.750591,37.123456"; //Куда, можно координаты или название улицы
$start_time="now";// Время отправления
//$start_time = time() + (5 * 60); // 10 минут; 60 секунд
$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);
$duration = $json -> routes[0] -> legs[0] -> duration -> text; // Продолжительность маршрута
$duration_in_traffic = $json -> routes[0] -> legs[0] -> duration_in_traffic -> text; //Продолжительность маршрута с учетом дорожной обстановки
//$summary = $json -> routes[0] -> summary[0] -> text; // Ключевая точка маршрута
//$distance = $json -> routes[0] -> legs[0] -> distance->text; // Расстояние
$duration_in_traffic_value = round($json -> routes[0] -> legs[0] -> duration_in_traffic -> value / 60); //Продолжительность маршрута с учетом дорожной обстановки в мин.
$duration_value = round($json -> routes[0] -> legs[0] -> duration -> value / 60); // Продолжительность маршрута в мин.
sg('DrivingToCar.TimeToWork', $duration_in_traffic_value); //сохраняем время пути
$avgtime = getHistoryAvg("DrivingToCar.TimeToWork", strtotime("-7 day"));
$sum = $duration_in_traffic_value - $duration_value; // Считаем время: время с пробками - время без пробок
$sum_avg = $duration_in_traffic_value - $avgtime;
$sum_avg_end = preg_replace('/[^-]/', '', $sum_avg);
if ($sum_avg_end == '-') { $plusminus = ' быстрее'; } else { $plusminus = ' дольше'; }
$res = '';
if ($sum > 0)
{ //проверяем есть ли пробки
$res .= 'Время пути, от дома до работы, c учетом пробок, займет примерно '.$duration_in_traffic.'. ';
if (round($sum_avg) != 0) {
$res .= 'Что на '.abs(round($sum_avg)).' '.chti(round($sum_avg), 'минуту', 'минуты', 'минут').$plusminus.' обычного.';
} else { $res .= 'Это среднее время на этой недели'; }
} else {
$res .= 'Пробок нет. Время пути, от дома до работы, займет примерно '.$duration;
}
say($res, 3);
//echo $res;
Путь от дома до работы c учетом пробок займет примерно 47 мин. Что на 1 минуту дольше обычного.
Последний раз редактировалось webms Ср фев 21, 2018 8:55 am, всего редактировалось 8 раз.
- За это сообщение автора webms поблагодарили (всего 5):
- directman66 (Чт фев 08, 2018 11:39 am) • slgeo (Чт фев 08, 2018 12:25 pm) • igoryan (Чт фев 08, 2018 5:39 pm) • olegvolk75 (Чт мар 22, 2018 12:30 pm) • savenko_egor (Чт мар 22, 2018 12:32 pm)
- Рейтинг: 5.81%
- slgeo
- Сообщения: 551
- Зарегистрирован: Чт фев 05, 2015 2:35 pm
- Откуда: РнД
- Благодарил (а): 139 раз
- Поблагодарили: 74 раза
Re: Время пути до работы
В идеале в качестве "обычного", конечно, лучше было бы среднее время с учетом пробок за последнюю неделю ))
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
CONNECT
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Время пути до работы
да, это было бы лучше)slgeo писал(а):В идеале в качестве "обычного", конечно, лучше было бы среднее время с учетом пробок за последнюю неделю ))
чуть позже выложу решение.
Спасибо за идею
- slgeo
- Сообщения: 551
- Зарегистрирован: Чт фев 05, 2015 2:35 pm
- Откуда: РнД
- Благодарил (а): 139 раз
- Поблагодарили: 74 раза
Re: Время пути до работы
Ну, тогда давай думать дальше...
Итак, нам нужна история только для работы, поэтому создаем свойство work_duration_value и будем в него записывать по условию, что координаты соответствуют рабочим. Потом нам надо выдернуть из базы 7 последних значений и взять по ним среднее.
К сожалению, сейчас не могу проверить, писал с чистого листа и с божьей помощью форумцев
Итак, нам нужна история только для работы, поэтому создаем свойство work_duration_value и будем в него записывать по условию, что координаты соответствуют рабочим. Потом нам надо выдернуть из базы 7 последних значений и взять по ним среднее.
Код: Выделить всё
// Получить объект по имени
$obj=getObject(<имя объекта>);
// Получить id свойства
$prop_id=$obj->getPropertyByName('work_duration_value', $obj->class_id, $obj->id);
// Получаем среднее значение из таблицы истории
$pvalue=SQLSelectOne("SELECT AVG(VALUE) FROM pvalues WHERE PROPERTY_ID='".$prop_id."' AND OBJECT_ID='".$obj->id."' LIMIT 7 DESC");
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
CONNECT
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Время пути до работы
обновил код выше https://majordomo.smartliving.ru/forum/ ... 161#p71161
проверил, все работает
проверил, все работает
Код: Выделить всё
Путь от дома до работы c учетом пробок займет примерно 47 мин. Что на 2 минуты быстрее обычного.
- Рейтинг: 1.16%