ul-data-logger-api-sdk 3.3.1__tar.gz → 3.3.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ul-data-logger-api-sdk
3
- Version: 3.3.1
3
+ Version: 3.3.3
4
4
  Summary: Data logger API sdk
5
5
  Author: Unic-lab
6
6
  License-Expression: MIT
@@ -26,6 +26,10 @@ from data_logger_api_sdk.types.api_base_stations import (
26
26
  ApiBaseStationSystemLogsListResult,
27
27
  )
28
28
  from data_logger_api_sdk.types.api_bs_traffic_stats import ApiBsTrafficStatsResponse, ApiDeviceTrafficStatsQuery
29
+ from data_logger_api_sdk.types.api_uplink_signal import (
30
+ ApiDeviceUplinkSignalLatestResponse,
31
+ ApiDeviceUplinkSignalsListResult,
32
+ )
29
33
  from data_logger_api_sdk.types.api_device_data_history import ApiDeviceDataHistoryBody, ApiDeviceDataHistoryResponse
30
34
  from data_logger_api_sdk.types.api_last_bs_data_by_device_macs import ApiDeviceLastBsDataResponse, ApiDeviceMacsListBodyModel
31
35
  from data_logger_api_sdk.types.api_packet_types import ApiPacketTypesListResponse
@@ -191,6 +195,29 @@ class DataLoggerApiSdk:
191
195
  )
192
196
  return ApiBaseStationsListResult(items=items, total_count=total_count)
193
197
 
198
+ def get_uplink_signal_latest(
199
+ self,
200
+ limit: int,
201
+ offset: int = 0,
202
+ macs: List[int] | None = None,
203
+ ) -> ApiDeviceUplinkSignalsListResult:
204
+ """GET /uplink-signal-latest — последний uplink-сигнал каждого мака.
205
+
206
+ Последний по метеру, группировка по маку (один мак = одна строка);
207
+ macs — рантайм-фильтр по конкретным устройствам. bs_id —
208
+ идентификатор БС Data Logger (= external_bs_id потребителя).
209
+ """
210
+ query: Dict[str, Any] = {"limit": limit, "offset": offset}
211
+ if macs:
212
+ query["mac"] = macs
213
+ items, total_count = self._request_list_payload_once(
214
+ ApiMethod.GET,
215
+ "/uplink-signal-latest",
216
+ List[ApiDeviceUplinkSignalLatestResponse], # type: ignore
217
+ query,
218
+ )
219
+ return ApiDeviceUplinkSignalsListResult(items=items, total_count=total_count)
220
+
194
221
  def get_base_station(
195
222
  self,
196
223
  base_station_id: UUID,
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ul-data-logger-api-sdk"
7
- version = "3.3.1"
7
+ version = "3.3.3"
8
8
  description = "Data logger API sdk"
9
9
  license = "MIT"
10
10
  requires-python = ">=3.14"
@@ -65,7 +65,12 @@ class ApiBaseStationDetailResponse(ApiBaseStationResponse):
65
65
 
66
66
 
67
67
  class ApiBaseStationLogResponse(JsonApiResponsePayload):
68
- """Элемент ответа GET /base-stations/<uuid>/logs (ApiBsLogsResponse на стороне Data Logger)."""
68
+ """Элемент ответа GET /base-stations/<uuid>/logs (ApiBsLogsResponse на стороне Data Logger).
69
+
70
+ rssi/snr/protocol_type/packet_type_name/network_sys_type/error_* обогащаются
71
+ из сырого документа пакета (блок meta.bs_http / meta.nbfi_bs0); null, если
72
+ документа нет или в нём нет этих полей.
73
+ """
69
74
 
70
75
  id: UUID4
71
76
  date_created: datetime
@@ -83,6 +88,14 @@ class ApiBaseStationLogResponse(JsonApiResponsePayload):
83
88
 
84
89
  external_document_id: UUID4 | None = None
85
90
 
91
+ rssi: int | None = None
92
+ snr: int | None = None
93
+ protocol_type: str | None = None
94
+ packet_type_name: str | None = None
95
+ network_sys_type: str | None = None
96
+ error_message: str | None = None
97
+ error_type: str | None = None
98
+
86
99
 
87
100
  class ApiBaseStationLogDetailResponse(ApiBaseStationLogResponse):
88
101
  """Ответ GET /base-stations/<uuid>/logs/<uuid> — лог с сырым JSON пакета (ApiBsLogDetailResponse в DL)."""
@@ -0,0 +1,29 @@
1
+ from datetime import datetime
2
+ from typing import List, NamedTuple
3
+
4
+ from pydantic import UUID4
5
+ from ul_api_utils.api_resource.api_response import JsonApiResponsePayload
6
+
7
+
8
+ class ApiDeviceUplinkSignalLatestResponse(JsonApiResponsePayload):
9
+ """Последний uplink-сигнал мака: элемент ответа GET /uplink-signal-latest.
10
+
11
+ bs_id — идентификатор базовой станции Data Logger (у потребителя unified
12
+ API это external_bs_id, маппинг по серийнику не нужен); bs_identifier —
13
+ серийный номер БС. packet_date — время последнего пакета устройства.
14
+ """
15
+
16
+ mac: int
17
+ device_id: UUID4
18
+ bs_id: UUID4 | None = None
19
+ bs_identifier: str | None = None
20
+ rssi: int | None = None
21
+ snr: int | None = None
22
+ packet_date: datetime | None = None
23
+
24
+
25
+ class ApiDeviceUplinkSignalsListResult(NamedTuple):
26
+ """Результат спискового вызова: страница элементов и total_count."""
27
+
28
+ items: List[ApiDeviceUplinkSignalLatestResponse]
29
+ total_count: int