Умный дом своими руками. Часть вторая: описание протокола

Рейтинг пользователей: / 13
ХудшийЛучший 
Проекты - Разное

sh
Продолжение цикла статей об умном доме. Начало было здесь.

Протокол состоит из четырех частей:

Поле

Длина
(байты)

Постоянное
значение (HEX)

Стартовые байты

2

F0FF

Пакет данных

До 24

-

Чек сумма

1

-

Стоповые байты

2

F0FE

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

Пакет данных – непосредственно сами полезные данные, могут иметь длину до 24 байт и не могут быть пустыми. Значение 24 обусловлено ограничения буфера nRF24L01 в 32 байта. Для не «радио» устройство в принципе не критично.

Чек сумма – рассчитывает по принципу контрольной суммы по AppNote 27 от Maxim. Исторически был использован от первого устройства который работал с ds18b20. Используется для контроля принятого пакета на целостность.

Стоповые байты – передаются всегда в конце пакета данных, имеют всегда одно и тоже значение F0FE. Служат для разбора поступивших данных и разделения потока данных на пакеты.

По rs485 все данные передаются в бинарном виде.

Для двухбайтных данных в Пакете данных сначала идет младший, потом старший байт.

Применяется следующий общий принцип формирования протокола:

  1. собирается Пакет данных;
  2. рассчитывается CRC для собранного пакета данных;
  3. дописывается стартовый байт;
  4. дописываем стоповый байт.

Далее описываются все части Пакета данных.

Структура Пакета данных

Поле

Длина
(байты)

Постоянное
значение

ID устройства (передатчика)

2

-

ID устройства (приёмника)

2

-

Команда

1

-

Параметры команды

до 19

-

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

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

Команда – представляет собой один байт, характеризующий назначение Пакета данных, принципа и структуры разбора Параметров Пакета данных. Для каждого действия имеет уникальное значение. Например, запрос температуры и ответ содержащий температуру будут иметь разные значения в поле Команда. Это позволяет реализовать уникальный обработчик для каждого Пакета данных в зависимости от кода Команды.

Параметры команды


Структура пакета данных

ID устройства
(передатчика)

(2 байта)

ID устройства
(приёмника)

(2 байта)

Команда

(1 байт)

Параметры
команды

(длина до 19 байт)

Структура ID устройства:

Тип канала + тип устройства (1 байт)

8-ой бит:

0-Rs485;

1-радиоканал;

Остальные 7 бит:

Тип устройства

Уникальный номер (1 байт)

Тип устройства (красным выделено реализованое):

Ретранслятор: 00000001b = 01h
Сценарист: 00000010b = 02h
Гигрометр (влажность): 00000011b = 03h
Контроллер DS18b20: 00000100b = 04h
Модули реле: 00000101b = 05h
Rs485 пульт с ЖКИ: 00000110b = 06h
Диммер: 00000111b = 07h
IR приёмник: 00001000b = 08h
Logger: 00001001b = 09h
Barometr: 00001010b = 0Ah

Структура Команда (DEC)

Код команды (DEC)

Команда

Параметры

команды

Длина параметра (байты)

1

Квитанция (подтверждение получения пакета и взятие его в исполнение)

CRC подтверждаемой команды

1

2

Запрос на присутствие (Ping)

Нет

3

Ответ на присутствие (Pong)

Нет

4

Запрос значений температуры с датчиков

ROM датчика или пусто для всех датчиков

до 8 байт

5

Ответ со значением температуры с датчиков

ROM датчика

+

Значение температуры[4]

до 12 байт

6

Запрос значения задержки опроса датчиков

нет

7

Ответ со значением задержки опроса датчиков

Кол-во секунд от 0 до 65535

2

8

Установить значение задержки опроса датчиков

Кол-во секунд от 0 до 65535

2

9

Запрос значения скорость передачи данных

нет

10

Ответ со значением скорость передачи данных

Значение скорости от 9600 до 65535

2

11

Установить скорость передачи данных (по умолчанию 9600 бод)

Значение скорости от 9600 до 65535

2

12

Включить вывод отладочных сообщений в шину

Нет

13

ВЫключить вывод отладочных сообщений в шину

нет

14

Запрос количества найденных DS18X20

нет

нет

15

Количество найденных DS18X20

Количество датчиков

1

16

Запрос статистики работы устройства

Нет

нет

17

Ответ со статистикой

  1. количество сбросов устройства не по причине включения питания
  2. количество команд reset для DS18b20
  3. количество полученных presence от датчиков температуры
  4. количество выявленных несовпадений crc при измерении температуры
  5. количество выявленных несовпадений crc при получении команды из сети
  6. датчика температуры по которому в последний раз была ошибка

12

18

Запрос на пересканирование DS18X20

нет

нет

19

Ответ при разрядившейся батарее у датчика с батарейным питанием

нет

21

Запросить значение влажности

нет

22

Ответ со значением влажности

ROM датчика[8]

+

% влажности воздуха[2]

10

23

Запрос атмосферного давление

нет

нет

24

Ответ атмосферного давление

ROM датчика[8]

+

% давление в мм. Ртутного столба[2]

1

25

запрос напряжения на питающей батарее устройства

Нет

нет

26

выдача напряжения на питающей батарее устройства

ROM датчика[8]

+

Напряжение питания *10

10

99

