Ср июн 28, 2023 00:24:31
Ср июн 28, 2023 00:29:52
Чтение конфигурации
Входные данные (0 байт):
Выходные данные (19 байт):
1 байт - конфигурационный байт;
1 байт -
Бит 0 – автоматический переход на зимнее/летнее время (1 - включено);
Бит 2,1 – действующее тарифное расписание (0- раб,1-суб,2-вос,3-спец);
Бит 3 - резерв;
Бит 4 - резерв;
Бит 5 - резерв;
Бит 6 - Включение парольной защиты чтения информации абонента;
Бит 7 - резерв;
1 байт – время индикации (в секундах, 5 <= t <= 60);
1 байт - Количество попыток доступа с неправильным паролем до блокировки интерфейса, 0-отключено;
1 байт - Ресурс батарейки (полное количество месяцев работы);
1 байт - Ресурс батарейки (количество оставшихся месяцев работы);
1 байт - День сохранения месячного среза по электроэнергии;
1 байт - День сохранения месячного среза по воде;
1 байт - День сохранения месячного среза по газу;
1 байт - Интервал усреднения профилей мощности;
1 байт - Роль устройства (информационный идентификатор, см. Таблицу 2);
1 байт - Побитовая информация о наличии реле: 1-реализовано в железе, 0-отключено. (0й-4й биты - реле №0-№4)
1 байт - Побитовая информация о типе управления реле: 1-импульсом 0,5 сек., 0-уровнем. (0й-4й биты - реле №0-№4)
1 байт - Побитовая информация о статусе реле: 1-разомкнуто, 0-замкнуто. (0й-4й биты - реле №0-№4)
1 байт - Побитовая информация о наличии пломб:1-реализовано в железе, 0-отключено. (0й-4й биты - реле №0-№4)
1 байт - Побитовая информация о статусе пломб:1-реализовано в железе, 0-отключено. (0й-4й биты - реле №0-№4)
1 байт - Код модуля связи на UART1. См. таблицу кодов;
1 байт - Код модуля связи на UART1. См. таблицу кодов;
1 байт - Код модуля связи на UART1. См. таблицу кодов.
1 байт - Побитовая информация о статусе реле: 1-разомкнуто, 0-замкнуто. (0й-4й биты - реле №0-№4)
1 байт - Побитовая информация о наличии пломб:1-реализовано в железе, 0-отключено. (0й-4й биты - реле №0-№4)
1 байт - Побитовая информация о статусе пломб:1-реализовано в железе, 0-отключено. (0й-4й биты - реле №0-№4)
0x1C - ReadDateTime
Чтение времени и даты
Входные данные (0 байт):
Выходные данные (7 байт):
7 байт: секунды, минуты, часы, день недели (Пн-1,Вт-2,Ср-3,Чт-4,Пт-5,Сб-6,Вс-0), день, месяц, год.
Входные данные (1 байт):
1 байт: номер фазы,
для однофазный устройств - число 1;
для трехфазных устройств (числа – 1,2,3).
Выходные данные (3 байт):
1 байт - номер фазы,
для однофазный устройств - число 1;
для трехфазных устройств (числа – 1,2,3);
2 байта - значение напряжение сети (для приведения к кВт значение необходимо делить на 100);
Ср июн 28, 2023 06:22:41
Ср июн 28, 2023 21:25:28
вторая строка (получение ответа) между 0x13 0x26 0x05 и 0x03 0x04 0x16 стоит 0x00 - вс
0x1C - ReadDateTime
Чтение времени и даты
Входные данные (0 байт):
Выходные данные (7 байт):
7 байт: секунды, минуты, часы, день недели (Пн-1,Вт-2,Ср-3,Чт-4,Пт-5,Сб-6,Вс-0), день, месяц, год.
Packet sent:
F 73 55 20 0 XX XX FE FF 1C 0 0 0 0 5C 55
Packets received: 3
73 55 7 0 FE FF XX XX 1C A8 43 5B 0 D 33 15 3 1C 6 17 E8 55
Packet lengt: 22
7 0 FE FF XX XX 1C A8 43 5B 0 D 33 15 3 1C 6 17
E8
Last Request: 28-06-23 21:51:13 Ср
команда 0x05 (0x04 подкоманда) не описана, возможно ошибки как и с командой 0x28 дополнительных режимов индикации, и она не имеет 14-го байта, а значит скорей всего должна формироваться с длиной 0x20 без 14-го байта и получать 3 пакета, а не 4. (надо проверять)
Входные данные (1 байт):
1 байт - тип энергии,
00 - активная прямая;
01 - активная реверсивная;
02 - реактивная прямая;
03 - реактивная реверсивная;
04 - активная абсолютная;
05 - реактивная абсолютная;
06 - R1 (реактивная первый квадрант);
07 - R2 (реактивная второй квадрант);
08 - R3 (реактивная третий квадрант);
09 - R4 (реактивная четвертый квадрант).
Мой пульт отправляет 0xFEFF
transmitt_byte[7] = 0xfe; // было 0x09
transmitt_byte[8] = 0xff;
Ср июл 05, 2023 07:58:07
Ср июл 05, 2023 13:25:10
Ср июл 05, 2023 23:33:41
int gdo0 = 2;
int gdo0 = 22;
st:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6388
entry 0x400806b4
Config version: mirtek_gw_v1
Config size: 555
Loading configurations
[iwcAll]
|-- [iwcSys]
| |-- 'iwcThingName' with value: 'Mirtek_GW'
| |-- 'iwcApPassword' with value: <hidden> - пароль на веб страницу
| |-- [iwcWifi0]
| | |-- 'iwcWifiSsid' with value: 'ВАША ТОЧКА ДОСТУПА'
| | \-- 'iwcWifiPassword' with value: <hidden> - пароль к Вашей точке доступа
| \-- 'iwcApTimeout' with value: '30' - таймер 30 сек.
|-- [iwcCustom]
| |-- [mqtt]
| | |-- 'mqttServer' with value: 'IP адрес MQTT сервера'
| | |-- 'mqttUser' with value: 'Логин на MQTT сервере'
| | \-- 'mqttPass' with value: <hidden> - пароль к учетке MQTT сервера
| \-- [group1]
| \-- 'MeterAdress' with value: 'Номер счетчика'
\-- [hidden]
Ready.
SPI Connection CC1101 OK - соединение с CP1101
State changing from: 0 to 2 - не знаю почему в библиотеке так, но разумнее было 0 to 1
Setting up AP: Mirtek_GW - поднята точка доступа. Роль - сервер
Use password: <hidden> - по умолчанию пароль 12345678
AP IP address: 192.168.4.1 - IP адрес в режиме точки доступа для настроек
AP timeout (ms): 30000 - таймер локальной точки доступа для настроек - 30 сек.
State changed from: 0 to 2 - не знаю почему в библиотеке так, но разумнее было 1 to 2
State changing from: 2 to 3
Connecting to [ВАША ТОЧКА ДОСТУПА] (password is hidden) - подключение к Вашей точке доступа в роли клента
WiFi timeout (ms): 30000 - таймер для подключения к Вашей точке доступа - 30 сек.
State changed from: 2 to 3
WiFi connected - подключено к Вашей точке доступа
IP address: ЛОКАЛЬНЫЙ IP-адрес от полученный роутера
State changing from: 3 to 4
Active mDNS services: 1
Accepting connection
State changed from: 3 to 4
Connecting to MQTT server... - подключение к MQTT серверу
Connected! - подключен к MQTT серверу
"mirtek/параметры и зачения"
"mirtek/" + (String)MeterAdressValue + "/параметры и значения"
Где (String)MeterAdressValue - номер счетчика из настроек, соответственно путь стал mirtek/12345/параметры и значения
Чт июл 06, 2023 10:17:09
Чт июл 06, 2023 20:49:02
Чт июл 06, 2023 22:21:57
Пт июл 07, 2023 14:45:19
//вычисляем и добавляем байт crc
crc.restart();
crc.setPolynome(0xA9);
for (int i = 3; i < (transmitt_byte[0] - 1); i++)
{
crc.add(transmitt_byte[i]);
}
crc.reset();
crc.setPolynome(0xA9);
for (int i = 2; i < (bytecount - 2); i++)
{
crc.add(resultbuffer[i]);
Serial.print(resultbuffer[i], HEX)
Serial.print(" ");
}
Serial.println();
myCRC = crc.getCRC();
Serial.print("Calculate myCRC: ");
Serial.println(myCRC, HEX);
Пт июл 07, 2023 22:12:08
Сб июл 08, 2023 15:26:07
Сб июл 08, 2023 17:12:40
Пн июл 10, 2023 08:07:40
if ((resultbuffer[0] == 0x73) and (resultbuffer[1] == 0x55) and (resultbuffer[2] == 0x07) and (resultbuffer[6] == (atoi(MeterAdressValue) & 0xff)) and (resultbuffer[7] == ((atoi(MeterAdressValue) >> 8) & 0xff)) and (resultbuffer[21] == 0x55))
Пн июл 10, 2023 09:46:49
Пн июл 10, 2023 13:50:29
Байтстаффингу подвергаются все байты пакета за исключением стартовых и стопового.
Стартовая последовательность - 0х73 0х55, стоповая - 0х55, все что между ними, подлежит байтстаффингу.
При байтстаффинге анализируется каждый байт, и:
0х55 заменяется на 0х73 0х11,
0х73 заменяется на 0х73 0х22.
При обратном байтстаффинге проводится противоположная замена.
Вт июл 18, 2023 00:07:58
Вт июл 18, 2023 10:30:20
Пн июл 31, 2023 13:04:46
int j = 0; //Значение компенсирующего смещения индекса
for (int i = 0; i < bytecounttemp; i++)
{
resultbuffer [i-j] = tempbuffer[i]; //Записываем текущее значение байта из временного буфера в выходной
bytecount++; //Считаем длину результирующего буфера
if (tempbuffer[i] == 0x73 and (i + 1 < bytecounttemp))
{
if (tempbuffer[i + 1] == 0x11) //Проверяем что последовательность 0x73 0x11
{
resultbuffer[i-j] = 0x55; //Меняем последовательность 0x73 0x11 на 0x55
i++; //Пропускаем следующий байт
j++; //Компенсируем индекс результирующего буфера при пропуске байта
}
if (tempbuffer[i + 1] == 0x22) //Проверяем что последовательность 0x73 0x22
{
i++; //В результирующем буфере уже лежит 0x73 вместо 0x73 0x22, пропускаем следующий байт
j++; //Компенсируем индекс результирующего буфера при пропуске байта
}
}
}