Страница 15 из 74

Re: [Модуль] Погода от Openweather

Добавлено: Сб дек 02, 2017 10:15 am
nick7zmail
хм...может только со старыми ключами работает...не требует cnt
А это в 5-дневном апи, или в 16-дневном?

Re: [Модуль] Погода от Openweather

Добавлено: Сб дек 02, 2017 11:02 am
Logrus
ключ старый, апи 16 дней
5-ти дневное даже не проверял, не интересует

Re: [Модуль] Погода от Openweather

Добавлено: Сб дек 02, 2017 11:58 am
Andy111
nick7zmail писал(а):хм...может только со старыми ключами работает...не требует cnt
А это в 5-дневном апи, или в 16-дневном?

Ура! Заработало!!! (С) Кот Матроскин.

Премного благодарю!

Ключ 5-ти дневный.

Re: [Модуль] Погода от Openweather

Добавлено: Вс дек 03, 2017 2:39 am
andrey040670
Переустановил систему с нуля, обновил ядро, обновил major'a (backup не накатывал) установил модуль, итог: 8 и более дней нет.
И на каждый отсутствующий день сыпет варнинги:

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

Warning: date() expects parameter 2 to be long, string given in /var/www/modules/app_openweather/app_openweather.class.php on line 280
Warning: date() expects parameter 2 to be long, string given in /var/www/modules/app_openweather/app_openweather.class.php on line 281
Warning: gmdate() expects parameter 2 to be long, string given in /var/www/modules/app_openweather/app_openweather.class.php on line 282
Если ставить от 1 до 7 дней варнингов нет.

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

