Делаем управление «Умным домом» через интернет за пару минут

    Доброго дня. У многих из нас, в том числе и у меня, давно возникла идея создания своего «Умного дома». Но она откладывалась в виду большой сложности реализации как с аппаратной стороны так и со стороны программного обеспечения, что требовало от её создателя быть «гуру» во многих областях.

    image

    В этой статье я расскажу вам об очень простом и вполне функциональном способе управления системой умного дома через интернет. На её создание при наличии необходимых компонентов уйдет всего несколько минут.

    Заинтригованы? Прошу под кат.

    Однажды рыская по интернету в поисках информации про «Умные дома» наткнулся на интересное видео, где мужчина в белом халате показывал как управлять ARDUINO через интренет. Позже оказалось, что этот мужчина один из разработчиков проекта на kickstarter.com под названием Ninja Blocks.

    Вот, то самое видео.



    Ninja Blocks — очень интересный и довольно успешный проект, который предлагает управление и контроль большой периферией домашних устройств с помощью своего модуля ( который они предлагают купить за 199 «вражеских» единиц). Модуль взаимодействует с облаком, через которое и происходит управление устройствами. Так же существуют приложения для iOS и Android с помощью которых также возможно управление.
    Разработчики Ninja Blocks не поленились и написали свою библиотеку для ARDUINO за что им большое СПАСИБО!

    Облако не совсем простое, оно не только посылает и принимает данные, то также поддается программированию со стороны пользователя, который создает так называемые ПРАВИЛА. Таким образом облако становиться онлайн «мозгом» «Умного дома».
    НАПРИМЕР: при нажатии на кнопку, облако ждет 30 секунд, а потом влючает какое-либо реле, ждет еще 60 секунд и выключает его.
    Правила легко создаются из панели управления.

    Для повторения его примера нужен был Ethetnet Shield. На тот момент в моем распоряжении быт модуль на базе enc28j60. Но как я ни пытался повторить пример с использованием разных библиотек, так ничего и не получалось. Необходим был модуль совместимый с родной Ethernet библиотекой для ARDUINO т.е. на базе чипа w5100. Шилд был заказан из поднебесной и всё было отложено на долгий месяц.

    Если вы уже посмотрели видео выше, то поняли что нам потребуется:

    — совместимая плата ARDUINO
    — thernet shield на базе w5100
    — аккаунт на сайте a.ninja.is
    — разная мелочевка в виде резисторов, кнопок и светодиодов

    И так. Плата пришла. Все собрал, подключил, загрузил.
    Это было удивительно, но все заработало )) Но всегда бывает «НО». Буквально через пару минут заметил, что светодиод перестал реагировать на управление через сайт. Перезагрузка контроллера помогла, но только на те же пару минут. При этом кнопка всегда работала испаравно. Да это была серьезная проблема с которой «Умный дом» не построить.

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

    Поиск начался с не очень популярного раздела на форуме разработчиков с названием ARDUINO. Тут было найдено решение для исправление проблемы с управлением. Одни из участников форума доработал библиотеку проекта. Самое удивительное, так это то что за пол года разработчики так и не обновили библиотеку на github. Видно опасаются конкуренции для себя со стороны проектов на базе Arduino )).

    Ниже вы сможете скачать уже исправленную библиотеку.

    Несколько часов опытов и изучения смазанных объяснений разработчиков на форуме и библиотеки дали свои плоды. Все вопросы были успешно решены… =)

    И так теперь по делу.
    Библиотека для Arduino занимается, только приемом и отправкой данных.
    Основным параметром в данных является ID устройства к которому обращается сервер или от которого принимает информацию. Посмотреть полный список можно здесь. ninjablocks.com/pages/device-ids Каждому ID соответствует свой виджет в панели управления.

    В Serial Monitor передача или прием одной команды или данных выглядит таким образом:
      {"GUID": "ETHERSHIELDBLOCK_0_0_1","G": "0","V": 0,"D": 1,"DA": 27}
    

    Теперь рассмотрим что там внутри.
    «G»: «0» — параметр GUID указывает порядковый номер в рамках группы устройств с одинаковым ID. Например установлено 3 датчика температуры с одинаковым ID = 1. Тогда для первого датчика GUID будет равен 0, для второго — 1 и 2 для третьего.
    «V»: 0 — параметр VID является идентификатором для устройств как и ID.
    «D»: 1 — параметр DID ( Device ID) указывает тип устройтсва. Напримет датчик температуры имеет ID=1 или 31, кнопка — 5.
    «GUID»: «ETHERSHIELDBLOCK_0_0_1» — трудно сказать для чего это надо, но в общем он содержит в себе название блока ARDUINO (котрое можно изменить в начале примера из библиотеки) и всех выше пересичленные параметры.
    «DA»: 27 — ну и сами данные, которые мы передаем. Для кнопки или реле это 0 или 1, для RGB светодиода это код цвета например FFFFFF.

    Условно все датчики и устройства можно разделить на два типа. Первый тип только передают информацию ( кнопка, датчик температуры и влажности). И второй тип только принимают её. Тут кроется один нюанс. Панель управления изначально не знает что у нас подключено к контроллеру. И если первый тип сам сообщат о себе, когда будут передавать данные и панель сразу создаст для них виждет согласно их ID. То для второго типа необходимо произвести создание виджетов в панели управления путем отправки данных.

    Как отправлять данные с нескольких устройств с одинаковым ID.
    Все очень просто перед каждой отправкой данных мы должны указать порядковый номер устройства (GUID)

        NinjaBlock.guid = "1";            // указываем порядковый номер датчика  0 для 1-го, 1 для 2-го и т.д.
        NinjaBlock.deviceID=(1);      // указывает ID  в данном случае термометр
        NinjaBlock.send("24");            // отправляем данные
    


    При приеме данных для нескольких устройств c одинаковым ID нам необходимо проверять чему равен GUID

        if (strcmp(NinjaBlock.strGUID,"1") == 0)  // проверяем равен ли GUID  1 для второго устройства
    


    Вернемся к устройствам второго типа. Для создания виджета в панели управления достаточно всего лишь раз отправить данные от его имени. Создадим виджет с переключателем ON/OFF для каждого из двух светодиодов написав в цикле void setup следующее:

        NinjaBlock.guid = "0";
        NinjaBlock.deviceID=(1002);
        NinjaBlock.send("0");
        
        NinjaBlock.guid = "1";
        NinjaBlock.deviceID=(1002);
        NinjaBlock.send("0");
    


    Получив эти данные панель создаст для них виджет.

    Теперь предлагаю вашему вниманию простую программу для работы с Ninja Blocks.
    — Управляет 4-я светодиодами
    — Отсылает показания 2-х датчиков температуры ds18b20 c интервалом в 60 секунд
    — Каждые 20 секунд синхронизирует положение переключателей ON/OFF с состоянием светодиодов. Так как панель управления никак не следит дошли ли данные до контроллера и поэтому иногда бывает что на панели положение ON а на самом деле выход выключен. Данный способ позволяет каждые 20 секунд устанавливать переключатели в панели в правильно положение если до этого они стояли не верно.
    — Подключена кнопка, при нажатии на которую выполняется запрограммированный сценарий.

    Код программы
    
    #include <SPI.h>                
    #include <Ethernet.h>
    #include <NinjaBlockEthernet.h>  
    //#include <MemoryFree.h>
    
    #define DEFAULT_VENDOR_ID 0  // ID  по умолчанию
    #define LED_DEVICE_ID 1002   // ID для светодиодов определили их как выключатель с 2-я положениями вкл и выкл
    #define BUTTON_DEVICE_ID 5   // ID для кнопки
    #define TEMP_ID 1            // ID для датчиков температуры
    
    
    #include <OneWire.h>
    #include <DallasTemperature.h>  // библиотека для тачика температуры ds18b20
    #define ONE_WIRE_BUS 2          // подключаем дачик к 2 цифровому выводу 
    
    #define ENABLE_SERIAL false    // отключаем serial monitor
    
    byte button = 5;  
    byte led_1 = 7;
    byte led_2 = 6;
    byte led_3 = 4;
    byte led_4 = 3;
    
    
    
    
    boolean isButtonDown = false;
    int time =500;                // переменная для отсчета времени для датчиков температуры
    int timeup=500;               // переменная для синхронизации кнопок
    
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);
    
    void setup(){
      
       sensors.begin(); // инициализируем датчики температуры
    
       pinMode(button, INPUT);  // конфигурируем входа и выхода контроллера
       pinMode(led_1, OUTPUT); 
       pinMode(led_2, OUTPUT);
       pinMode(led_3, OUTPUT);
       pinMode(led_4, OUTPUT);
      
      
       
      #if ENABLE_SERIAL
        Serial.begin(9600);
        Serial.println("Starting..");
      #endif
        delay(1000);   // This delay is to wait for the Ethernet Controller to get ready
    
        NinjaBlock.host = "api.ninja.is";
        NinjaBlock.port = 80;
        NinjaBlock.nodeID = "ETHERSHIELDBLOCK"; // имя для вашего блока
        NinjaBlock.token = "ВАШНОМЕРс САЙТА"; // Get yours from https://a.ninja.is/hacking вписывем ваш код 
        NinjaBlock.guid = "0";
        NinjaBlock.vendorID=DEFAULT_VENDOR_ID;
        NinjaBlock.deviceID=LED_DEVICE_ID;
        NinjaBlock.deviceID=TEMP_ID;
    
        if (NinjaBlock.begin()==0) // подключаемся к облаку
        
        NinjaBlock.guid = "0";       // отсылаем данные от имени 2-х позиционного выключателя и создаем  виджет в панели для 1-го светодиода
        NinjaBlock.deviceID=(1002);
        NinjaBlock.send("0");
        
        NinjaBlock.guid = "1";       // для 2-го
        NinjaBlock.deviceID=(1002);
        NinjaBlock.send("0");
        
        NinjaBlock.guid = "2";       // для 3-го
        NinjaBlock.deviceID=(1002);
        NinjaBlock.send("0");
        
        NinjaBlock.guid = "3";      // для 4-го
        NinjaBlock.deviceID=(1002);
        NinjaBlock.send("0");
    
    }
    
    void loop() {
      
      
      // СИНХРОНИЗАЦИЯ ПОЛОЖЕНИЯ КНОПОК//
      
        if ( timeup == 1)                    // проверяем пришло ли время для проверки ( каждые 20 секунд)
        {  
          if( digitalRead(led_1)== HIGH)    // если светодиод 1 включен
            {
              NinjaBlock.guid = "0";        // указываем порядковый номер светодиода
              NinjaBlock.deviceID=(1002);   // его ID
              NinjaBlock.send("1");         // отсылаем 1 , что обозначает включен
            }  
          if(digitalRead(led_1)== LOW)      // если светодиод 1 выключен  повторяем что и выше, только отсылаем 0
            {
              NinjaBlock.guid = "0";
              NinjaBlock.deviceID=(1002);
              NinjaBlock.send("0");
               Serial.println( " Led-1 OFF UPdate");
            }  
            
            if(digitalRead(led_2)== HIGH)
            {
              NinjaBlock.guid = "1";
              NinjaBlock.deviceID=(1002);
              NinjaBlock.send("1");
              Serial.println( " Led-2 ON UPdate");
            }  
          if(digitalRead(led_2)== LOW)
            {
              NinjaBlock.guid = "1";
              NinjaBlock.deviceID=(1002);
              NinjaBlock.send("0");
              Serial.println( " Led-2 OFF UPdate");
            }  
            
            if(digitalRead(led_3)== HIGH)
            {
              NinjaBlock.guid = "2";
              NinjaBlock.deviceID=(1002);
              NinjaBlock.send("1");
              Serial.println( " Led-3 ON UPdate");
            }  
          if(digitalRead(led_3)== LOW)
            {
              NinjaBlock.guid = "2";
              NinjaBlock.deviceID=(1002);
              NinjaBlock.send("0");
              Serial.println( " Led-3 OFF UPdate");
            }  
            
            if(digitalRead(led_4)== HIGH)
            {
              NinjaBlock.guid = "3";
              NinjaBlock.deviceID=(1002);
              NinjaBlock.send("1");
              Serial.println( " Led-4 ON UPdate");
            }  
          if(digitalRead(led_4)== LOW)
            {
              NinjaBlock.guid = "3";
              NinjaBlock.deviceID=(1002);
              NinjaBlock.send("0");
              Serial.println( " Led-4 OFF UPdate");
            }  
            
         timeup=2000;   
        }  
        
       //   END - СИНХРОНИЗАЦИЯ  ПОЛОЖКЕНИЯ КНОПОК//
            
            timeup= timeup-1;  // уменьшаем переменную для проверки кнопок
            delay(1);
            
            
        // ПРИНИМАЕМ ДАННЫЕ ДЛЯ СВЕТОДИОДОВ// 
        if(NinjaBlock.receive()) {            // если нам прислали данные
            // структура данных
            // Return values are:
            // NinjaBlock.strGUID
            // NinjaBlock.intVID
            // NinjaBlock.intDID
            // NinjaBlock.intDATA - if data is integer
            // NinjaBlock.strDATA - if data is string (note char[64])
            
                 if (NinjaBlock.IsDATAString) {
                  
                 //Serial.print("strDATA=");
                 //Serial.println(NinjaBlock.strDATA);
                
    
                if (NinjaBlock.intDID == 1002)   // Проверяем нашим ли светодиодам адресованы данные т.е. совпадает ли с нашим ID
                {
                 
                  if (strcmp(NinjaBlock.strGUID,"0") == 0) // Проверяем какому именно светодиоду из 4-х пприслали данные т.е.  сравниваем GUID
                  {
                  
                    if (strcmp(NinjaBlock.strDATA,"1") == 0) // если GUID совпал , то смотрим что нам примлали и действуем согласно данным
                    {                                        // нам прислали 1 значит будем включать светодиод
                        digitalWrite(led_1, HIGH); 
                    }
                    else if (strcmp(NinjaBlock.strDATA,"0") == 0) // прислали 0 - выключаем
                    {
                        digitalWrite(led_1, LOW); 
                    }
                }
                if (strcmp(NinjaBlock.strGUID,"1") == 0)  // то же самое только для 2-го светодиода
                {
                  if (strcmp(NinjaBlock.strDATA,"1") == 0)
                    {           
                        digitalWrite(led_2, HIGH); 
                    }
                    else if (strcmp(NinjaBlock.strDATA,"0") == 0)
                    {
                        digitalWrite(led_2, LOW); 
                    }
                  
                }
                
                if (strcmp(NinjaBlock.strGUID,"2") == 0)    // то же самое только для 3-го светодиода
                {
                  if (strcmp(NinjaBlock.strDATA,"1") == 0)
                    {           
                        digitalWrite(led_3, HIGH); 
                    }
                    else if (strcmp(NinjaBlock.strDATA,"0") == 0)
                    {
                        digitalWrite(led_3, LOW); 
                    }
                  
                }
                
                if (strcmp(NinjaBlock.strGUID,"3") == 0)    // то же самое только для 4-го светодиода
                {
                  if (strcmp(NinjaBlock.strDATA,"1") == 0)
                    {           
                        digitalWrite(led_4, HIGH); 
                    }
                    else if (strcmp(NinjaBlock.strDATA,"0") == 0)
                    {
                        digitalWrite(led_4, LOW); 
                    }
                  
                }
                
                }     
            }
            
        }
        
        // ОТПРАВЛЯЕМ ДАННЫЕ С КНОПКИ//
    
        if (digitalRead(button) == HIGH) { // если кнопка нажата
            if (!isButtonDown) {           // и до этого была отжата
                #if ENABLE_SERIAL
                  Serial.println("Button Down");
                #endif
                NinjaBlock.guid = "0";    // отправляем порядковый новер
                NinjaBlock.deviceID=5;    // отправляем ID кнопки 5
                NinjaBlock.send(1);       // Отправляем данные 1 - нажата
                isButtonDown = true;      // записываем последнее значение нажата 
            }
        } else {
            if (isButtonDown) {            // если кнока была раньше нажата
                #if ENABLE_SERIAL           
                  Serial.println("Button Up");
                #endif
                NinjaBlock.guid = "0";   // отправляем порядковый новер
                NinjaBlock.deviceID=5;   // отправляем ID кнопки 5
                NinjaBlock.send(0);       // Отправляем данные 0 - отжата
                isButtonDown = false;     // записываем последнее значение - отжата
            }
        }
        
        
        if (time==1)                      // проверяем пришло ли время отправлять данные термодатчиков в обоако ( раз в 60 сек)
        {
      sensors.requestTemperatures();     // запрашиваем показания датчиков
      
      Serial.println(sensors.getTempCByIndex(0));
      NinjaBlock.guid = "0";                        // отправляем порядковый номер 
      NinjaBlock.deviceID=(1);                      // отправляем ID 
      NinjaBlock.send(sensors.getTempCByIndex(0));  // отправляем показания первого датчика
      
      
      Serial.println(sensors.getTempCByIndex(1));   // здесь то же самое
      NinjaBlock.guid = "1";
      NinjaBlock.deviceID=(1);
      NinjaBlock.send(sensors.getTempCByIndex(1));
      
      time=6000;                                   // обновляем переменную для датчиков
        }
        time=time-1;                               // уменшаем переменную с каждым циклом
        delay (9);
    }
    



    Постарался обеспечить код подробными комментариями.

    Подготовил небольшое демонстрационное видео


    Подведем небольшой итог.

    Достоинства:
    — Управление и котроль из любой точки мира ( при наличии интренета)
    — Собирается и настраивается за считанные минуты.
    — Очень простой и недорогой
    — Наличие специальных сценариев
    — Широкий перечень виджетов в панели управления.
    — Если добавить роутер TP-Link TL-MR3020 (20$) и 3G модем, то можно использовать на даче и других местах без интернета.
    — Если нет желания тянуть сетевой кабель, то достаточно купить за 15$ TP-Link TL-WR702N, который будет работать в качестве wi-fi шилда
    — Хорошая стабильность в работе. За 2 дня тестирования не потерялась ни одна команда все работает четко.

    Недостатки:
    — Самый главный минус этой системы это невозможность работы без интренета.
    — Имеется задержка при включении колеблется от долей секунды до нескольких
    — Библиотека кушает много места — целых 16 кБ, если добавить библиотеку для nrf24l01 то ничего почти не остается. Придется переходить на Mega скорее всего.
    — Приложение для смартфонов не позволяет просматривать показание датчиков. Управление устройствами сделано не очень удобно, не видно текущего состояния on/off.

    Планы на будущее:
    — Дописать в коде проверку соединения и в случае его отсутствия Arduino будет действовать самостоятельно и будет перезагружать TP-Link TL-MR3020 и 3G модем если работает с ними в связке.
    — Добавить nrf24l01 для управления и контроля других датчиков.

    Очень интересно услышать ваше мнение и конструктивную критику. Оригинальные вопросы приветствуются! Фух…

    ФАЙЛЫ:
    Исправленная библиотека.

    P.S. Во время работы чип w5100 на Etherten Shield сильно нагревается до температуры около 45-50 градусов. Это нормально?
    Узнать текущую температуру моего Shield можно здесь.
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 31
    • +14
      Доверить свой дом «облаку»? Мой внутренний параноик протестует.
      • 0
        Меня тоже это остановило. А с учётом того, что даже dyndns «внезапно» прекратило поддержку free hostnames оказаться в заложниках ещё у одного кикстартера не улыбается совершенно.
      • 0
        Немного смущают числа в скобках.
        • +3
          Согласен с m0Ray выше: «облако» и «умный дом» — это дом построен на минном поле :-)

          Давно читаю подобные материалы здесь и ни разу никто не упомянул об openHAB (если не считать отчета с Duke's Choice Awards 2013). Как по мне, хорошая альтернатива тому же «cloud»-у. Да, согласен, он(openHAB) немножко «тормознутый». Но даже с такими потребностями по ресурсам его можно поднять на RaspberryPi или BeagleBone.

          По поводу Arduino или ему подобным: в последнее время нашел возможность воплотить в реалии то, что сидит у меня в голове уже 3 года :) Идея была простая: подружить hi-level девелопера через разного вида API с популярными и не дорогими платформами (Arduino, TI Launchpad, MBED and etc.). То есть, убрать «полку»(IDE, Toolchains, C, ASM and etc.) с процесса взаимодействия с девайсом. Написанием кода для МК и компиляций должен заниматься кто-то другой… Так и родился SmartAnthill. Проект сырой, но самое главное, что живой! :) Документация немножко отстает от кода.
          В планах стоит задача покрыть платформы (Arduino, TI Launchpad, MBED) для взаимодействия как с проводными шинами(пока что CAN), так и беспроводные(тот же nrf24l01, что автор в статье упомянул и ему подобные).

          P.S: Если будет готов какой-небудь пре-релизный вариант и с нашей стороны(UA) будет доступ к хабру — постараюсь написать более подробный материал.
          P.S.S: Если у Вас есть желание помочь SmartAnthill — буду благодарен, присоединяйтесь (MIT License)!
          • +1
            Господа, вы все совершенно правы! Доверять полностью «облаку» может выйти для себя боком. Но как управление и король «умным домом» в дополнение к уже существующему проекту на мой взгляд имеет место быть. Использование этого проекта в качестве управляющего центра довольно опасно, а нам это и не надо. Но ведь как удобно посмотреть температуру в нужном месте просто глянув на свой смартфон. Ведь мы через панель управлени сможем легко и без проблем отправить данные для нашей arduino. Например в нужное нам время мы отсылаем температуру до которой необходимо нагреть воду и команду начинать работать, получив эти данные контроллер начинает гореть воду до нужной температуры согласно своему собственному алгоритму. Таким образом web панель управления занимается только передачей данных от пользователя к полностью самостоятельному контроллкру «Умного дома» и отсылает обратно показания датчиков. И если пропадает интернет, то ничего не случится — контроллер то у нас автономный.
            Считаю, что это довольно удобный вариант, который легко настраивается и не требует много времени на внедрение. К тому же сейчас готовиться новая версия Панели управления — ещё более симпатичная и функциональная.
            • +4
              Пропал интернет и ты не смог включить свет в коридоре — это наше будущее :)
              • 0
                =) Если уж и пропадет интернет раз в месяц, то не думаю что будет проблема включить свет по-старинке — выключателем на стене.
                • 0
                  Как? Если он включается через релюшку, которая управляется командой из инета? :-D
                  • 0
                    А если кто-то очень переживает, то может сделать простую web-страницу c управлением в рамках домашней локальной сети. И если у человека трудности с передвижением, то он простой зайдет на локальный ip адрес и сделает то что хотел — включит свет в коридоре.
                    • 0
                      В рамках концепции Ninja Block — не может. В том то и дело.
                      • 0
                        В рамках концепции — не может. Согласен полностью! Нужно использовать эту концепцию не «ВМЕСТО», а «ВМЕСТЕ» как дополнение. Тогда плюсы значительно перевешивают всякие «Если» =))

                        А вообще это довольно сомнительная идея — включать свет в коридоре только через реле при этом не имея возможности сделать все это вручную… Тут сразу увеличивается количество всевозможных «если». А если «умрет» (сгорит, зальет, взорвется) контроллер «Умного дома» как быть тогда?
                        • 0
                          А вы знаете много систем, которые продолжат функционировать при выведении из строя контроллера умного дома? Я не говорю о поломке центрального контроллера, а, например, о том, что блок управления лампой в стене закоротило после потопа. Имхо нет таких идеальных систем. Вообще.

                          Максимум — децентрализованность, чтобы можно было использовать оконечники с неработающим центральным узлом.
                          • 0
                            webself, вы интересный собеседник. Идеальных систем нет вообще. Но речь у нас шла не об этом. Мы говорили о том что делать, если пропадет интернет. Я предложил подойти и включить свет по-старинке ( например нажатием на кнопку контроллера управляющего светом и вмонтированном в нишу привычного нам выключателя в стене.

                            На что вы ответили:
                            Как? Если он включается через релюшку, которая управляется командой из инета? :-D


                            Но ведь эту релюшку мы сможем включить нажав на кнопку умного выключателя, если нет, то не вижу смысла в таких выключателях =))
                            • 0
                              Очевидно, что система управления лампой по радио условно разделена на два блока: 1) диммер с радиоуправлением, подключенный к лампе, 2) радиокнопка. Они никак не связаны проводами. И если заливает диммер, то такую лампу уже никак не включить. Кроме как разобрав и выкинув диммер из цепи.

                              Я не видел систем, которые были бы защищены от подобного. Меня один товарищ уже спрашивал, мол «хочу вот так». Мечтает.
                              • 0
                                У меня такой радио-диммер закреплен на потолке на расстоянии пары сантиметров от люстры.
                                В случае, если сломалась радио-кнопка (сели батарейки), то я могу включить свет настенным «дедовским» выключателем.
                                Если залило водой диммер, то, скорее всего, и люстру закоротило, и использовать ее небезопасно.
              • 0
                А вообще подскажите какие есть возможности дистанционного управления и контроля «Умным домом» на большом расстоянии? Кроме интернета и GSM канала? Ведь по сути ничего другого и нет. Или я ошибаюсь?
                • 0
                  Можете свой провод длинный протянуть :) Шутка.

                  Да, нет ничего другого. Мы у себя в COOLRF гибрид делаем. Чтобы и всё без интернета работало и снаружи можно было легко зайти к себе и поглядеть что и как.
                  • 0
                    Мне очень нравится ваш проект. Очень интересный. Я хотел выше как раз привести ваш проект в пример. Ведь у вас как раз в случает отказа центрального контроллера можно ручками включить =)
                  • 0
                    По обычному телефонному каналу через модемы :)
                  • 0
                    Думаю не сложно прикрутить Ninja Block к COOLRF… Да, согласен интернет иногда пропадает, но это бывает довольно редко. Так ведь и электричество частенько пропадает =)
                    • 0
                      Мы может и прикрутим со временем. У меня на столе их управляющий комп лежит, ждет своего часа. :) Странно, кстати, на хабре вроде бы не было его фотообзора еще.
                      • 0
                        Обзора ещё не было… Может сделаете? Было бы интересно узнать по-подробнее.
                    • 0
                      Сложно ли будет web-программисту с опытом разработки на asp.net, rails и не имеющем опыта работы с микроконтроллерами разобраться в написании ПО для данного девайса?
                      • 0
                        С Arduino работать очень легко. А если у вас есть опыт программирования в любой С- подобной среде, то освоение будет проходить в несколько раз легче. Для изучения с нуля рекомендую вот эти уроки www.youtube.com/watch?v=bO_jN0Lpz3Q&list=PLE21A422AF02BA01C
                        • 0
                          Премного благодарен :)
                      • 0
                        GUI создано на Primefaces?
                        • 0
                          Вывод — фигня эта ниндзя блокс. Нужен сервис, который лишь будет красивым интерфесом к страшной железяке в щитке, которая будет через инте обмениваться командами и статусами, но сложная логика — все равно хранится в памяти в железке. Впрочем, она тоже может изменяться через вебинтерфейс.
                          • 0
                            Управление логикой «Умного дома» через Ninja Blocks — это не только фигня, но и опасно. Для человека у которого нет желания заморачиваться и писать свой сервер, потратив на это кучу времени Ninja Blocks очень неплохой вариант. Ему не нужно вникать в горы непонятного кода, он просто купить за 16$ Ардуино и Интернет шилд, настроит и подключит за пару часов и будет отсылать через веб интерфейс команды на ардуино и контролировать их выполнение когда он будет вдалеке от дома. Контроллер должен быть полностью автономен, но он ещё должен уметь дистанционно принимать команды от хозяина. Так что те кто говорит, мол пропадет интернет и накроется всё медным тазом… Отчасти будут правы, но другой более удобной альтернативы управления на расстоянии просто нет. Разве что смс, но это не так удобно…
                          • +1
                            Да, у NinjaBlocks всё хорошо, кроме того, что без Интернета всё «умирает». Несколько месяцев назад я задался целью создать простой узел автоматики, управлять которым можно как локально, так по интернету (без «проброса» портов на роутере), но при этом, чтобы вся логика работала в оффлайне. Всё получилось и, видимо, имеет смысл статью написать.
                            • 0
                              Jey, буду ждать с нетерпением вашу статью, очень интересно узнать о вашей реализации =), и если вы её напишите, я буду первым кто бросит вам в карму +1 )))
                              Подскажите, сколько времени у вас ушло от идеи до реализации вашей системы управления через интернет?
                              Тут в комментариях уже столько всего написано, но я повторюсь. «Зависимость» NinjaBlocks от интернета — это зло, от котрого нужно избавляться. Поэтому предлагаю создать полностью автономный центр и к нему в качестве «вкусной плюшки» прикрутить NinjaBlocks и ни в коем случае не доверять серверу командовать, а использовать его только как пульт дистанционного управления для домашнего центра.
                            • 0
                              Видимо сайт изменился, не могу найти страничку с описанием возможных устройств для создания виджетов. У вас нигде не осталось списка?

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.