Отладочное сообщение

  1. буквенный параметр показывающий в каком месте программы выводится отладочное сообщение
  2. входные параметры функции
  3. входные параметры функции
  4. вЫходные параметры функции (результат)

4

Примеры

Все примеры даны для реальных устройств, чтобы было понимание конкретики. В описании всех команд (таблицы) не указано поле со стартовым, стоповым байтами и crc (для сокращения размера документа). В пакете, эти байты приведены.

Все запросы и ответы приведены для формата, который использует Hercules SETUP utility (http://www.hw-group.com/products/hercules/index_en.html)

Квитанция (подтверждение на запрос)

ID устройства (передатчика)

(2 байта)

ID устройства (приёмника)

(2 байта)

Команда

(1 байт)

CRC

(1 байт)

0201h

0401h

01h

08h

Rs485, сценарист

Контроллеру ds18b20

квиток

Crc команды

Пакет: $F0$FF$02$01$04$01$01$08$F0$FE

Ping устройства «контроллер ds18b20» от Logger

ID устройства (передатчика)

(4 байта)

ID устройства (приёмника)

(4 байта)

Тип переменной

(1 байт)

0901h

0401h

02h

Logger

Rs485, контроллер ds18b20

Ping (запрос)

Пакет: $F0$FF$02$01$04$01$02$EA$F0$FE

Ответ на «Пинг» устройства от контроллер ds18b20 на Logger

ID устройства (передатчика)

(4 байта)

ID устройства (приёмника)

(4 байта)

Тип переменной

(1 байт)

0401h

0901h

02h

Rs485, контроллер ds18b20

Logger

Ping (ответ)

Пакет: $F0$FF$04$01$02$01$02$A7$F0$FE

Запрос на отправку температуры с датчиков ds18b20

ID устройства (передатчика)

(4 байта)

ID устройства (приёмника)

(4 байта)

Тип переменной

(1 байт)

Значение

0201h

0401h

04h

00h

Сценарист

Rs485, контроллер ds18b20

Температура

Получить температуру со всех датчиков

Пакет: $F0$FF$02$01$04$01$04$00$3D$F0$FE

Отправка температуры от ds18b20

ID устройства (передатчика)

(4 байта)

ID устройства (приёмника)

(4 байта)

Тип переменной

(1 байт)

Параметр
(HEX)

Значение

crc

0401h

0000h

05h

28f2602402000022

e204

34h

Rs485, контроллер ds18b20

всем

Ответ с температурой

28f2602402000022

E204(HEX)
=04E2(HEX)
=12,5 градуса Цельсия

Пакет: $F0$FF$04$01$00$00$05$28$f2$60$24$02$00$00$22$e2$04$31$F0$FE

Установка задержки опроса датчиков температуры ds18b20

ID устройства (передатчика)

(4 байта)

ID устройства (приёмника)

(4 байта)

Тип переменной

(1 байт)

Параметр

Значение

0201h

0401h

05h

08h

2800h

Сценарист

Rs485, контроллер ds18b20

Получить/установить задержку опроса датчиков

Установить значение задержки опроса датчиков

0028h=40d секунд

Пакет: $F0$FF$02$01$04$01$08$28$00$4F$F0$FE

Установка скорости передачи данных в 1920 бод

ID устройства (передатчика)

(4 байта)

ID устройства (приёмника)

(4 байта)

Тип переменной

(1 байт)

Значение

0201h

0401h

0Bh

4B00h

Сценарист

Rs485, контроллер ds18b20

Установить скорость передачи данных

19200 бод

Пакет: $F0$FF$02$01$04$01$0B$00$4B$7A$F0$FE

Включить вывод отладки в USART

ID устройства (передатчика)

(4 байта)

ID устройства (приёмника)

(4 байта)

Тип переменной

(1 байт)

0201h

0401h

0Ch

Сценарист

Rs485, контроллер ds18b20

Включить вывод отладки

Пакет: $F0$FF$02$01$04$01$0C$F5$F0$FE

Выключить вывод отладки в USART

ID устройства (передатчика)

(4 байта)

ID устройства (приёмника)

(4 байта)

Тип переменной

(1 байт)

0201h

0401h

0Dh

Сценарист

Rs485, контроллер ds18b20

ВЫключить вывод отладки

Пакет: $F0$FF$02$01$04$01$0D$AB$F0$FE

 Обсудить на форуме (0 комментариев).

Добавить комментарий

Правила комментирования

Запрещается вводить оскорбительные тексты, использовать нецензурные выражения, публиковать экстремистские призывы, давать ссылки на сайты, не имеющие отношения к теме обсуждения. Все сообщения, нарушающие данные требования, будут удалены без уведомлений, а их авторы - заблокированы.
Незарегистрированные посетители не могут вводить ссылки, BB-коды и т.п., зарегистрированные - могут. Подробности о возможностях, доступных зарегистрированным посетителям, см. в разделе Помощь.


Защитный код
Обновить



Темы форума
Комментарии
Статистика
Просмотров:
mod_vvisit_counterСегодня726
mod_vvisit_counterВчера2124
mod_vvisit_counterНа этой неделе726
mod_vvisit_counterНа прошлой неделе490240
mod_vvisit_counterВ этом месяце1258685
mod_vvisit_counterЗа все время15774627

Ваш IP: 54.162.232.51
 , 
24 Июл. 2017