Перейти к основному содержимому

Навык iRidium для VK Маруся

VK Маруся - голосовой помощник от компании VK.

документация обновлена 01.01.2024

Маруся - это дружелюбный голосовой помощник от VK, работающий с Капсулой и Капсулой Мини и прочими устройствами других производителей.

Поддерживает устройства с установленным приложением Маруся:

  • на смартфон;
  • на планшет.

Маруся понимает только русский язык. Через колонку, Маруся может управлять умным домом через iRidium cloud и сервер iRidium. Вы можете произнести команду "Включи свет", и лампочка загорится. Произнесите "Выключи свет" и лампочка погаснет. Всё просто!

Mail_Marusya_v3.jpg

Построить умную систему голосового управления просто:

Установите приложение "Маруся" на смартфон или планшет.

Запустите навык "Иридий", который научит Марусю взаимодействовать c iRidium. Подключитесь к объекту в облаке iRidium cloud.

Создайте умный дом на основе iRidium server, добавьте необходимые устройства и настройте логику проекта.

Попробуйте поработать с Марусей бесплатно в триальном режиме!

Работа в iRidium studio

  1. Создайте серверный проект.
примечание

Для корректного отображения устройств, установите последнюю версию iRidium studio с нашего сайта.

  1. Добавьте драйвер VK Marusia в проект.

VK_Marusia5.png

  1. Щелкните правой кнопкой по VK Marusia и добавьте умные устройства в проект (Add subdevice).

VK_Marusia1.png

  1. Переименуйте необходимые устройства, для удобства при использовании. Установите параметр Use name - Same as device name , если хотите использовать поле Name в качестве имени устройства, или укажите Use name - Enter custom , если хотите задать имя устройства в отдельном поле (Device name ).

VK_Marusia6.png

Важно
  • В качестве имени устройства разрешено использовать только кириллицу (без цифр, спец символов и буквы "ё").

  • Поле Device name позволяет создавать устройства с одинаковыми названиями в разных комнатах, для корректной работы приложения не используйте устройства с одинаковыми названиями в одной комнате.

  • По умолчанию параметр Use name имеет значение Same as device name - используется имя устройства введенное в поле Name . Имя устройства (Name ) должно быть уникальным и не может быть присвоено нескольким устройствам в проекте!

  • Переименовывать обратные связи устройств нельзя, так как они несут строго определенный смысл.

  1. Задайте значение Room, в дальнейшем оно позволит управлять группой устройств в заданной комнате.

VK_Marusia7.png

Важно
  • Название комнат распознает регистр, не называйте комнаты одноименно, для предотвращения появления двух комнат с одним и тем же названием (например, “кухня” и “Кухня”).

  • Переименовать комнату можно из приложения Маруся или в iRidium Studio . Чтобы переименовать комнату в iRidium Studio , удалите устройство в приложении Маруся , переименуйте комнату в серверном проекте и обновите проект на сервере и на облаке. Затем выполните процедуру обновления списка устройств в приложении Маруся .

Описание устройств и обратных связей

Устройства Маруси - это не реальные устройства, а только лишь интерфейс между реальными устройствами и Марусей. Вы должны реализовать функционал этих устройств в iRidium server или обеспечить связи с соответствующими физическими устройствами по тому или иному протоколу. iRidium предоставляет интерфейс с различными типами устройств:

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

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

Устройства

Лампа

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи лампу."
"Маруся, выключи лампу."
BrightnessУстановить яркость лампы.от 0 до 100"Маруся, установи яркость лампы на 10"
"Маруся, убавь яркость лампы"
"Маруся, сделай яркость 40 у лампы".
ColorTemperatureСделать свет теплее, холоднее.2000-9000"Маруся, сделай свет лампы теплее"
"Маруся, сделай холоднее свет у лампы"
"Маруся, установи у лампы дневной свет"
"Маруся, установи у лампы туманный свет".
BacklightУправление подсветкой1 / 0"Маруся, включи подсветку у лампы"
"Маруся, выключи подсветку у лампы".
примечание

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

Температура, КЦветЗначение по умолчанию
Мягкий белый2700Нет
Тёплый белый3400Нет
Белый4500Да
Дневной белый5600Нет
Холодный белый6500Нет

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

Датчик открытия/закрытия

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи датчик открытия закрытия"
"Маруся, выключи датчик закрытия открытия".
StatusСостояние датчикаopened — открыто
closed — закрыто
"Маруся, как открыт датчик открытия закрытия".

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

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи датчик температуры"
"Маруся, выключи датчик температуры".
ValueСостояние датчикаValue (°C)"Маруся, температура датчика температуры".

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

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи датчик влажности"
"Маруся, выключи датчик влажности".
ValueСостояние датчика0 - 100 %"Маруся, влажность датчика влажности".

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

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи датчик протечки", "Маруся, выключи датчик протечки".
StatusСостояние датчика"dry — нет протечки,
leak — протечка"

Датчик дыма

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи датчик дыма", "Маруся, выключи датчик дыма".
StatusСостояние датчика"detected — обнаружено,
not detected — не обнаружено,
high — высокий уровень."

Датчик движения

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи датчик движения", "Маруся, выключи датчик движения".
StatusСостояние датчика"detected — обнаружено,
not detected — не обнаружено."

Датчик наличия газа

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи датчик наличия газа", "Маруся, выключи датчик наличия газа".
StatusСостояние датчика"detected — обнаружено,
not detected — не обнаружено,
high — высокий уровень"

Вентилятор

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи вентилятор"
"Маруся, выключи вентилятор".
BacklightУправление подсветкой1 / 0"Маруся, включи подсветку у вентилятора"
"Маруся, выключи подсветку у вентилятора".
BlockБлокировка1 / 0"Маруся, включи блокировку у вентилятора"
"Маруся, выключи блокировку у вентилятора".
OscillationПрименить “вращение”1 / 0"Маруся, включи вращение у вентилятора"
"Маруся, выключи вращение у вентилятора".
Fan ModeУправление скоростью вентилятораlow - низкая скорость
medium - средняя скорость
high - высокая скорость
"Маруся, включи режим вентиляции у вентилятора на автоматический"
"Маруся, включи режим вентиляции у вентилятора на высокую скорость"
"Маруся, включи режим вентиляции у вентилятора на низкую скорость".

Термостат

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи термостат"
"Маруся, выключи термостат".
Thermostat ModeУстановить режим работы нагревателя:
Вентиляция(fan_only)
Осушение(dry)
Охлаждение(cool)
Обогрев(heat)
Автоматический режим(auto)
Эко-режим (eco)
fan_only
dry
cool
heat
auto
eco
"Маруся, переведи обогреватель в режим эко."
"Маруся, переведи электровентилятор в режим охлаждения."
Fan ModeУстановить скорость вентилятора:
Минимальная
Средняя
Максимальная
Автоматический режим(auto)
low
medium
high
auto
"Маруся, включи высокую скорость вентиляции."
"Маруся, выключи минимальную скорость вентиляции на вентиляторе."
Heat ModeРежим нагрева:
Авто
Максимальный
Минимальный
auto
max
min
"Маруся, включи максимальный нагрев."
Temperature CelsiusУстановить температуру на необходимое значение.Value (°C)"Маруся, выставь температуру водонагревателя на 23 градуса."
OscillationПрименить вращение1 / 0"Маруся, включи вращение на вентиляторе"
HumidityВключить увлажнение0 - 100 %"Маруся, поставь максимальную влажность."
"Маруся, установи влажность термостата на 45%."

Шторы

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, открой шторы."
"Маруся, закрой шторы."
Work SpeedСкорость работы:
Авто
Средняя
Быстрый
Медленный
Турбо
auto
medium
fast
slow
turbo
"Маруся, включи быструю скорость работы на шторах."
"Маруся, включи медленную скорость работы на шторах."
RangeПозиция штор0 - 100 %"Маруся, открой штору на треть."
"Маруся, открой штору на 50 процентов."

Обогреватель

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи обогреватель."
"Маруся, выключи обогреватель."
SoundВкл / Выкл.1 / 0"Маруся, включи звук у обогревателя."
"Маруся, выключи звук у обогревателя."
BlockВкл / Выкл.1 / 0"Маруся, включи блокировку у обогревателя"
"Маруся, выключи блокировку у обогревателя".
TemperatureУстановить температуру на необходимое значение.Value (°C)"Маруся, установи температуру обогревателя на 10"
"Маруся, сделай температуру 40 у обогревателя"
"Маруся, убавь температуру обогревателя"
"Маруся, увеличь температуру обогревателя".

Выключатель

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи выключатель"
"Маруся, выключи выключатель".

Розетка

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл.1 / 0"Маруся, включи розетку"
"Маруся, выключи розетки в зале".
BacklightУправление подсветкой1 / 0"Маруся, включи подсветку у розетки"
"Маруся, выключи подсветку у розетки".
ColorRGBУстановить цветовое значение0 - 16777215"Маруся, смени цвет подсветки на синий."

Лампа РГБ

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffВкл / Выкл1 / 0"Маруся, включи люстру."
"Маруся, выключи ночник."
BrightnessУстановить максимум\минимум.0 - 100%"Маруся, установи яркость ночника на минимум."
"Маруся, установи яркость светильника на максимум."
"Маруся, убавь яркость люстры."
"Маруся, прибавь яркость люстры."
RGBУстановить цветовое значение.0 - 16777215"Маруся, включи на торшере зеленый."
"Маруся, включи оранжевый свет."
BacklightУправление подсветкой1 / 0"Маруся, включи подсветку лампы."

Чтобы конвертировать значение от Маруси для работы с шинами, где имеются отдельные каналы для работы с RGB, воспользуйтесь скриптом.

var Marusia = IR.GetDevice("VK Marusia");
var device = IR.GetDevice("Modbus TCP");

IR.AddListener(IR.EVENT_TAG_CHANGE, Marusia, function(in_sName, in_sValue)
{
if (in_sName == "Лампа:RGB") {
var valueR = (in_sValue >> 24) & 0xFF;
var commandR = "Red"; //
setRGB(commandR, valueR);


var valueG = (in_sValue >> 16) & 0xFF; //Получение зеленого
var commandG = "Green"; //Имя канала в которой передается значение
setRGB(commandG, valueG); //Функция отправки значения

var valueB = (in_sValue >> 8) & 0xFF;
var commandB = "Blue";
setRGB(commandB, valueB);
}

IR.Log(" Красный " + valueR + " Зеленый " + valueG + " Синий " + valueB);

});

/*
/ отправляем на определенную команду значение
/ command - имя команды
/ value - значение
*/
function setRGB (command ,value){
device.Set(command, value);
}

Вентиляция Роял Клима

Обратная связьОписаниеЗначениеПримеры голосовых команд
On/OffСостояние вкл/откл.1 / 0"Маруся, включи вентиляцию."
"Маруся, выключи вентиляцию."
FanSpeedСкорость работы:
тихий
низкая
средняя
высокая
турбо
quiet
low
medium
high
turbo
"Маруся, включи низкую скорость вентиляции."
"Маруся, уменьши скорость вентиляции."
CurrentTemperatureЗначение температуры вытяжного воздуха с датчикаany value"Маруся, какая температура приточного воздуха."

Чтобы конвертировать значения скоростей приточного и вытяжного вентиляторов между Вентиляцией Royal Clima на шлюзе bus77 и устройством вентиляции от Маруси, воспользуйтесь правилом или скриптом.

Подсказка

Пример проекта с конвертацией значения скоростей приточного и вытяжного вентиляторов через скрипт:

Marusya_Script.sirpz

Скрипт, используемый в проекте-примере:

var Marusya = IR.GetDevice("VK Marusya"); // имя драйвера Маруси
var ModBus = IR.GetDevice("Bus77"); // имя драйвера

IR.AddListener(IR.EVENT_START, 0, function ()
{
IR.AddListener(IR.EVENT_TAG_CHANGE, Marusya, function(name, value)
{
IR.Log("От Marusya Name: " + name + " значение:" + value);

var NameChannelSetSupply = "";
var NameChannelSetExhaustFanSpeed = "";
var ResultForModBus = 0; //значение для МодБас
if(name == "Вентиляция Роял Клима:FanSpeed")
{
NameChannelSetSupply = "I-CAN-Modbus_тест:SupplyFanSpeed (Вентиляция Royal Clima 1)";
NameChannelSetExhaustFanSpeed = "I-CAN-Modbus_тест:ExhaustFanSpeed (Вентиляция Royal Clima 1)";
switch(value)
{
case "quiet":
{
ResultForModBus = 1;
ModBus.Set(NameChannelSetSupply, ResultForModBus);
IR.SetTimeout(100, function()
{
ModBus.Set(NameChannelSetExhaustFanSpeed, ResultForModBus);
IR.Log("Выставлено значение " + value + " В SupplyFanSpeed");
});
break;
}
case "low":
{
ResultForModBus = 2;
ModBus.Set(NameChannelSetSupply, ResultForModBus);
IR.SetTimeout(100, function()
{
ModBus.Set(NameChannelSetExhaustFanSpeed, ResultForModBus);
IR.Log("Выставлено значение " + value + " В SupplyFanSpeed");
});
break;
}
case "medium":
{
ResultForModBus = 5;
ModBus.Set(NameChannelSetSupply, ResultForModBus);
IR.SetTimeout(100, function()
{
ModBus.Set(NameChannelSetExhaustFanSpeed, ResultForModBus);
IR.Log("Выставлено значение " + value + " В SupplyFanSpeed");
});
break;
}
case "high":
{
ResultForModBus = 8;
ModBus.Set(NameChannelSetSupply, ResultForModBus);
IR.SetTimeout(100, function()
{
ModBus.Set(NameChannelSetExhaustFanSpeed, ResultForModBus);
IR.Log("Выставлено значение " + value + " В SupplyFanSpeed");
});
break;
}
case "turbo":
{
ResultForModBus = 10;
ModBus.Set(NameChannelSetSupply, ResultForModBus);
IR.SetTimeout(100, function()
{
ModBus.Set(NameChannelSetExhaustFanSpeed, ResultForModBus);
IR.Log("Выставлено значение " + value + " В SupplyFanSpeed");
});
break;
}
default:
{
IR.Log("Команда не запрограммирована!");
break;
}
}
}
});

IR.AddListener(IR.EVENT_TAG_CHANGE, ModBus, function(name, value)
{
var NameChannelSet = "";
var ResultForMarusya = 0; //значение для Маруси
IR.Log("От ModBus Name: " + name + " значение:" + value);
if(name == "I-CAN-Modbus_тест:SupplyFanSpeed (Вентиляция Royal Clima 1)" ||
name == "I-CAN-Modbus_тест:ExhaustFanSpeed (Вентиляция Royal Clima 1)")
{
NameChannelSet = "Вентиляция Роял Клима:FanSpeed";
switch(value)
{
case 1:
ResultForMarusya = "quiet";
Marusya.Set(NameChannelSet, ResultForMarusya);
break;
case 2:
ResultForMarusya = "low";
Marusya.Set(NameChannelSet, ResultForMarusya);
break;
case 3:
ResultForMarusya = "medium";
Marusya.Set(NameChannelSet, ResultForMarusya);
break;
case 7:
ResultForMarusya = "high";
Marusya.Set(NameChannelSet, ResultForMarusya);
break;
case 10:
ResultForMarusya = "turbo";
Marusya.Set(NameChannelSet, ResultForMarusya);
break;
default:
IR.Log("Команда не запрограммирована!");
}
}
IR.Log("От ModBus - Name: " + NameChannelSet + " значение:" + ResultForMarusya);
});
});
примечание

Голосовое управлении скоростями приточного и вытяжного вентиляторов происходит синхронно: скорость притока равна скорости вытяжки. Отправка значений в каналы SupplyFanSpeed и ExhaustFanSpeed осуществляется с задержкой 100 мс.

Подсказка

Пример проекта с конвертацией значения скоростей приточного и вытяжного вентиляторов через правила:

Marusya_Routines.sirpz

Обработка голосовых команд с помощью перенаправления значений

VK_Marusia4.png

Forwarding value to создает связь между каналом и фидбеком драйверов (не зависит от типа драйвера). При добавлении ссылки на другой тег создается связь между ними, которая пересылает значение в момент его записи в источник. Для добавления связи между драйвером голосового ассистента (VK Marusia) и драйвером оборудования (в нашем примере драйвер Modbus TCP) необходимо выполнить следующие шаги:

  1. Перейдите на вкладку Devices ;

  2. В настройках фидбэков драйвера VK Marusia укажите перенаправление значений в соответствующие команды драйвера Modbus TCP ;

  3. В настройках фидбэков драйвера Modbus TCP укажите перенаправление значений в соответствующие команды драйвера VK Marusia .

примечание

Если необходимо преобразовать полученное значение, то используйте Script Modifier. Подробное описание настройки перенаправления значений по ссылке

Пример скрипта:

function ThermostatMode(in_Type, in_Name, in_Value)
{
switch(in_Value) {
case 'fan_only' :
in_Value = 1;
break;
case 'dry' :
in_Value = 2;
break;
case 'cool' :
in_Value = 3;
break;
case 'heat' :
in_Value = 4;
break;
case 'auto' :
in_Value = 5;
break;
case 'eco' :
in_Value = 6;
break;
default:
IR.Log("Error!");
}

return in_Value;
}

Обработка голосовых команд с помощью скрипта

Скрипт обеспечивает прием голосовых команд от Маруси и перенаправляет их на реальные устройства. В данном примере это устройства в сети Modbus TCP.

  1. Перейдите в редактор скрипта, нажав кнопку JS.

  2. Нажмите +, затем выберите New Script.

  3. Добавьте свой скрипт.

Пример:

var Marusia = IR.GetDevice("VK Marusia");
var Modbus = IR.GetDevice("Лампа");

//Логирование команд, отправленных драйвером Маруси:
IR.AddListener(IR.EVENT_TAG_CHANGE, Marusia, function(name, value){
IR.Log("Marusia! Device tag: " + name + " , value: " + value);

});


//Пример управления лампой:

IR.AddListener(IR.EVENT_TAG_CHANGE, Modbus, function(name, value){ //прослушиваем устройство на изменение тега.
switch (name) {
case "Feedback 1":
if (value == 1){ //устройство включено
Marusia.Set("Лампа:On/Off", 1) // отсылаем в канал драйвера Маруси значение 1 - устройство включено.
}
if (value == 0){ //устройство выключено
Marusia.Set("Лампа:On/Off", 0) // отсылаем в канал драйвера Маруси значение 0 - устройство выключено.
}
break;
case "Feedback 2":
Marusia.Set("Лампа:Brightness", value); // отсылаем в канал драйвера Маруси значение яркости лампы.
break;
}
});

