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

Делись идеей, получай поддержку и критику!

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

Postby IvanLis on 23 Oct 2013, 18:19

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

До этого я дергал погоду с сайта GisMeteo.ru: http://www.gismeteo.ru/informers/
О том как разобрать полученную информацию я писал пару строк в уроке: ru/sovetyipravila/303--xml-labview-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 KiB) Downloaded 315 times

Код не отработан полностью и не соответствует рекомендациям, так что за это не пинайте.
Так же меня интересует работоспособность в Windows, т.к. все писалось и тестировалось в Linux, по этому некоторые решения могут показаться странными.

-------------------------
Жду отзывов и предложений. А самое главное, талантливого дизайнера, который поможет доработать и оживить интерфейс.
User avatar
IvanLis
professor
professor
 
Posts: 4522
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 714
hardware VIP bloggers teachers

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

Postby IvanLis on 23 Oct 2013, 18:35

Для Linux-оидов выкладываю собранную программу:
Build-WeatherInformer.zip
for Linux
(300.1 KiB) Downloaded 155 times

Только не забудьте установить runtime: http://ftp.ni.com/support/softlib/labvi ... 1.i386.zip
User avatar
IvanLis
professor
professor
 
Posts: 4522
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 714
hardware VIP bloggers teachers

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

Postby dadreamer on 23 Oct 2013, 18:54

IvanLis wrote:Так же меня интересует работоспособность в Windows, т.к. все писалось и тестировалось в Linux, по этому некоторые решения могут показаться странными.

Запустилось и работает. Есть некоторые мелкие нюансы, например, поле текущего времени слегка налазит на Tab Control, в третьем поле (ветер) данные не помещаются полностью (видимо, шрифты различаются), и самое главное - принудительное обновление через кнопку UpDate не работает - сбрасывает на последнее программно полученное значение. Дизайнер из меня тоже не супер, но я бы не стал выводить кластер error out на панель, а также надо запретить растягивание формы и её разворачивание, а то некрасиво - элементы управления ютятся в углу, а остальное место пустое. В остальном всё очень даже культурно и грамотно, правда код не разбирал толком пока. Жаль, что сайт и API на английском, все-таки привычнее видеть родной язык.
User avatar
dadreamer
professor
professor
 
Posts: 3009
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 728
I/O VIP vision internet

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

Postby IvanLis on 23 Oct 2013, 19:05

dadreamer wrote:самое главное - принудительное обновление через кнопку UpDate не работает - сбрасывает на последнее программно полученное значение

Должно работать...
Там все обновление через один Event работает :wink:
Может немного задержка быть.

dadreamer wrote:Дизайнер из меня тоже не супер, но я бы не стал выводить кластер error out на панель, а также надо запретить растягивание формы и её разворачивание, а то некрасиво - элементы управления ютятся в углу, а остальное место пустое.

Что касается "налезает" и "не помещается", это видимо шрифты и настройки. На скринах, то что вижу я.
По поводу управления, оно больше для самоуспокоения.
Если прописать данные н.п. в файл Data.txt до запуска программы, то оно и не нужно в принципе вообще.
Ну а кластер Error и вкладка Setup, это больше для отладки.
User avatar
IvanLis
professor
professor
 
Posts: 4522
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 714
hardware VIP bloggers teachers

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

Postby dadreamer on 23 Oct 2013, 19:21

IvanLis wrote:Должно работать...
Там все обновление через один Event работает :wink:
Может немного задержка быть.

У меня написано в lastupdate
21:41:25.000
23.10.2013
Нажимаю кнопку UpDate, значение lastupdate меняется на текущее время, потом через секунду примерно становится снова
21:41:25.000
23.10.2013
Аналогично изменяется и nextupdate. Так должно быть или это баг? Запускаю в LV2013.
У графиков, кстати, тоже маленько шрифты съехали, но вроде читабельно.
Вот, прописал вместо Москвы свой город, тогда обновилась инфа. А иначе не получалось.
User avatar
dadreamer
professor
professor
 