$out["FORECAST"][$i]["sunrise"]    = date("H:i:s", strtotime(gg('ow_day'.$i.'.sunrise')));
$out["FORECAST"][$i]["sunset"]     = date("H:i:s", strtotime(gg('ow_day'.$i.'.sunset')));
$out["FORECAST"][$i]["day_length"] = gmdate("H:i", strtotime(gg('ow_day'.$i.'.day_length')));
такой вариант тоже не проходит, предупреждений нет, а данные обнуляются.
PHP Version 5.6.30-0+deb8u1
P/s
Ключ апрельский.
Это что запрашивает модуль:
//api.openweathermap.org/data/2.5/forecast/daily?id=555746&mode=…SPOILER_SHOW
{"city":{"id":555746,"name":"Istra","coord":{"lon":36.8642,"lat":55.9178},"country":"RU","population":0},"cod":"200","message":3.5819319,"cnt":7,"list":[{"dt":1512205200,"temp":{"day":-0.2,"min":-2.68,"max":-0.2,"night":-2.68,"eve":-2.32,"morn":-0.63},"pressure":1011.17,"humidity":0,"weather":[{"id":800,"main":"Clear","description":"ясно","icon":"01d"}],"speed":5.36,"deg":222,"clouds":23},{"dt":1512291600,"temp":{"day":-0.21,"min":-5.03,"max":-0.21,"night":-4.66,"eve":-5.03,"morn":-1.59},"pressure":1008.43,"humidity":95,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":1.87,"deg":317,"clouds":88,"snow":0.27},{"dt":1512378000,"temp":{"day":-4.13,"min":-5,"max":-3.48,"night":-4.9,"eve":-3.93,"morn":-4.64},"pressure":996.27,"humidity":96,"weather":[{"id":601,"main":"Snow","description":"снегопад","icon":"13d"}],"speed":2.84,"deg":32,"clouds":92,"snow":4.94},{"dt":1512464400,"temp":{"day":-5.52,"min":-7.33,"max":-4.63,"night":-4.63,"eve":-4.92,"morn":-6.83},"pressure":998.15,"humidity":91,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":3.91,"deg":243,"clouds":76,"snow":0.96},{"dt":1512550800,"temp":{"day":-3.78,"min":-6.63,"max":-3.78,"night":-6.36,"eve":-6.63,"morn":-5.82},"pressure":1002.67,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":2.67,"deg":304,"clouds":55,"snow":0.14},{"dt":1512637200,"temp":{"day":-6.55,"min":-7.24,"max":-6.55,"night":-6.57,"eve":-6.57,"morn":-7.24},"pressure":1004.06,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":3.67,"deg":166,"clouds":85,"snow":0.18},{"dt":1512723600,"temp":{"day":-3.42,"min":-6.44,"max":2.29,"night":2.29,"eve":-1.38,"morn":-6.44},"pressure":1001.84,"humidity":0,"weather":[{"id":601,"main":"Snow","description":"снегопад","icon":"13d"}],"speed":7.47,"deg":179,"clouds":96,"snow":6.55}]}
А это: <cnt=16>
//api.openweathermap.org/data/2.5/forecast/daily?id=555746&mode=…SPOILER_SHOW
{"city":{"id":555746,"name":"Istra","coord":{"lon":36.8642,"lat":55.9178},"country":"RU","population":0},"cod":"200","message":2.1191186,"cnt":16,"list":[{"dt":1512205200,"temp":{"day":-0.2,"min":-2.68,"max":-0.2,"night":-2.68,"eve":-2.32,"morn":-0.63},"pressure":1011.17,"humidity":0,"weather":[{"id":800,"main":"Clear","description":"ясно","icon":"01d"}],"speed":5.36,"deg":222,"clouds":23},{"dt":1512291600,"temp":{"day":-0.21,"min":-5.03,"max":-0.21,"night":-4.66,"eve":-5.03,"morn":-1.59},"pressure":1008.43,"humidity":95,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":1.87,"deg":317,"clouds":88,"snow":0.27},{"dt":1512378000,"temp":{"day":-4.13,"min":-5,"max":-3.48,"night":-4.9,"eve":-3.93,"morn":-4.64},"pressure":996.27,"humidity":96,"weather":[{"id":601,"main":"Snow","description":"снегопад","icon":"13d"}],"speed":2.84,"deg":32,"clouds":92,"snow":4.94},{"dt":1512464400,"temp":{"day":-5.52,"min":-7.33,"max":-4.63,"night":-4.63,"eve":-4.92,"morn":-6.83},"pressure":998.15,"humidity":91,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":3.91,"deg":243,"clouds":76,"snow":0.96},{"dt":1512550800,"temp":{"day":-3.78,"min":-6.63,"max":-3.78,"night":-6.36,"eve":-6.63,"morn":-5.82},"pressure":1002.67,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":2.67,"deg":304,"clouds":55,"snow":0.14},{"dt":1512637200,"temp":{"day":-6.55,"min":-7.24,"max":-6.55,"night":-6.57,"eve":-6.57,"morn":-7.24},"pressure":1004.06,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":3.67,"deg":166,"clouds":85,"snow":0.18},{"dt":1512723600,"temp":{"day":-3.42,"min":-6.44,"max":2.29,"night":2.29,"eve":-1.38,"morn":-6.44},"pressure":1001.84,"humidity":0,"weather":[{"id":601,"main":"Snow","description":"снегопад","icon":"13d"}],"speed":7.47,"deg":179,"clouds":96,"snow":6.55},{"dt":1512810000,"temp":{"day":0.49,"min":-3.78,"max":3.28,"night":-3.78,"eve":-1.02,"morn":3.28},"pressure":993.46,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":7.13,"deg":280,"clouds":96,"snow":0.67},{"dt":1512896400,"temp":{"day":-4.53,"min":-5.55,"max":-4.43,"night":-5.55,"eve":-4.43,"morn":-4.84},"pressure":1000.04,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":7.25,"deg":299,"clouds":82,"snow":0.57},{"dt":1512982800,"temp":{"day":-5.01,"min":-6.3,"max":-3.66,"night":-3.66,"eve":-4.61,"morn":-6.3},"pressure":1006.28,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":3.9,"deg":311,"clouds":98,"snow":0.3},{"dt":1513069200,"temp":{"day":-0.63,"min":-2.77,"max":0.78,"night":0.78,"eve":0.59,"morn":-2.77},"pressure":1014.14,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":6.36,"deg":256,"clouds":95,"snow":0.18},{"dt":1513155600,"temp":{"day":1.53,"min":-2.11,"max":1.96,"night":-2.11,"eve":-0.46,"morn":1.96},"pressure":1005.77,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":7.33,"deg":295,"clouds":89,"snow":0.68},{"dt":1513242000,"temp":{"day":-1.97,"min":-3.78,"max":-1.97,"night":-3.78,"eve":-2.82,"morn":-3.07},"pressure":1007.48,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":4.8,"deg":285,"clouds":90,"snow":0.24},{"dt":1513328400,"temp":{"day":-4.91,"min":-8.09,"max":-4.39,"night":-8.09,"eve":-6.76,"morn":-4.39},"pressure":1014.29,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":2.21,"deg":310,"clouds":52,"snow":0.75},{"dt":1513414800,"temp":{"day":-7.82,"min":-10.91,"max":-7.82,"night":-10.32,"eve":-10.91,"morn":-10.21},"pressure":1023.39,"humidity":0,"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"speed":3.26,"deg":178,"clouds":79,"snow":0.05},{"dt":1513501200,"temp":{"day":-7.84,"min":-9.34,"max":-6.91,"night":-6.91,"eve":-7.64,"morn":-9.34},"pressure":1023.92,"humidity":0,"weather":[{"id":800,"main":"Clear","description":"ясно","icon":"01d"}],"speed":4.67,"deg":182,"clouds":59,"snow":0.03}]}

Re: [Модуль] Погода от Openweather

Добавлено: Вс дек 03, 2017 4:45 am
Logrus
офф.: Никита, посмотрел, вроде б должен сам справится, но как обновить форк до последних изменений (чет я потыкался и тормозом себя ощутил((( )
ow_setting.forecast_interval засунуть в переменную по примеру апи-ключа и в строку запроса (пока только для 16 дней сделать)

Re: [Модуль] Погода от Openweather

Добавлено: Вс дек 03, 2017 5:12 am
VlasVic
Здравствуйте
подскажите есть ли возможность получить из модуля прогноз суммарный за день (температура минимум/максимум и т.д.), а не за каждые три часа?
и если не сложно укажите работающий способ получения текстового описания направления ветра? (способы из шапки у меня не работают)
заранее спасибо

Re: [Модуль] Погода от Openweather

Добавлено: Вс дек 03, 2017 5:32 am
andrey040670
Пока как временное решение, сделал так:
В /var/www/modules/app_openweather/get_weather.inc.php изменил 3 строки формирования урл, добавил "&cnt=16"

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

$query = "http://api.openweathermap.org/data/2.5/weather?id=" . $cityID . "&mode=json&units=" . $unit . "&cnt=16" . "&lang=ru" . "&appid=" . $apiKey;
Можно брать "&cnt=" из свойств.
Извините но в PHP я не в зуб ногой, а пока хоть так.
Да и работаю пока удалённо без ssh, sftp через встроенный модуль phpfm.

Re: [Модуль] Погода от Openweather

Добавлено: Вс дек 03, 2017 5:47 am
Logrus
VlasVic, с ветром должно работать, но по нормальному там это в самом модуле нужно до ума довести (если Никита ткнет на пример, я не знаю как писать значения, да и с массивами там, короче тоже темный лес, то возможно попытаться)
SPOILERSPOILER_SHOW
Ветер.PNG
Ветер.PNG (10.53 КБ) 5835 просмотров
все работает
с погодой 5-ти дневной по 3 часа, возможно, но такого видимо еще никто не делал
пример (честно стырено))) ), подгони под себя
SPOILERSPOILER_SHOW
Снимок.PNG
Снимок.PNG (31.66 КБ) 5840 просмотров
в Объекты/Сценарии скрипт WeatherFromOpenWeather

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

$weatherToday = '<b>Сегодня</b> до ';
$temp=gg('ow_day0.temp_max');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherToday.=$temp.'°';
$weatherToday.=', '.gg('ow_day0.weather_type').'. ';

$weatherToday.='Ветер '.round(gg('ow_day0.wind_speed'))." м/с. ";
//$weatherToday.='направление '.round(gg('ow_day0.wind_direction')).". ";

$weatherToday.='Влажность '.round(gg('ow_day0.humidity'))." %. ";
$weatherToday.='Давление '.round(gg('ow_day0.pressure_mmhg')).' миллиметров ртутного столба. ';
$weatherToday.='Ночью до ';
$temp=gg('ow_day0.temp_night');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherToday.=$temp.'°.';

$weatherTomorrow = '<b>Завтра</b> днём до ';
$temp=gg('ow_day1.temp_max');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherTomorrow.=$temp.'°';
$weatherTomorrow.=', '.gg('ow_day1.weather_type').'. ';
//$weatherTomorrow.='Влажность '.round(gg('ow_day1.humidity')).'. ';
$weatherTomorrow.='Давление '.round(gg('ow_day1.pressure_mmhg')).' миллиметров ртутного столба. ';
$weatherTomorrow.='Ночью до ';
$temp=gg('ow_day1.temp_night');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherTomorrow.=$temp.'°.';

