Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Раздел для разработчиков по взаимодействию с ЛЭРС УЧЕТ, созданию собственных внешних модулей, экспорту/импорту данных и т.д.

Модератор: Модераторы

Ответить
asharunov
Сообщения: 15
Зарегистрирован: 14 май 2019, 09:35

Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение asharunov » 18 ноя 2019, 07:47

Добрый день. Поставлена задача организовать мониторинг доступности "Точек учета" в сети.

Было бы отлично иметь возможность через API добраться до списка IP адресов (Адрес хоста) по каждой точке учета, с настроенным автоопросом, в разрезе:

Объект учета -> Точка учета -> Автоопрос -> Подключение -> Адрес хоста
asharunov
Сообщения: 15
Зарегистрирован: 14 май 2019, 09:35

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение asharunov » 29 ноя 2019, 07:47

Добрый день, еще раз. Есть ли вероятность добавления такого функционала в API?
Аватара пользователя
Антон Чичков
Администратор
Администратор
Сообщения: 5390
Зарегистрирован: 16 мар 2010, 07:04
Откуда: Хабаровск

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение Антон Чичков » 03 дек 2019, 07:00

Добрый день!

Эта функция доступна уже сейчас. Для этого воспользуйтесь методом MeasurePoint.RefreshAsync(Core.MeasurePointInfoFlags.Equipment).
После это все подключения будут доступны в массиве
MeasurePoint.Device.PollSettings.Connections

Нужное вам значение хранится в поле Connection.InternetHost
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
asharunov
Сообщения: 15
Зарегистрирован: 14 май 2019, 09:35

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение asharunov » 03 дек 2019, 14:30

Антон Чичков писал(а):
03 дек 2019, 07:00
Добрый день!

Эта функция доступна уже сейчас. Для этого воспользуйтесь методом MeasurePoint.RefreshAsync(Core.MeasurePointInfoFlags.Equipment).
После это все подключения будут доступны в массиве
MeasurePoint.Device.PollSettings.Connections

Нужное вам значение хранится в поле Connection.InternetHost
Спасибо за ответ. Есть ли возможность добраться до всего этого через REST API?
Sly
Сообщения: 542
Зарегистрирован: 25 мар 2016, 09:10

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение Sly » 03 дек 2019, 15:11

Добраться можно попробовать через Nodes: GET /rest/v1/Nodes/{id}, там будет поле "pollConnections"
asharunov
Сообщения: 15
Зарегистрирован: 14 май 2019, 09:35

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение asharunov » 04 дек 2019, 06:10

Sly писал(а):
03 дек 2019, 15:11
Добраться можно попробовать через Nodes: GET /rest/v1/Nodes/{id}, там будет поле "pollConnections"
Правильно ли я понял, что надо вызвать функцию GetNodeByIdExtended(nodeId, flags), где

nodeId - идентификатор объекта;
flags - в моем случае будет - 16384 (pollConnections)

Источник

Код: Выделить всё

'/rest/v1/Nodes/{id}':
    get:
      tags:
        - Nodes
      summary: Возвращает объект учета по идентификатору.
      operationId: Nodes_GetById
      consumes: []
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      parameters:
        - name: id
          in: path
          description: Идентификатор объекта учета.
          required: true
          type: integer
          format: int32
        - name: flags
          in: query
          description: 'Флаг дополнительной информации. (0 - None, 1 - Systems, 2 - Customer, 4 - Serviceman, 8 - ServiceCompany, 16 - NodeGroups, 32 - BalanceFormulae, 64 - DiagSettings, 128 - Reports, 256 - Suppliers, 512 - Equipment, 1024 - Rooms, 2048 - ContractTemperature, 4096 - Signaling, 8192 - Attributes, 16384 - PollConnections, 32768 - UserDiagSettings)'
          required: false
          type: integer
          format: int32
          enum:
            - 0
            - 1
            - 2
            - 4
            - 8
            - 16
            - 32
            - 64
            - 128
            - 256
            - 512
            - 1024
            - 2048
            - 4096
            - 8192
            - 16384
            - 32768
      responses:
        '200':
          description: Успешно
          schema:
            $ref: '#/definitions/Node'
        '401':
          description: Ошибка входа в систему.
        '500':
          description: Необработанная ошибка сервера.
        '502':
          description: Внутренняя ошибка сервера.
        '504':
          description: Вышло время ожидания.
Sly
Сообщения: 542
Зарегистрирован: 25 мар 2016, 09:10

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение Sly » 04 дек 2019, 06:32

Сам только начал разбираться в REST, у меня выглядит немного не так, как у вас. Использую лэрс 3.32.7
Где вы нашли функцию GetNodeByIdExtended(nodeId, flags) ?
У меня запрос к серверу выглядит так:
http://10.104.0.30/rest/v1/Nodes/2?flag ... onnections
flags так и пишу "PollConnections", зачем его переводить в цифру, пусть сервер сам это делает.
Ответ приходит с полем "PollConnections":
"pollConnections": [
{
"id": 95,
"commLinkType": "Ip",
"dialNumber": "",
"connectionTimeout": 30,
"imitateModem": false,
"portSpeed": 0,
"flowControl": "None",
"protocol": 0,
"gprsCallType": "None",
"gprsAutoDisconnect": false,
"commDevice": null,
"commDevicePort": null,
"commDevicePortSettings": null,
"isNetwork": false,
"internetHost": "95.82.198.154",
"internetPort": 4001,
"pollPortId": null,
"pollPortGroupId": null,
"title": "Интернет, 95.82.198.154:4001"
},
{
"id": 192,
"commLinkType": "Gprs",
"dialNumber": "",
"connectionTimeout": 60,
"imitateModem": false,
"portSpeed": 0,
"flowControl": "None",
"protocol": 0,
"gprsCallType": "None",
"gprsAutoDisconnect": false,
"commDevice": {
"model": {
"isSystem": true,
"title": "Стандартный GPRS-модем",
"longTitle": "",
"capabilities": "CommunicationDevice",
"comment": "",
"serialNumberFormat": "",
"serialNumberComment": "",
"stateRegisterNumber": "",
"calibrationInterval": 0,
"supportedSystemTypes": "None",
"isTemperatureSensor": false,
"isPressureSensor": false,
"isFlowSensor": false,
"isElectricMeter": false,
"hasDataInterface": true,
"hasDriverInterface": false,
"commDeviceFeatures": "None",
"supportedCommLinks": "Gprs",
"supportedCallTypes": "Voice, Csd, Sms",
"commDevicePorts": [],
"isGenerigGprsModem": true,
"dryContactCount": 0,
"isGauge": false,
"isSensor": false,
"isCommunicationDevice": true,
"isSignaling": false,
"isRegulator": false,
"isOther": false,
"isModified": false,
"id": 225,
"isInvalidRecord": false,
"isNewRecord": false
},
"serialNumber": "999",
"sealNumber": "",
"comment": "20150",
"lastCalibrationDate": null,
"scheduledCalibrationDate": null,
"modification": null,
"password": "",
"secondLevelPassword": "",
"networkAddress": "",
"isShared": false,
"lastReadParameters": null,
"commDevice": {
"identifier": null,
"gprsPollPortId": 104,
"enableKeepAlive": false,
"imei": null,
"isOnline": true,
"isModified": false
},
"data": {},
"isModified": false,
"availableInfo": "None",
"id": 461,
"isInvalidRecord": false,
"isNewRecord": false
},
"commDevicePort": null,
"commDevicePortSettings": null,
"isNetwork": false,
"internetHost": "",
"internetPort": 0,
"pollPortId": null,
"pollPortGroupId": null,
"title": "Подключение #1"
},
{
"id": 193,
"commLinkType": "Gsm",
"dialNumber": "+79126010155",
"connectionTimeout": 35,
"imitateModem": false,
"portSpeed": 0,
"flowControl": "None",
"protocol": 0,
"gprsCallType": "None",
"gprsAutoDisconnect": false,
"commDevice": null,
"commDevicePort": null,
"commDevicePortSettings": null,
"isNetwork": false,
"internetHost": "",
"internetPort": 0,
"pollPortId": null,
"pollPortGroupId": null,
"title": "Подключение #2"
}
],
asharunov
Сообщения: 15
Зарегистрирован: 14 май 2019, 09:35

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение asharunov » 04 дек 2019, 07:15

