Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Открытый проект умного дома

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.04.2012, 13:13   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Описание протокола "Умный дом"

Протокол конечно можно заимствовать у Z-Wave или Smart-Bus
но это позже , сейчас на этапе тестирования и отладки буду использовать более простой самописный протокол. Если есть идеи и пожелания пишите

Код:
[старт байт] [инднтнфикатор пакета] [ID узла] [команда] [состояние] [состояние] [состояние] [состояние] [стоп байт]
      FF                '#'            1-FF      'D'        0-FF       0-FF         0-FF        0-FF        FF
Описание протокола:

Стартовый и стоповый байты служат для снижения ошибок при случайном возникновении помехи на линии

Идентификатор направления пакета нужен для того что бы узлы понимали от кого идет пакет, от центрального или от второстепенного узла
Правда я не уверен что это нужно, но пускай будет по взрослому
*-пакет от второстепенного узла
#-пакет от центрального узла

ID узла-назначается центральным узлом в процессе настройки системы, так как устройств на шине не может быть больше чем 255 то и
адресацию нет смысла делать больше чем 255. Тем более нет смысла делать адреса фиксированными(32 бита) так как это усложнит процесс
настройки системы и увеличит длину пакета.


Описание некоторых Команд:

D-Управление Dimmer, Выключателями, Жалюзи, Розетками.
Для Dimmer состояние может изменятся от 0-выкл до 255 -вкл. с шагом 10
Для выключателя используется статус с двумя состояниями 0 и 255
Для спаренного выключателя используется два статуса
Для Жалюзи тоже самое что и для выключателя

S-Команда для получения состояния устройства, устройство должно отправить центральному узлу пакет со своими состояниями
4 байта состояния потому что может быть спаренный выключатель плюс датчик тока в одном флаконе
первые два байта это состояние диммеров или выключателей, а
третий и четвертый байт состояния, это потребляемая мощность или ток нагрузки .


M-Датчик движения, используется только для запроса статуса датчика.
Датчик движения можно будет ассоциировать с любым выключателем( выключателями ) в сети, то есть датчик движения сможет включать
любые источники.

I-ИК предатчик для управляющего кода использует 4 байта состояния
ИК предатчик можно будет ассоциировать с любым выключателем( выключателями ) в сети, то есть пульт от телевизора сможет включать
любые источники.

R-ИК приемник для управляющего кода использует 4 байта состояния

T-Термостат, в статусе задается температура термостата

C-Датчик температуры

А-Датчик атмосферного давления

W-Датчик влажности

О-Датчик освещенности

P-Датчик присутствия

U-Ультразвуковой датчик приближения

L-Датчик протечки

E-Конец связи, после этой команды на шине на 10 сек. наступает тишина и это даст возможность устройствам в порядке своей адресации
(очередности) отправлять статусы центральному узлу или обмениваться с другими узлами. Например вы включили выключателем свет, а
центральный узел об этом не будет знать в течении 10сек., то есть до следующего опроса статусов центральным узлом . В общем эта команда дает устройствам разрешение самим отправлять статус не дожидаясь запроса центрального узла.
Admin вне форума   Ответить с цитированием
Старый 01.11.2012, 19:37   #2
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию Modbus RTU

А я вот все думал над этой темой и решил все-же применить промышленный протокол MODBUS RTU. Благо с нуля писать не нужно есть хорошая библиотека. Ссылка для закачки
Автор: Stéphane Raimbault
Можно обвязывать в сеть несколько Ардуин по RS485, собрав простую схему на МС max485.

Для отладки можно использовать Free QModbus.

Для роутера(ов) на базе OpenWrt можно также применить готовую библиотеку этого автора, в репозитариях уже есть полноценная библиотека libmodbus для работы как по Modbus RTU, так и по Modbus TCP/IP. Есть описание и примеры использования.
https://github.com/stephane/libmodbus
https://github.com/stephane/libmodbu...ive/master.zip

Единственный не приятный момент, для написания сервера или клиента на Си нужно делать кросс-компиляцию под роутер.
Хотя настоящих джидаев это не остановит

Думаю скоро выложу программку под роутер

Последний раз редактировалось andr128; 11.11.2012 в 09:00.
andr128 вне форума   Ответить с цитированием
Старый 01.11.2012, 21:24   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Спасибо!
Очень интересная находка, а главное не нужно изобретать велосипед
Admin вне форума   Ответить с цитированием
Старый 10.11.2012, 14:12   #4
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию тестирование Modbus на Arduino

Мои эксперименты с Modbus
Нажмите на изображение для увеличения
Название: arduino_modbus.jpg
Просмотров: 1086
Размер:	589.6 Кб
ID:	610

В arduino залита следующая программа:
Код:
/*
Test Modbus RTU - Arduino
Для простоты и уменьшения потребления памяти 
поддерживается только две следующие функции Modbus: 
- read holding registers   (0x03)
- write multiple registers (0x10)
*/

#include <SoftwareSerial.h>
#include <Modbusino.h>


const int RL0 = 22;
const int RL1 = 24;
const int RL2 = 26;
const int RL3 = 28;
const int rl_arr[] = {RL0,RL1,RL2,RL3};
const int regs = 10; // количество регистров
const int ID_slave = 25;

uint16_t tab_reg[regs]; //задаем массив регистров

// Инициализация SLAVE, идентификатор (адрес) в сети ID = 25
ModbusinoSlave modbusino_slave(ID_slave);

// на цифр. выходы сразу записываем значение регистров
// любое значение > 0 это HIGH, 0 - LOW   

void SetRelay() {
int i;
for (i = 0; i < 4; i++) {
  digitalWrite(rl_arr[i], tab_reg[i]); 
 }
}

void setup() {
  modbusino_slave.setup(115200);
  pinMode(RL0, OUTPUT); // установка цифровых вх/вых в режим выхода   
  pinMode(RL1, OUTPUT);
  pinMode(RL2, OUTPUT);
  pinMode(RL3, OUTPUT);
}

void loop() {
  modbusino_slave.loop(tab_reg, regs);
  SetRelay();
  tab_reg[9] = analogRead(A0); //запись аналогового значения в 9-ый регистр
}
Для управления я использовал QModbus

здесь я щелкаю реле
Нажмите на изображение для увеличения
Название: write_modbus.png
Просмотров: 1028
Размер:	17.3 Кб
ID:	612

а здесь читаю аналоговый вход
Нажмите на изображение для увеличения
Название: read_modbus.png
Просмотров: 969
Размер:	17.2 Кб
ID:	611

На время эксперимента я специально подключился с помощью стороннего преобразователя TTL-USB к serial порту RX0, TX0 т.к. планирую сделать TTL-RS485 преобразователь на MAX485.
Чтобы все было "по взрослому"

вот планируемая схема ttl-rs485.zip

Последний раз редактировалось andr128; 17.12.2012 в 05:50.
andr128 вне форума   Ответить с цитированием
Старый 23.11.2012, 07:36   #5
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1310
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

Савсем не могу понять как это будет работать!
Вот к примеру у меня дома на каждое помещение стоит по ардуине.
Прихожая, ванна, кухня, две комнаты. Итого пять штук. Это к примеру!!!
В прихожей стоит мегаардуина, она будет главной и подключена к домашнему серверу. Сначала думал сервером будет роутер, но потом решил что будет роутер, а за ним полноценный комп-сервер, формфактор пока неважен (ноутбук например), просто хочу чтоб в прихожей на стене был монитор с тачскрином. На нём будет включаться/отключаться сигнализация и выводится всякие данные. Также вся инфа и управление будет доступна через инет (web-браузер), чтоб можно было и с андройдтелефона и с айпада всем рулить откуда угодно.Так же планируется пара IP-вебкамер, и в прихожей камера напрямую к серверу подключенная.
В общем здесь всё просто, соединить мегаардуину с сервером, написать веб интерфейс, настроить apache.
GSM-сигнализация, подключается к мегаардуине.
В случае отключения электроэнергии ноутбуку-серверу это не повредит, равно как и мегаардуине подключённой к нему по USB, вот для остальных ардуин и GSM нужно делать автономное питание, какой-то аккумулятор.
Я немного отвлёкся от протокола, но с другой стороны от части из организации железа вытекает понимание как всё это связать.
Ардуины размещённые в разных помещениях следят за разными датчиками, показаниями и управляют устройствами (свет, жалюзи, медия, розетки и ещё чёрте что).

Квартира у меня сейчас находится в затяжной стадии ремонта, посему с проводами проблем нет! Но вот как проложить эти самые провода?
А больше всего интересует как все ардуины будут общаться меж собой по RS-485?
Вот предположим все они находятся в режиме приёма. Выключатель на кухне ( к примеру инфракрасный ) http://cyber-place.ru/showthread.php?t=237 ,работает через "кухонную ардуину"
, он дал сигнал и свет зажёгся.
По идее "кухонная ардуина" должна сообщить об этом основной мегаардуине.
(тут наверно ещё стоит добавить базу MySQL на сервер, чтоб мегаардуина записала в неё что свет на кухне включен).
(хотя всё можно и в мегаардуине хранить без базы, но с базой мне кажется лучше, значения никуда не потеряются в случае чего.....)
А "ванная ардуина" в этот момент пытается сообщить мегаардуине что протечка воды.
И в тот же момент, жена сидя в комнате, нажимает кнопку на айпаде выключить свет. Этот сигнал идёт на сервер, с сервера на мегаардуину, а та в свою очередь пытается отправить сигнал на "комнатную ардуину", чтоб та выключила свет. После чего "комнатная ардуина" выключая свет пытается отправить сигнал на мегааардуину о том , что она выключила свет, далее мегаардуина должна сообщить серверу что, свет в комнате погашен и чтоб сервер отправил сигнал об этом жене на айпад! Тут тоже получается , что страница должна постоянно обновляться или как-то по другому? А я в тот же момент со своего андройдфона, выключаю свет в другой комнате, после чего произойти должно тоже что и у жены на айпаде.
Конечно некоторые действия могут подождать чутка, но другие требуют оперативности!