$weatherTomorrowAfter = '<b>Послезавтра</b> днём до ';
$temp=gg('ow_day2.temp_max');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherTomorrowAfter.=$temp.'°';
$weatherTomorrowAfter.=', '.gg('ow_day2.weather_type').'. ';
//$weatherTomorrowAfter.='Влажность '.round(gg('ow_day2.humidity')).'. ';
$weatherTomorrowAfter.='Давление '.round(gg('ow_day2.pressure_mmhg')).' миллиметров ртутного столба. ';
$weatherTomorrowAfter.='Ночью до ';
$temp=gg('ow_day2.temp_night');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherTomorrowAfter.=$temp.'°.';

sg('ThisComputer.weatherToday', $weatherToday);
sg('ThisComputer.weatherTomorrow', $weatherTomorrow);
sg('ThisComputer.weatherTomorrowAfter', $weatherTomorrowAfter); 
пример вывода текстом, можно и голосом
Вывод.PNG
Вывод.PNG (27.8 КБ) 5840 просмотров
там и с расчетом заморозков (видимо неправильно функцию используют, ну не может расчет вероятности основываться на прогнозируемых величинах, т.е. вероятность от вероятности, да еще и без одного из входных параметров за 15:00 и 21:00, первого то насколько понял, нет, нужно в текущей это считать, но нужна история)
и т.д.
еще из полезного, честно стырен метод и Никита подсказал про родительский класс (на скрине), что б история только за фактическую была
SPOILERSPOILER_SHOW
Погода.PNG
Погода.PNG (33.3 КБ) 5842 просмотра
Погода1.PNG
Погода1.PNG (12.39 КБ) 5842 просмотра
Погода2.PNG
Погода2.PNG (25.13 КБ) 5842 просмотра
История.PNG
История.PNG (26.57 КБ) 5842 просмотра
График.PNG
График.PNG (34.98 КБ) 5842 просмотра
ChangeTemp

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

//Температура 24ч. назад для сравнения
$tempYesterday = getHistoryValue("ow_fact.temperature", strtotime("-1 day"), true);
sg("ow_fact.tempYesterday", $tempYesterday);

//Расчет температуры "По ощущениям"
$t = gg('ow_fact.temperature'); // температура на улице
$h = gg('ow_fact.humidity'); // влажность на улице %
$w = gg('ow_fact.wind_speed'); // данные о ветре из прогноза OpenWeather m/s
$w = $w*3.6/1.609;//m/s -> mph
$tF = $t *1.8+32; // перевод температуры в Farenheit

if ($t > 26.6) { // Считаем HeatIndex по Rothfusz
    $_f = -42.379 + 2.04901523*$tF + 10.14333127*$h - 0.22475541*$tF*$h - 0.00683783*$tF*$tF - 0.05481717*$h*$h + 0.00122874*$tF*$tF*$h + 0.00085282*$tF*$h*$h -0.00000199*$tF*$tF*$h*$h;
       if(($tF < 112) && ( $h<13 )) { // If the RH is less than 13% and the temperature is between 80 and 112 degrees F, then the following adjustment is subtracted from HI: 
        $_f = $_f-((13-$h)/4)*sqrt((17-abs($tF-95.))/17);
       }
     if(($tF < 88) && ($h > 85)) { // On the other hand, if the RH is greater than 85% and the temperature is between 80 and 87 degrees F, then the following adjustment is added to HI:
        $_f = $_f + (($h - 85) / 10) * ((87 - $tF) / 5); //ADJUSTMENT = [(RH-85)/10] * [(87-T)/5]
       }
} else if ($t <= 10) { // Считаем фактор WindChild
    $_f = 35.74 + (0.6215 * $tF) - (35.75 * pow($w, 0.16)) + ((0.4275 * $tF) * pow($w, 0.16));
} else { //считаем по упрощенной формуле
    $_f = 0.5*($tF+61+(($tF-68)*1.2)+($h*0.094));
}
// переводим в цельсии
$rf = round(($_f-32)/1.8,1);
sg("ow_fact.realFell", $rf); 
п.с. можно в шапку ссылку добавлять )))

Re: [Модуль] Погода от Openweather