IR.AddListener(IR.EVENT_TAG_CHANGE, Marusia, function(name, value){ //прослушиваем команду от драйвера Маруси.
switch (name) {
case "Лампа:On/Off": //если изменение прошли в теге лампы, начинаем выполнять действия.
if (value == 1){ //при отправке команды от Маруси на включение, в теге появится 1. Modbus.Set("Command 1", 1);//передаем команду от Маруси устройству 1 - включение.
}
if (value == 0) { //при отправке команды от Маруси на выключение, в теге появится 0. Modbus.Set("Command 1", 0);//передаем команду от Маруси устройству 0 - выключение.
}
break;
case "Лампа:Brightness":
Modbus.Set("Command 2", value); // передаём в команду от Маруси устройству значение яркости лампы.
break;
}
});
примечание

Обращайте внимание какое значение отсылает Маруся при обработке команды. Конвертируйте его в необходимое значение для управляемого устройства.

Загрузка проекта в iRidium Cloud и на сервер.

  1. Авторизуйтесь на сайте iRidium.

  2. Загрузите серверный и связанный с ним панельный проект на облако iRidium cloud.

Mail13.png

  1. При необходимости на вкладке Users and Panels добавьте в проект конечного пользователя.

Mail14.png

  1. Запустите iRidium server.

  2. Зайдите в веб-интерфейс сервера, набрав в адресной строке браузера: IP-адрес сервера:8888

  • Если iRidium server запускается на том же компьютере, на котором он настраивается, то наберите: 127.0.0.1:8888
  1. Наберите пароль доступа по умолчанию 2007. Нажмите кнопку "LOGIN".

Alexa_web01.png

  1. Найдите вкладку Cloud / Projects .

Alexa_web02.png

  1. Загрузите проект из облака на сервер, нажав кнопку "CLOUD SYNC" и затем "Download" напротив нужного проекта.

Mail15.png

Важно
  • Маруся работает только через iRidium cloud, поэтому она не сможет работать, если проект будет загружен на сервер через iRidium transfer.

Настройка Маруси

Регистрация умной колонки

  1. Установите приложение Маруся ;

  2. Запустите приложение и авторизуйтесь в нём через VK Connect ;

  3. Включите Капсулу Мини в розетку;

  4. Настройте Капсулу Мини с помощью приложения.

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

  1. Голосом. Нажмите на кнопку микрофона внизу экрана и скажите: "Маруся, подключи Капсулу Мини".
  2. В меню приложения. Перейдите в меню и нажмите "Подключить колонку".

Далее следуйте инструкциям по подключению.

Mail17.jpg Mail18.jpg

Установка навыка

Навык устанавливается только в приложении Маруся .

  1. Установите приложение на мобильное устройство и авторизуйтесь в нем;

  2. На вкладке Настройки перейдите в Умный дом ;

Mail5.jpg

  1. В списке умных домов выберите iRidium ;

Mail6.jpg

  1. Вы попадёте на форму регистрации на сайте iRidium mobile. Введите данные учётной записи интегратора или конечного пользователя, с которым поделились связанным панельным проектом, и нажмите Login .

Mail7.jpg Mail8.jpg

  1. В выпадающем списке выберите продукт i3pro и объект, с которым будет работать Маруся. Нажмите Link .

Mail9.jpg

  1. Далее в выпадающем списке выберите драйвер VK Marusia .

Mail10.jpg

  1. При необходимости переименуйте устройства и разместите их в комнаты, после этого вы сможете ими управлять.

Mail11.jpg Mail12.jpg

  1. Если вы скорректируете проект, то не забудьте загрузить его в iRidium cloud , затем обновите его в iRidium server . После этого обновите список устройств в приложении Маруся .

Тестирование проекта

Проект для сервера можно запустить на том же компьютере, на котором производится работа в iRidium studio. Но проект следует загружать только через iRidium cloud.

Произносите голосовые команды в приложении VK Marusia и ассистент передаст команды в iRidium server, и тот, в свою очередь, исполнит команды согласно заданной логике.

примечание

Вы может использовать любой эмулятор сервера Modbus TCP, например, бесплатный Modbus PLC Simulator для тестирования проекта.