[Модуль] Погода Яндекс (yandexweather)
Модератор: immortal
-
- Сообщения: 103
- Зарегистрирован: Вс апр 23, 2017 7:09 pm
- Благодарил (а): 38 раз
- Поблагодарили: 1 раз
Re: [Модуль] Яндекс погода
Жму добавить новую запись, страница обновляется и ничего не происходит
Aopen de7000 на Ubuntu 16.04.4 LTS+Broadlink
-
- Сообщения: 2800
- Зарегистрирован: Пн дек 26, 2016 9:51 am
- Откуда: Екатеринбург
- Благодарил (а): 380 раз
- Поблагодарили: 695 раз
- Контактная информация:
Re: [Модуль] Яндекс погода
Еще не готов функционал с добавлением. Все в процессе. Заполняйте таблицу yaweather_cities вручную через phpmyadmin.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
-
- Сообщения: 2800
- Зарегистрирован: Пн дек 26, 2016 9:51 am
- Откуда: Екатеринбург
- Благодарил (а): 380 раз
- Поблагодарили: 695 раз
- Контактная информация:
Re: [Модуль] Яндекс погода
Небольшое обновление
Допускаю, что некоторые иконки отсутствуют. Будут дополняться по мере необходимости. Если у кого-то показывает квадратик, просьба прислать адрес ссылки на картинку.
Добавил в справочник еще несколько городов. Если они не добавились, нужно установить модуль через удаление.
СпойлерПоказать
Добавил в справочник еще несколько городов. Если они не добавились, нужно установить модуль через удаление.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: [Модуль] Яндекс погода
Я мечтал о этом модуле давно), верю только прогнозу Яндексу. Спасибо за труд.
Но уже пол года как пользуюсь скриптом, очень нрав что говорит погоду как раньше по ТВ)
а утром вообще вот так вывожу (другим скриптом)
Например анализ погоды (у меня например утром проговаривает, и я знаю как одеваться)
Разные выводы, графики, прогнозы и тп
Если че, у меня есть идеи и знаю немного веб-дизайн, можем поработать вместе)
Но уже пол года как пользуюсь скриптом, очень нрав что говорит погоду как раньше по ТВ)
На улице ясно. Возможен умеренный ветер. Температура +21 градус. Тепло. Восход солнца сегодня в 04:31, закат в 20:19.
Код: Выделить всё
$city_id = 10738; //Люберцы
//ID города узнаем тут: https://yandex.ru/yaca/geo.c2n
$data_file = "https://export.yandex.ru/bar/reginfo.xml?region=$city_id.xml?".rand(); // адрес xml файла
$xml = simplexml_load_file($data_file); // раскладываем xml на массив
if ($xml === false) { // Проверить можно также !is_object( $xml ) или !$xml
setTimeOut("restart_PogodaYandex", "runScript('PogodaYandex');", 5*60);
if (gg("Communication.stateColor") == 'green') {
registerError('Яндекс.Погода не обновляется', 'Ошибка');
}
return;
}
$temp = $xml -> weather -> day -> day_part -> temperature; // температура сейчас
$temp = getTempSign($temp); // Если значение температуры положительно, для наглядности добавляем "+"
// сохраняем основные параметры текущей погоды
//sg("PogodaYandex.City", $xml -> weather -> day -> title);
sg("PogodaYandex.Temp", $temp);
sg("PogodaYandex.Type", $xml -> weather -> day -> day_part -> weather_type);
sg("PogodaYandex.Pressure", $xml -> weather -> day -> day_part -> pressure);
// Влажность
sg("PogodaYandex.Humidity", $xml -> weather -> day -> day_part -> dampness);
sg("PogodaYandex.WindSpeed", $xml -> weather -> day -> day_part -> wind_speed);
sg("PogodaYandex.Image", $xml -> weather -> day -> day_part -> image);
sg("PogodaYandex.Image2", $xml -> weather -> day -> day_part -> { 'image-v3' });
// Направление ветра
sg("PogodaYandex.WindDir", $xml -> weather -> day -> day_part -> wind_direction);
// Солнце: восход/закат
sg("PogodaYandex.SunRise", $xml -> weather -> day -> sun_rise);
sg("PogodaYandex.SunSet", $xml -> weather -> day -> sunset);
$DayStart = explode(":", gg("PogodaYandex.SunRise"));
$DayEnd = explode(":", gg("PogodaYandex.SunSet"));
$h_start = (int) $DayStart[0];
$m_start = (int) $DayStart[1];
$h_end = (int) $DayEnd[0];
$m_end = (int) $DayEnd[1];
$dh = $h_end - $h_start;
$dm = $m_end - $m_start;
if ($dm < 0) {
$dh = $dh - 1;
$dm = $dm + 60;
}
sg("PogodaYandex.LongTag", "$dh:$dm");
// длинный текстовый прогноз погоды
$metcast = "На улице ".gg("PogodaYandex.Type").".";
// ветер
$WindSpeed = (float) gg("PogodaYandex.WindSpeed");
if ($WindSpeed < 1) {
$metcast.= ' Ветра, скорее всего, нет.';
}
elseif($WindSpeed < 3) {
$metcast.= ' Возможен слабый ветер.';
}
elseif($WindSpeed < 8) {
$metcast.= ' Возможен умеренный ветер.';
}
elseif($WindSpeed < 13) {
$metcast.= ' Возможен сильный ветер.';
}
elseif($WindSpeed < 20) {
$metcast.= ' Возможен довольно сильный ветер.';
}
elseif($WindSpeed < 28) {
$metcast.= ' Возможен штормовой ветер.';
} else {
$metcast.= ' Ветер очень очень сильный, УРАГАН!. ';
}
$w = round(strip_tags(gg("PogodaYandex.Temp")));
$tempw = $w;
if ($w < "0") {
$tempw = abs($w);
}
if ($w > "0") {
$templus = " плюс ";
}
if ($tempw >= 11 and $tempw <= 14) {
$tempcels = " градусов";
} else {
while ($tempw > 9) {
$tempw = $tempw - 10;
}
if ($tempw == 0 or $tempw >= 5 and $tempw <= 9) {
$tempcels = "градусов";
}
if ($tempw == 1) {
$tempcels = "градус";
}
if ($tempw >= 2 and $tempw <= 4) {
$tempcels = "градуса";
}
}
$metcast.= ' Температура '.gg("PogodaYandex.Temp").' '.$tempcels.'.';
$tm = (float) gg("PogodaYandex.Temp");
if ($tm < -40) {
$metcast.= ' Очень очень очень холодно!.';
}
elseif($tm < -30) {
$metcast.= ' Очень холодно, оденьтесь теплее.';
}
elseif($tm < -20) {
$metcast.= ' Очень холодно.';
}
elseif($tm < -10) {
$metcast.= ' Холодно.';
}
elseif($tm < -3) {
$metcast.= ' Не особо холодно.';
}
elseif($tm < 3) {
$metcast.= ' Значит, возможно, гололёд.';
}
elseif($tm < 10) {
$metcast.= ' Прохладно.';
}
elseif($tm < 25) {
$metcast.= ' Тепло.';
}
elseif($tm < 30) {
$metcast.= ' Жарко.';
}
elseif($tm > 30) {
$metcast.= ' Очень жарко!.';
}
$metcast.= ' Восход солнца сегодня в '.gg("PogodaYandex.SunRise").',';
$metcast.= ' закат в '.gg("PogodaYandex.SunSet").'.';
//$metcast.=' долгота дня '.getGlobal('PogodaYandex.LongTag').'.';
sg('PogodaYandex.WeatherDnes', $metcast);
//Дата и время последнего обновления
//sg("PogodaYandex.UpdatedTime", time());
sg("PogodaYandex.update", date("d.m.Y H:i", time()));
// КОНЕЦ ОСНОВНОГО БЛОКА
// Функция - добавления "+" к положительной температуре
function getTempSign($temp) {
$temp = (int) $temp;
return $temp > 0 ? '+'.$temp : $temp;
}
// Функция - получить направления ветра в МАССИВ
function getWindDirectionY($wind) {
$wind = (string) $wind;
$wind_direction = array('s' => '↑ ю',
'n' => '↓ с',
'w' => '→ з',
'e' => '← в',
'sw' => '↗ юз',
'se' => '↖ юв',
'nw' => '↘ сз',
'ne' => '↙ св');
$wind_dirtxt = array('s' => 'южный',
'n' => 'северный',
'w' => 'западный',
'e' => 'восточный',
'sw' => 'юго-западный',
'se' => 'юго-восточный',
'nw' => 'северо-западный',
'ne' => 'северо-восточный');
return array($wind_direction[$wind], $wind_dirtxt[$wind]);
}
Мб из обычного модуля сбора данных делать что то универсальное, интеллектуальное.На улице ясно. Возможен умеренный ветер. Температура +21°. Тепло. Вчера было на 2° прохладней.
Например анализ погоды (у меня например утром проговаривает, и я знаю как одеваться)
Разные выводы, графики, прогнозы и тп
Если че, у меня есть идеи и знаю немного веб-дизайн, можем поработать вместе)
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: [Модуль] Яндекс погода
Мы кстати тандемно уже работаем с fandaymon, скоро появится в свет крутые штучки для календаря 

Последний раз редактировалось webms Вт май 08, 2018 11:12 am, всего редактировалось 1 раз.
-
- Сообщения: 2800
- Зарегистрирован: Пн дек 26, 2016 9:51 am
- Откуда: Екатеринбург
- Благодарил (а): 380 раз
- Поблагодарили: 695 раз
- Контактная информация:
Re: [Модуль] Яндекс погода
Проговаривание есть у меня, но пока привязано к OW:
Ручное добавление городов по плану. Хотя хотелось бы вести единый справочник, который бы пользователи сами наполняли и он автоматически обновлялся у всех при установке модуля или ручном обновлении. Есть мысли о реализации? В идеале тут бы както конект задействовать.
СпойлерПоказать
Код: Выделить всё
//на всякий случай обновим погоду
//include_once(DIR_MODULES . 'app_openweather/app_openweather.class.php');
//$openweather = new app_openweather();
//$openweather->get_weather(gg('ow_city.id'));
//////////
$status .= "Сейчас на улице по данным метеослужб " . gg("ow_fact.weather_type") . ", ";
$w = round(gg("ow_fact.temperature"));
$status .= 'температура ' . chti($w, 'градус', 'градуса', 'градусов') . " цельсия, ";
//Температура "По ощущениям"
//$realFellTemp = round(gg("ow_fact.realFell"));
//$realFellTemp = round(gg("ow_fact.temperature"));
if (gg('all_in_one.zaoknom_actual')=='1' && (gg('all_in_one.zaoknom2_actual')=="1"))
{$realFellTemp = round(min(gg("all_in_one.zaoknomtemp"),gg("all_in_one.zaoknom2temp")));}
else if
(gg('all_in_one.zaoknom_actual')=='1' && (gg('all_in_one.zaoknom2_actual')=="0"))
{$realFellTemp = round(gg("all_in_one.zaoknomtemp"));}
else if
(gg('all_in_one.zaoknom_actual')=='0' && (gg('all_in_one.zaoknom2_actual')=="1"))
{$realFellTemp = round(gg("all_in_one.zaoknom2temp"));}
else if
(gg('all_in_one.zaoknom_actual')=='0' && (gg('all_in_one.zaoknom2_actual')=="0"))
{$realFellTemp = round(gg("ow_fact.realFell"));}
else {$realFellTemp = round(gg("ow_fact.realFell")); }
if ($w != $realFellTemp) {
$status .= "на датчиках на балконе " . chti($realFellTemp, 'градус', 'градуса', 'градусов') . " цельсия, ";
}
//$w = gg("ow_fact.realFell");
$w = gg("ow_fact.temperature");
if ($w < -40) {
$status .= 'мы морозов не боимся! ';
} elseif ($w < -30) {
$status .= 'одевайтесь теплее, очень холодно, ';
} elseif ($w < -20) {
$status .= 'самое время есть мороженое, ';
} elseif ($w < -10) {
$status .= 'холодновато, ';
} elseif ($w <- 3) {
$status .= 'не особо холодно, ';
} elseif ($w < 3) {
$status .= 'значит, возможно, гололёд, ';
} elseif ($w < 10) {
$status .= 'прохладно, ';
} elseif ($w < 22) {
$status .= 'тепло, ';
} elseif ($w < 30) {
$status .= 'жарко, ';
} elseif ($w > 30) {
$status .= 'ташкент, ';
}
// Сравнение со вчерашним днем
$tNew = round((float) getGlobal('ow_fact.temperature'));
$tOld = round((float) getGlobal('ow_fact.tempYesterday'));
$tDelta = abs($tNew - $tOld);
if ($tNew > $tOld) {
$status .= "теплее, чем вчера на " . chti($tDelta, 'градус', 'градуса', 'градусов') . ". ";
} elseif ($tNew < $tOld) {
$status .= "холоднее, чем вчера на " . chti($tDelta, 'градус', 'градуса', 'градусов') . ". ";
} elseif ($tNew == $tOld) {
$status .= "так же как и вчера. ";
}
$h = round(gg("ow_fact.humidity"));
$status .= "Относительная влажность " . chti($h, 'процент', 'процента', 'процентов') . ". ";
$pressure = (float) gg("ow_fact.pressure_mmhg");
if ($pressure < 738) {
$status .= 'Атмосферное давление пониженное';
} elseif ($pressure > 768) {
$status .='Атмосферное давление повышенное';
} else {
$status .= 'Атмосферное давление в пределах нормы';
}
$status .= " (" . chti(round($pressure), 'миллиметр', 'миллиметра', 'миллиметров') . " ртутного столба). ";
// ветер
$WindSpeed = (float) gg("ow_fact.wind_speed");
if ($WindSpeed < 1) {
$status .= "Ветра нет";
} elseif ($WindSpeed < 2) {
$status .= "Легкий ветер, ";
} elseif ($WindSpeed < 5) {
$status .= "Слабый ветер";
} elseif ($WindSpeed < 8) {
$status .= "Умеренный ветер";
} elseif ($WindSpeed < 10) {
$status .= "Свежий ветер";
} elseif ($WindSpeed < 14) {
$status .= "Сильный ветер";
} elseif ($WindSpeed < 17) {
$status .= "Очень сильный ветер";
} elseif ($WindSpeed < 21) {
$status .= "Ветер очень-очень сильный";
} elseif ($WindSpeed < 28) {
$status .= "Шторм";
} else {
$status .= "Ураган";
}
if ($WindSpeed >= 1) {
$status .= " (" . chti(round($WindSpeed), 'метр', 'метра', 'метров') . " в секунду), ";
$windDirections = array('севера', 'северо-востока', 'востока', 'юго-востока', 'юга', 'юго-запада', 'запада', 'северо-запада', 'севера');
$degree = gg('ow_fact.wind_direction');
$WindDir = $windDirections[round($degree / 45)];
$status .= " дующий с " . $WindDir;
}
$status .= ". ";
// Прогноз погоды на сегодня
if (timeBetween("01:00", "10:00")) {
$status .= "Сегодня утром ожидается ";
$w = round(gg("ow_day0.temp_morn"));
} elseif (timeBetween("10:00", "14:00")) {
$status .= "Сегодня днем ожидается ";
$w = round(gg("ow_day0.temp_day"));
} elseif (timeBetween("14:00", "20:00")) {
$status .= "Сегодня вечером ожидается ";
$w = round(gg("ow_day0.eve"));
} else {
$status .= "Сегодня ночью ожидается ";
$w = round(gg("ow_day0.temp_night"));
}
$status .= chti($w, 'градус', 'градуса', 'градусов') . " цельсия, " . gg("ow_day0.weather_type") . ". ";
// Погода на завтра
$w = round(gg("ow_day1.temperature"));
$status .= 'Завтра ожидается ' . chti($w, 'градус', 'градуса', 'градусов') . " цельсия, ";
$status .= gg("ow_day1.weather_type") . ".";
sg('forecast', $status);
say($status, 2);
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: [Модуль] Яндекс погода
Мое событие про погоду утром (пример выше)
Я имею введу чтоб не изобретать каждому велосипед, было бы круто чтоб все это в 1 модуле было.
Вывел например где нибудь
YandexPogoda('8:00') - говорит разницу в это время
YandexPogoda('7day') - показывает прогноз на 7 дней
и тп
Короче универсальность нужна)
Код: Выделить всё
$today = gg("PogodaYandex.Temp");
$yesterday = getHistoryValue("PogodaYandex.Temp", strtotime("-1 day")." ".date("H:i:s"));
$calct_temp = $today - $yesterday; //узнать разницу
if ($today < round($yesterday)) {
$temp = 'Вчера было на '.abs(round($calct_temp)).'° теплее';
} elseif ($today > $yesterday) {
$temp = 'Вчера было на '.abs(round($calct_temp)).'° прохладней';
} else {
$temp = 'Такая же как и вчера.';
}
$text = gg('PogodaYandex.WeatherDnes');
$r_array = array(" градусов", " градуса", " градус");
$rzt = explode(".", $text);
$rzt = str_replace($r_array, '°', $rzt);
$echo = $rzt[0].'. '.$rzt[1].'. '.$rzt[2].'. '.$rzt[3].'. '.$temp.'.';
//echo $echo;
say($echo, 3);
//rs('DemoSay', $echo); //Алиса говорит, но в чат не пишет.
Вывел например где нибудь
YandexPogoda('8:00') - говорит разницу в это время
YandexPogoda('7day') - показывает прогноз на 7 дней
и тп
Короче универсальность нужна)
-
- Сообщения: 2800
- Зарегистрирован: Пн дек 26, 2016 9:51 am
- Откуда: Екатеринбург
- Благодарил (а): 380 раз
- Поблагодарили: 695 раз
- Контактная информация:
Re: [Модуль] Яндекс погода
Можно много нафантазировать ) Но времени как обычно на все не хватает.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1754 раза
- Контактная информация:
Re: [Модуль] Яндекс погода
Моя коллекция иконок погоды от Яндекса https://github.com/skysilver-lab/majord ... her/yandexdirectman66 писал(а): ↑Вт май 08, 2018 8:37 amЕсли у кого-то показывает квадратик, просьба прислать адрес ссылки на картинку.
Еще с тех времен, когда у них было открытое апи. )
- За это сообщение автора skysilver поблагодарили (всего 2):
- directman66 (Вт май 08, 2018 1:32 pm) • Samir77 (Вт май 08, 2018 1:40 pm)
- Рейтинг: 2.33%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: [Модуль] Яндекс погода
Уважаемый автор почему вы не используете API
https://tech.yandex.ru/weather/
https://tech.yandex.ru/weather/
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4