Погодный информер (Weather Informer)

Делись идеей, получай поддержку и критику!
Ответить
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Погодный информер (Weather Informer)

Сообщение IvanLis »

Проектом назвать это можно с натяжкой :wink:
Но вот что получилось, может куму-то и сгодиться.
А если с Вашей помощью еще и довести до презентабельного вида, то вполне сойдет для ежедневного использования.

До этого я дергал погоду с сайта GisMeteo.ru: http://www.gismeteo.ru/informers/
О том как разобрать полученную информацию я писал пару строк в уроке: http://labviewportal.org/ru/sovetyiprav ... -xml-parse
Но с недавнего времени там изменились условия предоставления информации, не буду грузить..., короче не удобно стало его использовать.

Нашел сайт: http://openweathermap.org
Дам достаточно удобный интерфейс API (http://openweathermap.org/API), позволяющий разработчикам получать различные данные о погоде. Что мне понравилось в этом сервисе, так это толерантность к запросам. Например, нас интересуют данные о погоде в Москве с интервалом в 3 часа. Сравните результат:
http://api.openweathermap.org/data/2.5/ ... u&mode=xml
http://api.openweathermap.org/data/2.5/ ... u&mode=xml

Это была увертюра, а теперь основная часть.

Что нам нужно...
1. Построить запрос и получить данные, результат удобнее, не знаю как Вам, а мне проще разбирать XML.
2. Проверить корректность (целостность) данных разобрать XML на составляющие.
3. Красиво все отобразить, с этим у меня основные проблемы, так как мой технический мозг не переносит дизайнерской работы.
4. Ну и соответственно, делать запросы нужно с какой-то периодичностью.

Начнем по порядку...
Не буду расписывать азы и тонкости реализации всех этапов, каждый может посмотреть исходники. Но если появятся вопросы, то постараюсь на них ответить.
1. Построить запрос и получаем данные используя HTTP Request (GET).vi
2. Встроенный парсер проверяет структуру документа и его целостность, по этому здесь нужно только проконтролировать. Данные парсим стандартными средствами LabVIEW. Многим покажется излишняя вложенность SubVI, но как сделал, так сделал. Зато все понятно и структурировано.
3. Этот этап самый сложный. Так что если есть готовые оказать помощь в оформлении интерфейса, готов посодействовать. Пока это выглядит следующим образом (выглядело в предварительной версии, в выложенной немного изменилось, но смысл тот же):
Data.png
Graph.png
Setup.png
4. Что касается периодичности, то я пошел кратчайшим путем. Цикл крутится раз в минуту. Если текущее время <= времени nextupdate (вкладка Setup), то запрашиваем данные с сервера. В случае удачного получения данных время nextupdate обновляется (его назначает сервер). Если данные не были получены или получены с ошибкой, то перезапрос выполняется через минуту, на следующей итерации цикла. Ну и при желании можно выполнить запрос вручную, нажав кнопку UpDate.

Данные о необходимом городе записаны в файле Data.txt. Если он отсутствует, то по умолчанию запрашивается погода г. Москва. Если ввести свой город в поле запроса, а потом остановить программу, нажав кнопку Stop, то Ваши данные будут сохранены в файл и при следующем запуске программы Москвы уже не будет.

--------------------------
Что касается критики и доработок...
Я вижу следующие проблемы (но как говориться "В чужом глазу соринку видит, а в своём бревна не замечает"):
1. Самое главное это интерфейс.
2. При запросе данных с сервера программа подвисает (не реагирует на нажатие кнопок панели управления). Все сделано в одном цикле, и разносить по разным не вижу смысла, т.к. это всего 1-3 секунды из 3-х часов. Да и работает программа полностью в автоматическом режиме.

---------------------------
Ну и сама программа (LV2010), если необходимо в более низкой версии, пишите:
WeatherInformer.zip
lv2010
(415.24 КБ) 610 скачиваний
Код не отработан полностью и не соответствует рекомендациям, так что за это не пинайте.
Так же меня интересует работоспособность в Windows, т.к. все писалось и тестировалось в Linux, по этому некоторые решения могут показаться странными.

-------------------------
Жду отзывов и предложений. А самое главное, талантливого дизайнера, который поможет доработать и оживить интерфейс.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Погодный информер (Weather Informer)

Сообщение IvanLis »

Для Linux-оидов выкладываю собранную программу:
Build-WeatherInformer.zip
for Linux
(300.1 КБ) 346 скачиваний
Только не забудьте установить runtime: http://ftp.ni.com/support/softlib/labvi ... 1.i386.zip
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Погодный информер (Weather Informer)

Сообщение dadreamer »

IvanLis писал(а):Так же меня интересует работоспособность в Windows, т.к. все писалось и тестировалось в Linux, по этому некоторые решения могут показаться странными.
Запустилось и работает. Есть некоторые мелкие нюансы, например, поле текущего времени слегка налазит на Tab Control, в третьем поле (ветер) данные не помещаются полностью (видимо, шрифты различаются), и самое главное - принудительное обновление через кнопку UpDate не работает - сбрасывает на последнее программно полученное значение. Дизайнер из меня тоже не супер, но я бы не стал выводить кластер error out на панель, а также надо запретить растягивание формы и её разворачивание, а то некрасиво - элементы управления ютятся в углу, а остальное место пустое. В остальном всё очень даже культурно и грамотно, правда код не разбирал толком пока. Жаль, что сайт и API на английском, все-таки привычнее видеть родной язык.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Погодный информер (Weather Informer)

Сообщение IvanLis »

dadreamer писал(а):самое главное - принудительное обновление через кнопку UpDate не работает - сбрасывает на последнее программно полученное значение
Должно работать...
Там все обновление через один Event работает :wink:
Может немного задержка быть.
dadreamer писал(а):Дизайнер из меня тоже не супер, но я бы не стал выводить кластер error out на панель, а также надо запретить растягивание формы и её разворачивание, а то некрасиво - элементы управления ютятся в углу, а остальное место пустое.
Что касается "налезает" и "не помещается", это видимо шрифты и настройки. На скринах, то что вижу я.
По поводу управления, оно больше для самоуспокоения.
Если прописать данные н.п. в файл Data.txt до запуска программы, то оно и не нужно в принципе вообще.
Ну а кластер Error и вкладка Setup, это больше для отладки.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Погодный информер (Weather Informer)

Сообщение dadreamer »

IvanLis писал(а):Должно работать...
Там все обновление через один Event работает :wink:
Может немного задержка быть.
У меня написано в lastupdate
21:41:25.000
23.10.2013
Нажимаю кнопку UpDate, значение lastupdate меняется на текущее время, потом через секунду примерно становится снова
21:41:25.000
23.10.2013
Аналогично изменяется и nextupdate. Так должно быть или это баг? Запускаю в LV2013.
У графиков, кстати, тоже маленько шрифты съехали, но вроде читабельно.
Вот, прописал вместо Москвы свой город, тогда обновилась инфа. А иначе не получалось.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Погодный информер (Weather Informer)

Сообщение IvanLis »

dadreamer писал(а):У меня написано в lastupdate
21:41:25.000
23.10.2013
Нажимаю кнопку UpDate, значение lastupdate меняется на текущее время, потом через секунду примерно становится снова
21:41:25.000
23.10.2013
Аналогично изменяется и nextupdate. Так должно быть или это баг? Запускаю в LV2013.
Нет это не баг :wink: . Все работает нормально.
Это время назначается сервером и передается с данными.
При нажатии кнопки UpDate, время lastupdate приравнивается текущему.
После получения и парсинга данных оно обновляется.

Индикатором обновления является кратковременное залипание кнопки UpDate (она во время обновления становится/остается нажатой). Если обновление после нажатия кнопки UpDate не прошло, то будет Error Data гореть красным.
Аватара пользователя
gasan_333
user
user
Сообщения: 98
Зарегистрирован: 15 фев 2014, 21:28
Версия LabVIEW: 2012
Контактная информация:

Re: Погодный информер (Weather Informer)

Сообщение gasan_333 »

Добрый день IvanLis. Я скачал ваши исходники хочу доработать программу, голосовую оповещение хочу добавить. Че то она ошибки выдает Scan From String (arg 1) in Parse WeatherData-Meta.vi -> Parse WeatherData.vi -> WeatherGet.vi -> WeatherInformer.vi
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Погодный информер (Weather Informer)

Сообщение IvanLis »

gasan_333 писал(а):Добрый день IvanLis. Я скачал ваши исходники хочу доработать программу, голосовую оповещение хочу добавить. Че то она ошибки выдает Scan From String (arg 1) in Parse WeatherData-Meta.vi -> Parse WeatherData.vi -> WeatherGet.vi -> WeatherInformer.vi
Да, действительно :crazy: .
У них видимо структура XML изменилась. Нужно отследить причину ошибки и подправить format string под действительное состояние.
Когда будет окошко, я посмотрю. Но Вы можете сделать это и сами.
Аватара пользователя
gasan_333
user
user
Сообщения: 98
Зарегистрирован: 15 фев 2014, 21:28
Версия LabVIEW: 2012
Контактная информация:

Re: Погодный информер (Weather Informer)

Сообщение gasan_333 »

Я уже занимаюсь этим спасибо :super:
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Погодный информер (Weather Informer)

Сообщение IvanLis »

gasan_333 писал(а):Я уже занимаюсь этим спасибо :super:
Документацию не смотрел, может там есть пояснения по этому поводу.
Но в принимаемых данных теги lastupdate и nextupdate приходят пустыми:

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

  <meta>
    <lastupdate/>
    <calctime>0.152</calctime>
    <nextupdate/>
  </meta>
Добавил обработку ошибки в функцию:
Parse WeatherData-Meta.vi
lv2010
(24.02 КБ) 339 скачиваний
Но автообновление (Event -> вкладка Timeout) основывается на значении nextupdate, по этому нужно продумать и поправить этот механизм/
Аватара пользователя
gasan_333
user
user
Сообщения: 98
Зарегистрирован: 15 фев 2014, 21:28
Версия LabVIEW: 2012
Контактная информация:

Re: Погодный информер (Weather Informer)

Сообщение gasan_333 »

Как то вот так
Вложения
WeatherInformer.zip
(417.24 КБ) 339 скачиваний
Аватара пользователя
gasan_333
user
user
Сообщения: 98
Зарегистрирован: 15 фев 2014, 21:28
Версия LabVIEW: 2012
Контактная информация:

Re: Погодный информер (Weather Informer)

Сообщение gasan_333 »

А как можно получить информацию по осадкам ? По проценту облачности ?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5458
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Погодный информер (Weather Informer)

Сообщение IvanLis »

gasan_333 писал(а):А как можно получить информацию по осадкам ? По проценту облачности ?
То что в примере, забирает погоду по адресу:
http://api.openweathermap.org/data/2.5/ ... u&mode=xml
тут нет информации "облачность" и "осадки".
Я взял его за основу только, потому что, ответ отдается нам в XML, а тема как бы является продолжением другой где структура данных похожа.... http://labviewportal.org/ru/sovetyiprav ... -xml-parse

Если брать текущую погоду по другому адресу: http://api.openweathermap.org/data/2.5/ ... w&mode=xml
То получим:

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

<current>
   <city id="524901" name="Moscow">
      <coord lon="37.62" lat="55.75"/>
      <country>RU</country>
      <sun rise="2015-07-17T01:09:05" set="2015-07-17T18:01:16"/>
   </city>
   <temperature value="293.2" min="291.15" max="295.65" unit="kelvin"/>
   <humidity value="46" unit="%"/>
   <pressure value="1011" unit="hPa"/>
   <wind>
      <speed value="4" name="Gentle Breeze"/>
      <gusts/>
      <direction value="220" code="SW" name="Southwest"/>
   </wind>
   <clouds value="40" name="scattered clouds"/>
   <visibility value="10000"/>
   <precipitation mode="no"/>
   <weather number="520" value="light intensity shower rain" icon="09d"/>
   <lastupdate value="2015-07-17T12:47:55"/>
</current>
Тут уже присутствует информация (описание IP: http://openweathermap.org/current):
"облачность" - clouds
"осадки" - precipitation
Точнее наверное сказать, что может присутствовать согласно описания, что Вам вернется, понятия не имею :dntknw: .

Можно попробовать забрать погоду с ближайшей метеостанции: http://openweathermap.org/api_station
Короче, как Ваша фантазия разыграется.
Аватара пользователя
gasan_333
user
user
Сообщения: 98
Зарегистрирован: 15 фев 2014, 21:28
Версия LabVIEW: 2012
Контактная информация:

Re: Погодный информер (Weather Informer)

Сообщение gasan_333 »

Я взял его за основу только, потому что, ответ отдается нам в XML, а тема как бы является продолжением другой где структура данных похожа.... ru/sovetyipravila/303--xml-labview-xml-parse
Спасибо за ссылку будем пробовать.
Ответить

Вернуться в «Проекты»