ФОРУМ КУПИТЬ

Последние статьи

ВСЕ СТАТЬИ

Подключение домашней метеостанции к компьютеру Умного Дома

19/02/2011 15:44:46

Елисей, не унывая,
К ветру кинулся, взывая:
«Ветер, ветер! Ты могуч,
Ты гоняешь стаи туч,
Ты волнуешь сине море,
Всюду веешь на просторе,
Не боишься никого,
Кроме бога одного.

(Пушкин А.С. "Сказка о мертвой царевне")

Метеостанция WH-2080Ну, царевна мне не нужна, особенно мертвая, а вот с ветром на ты поговорить давно хотелось. И вот сбылась мечта. Али из города на Неве, один из посетителей моего сайта помог в этом самым непосредственным образом, прислав по почте метеостанцию WH-2080,  о которой и пойдет речь в данной статье.

Итак, метеостанция состоит из двух главных элементов: уличных датчиков с радиопередатчиком и внутреннего ЖК-дисплея, который также оснащен датчиками и USB-портом. Уличный блок в свою очередь собирается из анемометра, который измеряет направление и скорость ветра, датчика количества осадков и радиопередатчика, в котором содержится датчик влажности и температуры. Для передачи данных используется частота 433Mhz. На этой же частоте работают дистанционные брелки автомобильных сигнализаций, портативные рации и прочие прелести современной жизни. Инструкция обещает дальность связи порядка 110 метров при прямой видимости. Посмотрим... Внутренний блок содержит температурный датчик, датчик влажности и датчик атмосферного давления. Как уличный радиопередатчик, так и ЖК-дисплей питаются от двух щелочных элементов питания типа АА, хотя у ЖК-дисплея есть разъем для подключения блока питания.

Таким образом, метеостанция измеряет следующие параметры:
Скорость ветра
Направление ветра
Атмосферное давление
Температура внутри
Температура снаружи
Влажность внутри
Влажность снаружи
Количество осадков

Существуют и расчетные значения, такие как: точка росы, температура комфорта, прогноз.

Но самое важно для меня было то, что внутренний блок с ЖК-дисплеем имеет заветный USB-разъем. В комплекте с метеостанцией идет диск с программой Easyweather software, конечно, для ОС Windows. Программа оказалась вполне рабочей, хотя и с достаточно архаичным оформлением. Однако, как гласит известная латышская поговорка "Не каждое дерево годится на дудки". Надобно было найти возможность считывать с метеостанции первичные данные, подключив ее к Linux'у, а затем сохранять полученную информацию в MySQL-базе. Только тогда метеостанция будет встроена в общую систему Умного Дома, а любая информация, в том числе графики, аналитика, прогнозы, была бы доступна через Web-интерфейс. Кроме того, информацию от метеостанции можно было бы использовать для управления климатом и отоплением дома. И эта задача оказалась вполне решаемой.

Домашняя метеостанция с подключеним к компьютеру
ЖК-дисплей метеостанции с подключенным USB-кабелем

На просторах необъятного нынче Интернета был найден скромный, но весьма полезный проект, под названием pywws, который незатейливо расшифровывается как Python software for Wireless Weather Stations. pywws изначально разрабатывался для WH1080, но позже выяснилось, что с pywws работают и другие метеостанции, такие как WH1081, WH8681, Elecsa AstroTouch 6975 и, возможно, любые другие, которые поставляются с ПО Easyweather software.

Подключение метеостанции к Linux (Debian lenny) не вызвало каких-либо сложностей. Метеостанция определилась как
hiddev96hidraw0: USB HID v1.00 Device [HID 1941:8021]
А pywws успешно считал с нее все данные.

Надо сказать, что метеостанция имеет встроенную память, в которой сохраняются значения за определенный интервал времени. По умолчанию показания датчиков сохраняются в память каждые 30 минут, но этот интервал можно изменить с помощью pywws. С другой стороны pywws можно запускать, например, раз в сутки для считывания всех значений, сохраненных в памяти метеостанции. pywws имеет собственную файловую структуру для хранения считанной информации. Все это здорово, но не укладывалось в мою концепцию. Мне нужны были только текущие данные. А уж как их сохранить и обработать я хотел решить сам.

К сожалению в комплекте pywws не было готового скрипта, который бы "выдирал" живые данные, поэтому пришлось копнуть на пол штыка. Благо, червяки залегали не слишком глубоко. pywws написан на языке Python. Раньше, я никогда не использовал его в своей системе, но язык оказался простым, понятным и на удивление логичным.
А вот и скрипт для считывания live data с метеостанции.

#!/usr/bin/env python

import sys

from pywws import WeatherStation

ws = WeatherStation.weather_station()
ptr = ws.current_pos()
data = ws.get_data(ptr)
for w_data in data:
	print w_data, str(data[w_data])

Вывод программы:

hum_out 55
status 128
wind_gust 0.3
wind_ave 0
rain 0.3
temp_in 24.0
delay 12
abs_pressure 1021.0
hum_in 4
temp_out -25.8
wind_dir 1

Собственно, и все. Радиопередатчик внешнего блока передает данные каждые 48 секунд, поэтому считывать данные можно по крону раз в минуту. Осталось только записать данные в MySQL-базу данных.

#!/usr/bin/env python
# coding: windows-1251

import sys
import MySQLdb

from pywws import WeatherStation

ws = WeatherStation.weather_station()
ptr = ws.current_pos()
data = ws.get_data(ptr)
db = MySQLdb.connect(host='localhost', user='root', passwd='ghzybrb', db='cadmin')
cursor= db.cursor()
cursor.execute("SELECT MAX(tmpID) FROM tmp_2")
result = cursor.fetchone()
tmpID = result[0] + 1
for w_data in data:
	if w_data == 'abs_pressure':
		data[w_data] = round(data[w_data] * 0.750062, 2)
	if w_data != 'status' and w_data != 'delay':
		cursor.execute("SELECT ContID FROM tCont WHERE Cont_Label='wh_" + w_data + "' LIMIT 1")
		result = cursor.fetchone()
		if ( str(data[w_data]) == "None" ):
			data[w_data] = 0
		cursor.execute("INSERT INTO tmp_2 VALUES(" + str(tmpID) + ", " + str(result[0]) + ", SYSDATE(), " + str(data[w_data]) + ")")
		tmpID = tmpID + 1

Можно особенно не вникать в структуру моей базы данных. Главное понять принцип, а он простой как две копейки. Так как станция выдает значение атмосферного давления в гПа, приходится преобразовывать его в привычные нам миллиметры ртутного столба. Это, пожалуй, единственный нюанс.

Теперь немного о практическом применении. Как только я открыл коробку, у меня возникло несколько вопросов. Первое, какова реальная дальность связи между передатчиком и базой, учитывая, что стены в России толстые, а иногда и железобетонные. Второе, как поведут себя в мороз обычные батарейки в радиопередатчике. Третье, сможет ли вообще столь нежная конструкция анемометра работать в континентальном климате средней полосы нашей Родины, где сильный ветер со снегом в -25 нередкое явление.

Домашняя метеостанция. Выносные датчики, анемометр
Тестирование метеостанции. Внешние сенсоры пока без датчика осадков.

Поэтому я решил выбрать самое "удобное" время, когда в нашей местности стояли морозы ночами до минус 30 и в буквальном смысле примотал выносной блок к первой попавшейся заборной конструкции. Серверная, где стоит оборудование, находится в цоколе на уровне примерно -1,2 от земли. До радиопередатчика по прямой метров 25. Между внутренним блоком и радиопередатчиком кирпичная перегородка и внешняя стена из кирпича толщиной 64 см. Результат - сигнал не проходит. Пришлось переместить блок с наружными датчиками на 5 метров ближе к дому. Только тогда база "увидела" передатчик. Что касается работы алкалайновых батареек в морозы, то пока они работают нормально. В инструкции к метеостанции указано, что батарейки в передатчике рассчитаны на 2 года! С трудом верится, но посмотрим... В данный момент конструкция анемометра работоспособна, и только время покажет, насколько ее хватит.

Для вывода информации в веб-интерфейсе Умного Дома я воспользовался уже отработанными решениями. Так, для отображения информации о температуре, влажности, атмосферном давлении я использую jpgraph.

График атмосферного давления, полученный с домашней метеостанции

Несколько слов о влажности. В данный момент, середина февраля, метеостанция показывает влажность внутри порядка 0-5%, а снаружи от 30% до 50%. Я, конечно, понимаю, что влажность в зимний отопительный период должна снижаться до минимальных значений, но 0% - это через чур... Есть мнение, что бытовые метеостанции не могут корректно определять влажность ниже 30%, поэтому значения менее данного порога нужно интерпретировать просто - "воздух сухой". Что касается влажности на улице, то и здесь остается вопрос. Все сайты, которые отображают влажность для нашего региона, дают влажность от 78% до 100% в то время как метеостанция не показывает более 50%. Что это, некорретное измерение влажности со стороны метеостанции или действительно фактическое значение отличается от того, что дают крупшейшие погодные порталы? Я понимаю, что измерение относительной влажности "вопрос темный и изучению не подлежит", но разве может быть сейчас в нашем континентальном, степном климате при -27С влажность 100%?

