Надыхнули статьи
https://majordomo.smartliving.ru/forum/viewtopic.php?t=4674
даже есть готовое решение как отдельное устройство...
https://github.com/AlexGyver/WeatherPredict
Создаем скрипт в меню сценарии и ставим его на исполнение каждые 10 минут средством cron
https://kb.smartliving.ru/cron_help/?utm_source=sy...
//предсказатель погоды v0.1 beta
$sensor = 'Sensor_tempPressure01.valuePressure';
// прописываем свой датчик атмосферного давления
// показания должны быть в ммРтутногостолба как минимум 2 знака после запятой к примеру (740,34)
// и обязательно отдающий данные в реальном режиме времени!
//$sensor = 'ow_fact.pressure_mmhg'; НЕ ИСПОЛЬЗОВАТЬ!!! сори за капс)
$period = 3*60*60;
//$history=getHistoryAvg($sensor, time()-$period, time());
$history = getHistory($sensor, time()-$period, time());
$sumX = 0;
$sumY = 0;
$sumX2 = 0;
$sumXY = 0;
$i = 0;//а это надо?
foreach($history as $h_part){
$pres = $h_part['VALUE'];//паскали нафиг не нужны, точно
$sumX += time() - strtotime($h_part['ADDED']);
$sumY += $pres;
$sumX2 += (time() - strtotime($h_part['ADDED'])) * (time()-strtotime($h_part['ADDED']));
$sumXY += (time() - strtotime($h_part['ADDED'])) * $pres;
$i++;//а это надо?
}
//unset($h_part);//а это надо?
$a = 0;//а это надо?
$a = $i*$sumXY; // расчёт коэффициента наклона прямой и $i надо, но все ли верно?
$a = $a-$sumX*$sumY;
$a = $a/($i*$sumX2-$sumX*$sumY);
$dt = -$a * $i;// расчёт изменения давления, эээм минус не лишний
$dt = (($dt)*100000)/9; // калибровка, нужна доводка...
$dt =round($dt);
//print_r($dt);
sg('Predictor.DT',$dt); // запись в базу значений для предсказателя
//file_put_contents('./cms/texts/predictorPressure.txt', date('Y-m-d H:i:s') . ' ' . $dt . PHP_EOL, FILE_APPEND); // для отладки - пишем данные в файл
/*
if($dt<-250) {
say('Апокалипсис не за горами. Дельта'.$dt);
} elseif ($dt<-150) {
say('Ожидается резкое ухудшение погоды. Значение дельты '.$dt);
} elseif ($dt<-50) {
say('Ожидается ухудшение погоды. Значение дельты '.$dt);
} elseif ($dt>50) {
say('Ожидается улучшение погоды. Значение дельты '.$dt);
} elseif ($dt>150) {
say('Ожидается резкое улучшение погоды. Значение дельты '.$dt);
} elseif ($dt>250) {
say('Апокалипсис не за горами. Дельта '.$dt);
}
/*
Создаем в меню управления HTML блок
<html>
<head>
<script src="/js/canvas-gauges/gauge.min.js"></script>
</head>
<body>
<center>
<canvas data-type="radial-gauge"
data-width="200"
data-height="200"
data-units="Осадки | Солнечно"
data-title="Предсказатель погоды"
data-value=%Predictor.DT%
data-min-value="-500"
data-max-value="500"
data-major-ticks="[-500,-450,-400,-350,-300,-250,-200,-150,-100,-50,0,50,100,150,200,250,300,350,400,450,500]"
data-minor-ticks="2"
data-stroke-ticks="true"
data-animation-rule="elastic"
data-animation-duration="500"
data-highlights='[
{"from": -100, "to": 0, "color": "rgba(78, 187, 48, 1)"},
{"from": -300, "to": -100, "color": "rgba(229, 210, 6, 1)"},
{"from": 100, "to": 300, "color": "rgba(229, 210, 6, 1)"},
{"from": -500, "to": -300, "color": "rgba(229, 6, 6, 1)"},
{"from": 300, "to": 500, "color": "rgba(229, 6, 6, 1)"},
{"from": 0, "to": 100, "color": "rgba(78, 187, 48, 1)"}
]'
data-ticks-angle="225"
data-start-angle="67.5"
data-border-shadow-width="0"
data-borders="true"
data-needle-type="arrow"
data-needle-width="3"
data-needle-circle-size="7"
data-needle-circle-outer="true"
data-needle-circle-inner="false"
data-animation-duration="1500"
data-animation-rule="linear"
data-value-box-border-radius="2"
data-font-value="Led"
data-font-numbers="Led"
data-font-title="Led"
data-font-units="Led"
></canvas>
</center>
</body>
</html>
Ставим компонент виджета
(canvas-gauges) https://github.com/Mikhus/canvas-gauges
в папку /www/js/canvas-gauges
а именно файл gauge.min.js
В результате имеем информативный виджет
18.09.2018 Прековырял код, получил следующее) показания датчика берем челым числом (в паскалях) к примеру 978...1024 - запускаем в кроне скрипт каждую минуту
//предсказатель погоды v0.1 beta
$sensor = 'Sensor_tempPressureHum01.valuePressure';
$period = 600*6;
$history = getHistory($sensor, time()-$period, time());
$sumX = 0;
$sumY = 0;
$sumX2 = 0;
$sumXY = 0;
foreach($history as $h_part){
$pres = $h_part['VALUE'];
$sumX += time() - strtotime($h_part['ADDED']);
$sumY += $pres;
$sumX2 += (time() - strtotime($h_part['ADDED'])) * (time()-strtotime($h_part['ADDED']));
$sumXY += (time() - strtotime($h_part['ADDED'])) * $pres;
}
$a = 0;
$a = 6*$sumXY;
$a = $a-$sumX*$sumY;
$a = -$a/(6*$sumX2-$sumX*$sumY);
$dt = $a*6;
//$dt = $dt;
sg('Predictor.DT',$dt);
Berezhany, Украина
На форуме: lyova