Sly писал(а):
04 дек 2019, 06:32
Сам только начал разбираться в REST, у меня выглядит немного не так, как у вас. Использую лэрс 3.32.7
Где вы нашли функцию GetNodeByIdExtended(nodeId, flags) ?
У меня запрос к серверу выглядит так:
http://10.104.0.30/rest/v1/Nodes/2?flag ... onnections
flags так и пишу "PollConnections", зачем его переводить в цифру, пусть сервер сам это делает.
Ответ приходит с полем "PollConnections":
Спасибо, буду разбираться
asharunov
Сообщения: 15
Зарегистрирован: 14 май 2019, 09:35

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение asharunov » 04 дек 2019, 15:11

Может кто подскажет, что я делаю не так?

Захожу на сервере в Описание веб-сервиса доступа к данным с архитектурой REST

Заполняю веб форму для POST /auth/v2/token

Запрос:

Код: Выделить всё

curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' -d 'username=admin&password=******&grant_type=******' 'http://***.*******.com:8080/auth/v2/token'
Все отлично, ответ:

Код: Выделить всё

{
  "access_token": "XNtS449TWx_o4aRx0J....",
  "token_type": "bearer",
  "expires_in": 2591999,
  "userName": "Администратор",
  "isAdmin": "true",
  "permissions": "[\"EditReportGeneratingTask\",\"Activation\",\"EditPlugins\",\"EditSystemParameters\",\"CloseUserSession\",\"ViewAccountLog\",\"ViewUserSessionLog\",\"ViewMessageLog\",\"GetUserSessionList\",\"ViewSystemLog\",\"ViewLogFiles\",\"EditAnnouncement\",\"EditOwnNotificationSettings\",\"EditAccount\",\"BackupDatabase\",\"InstallSystemUpdate\",\"ContractAnalysis\",\"TemperatureChart\",\"ViewDeviceEvents\",\"ViewDeviceConfig\",\"ViewData\",\"SaveData\",\"ExportToXml80020\",\"ViewMap\",\"CloseIncident\",\"ViewIncident\",\"DeleteIncident\",\"CallGprsController\",\"PollCurrents\",\"DisconnectGprsController\",\"ViewPollSession\",\"ViewControllersStatistics\",\"ViewGsmStatistics\",\"AllowAnyPollPort\",\"ForceStopPoll\",\"ManualPoll\",\"RemoteConsole\",\"PollQueueControl\",\"ViewPreparedReport\",\"PrintReport\",\"EditReportTemplate\",\"EditReport\",\"DeletePreparedReport\",\"HouseBalance\",\"TenantOffice\",\"EditRoom\",\"ManualInputCounterTotals\",\"HouseSummary\",\"DeleteRoom\",\"SendMessage\",\"ControlMessageQueue\",\"MoveMeasurePoint\",\"BrowseNonPublicNodeFile\",\"EditBalanceGroup\",\"EditNodeGroup\",\"EditInspector\",\"EditMap\",\"EditEquipmentModel\",\"EditEquipment\",\"EditServiceman\",\"EditServiceCompany\",\"EditNode\",\"EditCustomer\",\"EditNodeJob\",\"EditServicingStatuses\",\"EditNodeJobResolution\",\"EditSupplier\",\"EditPollPort\",\"EditOutdoorTemperature\",\"EditTerritory\",\"EditMeasurePoint\",\"DeleteNode\",\"DeleteMeasurePoint\",\"DeleteEquipment\"]",
  "tenantOfficeOnly": "false",
  ".issued": "Wed, 04 Dec 2019 11:21:53 GMT",
  ".expires": "Fri, 03 Jan 2020 11:21:53 GMT"
}
Пытаюсь реализовать это через PHP:

