Маска Конструктора. Захар Зарипов. Краткий сюжет: выживание горстки людей закинутых для колонизации Марса. Оценка 3/5. Начало хорошее, а дальше скучно. Не дочитал.
Цикл Низший. Михайлов Р.А. Краткий сюжет и идея: после экологической катастрофы люди переселились в искусственно созданные убежища под управлением «Системы». Большая часть людей там находится в «замороженном» виде и со стертой памятью. Во время «естественной» убыли населения, «замороженные» размораживаются, и подселяются к текущему населению. Так было последние лет 300, пока не разморозили ОДИ. Оценка 5/5. P.S. Перечитываю этот цикл уже раз третий наверное..
Цикл Инфер. Михайлов Р.А. Продолжение цикла «Низший». ОДИ удалось сбежать. Теперь он «наверху». Оценка 3/5. Дочитал, но уже с трудом. Или приелось или автор таки поисписался на эту тему..
Голова на колесиках. Шенгельц Игорь Александрович. Сюжет: богатенький буратино после того как попал в аварию, в надежде на то что в будущем его смогут вылечить, замораживает себя. Однако после разморозки «всё пошло не так». Будущее..выглядит совсем по другому. Голову приделывают на платформу с колесиками, дают в манипуляторы швабру и веник и вперед — ты теперь уборщик помещений, выживай. Оценка 5/5
Цикл «Идеальный мир социопата». Очередное пришествие системы и зомби. Путешествие между мирами. В целом интересно. Оценка 4/5
Цикл «Звезды,пламя и сталь». Сюжет: в далеком будущем в мире осталось всё так-же: войны, и дети в детдомах. Один из воспитанников этого детдома смог заполучить себе нейросеть Джоре. В обем мир из «вселенной EVE». В целом читабельно 4/5
Детское:
Увы, детского читаю всё меньше и меньше. Старшему уже ничего не нужно на ночь читать давно. Младшая тоже уже без энтузизазма воспринимает чтение. Жаль, очень жаль..
Всё о медвежонке Паддингтоне: оценка 3/5, как по мне скучновато. Не дочитали
Заячьи Лапки. К. Паустовский. Оценка 3/5. Слог уже подустарел, ребенку не очень многое понятно. Приходится объяснять
Фома — белый медвежонок. Вера Чаплина. Оценка 3/5.
Логическое продолжение Части 1, 2,3. Итак, научился принимать данные от zigbee устройств на стик Zigbee2Mqtt и на Алису. Да вот беда, одновременно и там и там данные от одного устройства штатными средствами не получить. А только на Алису завязывать все устройства бы не хотелось, так как:
сценарии ограничены только поддерживаемым Алисой оборудованием. Например мои WiFi реле Sonoff DIY 3 которые я использую на батареях Алисой естественно не поддерживаются .
Нет интернета — нет «умного» дома
Потому и возникла задача перебросить некоторые устройства которые есть на стике на Алису. Например датчик температуры. И в принципе штатное решение есть от самого Яндекса. Правда они выбрали весьма трудоёмкое для этого способа решение: необходимо создать виртуальное устройство, написать для него API и подключить в качестве стороннего навыка «Умный дом». Т.е. схема взаимодействия вырисовывается такая:
Для этого переходим по ссылке https://dialogs.yandex.ru/developer/smart-home и создаём новый навык.
Важно! Тип доступа сделать приватным, тогда модерация будет «мгновенной», ну и собственно навык не будет доступен никому кроме вас.
После заполнения основных данных, далее необходимо создать приложение https://oauth.yandex.ru/ с типом платформы WEB:
Так вы получите необходимые для дальнейшей настройки навыка ClientID и Client secret, которые необходимо будет прописать в навыке на странице «Связка аккаунтов»:
Кроме того необходимо прописать эндпоинты которые будут отвечать за авторизацию навыка на вашем сервере, обновление и получение токенов.
API виртуального устройства
Ну собственно на стороне сервера необходимо создать эндпоинты, которые сначала авторизуют навык, а затем отдадут данные «виртуального устройства». Например датчика температуры. Далее накидаю рабочие куски кода-шаблоны, которые пойдут как основа для «допила».
Всё что выше — это авторизация навыка. После чего он полезет на Redirect URI указанный в приложении, где будет ожидать ответа в формате json на два вида возможных запроса REQUEST_URI:
/v1.0/user/devices — получить список поддерживаемых устройств
/v1.0/user/devices/query — получить обновления данных
Данные для отдачи (температура, влажность) берем из очереди mqtt. В самом простом случае, шаблон устройства может выглядеть как-то так:
В первой и второй части, был прошит и настроен стик, а так-же установлен брокер сообщений и ZigBee2mqtt, Теперь попробуем подключить устройство и получить с него данные по температуре. Устройство — самый раздешевый датчик температуры, купленный на AliExpress за 267 рублей:
Заходим в админ панель ZigBee2mqtt, по адресу: http://ip:8080 и нажимаем кнопку «Разрешить подключения». После чего на устройстве жмем кнопку reset скрепкой. Если всё удачно, то в течении нескольких секунд устройство будет обнаружено:
Далее собственно при получении данных с устройства, ZigBee2mqtt будет отсылать данные по нему в json формате в очередь вида zigbee2mqtt/0xa4c13812c854f0f7. Хвост у данной очереди — МАС адрес устройства. Нашей дальнейшей задачей является эти данные собственно принять и обработать. Для этого воспользуемся python библиотекой paho-mqtt:
# -*- coding: utf-8 -*-
# Ensure can import paho package
try:
import paho
except ImportError:
# This part is only required to run the examples from within the examples
# directory when the module itself is not installed.
import inspect
import os
import sys
cmd_subfolder = os.path.realpath(
os.path.abspath(
os.path.join(
os.path.split(
inspect.getfile(inspect.currentframe())
)[0],
"..",
"src"
)
)
)
if cmd_subfolder not in sys.path:
sys.path.insert(0, cmd_subfolder)
import paho
Ну и далее на свой вкус и цвет дальше можно эти данные уже как угодно обрабатывать
Итак, в первой части мы прошили стикер CC2531, теперь наша малинка готова стать шлюзом. Обычно схема работы Raspberry следующая:
ZigBee2MQTT — нужен для того чтобы принять пакеты со стика CC2531 и отправить их в брокер сообщений. Которые в дальнейшем уже обработают скрипты для автоматизации чего-либо.
Сначала поставим брокер сообщений mosquitto (как самое легкое):
sudo apt-get install mosquitto
И настроим файл конфигурации /etc/mosquitto/mosquitto.conf :
pid_file /run/mosquitto/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
allow_anonymous true # доступ для всех
listener 1883 0.0.0.0 # слушаем все сетевые адреса
Можно задать логин пароль для доступа, и разрешить слушать только localhost, но я это считаю излишним, т.к. всё равно чаще всего raspberry pi лежит в локальной сети и в интернет не смотрит. Далее включаем службу и стартуем её:
После успешного старта будет доступен веб интерфейс для дальнейшей настройки в браузере http://ip:8080.
Необходимо зайти, выбрать порт где расположен стик, и ввести данные для подключения к брокеру. После сохранить. Конфиг будет сохранен в /opt/zigbee2mqtt/data/configuration.yaml
Далее оформим запуск ZigBee2MQTT как службу, создав и сохранив файл:
[Unit]
Description=zigbee2mqtt
After=network.target
[Service]
Environment=NODE_ENV=production
Type=notify
ExecStart=/usr/bin/node index.js
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
# Or use StandardOutput=null if you don't want Zigbee2MQTT messages filling syslog, for more options see systemd.exec(5)
StandardError=inherit
WatchdogSec=10s
Restart=always
RestartSec=10s
User=pi
[Install]
WantedBy=multi-user.target
Ну и теоретически всё. По идее можно подключать устройства zigbee. В следующей части собственно это и рассмотрю.
Update: в итоге решил таки не хранить все яйца в одном месте, и брокер сообщений mosquitto перенес с raspberry на другое устройство. В этом случае нужно установить пароль и чуть перенастроить конфигурационный файл