PDA

Просмотр полной версии : Доступ к облаку по API



melky
06.11.2022, 12:28
Собственно пытаюсь сделать драйвер для RapidScada для OwenCloud и есть некоторые вопросы, чтобы понять в какую сторону копать, чтобы потом сильно не переделывать.

1. Токен ? - Токен получаем всегда через авторизацию как в Демо варианте и потом используем, или Токен может быть постоянным для пользователя?
К сожалению нет личного кабинета для Облака, есть правда ПЛК100 после ремонта, не знаю, он может быть подключен к облаку? Покупать шлюзы нет никакого желания как бы, да и просто на это пока денег нет...

2. Что будет происходить если будут добавляться приборы или даже компании с приборами (так понял для интеграторов есть такая возможность)

3. Облако имеет OPC UA Клиент, или Сервер чтобы организовать пересылку данных от одного устройства другому при помощи драйвера? И главное доступ к этим механизмам через API ?

melky
07.11.2022, 10:56
Информация о приборах, фильтр вида device_ids какое тело запроса должно быть ?

{"device_ids":"тут что и как?"}

melky
07.11.2022, 11:02
{"filter":"100"} - и какое тут число в фильтре должно быть? ставлю число любого id и получаю пустоту []

melky
07.11.2022, 12:04
И если не жалко, поделитесь классами для device/index и device/id, а то ручками тяжко создавать, много там всего, а кто-то может уже сделал :)

Ау, разработчики, ну поделитесь классами готовыми, или вы парсите свой JSON построчно????

melky
08.11.2022, 11:50
filter - число, в таком случае будут выведены только приборы, пользовательское описание которых подходит под этот фильтр. // СТРОКА - исправьте в документации

device_ids - могли бы в доках пример привести, чтобы не заниматься тестированием, если применительно к демо будет так

{"device_ids":[171772, 43549]}

company_id - в демо нет такого, чтобы проверить

p.s. такое ощущение, что я разговариваю сам с собой....

capzap
08.11.2022, 12:03
Ау, разработчики, ну поделитесь классами готовыми, или вы парсите свой JSON построчно????
каково это называть всех недопрограммистами, а потом просить помочь.
Ни кто самописанием не занимается, примеры можно брать любые, от любого сервиса базовые функции работают. Если Вы писали драйвера, взяв готовый пример и подставив свои значения, то чем Вы хвастались тогда?

melky
08.11.2022, 12:11
capzap я всего лишь прошу поделиться готовыми классами сериализации, чтобы не тратить время на это самому. Разрабы могли бы и поделиться готовыми... Я их и сам то сделаю, не проблема, просто это время.

Что касается остального, достаточно было бы быть внимательнее, при составлении документации и качеству примеров. Например POST /v1/device/125 HTTP/1.1 - а пример ответа с id = 4 а не 125 и так далее по
тексту.

от своих слов не отказываюсь :) потому что столько мусора напихали в параметрах всяких, и часть можно сократить. На счет json пока не знаю, только начал с ним разбираться, есть ли у него функционал не записывать строки с параметрами false, "", 0 и так далее как это есть в одном из вариантов xml... что очень сильно сокращает файлы при сериализации...

Еще пример
"register_byte_order": 1,
"register_order": 1,
Можно просто сделать "Order":"01" - первое для байтов, второе для регистров. И мало того, закинуть это не в параметр переменной а в параметр устройства.
Посчитайте сколько произойдет экономии

capzap
08.11.2022, 12:33
capzap я всего лишь прошу поделиться готовыми классами сериализации, чтобы не тратить время на это самому. Разрабы могли бы и поделиться готовыми... Я их и сам то сделаю, не проблема, просто это время.

Что касается остального, достаточно было бы быть внимательнее, при составлении документации и качеству примеров. Например POST /v1/device/125 HTTP/1.1 - а пример ответа с id = 4 а не 125 и так далее по
тексту.

от своих слов не отказываюсь :) потому что столько мусора напихали в параметрах всяких, и часть можно сократить. На счет json пока не знаю, только начал с ним разбираться, есть ли у него функционал не записывать строки с параметрами false, "", 0 и так далее как это есть в одном из вариантов xml... что очень сильно сокращает файлы при сериализации...

Еще пример
"register_byte_order": 1,
"register_order": 1,
Можно просто сделать "Order":"01" - первое для байтов, второе для регистров. И мало того, закинуть это не в параметр переменной а в параметр устройства.
Посчитайте сколько произойдет экономии
ну идиоту идиотово

melky
08.11.2022, 12:40
Смотрю вы прямо бог программирования :)
В последнее время становится тяжко смотреть в сторону ОЛ, из-за постоянных "Ошибка сериализации" даже в версии 2 никак избавиться не могут. И тут еще в документации на облако, ошибка на ошибке... А все разработчики наверное или в отпуске или разбежались из Овен. Просмотров темы много, и ни одного ответа со стороны Овен. теория доказательства блин какая-то....

capzap
08.11.2022, 13:05
Смотрю вы прямо бог программирования :)
В последнее время становится тяжко смотреть в сторону ОЛ, из-за постоянных "Ошибка сериализации" даже в версии 2 никак избавиться не могут. И тут еще в документации на облако, ошибка на ошибке... А все разработчики наверное или в отпуске или разбежались из Овен. Просмотров темы много, и ни одного ответа со стороны Овен. теория доказательства блин какая-то....

еще раз повторю, хамлу ни кто помагать не спешит