И начинается такая чахорда от которой у меня голова кругом идёт))))) правда щас уже 7 утра , а я ещё не спал)))))
Вопщем с этим RS-485 салат какой-то........)))))

И это всего лишь маленькая-маленькая часть функций "умного дома" ))))))))

Извиняйте за ошибки, спать охота.....))))

Последний раз редактировалось stD; 23.11.2012 в 08:12.
stD вне форума   Ответить с цитированием
Старый 23.11.2012, 08:08   #6
filinmd
Senior Member
 
Регистрация: 18.09.2012
Адрес: Moscow
Сообщений: 157
Вес репутации: 0
filinmd is an unknown quantity at this point
Отправить сообщение для filinmd с помощью ICQ
По умолчанию

вот честно говоря все тоже самое у меня в голове сейчас происходит
filinmd вне форума   Ответить с цитированием
Старый 23.11.2012, 20:29   #7
andr128
Senior Member
 
Аватар для andr128
 
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1604
andr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond reputeandr128 has a reputation beyond repute
По умолчанию

Мда, много написали и сами запутались.
1. Все управляемые ардуины в сети должны иметь свой уникальный ID адрес.
2. Ардуины должны работать только в режиме прослушивания, т.н. режим помощник и не чего ни куда не передавать без команды от головного ПК (Роутера).
3. Главный ПК работает в режиме - мастер. По его инициативе происходит периодический опрос и управление помощниками. Он в цикле перебирает всех помощников сохраняет переменные их состояния в свою базу (таблицу переменных), а также по инициативе пользователя либо по алгоритму меняет состояние выходов помощников т.е. управляет ими.

Вот собственно и весь алгоритм.

Что будет у вас работать в режиме мастера, решать вам. Эту роль может выполнять ПК или роутер. Для Ардуины эту роль поручать не стоит, ввиду низкой производительности, малого объема памяти и т.д., а быть просто посредником между более мощным железом нет смыла.
На роутере или ПК можно уже "городить" сайт и т.д. и т.п. чтобы управлять уже по более "высокому уровню".

Последний раз редактировалось andr128; 23.11.2012 в 20:40.
andr128 вне форума   Ответить с цитированием
Старый 23.11.2012, 21:59   #8
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1310
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

Цитата:
Мда, много написали и сами запутались.
Да я когда проснулся, посмотрел...... чёрт возьми что у меня вголове творилось))))))))

Далее по пунктам:

1. Это само собой!
2. ?
3. К главному пк как предполагаешь подключаться? Я перед ним хотел мегаардуину поставить на случай если комп глюканёт и потребуется перезагрузка!!! Мне кажется имеет смысл оставить её как посредника! А если глюканёт ардуинную сеть, то можно все состояния взять с сервера из БД.

По второму вопросы ещё не сформировал!

Последний раз редактировалось stD; 23.11.2012 в 22:07.
stD вне форума   Ответить с цитированием
Старый 24.11.2012, 00:02   #9
NEXT
Member
 
Регистрация: 23.11.2012
Сообщений: 47
Вес репутации: 184
NEXT has much to be proud ofNEXT has much to be proud ofNEXT has much to be proud ofNEXT has much to be proud ofNEXT has much to be proud ofNEXT has much to be proud ofNEXT has much to be proud ofNEXT has much to be proud ofNEXT has much to be proud of
По умолчанию

Скажите, а почему вы не расматриваете например протокол 1-wire вместе с RS 485? ведь легко на 1-wire повесить чтение и управление устройствами и датчиками , а на RS 485 взаимодествие между собой ардуин например?
NEXT вне форума   Ответить с цитированием
Старый 24.11.2012, 00:17   #10
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1310
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию

То есть ты предлагаешь к одной ардуине прицепить все существующие датчики и узлы управления на одну wire ?
В общем то взаимодействие ардуин по RS-485 и есть самое главное.
Или лучше всего обрисуй свою схему подробно!

Последний раз редактировалось stD; 24.11.2012 в 00:53.
stD вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 11 (пользователей: 0 , гостей: 11)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 12:46. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика