[Модуль] Open Weather (app_openweather)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Сб дек 02, 2017 10:15 am

хм...может только со старыми ключами работает...не требует cnt
А это в 5-дневном апи, или в 16-дневном?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Сб дек 02, 2017 11:02 am

ключ старый, апи 16 дней
5-ти дневное даже не проверял, не интересует
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Andy111
Сообщения: 25
Зарегистрирован: Вт апр 25, 2017 1:17 pm
Благодарил (а): 32 раза
Поблагодарили: 2 раза

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

Сообщение Andy111 » Сб дек 02, 2017 11:58 am

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

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

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

Ключ 5-ти дневный.
Аватара пользователя
andrey040670
Сообщения: 458
Зарегистрирован: Пн июл 31, 2017 10:00 pm
Благодарил (а): 161 раз
Поблагодарили: 85 раз

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

Сообщение andrey040670 » Вс дек 03, 2017 2:39 am

Переустановил систему с нуля, обновил ядро, обновил 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=…Показать
{"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=…Показать
{"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}]}
MJD alfa: Khadas VIM1 Ubuntu 18.04.2 LTS bionic Linux 4.9.40 #2 SMP PREEMPT Tue Oct 30 15:47:54 CST 2018 aarch64 GNU/Linux
MJD alfa: Rpi 3B Debian 11 (bullseye) Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Вс дек 03, 2017 4:45 am

офф.: Никита, посмотрел, вроде б должен сам справится, но как обновить форк до последних изменений (чет я потыкался и тормозом себя ощутил((( )
ow_setting.forecast_interval засунуть в переменную по примеру апи-ключа и в строку запроса (пока только для 16 дней сделать)
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
VlasVic
Сообщения: 1
Зарегистрирован: Сб ноя 25, 2017 3:13 pm
Благодарил (а): 2 раза
Поблагодарили: 0

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

Сообщение VlasVic » Вс дек 03, 2017 5:12 am

Здравствуйте
подскажите есть ли возможность получить из модуля прогноз суммарный за день (температура минимум/максимум и т.д.), а не за каждые три часа?
и если не сложно укажите работающий способ получения текстового описания направления ветра? (способы из шапки у меня не работают)
заранее спасибо
Аватара пользователя
andrey040670
Сообщения: 458
Зарегистрирован: Пн июл 31, 2017 10:00 pm
Благодарил (а): 161 раз
Поблагодарили: 85 раз

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

Сообщение andrey040670 » Вс дек 03, 2017 5:32 am

Пока как временное решение, сделал так:
В /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.
Последний раз редактировалось andrey040670 Вс дек 03, 2017 6:19 am, всего редактировалось 1 раз.
MJD alfa: Khadas VIM1 Ubuntu 18.04.2 LTS bionic Linux 4.9.40 #2 SMP PREEMPT Tue Oct 30 15:47:54 CST 2018 aarch64 GNU/Linux
MJD alfa: Rpi 3B Debian 11 (bullseye) Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Вс дек 03, 2017 5:47 am

VlasVic, с ветром должно работать, но по нормальному там это в самом модуле нужно до ума довести (если Никита ткнет на пример, я не знаю как писать значения, да и с массивами там, короче тоже темный лес, то возможно попытаться)
СпойлерПоказать
Ветер.PNG
Ветер.PNG (10.53 КБ) 4875 просмотров
все работает
с погодой 5-ти дневной по 3 часа, возможно, но такого видимо еще никто не делал
пример (честно стырено))) ), подгони под себя
СпойлерПоказать
Снимок.PNG
Снимок.PNG (31.66 КБ) 4880 просмотров
в Объекты/Сценарии скрипт 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 КБ) 4880 просмотров
там и с расчетом заморозков (видимо неправильно функцию используют, ну не может расчет вероятности основываться на прогнозируемых величинах, т.е. вероятность от вероятности, да еще и без одного из входных параметров за 15:00 и 21:00, первого то насколько понял, нет, нужно в текущей это считать, но нужна история)
и т.д.
еще из полезного, честно стырен метод и Никита подсказал про родительский класс (на скрине), что б история только за фактическую была
СпойлерПоказать
Погода.PNG
Погода.PNG (33.3 КБ) 4882 просмотра
Погода1.PNG
Погода1.PNG (12.39 КБ) 4882 просмотра
Погода2.PNG
Погода2.PNG (25.13 КБ) 4882 просмотра
История.PNG
История.PNG (26.57 КБ) 4882 просмотра
График.PNG
График.PNG (34.98 КБ) 4882 просмотра
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); 
п.с. можно в шапку ссылку добавлять )))
За это сообщение автора Logrus поблагодарили (всего 2):
antpino (Пн дек 04, 2017 8:16 am) • VlasVic (Пн дек 04, 2017 9:06 am)
Рейтинг: 2.33%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Вт дек 05, 2017 8:57 pm

Logrus писал(а):офф.: Никита, посмотрел, вроде б должен сам справится, но как обновить форк до последних изменений (чет я потыкался и тормозом себя ощутил((( )
ow_setting.forecast_interval засунуть в переменную по примеру апи-ключа и в строку запроса (пока только для 16 дней сделать)
Да хрен бы его знал как это нормально делается)) Сам с форком МД наверное час промучился пока нормально скопировалось...у меня был полугодовалой давности...че я ток не тыкал.ю..и сносил с диска, снова форкал, и в веб интерфейсе чето тыкал...короче хрен пойми каким чудом, но еле еле получилось...в общем я пока не разобрался =D
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Вт дек 05, 2017 9:18 pm

Итак настал этот день))) Добрались у меня руки наконец дописать функционал, который давно хотел сделать.

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

Сразу говорю - функционал пока очень тестовый. Сам буду проверять по ходу. Но вроде как, в общем и целом - работает.
Что для этого надо...в первую очередь активировать функцию работы с погодными станциями.
111.jpg
111.jpg (28.81 КБ) 4800 просмотров
После чего у вас появится вкладка "Станции". При входе на неё вы увидите интерфейс регистрации погодной станции (пока на английском, сори, потом доделаю)
Что нужно указать:
- 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 ничего не будет указано (либо свойство будет вовсе отсутствовать) - на сайт передастся время отправки данных (что в принципе не так страшно, но точнее будет первый вариант).

На этом, думаю, пока всё...тестируйте, пишите. Предложения по доработке интерфейса и функционала принимаются.
Чем больше погодных станций подключено - тем более точный прогноз получаем в итоге на сайте, и соответственно, в системе.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить