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

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

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

Объект учета → Точка учета → Автоопрос → Подключение → Адрес хоста

Добрый день, еще раз. Есть ли вероятность добавления такого функционала в API?

Добрый день!

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

Нужное вам значение хранится в поле Connection.InternetHost

Спасибо за ответ. Есть ли возможность добраться до всего этого через REST API?

Добраться можно попробовать через 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: Вышло время ожидания.

Сам только начал разбираться в REST, у меня выглядит немного не так, как у вас. Использую лэрс 3.32.7
Где вы нашли функцию GetNodeByIdExtended(nodeId, flags) ?
У меня запрос к серверу выглядит так:
http://10.104.0.30/rest/v1/Nodes/2?flags=PollConnections
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
}
],

Спасибо, буду разбираться

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

Захожу на сервере в Описание веб-сервиса доступа к данным с архитектурой 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"}

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

'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.

Спасибо за версию, не помогло.

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

Где можно посмотреть версию R** (R27)?

Ссылки на предыдущие версии ЛЭРС УЧЕТ в теме Предыдущие версии ЛЭРС УЧЁТ.

Может у кого-то уже настроен генератор кода Swagger Codegen?
Помогите сгенерировать хотя бы код авторизациии на php для “/auth/v2/token”

Вы можете перейти на сайт app.swaggerhub.com и справа выбрать Export - Client SDK - php