Локальный прогноз погоды

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

Ответить
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 694 раза
Контактная информация:

Локальный прогноз погоды

Сообщение directman66 » Пн май 29, 2017 6:17 pm

Никто ещё не писал прогнозировщик погоды на основе данных метеостанции? Давления, влажности, температуры???

Отправлено с моего Redmi Note 3 через Tapatalk
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
eygen
Сообщения: 393
Зарегистрирован: Чт сен 25, 2014 5:37 pm
Откуда: Екатеринбург
Благодарил (а): 25 раз
Поблагодарили: 52 раза

Re: Локальный прогноз погоды

Сообщение eygen » Пн май 29, 2017 7:49 pm

По точнее идею изложи.
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 694 раза
Контактная информация:

Re: Локальный прогноз погоды

Сообщение directman66 » Пн май 29, 2017 8:29 pm

Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 694 раза
Контактная информация:

Re: Локальный прогноз погоды

Сообщение directman66 » Пн май 29, 2017 9:35 pm

пока нагородил такой огород, собираю статистику
СпойлерПоказать
header("Content-Type: text/plain; charset=utf-8");

$curtemp=gg('all_in_one.zaoknomtemp');
$curhum=gg('all_in_one.zaoknomhum');
$curpress=gg('onesensor.pressure');

//среднее значение давления за месяц
$ti= '-4 day';
//$ti= "-1 day";
$avgpress=getHistoryAvg('onesensor.pressure',strtotime($ti));
//$avgpress=getHistoryAvg('all_in_one.zaoknomtemp',strtotime($ti));

$month=date('m');

//определям времена года
$vrgoda="zima";
if ($month>='03' and $month<'06') {$vrgoda="vesna";}
if ($month>='06' and $month<'09') {$vrgoda="leto";}
if ($month>='09' and $month<'12') {$vrgoda="osen";}

// определяем трэнд давления
$press1=getHistoryAvg('onesensor.pressure', strtotime("-1 hour"));
$press2=getHistoryAvg('onesensor.pressure',"-2 hour" ,"-1 hour");
$press3=getHistoryAvg('onesensor.pressure',"-3 hour" ,"-2 hour");
$press4=getHistoryAvg('onesensor.pressure',"-4 hour" ,"-3 hour");
$delta=10;
$ca=$curpress-$avgpress;
$ac=$avgpress-$curpress;

$pressvid="среднее";
if ($ca>$delta) {$pressvid='высокое';}
if ($ac<-$delta) {$pressvid="низкое";}




echo $month,PHP_EOL;
echo '$ti:'.$ti,PHP_EOL;
echo '$vrgoda:'.$vrgoda,PHP_EOL;
echo '$curtemp:'.$curtemp,PHP_EOL;
echo '$curhum:'.$curhum,PHP_EOL;
echo '$curpress:'.$curpress,PHP_EOL;
echo '$avgpress:'.$avgpress,PHP_EOL;
echo '$press1:'.$press1,PHP_EOL;
echo '$press2:'.$press2,PHP_EOL;
echo '$press3:'.$press3,PHP_EOL;
echo '$press4:'.$press4,PHP_EOL;
echo '$ca:'.$ca,PHP_EOL;
echo '$ac:'.$ac,PHP_EOL;
echo '$pressvid:'.$pressvid,PHP_EOL;



if ($vrgoda="vesna") {echo "vesna";}

sg('trand.forecast', 'ясно');
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
C_3AXAPOB
Сообщения: 510
Зарегистрирован: Ср июн 08, 2016 4:17 pm
Благодарил (а): 124 раза
Поблагодарили: 101 раз

Re: Локальный прогноз погоды

Сообщение C_3AXAPOB » Пн май 29, 2017 11:16 pm

Есть такая вещь называется предсказатель Замбретти

"Наиболее часто в бытовых приборах и метеостанциях используется алгоритм, который называется "предсказатель Zambretti". Этот алгоритм в простейшем виде использует всего три параметра: текущее атмосферное давление, тенденция изменения давления и направление ветра. Алгоритм был разработан в начале 20 века в Европе на основе большого количества эмпирических наблюдений и данных. Тем не менее, несмотря на свою "бородатость" и простоту, методика Zambretti дает правильный результат более чем в 90% случаях (у буржуев, разумеется)."

Тут подробно с реализацией на пэхапэ http://ab-log.ru/smart-house/weather-station/forecast
За это сообщение автора C_3AXAPOB поблагодарил:
directman66 (Вт май 30, 2017 1:34 pm)
Рейтинг: 1.16%
Orange pi pc plus, megaD-2561, Xiaomi
--------------------------------------------------
http://connect.smartliving.ru/profile/908
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Локальный прогноз погоды

Сообщение xor » Пн май 29, 2017 11:59 pm

Если у вас метеостанция и вы пользуетесь программой cumulus, там есть встроенный прогноз по Замбретти. Довольно часто попадает в точку с теперешними погодами.
Я добавил передачу в Мажордомо передачу этого прогноза, доработав скрипт cumulus.php.
cumulus_my.phpПоказать

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

<?php

chdir('../');

include_once("./config.php");
include_once("./lib/loader.php");

// connecting to database
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);

include_once("./load_settings.php");

$res = '';

//default days to keep data
const DAYS_TO_HISTORY_KEEP = 7;

$known_fields = array(
                  'tempOutside'          => 2,
                  'relHumOutside'        => 3,
                  'dewPoint'             => 4,
                  'windLatest'           => 6,
                  'windBearing'          => 7,
                  'windavgbearing'       => 46,
                  'windAverage'          => 5,
                  'rainfallRate'         => 8,
                  'rainfallHour'         => 47,
                  'rainfall24'           => 9,
                  'pressure'             => 10,
                  'pressureRt'           => -1,
                  'pressureTrend'        => 18,
                  'windDirection'        => 11,
                  'windDirectionAverage' => 51,
                  'tempInside'           => 22,
                  'relHumInside'         => 23,
                  'updatedTime'          => 1,
                  'updatedDate'          => 0,
                  'sensorContactLost'    => 50,
                  'forecastNumber'       => 48,
                );

$data  = explode(' ', $_POST['data']);
$total = count($data);

for ($i = 0; $i < $total; $i++)
{
   $res .= 'data[' . $i . '] = ' . $data[$i] . "\n";
}

//DebMes('cumulus data: '.$res);
$obj = getObject('ws');

if (!$obj)
{
   $rec = array();
   $rec['TITLE'] = 'ws';
   $rec['ID']    = SQLInsert('objects', $rec);
   
   $obj = getObject('ws');
}

$sqlQuery = "SELECT * 
               FROM objects 
              WHERE ID = '" . $obj->id . "'";

$object_rec = SQLSelectOne($sqlQuery);

if (!$object_rec['CLASS_ID'])
{
   $class_rec = array();
   $class_rec['TITLE']       = 'WeatherStations';
   $class_rec['SUB_LIST']    = 0;
   $class_rec['PARENT_LIST'] = 0;
   $class_rec['ID']          = SQLInsert('classes', $class_rec);
   $object_rec['CLASS_ID']   = $class_rec['ID'];
   
   SQLUpdate('objects', $object_rec);
}

foreach ($known_fields as $k => $v)
{
   $sqlQuery = "SELECT * 
                  FROM properties 
                 WHERE TITLE LIKE '" . DBSafe($k) . "' 
                   AND CLASS_ID = '" . $object_rec['CLASS_ID'] . "'";
   
   $prop_rec = SQLSelectOne($sqlQuery);
   
   if (!$prop_rec['ID'])
   {
      $prop_rec['CLASS_ID']     = $object_rec['CLASS_ID'];
      $prop_rec['TITLE']        = $k;
      $prop_rec['KEEP_HISTORY'] = DAYS_TO_HISTORY_KEEP;
      $prop_rec['ID']           = SQLInsert('properties', $prop_rec);
   }
}

$res = '';

$updated = array();

$latest_update=gg('ws.updatedTimestamp');

foreach ($known_fields as $k => $v)
{
   if ($v < 0)
      continue;
   
   $res .= $k . ' = ' . $data[(int)$v] . "\n";
   $old_value = getGlobal('ws.' . $k);
   
   if ($old_value != $data[(int)$v] || ((time()-$latest_update)>30*60))
   {
      $updated[$k] = 1;
      setGlobal('ws.' . $k, $data[(int)$v]);
   }
}

