Страница 40 из 55
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Чт май 18, 2017 10:31 pm
serghei
ученик писал(а):.... Потом через андроид приложение даем голосовую команду скажи погоду и Алиса говорит погоду
Спасибо! С андроидом будет отдельная песня. На прошлой сборке МД от
Adzam я делал сценарий " Алиса , расскажи о погоде " из видео уроков. На странице в чате видел сообщение от Алисы , но голоса не было. Попробую на новой версии.
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Чт май 18, 2017 10:52 pm
Alex77
serghei писал(а):А для особо начинающего юзера ------ куда вставить этот код ?? )))) . ( Погода работает отлично. Алиса болтает без проблем.)
этот код если у вас нет функции chti тоже не заработает, автор ее вызывает для склонения правильного, надеюсь он даст эту функцию и скажет куда ее добавить.
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Пт май 19, 2017 8:09 am
directman66
также интересно, в каком места заполняется ow_fact.tempYesterday, можно конечно самому заполнять например в час дня через таймер, но может у автора есть более интересное решение.
Код: Выделить всё
if (timeIs("13:00")) { sg('ow_fact.tempYesterday',gg('ow_fact.temperature'));}
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Пт май 19, 2017 9:42 am
lanket
directman66 писал(а):также интересно, в каком места заполняется ow_fact.tempYesterday, можно конечно самому заполнять например в час дня через таймер, но может у автора есть более интересное решение.
Код: Выделить всё
if (timeIs("13:00")) { sg('ow_fact.tempYesterday',gg('ow_fact.temperature'));}
Модуль openwhether May её сам заполняет если он установлен
Отправлено с моего MI PAD 2 через Tapatalk
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Пт май 19, 2017 11:25 am
directman66
lanket писал(а):
Модуль openwhether May её сам заполняет если он установлен
Может есть какая-то настройка? У меня вообще отсутствовала эта переменная.
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Пт май 19, 2017 11:36 am
Dark_Veter
Alex77 писал(а):Скажите а как и куда добавить chti функцию?
и как вы получили ow_fact.realFell такого свойства у меня нет в стандартном компоненте
directman66 писал(а):также интересно, в каком места заполняется ow_fact.tempYesterday, можно конечно самому заполнять например в час дня через таймер, но может у автора есть более интересное решение.
Код: Выделить всё
if (timeIs("13:00")) { sg('ow_fact.tempYesterday',gg('ow_fact.temperature'));}
Функцию chti можно положить например в lib/my.class.php или lib/myuserfunction.php, тогда ее можно будет использовать в любом месте системы.
Вот сама функция:
Код: Выделить всё
// Склонение числительных
// string - само число
// ch1 - час, день, год, месяц
// ch2 - часа, дня, года, месяца
// ch3 - часов, дней, лет, месяцев
function chti($string, $ch1, $ch2, $ch3)
{
$ff=Array('0','1','2','3','4','5','6','7','8','9');
if(substr($string,-2, 1)==1 AND strlen($string)>1) $ry=array("0 $ch3","1 $ch3","2 $ch3","3 $ch3" ,"4 $ch3","5 $ch3","6 $ch3","7 $ch3","8 $ch3","9 $ch3");
else $ry=array("0 $ch3","1 $ch1","2 $ch2","3 $ch2","4 $ch2","5 $ch3","6 $ch3","7 $ch3","8 $ch3","9 $ch3");
$string1=substr($string,0,-1).str_replace($ff, $ry, substr($string,-1,1));
return $string1;
}
ow_fact.realFell и ow_fact.tempYesterday заполняются следующим образом:
у объекта openweather создан метод ChangeTemp, который вызывается при изменении свойства temperature, так же надо не забыть у свойства temperature выставить настройку хранить историю.
Код метода ChangeTemp:
Код: Выделить всё
$tempYesterday = getHistoryValue("ow_fact.temperature", strtotime("-1 day"), true);
sg("ow_fact.tempYesterday", $tempYesterday);
//Расчет температуры "По ощущениям"
$t = gg('ow_fact.temperature'); // температура на улице
$h = gg('ow_fact.humidity'); // влажность на улице %
$w = gg('ow_fact.wind_speed'); // данные о ветре из прогноза OpenWeather m/s
$w = $w*3.6/1.609;//m/s -> mph
$tF = $t *1.8+32; // перевод температуры в Farenheit
if ($t > 26.6) { // Считаем HeatIndex по Rothfusz
$_f = -42.379 + 2.04901523*$tF + 10.14333127*$h - 0.22475541*$tF*$h - 0.00683783*$tF*$tF - 0.05481717*$h*$h + 0.00122874*$tF*$tF*$h + 0.00085282*$tF*$h*$h -0.00000199*$tF*$tF*$h*$h;
if(($tF < 112) && ( $h<13 )) { // If the RH is less than 13% and the temperature is between 80 and 112 degrees F, then the following adjustment is subtracted from HI:
$_f = $_f-((13-$h)/4)*sqrt((17-abs($tF-95.))/17);
}
if(($tF < 88) && ($h > 85)) { // On the other hand, if the RH is greater than 85% and the temperature is between 80 and 87 degrees F, then the following adjustment is added to HI:
$_f = $_f + (($h - 85) / 10) * ((87 - $tF) / 5); //ADJUSTMENT = [(RH-85)/10] * [(87-T)/5]
}
} else if ($t <= 10) { // Считаем фактор WindChild
$_f = 35.74 + (0.6215 * $tF) - (35.75 * pow($w, 0.16)) + ((0.4275 * $tF) * pow($w, 0.16));
} else { //считаем по упрощенной формуле
$_f = 0.5*($tF+61+(($tF-68)*1.2)+($h*0.094));
}
// переводим в цельсии
$rf = round(($_f-32)/1.8,1);
sg("ow_fact.realFell", $rf);
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Пт май 19, 2017 1:29 pm
directman66
у нас есть объекты только
ow_city
ow_day0 openweather
ow_day1 openweather
ow_day2 openweather
ow_fact openweather
ow_setting
нужно создавать метод у ow_fact ?
а также непонятно, как вызывать метод при изменении свойства?
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Пт май 19, 2017 1:43 pm
Dark_Veter
У меня есть объект openweather, а там уже вложенные объекты ow_city, ow_day0, ow_day1 ... ow_fact, ow_setting. По идее у вас должно быть так-же, модуль то один используется:). Надо в объекте openweather (это корневой объект) создать описанный выше метод ChangeTemp, затем там же создать свойство temperature, указав там опции хранить историю (например 7 дней) и Запускать метод при изменении (как раз созданный метод ChangeTemp)
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Пт май 19, 2017 1:44 pm
directman66
openweather это класс )
Re: Модуль - Погода от OpenWeatherMap
Добавлено: Пт май 19, 2017 1:46 pm
Dark_Veter
Точно! сори за неверную информацию)