Использование API веб-сервиса в PowerShell

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

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

Закрыто
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Использование API веб-сервиса в PowerShell

Сообщение EMZ » 24 окт 2018, 23:52

Подскажите, вот здесь: http://docs.lers.ru/docs/pages/viewpage ... Id=3408139 актуальная информация? Методы не соответствуют методам описанным вот тут: http://docs.lers.ru/docs/pages/viewpage ... Id=3407987

Что-то не получается потребление по точке учета забрать, как в примере. Список точек забираю, а потребление - нет.
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Использование API веб-сервиса в PowerShell

Сообщение EMZ » 25 окт 2018, 06:39

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

Скрипт:
$url = "*замазано*"

# Создаем прокси класс для работы со службой
$webservice = New-WebServiceProxy -uri $url

# Устанавливаем куки-контейнер, необходим для авторизации пользователя
$webservice.CookieContainer = New-Object System.Net.CookieContainer

# Входим в систему ЛЭРС УЧЕТ
$response1 = $webservice.Login('*замазано*', '*замазано*')

# Если произошла ошибка, прекращаем работу
if($response1.IsError -eq $true){
Write-Host $response1.ErrorMessage
exit
}

# Получаем список точек учета
$response2 = $webservice.GetMeasurePointList()
if ($response2.MeasurePointList.Length -le 0) {
Write-Host 'Список точек учета пуст'
exit
}
$endDate = [DateTime]::Today
$startDate = New-Object DateTime($endDate.Year, $endDate.Month, 1)
foreach ($mp in $response2.MeasurePointList)
{
Write-Host $mp.Number '_' $mp.FullTitle '_' $mp.Title
Write-Host $mp.systemtype
$response3 = $webservice.GetMeasurePointConsumption($mp.Number, $startDate, $endDate, "Day")
if($response3.Data.Length -gt 0){
# Выводим таблицу значений
foreach ($data_ in $response3.Data) {
Write-Host $data_.DateTime ': T_in=' $data_.T_in ': T_out=' $data_.T_out ': Q_in=' $data_.Q_in ': Q_out=' $data_.Q_out ': Q_delta=' $data_.Q_delta
}
}
Write-Host '------------------------------------------------------------------------------'
}
Результат (часть, которой быть не должно):
277 _ *замазано* _ Электроснабжение
Electricity
01.10.2018 0:00:00 : T_in= 45,8600006103516 : T_out= : Q_in= 0,00700000021606684 : Q_out= : Q_delta= 0,00700000021606684
02.10.2018 0:00:00 : T_in= 52,1399993896484 : T_out= : Q_in= 0,0230000000447035 : Q_out= : Q_delta= 0,0230000000447035
03.10.2018 0:00:00 : T_in= 50,3800010681152 : T_out= : Q_in= 0,0160000007599592 : Q_out= : Q_delta= 0,0160000007599592
04.10.2018 0:00:00 : T_in= 52,8199996948242 : T_out= : Q_in= 0,0199999995529652 : Q_out= : Q_delta= 0,0199999995529652
05.10.2018 0:00:00 : T_in= 49,7000007629395 : T_out= : Q_in= 0,0120000001043081 : Q_out= : Q_delta= 0,0120000001043081
06.10.2018 0:00:00 : T_in= 51,7000007629395 : T_out= : Q_in= 0,00800000037997961 : Q_out= : Q_delta= 0,00800000037997961
07.10.2018 0:00:00 : T_in= 38,2599983215332 : T_out= : Q_in= 0 : Q_out= : Q_delta= 0
08.10.2018 0:00:00 : T_in= 47,4099998474121 : T_out= : Q_in= 0,00499999988824129 : Q_out= : Q_delta= 0,00499999988824129
09.10.2018 0:00:00 : T_in= 50,1399993896484 : T_out= : Q_in= 0,0109999999403954 : Q_out= : Q_delta= 0,0109999999403954
10.10.2018 0:00:00 : T_in= 52,2700004577637 : T_out= : Q_in= 0,0179999992251396 : Q_out= : Q_delta= 0,0179999992251396
11.10.2018 0:00:00 : T_in= 51,1599998474121 : T_out= : Q_in= 0,0160000007599592 : Q_out= : Q_delta= 0,0160000007599592
12.10.2018 0:00:00 : T_in= 52,0499992370605 : T_out= : Q_in= 0,0199999995529652 : Q_out= : Q_delta= 0,0199999995529652
13.10.2018 0:00:00 : T_in= 48,939998626709 : T_out= : Q_in= 0,00899999961256981 : Q_out= : Q_delta= 0,00899999961256981
14.10.2018 0:00:00 : T_in= 37,9599990844727 : T_out= : Q_in= 0,00100000004749745 : Q_out= : Q_delta= 0,00100000004749745
15.10.2018 0:00:00 : T_in= 45,9000015258789 : T_out= : Q_in= 0,00800000037997961 : Q_out= : Q_delta= 0,00800000037997961
16.10.2018 0:00:00 : T_in= 50,310001373291 : T_out= : Q_in= 0,0140000004321337 : Q_out= : Q_delta= 0,0140000004321337
17.10.2018 0:00:00 : T_in= 49,9099998474121 : T_out= : Q_in= 0,0130000002682209 : Q_out= : Q_delta= 0,0130000002682209
18.10.2018 0:00:00 : T_in= 52,1100006103516 : T_out= : Q_in= 0,0209999997168779 : Q_out= : Q_delta= 0,0209999997168779
19.10.2018 0:00:00 : T_in= 51,2599983215332 : T_out= : Q_in= 0,0199999995529652 : Q_out= : Q_delta= 0,0199999995529652
20.10.2018 0:00:00 : T_in= 50,25 : T_out= : Q_in= 0,00899999961256981 : Q_out= : Q_delta= 0,00899999961256981
21.10.2018 0:00:00 : T_in= 31,9699993133545 : T_out= : Q_in= 0 : Q_out= : Q_delta= 0
22.10.2018 0:00:00 : T_in= 42,7400016784668 : T_out= : Q_in= 0,00400000018998981 : Q_out= : Q_delta= 0,00400000018998981
23.10.2018 0:00:00 : T_in= 50,8800010681152 : T_out= : Q_in= 0,0179999992251396 : Q_out= : Q_delta= 0,0179999992251396
24.10.2018 0:00:00 : T_in= 49,5099983215332 : T_out= : Q_in= 0,017000000923872 : Q_out= : Q_delta= 0,017000000923872
25.10.2018 0:00:00 : T_in= 31,3633346557617 : T_out= : Q_in= 0 : Q_out= : Q_delta= 0
------------------------------------------------------------------------------
Безымянный.png
Безымянный.png (3.6 КБ) 1729 просмотров
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 6928
Зарегистрирован: 02 мар 2016, 05:45

Re: Использование API веб-сервиса в PowerShell

Сообщение Иван Славный » 25 окт 2018, 08:46

Спасибо за обращение! Действительно информация в примере несколько устарела. Мы обновили статью с примером работы на PowerShell.
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Использование API веб-сервиса в PowerShell

Сообщение EMZ » 25 окт 2018, 12:43

Спасибо за обновление, но при выполнении
$response3 = $webservice.GetMeasurePointConsumption($mp.id, $startDate, $endDate, [LersWebserviceNamespace.DeviceDataType]::Day.value__)
возникает ошибка:
Невозможно найти тип [LersWebserviceNamespace.DeviceDataType]: убедитесь в том, что сборка, содержащая этот тип, загружена.
D:\temp\БезИмени1.ps1:30 знак:126
+ $response3 = $webservice.GetMeasurePointConsumption($mp.id, $startDate, $endDate, [LersWebserviceNamespace.DeviceDataType] <<<< ::Day.value__)
+ CategoryInfo : InvalidOperation: (LersWebserviceNamespace.DeviceDataType:String) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Использование API веб-сервиса в PowerShell

Сообщение EMZ » 25 окт 2018, 13:41

Вот так - отрабатывает без ошибок:
$response3 = $webservice.GetMeasurePointConsumption($mp.id, $startDate, $endDate, 'Day')
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Использование API веб-сервиса в PowerShell

Сообщение EMZ » 25 окт 2018, 21:58

Я так понимаю, что выражение [LersWebserviceNamespace.DeviceDataType]::Day.value__ должно возвращать значение 64, как указано в этой дкументации.
Возможно, у вас этот код работает, потому что у вас установлен lers framework, и где-то в скрипте подключен модуль. У меня же на компьютере код не работает, хотя установлен клиент ЛЭРС - та же ошибка. Видимо, нужно что-то подключить.

Я проверил - метод GetMeasurePointConsumption работает с указанием последнего параметра в виде строкового значения.
Исправьте документацию.
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Использование API веб-сервиса в PowerShell

Сообщение EMZ » 25 окт 2018, 22:24

Как получить интеграторы по точке учета? С помощью GetMeasurePointTotals почему-то не получается - в $response3 ничего не возвращается.
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 6928
Зарегистрирован: 02 мар 2016, 05:45

Re: Использование API веб-сервиса в PowerShell

Сообщение Иван Славный » 26 окт 2018, 05:12

Мы проверили работоспособность скрипта на машине, на которой не установлен ЛЭРС УЧЕТ. Все прекрасно работает.
Предложенный вами вариант тоже работает. Скорее всего в PowerShell происходит автоматическая подстановка значения элемента перечисления по его имени.
Документация не требует каких либо исправлений, так как в ней все написано верно. По факту функция GetMeasurePointConsumption принимает значение элемента перечисления.
EMZ писал(а):Невозможно найти тип [LersWebserviceNamespace.DeviceDataType]: убедитесь в том, что сборка, содержащая этот тип, загружена.
Данная ошибка вызвана скорее всего тем, что вы не указали пространство имен "LersWebserviceNamespace" при инициализации $webservice. Посмотрите внимательно обновленный пример. Лучше всего скопируйте его полностью и проверьте его работоспособность.
EMZ писал(а):Как получить интеграторы по точке учета? С помощью GetMeasurePointTotals почему-то не получается - в $response3 ничего не возвращается.
У нас на форуме существует правило: один вопрос - одна тема. Создайте, пожалуйста, отдельную тему по данному вопросу.
EMZ
Сообщения: 136
Зарегистрирован: 04 мар 2016, 14:57

Re: Использование API веб-сервиса в PowerShell

Сообщение EMZ » 26 окт 2018, 06:46

Всё, разобрался. Закрывайте тему.
Закрыто