Сделал интересный проект с использованием Majordomo, хотел бы поделиться со всеми. Вроде бы кто-то уже занимался подобным тут, но темы не нашел. Наверное многие видели проекты "умных зеркал" вроде этих:
Во всех случаях ребята пишут свои решения для управления этим зеркалом, но у нас же уже есть Majordomo, который позволяет все это сделать очень просто. Так случилось, что у меня в руках случайно оказался лишний телевизор, осталось только купить для него зеркало и создать соответствующую сцену.
Начну с зеркала. Как вы понимаете, зеркало нужно специальное, пропускающее через себя свет, но отражающее с другой стороны как обычное зеркало. Называется такая штука зеркалом Гезелла. Погуглил, обратился в zerkala.ru (Нагорная 17 в Москве), у них должны были такие быть https://zerkala.ru/izdeliya-iz-zerkal/gezella.html. Сразу скажу, что туда обращаться не советую, у них был вариант только с одним светопропусканием, но заказал я все равно там, сделали нужный мне размер (400x700), стоило 3 тыс. руб.
Со светопропусканием проблема следующая: если оно низкое, то зеркало хорошо работает как обычное, но плохо пропускает изображение с телевизора. Если оно высокое, то изображение с телевизора видно хорошо, но само зеркало отражает плохо. Планирую попробовать различные пленки с алиэкспресса, там есть разные светопропускания, у меня в светлое время изображение практически не читается.
Далее, моя малинка работает со стандартной сборкой Majordomo от Сергея, пришлось произвести некоторые манипуляции. Приведу их здесь все, чтобы такие же новички как я могли это все проделать самостоятельно.
Во-первых, в стандартной сборке отсутствует графический интерфейс, нам нужно его вернуть.
Код: Выделить всё
sudo apt update
sudo apt upgrade
sudo apt-get install lxde
Изменяем опции запуска, устанавливаем Chromium и перезагружаемся:
Код: Выделить всё
sudo raspi-config
boot options --desktop --desktop autologin
sudo apt install chromium-browser
sudo reboot
Почему-то у меня не получилось сразу установить нужную страницу в Chromium для автозагрузки, поэтому вносим ее вручную в настройках Chromium. У меня это ссылка на новую сцену, созданную специально для зеркала: http://192.168.1.145/popup/scenes/4.html.
Также возникла следующая проблема: страница открывается раньше, чем Majordomo полностью запускается, поэтому нужно либо сделать отложенный запуск Chromium, либо регулярно обновлять страницу. Я пошел по второму пути, тем более так будет удобнее производить манипуляции со сценой, особенно если нет отдельной клавиатуры для Raspberry (у меня ее нет, установил экранную клавиатуру через sudo apt-get install matchbox-keyboard). Для автообновления Chromium установил расширение Easy auto reload, его можно найти в маркете приложений. В расширении сразу выставьте необходимый период перезагрузки (удобно будет от 30 секунд до 2 минут). Это значение сохраняется, потом работает нормально.
Следующая проблема - курсор мыши, который выскакивает на сцене. В файл /etc/lightdm/lightdm.conf добавляем строчку
Код: Выделить всё
xserver-command = X -nocursor
Код: Выделить всё
sudo nano /boot/config.txt
Код: Выделить всё
sudo nano ~/.config/autostart/autoChromium.desktop
Код: Выделить всё
[Desktop Entry]
Type=Application
Exec=/usr/bin/chromium-browser --noerrdialogs --disable-session-crashed-bubble --disable-infobars --incognito --kiosk http://192.168.1.145/popup/scenes/4.html
Hidden=false
X-GNOME-Autostart-enabled=true
Name[en_US]=AutoChromium
Name=AutoChromium
Comment=Start Chromium when GNOME starts
Моя сцена выглядит следующим образом:
Дата, время, погода и пробки сверху
Курсы валют и температура малинки снизу
На всякий случай расскажу, как вставить эти данные на сцену. Все данные добавляются на сцену в виде элементов типа html. Время и дата берутся с помощью модуля Формат даты, код для вставки:
Код: Выделить всё
<div style="color:white; font-size:50px; margin: 28px; "> %ThisComputer.timeNow%</div>
<div style="color:white; font-size:22px;"> %ThisComputer.DayOfWeekTXT%, %ThisComputer.DayOfMonthNum% %ThisComputer.MonthTXTalt%</div>
Код: Выделить всё
<div style="color:white; font-size:25px;"> Пробки: %yt_info.level% балла <br>
%yt_info.val% </div>
Код: Выделить всё
<div style="color:white; font-size:25px; padding:10px;">Сейчас: %ow_fact.temperature% °C, %ow_fact.weather_type%, ветер %ow_day0.wind_speed% м/с</div><br/>
<div style="color:white; font-size:16px; padding:10px;">%ow_day0.date% %ow_day0.temperature% °C, %ow_day0.weather_type%, ветер %ow_day0.wind_speed% м/с <br/>
%ow_day1.date% %ow_day1.temperature% °C, %ow_day1.weather_type%, ветер %ow_day1.wind_speed% м/с <br/>
%ow_day2.date% %ow_day2.temperature% °C, %ow_day2.weather_type%, ветер %ow_day2.wind_speed% м/с <br/>
%ow_day3.date% %ow_day3.temperature% °C, %ow_day3.weather_type%, ветер %ow_day3.wind_speed% м/с <br/>
%ow_day4.date% %ow_day4.temperature% °C, %ow_day4.weather_type%, ветер %ow_day4.wind_speed% м/с<br/>
%ow_day5.date% %ow_day5.temperature% °C, %ow_day5.weather_type%, ветер %ow_day5.wind_speed% м/с </div>
Код: Выделить всё
<div style="color:white; font-size:25px; padding:10px;">1$ = %exchange_rate.dollarrur% ₽ <br>
1€ = %exchange_rate.eurorur% ₽ </div>
Код: Выделить всё
<div style="color:white; font-size:25px; padding:10px;"> %Sysdata.8%°C </div>
Ну и теперь то, как выглядит окончательная версия проекта (пока что никуда не повесил, лежит на полу, в отражении люстра):
Только знакомлюсь с Majordomo, информатика на школьном уровне, собирал все по крупицам, поэтому и очень доволен тем, что у меня получилось. Жду пожеланий и исправлений. К примеру, хотелось бы в прогнозе погоды убрать дату, оставить только время, но не знаю, как это сделать. На все вопросы отвечу.