Posts: 3009
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 728
I/O VIP vision internet

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

Postby IvanLis on 23 Oct 2013, 19:34

dadreamer wrote:У меня написано в 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 гореть красным.
User avatar
IvanLis
professor
professor
 
Posts: 4522
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 714
hardware VIP bloggers teachers

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

Postby gasan_333 on 17 Apr 2015, 09:14

Добрый день IvanLis. Я скачал ваши исходники хочу доработать программу, голосовую оповещение хочу добавить. Че то она ошибки выдает Scan From String (arg 1) in Parse WeatherData-Meta.vi -> Parse WeatherData.vi -> WeatherGet.vi -> WeatherInformer.vi
User avatar
gasan_333
user
user
 
Posts: 98
Joined: 15 Feb 2014, 21:28
LabVIEW Version: 2012
Karma: 5

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

Postby IvanLis on 17 Apr 2015, 15:23

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


Да, действительно :crazy: .
У них видимо структура XML изменилась. Нужно отследить причину ошибки и подправить format string под действительное состояние.
Когда будет окошко, я посмотрю. Но Вы можете сделать это и сами.
User avatar
IvanLis
professor
professor
 
Posts: 4522
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 714
hardware VIP bloggers teachers

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

Postby gasan_333 on 17 Apr 2015, 16:10

Я уже занимаюсь этим спасибо :super:
User avatar
gasan_333
user
user
 
Posts: 98
Joined: 15 Feb 2014, 21:28
LabVIEW Version: 2012
Karma: 5

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

Postby IvanLis on 17 Apr 2015, 17:30

gasan_333 wrote:Я уже занимаюсь этим спасибо :super:


Документацию не смотрел, может там есть пояснения по этому поводу.
Но в принимаемых данных теги lastupdate и nextupdate приходят пустыми:
Code: Select all
  <meta>
    <lastupdate/>
    <calctime>0.152</calctime>
    <nextupdate/>
  </meta>


Добавил обработку ошибки в функцию:
Parse WeatherData-Meta.vi
lv2010
(24.02 KiB) Downloaded 120 times


Но автообновление (Event -> вкладка Timeout) основывается на значении nextupdate, по этому нужно продумать и поправить этот механизм/
User avatar
IvanLis
professor
professor
 
Posts: 4522
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 714
hardware VIP bloggers teachers

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

Postby gasan_333 on 21 Apr 2015, 11:59

Как то вот так
Attachments
WeatherInformer.zip
(417.24 KiB) Downloaded 132 times
User avatar
gasan_333
user
user
 
Posts: 98
Joined: 15 Feb 2014, 21:28
LabVIEW Version: 2012
Karma: 5

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

Postby gasan_333 on 17 Jul 2015, 13:47

А как можно получить информацию по осадкам ? По проценту облачности ?
User avatar
gasan_333
user
user
 
Posts: 98
Joined: 15 Feb 2014, 21:28
LabVIEW Version: 2012
Karma: 5

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

Postby IvanLis on 17 Jul 2015, 16:01

gasan_333 wrote:А как можно получить информацию по осадкам ? По проценту облачности ?


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

Если брать текущую погоду по другому адресу: http://api.openweathermap.org/data/2.5/ ... w&mode=xml
То получим:
Code: Select all
<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
Короче, как Ваша фантазия разыграется.
User avatar
IvanLis
professor
professor
 
Posts: 4522
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 714
hardware VIP bloggers teachers

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

Postby gasan_333 on 21 Jul 2015, 14:59

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

Спасибо за ссылку будем пробовать.
User avatar
gasan_333
user
user
 
Posts: 98
Joined: 15 Feb 2014, 21:28
LabVIEW Version: 2012
Karma: 5


Return to Проекты

Who is online

Users browsing this forum: No registered users and 2 guests

cron