Что же касается отображения скорости и направления ветра, то имея данные в MySQL базе данных, можно делать все, что угодно. Например, так.

Отображаем направление и скорость ветра

Направление ветра в метеостанции представлено значениями от 0 до 15. Здесь 0 - это Север, 8 - Юг и т.д. Вывести данные легко с помощью простейшего PHP-скрипта.

<?
$wind_dir_text = array("Северный", "Северо-Северо-Восточный", "Северо-Восточный", "Северо-Восточный-Восточный",
"Восточный", "Юго-Восточный-Восточный", "Юго-Восточный", "Юго-Юго-Восточный",
"Южный", "Юго-Юго-Западный", "Юго-Западный", "Юго-Западный-Западный",
"Западный", "Северо-Западный-Западный", "Северо-Западный", "Северо-Северо-Западный", "Нет данных");

// Направление ветра текущее

$sql="SELECT dev_value FROM tmp_2 ORDER BY tmpID DESC LIMIT 1";
if(!($result=mysql_query($sql,$conn)))
echo "ошибка";
else
{
    while(($data=mysql_fetch_row($result)))
    $wind_dir_current = round($data[0]);
}
echo "Направление ветра: ".$wind_dir_text[$wind_dir_current]."<br>";
?>

Немного сложнее обстоят дела с рассчетом среднего направления ветра. Направление ветра определяется угловым значением, а значит алгоритмы вычисления среднестатистических значений тут неприменимы. Ну, например, ветер направления NNW имеет угловое значение 315 градусов, а северный N ветер 0 градусов. Среднее от этих значений даст 157,5 градуса (юго-восточный ветер), что, конечно, является ошибкой. Можно было бы усреднять значения синусов углов, но обратная тригонометрическая функция от такого усреднения (а мы имеем дело с полной окружностью от 0 до 360 градусов) не даст однозначного ответа (вспомним графическое представление синусоиды).

Но есть замечательная формула, которая решает данную проблему.

Среднее направление ветра = atan2(∑sin(a), ∑cos(a))

atan2 - это разновидность арктангенса, которую иначе можно выразить следующим образом: 2arctg(√(x² + y²) - x / y )

Программно на языке PHP это можно реализовать следующим образом

<?
$sql="SELECT dev_value FROM tmp_2 WHERE AND dev_value<16 AND dev_date > NOW() - INTERVAL 1 HOUR";
if(!($result=mysql_query($sql,$conn)))
echo "ошибка";
else
{
    while(($data=mysql_fetch_row($result)))
    {
        // Приводим нормализованное значение к градусам
        $data[0] = $data[0] * 22.5;
        $A = $A + sin(deg2rad($data[0]));
        $B = $B + cos(deg2rad($data[0]));
    }
}

$wind_dir_avg1 = rad2deg(atan2($A, $B));
if ( $wind_dir_avg1 < 0 )
$wind_dir_avg1 = 360 + $wind_dir_avg1;

$wind_dir_avg = round($wind_dir_avg1 / 22.5);

echo "Направление ветра (среднее за час): ".$wind_dir_text[$wind_dir_avg]."<br>";
?>

Вообще говоря, среднее направление ветра - понятие весьма гибкое. Здесь мы посчитали средее направление без учета силы ветра. А ведь можно ввести в формулу коэффициент, определяющий скорость ветра, чтобы получить среднее направление, учитывающее реальный объем перемещенного воздуха в определенную сторону света.

Еще раз выражаю благодарность посетителю сайта Али из Питера, который предоставил для изучения метеостанцию WH-2080.

UPDATE: В мае 2018 года опубликована новая статья, описывающая опыт подключения датчиков скорости и направления ветра посредством контроллера MegaD-2561 в общую систему Умного Дома. Позже добавлена статья об интеграции в систему датчика количество осадков.

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:

(необязательно, не отображается на сайте)


Сортировка комментариев: Последние сверху | Первые сверху

2014-03-06 18:04:35 | Andrey_B
Pop, я уже отвечал на этот вопрос.
Ищем в Интернете Linux Wather Station
Находим проект wviewweather
Смотрим список поддерживаемых станций: Davis Vantage Pro/Pro2/Vue Console Controller Vaisala WXT510/520 Controller Texas Weather Instruments Controller Oregon Scientific WMR-USB (WMR88/WMR88A/WMR100/WMR100N/WMR200/WMRS200) Controller Hideki, Nexus, Mebus, Irox, Honeywell, Cresta TE923, TE923W, TE821W, WXR810, DV928 Controller Fine Offset WH1080/WH1081, Watson W-8681/WX-2008, National Geographic: 265 NE, Elecsa 6975/6976, Ambient Weather WS-1080/WS-1090/WS-2080, Tycon TP1080WC Controller La Crosse WS-2300/WS-2305/WS-2310/WS-2315 Controller
Oregon Scientific WMR918/WMR928NX/WMR968 Controller
===
Ищет в Интернете первую попавшуюся
Oregon Scientific WMR - находим, что Oregon Scientific WMR 200 спокойно продается в России. Можно поискать и другие из списка.


2014-03-05 22:49:26 | Pop
Подскажите, а что из метеостанций (ск ветра, направление, осадки) можно купить в Мск, чтобы можно было интегрировать в умный дом. Я так понял, что та что в вашей статье только из-за бугра.


2014-03-03 00:11:18 | AlexNike
Как бы еще дозиметр подключить? как тут /easymcu.ru/publ/10-1-0-93


2014-01-30 18:20:20 | Eugene
Есть такая weewx. Рисует и графики, показания снимает и пишет в базу, из все "из коробки".
И большинство погодных станций поддерживает. И развивается.
И написано на том же python


2013-06-05 09:44:40 | tammat
@olorin.
Да DNS есть, но подключаю USB-приемник к debian, он его не видит. Сканирую порты - по лоальной сети. нет открытых. Уже офонарел. Или как передать логин и пароль на сервер osanyweather.com?
Спасибо


2013-05-27 09:32:08 | Andrey_B
Сергей, с температурой проблем нет. Отлично измеряют. Разница в показаниях между этой метеостанцией DS18B20 и другими термометрами не более градуса-двух.


2013-05-26 21:11:57 | Сергей
Ладно - влажность.
А вот насколько точно все эти игрушки измеряют температуру, особенно отрицательные значения ниже -10?


2013-05-25 21:21:24 | Олег
wviewweather.com - посмотрите


2013-05-16 07:14:53 | olorin
Для tammat:
Можно попробовать, если есть свой DNS-сервер. Тогда станция будет отправлять данные на нужный web-сервер, который можно оставить локально. Или пытаться заниматься радиоперехватом сигналов с датчиков.


2013-05-07 18:43:16 | Spawn
Снова вспомнил про этот сайт :) Отчитываюсь по станции. После двух лет эксплуатации намертво заржавел подшипник флюгера, сейчас ищу, чем заменить. Одновременно перестал работать передатчик - вылечилось чисткой платы спиртом (было много окислов). В остальном работает без нареканий.


2013-04-29 14:57:51 | tammat
Прикупил тут LW301 по случаю.
Данные отпрeавляются на osanyweather
можно посмотреть на iphone, androide на сайте, а скачать только после авторизации.Пробывал подключить отдельный блок к USB, ни Windows, ни Debian его не распознают. Посоветуйте как вытащить данные- все-равно откуда.


2013-04-24 14:51:01 | Moxli
ak_1 - графики рисовать не пробовал - но кое что подскажу. У меня у самого в использовании Synology 209. Я с приятелем занимаюсь проектом HArtOSS. На русском форуме Synology мы обсуждали процесс рисования графиков. Но тема была забыта и удалена за ненадобностью. Что я Вам посоветую: установить Debian на Ваш Syno. Тогда проблем с библиотеками станет меньше. Инструкция здесь: /www.synology-forum.ru/index.php?showtopic=5091. Я вобще удивляюсь, как вы умудрились установить и настроить пакеты используя один только ipkg:)? Поделитесь инструкцией в теме /www.synology-forum.ru/index.php?showtopic=3539. Многие будут признательны Вашему описанию подключения и настройки погодной станции, может чего и подскажут по рисованию;) графиков..

Я использую для погодной станции 1-wire датчики для всех этих нужд. Хотя, согласен с мнением, что готовые погодные станции имеют рад преимуществ. Целостная конструкция, например. Но кое-что меня настораживает. Далеко ходить не нужно - автор статьи упоминает об ошибках измерения относительной влажности. И как с этим жить:)?

У меня все более прозаично. И, соответственно, дёшево. Правда за анемометр пришлось выложиться.. Ну а давление, влажность и температуру - меряем сами.. Снимаю аналоговые показания с Анемометра, с датчика HIH-4000(относительная влажность) и с мотороловского датчика давления MPX2200 на 1-Wire модуль(купил готовый за 700р), построенный на компоненте DS2450. В сумме получилось ~5 тыс. Вот только количество осадков нужно бы контролить. Но этот девайс еще не приобрел. Это около 2500 тыс. В итоге получится 7500. Дорого. Но зато могу разнести все по разным углам..


2013-04-15 19:39:49 | ak_1
Andrey_B - спасибо - понял. просто риосвать не умею. и вообще с прогр не очень в ладах
кодом не поделитесь ? так что бы вывести графики

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


2013-04-15 17:32:59 | Andrey_B
ak_1, в статье используется библиотека jpgraph. Достаточно просто. В сети очень много более современных библиотек для рисования графиков, в том числе на HTML5.


2013-04-14 18:59:58 | ak_1
купил WH2080 и подключил его в Synology DS 207+
установил с трудом нужные пакеты и заставил питон отрабатывать запрос
научился писать в базу

никто не подскажет простой способ для того что бы нарисовать графики ?


2013-01-20 22:37:59 | egor
Спасибо за статью, помогла мне подключить станцию.


2012-02-16 23:22:22 | Andrey_B
Spawn, осадки отдаются накопительным итогом. У меня также.
И это логично, так как иначе не понятно будет за какой период получаемые значения. А так их можно считать исходя из периодичности опроса.


2012-02-16 20:43:12 | Spawn
Как доделаю, так отпишусь. У меня вот дождь 2,1 показывает при чтении, хотя на дисплее ноль. Не пойму пока.


2012-02-16 18:35:29 | Andrey_B
Spawn, ну, поздравляю! ;)
Теперь с вас отчет о подключении и использовании. Лучше на форуме.


2012-02-16 18:08:44 | Spawn
Купил :)


2011-12-28 11:08:31 | Andrey_B
В Самарской области с обледенением не сталкивался пока, зато сталкивался с пауками, которые в одну безветренную летнюю ночь надежно зафиксировали крыльчатку. Батарейки не менял уже почти год, хотя морозы стояли до -30.


2011-12-28 10:33:51 | Али
Батарейки ведут себя нормально. Больше проблема когда погода крутиться вокруг нуля, нет ветра и идут "ледяные дожди". У меня пару раз датчики ветра покрывались льдом и переставали работать. Также не рекомендуется ставить станцию на фронтоне крыши. Я поставил там сначала, так вот теплый воздух из под конька во-первых добавляет градус тепла на термометр, а во-вторых все также способствует обледенению датчиков. Так что основная проблема это обледенение, а не батарейки.


2011-12-28 10:24:28 | Spawn
Скажите, как там обстоят дела с батарейками во внешнем модуле? Меняли уже? У нас и за -45 бывает, интересует как оно жить будет в таких условиях :)


2011-10-14 10:21:08 | Роман
Купил такую же станцию. Буду разбираться. Могу добавить, что если станция подключена к USB порту, то питается от него. А батарейки в ней нужны для того, чтобы не сбросились настройки и конечно питать если не подключена к USB.


2011-10-06 22:43:03 | Andrey_B
sueno, статья была написана зимой. Зимой в морозы на улице влажность составляла в среднем около 50%. Летом влажность значительно выше и совпадает с информацией, которую дают метеосайты. В частности в сильный дождь влажность как и положено составляет 98%-100%.
Что касается влажности внутри помещения, то все зависит от экземпляра. Те, кто продают метеостанции знают, что даже две совершенно одинаковые модели часто показывают сильно разные значения. Сухой воздух бытовые метеостанции за небольшие деньги определяют очень условно. Об этом много говорилось на соответствующих форумах.


2011-10-06 20:02:05 | sueno
К вопросу о влажности. Моя простенькая станция Oregon влажность показывает очень точно. Конечно, никаких эталонных измерителей у меня нет, но все выглядит очень плавно без скачков. Зимой в квартире при включенном центральном отоплении она опускается до 13%, но ноль я никогда не видел. А в дождь на улице поднимется до 80-85%. Возможно неточная влажность - проблема станций Ambient Weather?


2011-09-22 16:14:06 | Ставр
Блин, туплю. Все же написано! :-)


2011-09-22 11:19:51 | Ставр
Андрей, а играться с настройками позволяет сам pywws, или к станции есть родной софт, позволяющий "играть" с настройками?


2011-09-20 14:23:12 | Andrey_B
Ставр, с заводскими настройками метеостанция запоминает значения каждые 30 минут. Таким образом ей хватает памяти на 2,5 месяца. Периодичность сохранения данных можно изменить. Минимальный период - 5 минут. Это 2 недели.
pywws без моих доделок как раз и работает по этому принципу - забирает новые данные из памяти. Таким образом опрашивать метеостанцию можно не часто или вообще в произвольные промежутки времени.