Посчитайте сколько произойдет экономии есть такой параметр в сетях MTU (https://ru.wikipedia.org/wiki/Maximum_transmission_unit) поэтому особой разницы нет 20 байт или 40 передать. Так как Вы стремитесь сэкономить, то комментарии поясняющие назначения передавать не желательно, как тогда понять что передали если параметр будет максимально ужат


одном из вариантов xmlнет такого, xml един и соответствует стандарту, тот кто собрал файл может и разобрать его по своим правилам, помимо этого есть DTD (https://ru.wikipedia.org/wiki/DTD) но передавая его мы потратим драгоценные на Ваш взгляд килобайты. С json все так же свою сборку можете как угодно сокращать, потому что знаете как распарсивать, а чужой файл разбираете по чужим правилам


Например POST /v1/device/125 HTTP/1.1 - а пример ответа с id = 4 а не 125фишка в том, что ни кто не сможет повторить этого потому что как минимум нет токена работать с этими приборами, соответственно важны не сами примеры а расшифровка того что приходит и отправляется

melky
08.11.2022, 13:41
нет такого, xml един и соответствует стандарту

имел ввиду реализации сериализации, например XmlSerializer или простым ReadXml (упадет при наличии одинаковый имен в разных ветках) или DataContractSerializer со своими плюшками и косяками.

Я не про повторить, а про то, что пример должен быть един - если запрос прибора с id = 125 то и ответ в примере должен быть с id = 125 - просто о качестве документации и только.

"byte_order":"1234" например такой непонятный, да еще описанный в документации требует меньше места, чем целых два параметра.
Созданный в профиле самого прибора, а не в переменной к тому же сократит их количество на количество переменных, получаемых из прибора. Какой глобальный смысл в каждой переменной float постоянно повторять, что из этого ПЛК надо переставлять байты всегда одинаково?

VladimirIS
08.11.2022, 15:55
каково это называть всех недопрограммистами, а потом просить помочь.
Верно замечено!

melky
08.11.2022, 16:22
VladimirIS да называйте(сь) как хотите, но когда на протяжении нескольких лет люди бьются в одну и ту же ошибку или вокруг нее то это знак!

Ну и когда senior-ы не могут помочь с решением задачи, а после 2-х месяцев поиска (я если что самоучка) решением оказывается 5 строк кода это тоже говорит о многом.

з.ы. очень хочу разобраться и с вашей Scada, но времени к сожалению не хватает, потому что на вопросы (не только этого форума) по программированию не находится желающих ответить и решения приходится искать самому...
Пока по опыту получается так - есть задача, 1% в интернете это справка MSDN с примитивами, которые не могут на 100% решить задачу, надо знать как применять
1% когда на форуме какой-то гуру дает направления (правильное) но без примеров
1% это когда на форуме какой-нибудь гуру к направлению приложит пример кода (найти такое это счастье)
Все остальные 97% от "гуру" это перепечатывание примитивов с MSDN с заменой имен переменных, классов и так далее.

Вот так и живем блин....

melky
08.11.2022, 16:30
Кстати на 1-й вопрос так и нет ответа, хотя capzap наверняка его знает :)

melky
08.11.2022, 17:24
В ответе выдаётся токен (сам токен хранится в MariaDB)... Токен, полученный через логин-пароль через 20 минут неактивности (отсутствия запросов) инвалидируется и удаляется из БД.

при этом capzap в различных темах про Облако пишет (не дословно) "не светите своими Токенами" когда люди выкладывали скрины.

Отсюда и первый вопрос - чему верить? Токен у пользователя (не Демо) постоянен или он так же меняется как и у Демо пользователя?
Например произошел обрыв связи у провайдера более 20 минут и ?

melky
08.11.2022, 17:30
Еще вопрос, Облако Овен не планирует дожить до 2038 года? почему время в UNIX формате?

childCompanies - массив со списком дочерних компаний - у кого есть несколько дочерних компаний, покажите пожалуйста вывод лога авторизации (удалите токен и т.д.)

melky
08.11.2022, 17:50
canManageReports - отсутствует в документации

Евгений Кислов
09.11.2022, 07:51
Добрый день.


Еще вопрос, Облако Овен не планирует дожить до 2038 года? почему время в UNIX формате?

https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_2 038_%D0%B3%D0%BE%D0%B4%D0%B0


В старых 32-битных системах (до середины 1990-х) используется тип данных time_t для хранения секунд в виде 32-битного целого со знаком.
Самая поздняя дата, которая может быть представлена таким форматом в стандарте POSIX — это 03:14:07, вторник, 19 января 2038 года по Всемирному времени (UTC).

Во всех современных системах (в т.ч. и в OwenCloud) для представления меток времени используются беззнаковые целые.
32-битного беззнакового целого хватит для представления времени в формате Unixtime вплоть до февраля 2106.


Отсюда и первый вопрос - чему верить? Токен у пользователя (не Демо) постоянен или он так же меняется как и у Демо пользователя?

Токен у обычного пользователя инвалидируется спустя 20 минут отсутствия запросов - как и у демо-пользователя.
Верьте документации.


childCompanies - массив со списком дочерних компаний - у кого есть несколько дочерних компаний, покажите пожалуйста вывод лога авторизации (удалите токен и т.д.)



{
"token": "здесь был указан мой токен",
"name": "Евгений",
"surname": "Кислов",
"company_name": "OWEN Demo Company",
"domain_name": "web.owencloud.ru",
"canManageDevices": true,
"canManageLineCharts": true,
"canManageReports": true,
"canManageCommands": true,
"canViewChildCompanies": true,
"canManageChildCompanies": false,
"smsConfirmation": false,
"childCompanies": [
{
"id": 40,
"name": "МСК | Отдел тестирования"
},
{
"id": 130,
"name": "Тест | ГТП"
},
{
"id": 735,
"name": "МСК | ГТП"
},
{
"id": 18857,
"name": "МСК | Центр профессиональных компетенций"
},
{
"id": 210128,
"name": "ГОУВПО "МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМ.Н.П.ОГАРЕВА""
}
],
"error_status": 0
}



canManageReports - отсутствует в документации

Отражает состояние галочки "Управляющий отчетами".

63721


Какой глобальный смысл в каждой переменной float постоянно повторять, что из этого ПЛК надо переставлять байты всегда одинаково?

Потому что есть приборы, которые отдают Float с одним порядком регистров, а, например, Uint32 - с другим.
Это, конечно, странновая реализация, но она не противоречит спецификации Modbus, которая вообще не описывает порядок регистров при передаче параметров, занимающих больше одного регистра.

---

Если какие-то из вопросов, задававшихся на прошлой странице, еще актуальны - напишите их заново, пожалуйста.

melky
09.11.2022, 09:16
Евгений Кислов спасибо, по Unix Time понял, хотя почему было не использовать DateTime, вы же потом все равно в текстовом виде передаете.
На счет Токена принял...
childCompanies - в примере Cloud Open тогда ошибка, после закрывающей скобки массива ] не хватает запятой.

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

Вопрос по date&time, date, time, string переменным - есть варианты, когда эти переменные доступны для записи в приборах, например в приборах Овен?

2. Что будет происходить если будут добавляться приборы или даже компании с приборами (так понял для интеграторов есть такая возможность) / Тут больше интересует механизмы после добавления, прибор может быть добавлен в середину json? или будет добавлен строго в конец списка?

3. Облако имеет OPC UA Клиент, или Сервер чтобы организовать пересылку данных от одного устройства другому при помощи драйвера? И главное доступ к этим механизмам через API ? // тут странный вопрос, на самом сервере Овен есть что-то из этой части или OPC это строго на своем ПК для доступа к облачным переменным ?


Вот по последнему элементу массива есть вопрос

{
"id": 210128,
"name": "ГОУВПО "МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМ.Н.П.ОГАРЕВА""
}

Если не экранировать " то это может вызвать ошибку при десериализации - "name": "ГОУВПО \"МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМ.Н.П.ОГАРЕВА\""
а отдает именно так как отдало в примере?

Евгений Кислов
09.11.2022, 09:30
Вопрос по date&time, date, time, string переменным - есть варианты, когда эти переменные доступны для записи в приборах, например в приборах Овен?

Насколько я знаю - таких приборов нет. Уточню этот вопрос.

Upd. - уточнил, эти типы недоступны для записи.



Что будет происходить если будут добавляться приборы или даже компании с приборами (так понял для интеграторов есть такая возможность) / Тут больше интересует механизмы после добавления, прибор может быть добавлен в середину json? или будет добавлен строго в конец списка?


Уточню этот вопрос.

Upd. - порядок выдачи произвольный.


Облако имеет OPC UA Клиент, или Сервер чтобы организовать пересылку данных от одного устройства другому при помощи драйвера? И главное доступ к этим механизмам через API ? // тут странный вопрос, на самом сервере Овен есть что-то из этой части или OPC это строго на своем ПК для доступа к облачным переменным ?

Облако поддерживает работу в режиме OPC UA Server.
Доступа к нему через API нет.
Но работу в режиме шлюза можно реализовать через API - вы ведь можете считывать и записывать данные в любой из приборов аккаунта.


а отдает именно так как отдало в примере?

Отдает с экранированием.
Я копировал уже отформатированный вариант, в raw выглядит так:


"name":"ГОУВПО \"МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМ.Н.П.ОГАРЕВА\""

melky
09.11.2022, 10:57
Евгений Кислов спасибо. Пошел копать дальше...

melky
10.11.2022, 11:19
parameters - code я правильно понимаю, что code не уникальное свойство в рамках двух одинаковых приборов, а в рамках одного прибора он уникален или тоже их может быть два одинаковых ?

register_byte_order и register_order с учетом передачи по API уже конечного значения, например я решил записать значение в параметр, так ли мне нужно знать об этих параметрах, чтобы переставлять или я посылаю на запись скажем 10.25 а облако глядя на эти параметры само все переставит как надо?

dot_point - положение десятичной точки
min_val - минимальное значение
max_val - максимальное значение

В примерах не нашел по ним ничего, везде null - как должны выглядеть эти поля ?

Евгений Кислов
10.11.2022, 11:31
1. В рамках прибора code тоже уникален.

2. При записи через API register_byte_order и register_order не должны обрабатываться, так как записываемое значение передается в строковом виде.

melky
10.11.2022, 11:36
Евгений Кислов то есть если я code буду указывать при настроке через web и заведомо укажу такой же в одном приборе, то система отругается и попросит обозвать иначе? а в рамках двух разных приборов коды могут совпадать, правильно понимаю?

modbus_format - формат в приборе (modbus) - повторяет параметр format ?

Евгений Кислов
10.11.2022, 12:07
Евгений Кислов то есть если я code буду указывать при настроке через web и заведомо укажу такой же в одном приборе, то система отругается и попросит обозвать иначе? а в рамках двух разных приборов коды могут совпадать, правильно понимаю?

Да, вы понимаете правильно.


modbus_format - формат в приборе (modbus) - повторяет параметр format ?

Нет, modbus_format - это тип параметра Modbus. Возможные типы см. в описании device_format:



0 - float
1 - uint16
2 - int16
3 - uint32
4 - int32
5 - bool
6 - double
7 - int64
8 - uint64


А просто format - это тип параметра протокола ОВЕН.



dot_point - положение десятичной точки
min_val - минимальное значение
max_val - максимальное значение

В примерах не нашел по ним ничего, везде null - как должны выглядеть эти поля ?


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

Upd. - вот примеры по min_val и max_val, прибор СИ30:



"code": "LoCK",
"format": 2,
"dot_point": null,
"min_val": "0",
"max_val": "3",


63751

capzap
10.11.2022, 12:16
то есть если я code буду указывать при настроке через web и заведомо укажу такой же в одном приборе, то система отругается и попросит обозвать иначе?
63750
если у Вас нет аккаунта в облаке, зачем Вам это всё? Задумали свой сервер создать, чтоб шлюзы на него стучались, так они по модбас работают плюсом коннект с парольной защитой. А API можно создавать и по упрощенной схеме для своего сервера

melky
10.11.2022, 12:20
Насколько я понимаю - эти поля только для конкретных устройств с протоколом ОВЕН.
Если вам действительно нужны примеры для них - напишите, я уточню у разработчиков.

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

Вот говорю же, дубляж полный... Можно ведь было использовать одно поле format и в зависимости от типа протокола Овен, Modbus определять его... Там еще с десяток таких параметров наберется, которые либо дублирую друг друга по сути или которые можно было засунуть в битовую маску, типа in_configuration, in_manageable и так далее

melky
10.11.2022, 12:27
если у Вас нет аккаунта в облаке, зачем Вам это всё? Задумали свой сервер создать, чтоб шлюзы на него стучались, так они по модбас работают плюсом коннект с парольной защитой. А API можно создавать и по упрощенной схеме для своего сервера

capzap аккаунт я сегодня создал для тестирования чуть позже, пока ничего не прикрутил, есть ПЛК100 и возможно он с поддержкой облака или в принципе он прицепится, я пока не знаю. По поводу code параметра, ну в RapidScada они тоже есть для организации тегов в том числе и так же уникальны для одного устройства. Важно при подачи команды из web или через другие механизмы.
Так я и пытаюсь понять, какие из параметров мне будут нужны для организации тегов в Scada и как они работают.

Вообще затея была разобраться с json немного, с работой по API и было два пути, облако Овен и еще одно, начал просто с Овен :)
Учитывая, что Облако может являться OPC UA сервером, то данный драйвер мне лично как бы и не нужен если разобраться, тоже потом проверю.

capzap
10.11.2022, 12:38
в ответах от облака в общем случае всем нужна value и возможно name, остальные параметры ни кто не обрабатывает, Вы столько дней тратите в пустую а еще не продвинулись в справке дальше девайса, мозг не взорвет когда обнаружите что code может принимать и не только строковое значение

melky
10.11.2022, 12:45
capzap code передается в виде строки, мне этого достаточно, главное понимать, что он уникален в пределах устройства, что соответствует и Scada системе

Часть других параметров мне важна для формирования тегов в Scada, для отображения в логах и так далее.

Да, я пока продвинулся только до авторизации и чтения приборов, сейчас занимаюсь чтением параметров, а еще пилить и пилить - настройки, передачу команд и так далее....

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

melky
10.11.2022, 13:53
Parameter :id 5885168 :code rTempOut :name Температура обратной воды :value 59.5 (из лога опроса)

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

capzap
10.11.2022, 13:55
Parameter :id 5885168 :code rTempOut :name Температура обратной воды :value 59.5 (из лога опроса)

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

уникально в пределах облака

melky
10.11.2022, 14:01
уникально в пределах облака ужас, и это в демо id параметра уже 5885168, еще так тысяч 5 пользователей и id будут более 10 миллионов.... Почему не в рамках пользователя?

У меня получается проблемка, если я сделаю опрос в рамках пользователя, сразу все параметры (или циклом по устройствам) и при этом будут одинаковые устройства, нужно будет к коду параметра добавлять какой-то id

capzap
10.11.2022, 14:13
ужас, и это в демо id параметра уже 5885168, еще так тысяч 5 пользователей и id будут более 10 миллионов.... Почему не в рамках пользователя?

У меня получается проблемка, если я сделаю опрос в рамках пользователя, сразу все параметры (или циклом по устройствам) и при этом будут одинаковые устройства, нужно будет к коду параметра добавлять какой-то id

в чем Ваша боль? Конкретно у Вас будут свои приборы, у которых будут свои уникальные ИД, Вы будете работать только с этим набором данных, какая разница что у кого то будет больше чем шестизначное число, до закрытия диапазона чисел еще очень далеко.
Все люди как люди пользуются ID для приборов, сперва по устройству находят сколько приборов подключено. и по этому списку ID опрашивают параметры приборов., а Вы уперлись в свой code ни как отстать от него не можете

melky
10.11.2022, 14:26
capzap так проблема не в облаке, а еще и в Scada, у нее тоже свои правила.
Я могу создать штатно Устройство-Переменная, а могу в качестве Устройства назначить сразу Объект, например "Котельная N1"
Будет зависеть от настроек... Не обращайте особо внимания, я просто ворчу :)

То есть как бы могу пойти по пути Иерархии или по пути Плоскости, либо сделать настройку и так и сяк...

Кстати есть ли способ у API опросить все переменные пользователя в плоском варианте, не опрашивая каждый прибор в отдельности ?

capzap
10.11.2022, 14:37
capzap так проблема не в облаке, а еще и в Scada, у нее тоже свои правила.
Я могу создать штатно Устройство-Переменная, а могу в качестве Устройства назначить сразу Объект, например "Котельная N1"
Будет зависеть от настроек... Не обращайте особо внимания, я просто ворчу :)

То есть как бы могу пойти по пути Иерархии или по пути Плоскости, либо сделать настройку и так и сяк...

Кстати есть ли способ у API опросить все переменные пользователя в плоском варианте, не опрашивая каждый прибор в отдельности ?

из урля /v1/device/index, получив список приборов все переходят на /v1/parameters/last-data
а по поводу скады, Вы же пишите прокладку, взяв с облака нужно заполнить соответствующие теги, о каких в таком случае правилах СКАДы идет речь

melky
10.11.2022, 15:11
capzap Scada позволяет одной кнопочкой создать все теги, определенные драйвером с учетом перечислений, типов отображения переменных, типов команд и так далее и так далее.
Ну это чтобы не сидеть и не вводить ручками каждую переменную с кодом, именем и прочими параметрами.

то есть я создаю шаблон, или применительно к облаку Овен считываю всю конфигурацию, потом одной кнопкой создаю сразу все переменные в Базе, перезапускаю сервер и все... При этом не важно, будет переменных 10 или пару сотен...
Но для этого надо правильно написать код драйвера, используя необходимые методы Scada системы...

В этом плане достаточно удобно. Например в той же MSD4 я не смог быстро добавить все параметры счетчика Меркурий 230 и мало того, не понял как из созданного одного счетчика сделать быстро 5 счетчиков...
Каждую переменную надо ручками вносить или переподвязывать, а тут бац, несколько секунд и у нас созданы все 40 каналов...

capzap
10.11.2022, 15:14
capzap Scada позволяет одной кнопочкой создать все теги, определенные драйвером с учетом перечислений, типов отображения переменных, типов команд и так далее и так далее.
Ну это чтобы не сидеть и не вводить ручками каждую переменную с кодом, именем и прочими параметрами.

то есть я создаю шаблон, или применительно к облаку Овен считываю всю конфигурацию, потом одной кнопкой создаю сразу все переменные в Базе, перезапускаю сервер и все... При этом не важно, будет переменных 10 или пару сотен...
Но для этого надо правильно написать код драйвера, используя необходимые методы Scada системы...
так стоит ли вообще браться за облако, если в само облако желательно пользоваться символьной конфигурацией из самого плк, почему занеся таким образом в облако, не сделать тоже самое и в скаду

melky
10.11.2022, 15:21
capzap спасибо за наводку. Такого же варианта но чтобы id устройства вводить и при этом получить все их параметры нет?


так стоит ли вообще браться за облако, если в само облако желательно пользоваться символьной конфигурацией из самого плк, почему занеся таким образом в облако, не сделать тоже самое и в скаду
Ну так я этим и занимаюсь как раз... я же не знаю, чего и кто там в облако добавить, приборы с Овен, с Modbus, какой множитель и так далее...
То есть фактически при инициализации будет считано все, созданы переменные, а потом драйвер будет работать уже на собственном шаблоне (типа коротком, на основе которого будут создаваться теги Scada) ну и распихивать данные куда что положено.

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

melky
10.11.2022, 15:31
parameters/last-data - есть ограничение на количество запрашиваемых параметров?

capzap
10.11.2022, 15:46
я же не знаю, чего и кто там в облако добавитсо своим токеном Вы чужие приборы не опросите, поэтому не знать не возможно

melky
10.11.2022, 15:57
capzap да я в том смысле, что драйвером смогут пользоваться другие. Я же не для себя лично его пишу, а для Scada системы в принципе. Ну как написали разработчики SimpLite для своей системы, так и я пишу для RapidScada...
Ну а если уже делать, то так, чтобы оно настраивалось... Для себя лично по неумению делать графический интерфейс я вообще шаблоны в xml руками создавал :)

Вот опять вы про токен, у пользователя он что, постоянен, просто нужна авторизация в начале? или он так же меняется, как и у демо пользователя каждый запрос?

capzap
10.11.2022, 16:01
если это всё не для себя, то почему тогда не воспользоваться разделом 13 https://ftp.owen.ru/OwenCloud/01_Docs/rp_owencloud.pdf

melky
10.11.2022, 16:05
"id": 1099134,
"values": [
{
"d": 1668085434,
"v": "26.0",
"e": "",
"f": "26.0 °C"
}
]

Если можно, объясните запись выделенную жирным?

Евгений Кислов
10.11.2022, 16:14
"id": 1099134,
"values": [
{
"d": 1668085434,
"v": "26.0",
"e": "",
"f": "26.0 °C"
}
]

Если можно, объясните запись выделенную жирным?

Это обозначение символа градуса Цельсия.

63765

Про ограничения на число параметров для last-data - уточню у разработчиков.

melky
10.11.2022, 16:47
если это всё не для себя, то почему тогда не воспользоваться разделом 13 https://ftp.owen.ru/OwenCloud/01_Docs/rp_owencloud.pdf

Выше писал, что основная задача была разобраться с json и вообще чтением через API, на выбор было облако Овен и еще одного производителя устройств, я просто начал с Овен :) вот и все. Ну а если делать, то делать по возможности красиво :)
Ну и не у всех систем есть возможность использовать OPC, либо просто не умеют, либо необходимо покупать лицензии, при этом есть лицензии на теги по Modbus или просто умеет, либо MQTT или OPC UA.
Тут то как раз можно сварганить шлюз, установив только Сервер и Коммуникатор RapidScada, ограничив БД скажем парой дней. А может кому-то нужно в PostGre пихать данные... В общем вариантов масса

melky
10.11.2022, 17:39
Евгений Кислов если разработчикам не сложно доработать parameters/last-data чтобы вводить не {"ids":[268191, 270292]} а {"device_ids":[1111, 2222]} и получать такой же ответ сразу всей пачкой переменных из указанных девайсов было бы быстрее

melky
10.11.2022, 21:09
"operative_period": 5,
"configuration_period": 900,
"manageable_period": 5,

В девайсе есть такие параметры, можете более подробно их объяснить? Например operative_period в рамках того, что бесплатному аккаунту доступно обновление 60с, а платным не менее 30с

capzap
10.11.2022, 21:23
"operative_period": 5,
"configuration_period": 900,
"manageable_period": 5,

В девайсе есть такие параметры, можете более подробно их объяснить? Например operative_period в рамках того, что бесплатному аккаунту доступно обновление 60с, а платным не менее 30с
документацию на облако прочтите раздел 5.3.2 Настройка типов параметра прибора

melky
10.11.2022, 21:34
capzap И? где в документации ответ на основную часть вопроса? Просто вижу, что у demo пользователя operative_period значение = 5 - что 5? секунд?, как это связано с тем, что пользователю доступен минимум только 60с, а у платных нет ниже 30с ?

operative_period - период опроса оперативных данных в секундах

и смотрим тарифы, где там 5 или 15 секунд? а, для юриков есть даже 10 секунд.

Ну и для понимания терминологии, что такое "Управляемый параметр" ?

melky
10.11.2022, 22:02
• Управляющие – параметры, записываемые в прибор: запись параметров, запись по шаблону, конфигурации. -- То есть фактически это Оперативный параметр RW (чтения и запись) ?

capzap
10.11.2022, 22:54
все три вида читают значение, для этого и есть время периодичности. Разница между управляемым и конфигурационным в "волшебной" кнопке все конфигурации

melky
10.11.2022, 23:13
Конфигурационный не волнует, по сравнению у них время большое на чтение, и 900 секунд и 600 и так далее. Разница между Оперативным и Управляемым какая?
Разве Оперативный нельзя писать? Я просто пытаюсь параллели провести. Оперативный - например значение давления. Управляемый - уставка этого давления, но тогда этот Управляемый может быть и Конфигурационным и читаться редко.

Мне понять в рамках Облака разницу надо. У меня есть Input. Output, Input/Output типы каналов - если сравнивать с этим например, что есть Управляемый и Конфигурационный тогда ?

То есть Input это Оперативный (только чтение)
Output у меня не считывается, это только команды

Евгений Кислов
11.11.2022, 06:19
parameters/last-data - есть ограничение на количество запрашиваемых параметров?

Ограничений нет.


Разница между Оперативным и Управляемым какая? Разве Оперативный нельзя писать?

Параметры, которые принадлежат только группе Оперативный - не будут отображаться в веб-интерфейсе на вкладке Запись параметров.
Я предполагаю, что их запись через API тоже будет недоступна (должен вернуться 'code' => 'parameter_not_writable').

capzap
11.11.2022, 08:27
Конфигурационный не волнует, по сравнению у них время большое на чтение, и 900 секунд и 600 и так далее. Разница между Оперативным и Управляемым какая?
Разве Оперативный нельзя писать? Я просто пытаюсь параллели провести. Оперативный - например значение давления. Управляемый - уставка этого давления, но тогда этот Управляемый может быть и Конфигурационным и читаться редко.

Мне понять в рамках Облака разницу надо. У меня есть Input. Output, Input/Output типы каналов - если сравнивать с этим например, что есть Управляемый и Конфигурационный тогда ?

То есть Input это Оперативный (только чтение)
Output у меня не считывается, это только команды

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

melky
11.11.2022, 16:48
Какой параметр определяет, какой из параметров формата используется? format или modbus_format ?

Евгений Кислов
11.11.2022, 16:52
Какой параметр определяет, какой из параметров формата используется? format или modbus_format ?

Это можно понять c помощью запроса device-management/types-info (см. group_type).

melky
11.11.2022, 21:52
да е мое, запрос на запросе :)

device_format - формат хранения. Может принимать следующие булевы значения:
0 - float, 1 - uint16, 2 - int16, 3 - uint32, 4 - int32, 5 - bool, 6 - double, 7 - int64, 8 - uint64

Здесь номера это номера битов? или ошибка и тут так же enum?

Евгений Кислов
11.11.2022, 21:59
да е мое, запрос на запросе :)

device_format - формат хранения. Может принимать следующие булевы значения:
0 - float, 1 - uint16, 2 - int16, 3 - uint32, 4 - int32, 5 - bool, 6 - double, 7 - int64, 8 - uint64

Здесь номера это номера битов? или ошибка и тут так же enum?

Ошибка, здесь тоже enum.

melky
11.11.2022, 22:20
device-management/types-info по данному запросу я получаю всякую муть, что есть в системе, шаблоны приборов, которых нет у пользователя Демо.

"ПЛК через Modbus TCP"
"Произвольный прибор Modbus" в запросе device/index

Это предопределенные выражения? Если прибор Овен что может быть в надписи? или type может выглядеть как "ПЛК в гараже у Васи" ???

посмотрел, не имеет смысла, проще добавить ручную настройку... Почему было не сделать один общий список enum, чтобы не было совпадений и в зависимости от типов приборов и т.д. выставлялись требуемые значения? не понятно... хорошо еще нет параметра "owen_format", "opc_format" в общем на каждый чих..

melky
12.11.2022, 14:41
"group_type": "container" - какой перечислитель форматов используется в данном случае? format или modbus_format ?
Используется в "Программируемый контроллер" и "OPC UA"

А Modbus аж целых два "modbus_template" и "modbus_various" - зачем? и если придумали зачем, то отличия относительно форматов ?

"id": 171772,
"name": "Котельная (ПЛК160_1.2.2)",
"identifier": "E4:1E:0A:00:0D:FA",
"type": "ПЛК через Modbus TCP",
"time_zone": "GMT+3:00",
"is_favourite": false,
"categories": [

Собственно почему тут было не указать протокол и формат, раз разделили? сразу в устройстве

Евгений Кислов
12.11.2022, 14:46
"group_type": "container" - какой перечислитель форматов используется в данном случае? format или modbus_format ?
Используется в "Программируемый контроллер" и "OPC UA"

А Modbus аж целых два "modbus_template" и "modbus_various" - зачем? и если придумали зачем, то отличия относительно форматов ?

1. Должен использоваться modbus_format.

2. modbus_template - это уже готовые шаблоны, а modbus_various - произвольный слэйв, для которого пользователь сам настраивает список параметров.
В обоих случаях используется modbus_format.

melky
12.11.2022, 16:16
Спасибо, прикрутил уже чтение и определение этих переменных, благо они только при инициализации будут работать, потом уже не особо будут нужны.

melky
16.11.2022, 11:07
В протоколе Owen форматы signed/unsigned это int16/uint16 или int32/uint32 ?

И форматы времени datetime, date, time в каком виде, UNIX формат который расширенный на 100 лет ? или иное?

Евгений Кислов
16.11.2022, 11:30
В протоколе Owen форматы signed/unsigned это int16/uint16 или int32/uint32 ?

В протоколе ОВЕН целочисленное значение может занимать 1, 2 или 4 байта.
В облаке, вероятно, всегда выделяется 4 байта.



И форматы времени datetime, date, time в каком виде, UNIX формат который расширенный на 100 лет ? или иное?

В протоколе ОВЕН свои форматы для хранения значений даты и времени, см. п. 5.1.3:
https://owen.ru/uploads/121/oficialnoe_opisanie_protokola_obmena_po_rs485_prib orov_firmi_oven_15.01.07.pdf

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

melky
16.11.2022, 11:56
Не, мне как раз то, что в облаке интересует. Я же работать буду через облако.

Вот сижу прикручиваю типы переменных, на минус топоры не смотреть, не докрутил еще :)

melky
16.11.2022, 12:30
{
"id": 1099134,
"code": "wTempCloud",
"format": 2,
"dot_point": null,
"is_writable": 0,
"modbus_format": 1,
"modbus_multiplier": "1.0000000",
"name": "Температура",
"value": "25.0",
"formatted_value": "25.0",
"fault": "",
"measurement": {
"title": "°C",
"name": "температура",
"default_precision": 1,
"visible": 1
}

Удалил лишнее - объясните - "format": 2 для owen это UInt32, "modbus_format": 1 для Modbus это Uint16 - почему значение 25.0 при том, что dot_point = null ????

Евгений Кислов
16.11.2022, 12:34
Потому что "default_precision": 1

capzap
16.11.2022, 12:35
Удалил лишнее - объясните - "format": 2 для owen это UInt32, "modbus_format": 1 для Modbus это Uint16 - почему значение 25.0 при том, что dot_point = null ????

- precision - точность отображения (число знаков после десятичной точки, уже применено для value). Если не задана (null) будет применена точность по-умолчанию, взятая из measurement.default_precision

melky
16.11.2022, 12:54
а, спасибо. Сейчас поколдую еще и с этим...

"default_precision": 1 игнорируется, если precision = 0 или иное?

melky
16.11.2022, 13:56
Вот реально, зачем СТОЛЬКО различных переменных для простых вещей?

API предназначено для работы с облаком сторонними приложениями, если вы всегда передаете значение параметров в строковом виде стороннему приложению и с учетом точности, количества знаков после запятой и т.п. и т.д Ну так и укажите единственную переменную format правильно для стороннего приложения.
А то формат UInt16 или Int16 а передаете блин значение с каким-то количеством после запятой....

учитывая, что в запросах v1 светится, то будет и v2 :), надеюсь в версии 2 искорените дублирующие переменных и соберете в кучу непонятное разделение форматов и так далее...

Блин, да е моё, если не задана (null) то будет взято оттуда !!!!! жесть....... рука-литсо.....

melky
16.11.2022, 17:29
"id": 14966589,
"code": "Ain.H",
"format": 0,

"value": null,


Вот реально хочется кому-то руки оторвать, Если у вас параметр для чего-то другого, а не значение, раз вы value = null делаете, ну так добавьте в параметр format тогда не 0 - float для прибора Овен, а скажем 10 - нет значения для данного параметра... Ну или что-то в этом духе... А так переменная как бы есть, но ее как бы и нет...

melky
16.11.2022, 17:37
Я так понимаю для приборов Овен все по другому и last-data теперь уже до фонаря :) супер API :)


[
{
"id": 14966247,
"values": []
},
{
"id": 14966241,
"values": []
},
{
"id": 14966253,
"values": []
},
{
"id": 14966589,
"values": []
},
{
"id": 14966685,
"values": []
}
] Или это поведение отключенного и ни разу не опрашиваемого прибора????

melky
16.11.2022, 17:53
| 6 | Ain.H | Верхняя граница диапазона измерения активного датчика - вход 1

| 7 | rEAd | Измеренная величина - вход 1

| 8 | in.SL | Наклон характеристики датчика - вход 1

| 9 | Ain.L | Нижняя граница диапазона измерения активного датчика - вход 1

| 10 | ItrL | Период опроса датчика - вход 1

| 11 | in.FG | Полоса цифрового фильтра - вход 1

| 12 | in.Fd | Постоянная времени цифрового фильтра - вход 1

| 13 | Cj-.C | Режим работы автоматической коррекции по температуре свободных концов ТП вход 1

| 14 | in.SH | Сдвиг характеристики датчика - вход 1

| 15 | dP | Смещение десятичной точки - вход 1

| 16 | in-t | Тип входного датчика или сигнала - вход 1

| 17 | Ain.H | Верхняя граница диапазона измерения активного датчика - вход 2

| 18 | rEAd | Измеренная величина - вход 2

| 19 | in.SL | Наклон характеристики датчика - вход 2

| 20 | Ain.L | Нижняя граница диапазона измерения активного датчика - вход 2

| 21 | ItrL | Период опроса датчика - вход 2

Кто-то говорил что не может быть одного кода - а тут на каждом входе повторяется. С чем связано ?

Евгений Кислов
16.11.2022, 17:57
"Тут" - это где?

melky
16.11.2022, 18:00
Евгений Кислов добавленный в Демо прибор Овен "type": "Модуль ввода аналоговый МВ110-224.8А" - кто-то сегодня его добавил, вчера не было. Так вот коды на входах имеют повторение. Интересно, если при добавлении в WEB будет выдана ошибка на повторяющийся код то как так получилось, что здесь они одинаковы ? Потому что это прибор Овен и как-то по другому работает? как?

Прибор в offline, массивы last-data пустые. value в большинстве своем null если считывать через индекс прибора, хотя в одном месте строковая переменная имеет "" вместо null как другие.

Евгений Кислов
16.11.2022, 18:03
Евгений Кислов добавленный в Демо прибор Овен "type": "Модуль ввода аналоговый МВ110-224.8А" - кто-то сегодня его добавил, вчера не было. Так вот коды на входах имеют повторение. Интересно, если при добавлении в WEB будет выдана ошибка на повторяющийся код то как так получилось, что здесь они одинаковы ? Потому что это прибор Овен и как-то по другому работает? как?

Прибор в offline, массивы last-data пустые. value в большинстве своем null если считывать через индекс прибора.

См. скриншот - коды уникальные за счет индексов каналов:

63894

То, что вы выложили выше - это именно то, что вы видите в ответе от облака или это уже выхлоп вашего парсера?