if ($updated['pressure'])
{
   setGlobal('ws.pressureRt', round((((float)getGlobal('ws.pressure'))/1.33322)-0.3,1));
}
if ($updated['forecastNumber'])
{
   if(gg('ws.tempoutside')>2){
         $zumber=array(
         "Неопределенная", 
         "Отличная, ясно", 
         "Хорошая, ясно", 
         "Становление хорошей, ясной", 
         "Хорошая, но ухудшается", 
         "Хорошая, возможен ливень", 
         "Достаточно хорошая, улучшается", 
         "Достаточно хорошая, возможен ливень", 
         "Достаточно хорошая, но ожидается ливень", 
         "Ливень, но улучшается", 
         "Переменчивая, но улучшается", 
         "Достаточно хорошая, вероятны ливни", 
         "Пасмурно, но проясняется", 
         "Пасмурно, возможно улучшение", 
         "Ливни, возможны временные прояснения", 
         "Ливни, становится менее устойчивой", 
         "Переменчивая, небольшие дожди", 
         "Пасмурная, короткие прояснения", 
         "Пасмурная, ожидаются дожди", 
         "Пасмурная, временами дожди", 
         "Преимущественно очень пасмурная", 
         "Временами дожди, ухудшение", 
         "Временами дожди, очень плохая, пасмурно", 
         "Дожди очень часто", 
         "Дожди, очень плохая, пасмурно", 
         "Штормовая, но улучшается", 
         "Штормовая!, дожди");
   }else{
         $zumber=array(
         "Неопределенная",
         "Отличная, ясно", 
         "Хорошая, ясно", 
         "Становление хорошей, ясной", 
         "Хорошая, но ухудшается", 
         "Хорошая, возможен снегопад", 
         "Достаточно хорошая, улучшается", 
         "Достаточно хорошая, возможен снегопад", 
         "Достаточно хорошая, но ожидается снегопад", 
         "Снегопад, но улучшается", 
         "Переменчивая, но улучшается", 
         "Достаточно хорошая, вероятен снегопад", 
         "Пасмурно, но проясняется", 
         "Пасмурно, возможно улучшение", 
         "Снегопады, возможны временные прояснения", 
         "Снегопады, становится менее устойчивой", 
         "Переменчивая, небольшой снег", 
         "Пасмурная, короткие прояснения", 
         "Пасмурная, ожидается снег", 
         "Пасмурная, временами снег", 
         "Преимущественно очень пасмурная", 
         "Временами снег, ухудшение", 
         "Временами снег, очень плохая, пасмурно", 
         "Снег очень часто", 
         "Снег, очень плохая, пасмурно", 
         "Штормовая, но улучшается", 
         "Штормовая!, снегопад");
   }
    setGlobal('ws.forecast', $zumber[gg('ws.forecastNumber')]);
}
echo "OK";

$db->Disconnect(); // closing database connection  
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Локальный прогноз погоды

Сообщение lanket » Вт май 30, 2017 10:09 am

Немного о прогнозах в целом.

Так как я увлекаюсь ветрозависимым видом спорта я про прогноз погоды знаю достаточно много. Особенно про капризный ветер.

Бородатый и проверенный способ по Замбретти это хорошо в среднестатистической массе. Тобиш если вы там.

Утрирываю:
В горах прогноз смотреть бесполезно, там погода может меняться радикально каждые 4 часа.
Если вы в городе поведение погоды будет сильно отличаться от поведения в сельской местности. За счёт выделения тепла транспортом и прогретым асфальтом. Те-же многоэтажном застройки образующие тоннели сильно меняют микроклимат.
Прогноз в сельской местности на возвышенности будет отличаться от сельской на впадене хоть и расстояние между ними к примеру 100 км.

К чему это я?

Заибретти удобно за не именем альтернативы и отсутствием отягчающих обстоятельств в виде близости гор, города, впадины или возвышенности, большого озера, море океана. Ну и если интернета нету.

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

Существует на данный момент 3 признанных и используемых в крупных метеокомпаниях алгоритма вычисления прогноза погоды. И смысл менять что то более проффесиональное на упрощенное не вижу.


По своему опыту ловца ветра могу сказать что прогноз на 3 день уже 70% вероятности, на неделю 40%. Цифры приведены интуитивно.

Для более любопытных посмотрите и побалуйтесь сервисом узконаправленным и более проффесьным в области погоды. Там же есть и api, там можно настроить точку прогноза погоды в любом месте мира, хоть во дворе своего дома. Для более точного прогноза там ещё можно вносить корректировочные данные. Обычно это отягчающие обстоятельства описанные мною выше. Заметьте прогноза погоды более недели там нет, так как это бессмысленно.

Ни разу не реклама :

http://www.windguru.cz

Маленькое но:
Бесплатно там прогноз с трехдевней задержкой. Но даже с такой задержкой он точнее всяких альтернатив.

Отправлено с моего Redmi Note 3 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Ответить