2011-09-20 12:21:32 | Ставр
А вот стало интересно, если не забирать раз в минуту данные, их можно забрать через сутки?
У станции есть внутренний кэш, в котором некоторое время хранятся все записи? Или как? Насколько долго они могут там хранится?


2011-04-08 16:52:55 | Andrey_B
Ставр, а заведите пожалуйста тему в форуме.
Там и поговорим. ;)
И посты там можно редактировать...


2011-04-08 16:43:30 | Ставр
На вход в замбретти подается $wind_dir_text_uk[$wind_dir_avg], т.е. одно из значений в массиве типа N, NW и FALSE, Так вот FALSE - это специальное значение, его обязательно формировать и подавать, если ветра нет. ??

П.С. Жаль, что нельзя редактировать свои посты, а то "?" забыл, и не исправить, кроме как второй пост писать.


2011-04-08 16:41:41 | Ставр
Андрей, спасибо за подробные разъяснения. Они помогли мне продвинуться дальше в написании скриптов для моей станции.
Буду ковыряться дальше )))
Кстати небольшой вопрос по поводу алгоритма замбретти и ветра.
На вход в замбретти подается $wind_dir_text_uk[$wind_dir_avg], т.е. одно из значений в массиве типа N, NW и FALSE, Так вот FALSE - это специальное значение, его обязательно формировать и подавать, если ветра нет.
А то после "конструкции" ($wind_dir_avg1 = NULL) - у меня средняя скорость получается тоже скорее всего NULL, т.к. ничего не выводится, и я не совсем понимаю, что передается алгоритму в качестве ветра.


2011-04-08 10:14:12 | Andrey_B
Ставр, в языке PHP разрешены любые операции с NULL, а поскольку в этом случае происходит неявное преобразование типов, то операции:
"TEST".NULL - даст TEST
10 * NULL - даст 0
Это надо просто принять как данность. Может быть, где-то здесь есть проблемы с логикой, но зато программу на языке PHP сможет написать любой - я, вы. ;)
Для того, чтобы решить эту проблему можно делать проверку типа
if ( is_null($A) || is_null($B) )
$wind_dir_avg1 = NULL;
else
...

А что касается направления ветра, то вы совершенно правы. Вполне может случиться описываемая вами ситуация. Но это легко исправить в момент передачи параметров в алгоритм Zambretti. Достаточно взять среднюю скорость ветра. Если она менее 0.3 м/с, тогда считаем, что ветра нет вовсе. Можно делать это в момент записи. Для статьи я не стал усложнять программу, чтобы не размылась суть.
Кстати, полный штиль встречается не так часто. Моя метеостанция передает значения wind gust. Даже в полный штиль можно заметить небольшое движение анемометра, тогда wind gust показывает 0.3 м/с. В качестве базового параметра в алгоритме Zambretti используется атмосферное давление и его изменение. Даже если будет западный ветер при давлении в 780 мм рт. ст. и его росте, Zambretti не будет показывать дожди. ;)


2011-04-07 23:29:58 | Ставр
"Ставр, моя станция не связывает силу ветра с направлением. То есть когда скорость ветра 0 м/с, станция отображает то направление, в котором в данный момент находится датчик положения направления ветра. "
Значит получается, что если флюгер остановился на "Западе" и не двигался, то среднее направление ветра у вас теоретически может получится западным.
И вы передадите в алгоритм замбретти, западный ветер, которого на самом деле нет... Тогда алгоритм может вывести неправильный прогноз. Если мне не изменяет память, то в Европе западные ветра несут плохую погоду.


2011-04-07 23:22:42 | Ставр
В целом понятно.
Спасибо за желание помочь, но написать код я должен сам ))))
Просто мне не совсем понятно, почему если $А и $В в скрипте NULL, то при расчете выражения $wind_dir_avg1 = rad2deg(atan2($A, $B));
wind_dir_avg1 становится 0.
Я всегда думал, что если есть "некоторое ничего", что что с этим "ничего - nullем" (дели... умножай), то должно быть опять "ничего", но не ноль. Вот это меня и ставит в тупик.
Я конечно напишу условие, что если А и В пустые NULLi, то дальше не считать, а просто вывести значения, что данных нет или ветра нет, но хотелось бы понять, почему wind_dir_avg1 0?


2011-04-07 23:11:04 | Andrey_B
Ставр, моя станция не связывает силу ветра с направлением. То есть когда скорость ветра 0 м/с, станция отображает то направление, в котором в данный момент находится датчик положения направления ветра. Поэтому значений типа NULL относительно направления ветра у меня нет.
Но я не совсем понимаю в чем проблема. Ну просто не записывайте их в БД. Или записывайте, но при расчете среднего направления ветра не учитывайте, вставив условие в WHERE.
Насколько я помню, мой скрипт не учитывает ситуацию с отсутствием данных, но это сделать очень просто, добавив элементарное условие. Если нужно где-то помочь, говорите.


2011-04-07 23:00:19 | Ставр
Андрей, а что у вас скрипты заносят в базу, (или отдает станция) если ветра нет?
У меня если ветра нет, то скорость 0, а направление NULL. При этом выполняется часть скрипта:

$A = $A + sin(deg2rad($data[0]));
$B = $B + cos(deg2rad($data[0]));
}
}
$wind_dir_avg1 = rad2deg(atan2($A, $B));

$wind_dir_avg1 после этого становится 0, и средний ветер получается северным. По идее это неправильно, но не могу это побороть.

И еще одна непонятка. Как ваш скрипт определяет распознает "отсутствие данных" и "нет ветра"? Ведь отсутствие ветра и отсутствие данных - это разные вещи.
Если не влом, чирканите пару строк в ответ.
Спасибо!


2011-04-07 10:46:00 | Али
Там много чего можно добыть. Я там недавно еще прикупил датчик уровня жидкости в бочке с аналоговым выходом 0-10В за 30 баксов и погружную ультрафиолетовую лампу туда же за 40 долларов (см. статью Андрея про водоподготовку). Так что ищите и будет вам счастье :)


2011-04-07 09:35:14 | sibsdf
Али, спасибо за ответ. С продавцами есть опыт общения. Часто оборудование для производства покупаю там. Так что постараюсь и метеостанцию добыть...


2011-03-30 15:58:07 | Али
2 штуки с доставкой по Китаю обошлось 90 долларов, то есть по 45 за штуку. Заказывал на alibaba. Введите там weather station и найдете разные варианты... Вот например. www.alibaba.com/product-gs/261433723/Professional_Weather_Center_Weather_station.html Единственно надо с продавцами договориться, что вы хотите купить как образец... Они оптом обычно торгуют...


2011-03-30 14:51:28 | sibsdf
Всем привет. Заинтересовался темой подключения метеостанции.
Как раз скоро еду в Китай, думаю прикуплю такую же штуку себе.
Подскажите, где ориентировочно покупали, и какая стоимость? :)


2011-03-27 18:54:10 | Ставр
... или вы про адаптер?


2011-03-27 18:53:04 | Ставр
gtsx4444, а что в UK? Я просто порылся в и-нет и именно описанную тут станцию WS-2080, так просто не найти. Да и имеет ли смысл?
Если вы в Питере или Москве, то проще взять Орегон и не париться. У них в модельном ряду теперь появились недорогие станции. Я себе выбрал WS88.


2011-03-27 14:20:37 | gtsx4444
Ставр, аналогично. Мне Rainbow обещал за 10 дней, но что-то молчит. Я думаю может заказать из UK?


2011-03-27 13:43:59 | Ставр
Спасибо, Али
Однако на Алибабе чего-то не нашлось. видимо уже не продают. Ну да ладно, заказал уже Oregon WS88.

А вот интересно, что в Питере стало с USB 1-ware (9094R) адаптерами. Куда не позвоню - их в наличии нет, только на заказ через 17!!! недель! Что-то в мире случилось? )))

И кстати еще по софту, для 1-ware метеодатчиков есть такой проект: /oww.sourceforge.net/


2011-03-27 09:46:35 | Али
Я покупал используя ресурс www.alibaba.com Там в основном оптовики, но практически все могут продать 1-2 штуки в качестве "образца". Так что если с английским дружите, то вступайте в переговоры. Так же чейчас у них открылся alibaba express - там можно все штучно покупать.


2011-03-27 01:20:25 | Ставр
Ланукс то мне и нужен!
Andrey_B, спасибо за интересный ресурс! Среди множества людей, редко встречаются такие, кто действительно знает, о чем говорит и говорит об этом красиво, лаконично и доходчиво!
Ваши дела и подход достойны уважения!


2011-03-27 00:36:37 | Andrey_B
Ставр, найдите в интернете проект wview. Среди прочих станция там указано:
Oregon Scientific WMR-USB (WMR88/WMR88A/WMR100/WMR100N/WMR200/WMRS200/RMS300/RMS600)
wview is a collection of unix daemons which interface with a supported weather station to retrieve archive records (if generated by the station) and current conditions.
Так что по крайней мере в Linux у вас проблем не будет. ;)


2011-03-27 00:04:38 | Ставр
Интересно, а из Орегона - Oregon Scientific WMR88 подойдет?
Или у них закрытые стандарты передачи инфы на комп?


