[Модуль] OpenWeatherMap (openweather) Не актуально!

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Модуль - Погода от OpenWeatherMap

Сообщение serghei » Чт май 18, 2017 10:31 pm

ученик писал(а):.... Потом через андроид приложение даем голосовую команду скажи погоду и Алиса говорит погоду
Спасибо! С андроидом будет отдельная песня. На прошлой сборке МД от Adzam я делал сценарий " Алиса , расскажи о погоде " из видео уроков. На странице в чате видел сообщение от Алисы , но голоса не было. Попробую на новой версии.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex77
Сообщения: 215
Зарегистрирован: Вс мар 05, 2017 2:18 pm
Благодарил (а): 21 раз
Поблагодарили: 6 раз

Re: Модуль - Погода от OpenWeatherMap

Сообщение Alex77 » Чт май 18, 2017 10:52 pm

serghei писал(а):А для особо начинающего юзера ------ куда вставить этот код ?? )))) . ( Погода работает отлично. Алиса болтает без проблем.)
этот код если у вас нет функции chti тоже не заработает, автор ее вызывает для склонения правильного, надеюсь он даст эту функцию и скажет куда ее добавить.
За это сообщение автора Alex77 поблагодарил:
serghei (Чт май 18, 2017 11:22 pm)
Рейтинг: 1.16%
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Модуль - Погода от OpenWeatherMap

Сообщение directman66 » Пт май 19, 2017 8:09 am

также интересно, в каком места заполняется ow_fact.tempYesterday, можно конечно самому заполнять например в час дня через таймер, но может у автора есть более интересное решение.

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

if (timeIs("13:00")) { sg('ow_fact.tempYesterday',gg('ow_fact.temperature'));} 
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Модуль - Погода от OpenWeatherMap

Сообщение lanket » Пт май 19, 2017 9:42 am

directman66 писал(а):также интересно, в каком места заполняется ow_fact.tempYesterday, можно конечно самому заполнять например в час дня через таймер, но может у автора есть более интересное решение.

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

if (timeIs("13:00")) { sg('ow_fact.tempYesterday',gg('ow_fact.temperature'));} 
Модуль openwhether May её сам заполняет если он установлен

Отправлено с моего MI PAD 2 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Модуль - Погода от OpenWeatherMap

Сообщение directman66 » Пт май 19, 2017 11:25 am

lanket писал(а): Модуль openwhether May её сам заполняет если он установлен
Может есть какая-то настройка? У меня вообще отсутствовала эта переменная.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Модуль - Погода от OpenWeatherMap

Сообщение Dark_Veter » Пт май 19, 2017 11:36 am

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);
 
За это сообщение автора Dark_Veter поблагодарили (всего 4):
directman66 (Пт май 19, 2017 1:25 pm) • ipz (Пт май 19, 2017 7:55 pm) • Alex77 (Сб май 20, 2017 11:30 pm) • ferenir (Вт июн 06, 2017 3:02 pm)
Рейтинг: 4.65%
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Модуль - Погода от OpenWeatherMap

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

у нас есть объекты только
ow_city 
ow_day0 openweather
ow_day1 openweather
ow_day2 openweather
ow_fact openweather
ow_setting


нужно создавать метод у ow_fact ?

а также непонятно, как вызывать метод при изменении свойства?
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Модуль - Погода от OpenWeatherMap

Сообщение Dark_Veter » Пт май 19, 2017 1:43 pm

У меня есть объект openweather, а там уже вложенные объекты ow_city, ow_day0, ow_day1 ... ow_fact, ow_setting. По идее у вас должно быть так-же, модуль то один используется:). Надо в объекте openweather (это корневой объект) создать описанный выше метод ChangeTemp, затем там же создать свойство temperature, указав там опции хранить историю (например 7 дней) и Запускать метод при изменении (как раз созданный метод ChangeTemp)
За это сообщение автора Dark_Veter поблагодарил:
nick7zmail (Пт май 19, 2017 1:44 pm)
Рейтинг: 1.16%
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Модуль - Погода от OpenWeatherMap

Сообщение directman66 » Пт май 19, 2017 1:44 pm

openweather это класс )
За это сообщение автора directman66 поблагодарил:
Dark_Veter (Пт май 19, 2017 1:46 pm)
Рейтинг: 1.16%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Модуль - Погода от OpenWeatherMap

Сообщение Dark_Veter » Пт май 19, 2017 1:46 pm

Точно! сори за неверную информацию)
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Закрыто