Код: Выделить всё

$curl = curl_init();
 	    curl_setopt($curl, CURLOPT_URL, "http://***.******.com:8080/auth/v2/token");
            curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0");
            curl_setopt($curl, CURLOPT_HEADER, 0); 
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); 
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
            curl_setopt($curl, CURLOPT_POST, 1); 
            curl_setopt($curl, CURLOPT_POSTFIELDS, array("username" => *****, "password" => ******, "grant_type" => "password"));
            curl_setopt($curl, CURLOPT_HTTPHEADER, array('POST', '/auth/v2 HTTP/1.1', 'Content-Type: application/x-www-form-urlencoded', 'Accept: application/json; charset=UTF-8'));
            $out = curl_exec($curl);
            curl_close($curl);
            return json_decode($out, true);
Ответ всегда один:

Код: Выделить всё

{"error":"unsupported_grant_type"}
Михаил Ключко
Разработчик
Разработчик
Сообщения: 570
Зарегистрирован: 24 авг 2011, 09:16

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение Михаил Ключко » 05 дек 2019, 03:19

Возможно нужно отправлять

Код: Выделить всё

'POST /auth/v2 HTTP/1.1'
одной строкой

Код: Выделить всё

curl_setopt($curl, CURLOPT_HTTPHEADER, array('POST /auth/v2 HTTP/1.1', 'Content-Type: application/x-www-form-urlencoded', 'Accept: application/json; charset=UTF-8'));

Также посмотрите похожую тему про php.

Скопирую последний ответ из темы:
В версии R28 мы доработали OpenApi документацию для нашего нового Rest Api. OpenApi документация - это файл генерируемый веб-интерфейсом, который содержит описание API согласно спецификации OpenApi.
Мы рекомендуем использовать наш новый Rest Api.

Поддержка спецификации OpenApi позволяет сформировать исходный код для работы с API автоматически используя специальные утилиты, например Swagger Codegen. Для генерации исходного кода следуйте инструкции Getting Started.
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
asharunov
Сообщения: 15
Зарегистрирован: 14 май 2019, 09:35

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение asharunov » 05 дек 2019, 06:49

Михаил Ключко писал(а):
05 дек 2019, 03:19
Возможно нужно отправлять
одной строкой
Спасибо за версию, не помогло.

С генерацией кода через Swagger Codegen надо разбираться конечно.

Где можно посмотреть версию R** (R27)?
Аватара пользователя
Константин Коротких
Разработчик
Разработчик
Сообщения: 6134
Зарегистрирован: 01 сен 2015, 08:29

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение Константин Коротких » 05 дек 2019, 07:34

Ссылки на предыдущие версии ЛЭРС УЧЕТ в теме Предыдущие версии ЛЭРС УЧЁТ.
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
asharunov
Сообщения: 15
Зарегистрирован: 14 май 2019, 09:35

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение asharunov » 06 дек 2019, 06:25

Может у кого-то уже настроен генератор кода Swagger Codegen?
Помогите сгенерировать хотя бы код авторизациии на php для "/auth/v2/token"
Михаил Ключко
Разработчик
Разработчик
Сообщения: 570
Зарегистрирован: 24 авг 2011, 09:16

Re: Добавить возможность через API добраться до списка IP адресов по каждой точке учета в автоопросе

Сообщение Михаил Ключко » 06 дек 2019, 07:55

Вы можете перейти на сайт app.swaggerhub.com и справа выбрать Export - Client SDK - php
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
Ответить