Как отобразить погоду в MajorDoMo

Posted by

Данной заметкой я хочу разобрать различно просмотренные видео по настройке , а также задокументировать все действия с учетом своего опыта и наработок. Может так случиться что все описанное здесь может не сработать у Вас. Это возможно, но у меня оно работает. Я подстраховался только с одного края, один раз я скачал репозитарий проекта MajorDoMo, разобрал на нем все что мне интересно было и забекапил, а после сделал образ всех настроек и если мне нужно что-то обкатать то я обкатываю на развернутом из бекапа образе настроек. Т.к проект MajorDoMo постоянно дописывается и если не сведущ в программирование то чтобы понять почему одно перестало работать сложно.

Предварительные действия, за основу можно взять серию Youtube-роликов подготовки миникомпьютера к использованию проекта MajorDoMo.

Задача: Как вывести в MajorDoMo текущую погоду за окном для своего города.

Далее, устанавливаю модуль «Open Weather»:

http://IP&DNS — Панель управления — (Система) Маркет дополнений — вкладка «Информация» отмечаю модуль: Open Weather и нажимаю «Добавить»

Устанавливаю модуль Open Weather

на момент проверки данной заметки значится последним обновлением дата: 2017-09-19 21:41:48 (Merge pull request #5 from Gelezako/patch-1)

На заметку: местонахождение всех устанавливаемых модулей в системе MajorDoMo в файловой системе:

pi@raspberrypi:~ $ ls /var/www/modules/

application.class.php control_modules linkedobject properties soundfiles

app_mediabrowser dashboard locations pvalues system_errors

app_openweather dateselect market saverestore terminals

app_player devices

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

Затем переходим в появившееся приложение:

http://IP&DNS — Панель управления — (Приложения) «Погода от OpenWeatherMap», по умолчанию я во вкладке «Погода» где нужно указать страну в которой я нахожусь и город.

На заметку: Работает поиск по первой букве в ниспадающем списке стран и городов.

  • Выбрать страну: Russian
  • Выбрать город: Balashiha (55.809448|37.958061) также присутствует в списке.

После нажимаю «Сохранить». Затем меня автоматически перебрасывает на вкладку «Настройки», но прежде чем заполнить настройки следует получить ключ API на сайте openweathermap.org (во вкладке API Keys) сделав регистрацию и в личном кабинете скопировать присвоенный ключ и вставить его ниже в соответствующие поля вкладке «Настройки»:

  • Имя города: Balashikha
  • Использовать кешированные иконки: Да
  • Прогноз погоды: ставлю на 3 дня
  • Период обновления: ставлю каждый час
  • После обновления выполнить сценарий: пока пропускаю, но здесь указывается имя сценария
  • Ключ API: d12caf25e5524c54e87db20fa88ef2b0

и нажимаю «Сохранить», тем самым снова оказываюсь на вкладке «Погода» где будет отображена текущая погода (Сейчас) и погода на заданное количество дней:

Отображение текущей погоды в указанном городе через сервис openweathermap.org

 

Чтобы текущая погода выводилась на главной странице, нужно из вкладки «Помощь» скопировать один из вариантов вызова модулю, т.е

  • [#module
    name="app_openweather"#] - вывод сведений о текущей погоде
  • [#module
    name="app_openweather" forecast="0"#] - вывод сведений о текущей погоде и прогнозе на сегодня
  • [#module
    name="app_openweather" fact="off"
    forecast="1"#] - прогноз погоды на сегодня и завтра
    forecast="0" - прогноз погоды на сегодня
    forecast="1" - прогноз погоды на сегодня и завтра
    forecast="2" - прогноз погоды на сегодня, завтра и послезавтра

мне подходит второй вариант, а значит копирую эту строку и:

http://IP&DNS — Панель управления — (Объекты) Меню управления — Добавить новый раздел:

  • Родительский пункт меню: ROOT
  • Название: Погода в Балашихе
  • Приоритет: 20000 (Высота, чем выше значение тем выше данное меню будет на странице)
  • Тип: HTML-блок
  • Период автообновления: 3600 (секунд)

и нажимаю «Добавить», затем вставляю строку из буфера что хочу видеть на главной странице:

  • Данные: [#module name="app_openweather" forecast="0"#]

и нажимаю «Сохранить». Затем открываю главную страницу через щелчок левой кнопкой мыши по «Домику» в левом верхнем углу страницы и вижу, что мне и нужно было.

Вывод погоды на главной странице сервиса MajorDoMo

Вот как бы и все.

На заметку: местонахождение изображений/иконок модуля «openweather» располагается здесь:

pi@raspberrypi:~ $ ls /var/www/cached/openweather/image/

01d.png 03d.png 10d.png

и их также можно изменить под себя.

А как сделать чтобы вот эти объекты в выводе использовать в другом месте? Смотрю свои объекты: http://IP&DNS — Панель управления — (Объекты) Объекты и вижу что у меня есть класс openweather и внутри него объекты (ow_city,ow_day0,ow_day1,ow_da2,ow_fact,ow_setting) созданные при установке модуля, о да это как раз мне и нужно было, а внутри каждого объекта есть свойства, к примеру: ow_city.id,ow_city.name,ow_city.lat,ow_city.lon,ow_city.data_update

Итого напрашивается задача:

Как сделать чтобы «Алиса» при запросе: — Расскажи о погоде?, произвела запрос к переменным класса:

http://IP&DNS — Панель управления — (Объекты) Шаблоны поведения — Добавить новую запись:

  • Название: Погода голосом

Нажимаю «Добавить», затем в данной записи дополняю настройки

  • Шаблон: Расскажи о погоде
  • Код (PHP)

код лежит у меня tips_majordomo_weather_v1.php.tar

А после нажимаю «Сохранить».

Пишу в консоль «Алисы» — «Расскажи о погоде» и на выходе получаю произнесенные:

14:41 Алиса: Ветер сильный.
14:41 Алиса: Атмосферное давление нормальное.
14:41 Алиса: Относительная влажность 72 процента.
14:41 Алиса: Температура 19.5 градусов цельсия
14:41 Алиса: Сегодня ясно.
14:41 Admin: Расскажи о погоде

и все это голосом через модуль RHVoice, так же используя этот код можно допустим сделать так:

$status.="Сегодня ".gg("ow_fact.weather_type").".";

say($status,1);

и в ответ будет сказано и выведено на консоль:

14:45 Алиса: Сегодня ясно.
14:45 Admin: Расскажи о погоде

Итого задача решена, главное если не знаешь как писать код на PHP найти что-то подобное и уже изменить. А после не забыть задокументировать настройки чтобы в случае чего восстановить.

После на забываю сделать бекап модуля:

pi@raspberrypi:~ $ tar -zPcf openweather_$(date +%d-%m-%Y_%H_%M-%S).tar.gz /var/www/modules/app_openweather/

pi@raspberrypi:~ $ dir -sh openweather_07-11-2017_15_13-35.tar.gz

8.0K openweather_07-11-2017_15_13-35.tar.gz

Что еще, если у Вас на смартфоне стоит приложение MajorDroid и настроено подключение к MajorDoMo, то перейдя на иконку «Микрофона» и сказав «Расскажи о погоде», данная ключевая фраза отработает и Алиса с учетом шаблона поведения отработает код.

На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.