melky
16.11.2022, 20:58
{
"id": 14966589,
"code": "Ain.H"

Даже если запросить сторонними сервисами, то код Овен без указание индекса, как у вас на скриншоте самого облака, значит код добавляется индексом
Совершенно верно, это ответ облака на device/312177

так же на запрос last-data у этого прибора приходят пустые массивы переменных, в сообщении #73

А если зайти через Web то у имен тоже есть индексы, но при запросе json индексов в именах нет

Евгений Кислов
16.11.2022, 21:00
{
"id": 14966589,
"code": "Ain.H"

Даже если запросить сторонними сервисами, то код Овен без указание индекса, как у вас на скриншоте самого облака, значит код добавляется индексом
Совершенно верно, это ответ облака на device/312177

Значит, для индексированных параметров протокола ОВЕН через API коды отдаются без индексов - я не считаю такое решение удачным, но такова реализация.

melky
16.11.2022, 21:05
Ну индексы я добавлю, не проблема. А почему пустые массивы переменных? просто прибор ни разу не опрашивался?

Евгений Кислов
16.11.2022, 21:14
Ну индексы я добавлю, не проблема. А почему пустые массивы переменных? просто прибор ни разу не опрашивался?

Да, этот прибор ни разу не опрашивался.

melky
16.11.2022, 21:21
А можно в Демо добавить реальный прибор с опросом? А то тут из-за того, что он Овен часть переменных null и пришлось правки в код вносить, так как в Modbus они далеко не null...

Евгений Кислов
16.11.2022, 21:26
А можно в Демо добавить реальный прибор с опросом? А то тут из-за того, что он Овен часть переменных null и пришлось правки в код вносить, так как в Modbus они далеко не null...

Любой прибор с протоколом ОВЕН или какой-то конкретный?

melky
16.11.2022, 21:42
Да любой в принципе, тот же 8А подойдет, сейчас вот код чуть изменил, а он пропал из Демо :)
Если правильно понимаю, прибор с протоколом Овен можно подключить в облако только при помощи шлюзов, которых у меня нет. Так что тренироваться придется на "кошечках" потом, типа на пользователях. А так хоть основу сделаю...

А ПЛК100 если ему включить в конфигурации протокол Овен по ТСР будет работать с облаком?

Евгений Кислов
16.11.2022, 21:52
Да любой в принципе, тот же 8А подойдет, сейчас вот код чуть изменил, а он пропал из Демо :)


Ок, я передам ваше пожелание коллегам.


А ПЛК100 если ему включить в конфигурации протокол Овен по ТСР будет работать с облаком?

Нет, ПЛК1xx работают с облаком только по Modbus.

melky
17.11.2022, 13:45
Вот очередное недоумение. Если параметры котлов у прибора Котельная (ПЛК160_1.2.2) не записываются через облако, так понимаю, что фактически это передача данных со стороны ПЛК в облако. То почему у всех параметров стоит признак is_writable = true ?

Типа не верь глазам своим? :) и надо еще какой-то параметр сложить с этим, чтобы точно узнать, можно переменную менять или нельзя?

Евгений Кислов
17.11.2022, 13:53
Если параметры котлов у прибора Котельная (ПЛК160_1.2.2) не записываются через облако

Записываются - попробуйте, например, параметр Давление подачи изменить.
Именно поэтому они отображаются на вкладке Запись параметров и поэтому у них is_writable = true.

melky
17.11.2022, 14:04
Вот именно Давление подачи через WEB и пробовал, как было 1.54 так и меняет опять на 1.54
Сейчас еще раз попробовал, да, запись проходит, потом меняется на 1.54

Значение сбрасывается на то, что видимо отправляет ПЛК. Получается, чтобы убедиться, что запись прошла мне надо период опроса в 0 выставить вместо моих 2-х минут, и то, отловить смогу только визуально.
Ладно, на других переменных потренируюсь, которые не сбрасываются в значение из ПЛК

Евгений Кислов
17.11.2022, 14:08
Вот именно Давление подачи через WEB и пробовал, как было 1.54 так и меняет опять на 1.54
Сейчас еще раз попробовал, да, запись проходит, потом меняется на 1.54

В ПЛК в слэйве общая область памяти - т.е. туда происходит запись и со стороны облака, и со стороны программы.
Поэтому вы и видите такую картину.
Так реализован проект этого ПЛК - облако здесь не при чем.

melky
17.11.2022, 14:11
Да, я понимаю, что облако тут не при чем. Это нормально для любого ПЛК, если так написана программа. Просто думал, раз переменные для записи true, то их можно менять и они будут сохранять свои значения.
Фактически на запрос 120 с чем-то переменных у меня уходит чуть менее 2-х секунд, с учетом чтения всех девайсов device/index и скопом всех переменных через их id - last-data + время на обработку всех переменных.

Но запись в БД выставлена раз в минуту, по этому отследить изменение переменной можно только визуально по текущим данным


2022-11-17 14:12:00 Сеанс связи с устройством [5] OwenCloud
Отправка запроса:
https://api.owencloud.ru/v1/device/index
Ответ получен за 373 мс. Статус: 200 (OK)
Содержимое ответа:
[{"id":171772,"name":"Котельная (ПЛК160_1.2.2)","identifier":"E4:1E:0A:00:0D:FA","type":"ПЛК через M
...
Отправка запроса:
https://api.owencloud.ru/v1/parameters/last-data
Ответ получен за 832 мс. Статус: 200 (OK)
Содержимое ответа:
[{"id":5885193,"values":[{"d":1668683517,"v":"1","e":"","f":"1"}]},{"id":5885178,"values":[{"d":1668
...
Получено за 1824 мс


В идеале, как выше писал, иметь возможность считывать все через last-data но с видом запроса {"device_ids" : [ id1, id2]} и ответ сделать примерно как у last-data но включить в него id устройства, и настраиваемые поля из устройства, типа (is_online, is_alarm) маской и строковой вид более расширенный. Сейчас online, offline, alarm, unreadalarm - слишком коротко и не совсем информативно, например если есть аварии должно быть что-то вроде online-alarm или offline-unreadalarm
Ну и далее скопом все переменные.

Был бы всего один штатный запрос-ответ, в котором бы было видно и состояние устройства. Иначе приходится делать два запроса

capzap
17.11.2022, 14:26
Получается, чтобы убедиться, что запись прошла мне надо период опроса в 0 выставить вместо моих 2-х минут, и то, отловить смогу только визуально.

63907а почитать документацию?

melky
17.11.2022, 14:34
capzap проверки это другая сторона вопроса, я могу выставлением параметра в Scada выполнить опрос опять всех тегов сразу после передачи команды. Опять же, запись в БД по умолчанию у меня раз в минуту, посмотреть изменение на графике только после истечении времени.

А для тестов, видимо просто нужно будет найти параметр, который можно записывать, но сам он в обратку не поменяется... Ну либо последить за текущими или настроить какой-нибудь триггер на изменение канала... Это уже дело десятое...

melky
17.11.2022, 16:17
measure - отображаемая единица изменения. Доступны следующие целочисленные варианты:
36 - A (сила тока: А)
19 - atm (давление: атм)
28 - bar (давление: Бар)
4 - deg (температура: °C)
13 - Gcal (тепловая энергия: Гкал)
8 - Gcal/h (тепловая мощность: Гкал/ч)
26 - GJ (тепловая энергия: ГДж)
33 - GJ/h (тепловая мощность: ГДж/ч)

По данной штуке объясните. Например если будет язык английский en_EN то в "measurement":
{
"title":"float", здесь в title будет соответственно A, atm, bar, deg и т.д а если ru_RU то соответственно А, атм, Бар, °C - или как? Почему было не сделать так же цифровой настройкой, которая доступна в редактировании переменной и такой же параметр mesure ?

Евгений Кислов
17.11.2022, 16:28
По данной штуке объясните. Например если будет язык английский en_EN то в "measurement":
{
"title":"float", здесь в title будет соответственно A, atm, bar, deg и т.д а если ru_RU то соответственно А, атм, Бар, °C - или как? Почему было не сделать так же цифровой настройкой, которая доступна в редактировании переменной и такой же параметр mesure ?

Да, вы понимаете правильно.
Реальный пример:



"measurement": {
"title": "А",
"name": "сила тока",
"default_precision": 3,
"visible": 1
},

melky
17.11.2022, 16:38
Только вот в списке я не увидел "float" а в демо Котельная он присутствует в одной из переменной :)
Извиняюсь, в документации по API

"measurement":
{
"title":"float",
"name":"floating point",
"precision":4,
"visible":0
}

То есть можно задавать руками, кроме выбора ?

Евгений Кислов
17.11.2022, 16:46
В документации совершенно синтетический пример - не обращайте внимание на его частные особенности.
У реальных приборов такого title быть не может.
Произвольно title задать нельзя - в web-интерфейсе он выбирается из выпадающего списка доступных единиц измерения.

melky
17.11.2022, 16:52
Понятно, просто подумал что можно добавлять свои единицы, если они отсутствуют в списке. Тем более по документации там есть разрывы в номерах.

melky
18.11.2022, 11:37
В устройстве Метеостанция 5 этаж в параметре Концентрация CO2 указан measure ppm в документации на API в списках такой не значится, какой у него код ? и почему в русском варианте он остался ppm ?

Каких еще параметров не хватает в документации а они есть ?

Евгений Кислов
18.11.2022, 12:51
В устройстве Метеостанция 5 этаж в параметре Концентрация CO2 указан measure ppm в документации на API в списках такой не значится, какой у него код ? и почему в русском варианте он остался ppm ?

Каких еще параметров не хватает в документации а они есть ?

Вот актуальный список:




4 - deg (°C, температура)
5 - kgf/cm2 (кг⋅с/см², давление)
6 - t/h (т/ч, массовый расход)
8 - Gcal/h (Гкал/ч, тепловая мощность)
9 - m3/h (м³/ч, объемный расход)
10 - kWh (кВт⋅ч, электрическая энергия)
11 - kW (кВт , электрическая мощность)
12 - t (т, масса)
13 - Gcal (Гкал, тепловая энергия)
14 - m3 (м³, объем)
16 - percent (%, процент)
17 - h (ч, время)
18 - kPa (кПа, давление)
19 - atm (атм, давление)
20 - MPa (МПа, давление)
21 - mmhg (мм рт. ст., давление)
23 - ms (мс, время)
24 - MWh (МВт⋅ч, электрическая энергия)
25 - MW (МВт, электрическая мощность)
26 - GJ (ГДж, тепловая энергия)
27 - W (Вт, электрическая мощность)
28 - bar (Бар, давление)
29 - m3/min (м³/мин, объемный расход)
30 - kg/h (кг/ч, массовый расход)
31 - J/h (Дж/ч, тепловая мощность)
32 - m3/sec (м³/сек, объемный расход)
33 - GJ/h (ГДж/ч, тепловая мощность)
34 - grad (град угол)
35 - V (В, напряжение)
36 - A (сила тока)
37 - Hz (Гц, частота)
38 - l (л, объем)
39 - m (м, длина)
41 - mm (мм, длина)
46 - sec (сек, время)
47 - mA (мА, сила тока)
48 - kVArh (кВАр⋅ч, электрическая энергия)
49 - kVAr (кВАр, электрическая мощность)
50 - n.m3 (н.куб.м, объем нормальный)
51 - m3/day (м³/сут, объемный расход)
52 - t/m3 (т/м³, плотность)
53 - km/h (км/ч, скорость)
55 - m/s (м/с, скорость)
56 - min (мин, время)
57 - mV (мВ, напряжение)
58 - mg/l (1 мг/л, концентрация)
59 - sm (см, длина)
60 - kg (кг, масса)
61 - Pa (Па, давление)
62 - mbar (мБар, давление)
63 - rpm (об/мин, частота вращения)
64 - ppm (ppm, Концентрация)
65 - ht (м, высота)
66 - kVA (кВА, Электрическая мощность)
67 - MVA (МВА, Электрическая мощность)
68 - MVAr (МВАр, Электрическая мощность)
69 - VA (ВА, Электрическая мощность)
70 - VAr (ВАр, Электрическая мощность)
71 - mS/cm (мСм/см, Электропроводность раствора)
72 - µS/cm (мкСм/см, Электропроводность раствора)
73 - mg/m3 (мг/м³, Концентрация)
74 - % RH (% RH, % относительной влажности)

melky
18.11.2022, 13:26
Спасибо, добавлю к списку... Определять только непонятно как. Попробовал язык английский запросить en-EN а получил все на русском все равно :)

melky
19.11.2022, 20:45
"sms_tag":"3ca1eed2efaa183d0f32fb68099ead8f",
"sms_code":"69353",

При записи данных, если требуется подтверждение по SMS это фиксированные данные для пользователя ?

Евгений Кислов
21.11.2022, 09:07
"sms_tag":"3ca1eed2efaa183d0f32fb68099ead8f",
"sms_code":"69353",

При записи данных, если требуется подтверждение по SMS это фиксированные данные для пользователя ?

Возможность подтверждения действий по SMS еще не поддержана.

melky
21.11.2022, 09:25
Вопрос в другом, sms_tag и sms_code будут являться постоянными для клиента или генерироваться каким-то образом и сперва необходимо будет сделать запрос на эти данные?
Просто предусматривать каким-то образом в командах или пока забить?

Евгений Кислов
21.11.2022, 09:32
Вопрос в другом, sms_tag и sms_code будут являться постоянными для клиента или генерироваться каким-то образом и сперва необходимо будет сделать запрос на эти данные?
Просто предусматривать каким-то образом в командах или пока забить?

Пока функционал не реализован - сложно сказать , какой будет реализация.

Я бы предположил, что sms_tag и sms_code будут уникальными.
Для получения sms_tag потребуется выполнять sms/status.
sms_code - это код подтверждения из полученной SMS.

melky
21.11.2022, 09:40
Хм, как все запущено :) что-то я логику тогда действия не пойму. Сперва мы должны отправить запрос на получение sms_tag и sms_code, а потом команду на изменение параметра, указав время жизни и синхронизацию и полученные sms_tag и sms_code ? Не слишком ли мудренно тогда?

А если так: Посылаем команду на изменение параметров без sms_tag и sms_code, а потом делаем запрос на получение sms_tag чтобы его отправить и дождаться sms_code и пока ждем время жизни тю-тю ?

Как-то все через пень колоду, используя авторизацию по API еще непонятно как накрутить сюда же SMS не находите?
Может подтверждение по SMS нужно только тогда, когда мы хотим изменить параметр послав команду через SMS на определенный номер пула и не пытаться это прилепить как-то к API ?

Евгений Кислов
21.11.2022, 09:53
Все ваши пожелания по API можете отправлять на owencloud@owen.ru

melky
21.11.2022, 10:14
Евгений Кислов да я как бы вообще не понимаю этого sms_tag и sms_code если мы работаем через API, потому что мы, посылая команду и так авторизовались, куда уж дальше то?. Другой вопрос, если это происходит с мобильного приложения с последующим ожиданием кода подтверждения по SMS или PUSH но опять же, как тут жить с временем жизни и тем, что и SMS и PUSH могут легко запаздывать?

Евгений Кислов
21.11.2022, 10:16
как тут жить

Уточните, что в конкретный данный момент вам мешает жить?

melky
21.11.2022, 10:29
Евгений Кислов особо пока ничего, хотел получить понимание для этих параметров, насколько они нужны, нужно ли их вообще добавлять в команду и как это потом разруливать.

Очень интересный момент обнаружился

{"sms_tag":null,"sms_code":null,"timeout":60,"sync":true,"data":[{"id":5885208,"value":"0.5"}]} - отправляемое значение в параметр ПЛК Котельная wStatus3 переводит его в 1, хотя я отправляю 0.5

А вот если отправить значение 10, то уже ошибка

Ответ получен за 205 мс. Статус: 500 (InternalServerError)
Содержимое ответа:
{"name":"Exception","message":"Некорректное значение для параметра #5885208.","code":0}

тут как-то логика ПЛК срабатывает или логика облака ?
И если послать сразу команду на два значения с ошибочным вводом, то в ответ мы получаем только Exeption по первому же параметру, а если ошибочный будет где-то в середине, не будет принят ни один параметр к записи ?

Евгений Кислов
21.11.2022, 12:08
тут как-то логика ПЛК срабатывает или логика облака ?



{
"id": 5885208,
"code": "wStatus3",
"format": 2,
"dot_point": null,
"min_val": null,
"max_val": null,
"is_writable": 1,
"default": null,
"hash": null,
"index": -1,
"address": "E",
"function": 3,
"modbus_format": 1,
"register_byte_order": 1,
"register_order": 1,
"write_function": 16,
"length_in_device": 0,
"category_id": 849873,
"can_operative": 1,
"can_configuration": 1,
"can_manageable": 1,
"in_operative": 1,
"in_configuration": 0,
"in_manageable": 1,
"in_parameters": 1,
"in_tables": 1,
"in_graphs": 1,
"in_events": 1,
"type": 0,
"modbus_multiplier": "1.0000000",
"precision": 0,
"bitmask_enabled": 1,
"bitmask_value": "4",
"name": "Насос котла 1",
"value": "0",
"formatted_value": "0",
"fault": "",
"measurement": {
"title": "",
"name": "отсутствует",
"default_precision": 3,
"visible": 0
},
"value_descriptions": []
},


Для типа BOOL (а при использовании битовой маски параметр обрабатывается как BOOL) возможны только значения 0 и 1.
И обратите внимание (на будущее) - разделителем целой и дробной части должна быть запятая, а не точка.


И если послать сразу команду на два значения с ошибочным вводом, то в ответ мы получаем только Exeption по первому же параметру, а если ошибочный будет где-то в середине, не будет принят ни один параметр к записи ?

Уточню у разработчиков и отвечу.

melky
21.11.2022, 12:16
Ну вот странно срабатывает логика, если wStatus3 либо 0 либо 1 а я записываю 0.5 и Облако/ПЛК принимает значение и переводит параметр из 0 в 1

Как раз разделитель дробной у вас . (точка) а не , (запятая) иначе Exception сразу. Так же как и при парсинге, надо парсить что будет . в разделителе дробной.
У меня был где-то код, где при парсинге пофигу на . или , но на запись это никак не влияет, я обязан с точкой передать

Занимательная арифметика, если отправить 0,4 то с 1 в 0 параметр переключится :)

Групповую запись пока не реализовывал, у меня это только через строковой ввод можно сделать, используя параметры. Думаю потом буду прикручивать, если кому-то будет интересно конечно.

Евгений Кислов
21.11.2022, 17:58
И если послать сразу команду на два значения с ошибочным вводом, то в ответ мы получаем только Exeption по первому же параметру, а если ошибочный будет где-то в середине, не будет принят ни один параметр к записи ?

Если в запросе записи хотя бы для одного записываемого параметра задано некорректное значение - то вообще ни один из параметров запроса не будет записан.
Если в запросе записи более одного записываемого параметра с некорректным значением - то в ответе будет приведен Id только первого из таких параметров.

melky
21.11.2022, 20:50
Евгений Кислов спасибо, примерно так и предполагал, что сперва обрабатывается запрос на корректность.

melky
24.11.2022, 10:43
Ссылка не тему с драйвером https://owen.ru/forum/showthread.php?t=37061

Развитие в планах, но скорее всего после НГ. При необходимости могу делать тестовые ключи на больший срок...

Николай Суриков
07.12.2022, 11:30
Два шлюза ПМ210 передают данные в облако, ПЛК210 читает данные по АПИ, все хорошо. Меняю тариф на Профи и ПЛК перестает получать данные, токен перевыпускал, через GET запрос все читается, а контроллер данные не получает. Помогите пожалуйста.
затык в блоке CloudOwenReadTP

Евгений Кислов
07.12.2022, 11:49
Два шлюза ПМ210 передают данные в облако, ПЛК210 читает данные по АПИ, все хорошо. Меняю тариф на Профи и ПЛК перестает получать данные, токен перевыпускал, через GET запрос все читается, а контроллер данные не получает. Помогите пожалуйста.
затык в блоке CloudOwenReadTP

Пост я отредактировал и не рекомендую вам проект с паролями от личного кабинета куда-то выкладывать.
Проект объемный - пожалуйста, оставьте в нем только то, что касается вашей проблемы с облаком, и после этого обеспечьте доступ по AeroAdmin.

melky
29.12.2022, 00:03
Возник затык. При создании шаблона и чтении Параметров создаются переменные. Но они при чтении last-data с пустым массивом данных, то есть параметр "values" : []

Отсюда вопрос, так задумано пустышки в приборе делать или переменная может ничего не иметь а потом бах и выдать значение ?

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

Евгений Кислов
29.12.2022, 06:18
При создании шаблона и чтении Параметров

Что именно вы шаблоном называете? Шаблон записи? Тогда о каком конкретно чтении речь?


создаются переменные.

Где именно создаются? Приложите скриншот, пожалуйста.

melky
29.12.2022, 09:07
Шаблон это мой xml, который создается на основе запроса https://api.owencloud.ru/v1/device/_id_устройства

В данных запросах присутствуют объявленные переменные и их id, я создаю список (массив) id переменных, и при запросе уже через /v1/parameters/last-data получаю пустые массивы данных на часть объявленных переменных

Содержимое ответа:
[{"id":1ххххххх,"values":[]},{"id":1ххххххх,"values":[]},{"id":1хххххххх,"values":[]},{"id":1ххххххх,"values":[]},{"id":1хххххх,"values":[]}

Вот и интересует, почему в параметрах прибора переменная есть, объявлена, но при запросе через last-data переменная пустая ?

Евгений Кислов
29.12.2022, 09:18
Шаблон это мой xml, который создается на основе запроса https://api.owencloud.ru/v1/device/_id_устройства

В данных запросах присутствуют объявленные переменные и их id, я создаю список (массив) id переменных, и при запросе уже через /v1/parameters/last-data получаю пустые массивы данных на часть объявленных переменных

Содержимое ответа:
[{"id":1ххххххх,"values":[]},{"id":1ххххххх,"values":[]},{"id":1хххххххх,"values":[]},{"id":1ххххххх,"values":[]},{"id":1хххххх,"values":[]}

Вот и интересует, почему в параметрах прибора переменная есть, объявлена, но при запросе через last-data переменная пустая ?

А какие реальные значения у этих переменных в момент отправки вашего запроса?

melky
29.12.2022, 09:27
{"id":1xxxxxxxx,"code":"UID986112","format":2,"dot_point":null,"min_val":null,"max_val":"2","is_writable":0,"default":null,"hash":null,"index":-1,"address":"1789","function":4,"modbus_format":1,"register_byte_order":1,"register_order":1,"write_function":0,"length_in_device":0,"category_id":1889036,"can_operative":1,"can_configuration":1,"can_manageable":1,"in_operative":0,"in_configuration":0,"in_manageable":0,"in_parameters":0,"in_tables":0,"in_graphs":0,"in_events":0,"type":0,"modbus_multiplier":"1.0000000","precision":0,"bitmask_enabled":0,"bitmask_value":"","name":"Статус","value":"","formatted_value":null,"fault":"","measurement":{"title":"","name":"отсутствует","default_precision":3,"visible":0},"value_descriptions":[{"value":"0","description":"Отключено"},{"value":"1","description":"Подключено"},{"value":"2","description":"Ошибка соединения"}]}

Ну вот одна из переменных, которая в last-data показывает как []

name":"Статус","value":"" - вот это непонятно, почему ничего через device/id в переменной ? формат как понимаю uint16 modbus

Евгений Кислов
29.12.2022, 10:27
Извините, я так и не понял - какое реальное значение переменной в web-интерфейсе облака, когда на запрос /v1/parameters/last-data приходит пустой values?

melky
29.12.2022, 10:50
Евгений Кислов ну тут не подскажу, уточню у владельца. Ну и по логам вечером пройдусь по всем переменным, которые возвращают пустой массив.

Посмотрел у себя в коде, вроде добавлял обработку данной ситуации, но схватил исключение. Нашел ошибку при парсинге 32-х битной переменной и не было парсинга 64-ти битной. В Демо таких переменных не было, видимо по этому и протестировать не мог.

Меня больше интересовал смысл подобных переменных, зачем добавлять переменные в устройство, у которых value = "" и соответственно при запросе через last-data массив будет пустым?
Очень много переменных, связанных с МЭ210 - Статус, Значение счетчика импульсов