Погодный информер (Weather Informer)
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Погодный информер (Weather Informer)
Проектом назвать это можно с натяжкой
Но вот что получилось, может куму-то и сгодиться.
А если с Вашей помощью еще и довести до презентабельного вида, то вполне сойдет для ежедневного использования.
До этого я дергал погоду с сайта 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. Этот этап самый сложный. Так что если есть готовые оказать помощь в оформлении интерфейса, готов посодействовать. Пока это выглядит следующим образом (выглядело в предварительной версии, в выложенной немного изменилось, но смысл тот же): 4. Что касается периодичности, то я пошел кратчайшим путем. Цикл крутится раз в минуту. Если текущее время <= времени nextupdate (вкладка Setup), то запрашиваем данные с сервера. В случае удачного получения данных время nextupdate обновляется (его назначает сервер). Если данные не были получены или получены с ошибкой, то перезапрос выполняется через минуту, на следующей итерации цикла. Ну и при желании можно выполнить запрос вручную, нажав кнопку UpDate.
Данные о необходимом городе записаны в файле Data.txt. Если он отсутствует, то по умолчанию запрашивается погода г. Москва. Если ввести свой город в поле запроса, а потом остановить программу, нажав кнопку Stop, то Ваши данные будут сохранены в файл и при следующем запуске программы Москвы уже не будет.
--------------------------
Что касается критики и доработок...
Я вижу следующие проблемы (но как говориться "В чужом глазу соринку видит, а в своём бревна не замечает"):
1. Самое главное это интерфейс.
2. При запросе данных с сервера программа подвисает (не реагирует на нажатие кнопок панели управления). Все сделано в одном цикле, и разносить по разным не вижу смысла, т.к. это всего 1-3 секунды из 3-х часов. Да и работает программа полностью в автоматическом режиме.
---------------------------
Ну и сама программа (LV2010), если необходимо в более низкой версии, пишите: Код не отработан полностью и не соответствует рекомендациям, так что за это не пинайте.
Так же меня интересует работоспособность в Windows, т.к. все писалось и тестировалось в Linux, по этому некоторые решения могут показаться странными.
-------------------------
Жду отзывов и предложений. А самое главное, талантливого дизайнера, который поможет доработать и оживить интерфейс.
Но вот что получилось, может куму-то и сгодиться.
А если с Вашей помощью еще и довести до презентабельного вида, то вполне сойдет для ежедневного использования.
До этого я дергал погоду с сайта 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. Этот этап самый сложный. Так что если есть готовые оказать помощь в оформлении интерфейса, готов посодействовать. Пока это выглядит следующим образом (выглядело в предварительной версии, в выложенной немного изменилось, но смысл тот же): 4. Что касается периодичности, то я пошел кратчайшим путем. Цикл крутится раз в минуту. Если текущее время <= времени nextupdate (вкладка Setup), то запрашиваем данные с сервера. В случае удачного получения данных время nextupdate обновляется (его назначает сервер). Если данные не были получены или получены с ошибкой, то перезапрос выполняется через минуту, на следующей итерации цикла. Ну и при желании можно выполнить запрос вручную, нажав кнопку UpDate.
Данные о необходимом городе записаны в файле Data.txt. Если он отсутствует, то по умолчанию запрашивается погода г. Москва. Если ввести свой город в поле запроса, а потом остановить программу, нажав кнопку Stop, то Ваши данные будут сохранены в файл и при следующем запуске программы Москвы уже не будет.
--------------------------
Что касается критики и доработок...
Я вижу следующие проблемы (но как говориться "В чужом глазу соринку видит, а в своём бревна не замечает"):
1. Самое главное это интерфейс.
2. При запросе данных с сервера программа подвисает (не реагирует на нажатие кнопок панели управления). Все сделано в одном цикле, и разносить по разным не вижу смысла, т.к. это всего 1-3 секунды из 3-х часов. Да и работает программа полностью в автоматическом режиме.
---------------------------
Ну и сама программа (LV2010), если необходимо в более низкой версии, пишите: Код не отработан полностью и не соответствует рекомендациям, так что за это не пинайте.
Так же меня интересует работоспособность в Windows, т.к. все писалось и тестировалось в Linux, по этому некоторые решения могут показаться странными.
-------------------------
Жду отзывов и предложений. А самое главное, талантливого дизайнера, который поможет доработать и оживить интерфейс.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Погодный информер (Weather Informer)
Для Linux-оидов выкладываю собранную программу:
http://ftp.ni.com/support/softlib/labvi ... 1.i386.zip
Только не забудьте установить runtime: Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Погодный информер (Weather Informer)
Запустилось и работает. Есть некоторые мелкие нюансы, например, поле текущего времени слегка налазит на Tab Control, в третьем поле (ветер) данные не помещаются полностью (видимо, шрифты различаются), и самое главное - принудительное обновление через кнопку UpDate не работает - сбрасывает на последнее программно полученное значение. Дизайнер из меня тоже не супер, но я бы не стал выводить кластер error out на панель, а также надо запретить растягивание формы и её разворачивание, а то некрасиво - элементы управления ютятся в углу, а остальное место пустое. В остальном всё очень даже культурно и грамотно, правда код не разбирал толком пока. Жаль, что сайт и API на английском, все-таки привычнее видеть родной язык.IvanLis писал(а):Так же меня интересует работоспособность в Windows, т.к. все писалось и тестировалось в Linux, по этому некоторые решения могут показаться странными.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Погодный информер (Weather Informer)
Должно работать...dadreamer писал(а):самое главное - принудительное обновление через кнопку UpDate не работает - сбрасывает на последнее программно полученное значение
Там все обновление через один Event работает
Может немного задержка быть.
Что касается "налезает" и "не помещается", это видимо шрифты и настройки. На скринах, то что вижу я.dadreamer писал(а):Дизайнер из меня тоже не супер, но я бы не стал выводить кластер error out на панель, а также надо запретить растягивание формы и её разворачивание, а то некрасиво - элементы управления ютятся в углу, а остальное место пустое.
По поводу управления, оно больше для самоуспокоения.
Если прописать данные н.п. в файл Data.txt до запуска программы, то оно и не нужно в принципе вообще.
Ну а кластер Error и вкладка Setup, это больше для отладки.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Погодный информер (Weather Informer)
У меня написано в lastupdateIvanLis писал(а):Должно работать...
Там все обновление через один Event работает
Может немного задержка быть.
21:41:25.000
23.10.2013
Нажимаю кнопку UpDate, значение lastupdate меняется на текущее время, потом через секунду примерно становится снова
21:41:25.000
23.10.2013
Аналогично изменяется и nextupdate. Так должно быть или это баг? Запускаю в LV2013.
У графиков, кстати, тоже маленько шрифты съехали, но вроде читабельно.
Вот, прописал вместо Москвы свой город, тогда обновилась инфа. А иначе не получалось.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Погодный информер (Weather Informer)
Нет это не баг . Все работает нормально.dadreamer писал(а):У меня написано в lastupdate
21:41:25.000
23.10.2013
Нажимаю кнопку UpDate, значение lastupdate меняется на текущее время, потом через секунду примерно становится снова
21:41:25.000
23.10.2013
Аналогично изменяется и nextupdate. Так должно быть или это баг? Запускаю в LV2013.
Это время назначается сервером и передается с данными.
При нажатии кнопки UpDate, время lastupdate приравнивается текущему.
После получения и парсинга данных оно обновляется.
Индикатором обновления является кратковременное залипание кнопки UpDate (она во время обновления становится/остается нажатой). Если обновление после нажатия кнопки UpDate не прошло, то будет Error Data гореть красным.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
- gasan_333
- user
- Сообщения: 98
- Зарегистрирован: 15 фев 2014, 21:28
- Версия LabVIEW: 2012
- Контактная информация:
Re: Погодный информер (Weather Informer)
Добрый день IvanLis. Я скачал ваши исходники хочу доработать программу, голосовую оповещение хочу добавить. Че то она ошибки выдает Scan From String (arg 1) in Parse WeatherData-Meta.vi -> Parse WeatherData.vi -> WeatherGet.vi -> WeatherInformer.vi
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Погодный информер (Weather Informer)
Да, действительно .gasan_333 писал(а):Добрый день IvanLis. Я скачал ваши исходники хочу доработать программу, голосовую оповещение хочу добавить. Че то она ошибки выдает Scan From String (arg 1) in Parse WeatherData-Meta.vi -> Parse WeatherData.vi -> WeatherGet.vi -> WeatherInformer.vi
У них видимо структура XML изменилась. Нужно отследить причину ошибки и подправить format string под действительное состояние.
Когда будет окошко, я посмотрю. Но Вы можете сделать это и сами.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Погодный информер (Weather Informer)
Документацию не смотрел, может там есть пояснения по этому поводу.gasan_333 писал(а):Я уже занимаюсь этим спасибо
Но в принимаемых данных теги lastupdate и nextupdate приходят пустыми:
Код: Выделить всё
<meta>
<lastupdate/>
<calctime>0.152</calctime>
<nextupdate/>
</meta>
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
- gasan_333
- user
- Сообщения: 98
- Зарегистрирован: 15 фев 2014, 21:28
- Версия LabVIEW: 2012
- Контактная информация:
Re: Погодный информер (Weather Informer)
Как то вот так
- Вложения
-
- WeatherInformer.zip
- (417.24 КБ) 344 скачивания
- gasan_333
- user
- Сообщения: 98
- Зарегистрирован: 15 фев 2014, 21:28
- Версия LabVIEW: 2012
- Контактная информация:
Re: Погодный информер (Weather Informer)
А как можно получить информацию по осадкам ? По проценту облачности ?
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Погодный информер (Weather Informer)
То что в примере, забирает погоду по адресу: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>
"облачность" - clouds
"осадки" - precipitation
Точнее наверное сказать, что может присутствовать согласно описания, что Вам вернется, понятия не имею .
Можно попробовать забрать погоду с ближайшей метеостанции: http://openweathermap.org/api_station
Короче, как Ваша фантазия разыграется.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
- gasan_333
- user
- Сообщения: 98
- Зарегистрирован: 15 фев 2014, 21:28
- Версия LabVIEW: 2012
- Контактная информация:
Re: Погодный информер (Weather Informer)
Спасибо за ссылку будем пробовать.Я взял его за основу только, потому что, ответ отдается нам в XML, а тема как бы является продолжением другой где структура данных похожа.... ru/sovetyipravila/303--xml-labview-xml-parse