2011-03-26 23:31:09 | Ставр
Пробовал заказать эту метеостанцию на Амазоне - в Россию не отправляют.
На Ебэе - нету.
Жаль, штука прикольная и цена адекватная.
У нас на прилавках гламурный-ширпотреб Орегоновский, к тому же дороже.


2011-03-14 23:01:14 | Andrey_B
Алексей, Али привез две станции из Китая на случай, если одна сломается. Но одна не сломалась и Али любезно дал поиграться с лишней станцией мне. Думаю, при желании можно найти подобные станции в магазинах или в Интернете. Главное, чтобы станция комплектовалась ПО Easyweather. Это фактически будет гарантировать, что станция совместима с pywws и алгоритмами, изложенными в статье.


2011-03-14 20:29:57 | Алексей
Захотелось приобрести такую же метеостанцию. Сколько она стоит и как её можно приобрести (заказать)? Или как связаться с Али из Питера?


2011-02-20 10:36:15 | Andrey_B
Максим, Али прав, это неспортивно. ;)

На самом деле раньше я так и делал. У меня было отработано два алгоритма. Известный сайт Гисметео дает возможность скачивать XML-файл для региона. В нем масса данных, которые можно использовать. Но визуализировать их тяжело, так как в структуре данных заложено очень много погодных состояний. Это не просто облачно или ясно, у них есть облачно день, облачно ночь, облачно дождь, облачно сильный дождь, облачно гроза, облачно град, облачно снег и т.д. Иконок нужно делать несколько десятков. Поэтому я поступил проще - скачиваю уже готовую страницу с сайта с помощью wget, а потом perl-скриптом вырезаю только нужные мне данные, без рекламы и прочего. Да вот этот скрипт:



#!/usr/bin/perl

open (CUR, "< /root/weather.html");
open (CUR1, "> /var/www/weather.dat");
while(<CUR>)
{
        if ( /<table>/ ) { $Flag = 1; $_ = "<table border=1>"; }

        $_ =~ s/\r//g;

        if ( $Flag == 1 )
        {
                print CUR1 $_;
                if ( /</table>/ )
                {
                        close(CUR1);
                        close(CUR);
                        exit;
                }

        }
}



Скачивать нужно страницу "Погода по старому". Таким образом здесь есть все - и текущая погода и прогноз на 3 дня. Все иконки я предварительно скачал с этого же сайта, чтобы не рисовать самостоятельно. Естественно, данные в HTML использовать для аналитики затруднительно.
Но проблема заключается в том, что текущие данные, которые предоставляет Гисметео на самом деле практически никогда не совпадают с реальностью. Да, они похожи, но реальная температура, состояние атмосферы, облачность отличается. То есть использовать эти данные для управления системами нельзя. Кроме того, текущие данные обновляются редко, примерно раз в 3 часа. То есть фактически мы в любом случае имеем устаревшие в среднем на 1,5-2 часа данные. Возможно, Гисметео делает это умышленно. Кроме того, достаточно часто бывают моменты, когда данные по фактической погоде просто отсутствуют или же они не обновлялись более 12 часов. Более актуальные данные, вероятно, можно раздобыть на других сайтах, но всегда это зависимость от работы сайта, от работы Интернета, от провайдера и т.д.


2011-02-20 08:50:38 | Али
Готовый коробочный умный дом тоже поставить проще, но это не путь для энтузиастов :)
А если серьезно, то вот мысли в пользу метеостанции:
1) Температура и пр. На внешнем бесплатном сайте данные о погоде где вы живете вы получите типа "по области -23". А область эта может быть как две Франции. Да и для расчета климата нужно знать точную температуру за бортом. Продвинутые внешние контроллеры газовых котлов идут с датчиком наружнего воздуха.
2) Ветер. По немецкой теории энергоэффективного дома скорость и направление ветра важные параметры, так как если ваш дом не круглая башня без окон и дверей, то теплопотери при разном направлении ветра разные. Это можно в будующем учитывать.
А также пример из жизни. Мой сосед решил поставить ветряк. Местность у нас открытая, по ощущениям ветренная. Но парням из конторы по продажи ветряков для расчета экономической эффективности проекта наших ощущений мало. Из в программу надо вбить конкретную статистику. И чем она будет подробнее тем лучше. Так что сосед ждет сейчас накопления статистики по ветрам на моей метеостанции, чтобы принять обоснованное решение :)


2011-02-20 03:27:46 | Максим
А не проще ли брать данные о погоде с какого-либо внешнего сайта? И использовать их уже для умного дома.