lleo_kaganov (lleo_kaganov) wrote,
lleo_kaganov
lleo_kaganov

Categories:

умный дом, cервер Banana и окончательное решение вайфайного вопроса

это перепост заметки, оригинал находится на моем сайте: http://lleo.me/dnevnik/2016/12/29_bananapi.html

Как вы помните, у меня уже долгое время стоит домашний сервер на плате Banana BPI-R1, которая мне когда-то полюбилась тем, что сочетает в себе всё мыслимое железо — от SATA для винта и бортового роутера на 5 портов Ethernet — до микрофона и ИК-датчика, там всё есть.

Единственная проблема была с WiFi, который периодически вис. На него я жаловался в дневнике, ставил какие-то какие-то рекомендованные в форумах специальные драйвера и пересобранные версии hostapd, сам писал следилки и перезагружающие костыли на Cи и PHP. Всё это работало плохо, и единственный выход подсказал Denis Dyakov в
комментариях: вообще отказаться от внутреннего WiFi-модуля Realtek и поставить внешний Ralink, по цене это 1200 руб. Да, он USB, но и тот тоже сидел на USB-шине. Для Ralink имеются драйвера прямо в ядре, и работает он уже вторую неделю без сбоев.


Вообще вызывает удивление, как производители и разработчики догадались поставить WiFi-чип от Realtek, который не имеет нормальных драйверов даже на сайте производителя или просто неисправен конструкционно. Но это уже вторая доработка напильником, которую рекомендуется сделать обладателю Bananapi BPI-R1. Во-первых, надо подпаять питание 5 вольт нормальными толстыми проводами: крошечные иголки разъема micro-usb не могут бесперебойно обеспечивать током 2А всю плату со всем оборудованием и винчестером. Кроме того, мы с заехавшим в гости Пашей выпаяли к чертям старый чип (он еще на клею там сидит, его только ножом оторвать можно) — чтоб не жрал ток и не мутил USB-шину. Не стали разбираться, где там отрезается ножка питания, сковырнули, отпаяли и выкинули, вот так:

Во всем остальном, впрочем, Bananapi BPI-R1 продолжает радовать: она бесперебойная, умная, и неплохо держит любую нагрузку — у меня на ней роутер, веб-проекты http://home.lleo.me, базы, электроника, архивный диск на 3ТБ, вся разводка сетей квартиры, и все прочее. А что Wi-Fi роутер внешний и под потолком — это не беда:

Рекомендую. А вот квартирную электронику на порты GPIO я все-таки решил не вешать. Почему? Во-первых, внешний чип AVR (Ардуино) на USB-подключении показал себя за эти годы очень надежной штукой. Во-вторых, вы же понимаете — вся эта электроника, контакты, упадет какой-нибудь проводок 12 вольт мимо разъема на плату, и сгорит не Ардуина ценой в 1$, а весь сервер. Кроме того, обнаружился любопытный момент для систем доступа: принятие решения Ардуиной происходит заметно быстрее, чем сервером. В принципе, все эти RS232-USB соединения должны летать, демоны срабатывать, интерпретаторы запускаться, но на практике это доли секунды, которые ощущаются как задержка. Поэтому сейчас я всю систему переделал, и теперь у меня в Ардуине — список ключей для принятия решения, а на сервере и вебе — развесистая админка, которая модерирует ключи, прописывает имена, открывает-закрывает доступ и синхронизирует таблицы с Ардуиной:

Ну и напоследок поделюсь одним простым, но очень полезным скриптиком для умного дома и квартирной электроники. Смысл в том, что когда у тебя дома есть сервер со звуковыми колонками, имеет смысл передавать разные сообщения голосом. Какие? Да любые. Какой смысл в умном доме, если он молчит? Кто-то в дверь зашел — поздороваться надо. Процессор перегрелся, электричество пропало — сообщить надо хозяину. Проблема тут чисто дизайнерская — сидеть и готовить звуковые файлы на каждый случай. Я обычно просил наговаривать важные сообщения Стаську:

warning disk

internet restart

port_down

port_up

warning power

warning proc

wlan down

wlan up

wifi ok

Но лучше всего их готовить через речевой синтезатор. Поскольку подлый Гугль давно отключил свою бесплатную речевую технологию, используем Яндекс, он даже лучше. Идем в кабинет разработчика https://developer.tech.yandex.ru и получаем ключ API для своего домашнего некоммерческого использования. Дальше ваяем такой скрипт speach:

#!/usr/bin/php
<?php $API='4e4261ff-e031-2116-654d-eff7746712bd'; // ключ Яндекса
if(!isset($argv[1])) die('NO FILE'); $txt=$argv[1];
$file='/tmp/'.md5($txt).'.mp3';
if(!is_file($file)) {
$ch=curl_init('https://tts.voicetech.yandex.net/generate?format=mp3&lang=ru-RU&emotion=good&speaker=ermil&key='.$API.'&text='.urlencode($txt));
curl_setopt($ch,CURLOPT_HEADER,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_exec($ch); $r=curl_multi_getcontent($ch);
curl_close($ch); if(!sizeof($r)) die('Error'); file_put_contents($file,$r);
} exec('play '.$file);
?>

И запускаем с небольшой строкой в кавычках:

> ./speach "Потребляемый ток: 0.9 ампер. Напряжение: 4.1 вольт. Загрузка процессора: 11 процентов"

Папку лучше прописать для файлов более постоянную, чтобы при повторе сообщения скрипт второй раз в Яндекс не бегал, а брал из файла. Пример работы — очень внятный голос ermil:

ermil.mp3



это перепост заметки, оригинал находится на моем сайте: http://lleo.me/dnevnik/2016/12/29_bananapi.html
Tags: программирование, сделай сам, электроника
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments