Для того, чтобы заработала связка Node-RED с Z-Wave (open-zwave) на RPI3, нужно выполнить следующий набор манипуляций:
Continue reading “Настройка Node-RED + Raspberry PI 3 + ZWave Razberry (Raspbian 9 Stretch)”
software and hardware
Для того, чтобы заработала связка Node-RED с Z-Wave (open-zwave) на RPI3, нужно выполнить следующий набор манипуляций:
Continue reading “Настройка Node-RED + Raspberry PI 3 + ZWave Razberry (Raspbian 9 Stretch)”
Если вдруг нужно, чтобы взлетел VirtualKD с гостевой Windows 10, то после инсталляции оного внутри машины, нужно ещё обязательно выполнить bcdedit /dbgsettings serial, иначе кина не будет. Сэкономит часик времени на рисчёрч “а чо оно не работает”.
Для того, чтобы собрать crashpad под Windows с DLL runtime (/MD /MDd), нужно создать в своём домашнем каталоге (c:/users/konst например) подкаталог .gyp и в него положить файл include.gypi со следующим содержимым:
{ 'target_defaults': { 'configurations': { 'Release': { 'target_conditions': [ ['OS=="win"', { 'msvs_settings': { 'VCCLCompilerTool': { 'RuntimeLibrary': '2', }, }, }], ], }, 'Debug': { 'target_conditions': [ ['OS=="win"', { 'msvs_settings': { 'VCCLCompilerTool': { 'RuntimeLibrary': '3', }, }, }], ], }, }, }, }
И пусть это сэкономит те полдня, которые пришлось потратить, чтобы выяснить этот факт.
У моего телефона почему-то после каждой перепрошивки слетают настройки EVDO на Интертелекоме, из-за чего нужно править настройки. Т.к. я всё время забываю процедуру, то решил её сохранить тут.
Когда-то я сделал подсветку рабочей поверхности на кухне с помощью БП, выключателя и трёх метров диодной ленты. Подходишь, нажимаешь выключатель, появляется свет, делаешь своё дело, уходишь – выключаешь свет. Но прогресс не стоит на месте и захотелось выключатель сделать чуть более умным, чтобы он включался по входу на кухню и не нужно было щёлкать рукой, а также попутно измерял температуру и влажность на кухне, благо компоненты на алиэкспрессе стоят копейки.
В результате на базе ESP8266, датчика движения BISS0001, сенсора AM2302 (DHT-22) и релешки OMRON G3MB-202P (вообще можно обойтись мосфетом, но было интересно SSD реле потыкать) был сделан контроллер ленты, который попутно сливал информацию о погоде на кухне. Всё это было аккуратно собрано в одну 6см распределительную коробочку шнайдер из “новой линии”. Напишу отдельно о процессе создания такой штуки.
Теоретически схема работала отлично, на практике тоже, датчик включал свет, через 40 секунд после последнего срабатывания выключался, температура с влажностью сливались, кроме одного нюанса: иногда свет включался сам. Системность выяснить не удавалось, поэтому пришлось демонтировать плату управления, прогреть её, почистить от флюса (я ещё тот паяльщик), но это не помогло. Пришлось гуглить и оказалось, что датчик движения чувствителен к Wi-Fi радио ESP, иными словами, когда контроллер передаёт информацию, то он может вызвать ложно-позитивное срабатывание сенсора, что приводит к включению света, несмотря на отсутствие кого-либо на кухне. Ну что же, красивую упаковку пришлось чуть разобрать и датчик вынести наружу, чтобы отдалить от радио-антенны и уменьшить наводки.
Свет стал включаться реже, но всё равно включается сам по себе. Пришлось заварить кофею и начать думать, как же поступить ещё… В голову пришла мысль заэкранировать датчик, под рукой оказалась продуктовая фольга – взял небольшой кусок, обмотал датчик движения, заизолировал изолентой внутри и снаружи и запустил систему заново.
Свет перестал включаться произвольно совсем! Теперь когда кто-то подходит к столешнице – ему услужливо включается подсветка и работает, пока этот кто-то там находится и что-то делает, после того, как человек уходит – свет отключается, а обычная кухонная фольга отлично экранирует наводки от радиосигнала Wi-Fi.
Случайно обнаружилось, что в ini конфиге uwsgi важен порядок объявления параметров, поэтому если сначала объявить virtualenv, а потом указать подключение плагина python3, то будет попытка завестись с системным питоном.
С появлением облачных хранилищ стало грешным не использовать их возможности по хранению террабайтов данных за копейки, поэтому будем сохранять туда Continuous Archive данных из PostgreSQL.
В нашем случае действие происходит на базе Ubuntu 14, PostgreSQL 9.5 установлен локально.
Первым шагом нам необходимо установить сам pghoard и supervisor, т.к. systemd нет, а запускать демона с системой нужно.
Текущая версия pghoard 1.4 в pypi нам не подходит (в ней нету поддержки новых модулей azure-storage), поэтому инсталлировать её нужно из репозитория, а поскольку pghoard работает только с третьим питоном, то делаем это с помощью pip3
UPDATE:
предварительно нужно установить модули:
azure
azure-storage==0.33
и проапгрейдить requests до версии 2.10+
END UPDATE
pip3 install git+https://github.com/ohmu/pghoard
apt-get install supervisor
Для автозапуска демона создаём конфигурационный файл pghoard.conf с минимально необходимым контентом и кладём его в /etc/supervisor/conf.d/
[program:pghoard]
user = postgres # Запускать нужно от имени postgres, иначе не удастся подключиться к СУБД
group = postgres
directory = /var/lib/pghoard
command = /usr/local/bin/pghoard /var/lib/pghoard/pghoard.json
autostart=true
autorestart=true
environment=HOME="/var/lib/postgresql" # Должен быть HOME пользователя postgres (туда записывается пароль и потом оттуда считывается)
Создаём пользователя в postgresql для выполнения репликации:
psql -c "CREATE USER pghoard PASSWORD 'hoardpassword' REPLICATION"
И вносим в /etc/postgresql/9.5/main/pg_hba.conf
запись, разрешающую выполнять репликацию:
host replication pghoard 127.0.0.1/32 md5
В конфигурационный файл postgresql.conf нужно внести изменения, разрешающие выполнять репликацию:
max_wal_senders = 2
wal_level = archive # 'hot_standby' or 'logical' are also ok
Перезапускаем postgresql и настраиваем pghoard на работу с Azure:
{
"backup_location": "/var/lib/pghoard",
"backup_sites": {
"mysite": {
"nodes": [
{
"host": "127.0.0.1",
"password": "hoardpassword",
"port": 5432,
"user": "pghoard"
}
],
"object_storage": {
"storage_type": "azure",
"account_name": "<storage-account>",
"account_key": "<storage-account-key>",
"bucket_name": "<bucket-name>"
}
}
}
}
После этого выполняем service supervisor restart и наблюдаем, как бекапы заливаются в azure blob storage.
Умный дом, или как программисту (и не только) добавить автоматики в своё жильё. Начну делиться своим опытом начального внедрения Z-Wave, а потом и самодельных девайсов в квартире.
В настоящее время для создания умного дома есть огромное количество различных решений. Если вы любитель DIY, или хотите сэкономить, а может и то, и другое – рекомендую обратить внимание на микросхемы ESP8266, или Arduino + nRF24. На базе ESP можно построить систему используя существующую домашнюю сеть Wi-Fi, на базе nRF можно построить систему по своей беспроводной сети, тоже работающией 2.4 ГГц, но не Wi-Fi, зато с преимуществом в виде возможности ретрансляции сигнала, т.е. каждая единица сети (нода) может общаться не только с контроллером, но и с другими нодами. Фактически mesh-сеть.
С экономической точки зрения ESP-12F стоит на алиэкспрессе 1.80USD за штуку, ардуино стоит 1.60USD, но к ней ещё надо дополнительно покупать трансмиттер NRF24L01+, который стоит порядка 0.9USD.
При этом у ардуины 16-32КБ памяти и слабенький 16MHz Atmel процессор, в то время, как у ESP до 4 мегабайт флеша, аппаратный Wi-Fi с шифрованием и довольно мощный 32 битный RISC процессор, работающий на 80MHz. Выливается это всё в то, что по факту в ESP можно, не сильно напрягаясь, прикрутить OTA обновления и накрутить много всякой автономной логики, например целый веб-сервер, с помощью которого управлять нодой (т.е. обходиться вообще без контроллера). Тут можно посмотреть в сторону проекта NodeMCU, ребята запилили в прошивку интерпретатор LUA с помощью которого можно накручивать весьма сложную логику прямо на устройстве, не задействуя центральный сервер – т.е. создавать автономные системы.
Z-Wave
В случае же, если есть много денег, или неохота заморачиваться с паяльником, прошивками и разного рода экспериментами – можно посмотреть на Z-Wave:
это уже вполне mature, production решение. В наличии обилие устройств самого разного назначения – и выключатели, и реле, и термостаты с датчиками – бери и образумливай дом хоть сейчас. Стоимость, при этом, немаленькая. Самое простое реле будет стоить порядка 25-30 евро, а контроллер вообще под две сотни тянет.
После нескольких лет использования Z-Wave оказалось, что я вообще сторонник гибридных решений. В части дома используется Z-Wave, в другой части появляются новые модули на базе ESP.
Чтобы всё это разнообразие взлетело, я использую в качестве контроллера Raspberry PI, к которой добавлена плата расширения RaZberry, позволяющая связываться с Z-Wave устройствами. Рядом с ней добавлена плата для связи с nRF24 устройствами, а связь с ESP осуществляется через локальную сеть.
До тех пор, пока я использовал только Z-Wave – в качестве контроллера мне хватало софта от RaZBerry, под названием Z-Way, но после того, как началась экспансия на DIY устройства – пришлось искать систему, которая сможет общаться со всем этим “зоопарком”. Мой выбор пал на Domoticz. Он умеет работать и с z-wave посредством OpenZWave, и с Arduino + nRF при помощи MySensors сборки для RPi, и с ESP через MQTT, который оказался настолько мощным и удобным протоколом, что появились даже мысли попробовать, когда-то адаптировать MySensors (или как-то написать свою прошивку) на работу через него.
Иногда, при подключении к VPN оказывается, что тамошний DNS не резолвит местные имена. Это не потому что он плохой, а потому что винда странная (7). Есть два пункта, которые помогают этот вопрос урегулировать.
Для начала нужно в настройках сети поднять приоритет VPN сети повыше:
control panel -> network and sharing -> change adapter settings ->-n -> advanced settings Make sure that your tap adapter is at the top of your connections list.
Перед подключением выполнить:
net stop dnscache
Должно помочь.
Можно пойти дальше и запихнуть net stop в батничек, который вызывать при подымании openvpn соединения.
Если внезапно вы решили подключить espresso и начать писать тесты, а потом после очередных манипуляций вдруг тесты приложения перестали запускаться и начали бросать исключение NoClassDefFoundError YourActivity, то вполне вероятно, что может спасти совершенно нелогичное действие:
Добавить исключения суппорт либы в gradle для компиляции espresso (в моём случае espresso-contrib)
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2') { exclude group: 'com.android.support' exclude module: 'support-v4' }