Добавлено: Вт дек 05, 2017 8:57 pm
nick7zmail
Logrus писал(а):офф.: Никита, посмотрел, вроде б должен сам справится, но как обновить форк до последних изменений (чет я потыкался и тормозом себя ощутил((( )
ow_setting.forecast_interval засунуть в переменную по примеру апи-ключа и в строку запроса (пока только для 16 дней сделать)
Да хрен бы его знал как это нормально делается)) Сам с форком МД наверное час промучился пока нормально скопировалось...у меня был полугодовалой давности...че я ток не тыкал.ю..и сносил с диска, снова форкал, и в веб интерфейсе чето тыкал...короче хрен пойми каким чудом, но еле еле получилось...в общем я пока не разобрался =D

Re: [Модуль] Погода от Openweather

Добавлено: Вт дек 05, 2017 9:18 pm
nick7zmail
Итак настал этот день))) Добрались у меня руки наконец дописать функционал, который давно хотел сделать.

Работа с погодными станциями (экспорт погоды на OpenWeather)

Сразу говорю - функционал пока очень тестовый. Сам буду проверять по ходу. Но вроде как, в общем и целом - работает.
Что для этого надо...в первую очередь активировать функцию работы с погодными станциями.
111.jpg
111.jpg (28.81 КБ) 5760 просмотров
После чего у вас появится вкладка "Станции". При входе на неё вы увидите интерфейс регистрации погодной станции (пока на английском, сори, потом доделаю)
Что нужно указать:
- external_id - айди станции (желательно латинскими, без пробелов и спец символов)
- name - любое имя...можно по местоположению)
- latitude longitude altitude - понятное дело широта, долгота, высота.

Если всё сделано правильно - отобразится страница с именем станции.

Чтобы что-то отправить - надо это что-то внести))) вносятся данные в объект ow_ws.
Т.е. при получении данных с вашей погодной станции дополнительно отсылайте их в соответствующие свойства объекта ow_ws, например при обновлении температуры вписываем дополнительно код в связанный метод, или в скрипт получения данных:

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

sg('ow_ws.temperature', $temp); //где $temp - как раз полученная температура.   
Там вручную создаются свойства, соответствующие названиям из таблицы http://openweathermap.org/stations
Parameter    Type & Units    Description
station_id        The internal ID of the station which is generated during creation
dt    Unix Timestamp    Time of measurement
temperature    Celsius    The air temperature
wind_speed    m/s    Wind speed
wind_gust    m/s    Maximum speed of wind gusts
wind_deg    Degrees from 0 to 360    Wind direction
pressure    Hectopascal    Atmospheric pressure
humidity    %    Relative air humidity
rain_1h    mm    Rainfall in the last hour
rain_6h    mm    Rainfall in the last 6 hours
rain_24h    mm    Rainfall for the last days
snow_1h    mm    Snow in the last hour
snow_6h    mm    Snow in the last 6 hours
snow_24h    mm    Snow for the last days
dew_point    Celsius    Dew point
humidex    Celsius    Index of temperature and humidity
heat_index    Celsius    Heat index
visibility_distance    km    Distance of direct visibility, METAR
visibility_prefix    N, E, S, W    Prefix at distinctions of visibility in the directions, METAR
clouds[]:distance    m    Height of the lower bound of overcast, METAR
clouds[]:condition    SKC, NSC, FEW, SCT, BKN, OVC    Cloud amount, METAR
clouds[]:cumulus    CB, TCU    Convective overcast, METAR
weather[]:precipitation        Additional description, METAR
weather[]:descriptor        Additional description, METAR
weather[]:intensity        Additional description, METAR
weather[]:proximity        Additional description, METAR
weather[]:obsruration        Additional description, METAR
weather[]:other        Additional description, METAR
И, соответственно отправляются раз в час, как и забирается вся остальная погода.

Пару дополнений по свойствам:
Вложенные массивы clouds и weather прописываются через "землю". Например если хотите внести weather[]:descriptor передавайте его в weather_descriptor.
В свойство dt по идее должно попадать время получения данных. Т.е. когда забираете данные со своей станции и передаёте их в ow_ws - можете передать время "забора" данных в ow_ws.dt через функцию time(), т.е.

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

sg('ow_ws.dt', time()); 
Если в dt ничего не будет указано (либо свойство будет вовсе отсутствовать) - на сайт передастся время отправки данных (что в принципе не так страшно, но точнее будет первый вариант).

На этом, думаю, пока всё...тестируйте, пишите. Предложения по доработке интерфейса и функционала принимаются.
Чем больше погодных станций подключено - тем более точный прогноз получаем в итоге на сайте, и соответственно, в системе.